{"_id":"type-comparator","_rev":"31-5adf2b3f689d363c93444860eac815d9","name":"type-comparator","dist-tags":{"latest":"0.2.10","next":"0.2.10-3"},"versions":{"0.0.1":{"name":"type-comparator","version":"0.0.1","description":"Useful comparator functions written on Typescript","main":"dist/index.js","typings":"dist/index.d.ts","scripts":{"test":"jest","build":"tsc","clean":"rimraf dist","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"gitHead":"855e12996f2b89e0966896ab06c5eae0c4f86943","_id":"type-comparator@0.0.1","_npmVersion":"6.1.0","_nodeVersion":"10.15.1","_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"dist":{"integrity":"sha512-4wmvQ7T9r8AcT6GRPkl1lQC8M2XAuYxo3Fn/DV+zjws+/EUgNl6ZMfZSnH612AnBC7rtE6Jt7eezB+4rDVJP3Q==","shasum":"0d6c6c300bedbf4b5ad51f72dbcf56807f61488c","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.0.1.tgz","fileCount":116,"unpackedSize":119180,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcZlquCRA9TVsSAnZWagAAqNIP/164nXYPiA3quiXbBw6Q\nm9fMhvs70eFZWt4tlB8I4vSzJeZH6xlXvrX4rTI0/NDwDc2K6a+EMZIhH8d2\niqi45SS61BuShAFReT31f+Wtw3qULpYKLisy1sQGZPuQ9CRHQdwLhU7awtZ2\nCURzb/jXwZOImqIME7Q3ZDxsEUSNhPYzVsexRPVZiQqxXK1yVqWNI+WRIY/8\nCfNwgO8q/9M2do+aQEbjtVHHVVgHgIobZT2aR3qalVdPRxwsf+1cspuUuEb4\nFCc4t5aq8fkzY6ogbS1GhPIZLtiizZWbplUiSdf+oAvguaCTnOU1auYvQKaZ\nxVWRJ4rK1suMKGXB2ZbiDR/rdA4LGKPMmbn0OCk11aY4kfyf64tpGPTuzhnX\nX7jcZ5qfXZJm+vW5jwolJHh9EYMqL33AAPEXyKUwmE0HvwO1wh6WCKShQ4/d\nrrqhzTRdkJ+8Txw+ZqYBUKSKADrlbSepNatTEL7/QQA0iGXmHAqkO/lmYo4/\nt8vxNyogjr82pczoU94a/E+VwpHc/HA89IlNbmSOFkkx15D2d1CPIysnntId\nWEiAoR7P5tpF0oCOCCUiPDUEGTUKByLDAyDGusmlaD1QGx9XaSgq8Porr9og\nBONR6CBYkrQ8L2Jip6BiAMi7l7ymIej+AGxKb+Auri+sUNEVb+xMHbAhBubi\nUZV9\r\n=jrAj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDP4QhJCu1D7xxbggHYjlBHmxyj2Gy7f+fc0m7o4a/AiAiAEi1YqZtInvmwxATujMVLRXR6tzPaewr8OaeRzVLVWMw=="}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.0.1_1550211757959_0.6035041327233439"},"_hasShrinkwrap":false},"0.0.2":{"name":"type-comparator","version":"0.0.2","description":"Useful comparator functions written on Typescript","main":"dist/index.js","typings":"dist/index.d.ts","scripts":{"test":"jest","build":"tsc","clean":"rimraf dist","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"62b5447d52a162883a21f66a6fd3d3db44ca23c2","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.0.2","_npmVersion":"6.1.0","_nodeVersion":"10.15.1","_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"dist":{"integrity":"sha512-KrESvAmRNsJng2sz+CDVE6D7RPqj3r3W0qMvINGJ+/QeOo3b8YEavV2ST/baoJvv8jBV94qRLi+rACxCXrmjIg==","shasum":"0da09b533edc9f9bc7a7662182b19cf624550f3d","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.0.2.tgz","fileCount":125,"unpackedSize":125284,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcZmXICRA9TVsSAnZWagAATesP/AjW3eBzcMxlt/erN/BA\ndLd/hMX11v45TTCLmjUM0btMEcuUo8Lp3dAO+fiNGbyx3WoejJYz6bvWmDP3\nhRFN+ng7W/rv0iF5CM8Sl5ffexnHcv4XQCJawGfdh0mlLZzqygqJwf42OVZT\nkX0+hG2wxdxwrXpzV0IIDA0BCXCeh6XiEtFPgGZ+YfhedmnwpWs+OF2UXb27\nuxCVtLi8WDtpP46vOwBLC3qr3LAwIiPRBxt7UJm/JnQLbtRdJ94qWK3bl4aN\n3V01fPCLOq0B5DbTkCuOEInYhvjvtqeug4Km0X01RpmbVG+oi0HDe2Ybv+H1\nFHv1VasmEKcQmTpzZZlk/PbVGirutq/fjd1swLYKt4lOd9KeffbIv7EwCycs\nOXo35L75XqAmuygzjWCYWABENDKlLEvoSeOQvN/8crTsHS1e3YlfXn8ORLaB\niHiWpLFYaRO7n7tA8PVx/lnsRI021OB+l3ZcuK+eEle/Z8dXiE2tFXycRiXP\nrgRmZLyT3JXZ+IUGLZLbJqHlAPZIF9lMa81+8WoXwO9Pr5UMiFPuQnjZwIh2\nZtjmDuz7EO48d2ph9nm1rEDGtRJ9aox8doci/BwnrQJfYS+lQ41fOlDks1rx\nFun/Hns9dX9qM0PX/QXBHlFdIdlejFgsiRMec6XEukD/fqCUSDOxHqsQ6ePR\nIVVY\r\n=Wsr8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBKPHYMEubLAHIYa+Y9/ZnXF9qk7XqsK3FIByOM6DYaPAiAkqv3zk3MXN7489FjqlnB+XY1ZO/Fef1v+kSozYmfxTw=="}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.0.2_1550214600318_0.5791843153590575"},"_hasShrinkwrap":false},"0.1.1":{"name":"type-comparator","version":"0.1.1","description":"Useful comparator functions written on Typescript","main":"dist/index.js","typings":"dist/index.d.ts","scripts":{"test":"jest","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"b229d17b79e0e0be5ee3e9b40ddd68d44e7ad6ab","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.1.1","_npmVersion":"6.1.0","_nodeVersion":"10.15.1","_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"dist":{"integrity":"sha512-CfHdhFjruS/J3S3NQI0Q8+FT73o0XS74AxCG5fFPCG01Rq+ZXL3ksivSa+GRBGl18VmqdhOjre+h8AP9wTP2nw==","shasum":"b6fac6b38a20bad2e2b638c5cdbfe03e791673d1","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.1.1.tgz","fileCount":215,"unpackedSize":175647,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcap/ECRA9TVsSAnZWagAAnQkQAI2yFXnECwgaBQizYf1K\nNTICry6kbioivaeVTY9VCx+d/UkpHxIkmb3ukEcSfDg2zZIFsloirGbIlRTW\n8e3ezULspImY0esRW/3zqAdJ71UvaED7O+zq8HXTu8KGv1RBDL74wggxHlS4\nEcghIOhDD0KWSCM8HGSrrLtBUNvqNdtPEpjbcxLNLIMLnxm2AwE1dlBPYdUd\nPZ7WmYvw6PU2iNp22AzIkwEKsJ4Uh8pVIuq1K9LzWzvLZwVEmlMWda9Ah2nZ\n7eXvEjPD0rvkwKGbC/vAGqUGl5+ckbTjU++CN/uWKBXHMtEpMlyW19o9lj9w\naEAVz9AXQ5ESLCVrxTSll+0UNVNDnKywiepWRt7CHQojGsqNkm4rwyuvlwjy\n6K/7eBWep2puoPdJPw15pStsZU2eWY33upZ28HaeW1fNxC5OTZQKt1tOgrGr\nmdjtAwPoIXGbOaqqVTcFd77gFLW21vddUyUp3oykSZn32brK1X6X4WwlmYsT\nITeKSIIrIM7TDDmIfRsL6JokVZArzLvEdyWj9UT+xTlMUeWn81R9d5cfjdWZ\nsH3nV77K3CwqpDhlSO8Y7Udixwg0qPMeCHDzF7cSF7AzpUXOVbS2lrk+hYlO\nbG7qRlmYfsa6IWJj/HoDH/9Uvq2vdf/gjvxZPz12ztRW71uZffpy3vvOchwE\nl8te\r\n=jjaJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHcM+LyUAz5rLvm4CmQ5m2HdCGsdJQJ0/I2/AEv/sHYoAiEAokcc6j6nh4PLDRNu3ZIrWmkpsykci9qV7hQ1UsEIl6Y="}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.1.1_1550491588124_0.02689223476560576"},"_hasShrinkwrap":false},"0.1.2":{"name":"type-comparator","version":"0.1.2","description":"Useful comparator functions written on Typescript","main":"dist/index.js","typings":"dist/index.d.ts","scripts":{"test":"jest","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"eeff60bcf5371c3de318ae930e9b9203167f5169","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.1.2","_npmVersion":"6.1.0","_nodeVersion":"10.15.1","_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"dist":{"integrity":"sha512-CThW8z1GSyb3mO9hLYflMrsS3foOizzfnGRe1f0Yl4UtiwvzfF1J8zJtAaKAVg43oat4F1qalNa1Lh1jAvE8ig==","shasum":"21b42dba75a22e5058dbe3375fd4358719307872","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.1.2.tgz","fileCount":210,"unpackedSize":154738,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcasLhCRA9TVsSAnZWagAAs+IP/jkB9bSoCzh9YO5HIw21\nTEiEA9W9h3zXKFZkrs3wdcXApdFaXQg3AMtbC73NpHjNBYfzhiTPQ626jRZX\ndnoSR7StO2a0oIljryCzgqspkLYal3Xyn0MXoi7iAMwuzMM9X8a5e3kOfsu+\nf3AV4mchkkCstw/0zxtwarZvB7EOEnRKJrHEpuMIzI79RJyVVKdyeYXi3343\nE8QKYpA3kEwcMDMESxxYKW85R6HLfigvyDLNIxi/8XcdNaDEG3oudr+BiRAZ\ntgE27w7JwlgPiBm/bnBIkNBKG+DmXuLD8P9LzFbyTd59Wn0FsR/dh/ITSRwC\n5/SuOpJRzOVYHaUrRhDOmMZYCPcBxkXJwqxNaKv3eMr1anipgP0EjLAemam0\nKJ2cNGYCU++ymWcLlBwEJsohKk5ixzPgiCqg+AKYaQTbqymPTbkVwVdi3I5o\nm13t/6OH3V8XuS2XqjkV8VTIuCWs/tUdeXMK6byM9ste7PAVMIZVrGBNgEUD\ngMlyw7XUoXTP5d1XqP7Xt/bYUUpEfpEvb+paglBgILaQlKqKl7GG2yRMRTqC\nY4Zsxi64Nm2GuAXUqxPXCwAkCQxIZrbI1ca8DgKINXH/eVFaRNXBqHT+knED\nOuRwbuxrtLF1cX3P5w47fXNEvW27ZwkPMi6TURu9Jq3jhO+YhRSsB0IF6K1t\nHNF8\r\n=XBAe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGbtlDNBBCih4pufsp3ORGsjgpZJyzhtMbj8Mt+Q/qkTAiEA7WuomvvetF5awK5bbNnWbTQQ7+Jd7Xz5xPrx+aI25zU="}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.1.2_1550500576971_0.48498838035157776"},"_hasShrinkwrap":false},"0.1.3":{"name":"type-comparator","version":"0.1.3","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"test":"jest","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"877cc24f52aa17dcc62715a075d2bc3644e3d799","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.1.3","_npmVersion":"6.1.0","_nodeVersion":"10.15.1","_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"dist":{"integrity":"sha512-tJ3pRAXFnqrT4slls6BTtbfUO2X4RulxM1k5T9BkPvzDT0zw8AQtwQ1UJxQ3ynBdyPsmSVNWhLWAWkkYbspeLw==","shasum":"11b6ae824a33e9b1e26ecb72788ca458b945769e","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.1.3.tgz","fileCount":214,"unpackedSize":157130,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcascICRA9TVsSAnZWagAARuoP/32yJQXDNIYev7WMdyDb\n5yN7e5oIKUretUa9mXRQDpg5axpelgN1f9I8FaJS7TJeF13Ft43hpfIwD0Le\nMfnntr/fKlNK1lxXSPQGUVV06mnS2XWC+QmoHzHgC2l/zUzet7qJOW5wpW59\nsG3arnEe/PLwxwNAtP5Q+iH19aM5IrI6dkyddx9kWwuxHomrseVIA0xzS3z+\nbboySJiyLs2zm0YiBmJEbIxYA8IywO/olvVdm+Zk4F9esxBgOkil/f16hRgS\nKgBzch+89a6U1rrEBV2rCDJbSqWvCqTDRlwsXfmDbpJktFrDk3vI4md7v1tG\ncpfSoIQ14KKSTUfELfelpAVjoqn6/15btUU7Bimxbkazq9cLXGydCeKi347u\nhcZBPUsFWUwO16dD+KbCEcBeNRidDDOnkapt1CQHpW9zuBSc0NiyII1Tays6\nzxKkVfaAKvLjyLD4Gma7AibQTKdd02ziaT6LQ61LBJQ76b71CqKilV46M+pY\ntC0LtWnnMNHi4h4KADfiU9MIKfYVJk6laL5rs3fl2x7Eo77WLxPWhmc7W7K/\nSA/PbeVgKR8iaeBoPsi+z/B1jBK+tfeOtheiP5clMo1QN36o8c/PfrnNvZWv\n1lZpGZI5sddJm2Obav3iKrhTyJRIhuAzicz7suy+ZiFlGlWa6seW9R0uimlI\nA7Ag\r\n=oL0v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnocr325aczQBitkN+c7yN5iNt0a2XpPXJge7VUFSUhQIhANyF3vYV/s3wf7jMihzIZITs8jWoxLlqmDxc5sBXuNQC"}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.1.3_1550501639456_0.814290227626904"},"_hasShrinkwrap":false},"0.1.4":{"name":"type-comparator","version":"0.1.4","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"test":"jest","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"31f363af6fe19795169d7734663130db76b6700b","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.1.4","_npmVersion":"6.1.0","_nodeVersion":"10.15.1","_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"dist":{"integrity":"sha512-3FIJ4hRCgTuLRoxeSRNBQHm3UeNDwmvMUB6YdWA8VrhuznxCtNw5X6RxKB0jT9biEbYWk4hs/yHoai+6DS1mGA==","shasum":"f0f8015491c4e27c0a07e5151880ec2357a749e1","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.1.4.tgz","fileCount":60,"unpackedSize":33753,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcaseBCRA9TVsSAnZWagAA6gIP+gL8Rr123Eebq6VQkKkD\nLPFKESCqZlMs28PVBMrUd02/+zv0XgBVlUJlQu4L/MLqsNG3sbAitbUxz5/G\nxlgAnr2z182hQuzlSFOafuhLUDEA7djNXXzOcvg2uCApCyO+90cLWqM7CvUF\np/0YmZ6zf18ChPA+t6qndDuCdjf0FNwapmiUSpXlxvqFsMLranv41w4aQhnI\nAelqipf+vl/bOtsO5xwUqUdarjgH4LnPMjSc+sLRii0JsD/8drRYr5zTtRFl\nbqRBhx7z6FoJ9J3c7uK7ejVvGMVrkGyiWJAQguobX4pntgXV7ts3docC8CZV\nvMrCQUXX9YKbkatTFTgNHucg+ItQz0H9giGJYiw1vw9NWd2LZCnQXwzvUqqz\n4gdcHhaVzwKNxR/iKv38n2V8ne/YIwo1U75No4eX3CC22mDWSLm98LIHaH2k\n1nLu8lLdmUyTlnGcmkIE4snVRPZJrpLhKqhAMcucYLdMnS+9DF2DSZwfZCaw\nwlCN8DF/dUcQgg0P+s+EGfKFJMwAvYKOnkYY1kErTwm7cpBMVGk/3TmfC7Ok\nHo4rt5lCevznQpYZYQVzsq1CYzfiwKY2XCPc+uSGIy6XxVxKFMcjyZjgGCpT\ndobRsnL164LSgSQ74zHUR4hmp+2gXEngKxugGt+JkIYkApADiPLJJAX69ukk\n+WmC\r\n=rps2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICRchdARd83pMcy9sPBA5qCBG55ozvxEoCLKxyPR7BvOAiAfZ3uTmgYshHsNNHA/exbxkoTMxN83Oj7UzF9v2Pi1bg=="}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.1.4_1550501760757_0.4725661092381379"},"_hasShrinkwrap":false},"0.1.5":{"name":"type-comparator","version":"0.1.5","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"test":"jest","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"31f363af6fe19795169d7734663130db76b6700b","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.1.5","_npmVersion":"6.1.0","_nodeVersion":"10.15.1","_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"dist":{"integrity":"sha512-wvtQHnLpFlfHltNHPff/4Jlm3lO5DVZJC87Yc38hGnpyHwV19rs6U2DTGkXu2JVx8RbcIPffXgB8T0dQPuOt6Q==","shasum":"a9064847d149cc8faac041979c7cf6a5630248af","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.1.5.tgz","fileCount":61,"unpackedSize":34345,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcasjjCRA9TVsSAnZWagAAkTIP/in8CHU3eLRtLgm+ZcmR\nFTS3ogGlJOjcLzL4AvQZBqCRmrVMUbAHbuNOPLE509/Oz8gtcnyBq6vsUKW9\n1+swpji3q/mOEf2s+Nq7kauWi+9y/uR6lhONFHnv6ypMwkJQk0yCtGNjc0Ik\nCQLvieM4VjvjWvTqEpCrwQDzvr6ekFhHHedoh/P/YLmxRxnzVeVFEwImJAxx\nHLs4QmROY81qO+D61Wj+JHZb0ZMMYATH4s79lNl+sJxAOnK8UccF/uoqcRoC\nNMCWCDhsTXaG19l601RYuqPG1CRYHxq2H2PhLKY5XSoDG4cMcpr3D8RtrFvT\nY0k3mJrO+S1CPY+pRWzmD5aPTIktD2j8DdfYuxYVrODP08Sb9n50v+4ASMmg\nP4fZPwsJdDP6+7kQaAPre01OUstLbmbtbslhzxf6Rh9+KgDEAj+quqYx/QTJ\nb1A6O7mFAtjDpk3xKLqbhUJEcySrdMQuYRpUfbsMFAe/hNaBbzpV170eHXjD\nevhMUcvm5qCz2MMjLJBWlerWIGGR4d0ut11fo2gf1Gr4/lfbbIPscx/LUlXy\nrbX6Z1PPYy7bIxqTyuf8dj0FsbqiMihQ4IfsH/faiLZeg5w2Dj9og+q7hBDv\nYumBJUKP6zhFqvwSJvww7AqkCpIBX3B2PJuxIHDRCs2wQQbu+62mUbxvrLff\n40iK\r\n=7hnk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZLhqI9ArpEnbIJZ0kN2BFsoT/2nnk3QDSo3vxMt3KagIhALeDj4W5uMF202JZFhhnY3L8bXF/myC0RgRnW0JtxAbw"}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.1.5_1550502114925_0.22638887935137886"},"_hasShrinkwrap":false},"0.1.6":{"name":"type-comparator","version":"0.1.6","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"test":"jest","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"3aca0b697838734f6155bf1b9b184ec1efc0a2d7","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.1.6","_npmVersion":"6.1.0","_nodeVersion":"10.15.1","_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"dist":{"integrity":"sha512-oP0iwoxZn78ysvGJXR1dn5fCxXirLAwvCOXnh62cjlpwyMObUMdQonWWDAquZpfXuN6cnwIUBgXr7c/n0pYOUQ==","shasum":"dc5047cff67de7df434e12e4c686eb688d34cf06","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.1.6.tgz","fileCount":62,"unpackedSize":36825,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcauUJCRA9TVsSAnZWagAAWPsP/2HUiqNOOHsSHV46x06o\nzRGrEdurarrrXuAJ05Nfhpseiif8XMjhx0aZ4LcXLUM3izIGAH9MFclAT9hg\nVLvbkhBVBcGTPQ60o2ahFdwo2V3jJOUmCTF85DCH/14DZSojw9jwxNXUtriS\nxtZW1CnolHK5/Owhi65jAvnZ9n3FpzTcFHzfNdbEUyPum/JtlkZHVTQXw71c\nVD3fk50juwp5y3drNU3uIO8Y+HaNuBfFImhG4OMZmCEVg2d8WE5pPhQScAtm\nicf4L3hrhie2EcK34FrcXjH3hV48Op7S7cUohfcCQOzb78M+j7aFQI5VFLoJ\nnrjxW0ZRW/ozuofhSDpuuTZAhPGHbqRf+7Jum/dFFjgdSFQqewceXM5LDcUG\ntA2HhNnhBk5qTihdYqRObKCKR8Bp/Vd2ouLHIN9xjgGlRhnxTG/VQVgAdkd8\nEpLu7YqnaZ6rUrDR4XRw+QHZKY6BrOi7FjYtTDiYv9dZagKs16glFBRCnSAI\n9qoEhpLzDPM7CiNW9UC1F3gLpM965ZR3/D78HpaVCGhzB+Ql4pWVprtuzD6B\nuVGjzseRjOjsRBU87vPxt0LFBjlbcf/QR8mh0jkdE7+IsPK6YNoxWRcp2Q4V\npIjOA0ybInXWLDGESxaZe39VFHS5b8ZfOQjnOLNgMgw2UpROUNxuxtsIowik\nax/+\r\n=8Jhq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2WsyMEwOErtEaYrZggj85KYfYAznSHlnIQCCp8k/z7QIhAPanUFHI5wkS5Mdf9IQCkaiVl4PT97/NSCfNvo4fbiRt"}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.1.6_1550509320942_0.006068620838065586"},"_hasShrinkwrap":false},"0.1.7":{"name":"type-comparator","version":"0.1.7","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"test":"jest","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"3f7b6d36537bf733e29afeb0940521f881803b7a","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.1.7","_npmVersion":"6.1.0","_nodeVersion":"10.15.1","_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"dist":{"integrity":"sha512-XNLI+QlBCIZloZ51jAdTQM08ACazbYEBA+gxzS5va2MirsFQq2huqAGnHZGgFB4lk5c9dRv4eT/Jg4K7muzmqw==","shasum":"cbdacb5137d01e6f58d114bf34bbc6b1b976aad9","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.1.7.tgz","fileCount":62,"unpackedSize":37235,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcavRWCRA9TVsSAnZWagAAHuMP/0vhInyYDY1jaXRZMYB4\nMTnqJwgWt3JMqTG+C5PbUJ9E7JDxTmILGDvpdsupoIP8tUtCH9I6kwk0uwoF\nb+Du6Wg8/BilL6TZY71tzP5WdHsBDqIRnKqYvDbB6V4ybntT+SQQTbYkQUmz\njN65vZRZuCmchyCxXroNGkOryyYEKjlzUaIdGMU2wl7dNxErlluUuIfWde6+\ncYjhMhClsARnxrwcBqSagVsktdbch23x+KX8klN/QeV6RXSqkWvsTzRkIAHY\nA7+ZKdnyRvPMkDa4x9pxfqWjfEp93sicealmWlnoKKRoWPi8ABer3J3kyKMR\nQeVUD0nCcUbxNugel/tG4560CzZPJGJ0vFL1Dlp2gX7CMbk33sDB6P1+6YT7\nvo9tgT9XczB2q5IWNOv8EXqWDYk8GK+JZIQsiSAlCtCBbJO+w2ip3Y8YWNUP\nVprZJyxzWu1BC9xTV9gqObSpLvB/Q1SH2k7R+Kwe1zxHPnGQffP8Tvm7ThcP\n0DDz9b6shTGtlj9zumNdg8Mj9wYRP7kpec8+oTvF6Pbay34u1vJEX/qCYw6d\nYI3Q40YH60vYwA+azRgA4TtboaWTTo18VLZl4A1lSV+ZdGsvRlMMxnkJgHDj\nJSgi3wUkqDeK3ZtYRFb5k7WdnHdtgmfS45+Y0sqwQyu0K3paunBaNRf95gkV\nHSNA\r\n=T2B/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDC5IBBzdTZBZyI7ihpyvBD9ZE4K9wLbU29OvzCKqd6CQIhAIKWB7cmFwls+MC1Xqo1TqoH1vQkI49EAM5KShjooGnk"}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.1.7_1550513237719_0.6192860200048937"},"_hasShrinkwrap":false},"0.1.8":{"name":"type-comparator","version":"0.1.8","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"test":"jest","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"5b0d67bfaffae3ffbc3389fcaf4474fa0ec04dbd","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.1.8","_nodeVersion":"8.9.4","_npmVersion":"6.8.0","dist":{"integrity":"sha512-oxzSLCf1rL22pDy3GXX3sIawStEi1RmUINjBe0W24NgikfTc97m6QWqOTdEbEUYiHKKJSeMc1l+Oy381L3Jo8g==","shasum":"071dfba5f9a8794e07906d896bcfcc4c7425ca40","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.1.8.tgz","fileCount":68,"unpackedSize":43832,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcazAwCRA9TVsSAnZWagAAxeQP/jDGof756GNKvZczZraU\nRyoAqIJQawmeGYjewTBEpm+dHH/+55+FIg0yWfIhBtZi9XyGAXIx+miMgY7I\nddb3RGmI9ziox/9ovL7hy/m//m8HKtjxsVBkuDd99U3XIbLWVkbBKTarBpKr\np7WJXKOP6xItjUJ8db+yjh35L0j5+6f6PC5UsXKYK2QLAaOd55feQnYM3Tlx\nkuBfbCi8Qa8AIHsXR8E/t76rLS/iI86DmZ7d+DHe8el7syJOI+oua3swOWg4\nS+Djn/wXYKIpoCX4Wqs0x+VDzh4Gb0+oqAr//JI6uTUvAJmgkcqBxKa6vpbF\nwjvSKu5vZt9h3fxJJ55FBEoJnHsfeM9MJsQKDjFc6VXdBARjg96ht1OVCHQX\n2cK0Rlc47mNoMWdr+FBKGAYWwxlK55zpa7VT5BdPEX1jcp3ytEX/mVgi27Ns\ncFX0bXC4C0Bp76YIMNdpKpayaIb+KWAEUd0KTZ59WYgZQJC5F2crN+dtEbV9\nxYq2T3zaigCgpNWDewvX4bWlZOfZ8yGdl+1IMV4dyu/GKbBVVlPnxsiBfkGT\nWymy8Yso2fkICK9FPta4ALnCdeR0aEBdi+CoN7VH7J5Ssc7znRtq9ddji/3q\nE5VqeBgONJPSYDZXfKfmW1fkqGLpAc/1YieFq8ZxQZO99hNIhfxoCu6n6i35\nCX2q\r\n=DRV4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF/iY6D8flv7a6WmGdbwE0EqwyqpW1S6VcSJgXH5VFNOAiAifY38pY5A7eeYdIBdu0XkOv8On2Ip091R8ngndDnClw=="}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.1.8_1550528559581_0.5590649818580176"},"_hasShrinkwrap":false},"0.1.9":{"name":"type-comparator","version":"0.1.9","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"test":"jest","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"3ddfdf28831ddba5e211311712b6958c794b8f3f","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.1.9","_npmVersion":"6.1.0","_nodeVersion":"10.15.1","_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"dist":{"integrity":"sha512-6k+5B1sWRWAAOBBRG/rSgkUAzXjTZYskpE6mxOwhsqg7NnU4L3wNKb1p8ZbRwZA3Jxzj6/fn0+/q/lTj7Gg6pg==","shasum":"0f5801307d251caa7853a20c71bdbea590cd57a1","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.1.9.tgz","fileCount":62,"unpackedSize":37532,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcbBdkCRA9TVsSAnZWagAAvrkP/jA+5quWk2SLb91jjKsE\nPeJCt6H+2el5ovaQn3JlbgI9vtdl8TyhfVu0vRneWqqMZ3ofzOsIzRloRxSz\nIfddTd3zRNallgX1w+dS8OFI7ewEjTZwFQNZrah11ZZaqTqELsU1+sxnfvAp\naVKEJY6ZHP84PsmebugbzLB0WUzCNqMZQkdcEnK6S3mv7+82VN9QsPfUnuU2\ne70NY4rls8AzHw2XSqiJm4U01HCq+8PNzbrtkeePvRHa2rzgLutQ3d7D6Th2\n8KYuxgjysiOjNw0xal8SHd+kUhFhgh4Nz5njwuAsiW0oxQ+djPrUWibFUNS+\n9kimEpQvN7DBgo3FWaq1a2ayoT7dW+obo3aPNpOkOjA24++9ykwyjFqW67a0\nHPAQfjQZsa9uTzOWL0pFDzERFUNgLPs+M8C4BorwptSjANNU3KYjQFt/bL29\n/W6MGBhsd1uogje/YOtC+f+VJIltOCXXDyvC3OBPpECWGsPa2I1GJ+EAVjBy\nHooMAZs2464Uzmwqm5hQCX2aZb/BcHKPf/LCuRAGwqFJ5eracWm+azaNK2ki\nXxWXuZA7JFkE9uoBR67dVGA+ZVnbg/ZrtZl7Im54+xBZDvd7bH1DNx2h+b44\n/o1Hke2SPffjD1v/2e8b1oHm/OyHO3SJ1d6PfPqyBXRhMkp/K6ktE2Gq6zkB\nm8Fq\r\n=OH6A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDd6viKh+VMtQRM/tv4PyVekkq14Yy0HfvXSdVBMP52bAiAY7kLjiBqqL2rbsq913Q+8tuGho1plcYA1+ZO2aIoXXg=="}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.1.9_1550587747837_0.08890323046064208"},"_hasShrinkwrap":false},"0.1.10":{"name":"type-comparator","version":"0.1.10","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"test":"jest","test:coverage":"","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"dependencies":{"codecov":"^3.2.0"},"gitHead":"39b8eb8424f1e5ad5f9062ce11a90b1b92fe8024","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.1.10","_npmVersion":"6.1.0","_nodeVersion":"10.15.1","_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"dist":{"integrity":"sha512-igm3hWguowGNrD8vBkf99NJVY8a7vk9ngxH+bs9B4bGbWyJ1/oDZ6TCqxt1x2Qo3+vSKkaE2IQejI0hONwlaOg==","shasum":"b92f28f43b7f2639dcc1e1bbd088fa7854cb186c","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.1.10.tgz","fileCount":89,"unpackedSize":162978,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcbCQCCRA9TVsSAnZWagAA7FsP/3eCUfScjZvmL11gSeI3\nJMBLCrqf2D8UMp5bY4LlQ/oz5hRqugwWABuZLQVf7FYY0SUBLR4RIYhGod1d\ngqV5XnOmZ+ya6L8QBKkfzEkzQUYjIyXqRk6ckoJlOq0WMjIW+e1IVuGSba97\noGLJCJzrF+F25vjSQyr5U7IcYiZJdy54LnMLlcY+jC0dDciPCSyAjWdDlLIp\n6rMdnRRIPYFZz1ZYmYQMLt+vvz9UcyPh4PzlBS31N/2fw/7C73cuuio5Nh9w\nmsw9LxpyueIbOifVyNohhUDwxFayndZIGRr8E+bnh2yXiiTIIJlcNl2hOZbL\nlu1VWyZkhk/9grcgISFSvHB+DDA60rsThsWHySZGO6fSpqK1XLRateEMS26Z\neNvw/+gGS7EagGiXtyE+WkHqq+fM5EQdLaJQV482g8ImNDeDIEEtB9nDFwcd\nj5sPmkIpf8fLkEWrOxD9SocrIX0rY2wutpcNzU2r5ynrm9sqnxoadGU11BiV\njG8Id5oFupyHQ2ofiFLzFACWLLBjeTs5yc+8Z2R9FKjuHzQmZ3nmS3kXua3X\nUEWjfmkBKZOogEplSFG8RJ36sIM3VGGtXh9wIHiD5I/4PGThdhx67iWsM7KP\nV5eBQn77+m+PmD5jRgX4XZV03R8i0Kv1qmQOSlooxl5uSev1hbzVZeyDMaL2\nf6L6\r\n=vRL+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA2DA6c3hOKTgKeVgek+Kygpr3mlgpU2RLdP6OCBpgNKAiEAwXgRalXEivTJaqtDp/DIyrPbYINEAf9Z8TOxhd7A4Bc="}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.1.10_1550590977653_0.17329623815373374"},"_hasShrinkwrap":false},"0.1.11":{"name":"type-comparator","version":"0.1.11","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"test":"jest","test:coverage":"","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"84437eb6c0484506258330f225d54bce3b50e583","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.1.11","_npmVersion":"6.1.0","_nodeVersion":"10.15.1","_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"dist":{"integrity":"sha512-m+Izj3IbqRTkjU0v+DfueCnrgoGYDJ9hoTht2P83jzNtKZuoxm+UUz4o9u5xFa++Ocqj8BXnKI8MzK/oSO9WXA==","shasum":"092ea554f76d203bfb8ffe4ea7a95b10c9fae2ae","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.1.11.tgz","fileCount":89,"unpackedSize":162926,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcbCSCCRA9TVsSAnZWagAAai8P/jcAP3K2ZbO8WVlMsai/\niHzDx3sSQlbTiLCwqqoKtWBVwmmU+rI1ODXfF8mVUFY1xCYVlGhM+HG+sPOn\nLmrEcTShDzcBQFtv7FMrrp/dX9PSedH9p9TnbPzeJpqEntc+pGMoT5rJuMuN\nSj7S8dJ3AGHhE96KDAbeGk1F1SToYdjrbodWWO+cYNAWHXOyA3+EeoHpjOY1\n2WOMAjDSClJTe1hDE1lK+DaQNhnjTHX6rZlp5RmE+pNoOgo26ddkHTBWH7yA\nt3vCNzncoHZnsWnhsNvm/0IXjoLj3/PcJbNzxc7b2cotgQaEPfpaF9ke4Brs\n8oJAVGMcUIDgIT7OHsJF7nCYBe4ay4+4vMmK8egXGrD7xzw+M1CLYbYPxlpz\nM855SW7Lx9SF5CeKI+q7gXL4Fs1G0+OHB1tjJcfq8Itx4cjXns8ObtcXDfGJ\nPJbx8uOeKJgwpglx7H3y/nWR5lMECKuYaWzqdFeDtQmURdmI6LqNuKbGoaCj\n/9LzqVz3eqTDnPd+Kt+oAnRstC1QVCyYKg/mIZ6rA7rdnBwNzoMa57binYhO\nON7Ced7QBHWtVOZYbQ/nBNWaLTqal7+soVvsvmVysDKB1MVvIm2MQtIb95RZ\nz234CLCWga9f+sTYg6jCIAVaicQRh5iBV/krtV0Q7zleaYwM3/BvIb56GZiS\nHQRk\r\n=YYzz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIElMRF5Uij5b/JaV/PcswwCCldykr8FVJAxOaU/VfDDMAiBYN7C3eN9xzs+YHXfNm1T67qY2cRCAPPBlHiD9Wfqjcw=="}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.1.11_1550591105950_0.9733614884495423"},"_hasShrinkwrap":false},"0.2.0":{"name":"type-comparator","version":"0.2.0","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"start":"node ./build/main.js","test":"jest","test:coverage":"jest --coverage","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"f05e00cbfda977fe1d1e3cd0b0470a3feebf214c","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.2.0","_npmVersion":"6.1.0","_nodeVersion":"10.15.1","_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"dist":{"integrity":"sha512-99Pf0W51s9MTXO+xJnRShY0mwrRmV6ulOefJy0Apn+yNOG93z5rlzMxuJxKmeWtJezZkXHJmQ8ZRGoSPszm6JA==","shasum":"c14d7669a895fb9ec414b2d48c2554a50589a0c1","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.2.0.tgz","fileCount":102,"unpackedSize":191300,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcb/v6CRA9TVsSAnZWagAAqbAP/3tJ01cfAX9lsD3ukacI\nesGlfsFg0ZHO4Ig/G9QnNaejYZOGbwCdTdxKhfsWBnOUST0ZCLG2XwO0krxE\n8jYVmEtUJ1sOIfc7Ka8wpi5EmZw/ZhwzpIQAkn7d8pJ+0Fhqgt5NFtvzFn/K\ne60GgCUXJ4FYX07QxMqLXMXkDQxNwVCZJkVwiNoxD668ZVDrchDzqCTwtB1v\n9o7hSe6FJZQ9qHIlxxKbVgr9O3k3yFqMLKvkAie3pKaE4y99Ivi8iEbs6w9N\n5PPANnfZi6yKwQGvEcoiHJR00HWslZnrTfM0+/LDTidkkGn+gTHefsK3FzP5\nOnTik311FxRSpGJSLlEILKYZPRVb0zu6eo9fkuE/hmTfB9TQP5D5JaO6r8oW\nKIJbLbo5whDXrhmZHK5ukYhjl2vWU2fV0eXgVEzDrWcVTRp+WyQq8756Z/Fx\nnW4VjSTjv9hBBVzifCEh5MBgxDMiwbgsX+F5TzlkKi1sp+IGBHeOsRKQDlk4\nPQBj99omvUrBBs1tQIjztGkLbXHhN7Wr3xZS/ibNx2CqTLpCgKckiAoIeFn+\nVvsq+dz7rXaVu3kqGRfjsvMynnbagaI1jBZtB7Q26gEpSi0/vhVWW6ef643z\nKDtI6CSfS92BA2eSqMUJyICuD2Lyn0HqC6EzluwLFRhc8JGxzY6C1ymYKPaG\nD0ib\r\n=R5HY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEYniWs4mMwzuAppE4RARS2YHD97RyRKFC4gY2i7x+5rAiAvaDw/ZM6pb9UrRvi7VXYxsVFgIOSpOnMJXGIldN4VIg=="}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.2.0_1550842873931_0.9736451347431809"},"_hasShrinkwrap":false},"0.2.1":{"name":"type-comparator","version":"0.2.1","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"start":"node ./build/main.js","test":"jest","test:coverage":"jest --coverage","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"f31414604c1bb09abf92cc1d066a4b7a0a80d231","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.2.1","_npmVersion":"6.1.0","_nodeVersion":"10.15.1","_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"dist":{"integrity":"sha512-mK+rVlpmTeFKp2dIf+zkQM8HpVi9TAFfzxHXwA76xZQ0vn08ttnuf9hhXLwce4IKdkwFgsby6TPriBns6TydWw==","shasum":"a27f6cdaeff69db822a21758822298b0c7d81c14","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.2.1.tgz","fileCount":102,"unpackedSize":203282,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcdSC7CRA9TVsSAnZWagAAYNYP/jyteBZVeh9d0RjA56Gx\nf3WjN2Rs/xEZoUxELgO9gXBJy249sa8m1eSr+3llKk/ChsD3MnncD9i3YkkS\nGQ+GvJb/PR2PQjar+rSa9rIf73WL8pEuSEs99PZy5HJYKjjNziBuv0Dzag/p\n6MQI01Y9UO5ODj6lSOlH7C2QC9qLO9i8Jpx/eahzj68GHTVf9zGUVRuHt4Cm\nzeNVMtjg08TtDVKU2tKBjcJveNVnIqf6du4jbICeekRF/UgxxvCNgIsfUh05\nzJCdm7WSbPUJax4Qr73oU7yCHDTB9iSNumbaV2c4t0IwMwvupJ+Air5jcc5z\n54ZtWG/6gflDbPHOZZwG6F2WpAk6VK4C4qTPKan7IWe29SS2la56IpKRx2IV\nxCrHuiwP3B8WmeNJVdIf3pvggwsO6K68xVmsx6KLNh89u5gF3RBiYXc+lvJN\nVPiHTREIF0yBTWeZLkWRIfClGniYDkYV0qDsn35WVLsd69vMmIh+J5ZQskq5\nT3s528xCET5rzXpfgO32w0X96WCePYGFQ9U56LL6F0iUIx7D/J40S6InEjBF\nEQs2UvyBvRm4A5eN2Fm1aef6K5ScbR1FngUpZxVV8i7F91XZxqq5v9UZ8J5Q\n0WddN8IGPbKSEIJOzhWPNh5ZuSwmPlZdmwzA7W1a78tbmvsAY/I5vwUeASPo\niKlM\r\n=zWdQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDgRcqRnG9404fV8Vy6fbdD4vnUWDOiDs0Roe9uDwRwKAiEAxuZoIPpPEGkhdafguBlTgdacn76R6FlgI6oU8B5lN9w="}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.2.1_1551179962711_0.8385118442310113"},"_hasShrinkwrap":false},"0.2.2":{"name":"type-comparator","version":"0.2.2","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"start":"node ./build/main.js","test":"jest","test:coverage":"jest --coverage","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"36acd86039692adb422a481da173105b9b85d487","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.2.2","_npmVersion":"6.1.0","_nodeVersion":"10.15.1","_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"dist":{"integrity":"sha512-96SyI1vWZtHbLqzjohd8rLALLImg/yuSppsIO5yaW0f9GAoxCs/GP9+waYRP9/0/gK+rw7YFCaJb+9fUMt/kTQ==","shasum":"c86c303fb86aebb57c9814abfd7877a5ee29b2cb","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.2.2.tgz","fileCount":102,"unpackedSize":213099,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcdVn0CRA9TVsSAnZWagAAnP8QAJ/84hYIYI5e2utwJuO1\ng6pSp8O8UxObrvupR8m9wkT3MGhIprHhj9zPbYGEU6gS1XyY9gWG8QR+PAJ0\neTKwdFlSh+TxUTbJhI8Z3qF4s9FcRW7/JT0/hKKjsHkuy9OtssLy6Pfnf5JT\n8MEdZXibyZpVF7z9gvuTxilNn6OUhfaekqXEnYRDhvJH2wAHYUobkZDwQznK\nFwWlygmpCC+z535Qedztz73WymIoge1CO7DSsikwYvtWQx5CS23xuPWBtsen\nZC/whO00gZaTVZBDuClxqL1m7VMl9c3E7PmlvSYWFy8JJTvt5BjuJx1xG04X\ns3JOhJ9rNDktACvBL7J27+vk/JKdHnqn47fBs7LadtMZkYp+okOtm+/AQdjX\nNj/iRE2dNf+0mCLOgDHwIS3aMFF8aU0U53mEWAmple8qsXUrymXWaj09cgmq\nNeQXN0/Y+YdlQlrjU62kALI64ExhU0PpoYRzq5j3dibd7H83cJ+hcnZ3GdHY\nkCFh0wUEETLmvU+FdPDALv7ROyooCd3nr+eVPIB+ADyZTm2zWbuhvmcTTUZV\nBuf3uohBa0NdSGvuw/Mt7lAiixJUoD/oMNCHwEGHn2QVBRVlPUrVsF/u8F7Q\nbB76cvf/Xn6vg2/L71yLC/g/D0e3MqFSSoTrg+SoqWGGOnS7YWMRII3fbYpB\nA9i9\r\n=L5Fw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIANravv0NTrQR4sW2YQU5wZTYdNyiyW6CW9LeYVfll1pAiEAzzcCBLX+eyDuAaUnVawLlBJNDlaJzIj3qKrps8gLbz8="}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.2.2_1551194611932_0.11995269527312913"},"_hasShrinkwrap":false},"0.2.3":{"name":"type-comparator","version":"0.2.3","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"start":"node ./build/main.js","test":"jest","test:coverage":"jest --coverage","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"36acd86039692adb422a481da173105b9b85d487","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.2.3","_npmVersion":"6.1.0","_nodeVersion":"10.15.1","_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"dist":{"integrity":"sha512-ijZxWssgrnhi0oNbNiugj+TMQEVA72RgjkXxZ69CWDmD8wO7BVQQjscVvxISTSbUfNECyiaGK1n8TkbITZoNZA==","shasum":"e5a3af95f8fe7c89fa06bf65d349a244d6de222f","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.2.3.tgz","fileCount":102,"unpackedSize":206554,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcdVpVCRA9TVsSAnZWagAAyBMQAIZsFlmhDEUuIOtpMJEZ\nrTQQJVOnZaHqeMJIytt42mZxdW16BznRezKMXaHRyKdG21H5dTTtowC1p0yU\nJweUYG6N5GL/TfWGeaJwZhaI6HXnRTZZ4wjsk4qfMdIpCyrwtvpP5CrOpzm2\nDIMSryPFEX4Svr1bJi/LdkyRDYhbv8GDTYEhjB6KcIao4kLoh3KWfS5bk9W9\n552vyxJ6Wq0GBX4OMMZzrhWumSzVcyIYY2yJHPPfSl9iTl29/l54z/impz3a\nj2A2BwX3JOkRdks3bYP2D8ChoP7OtyghSR8C2yoJUl23c2X9w3/OmbtvdEbt\ntN8SxNt1DyHV9gK5F/yV8WONShfmJsgMEAp3Ogvsg1P1ZAsATVZQAwroniYB\nxQ+99rpstbXHvuuTtz/rqjctJqpegjX4s35YtugOqXbfifNSI3YMpc4uWmuK\n2AZL1Wd3clWJpqHn1rjZ2u6JNiTp2RZAw4wZjGWA3ISzccTfxT+D/wVfDCF2\nd/wFswSY7o3KET00t7Y1E9JL55Ac7uBuxZQgfIhnQFa7GS8T7XOH9bNmpdnw\nLCOwdq9kYshnO4H8gQcdGH7tvfsinpR0CZZRBWZpmvKFIVBP8mv/Tt2s6dDu\nFAa1X/EDXhj5nEEZit5BuufPb56kqw8M2dCyMxTRvUfkVFx9bdnOEpbJQqLX\nY6Yx\r\n=zoV1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBSzWOb0jrQGeV5V6cg5/LXsfipc7jc1a6LCwHV6UpQVAiEAinaen9aBXSgKiwqLO4xR2wAIHxQTzoYXeeOhB5K/fOU="}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.2.3_1551194708952_0.6238787149463882"},"_hasShrinkwrap":false},"0.2.4":{"name":"type-comparator","version":"0.2.4","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"start":"node ./build/main.js","test":"jest","test:coverage":"jest --coverage","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"2dd22a6599d5ae408551612491d52ebee0289610","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.2.4","_npmVersion":"6.1.0","_nodeVersion":"10.15.1","_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"dist":{"integrity":"sha512-fGSq7Mh04NkJzEbb2W1s5kx62UmieIVDTKdwmtUriPuabcAKb9AuPYy7xVa9BzNtzLL/0flhAK28sMRNuhcUbw==","shasum":"3d7582884e5a564d3deed3a0cac7ec1c3d9928da","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.2.4.tgz","fileCount":102,"unpackedSize":207376,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcd+H1CRA9TVsSAnZWagAAMegP/RhWRVmjvdsMv9+UVvHw\nnXR2Jefj1EFM54epylxEEEnh7UWSeIm2cd/lvkJwmBhQOOQt47lJLXtQ84wp\nrLiriS3v4OmrLd349xVh7kHDJbyoa3vmPjcqB7xrfEQQBhxoQSxnrVVENZyJ\n/EPFaVpBLImNLKaMw5XykimaEvwXnihG0ncPcG3JqVAOCD3fCsn/EhdZgsJ9\nNl+gZ8KjgtIT8BwqJAk3cHplVsoP2zq2TA2WupSyhiPUe40Rn4gUQfXqQWgs\nRjoTOuIWnH9b77JiNx4tIBMBIOos2uE7J/DUk9Zx0mgxxb495jTAS8G3WXK8\nNatIOiLAPvbcXIDw/HtkZ09uhBXqejVJO3W5OBUjbgRsK7yvIccgmKo7GC6g\natdebPLjj9OIGdpdjftfl6PppCsC4AcUOGai8dtsTHkfIj/TdoyMv/SHX+7f\n/QkQz+CMZAbJSUVf/UWJTavjZOZTZbYwwyi4hFPWiMh8nl+tn9XMRzOCg5Kr\nlqj9ogEDXYFTjKf5NxnDXYO/AVffcMr1+1UtcjPfL2fuTmmk2vvVThXrutVx\nFFwvOpx9GH2V1cG4lVw6eqoeH4UNwn22ZAIRYLPDQV+F2NzizfNl8KcpaNZh\nRaRNJXQlunD4CMcInTeiDVjIA7DJCUqT0O5maP+c8xetYdm/lrHzgdnnPDYI\nqoqC\r\n=GKVO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDxQB+Ol43UprzjvqXYmfQYy1vKJPDKKRv2g4u9X3OSXQIgBifETtVJsM+EG4WOWjW7yZQLjkOp2NcXwEhWA1BhvDs="}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.2.4_1551360500630_0.697575697402447"},"_hasShrinkwrap":false},"0.2.5":{"name":"type-comparator","version":"0.2.5","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"start":"node ./build/main.js","test":"jest","test:coverage":"jest --coverage","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"9bbeffada1b2f94f368d44d181dc98c911dae24d","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.2.5","_npmVersion":"6.1.0","_nodeVersion":"10.15.1","_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"dist":{"integrity":"sha512-qnX31f4V6e/jjvQG1h6VWa5eLEZCP7V4NWEZ33qW3KvAjviVV7T5w7hz0UdbwEm5XpM/7zvb+EH89BZ+InB35Q==","shasum":"179c434e9768a77c96b04b28288a4c0cfd726ad8","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.2.5.tgz","fileCount":103,"unpackedSize":208592,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcfklzCRA9TVsSAnZWagAAFQgP/2Acw19e+m1MeY8PQpX6\ndE9dM+vXKSx3SKIlUHWSb28KUlJKj55JE1+hM3J9crusjtpqInVsRNbBDkt+\nkhfjt+m/mbDn0neP+Skc1jJP3eQ7+aX9YhwLs23i4QH1uRrP27hR9i1sExGA\ndM10spxP9MyF0XDqsZcpv4CSJpdAgsEgnM9HtlOpZvUqwBkq/FkdrdmrMfTB\nl5vumYZoj6fqoLh0rG9TPRP0oWqK6cQ7rWenaO1AltNeLyzDT7UuqfwHfz0t\n72aLnSZ54Ii3phKubgd85OByV4nFRGkvXnhcwgm5WfyG3L7htr2mvQhZ5HbJ\niD1PtnfwNz33ZdLtGSxIRXia3WCcV2MmXdR0OYT/OugDza7YgcXo+jv/d5NN\nz45ZalrnLoBbJv16F+3joworJt+1DVLBECWFy3lFc7LkwtowspZsghWImDg/\nMPcA2x4Ifz8MLFAydQKurD1l1J/p/83ycArun1LpdMR1wRzLE/lzBnrfH36B\njiDzpY+AUp621LMOAjsXvoLUjO6qT9vk87a0J031vIklNJx+jZzhJ9MHqnCn\n589YQHbBns2Lo3ogyqrMizZ/eCO6gazOx141OAlCbJNIA1WgdJ3hnKzGAKzL\nNsb3f4mOJnyEaZstujmaD9a94QDknthUHBY6jgiKAwAHSvJAY16Ao2NGnKy3\nXQXT\r\n=CNf2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD46QqW9V04MF5HJoWHYQL9866q0E0KymhnLfOJCND3cQIhAN5WDcv88uuVxQmNuruJZWGERr7RWdVsEc+DNcvBNP98"}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.2.5_1551780210681_0.8102677508853955"},"_hasShrinkwrap":false},"0.2.6":{"name":"type-comparator","version":"0.2.6","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"start":"node ./build/main.js","test":"jest","test:coverage":"jest --coverage","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"43da2a8e4d1be4273e1995f997fe4fd35136cc99","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.2.6","_npmVersion":"6.1.0","_nodeVersion":"10.15.1","_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"dist":{"integrity":"sha512-+avL7UywxZlGVXf/KIK0hjcpqu3ZNPbdRXSuMHBAxunWLRMvaJOcOjYKM2mWuO3NMl42lhDxVcWTRDdCfRv6rA==","shasum":"ad234ee7e056b23f962d8498ab04fccd16269ba2","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.2.6.tgz","fileCount":103,"unpackedSize":208590,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcfl4TCRA9TVsSAnZWagAAPX0P/2JaqUcrD6ugoGmuCYyG\nGIG9FahPEYKF8jSDt4kox1Ppq79YII2JwPZTBaknuP/itucDfxnff4MwLLuv\nomxWGrNEzHihjp5grbJ0ePJbaQI8aj5mdyXchR0ASboqjruGc/Uk/1Vz+s8b\nla6RIFE2mJNX4/k+8xjf98ZnfPh5nWmdGMHTNihi+cY4DugwSquD5uiSirK5\ng5OsahLepxUKvGS99/hgX6RgDmjpCe1dm4HoDQUc2YK9WaWuhLf+yIZpniJw\nQOD71X5I+jPiGeLRaj8qhFJFiz90BqLlGeRl18XN2YGpSe52cPOzTEoN4jcU\nKHRRWhqxY5JrjYeTxI8neUh/UfLtKdoAltTD93pwUQxijdJZ5XW/4+mr/Ztv\ngW/uF4c7JqYRn/Y0lWPftP1FC1tvyx9y06+9gkTrRG1rOMneZSZqeMsWpaUN\nuDIAsZ7AON1JhwwMDC8YVe17vBc6Jgnlaqhu+acVHvIZupKnkwqg6YyRMTp9\nUZ/Wf9L798c8oIKYQfavYN1+EuuHmZeBCxQ53jWorNTWCXinlL6ts66RkYis\naWMBFeuBACnAjfiObVFRgW69rd/hBZNq+YIRKscLRVYnVH0lzIQZYrL6o9rt\nqVGN7FIFgkYNbdcyhGIXswIyz8PQmpnLGjP1U3waoz2mjl7F/fB13rn7qaq6\n5KlK\r\n=4PLw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8sXIWhk1EQ/wUy9l1OpyKMauZ8+EV7p3tkO6qrDWPNQIgKgzDhL2T24G1ovN3mWWKx3DlvypW2i6zXP7TtzGIT48="}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.2.6_1551785490680_0.6243635580607825"},"_hasShrinkwrap":false},"0.2.7":{"name":"type-comparator","version":"0.2.7","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"start":"node ./build/main.js","test":"jest","test:coverage":"jest --coverage","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"5d9f43ff073051da12bb35d09975215b0480d933","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.2.7","_npmVersion":"6.1.0","_nodeVersion":"10.15.1","_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"dist":{"integrity":"sha512-3YNl/bnmU2agAR+T3IISymvHqU0mkLu2wskEU9UViDoiH5nFRrK99WehIGM3PBuVr84UqEq64hAFk/TUC1uvHQ==","shasum":"71ec9c3199ba71ab1c546d1d087674d547499e64","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.2.7.tgz","fileCount":103,"unpackedSize":208592,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJchkYICRA9TVsSAnZWagAA78wQAKOo8mQ4dZ75p2WrKRfH\ngimKyOlZ3BYrIYFZNd6XTwjmnjkiWRrXws3cETN1sXAP4+8856sp7AKL+QBe\nCqanLDcLDc48+CP0Upj09s/IejJUeuEc7DrRj5FoWdCsUGsMpvmHuPpZZse2\nWxHW/Rh4eCSKFh5vmh6e4KZCP5DQRfro9tIX1Twu9GES8DyWWRB+pFNU/ux3\nfk8ics6HrkfQgkvfneSrxGMab6B2B2+fL1elzkwWi2Jz3TpAGzHhVGgCY57G\nXlF9sefzBD3PKcmr5AUS4udpVvr96FNEgWF00JgnY/7hXMLjD6uwW2qE3PpY\nYKhYNlV93ymdWoHMErycy75MccXazrBbYfMmWHn7pdc4Jz1bpleZ8xO3QtsG\nfVEn+YxDoAZtE8pv/fTbvD7oOPpDGHHSnB2rQNSlM40VXm+AUgrzsRMUobUv\nRHNYwMBi9q9R495ISekMkDQOSvzEu9bdNbgmyU5eR02MuR+H9Ril1Ak5PhTT\nErlj8M48Y3zE5x1RCyEIqauQhGy0bryKGEd8X5teq1TY0H38g8jDqQf/VaAa\nu7gJFrKBnJrTAE7g1s20KrPUOeWYxdTZ0nNKUXaBvAGXKDN0N17DX0CMTNHJ\nV5PSWCBrfbDWnfvIxKp3my9mIRkIYKpC95A6nh9hJkzlKM98+Q+248g+cm5v\ng0Xm\r\n=RmN6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCg9kyOjxarO/IYPgPtiDV33x8rR3wG/6eKxoHirtpUgwIgBed57DtOi9vsEgiPbKsH+JH1Rdu1T0ujYrvyNKYJWtM="}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.2.7_1552303623938_0.6859043659844997"},"_hasShrinkwrap":false},"0.2.8":{"name":"type-comparator","version":"0.2.8","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"start":"node ./build/main.js","test":"jest","test:coverage":"jest --coverage","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"5d9f43ff073051da12bb35d09975215b0480d933","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.2.8","_nodeVersion":"8.15.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-MqoEPtGm+/DWQiM1kSk+DSvdlTKgyZh5Q9MbrXeK5808Hpsn9UF0nL85J91oQRIlKDQLkuR6Oz3vXvjsWSqMZA==","shasum":"3f34f86c797809848a157f4dfb7b3158f446e995","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.2.8.tgz","fileCount":72,"unpackedSize":60202,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcs0loCRA9TVsSAnZWagAAJs4P/1r2UGgHq+vvkeRUW05y\n8Kk94kETToO6QbnBnuTcEmYCyo7Qf3m4U39gHSumiu/amY326cwoSTTTpL79\nY0Ir6oBccfkKe7N4VwjbBJ79glbArT4+mjPgUN/2ikxeoFXo6oe8vJEvUGpP\n6ilA3s4dZQl1g19B2uhe9ya9wdbMPKcGOf8Jf1cCsc6+yT2PBFjfnWn6xch2\nx80ssd/v5cDoyumWnTCkkTBP36hWnh7KdB9AaqKGom+ZjtjI7eYjDISnGk3G\nR+UWmFj1F+20qGULNqMkXi7iPtEpAtnTwB+/2RNd+ZM5zbwonFWtwSdTbtw8\n9VHr+616XXf+QPcYqt3IZVgH1u+hxa/IQLXfTB02/Ou/Z52U1ORmrqD3CDFP\n3XiZqjsFf+5OowVJ3LC/fGXzm3BEY20IWxe+xOJmQb7ycbqelJVpdSQIzCoH\nRkoypPHWqdmKcXYfoqaOmm44j41QD8YIvKHBcY3pBM22sHqGNbJwckX+9CIh\nbLSx2sMXCm+hrkQBVVbSvcOyjqI/TA8fY1P+dLjdzxv5xUtYVWqdFjSpB/Us\n+6728zYqJzYYasRA8JS2FIlcDnHUEEjPm5do/mXQu0qYD+FEtvLMZekTiyll\napzbXXZVWGd9OwUd6/V9o+lU3qlGr/eC4TckhbpXEMAkD4r2kP/nqByHQGCF\nmp1n\r\n=4TXY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHW3aTGaLV7A0Az64FlP9OrF8KS4DPwNhehXm+bbbRpUAiBb+Q4lUNVgko9N8WucN5d5/ikiSu/aQUuU4Upa7HtuCg=="}]},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.2.8_1555253607696_0.6397514768122339"},"_hasShrinkwrap":false},"0.2.9-rc.1":{"name":"type-comparator","version":"0.2.9-rc.1","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"start":"node ./build/main.js","test":"jest","test:coverage":"jest --coverage","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"3436a5d6774f589b6117394b4c90b564a2c7e144","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.2.9-rc.1","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","dist":{"integrity":"sha512-WlB8O42vi4OzdSCX6v/Zw5jRguRGoRcDw6tJGRZCq7HEKuCrNOemf8KIp+UKcLfU8VFnOcH53jLysbuq002Q1Q==","shasum":"0459403ea4e2b5f1c3a6c6451d0da7fd056280c6","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.2.9-rc.1.tgz","fileCount":32,"unpackedSize":46185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9FHJCRA9TVsSAnZWagAAEKUQAJBjZiCdx0ELSxKmgG7u\n/zzkGBoFHQqI24KGSlyLJOU33ZgLh/NaHb6ilI/RTNqaBNwPmZ8uAl/CEzjp\nHNr8IRpMKOKRB3tIC8oodqlH29TyF2hokd9AdCmMiB6SCxNRO2xcDadLfjwm\ntAj+QD5eMBe5BNkwzXmhNKoSaAb2cXIDgLU6KLfFBa2KAm5oo+nIhcsOa49l\nGZ/BLCjcWyBSsJH4FVVXuBDeGFvcpO6GO8Kqttg+8AgWOqTBtkhZ02kWhBQF\nyymxsv+BP2KUTG2Ys3VnWKLXs2ITzlrZ6b0NaUsuTHqP/xPT1MRg/5DjN34P\nsyAqHKDqms9A4DTYzUojYXiMKLheqZVVEd+kRR/ibmfEK1rEyS18wBsu1t6W\nO6FQ9Rqg6bpOD8zL0Bdqm8kDspmEtrq3RpUD6ioIeQwyzoqtEdQA6BSwaVSn\ntKPHzCctYzizgPTomaMJgniTZMqmmObgZqyTZRKOXcOFeXV7F6B5J519DUwR\n9kDh9fu5IrctjYfjIDmzRbkhkHZ17n7xIBQ+N3/07kdHBbzS2HPOt2HNaDi3\nMKbiu4Nosl4mj8+D/jfgLlo2igizAY8GM2kqLrtBLdzKgo0TYwr+qumypIA8\nAtuuHi6Aqii4TSY6E72uP3+jf7JZqTC0sDmVcORP4ftnFz3uqqSkyzvEAZ9Z\nmxXV\r\n=aJKH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1MTx0pcXoylbVP/7ZTfQY8h4Dv6Pa1xG8wH0D2pt+BwIhANBsnyo1GW3qshj/rbFP4JHX0zM6Ihi/bXU80MrOWRdI"}]},"_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"directories":{},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.2.9-rc.1_1609847241455_0.7076305533905605"},"_hasShrinkwrap":false},"0.2.9-rc.2":{"name":"type-comparator","version":"0.2.9-rc.2","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"start":"node ./build/main.js","test":"jest","test:coverage":"jest --coverage","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"ad0630b37b9716c0ab73da07c4cd36a8a086c9d9","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.2.9-rc.2","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Vp7HhVyBbNESU2asxCiLewanQjTDQ7MBn7HWDSs+vTFLmDP+855lSb1W+2Gqqd393W1Xl7t43qLA4szSmzrcKg==","shasum":"da69190bbb7b087de9e1ec4ef07434496823e7f9","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.2.9-rc.2.tgz","fileCount":32,"unpackedSize":46346,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9FkjCRA9TVsSAnZWagAA5FkQAIU/h8yIbEpyic/OIrG+\nVHLeXFRj0CZqf0qMfIP72qEUvfpl2k1YVFSPnflGI0yIDDJuG155aGRNHKYZ\nbdJCUBOesBITfDAev3ZMC8L/aqFa+Vk+r+K1E90pHS8NOEktS65E9LBSnzoY\n95g+Au41D2e4APva+bsvVD3jmEhs2P4A0S53/lodlwvhATYceYsFeUCR5HEa\nHY44Tve3BdVivX0lrBFUAm6rZ58y05E8xWP4z2HA1DE+creHqSerw6KziZor\n7bZR0PHjbtRCliikSePQXroPMY1oIAg3DMWguGWjRdbrc3blda4bDbpndx6t\n01r2rYsd3jYLLmxGcJaJpHXcTMY4OMQtidihMZz+nzsyom2o35q8NTHNsnv0\nDHQ0K63WeWcz8bg8UPRZgxxizL18rhRc27amtK2Zk6CqBe2Nac8WhHsRfmQv\nK64AwNu11pMfB5Zf5UiwZeD5Wxkp4aim2ZaVPo61Wv0fpEzpy7Pli0sFZFCX\nsSBZu/z8ZBeeCgPJ5ghxO5tr+TMNCZV8+L1tBktA2X5izC3+6OE4XtAoyCat\nGNSSVEuKQr3wTbmGxjnNqyiojQyZDaYyqy//7xmUWt28LKSm5FtcMgREFBey\nXX4k0x1gGS6TWYa5wr4evG+8kLWf7aKC3DLMgstAEG76nN5Rk0s1AxoSQdrG\nPVXT\r\n=T3Oy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1XyILwa+YCam+7aHWUZi1VBkkSm4H8PItxFB1wr4wQwIgEF3t8zzfwbzi3PwAl47RnuB8rxEuPxFM0A1LhckqNAI="}]},"_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"directories":{},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.2.9-rc.2_1609849123198_0.030978363433081357"},"_hasShrinkwrap":false},"0.2.9-rc.3":{"name":"type-comparator","version":"0.2.9-rc.3","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"start":"node ./build/main.js","test":"jest","test:coverage":"jest --coverage","build":"tsc","clean":"rimraf build","prepublish":"npm run clean && npm run build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"4293cf324aa936865f0548568f626e6de1f01884","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.2.9-rc.3","_nodeVersion":"14.16.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-6ZYZJc00yio9D35UYzGiO0oaRe3pISFnSY1LZegjH5v7GBTsnAg40MqlYYdZ5eILRObXThmD16OX//P1wGCc8Q==","shasum":"d7c1fd2023dee6ba5ba86c29b28e021c193352ee","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.2.9-rc.3.tgz","fileCount":74,"unpackedSize":63749,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkVEeCRA9TVsSAnZWagAARKYP/RpLcgn5JX69bKfamNxx\nx1cC0ILBuHXLb+LzXzMe1JD2Ni3SChmaDYBGFOyEF7l8zdNZ9rGAVnagNQD3\nCUDZ5z4Yludq2AFqcCoai0eP4v+vQ6P0+cY3/BC4qaSKSQlGWvmz3vTaTI61\nTAdeKMM6BW8uaZZt8Q2+Jub2dVyoS417bbGObzRyjZcSacQ8tITPsEhqn7Oo\nd5j0snhg9hRZVfSHqGzCT7YAZvdUn2Q0WqPazleJnBS0tLP7uZZPbJDtBsXi\nn8fIh5+nxP9Zq4WDXsZ+9ikuGYVMh0pi+oYmALATT70PO3RlqUY1IqcrACc4\nVwCY9YUeIWaNK2ilP1hZW+7ZobeHaARaW9Po2RadvJQNGe4/mj/lO2eTu36E\nwlQep9KybZejYryy3JB8hHDUd1jFW5emW/5ZbHlcsLLkxDruovPmU4HuvbE3\n59Wkx0d+SUP+6dV8KoA3GZHlMfoBpHG3Yz6HF4KzVJFjjml3ku4RdqWGb/Sk\nYcv/CwYvIez7NqXwnMzTlbVzKySxScnDXFygAvuaJHtpnJYnDRR2o3N2GK/p\nS+ygcrWJA0h7XDF0bzd/cI3wikTs2N1EDXF+5XkUlTm4PYeIcNtEQL6qJpuB\nUTzf8Xq6Cp4AcSnQ0u+0tBWjwDkMc8OuOvgojKEcsxsUsqHbtoJ5oJJxW1SY\nx9oS\r\n=kqpj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHFxdAfxN0iwxAyLvrajd9xpSNIm5X/0X2AYDf7m/RWqAiEAgunrs/vkMLbNO1a0gBdVQ/U8zkkY1hxUfwAoyj/PKaQ="}]},"_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"directories":{},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.2.9-rc.3_1620136222110_0.06879940376782434"},"_hasShrinkwrap":false},"0.2.9":{"name":"type-comparator","version":"0.2.9","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"start":"node ./build/main.js","test":"jest","test:coverage":"jest --coverage","build":"tsc","clean":"rimraf build","prepublish":"npm run clean && npm run build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@types/jest":"^24.0.4","jest":">=22 <24","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"b11e7b1db590e781ff5c9383be098eac695d6aac","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.2.9","_nodeVersion":"14.17.6","_npmVersion":"7.22.0","dist":{"integrity":"sha512-aFGXUUwAMn5ndvLVqdr/0CcrAGuzkyiEZppBDRdDXsWQeqhg4mE4FLVyP6E9Po3RGyIqpoZF5HkTe9kiwIrmhw==","shasum":"3e90ebdc6de339886d57b829a252e6baa9946d1c","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.2.9.tgz","fileCount":65,"unpackedSize":37260,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhOdUmCRA9TVsSAnZWagAA/ksP/A7BRtSbYsHDte8bI1qZ\nlbeUPQESR+ix4EgarzeRjDNJVfZVXdogHGIwNj0BFfKYYTaZYz/YQehTL2g5\nULLxBX+3lj7kecL3C4bvzyBjMqQV6Ixp41RpeCK+HueJcwc93kVC6dadctpq\nwEn0i/xjO2Dg5CrUASxuCDP/PteOHozBGTcaUQ3maMnUNi/nRkwUPOGC7NEd\nyFHLRsGRXVyt4mQmVtZzucEDsBWX0/5VScXj+CYZm6udjmHhqg/ahVh2vg7F\nN24EALoQlYHLIpuxfBPxmMhTiqTwmiyos/aO3Kfc7dhzS8awuakOsRKq1kuK\nGOaqw6T7o2jxLIHjjGftwUPTGkXX7bIDnVWb+HfRKFNCph5e0qny9g5nVdyX\nPMjhF9+qg9upH0R9t3i/yEVibRIBnPawLI4ALX00Utoq2k6JLzJMv+S0WGSQ\ngvzubYesWejIsZ+GquPP8cLc3UoQc1Dw9TkI84WbnbNlsPe0IID6fKDSh/Rg\n7JiRLqodb2en7G+llFl7da+oCQlLTFD8uCEzins6/Ck+uPE/+exhY1RgKMrD\nhZFoU9J6nQPGA+mPINr15g33j061egBhj3UNIvADn+ZkXWqbY7PXitnxJ8KO\n3/rCdGR4JDogRIHeIs3wiEtkurDZr+G8JZPi3wslW9rOy8j+xhn4MwDyVyeD\nAVsP\r\n=LUxg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGFuTOgf21buAy6btWYUxbWK3UZMwkefymoxJyQwqEoQIhALFzKWjSJHu4C28gYzw+AKIjAH+4cBKy2ZSaOgJvYnJE"}]},"_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"directories":{},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.2.9_1631180070069_0.8513015765612317"},"_hasShrinkwrap":false},"0.2.10-1":{"name":"type-comparator","version":"0.2.10-1","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"start":"node ./build/main.js","test":"jest","test:coverage":"jest --coverage","build":"tsc","clean":"rimraf build","prepublish":"npm run clean && npm run build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts","release":"release-it"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@release-it/conventional-changelog":"^5.1.1","@types/jest":"^24.0.4","jest":">=22 <24","release-it":"^15.6.0","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"readme":"\n<img src=\"https://pp.userapi.com/c852036/v852036486/bbce5/DCotw_jzAKo.jpg\" width=\"100\" alt=\"Logo\" align=\"right\" />\n\n<a href=\"https://www.npmjs.com/package/type-comparator\">\n    <img src=\"https://img.shields.io/npm/v/type-comparator.svg?style=flat\" alt=\"NPM Version\" />\n</a>\n<a href=\"https://www.npmjs.com/package/type-comparator\">\n    <img src=\"https://img.shields.io/npm/l/type-comparator.svg?style=flat\" alt=\"Package License\" />\n</a>\n<a href=\"https://www.npmjs.com/package/type-comparator\">\n    <img src=\"https://img.shields.io/npm/dm/type-comparator.svg?style=flat\" alt=\"NPM Downloads\" />\n</a>\n<a href=\"https://travis-ci.org/lightness/type-comparator\">\n    <img src=\"https://img.shields.io/travis/lightness/type-comparator.svg?style=flat\" alt=\"Travis\" />\n</a>\n<a href=\"https://codecov.io/gh/lightness/type-comparator\">\n    <img src=\"https://img.shields.io/codecov/c/github/lightness/type-comparator.svg?style=flat\" alt=\"Travis\" />\n</a>\n\n# Type Comparator\n\nUseful comparator functions written on Typescript (But you can use it on your JS project)\n\n<img src=\"https://pp.userapi.com/c847124/v847124060/1bc6cf/t_jixj5HLK4.jpg\" width=\"730\" alt=\"Image\" align=\"center\" />\n\n## Table of Contents\n\n- [Type Comparator](#type-comparator)\n  - [Table of Contents](#table-of-contents)\n  - [Installation](#installation)\n  - [Usage](#usage)\n    - [Base comparators: `asc` and `desc`](#base-comparators-asc-and-desc)\n    - [Functional way](#functional-way)\n      - [Function `reverse(comparator)`](#function-reversecomparator)\n      - [Function `map(mapper, comparator)`](#function-mapmapper-comparator)\n      - [Function `condition(conditionFn, comparatorA, comparatorB)`](#function-conditionconditionfn-comparatora-comparatorb)\n      - [Function `queue(comparators)`](#function-queuecomparators)\n    - [Chaining way](#chaining-way)\n      - [Basic usage](#basic-usage)\n      - [Chain `.reverse()`](#chain-reverse)\n      - [Chain `.map(mapper)`](#chain-mapmapper)\n      - [Chain `.if(conditionFn)`](#chain-ifconditionfn)\n      - [Chain `.then(comparator)`](#chain-thencomparator)\n      - [Chain `.elif(conditionFn)`](#chain-elifconditionfn)\n      - [Chain `.else(comparator)`](#chain-elsecomparator)\n      - [Chain `.use(comparators)`](#chain-usecomparators)\n    - [Something more complex?... Ok!](#something-more-complex-ok)\n    - [Q&A](#qa)\n  - [Support](#support)\n  - [Contributing](#contributing)\n\n## Installation\n\n```sh\nnpm i type-comparator\n```\n\n## Usage\n\n### Base comparators: `asc` and `desc` \n\n`asc` is simple comparator contains just base comparison logic. \n\nIt works well with numbers...\n\n```ts\nconst array = [17, 4, -17, 42, -3, 0];\n\n// [-17, -3, 0, 4, 17, 42]\narray.slice().sort(asc); \n// [42, 17, 4, 0, -3, -17]\narray.slice().sort(desc); \n```\n\nAnd with strings...\n\n```ts\nconst array = ['aaa', 'bax', 'a', 'x', 'ax', 'ab', 'ba', 'bx'];\n\n// [\"a\", \"aaa\", \"ab\", \"ax\", \"ba\", \"bax\", \"bx\", \"x\"]\narray.slice().sort(asc); \n// [\"x\", \"bx\", \"bax\", \"ba\", \"ax\", \"ab\", \"aaa\", \"a\"]\narray.slice().sort(desc);\n```\n\nEven with dates...\n\n```ts\nconst array = [new Date(2018, 0, 1), new Date(2017, 0, 1), new Date(2019, 0, 1)];\n\n// [Date(2017, 0, 1), Date(2018, 0, 1), Date(2019, 0, 1)]\narray.slice().sort(asc); \n// [Date(2019, 0, 1), Date(2018, 0, 1), Date(2017, 0, 1)]\narray.slice().sort(desc);\n```\n\nActually it works well with everything comparable by `>` and `<`. \n\n**NOTE** Every values which are neither `>` nor `<` are equal.\n\nAs you can see below, the initial order remains. If you want to sort by value of some item property, take a look on `map` function.\n\n```ts\nvar array1 = [{a: 1}, {a: 5}];\nvar array2 = [{a: 5}, {a: 1}];\n\narray1.slice().sort(asc);  // [{a: 1}, {a: 5}]\narray2.slice().sort(asc);  // [{a: 5}, {a: 1}]\narray1.slice().sort(desc); // [{a: 1}, {a: 5}]\narray2.slice().sort(desc); // [{a: 5}, {a: 1}]\n```\n\n*****\n\n### Functional way\n\n#### Function `reverse(comparator)`\nJust swap comparator args.\n```ts\nimport { asc, cmp, reverse } from 'type-comparator';\n\nconst functionalCmp = reverse(asc);\nconst array = [17, 4, -17, 42, -3, 0];\n\n// [ 42, 17, 4, 0, -3, -17 ]\narray.slice().sort(functionalCmp);  \n```\n\n#### Function `map(mapper, comparator)`\nMaps each args with `mapper` and apply `comparator`.\n\n```ts\nimport { asc, cmp, map } from 'type-comparator';\n\nconst mapper = x => x.a;\nconst comparator = map(mapper, asc);\nconst array = [{ a: 15 }, { a: 5 }];\n\n// [ { a: 5 }, { a: 15 } ]\narray.slice().sort(comparator);\n```\n\n#### Function `condition(conditionFn, comparatorA, comparatorB)`\nHas following logic:\n - Applies `comparatorA`, if both args satisfy `conditionFn`.\n - Applies `comparatorB`, if both args do not satisfy `conditionFn`.\n - Returns positive value, if only first arg satisfies `conditionFn`.\n - Returns negative value, if only second arg satisfies `conditionFn`.\n\n```ts\nimport { asc, cmp, condition } from 'type-comparator';\n\nconst conditionFn = x => x % 2 === 0;\nconst comparator = condition(conditionFn, asc, desc);\nconst array = [17, 4, -17, 42, -3, 0];\n\n// [ 17, -3, -17, 0, 4, 42 ]\narray.slice().sort(comparator);\n```\n\n#### Function `queue(comparators)`\nApplies first comparator from `comparators`. \n - If comparator returns non-zero value, returns it as result.\n - If comparator returns `0`, apply next comparator from `comparators`. \n - If there is no more comparator in `comparators` list, returns `0`.\n\n```ts\nimport { asc, cmp, desc, map, queue } from 'type-comparator';\n\nconst comparator = queue([\n    map(x => x.name, asc),\n    map(x => x.age, desc),\n]);\nconst array = [\n    { name: 'Alex', age: 21 },\n    { name: 'Jane', age: 19 },\n    { name: 'Alex', age: 26 },\n];\n\n// [ \n//    { name: 'Alex', age: 26 },\n//    { name: 'Alex', age: 21 },\n//    { name: 'Jane', age: 19 } \n// ]\narray.slice().sort(comparator);\n```\n\n******\n\n### Chaining way\n\n#### Basic usage\n`cmp()` - just starts chaining.\n`.use(comparator)` - applies comparator and terminates chaining.\n\n**Note:** `use()` chain can work with any comparator function (not only produced by `type-comparator`)\n\n```ts\nimport { asc, cmp } from 'type-comparator';\n\n// same as just `asc` function\nconst comparator1 = cmp().use(asc);\n\n// works like `asc` but just for numbers\nconst comparator2 = cmp().use((a, b) => a - b); \n\n// not a lot of sense, but it's possible\nconst comparator3 = cmp().use(comparator1); \n```\n\n#### Chain `.reverse()`\n\n```ts\nimport { asc, cmp, reverse } from 'type-comparator';\n\nconst comparator = cmp().reverse().use(asc);\nconst array = [17, 4, -17, 42, -3, 0];\n\n// [ 42, 17, 4, 0, -3, -17 ]\narray.slice().sort(comparator);\n```\n#### Chain `.map(mapper)`\n\n```ts\nimport { asc, cmp, map } from 'type-comparator';\n\nconst mapper = x => x.a;\nconst comparator = cmp().map(mapper).use(asc);\nconst array = [{ a: 15 }, { a: 5 }];\n\n// [ { a: 5 }, { a: 15 } ]\narray.slice().sort(comparator);\n```\n\n#### Chain `.if(conditionFn)`\nChecks `conditionFn` for each arg. \n - Applies next `.then` chain, if both args satisfy `conditionFn`.\n - Applies next `.else`/`.elif` chain, if both args do not satisfy `conditionFn`.\n - Returns positive value, if only first arg satisfies `conditionFn`.\n - Returns negative value, if only second arg satisfies `conditionFn`.\n\n**Note:** After `.if()` chain, only `.then` chain is available.\n```ts\nimport { asc, cmp } from 'type-comparator';\n\nconst conditionFn = x => x % 4 === 0;\nconst conditionFn2 = x => x % 2 === 0;\nconst chainingCmp = cmp()\n    .if(conditionFn).then(asc)\n    .elif(conditionFn2).then(asc)\n    .else(asc);\nconst array = [17, 4, -17, 42, -3, 0];\n\n// [ -17, -3, 17, 42, 0, 4 ]\narray.slice().sort(chainingCmp);\n```\n\n#### Chain `.then(comparator)`\nApplies `comparator`, if condition from previous `.if()`chain satisfies for both args.\n\n**Note:** After `.then()` chain, only `.elif()` or `.else()` chains are available.\n**Note:** `.then()` chain is available only after `.if()` or `.elif()` chains.\n\n#### Chain `.elif(conditionFn)`\nWorks same `.if()` chain.\n\n**Note:** After `.elif()` chain, only `.then()` chain is available.\n**Note:** `.elif()` chain is available only after `.then()` chain.\n\n#### Chain `.else(comparator)`\nApplies `comparator`, if both args do not satisfy comparators from previous `.if()`/`.elif` chains.\n\n**Note:** `.else()` chain is available only after `.then()` chain.\n**Note:** `.else()` chain finishes chaining and returns result comparator function.\n\n#### Chain `.use(comparators)` \nWorks same as `queue(comparators)` and terminates chaining.\n\n```ts\nimport { asc, cmp, desc } from 'type-comparator';\n\nconst comparator = cmp().use([\n    cmp().map(x => x.name).use(asc),\n    cmp().map(x => x.age).use(desc),\n]);\nconst array = [\n    { name: 'Alex', age: 21 },\n    { name: 'Jane', age: 19 },\n    { name: 'Alex', age: 26 },\n];\n\n// [ \n//    { name: 'Alex', age: 26 },\n//    { name: 'Alex', age: 21 },\n//    { name: 'Jane', age: 19 } \n// ]\narray.slice().sort(comparator);    \n```\n\n*********************************\n\n### Something more complex?... Ok!\n```ts\nimport { asc, cmp, desc } from 'type-comparator';\n\nconst comparator = cmp()\n    .map(x => x.a)\n    .use([\n        cmp()\n            .map(x => x.b)\n            .use(desc),\n        cmp()\n            .if(x => (x.b + x.c) % 2 === 0)\n            .map(x => x.c)\n            .use(asc),\n    ]);\n\nconst array = [\n    { a: { b: 1, c: 7 } },\n    { a: { b: 1, c: 6 } },\n    { a: { b: 1, c: 5 } },\n    { a: { b: 1, c: 4 } },\n    { a: { b: 1, c: 3 } },\n    { a: { b: 3, c: 2 } },\n];\n\n// [\n//     { a: { b: 3, c: 2 } },\n//     { a: { b: 1, c: 4 } },\n//     { a: { b: 1, c: 6 } },\n//     { a: { b: 1, c: 3 } },\n//     { a: { b: 1, c: 5 } },\n//     { a: { b: 1, c: 7 } },\n// ]\narray.slice().sort(comparator);\n```\n\n****\n### Q&A\n\n**Q:** Should `reverse(cmp)` be equals to reversed array with `cmp` ?\n\n**A:** In general, it should not. \n`Array.prototype.reverse` just reverse all elements order, regardless its values.\nWhen comparator suppose both values are equal, it returns `0`. And these elements save original order.\n\n```ts\nconst array = [1, 2, 4];\nconst comparator = cmp().map(x => x % 2 === 0).use(asc);\n\n// [2, 4, 1]\narray.slice().sort(reverse(comparator));\n\n// [4, 2, 1]\narray.slice().sort(comparator).reverse();\n```\n\n\n## Support\n\nPlease [open an issue](https://github.com/lightness/type-comparator/issues/new) for support.\n\n## Contributing\n\nPlease contribute using [Github Flow](https://guides.github.com/introduction/flow/). Create a branch, add commits, and [open a pull request](https://github.com/lightness/type-comparator/compare/).\n","readmeFilename":"README.md","gitHead":"7e05cc60883552513f370bd504cde0af77128a2b","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.2.10-1","_nodeVersion":"14.17.6","_npmVersion":"7.24.2","dist":{"integrity":"sha512-xH0S0rtLKRmqingrMLvhipauARz2xHLxsc5rX5Iblk8K4+rxZDIOMKxQxQ9uGjxo2XMtmdDiXQgP1I7bBo4WtA==","shasum":"c05d48eac1b9143c6f9e9a344a408dd8e0e0efe7","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.2.10-1.tgz","fileCount":47,"unpackedSize":28015,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdsaGAZe16crGnxwWHkzjUuJ88ssXnHx2yPyN3xIsE1gIgOGeeMup404BDAD7Vdb2Z2N3zIlCg4mXX31UejD1iYBE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj97C1ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpCsBAAkRRe7ZBPfvF92iQeOaBb0iIyHtt0CiNy8TLUvZFRXDICDOrN\r\nW5OQjTJSlCtmwsZ3erBHrzV9+R4woPQ2gdMHpigJ8+eBKLFCzrB5egDJ0jmy\r\ny25BHTyyuuGtlWMsv+d9esrcf/BWhvfMfHaHzqUsIoYJ+QyxnJWzlCjwoavv\r\nR4nuShlYk1sqWxoXGvoABwqikRCnqUa4Uj/TyuQBrSoCQiHHxTvnIn9QuiPA\r\nD0bxuBp4AFSHZLkhc4EwWSd2HxCMdGjTFrq7zSODvtARLUJgAVmbSdJ8Pdl3\r\n90qBfiSlV432FbgOVmzizQIefZKRLciizCv/vDhIMpkc+OfehSD3dlbOOAH3\r\nIu3/u7R8yTE/5rLTj970YvuxoBof3GRakrZeagydMbNzo5n829BwHFAhqDnd\r\nrT77HE0jJsMAn81rte0fu8DP+x6BsuefDJKAxOvab3iwnWocuKUhtFoTHB3X\r\nPtanMM2Q8P8raB8rlILa5BXCwcib3WmsC4UIZerZwIzAEkm4y5pkJ9xYUuyi\r\nRmqXIiRW7VbTQI3Sb52rkmKqbWWQJbFdUUYsT4/TVIxWr/m1uufUwoaFODqh\r\ncm5EJ9jEPr7+Ku7PFZK+zCgy1cmHGcGuOKyUNePJmJlhTSTw6B5j569B8uuA\r\nSovICRf1V/v8iEB0u3R4O9nn9+zFxB0vniA=\r\n=oce0\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"directories":{},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.2.10-1_1677177012867_0.18567865450195953"},"_hasShrinkwrap":false},"0.2.10-0":{"name":"type-comparator","version":"0.2.10-0","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"start":"node ./build/main.js","test":"jest","test:coverage":"jest --coverage","build":"tsc","clean":"rimraf build","prepublish":"npm run clean && npm run build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts","release":"release-it"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@release-it/conventional-changelog":"^5.1.1","@types/jest":"^24.0.4","jest":">=22 <24","release-it":"^15.6.0","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"defb7a1ff29f4132dd313029fb5f401efea45291","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.2.10-0","_nodeVersion":"14.21.3","_npmVersion":"6.14.18","dist":{"integrity":"sha512-13IRyvXMPQQoAOV53/dp8VOIP+vaIyPZX9SHe6VSFK7AHzz3bExXnxbUtZ0stJjsLQi8LCUxGdp66CiqiESk4Q==","shasum":"0a84189989e4d7a317729411833223bddc25ae17","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.2.10-0.tgz","fileCount":48,"unpackedSize":30780,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDZDCPfK8YPFmRsDltU4i4xjhcAg5HsbnZdwEYcpDOw6AiAH9UR9glRhRTLGDUq6gT4uT7AGswX+xwdXLEOX+1SrwQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj97EXACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpSLBAAhr6pB3bLIlTSwAp4qDuN6Dx+Yj/N/5E59W/Ois+ENW/KnpRY\r\nKZzgiaI74w7NqNz5AHWHxSBSSxMOnp3cPNGGWZDe1eUqFNyl43mjW955DPvK\r\nEolLPwHinKmKQk/umyKKCDc9CoSygqZ80rHPhzKeKa8UCN0FYQhvUsLfMxlZ\r\nmrbkhJIXS6V2RzNBrB0o/8r+XJHKs1Tqg2pZE844dRO89zoOkSN27dd48aww\r\nOugvoUGqpS3CEY8YZoorVQT4BiM58DXGZQaf1H7+YcDuciJundPgQwamh69g\r\nF1eUkGpDd1XmCBeaxsFmgauRAMeQAkJ3+w8o45x8kSOjnFJa7jmyrGogLHNr\r\n2SpYN5oRAYqmlOkndafyAyGv5OgRf+XTGq4EBfFQRYQyczGl+jw2RIVve4MC\r\nzGoskWHfmDa7JSdO8IelAVCOoSELXTv31dmHV61B3P6Rl5mjE84mxLjiuotU\r\nHTwcqrh9+UeBLjAU9yhu2XrCozm/9Sxh3BVN7nfAdtHPb6Q+EEDvkBO10+Ef\r\n9NIu9VCBmAI4QyiXWcfwrCGi1qCerAERMZDJGeb4cl3xWCdNnNgx6uNC/QDz\r\n65jYfZtVEfwuB6yhjULuNPR6Fwh4RUUQUzPSWnQFakiPyS4jMA47G+Rf12mO\r\nzXRfHwehzy96TByUz95NYlCrinB/8SwYa3A=\r\n=Dwvt\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"directories":{},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.2.10-0_1677177111438_0.24235429417293353"},"_hasShrinkwrap":false},"0.2.10-2":{"name":"type-comparator","version":"0.2.10-2","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"start":"node ./build/main.js","test":"jest","test:coverage":"jest --coverage","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts","release":"npm run clean && npm run build && release-it"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@release-it/conventional-changelog":"^5.1.1","@types/jest":"^24.0.4","jest":">=22 <24","release-it":"^15.6.0","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"readme":"\n<img src=\"https://pp.userapi.com/c852036/v852036486/bbce5/DCotw_jzAKo.jpg\" width=\"100\" alt=\"Logo\" align=\"right\" />\n\n<a href=\"https://www.npmjs.com/package/type-comparator\">\n    <img src=\"https://img.shields.io/npm/v/type-comparator.svg?style=flat\" alt=\"NPM Version\" />\n</a>\n<a href=\"https://www.npmjs.com/package/type-comparator\">\n    <img src=\"https://img.shields.io/npm/l/type-comparator.svg?style=flat\" alt=\"Package License\" />\n</a>\n<a href=\"https://www.npmjs.com/package/type-comparator\">\n    <img src=\"https://img.shields.io/npm/dm/type-comparator.svg?style=flat\" alt=\"NPM Downloads\" />\n</a>\n<a href=\"https://travis-ci.org/lightness/type-comparator\">\n    <img src=\"https://img.shields.io/travis/lightness/type-comparator.svg?style=flat\" alt=\"Travis\" />\n</a>\n<a href=\"https://codecov.io/gh/lightness/type-comparator\">\n    <img src=\"https://img.shields.io/codecov/c/github/lightness/type-comparator.svg?style=flat\" alt=\"Travis\" />\n</a>\n\n# Type Comparator\n\nUseful comparator functions written on Typescript (But you can use it on your JS project)\n\n<img src=\"https://pp.userapi.com/c847124/v847124060/1bc6cf/t_jixj5HLK4.jpg\" width=\"730\" alt=\"Image\" align=\"center\" />\n\n## Table of Contents\n\n- [Type Comparator](#type-comparator)\n  - [Table of Contents](#table-of-contents)\n  - [Installation](#installation)\n  - [Usage](#usage)\n    - [Base comparators: `asc` and `desc`](#base-comparators-asc-and-desc)\n    - [Functional way](#functional-way)\n      - [Function `reverse(comparator)`](#function-reversecomparator)\n      - [Function `map(mapper, comparator)`](#function-mapmapper-comparator)\n      - [Function `condition(conditionFn, comparatorA, comparatorB)`](#function-conditionconditionfn-comparatora-comparatorb)\n      - [Function `queue(comparators)`](#function-queuecomparators)\n    - [Chaining way](#chaining-way)\n      - [Basic usage](#basic-usage)\n      - [Chain `.reverse()`](#chain-reverse)\n      - [Chain `.map(mapper)`](#chain-mapmapper)\n      - [Chain `.if(conditionFn)`](#chain-ifconditionfn)\n      - [Chain `.then(comparator)`](#chain-thencomparator)\n      - [Chain `.elif(conditionFn)`](#chain-elifconditionfn)\n      - [Chain `.else(comparator)`](#chain-elsecomparator)\n      - [Chain `.use(comparators)`](#chain-usecomparators)\n    - [Something more complex?... Ok!](#something-more-complex-ok)\n    - [Q&A](#qa)\n  - [Support](#support)\n  - [Contributing](#contributing)\n\n## Installation\n\n```sh\nnpm i type-comparator\n```\n\n## Usage\n\n### Base comparators: `asc` and `desc` \n\n`asc` is simple comparator contains just base comparison logic. \n\nIt works well with numbers...\n\n```ts\nconst array = [17, 4, -17, 42, -3, 0];\n\n// [-17, -3, 0, 4, 17, 42]\narray.slice().sort(asc); \n// [42, 17, 4, 0, -3, -17]\narray.slice().sort(desc); \n```\n\nAnd with strings...\n\n```ts\nconst array = ['aaa', 'bax', 'a', 'x', 'ax', 'ab', 'ba', 'bx'];\n\n// [\"a\", \"aaa\", \"ab\", \"ax\", \"ba\", \"bax\", \"bx\", \"x\"]\narray.slice().sort(asc); \n// [\"x\", \"bx\", \"bax\", \"ba\", \"ax\", \"ab\", \"aaa\", \"a\"]\narray.slice().sort(desc);\n```\n\nEven with dates...\n\n```ts\nconst array = [new Date(2018, 0, 1), new Date(2017, 0, 1), new Date(2019, 0, 1)];\n\n// [Date(2017, 0, 1), Date(2018, 0, 1), Date(2019, 0, 1)]\narray.slice().sort(asc); \n// [Date(2019, 0, 1), Date(2018, 0, 1), Date(2017, 0, 1)]\narray.slice().sort(desc);\n```\n\nActually it works well with everything comparable by `>` and `<`. \n\n**NOTE** Every values which are neither `>` nor `<` are equal.\n\nAs you can see below, the initial order remains. If you want to sort by value of some item property, take a look on `map` function.\n\n```ts\nvar array1 = [{a: 1}, {a: 5}];\nvar array2 = [{a: 5}, {a: 1}];\n\narray1.slice().sort(asc);  // [{a: 1}, {a: 5}]\narray2.slice().sort(asc);  // [{a: 5}, {a: 1}]\narray1.slice().sort(desc); // [{a: 1}, {a: 5}]\narray2.slice().sort(desc); // [{a: 5}, {a: 1}]\n```\n\n*****\n\n### Functional way\n\n#### Function `reverse(comparator)`\nJust swap comparator args.\n```ts\nimport { asc, cmp, reverse } from 'type-comparator';\n\nconst functionalCmp = reverse(asc);\nconst array = [17, 4, -17, 42, -3, 0];\n\n// [ 42, 17, 4, 0, -3, -17 ]\narray.slice().sort(functionalCmp);  \n```\n\n#### Function `map(mapper, comparator)`\nMaps each args with `mapper` and apply `comparator`.\n\n```ts\nimport { asc, cmp, map } from 'type-comparator';\n\nconst mapper = x => x.a;\nconst comparator = map(mapper, asc);\nconst array = [{ a: 15 }, { a: 5 }];\n\n// [ { a: 5 }, { a: 15 } ]\narray.slice().sort(comparator);\n```\n\n#### Function `condition(conditionFn, comparatorA, comparatorB)`\nHas following logic:\n - Applies `comparatorA`, if both args satisfy `conditionFn`.\n - Applies `comparatorB`, if both args do not satisfy `conditionFn`.\n - Returns positive value, if only first arg satisfies `conditionFn`.\n - Returns negative value, if only second arg satisfies `conditionFn`.\n\n```ts\nimport { asc, cmp, condition } from 'type-comparator';\n\nconst conditionFn = x => x % 2 === 0;\nconst comparator = condition(conditionFn, asc, desc);\nconst array = [17, 4, -17, 42, -3, 0];\n\n// [ 17, -3, -17, 0, 4, 42 ]\narray.slice().sort(comparator);\n```\n\n#### Function `queue(comparators)`\nApplies first comparator from `comparators`. \n - If comparator returns non-zero value, returns it as result.\n - If comparator returns `0`, apply next comparator from `comparators`. \n - If there is no more comparator in `comparators` list, returns `0`.\n\n```ts\nimport { asc, cmp, desc, map, queue } from 'type-comparator';\n\nconst comparator = queue([\n    map(x => x.name, asc),\n    map(x => x.age, desc),\n]);\nconst array = [\n    { name: 'Alex', age: 21 },\n    { name: 'Jane', age: 19 },\n    { name: 'Alex', age: 26 },\n];\n\n// [ \n//    { name: 'Alex', age: 26 },\n//    { name: 'Alex', age: 21 },\n//    { name: 'Jane', age: 19 } \n// ]\narray.slice().sort(comparator);\n```\n\n******\n\n### Chaining way\n\n#### Basic usage\n`cmp()` - just starts chaining.\n`.use(comparator)` - applies comparator and terminates chaining.\n\n**Note:** `use()` chain can work with any comparator function (not only produced by `type-comparator`)\n\n```ts\nimport { asc, cmp } from 'type-comparator';\n\n// same as just `asc` function\nconst comparator1 = cmp().use(asc);\n\n// works like `asc` but just for numbers\nconst comparator2 = cmp().use((a, b) => a - b); \n\n// not a lot of sense, but it's possible\nconst comparator3 = cmp().use(comparator1); \n```\n\n#### Chain `.reverse()`\n\n```ts\nimport { asc, cmp, reverse } from 'type-comparator';\n\nconst comparator = cmp().reverse().use(asc);\nconst array = [17, 4, -17, 42, -3, 0];\n\n// [ 42, 17, 4, 0, -3, -17 ]\narray.slice().sort(comparator);\n```\n#### Chain `.map(mapper)`\n\n```ts\nimport { asc, cmp, map } from 'type-comparator';\n\nconst mapper = x => x.a;\nconst comparator = cmp().map(mapper).use(asc);\nconst array = [{ a: 15 }, { a: 5 }];\n\n// [ { a: 5 }, { a: 15 } ]\narray.slice().sort(comparator);\n```\n\n#### Chain `.if(conditionFn)`\nChecks `conditionFn` for each arg. \n - Applies next `.then` chain, if both args satisfy `conditionFn`.\n - Applies next `.else`/`.elif` chain, if both args do not satisfy `conditionFn`.\n - Returns positive value, if only first arg satisfies `conditionFn`.\n - Returns negative value, if only second arg satisfies `conditionFn`.\n\n**Note:** After `.if()` chain, only `.then` chain is available.\n```ts\nimport { asc, cmp } from 'type-comparator';\n\nconst conditionFn = x => x % 4 === 0;\nconst conditionFn2 = x => x % 2 === 0;\nconst chainingCmp = cmp()\n    .if(conditionFn).then(asc)\n    .elif(conditionFn2).then(asc)\n    .else(asc);\nconst array = [17, 4, -17, 42, -3, 0];\n\n// [ -17, -3, 17, 42, 0, 4 ]\narray.slice().sort(chainingCmp);\n```\n\n#### Chain `.then(comparator)`\nApplies `comparator`, if condition from previous `.if()`chain satisfies for both args.\n\n**Note:** After `.then()` chain, only `.elif()` or `.else()` chains are available.\n**Note:** `.then()` chain is available only after `.if()` or `.elif()` chains.\n\n#### Chain `.elif(conditionFn)`\nWorks same `.if()` chain.\n\n**Note:** After `.elif()` chain, only `.then()` chain is available.\n**Note:** `.elif()` chain is available only after `.then()` chain.\n\n#### Chain `.else(comparator)`\nApplies `comparator`, if both args do not satisfy comparators from previous `.if()`/`.elif` chains.\n\n**Note:** `.else()` chain is available only after `.then()` chain.\n**Note:** `.else()` chain finishes chaining and returns result comparator function.\n\n#### Chain `.use(comparators)` \nWorks same as `queue(comparators)` and terminates chaining.\n\n```ts\nimport { asc, cmp, desc } from 'type-comparator';\n\nconst comparator = cmp().use([\n    cmp().map(x => x.name).use(asc),\n    cmp().map(x => x.age).use(desc),\n]);\nconst array = [\n    { name: 'Alex', age: 21 },\n    { name: 'Jane', age: 19 },\n    { name: 'Alex', age: 26 },\n];\n\n// [ \n//    { name: 'Alex', age: 26 },\n//    { name: 'Alex', age: 21 },\n//    { name: 'Jane', age: 19 } \n// ]\narray.slice().sort(comparator);    \n```\n\n*********************************\n\n### Something more complex?... Ok!\n```ts\nimport { asc, cmp, desc } from 'type-comparator';\n\nconst comparator = cmp()\n    .map(x => x.a)\n    .use([\n        cmp()\n            .map(x => x.b)\n            .use(desc),\n        cmp()\n            .if(x => (x.b + x.c) % 2 === 0)\n            .map(x => x.c)\n            .use(asc),\n    ]);\n\nconst array = [\n    { a: { b: 1, c: 7 } },\n    { a: { b: 1, c: 6 } },\n    { a: { b: 1, c: 5 } },\n    { a: { b: 1, c: 4 } },\n    { a: { b: 1, c: 3 } },\n    { a: { b: 3, c: 2 } },\n];\n\n// [\n//     { a: { b: 3, c: 2 } },\n//     { a: { b: 1, c: 4 } },\n//     { a: { b: 1, c: 6 } },\n//     { a: { b: 1, c: 3 } },\n//     { a: { b: 1, c: 5 } },\n//     { a: { b: 1, c: 7 } },\n// ]\narray.slice().sort(comparator);\n```\n\n****\n### Q&A\n\n**Q:** Should `reverse(cmp)` be equals to reversed array with `cmp` ?\n\n**A:** In general, it should not. \n`Array.prototype.reverse` just reverse all elements order, regardless its values.\nWhen comparator suppose both values are equal, it returns `0`. And these elements save original order.\n\n```ts\nconst array = [1, 2, 4];\nconst comparator = cmp().map(x => x % 2 === 0).use(asc);\n\n// [2, 4, 1]\narray.slice().sort(reverse(comparator));\n\n// [4, 2, 1]\narray.slice().sort(comparator).reverse();\n```\n\n\n## Support\n\nPlease [open an issue](https://github.com/lightness/type-comparator/issues/new) for support.\n\n## Contributing\n\nPlease contribute using [Github Flow](https://guides.github.com/introduction/flow/). Create a branch, add commits, and [open a pull request](https://github.com/lightness/type-comparator/compare/).\n","readmeFilename":"README.md","gitHead":"c7cdc8b864116faaa0def3b353a5d0950fc89bcd","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.2.10-2","_nodeVersion":"14.17.6","_npmVersion":"7.24.2","dist":{"integrity":"sha512-IHX0KUC5gTnZ6tXM+9cKrrfzDa5JNtKQL5sazNzYYCGFdy+6mUmRi5H+3ldhG6LuNz8fjO8mx6qn8UK6YV85Xw==","shasum":"957fc985ce248c8532e335c4e875a50ee71a5d73","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.2.10-2.tgz","fileCount":47,"unpackedSize":29528,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICVSdPZ+2Dk2jU2sBcR0iOOloedDlJrLHVZNIG36rXWCAiEAmI+S8uyxYLJVUYOYFVOCVY5N79pUhzHHMoIItGi+tJg="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj97GFACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpkyQ//fNt8OOYWMiG/wZWwJ3VZHHeLXYqxyT+9mP59J6Rjszk+JSMj\r\nxv22E9A9tre3d0q35ASPlQYjUhtu6GRzVJr2xTq8GN40+VQBYUbEAZ+GyOth\r\nKZFF49h6AmYfV9zGniygsMAB30dUIqEpVFv3071I9dQWc1iCCd5ahX4nq+cX\r\nziQbnIHlXO/WiBQvTkQK/gJD49yQ1Z5pWy9331QpXbeiJMdlafBMviE9x7cr\r\nIBzj/jzXy2rIspOpPjEkysWsUpXW/AcTSd8e7/Yh6hrk2Z9gzYJP5hXkZrih\r\n0i3gefrk6kTv/v5r9Etwigoo6hpY5MudEBEeismpfKqUjIKzWwg5EWA2LxuF\r\nzk3ZecYkUxZv3F8gJunlsW+Aq8xCcs/dkcPCkoq7xyhw3FkwHYAKcWWPddxs\r\n4R5OUQL8QclkLO4uBJrmAj9DW9acHPr1TPAB+xTL6jccb07VTwKmoGmcomDX\r\n9FCBor7woy7Iuqk6pZq7WuYEAoVogYI93iA/GFb+CD8HB2QLVcC5r/Dl8jUN\r\nvhY8Z2+AAIlwlFeqbQ3GqPLPOzNMvOPBfoNqUif8t5UUue5ZMrsV4z65CsjT\r\nJN89rF/ux0xkQ3ty2wZkLYw5zEr96CSKlI9yTE7l3smS/kXGi5mG3Kt/tDXA\r\nosc2CzET5JDGtOcGZ6wdDMEYZqZymsh2PC4=\r\n=RF3j\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"directories":{},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.2.10-2_1677177221296_0.9048766777896897"},"_hasShrinkwrap":false},"0.2.10-3":{"name":"type-comparator","version":"0.2.10-3","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"start":"node ./build/main.js","test":"jest","test:coverage":"jest --coverage","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts","release":"npm run clean && npm run build && release-it"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@release-it/conventional-changelog":"^5.1.1","@types/jest":"^24.0.4","jest":">=22 <24","release-it":"^15.6.0","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"readme":"\n<img src=\"https://pp.userapi.com/c852036/v852036486/bbce5/DCotw_jzAKo.jpg\" width=\"100\" alt=\"Logo\" align=\"right\" />\n\n<a href=\"https://www.npmjs.com/package/type-comparator\">\n    <img src=\"https://img.shields.io/npm/v/type-comparator.svg?style=flat\" alt=\"NPM Version\" />\n</a>\n<a href=\"https://www.npmjs.com/package/type-comparator\">\n    <img src=\"https://img.shields.io/npm/l/type-comparator.svg?style=flat\" alt=\"Package License\" />\n</a>\n<a href=\"https://www.npmjs.com/package/type-comparator\">\n    <img src=\"https://img.shields.io/npm/dm/type-comparator.svg?style=flat\" alt=\"NPM Downloads\" />\n</a>\n<a href=\"https://travis-ci.org/lightness/type-comparator\">\n    <img src=\"https://img.shields.io/travis/lightness/type-comparator.svg?style=flat\" alt=\"Travis\" />\n</a>\n<a href=\"https://codecov.io/gh/lightness/type-comparator\">\n    <img src=\"https://img.shields.io/codecov/c/github/lightness/type-comparator.svg?style=flat\" alt=\"Travis\" />\n</a>\n\n# Type Comparator\n\nUseful comparator functions written on Typescript (But you can use it on your JS project)\n\n<img src=\"https://pp.userapi.com/c847124/v847124060/1bc6cf/t_jixj5HLK4.jpg\" width=\"730\" alt=\"Image\" align=\"center\" />\n\n## Table of Contents\n\n- [Type Comparator](#type-comparator)\n  - [Table of Contents](#table-of-contents)\n  - [Installation](#installation)\n  - [Usage](#usage)\n    - [Base comparators: `asc` and `desc`](#base-comparators-asc-and-desc)\n    - [Functional way](#functional-way)\n      - [Function `reverse(comparator)`](#function-reversecomparator)\n      - [Function `map(mapper, comparator)`](#function-mapmapper-comparator)\n      - [Function `condition(conditionFn, comparatorA, comparatorB)`](#function-conditionconditionfn-comparatora-comparatorb)\n      - [Function `queue(comparators)`](#function-queuecomparators)\n    - [Chaining way](#chaining-way)\n      - [Basic usage](#basic-usage)\n      - [Chain `.reverse()`](#chain-reverse)\n      - [Chain `.map(mapper)`](#chain-mapmapper)\n      - [Chain `.if(conditionFn)`](#chain-ifconditionfn)\n      - [Chain `.then(comparator)`](#chain-thencomparator)\n      - [Chain `.elif(conditionFn)`](#chain-elifconditionfn)\n      - [Chain `.else(comparator)`](#chain-elsecomparator)\n      - [Chain `.use(comparators)`](#chain-usecomparators)\n    - [Something more complex?... Ok!](#something-more-complex-ok)\n    - [Q&A](#qa)\n  - [Support](#support)\n  - [Contributing](#contributing)\n\n## Installation\n\n```sh\nnpm i type-comparator\n```\n\n## Usage\n\n### Base comparators: `asc` and `desc` \n\n`asc` is simple comparator contains just base comparison logic. \n\nIt works well with numbers...\n\n```ts\nconst array = [17, 4, -17, 42, -3, 0];\n\n// [-17, -3, 0, 4, 17, 42]\narray.slice().sort(asc); \n// [42, 17, 4, 0, -3, -17]\narray.slice().sort(desc); \n```\n\nAnd with strings...\n\n```ts\nconst array = ['aaa', 'bax', 'a', 'x', 'ax', 'ab', 'ba', 'bx'];\n\n// [\"a\", \"aaa\", \"ab\", \"ax\", \"ba\", \"bax\", \"bx\", \"x\"]\narray.slice().sort(asc); \n// [\"x\", \"bx\", \"bax\", \"ba\", \"ax\", \"ab\", \"aaa\", \"a\"]\narray.slice().sort(desc);\n```\n\nEven with dates...\n\n```ts\nconst array = [new Date(2018, 0, 1), new Date(2017, 0, 1), new Date(2019, 0, 1)];\n\n// [Date(2017, 0, 1), Date(2018, 0, 1), Date(2019, 0, 1)]\narray.slice().sort(asc); \n// [Date(2019, 0, 1), Date(2018, 0, 1), Date(2017, 0, 1)]\narray.slice().sort(desc);\n```\n\nActually it works well with everything comparable by `>` and `<`. \n\n**NOTE** Every values which are neither `>` nor `<` are equal.\n\nAs you can see below, the initial order remains. If you want to sort by value of some item property, take a look on `map` function.\n\n```ts\nvar array1 = [{a: 1}, {a: 5}];\nvar array2 = [{a: 5}, {a: 1}];\n\narray1.slice().sort(asc);  // [{a: 1}, {a: 5}]\narray2.slice().sort(asc);  // [{a: 5}, {a: 1}]\narray1.slice().sort(desc); // [{a: 1}, {a: 5}]\narray2.slice().sort(desc); // [{a: 5}, {a: 1}]\n```\n\n*****\n\n### Functional way\n\n#### Function `reverse(comparator)`\nJust swap comparator args.\n```ts\nimport { asc, cmp, reverse } from 'type-comparator';\n\nconst functionalCmp = reverse(asc);\nconst array = [17, 4, -17, 42, -3, 0];\n\n// [ 42, 17, 4, 0, -3, -17 ]\narray.slice().sort(functionalCmp);  \n```\n\n#### Function `map(mapper, comparator)`\nMaps each args with `mapper` and apply `comparator`.\n\n```ts\nimport { asc, cmp, map } from 'type-comparator';\n\nconst mapper = x => x.a;\nconst comparator = map(mapper, asc);\nconst array = [{ a: 15 }, { a: 5 }];\n\n// [ { a: 5 }, { a: 15 } ]\narray.slice().sort(comparator);\n```\n\n#### Function `condition(conditionFn, comparatorA, comparatorB)`\nHas following logic:\n - Applies `comparatorA`, if both args satisfy `conditionFn`.\n - Applies `comparatorB`, if both args do not satisfy `conditionFn`.\n - Returns positive value, if only first arg satisfies `conditionFn`.\n - Returns negative value, if only second arg satisfies `conditionFn`.\n\n```ts\nimport { asc, cmp, condition } from 'type-comparator';\n\nconst conditionFn = x => x % 2 === 0;\nconst comparator = condition(conditionFn, asc, desc);\nconst array = [17, 4, -17, 42, -3, 0];\n\n// [ 17, -3, -17, 0, 4, 42 ]\narray.slice().sort(comparator);\n```\n\n#### Function `queue(comparators)`\nApplies first comparator from `comparators`. \n - If comparator returns non-zero value, returns it as result.\n - If comparator returns `0`, apply next comparator from `comparators`. \n - If there is no more comparator in `comparators` list, returns `0`.\n\n```ts\nimport { asc, cmp, desc, map, queue } from 'type-comparator';\n\nconst comparator = queue([\n    map(x => x.name, asc),\n    map(x => x.age, desc),\n]);\nconst array = [\n    { name: 'Alex', age: 21 },\n    { name: 'Jane', age: 19 },\n    { name: 'Alex', age: 26 },\n];\n\n// [ \n//    { name: 'Alex', age: 26 },\n//    { name: 'Alex', age: 21 },\n//    { name: 'Jane', age: 19 } \n// ]\narray.slice().sort(comparator);\n```\n\n******\n\n### Chaining way\n\n#### Basic usage\n`cmp()` - just starts chaining.\n`.use(comparator)` - applies comparator and terminates chaining.\n\n**Note:** `use()` chain can work with any comparator function (not only produced by `type-comparator`)\n\n```ts\nimport { asc, cmp } from 'type-comparator';\n\n// same as just `asc` function\nconst comparator1 = cmp().use(asc);\n\n// works like `asc` but just for numbers\nconst comparator2 = cmp().use((a, b) => a - b); \n\n// not a lot of sense, but it's possible\nconst comparator3 = cmp().use(comparator1); \n```\n\n#### Chain `.reverse()`\n\n```ts\nimport { asc, cmp, reverse } from 'type-comparator';\n\nconst comparator = cmp().reverse().use(asc);\nconst array = [17, 4, -17, 42, -3, 0];\n\n// [ 42, 17, 4, 0, -3, -17 ]\narray.slice().sort(comparator);\n```\n#### Chain `.map(mapper)`\n\n```ts\nimport { asc, cmp, map } from 'type-comparator';\n\nconst mapper = x => x.a;\nconst comparator = cmp().map(mapper).use(asc);\nconst array = [{ a: 15 }, { a: 5 }];\n\n// [ { a: 5 }, { a: 15 } ]\narray.slice().sort(comparator);\n```\n\n#### Chain `.if(conditionFn)`\nChecks `conditionFn` for each arg. \n - Applies next `.then` chain, if both args satisfy `conditionFn`.\n - Applies next `.else`/`.elif` chain, if both args do not satisfy `conditionFn`.\n - Returns positive value, if only first arg satisfies `conditionFn`.\n - Returns negative value, if only second arg satisfies `conditionFn`.\n\n**Note:** After `.if()` chain, only `.then` chain is available.\n```ts\nimport { asc, cmp } from 'type-comparator';\n\nconst conditionFn = x => x % 4 === 0;\nconst conditionFn2 = x => x % 2 === 0;\nconst chainingCmp = cmp()\n    .if(conditionFn).then(asc)\n    .elif(conditionFn2).then(asc)\n    .else(asc);\nconst array = [17, 4, -17, 42, -3, 0];\n\n// [ -17, -3, 17, 42, 0, 4 ]\narray.slice().sort(chainingCmp);\n```\n\n#### Chain `.then(comparator)`\nApplies `comparator`, if condition from previous `.if()`chain satisfies for both args.\n\n**Note:** After `.then()` chain, only `.elif()` or `.else()` chains are available.\n**Note:** `.then()` chain is available only after `.if()` or `.elif()` chains.\n\n#### Chain `.elif(conditionFn)`\nWorks same `.if()` chain.\n\n**Note:** After `.elif()` chain, only `.then()` chain is available.\n**Note:** `.elif()` chain is available only after `.then()` chain.\n\n#### Chain `.else(comparator)`\nApplies `comparator`, if both args do not satisfy comparators from previous `.if()`/`.elif` chains.\n\n**Note:** `.else()` chain is available only after `.then()` chain.\n**Note:** `.else()` chain finishes chaining and returns result comparator function.\n\n#### Chain `.use(comparators)` \nWorks same as `queue(comparators)` and terminates chaining.\n\n```ts\nimport { asc, cmp, desc } from 'type-comparator';\n\nconst comparator = cmp().use([\n    cmp().map(x => x.name).use(asc),\n    cmp().map(x => x.age).use(desc),\n]);\nconst array = [\n    { name: 'Alex', age: 21 },\n    { name: 'Jane', age: 19 },\n    { name: 'Alex', age: 26 },\n];\n\n// [ \n//    { name: 'Alex', age: 26 },\n//    { name: 'Alex', age: 21 },\n//    { name: 'Jane', age: 19 } \n// ]\narray.slice().sort(comparator);    \n```\n\n*********************************\n\n### Something more complex?... Ok!\n```ts\nimport { asc, cmp, desc } from 'type-comparator';\n\nconst comparator = cmp()\n    .map(x => x.a)\n    .use([\n        cmp()\n            .map(x => x.b)\n            .use(desc),\n        cmp()\n            .if(x => (x.b + x.c) % 2 === 0)\n            .map(x => x.c)\n            .use(asc),\n    ]);\n\nconst array = [\n    { a: { b: 1, c: 7 } },\n    { a: { b: 1, c: 6 } },\n    { a: { b: 1, c: 5 } },\n    { a: { b: 1, c: 4 } },\n    { a: { b: 1, c: 3 } },\n    { a: { b: 3, c: 2 } },\n];\n\n// [\n//     { a: { b: 3, c: 2 } },\n//     { a: { b: 1, c: 4 } },\n//     { a: { b: 1, c: 6 } },\n//     { a: { b: 1, c: 3 } },\n//     { a: { b: 1, c: 5 } },\n//     { a: { b: 1, c: 7 } },\n// ]\narray.slice().sort(comparator);\n```\n\n****\n### Q&A\n\n**Q:** Should `reverse(cmp)` be equals to reversed array with `cmp` ?\n\n**A:** In general, it should not. \n`Array.prototype.reverse` just reverse all elements order, regardless its values.\nWhen comparator suppose both values are equal, it returns `0`. And these elements save original order.\n\n```ts\nconst array = [1, 2, 4];\nconst comparator = cmp().map(x => x % 2 === 0).use(asc);\n\n// [2, 4, 1]\narray.slice().sort(reverse(comparator));\n\n// [4, 2, 1]\narray.slice().sort(comparator).reverse();\n```\n\n\n## Support\n\nPlease [open an issue](https://github.com/lightness/type-comparator/issues/new) for support.\n\n## Contributing\n\nPlease contribute using [Github Flow](https://guides.github.com/introduction/flow/). Create a branch, add commits, and [open a pull request](https://github.com/lightness/type-comparator/compare/).\n","readmeFilename":"README.md","gitHead":"664bcab573546f5ca1c427854d4f6da47209b0d6","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.2.10-3","_nodeVersion":"14.17.6","_npmVersion":"7.24.2","dist":{"integrity":"sha512-ubRaI1v4CBCriF7SXMrrLv6+IkhWo2vO9y6GPD2IMy7GdhPWL5sfR/x2aorkMOsIXMPD8cVxz8JqpJwylSm54A==","shasum":"f34803125401cb37c0f09f3af1bc56b7d435e13c","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.2.10-3.tgz","fileCount":45,"unpackedSize":28840,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEseM4cwsXez3ex4H6lJwp1Mf6PZQ7NyhObwfWg+0vDSAiEAyMWiVo9I0R/qslUciHZZJZBhph5A8jCP5ZT5et+Xw6E="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj97JFACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmprHhAAm3rFvDdM3H5pvHE+kvK43EM6Ss/0HwhsQeXgSIzl2oVhbe1Q\r\nCbEOIlZsA66SWqoaVZ1A5iwJOpr20ENdw49/8VV4uvG8b/V3EK0sxXMgu2cy\r\nFiRQE48ITfWXNhg5qcLxYOVewvriyqicXHVL9ut0pdnaVyIeRFxP0iVFiDRs\r\nTTrHHciwInbIUmf6eT+pftotme9rZvxGJAUbPD1I/PXDDMX9tdWylHzI5/bU\r\nPNor2WOdFtU8ACglaNleny3COyfi3uxyhbTJKj5jSRzJeFy3V0nDAM6wMPGv\r\nFy8g7jRKe4dN6vD3pitWGWVLfYaMuoNAhUo1BWkxOPaVQJ1rN9O3wsXausST\r\npoijKW8juvfZNxSGVPHFmqukYxX2PdX+6P/kGnOM5TfwweiQ8/rGPCUoqmQi\r\nMYuT+fgoL+JGxRcvTQimsOEyr+na5iXa3FoWpQ2Owr7ucY8udiX7bha5wV3Y\r\nCKmx+niRl3ZUIiVoVd45a67URR+LEObz+Z+G5PtOK9tJrhJ9sE6LmekvklRf\r\n+k7fkhjS1xNMDyAEa1qKczq+CuumzInspnJLxzJ5We2cNo/M28hfeKRioEfG\r\nuDxN5H3Tz4XgHuNWMnvSqo7STVIZrySYNPtaZQxf5aekIf3wuUSdv2B8/KUX\r\nP7yUK5dzRwYgEHjDP1zJIdNXcmdqKpNH5LA=\r\n=w8v+\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"directories":{},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.2.10-3_1677177412789_0.5426878054874633"},"_hasShrinkwrap":false},"0.2.10":{"name":"type-comparator","version":"0.2.10","description":"Useful comparator functions written on Typescript","main":"build/index.js","typings":"build/index.d.ts","scripts":{"start":"node ./build/main.js","test":"jest","test:coverage":"jest --coverage","build":"tsc","clean":"rimraf build","tslint":"tslint src/**/*.ts","tslint:fix":"tslint --fix src/**/*.ts","release":"npm run clean && npm run build && release-it"},"author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","devDependencies":{"@release-it/conventional-changelog":"^5.1.1","@types/jest":"^24.0.4","jest":">=22 <24","release-it":"^15.6.0","rimraf":"^2.6.3","ts-jest":"^23.10.5","ts-node":"^8.0.2","tslint":"^5.12.1","typescript":"^3.3.3"},"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"},"keywords":["comparator","comparators","type","types","typescript"],"gitHead":"80db5465515871d7816e61ba5ef7b3c4ec550efe","homepage":"https://github.com/lightness/type-comparator#readme","_id":"type-comparator@0.2.10","_nodeVersion":"14.17.6","_npmVersion":"7.24.2","dist":{"integrity":"sha512-XpvFRAn5soNMb/HLG1suuk4lsN8CLVHK3o/xcuZBDQR8p9ObfvJp7IyST7WtTIpYL5JDJO2IYwhsOf/+OgQKlw==","shasum":"5391903ba9098bec978ec147c4cefa4a85f24574","tarball":"https://registry.npmjs.org/type-comparator/-/type-comparator-0.2.10.tgz","fileCount":45,"unpackedSize":28838,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDN0QkJdLizr50k9Vwm71YqtUEGcd5IO8KW1Ggm0UI3nQIgU7RNMT3ZWTPtXaIkbzjFuRcwK3MtnKIQNrQUZ8GRPXo="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj97NEACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrK1RAApERGaAtlyn0OqsUFjn7j2/TDi3LMN7YGN9Qt/X62fHyeflHw\r\nTQPwmNATrJWpP4JSvXdgoxGR4jRy9Wp7ZkjIczESUSh8Gp6VHb4hjZf5LB+9\r\n57sFEhvthnUjetvZCROgHSjWHYTob7bvkKEvdB0BY2VhnFcRJTATjaLuwHta\r\nv5uKCiwdLNuoENjkTzbVuZOv0wfTTal+UCitWMjFzVb+Qoyp7ObD+JJ/HZy5\r\n5rOLN/hBSa3gzx4tT1BCRaSMibzzvAF0Nc+J+y9/nz+xmb1QhGMcWSQibAcd\r\nHTYWXfZo2oecZgOLQBTwLfr10vnUBRl9BNiQPrRqdfXIjKa73E0O+YJ1/WQp\r\ncOL/jwPnuccHqsxMT6SBkx5QP8++0/dYvd3bMs/FH2SA+t9XEmdfXmHCFhjN\r\nMNR90Y1BihND2akQiY/Vv74AqKgcjXI5McQWzj5rtb9TnMojZTkOfVYQ8/v3\r\n40dncQqGXgBuVgTZ4mHLfxdumdVbn7VyswPJ/kOf07GvIGU66h4myUwFCPLj\r\nSjcSxaKAJAHCvMQhHDyblbX40IpkNOpnO5X2dTZiur54UD8g9V2c+uuvTd34\r\nYp+NKyoxaYIVfc9DxJTuBL9ydm91qNvwaZ3cUxDrjlBkxGy0k3UbsD3e5FtC\r\nun/iIidsk/MzPalBqHvaq6qjarzTvW+7mDQ=\r\n=0keI\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"lightness","email":"uladzimir.aleshka@gmail.com"},"directories":{},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/type-comparator_0.2.10_1677177668267_0.2339650776281903"},"_hasShrinkwrap":false}},"time":{"created":"2019-02-15T06:22:37.959Z","0.0.1":"2019-02-15T06:22:38.138Z","modified":"2023-02-23T18:41:08.537Z","0.0.2":"2019-02-15T07:10:00.481Z","0.1.1":"2019-02-18T12:06:28.287Z","0.1.2":"2019-02-18T14:36:17.156Z","0.1.3":"2019-02-18T14:53:59.637Z","0.1.4":"2019-02-18T14:56:00.994Z","0.1.5":"2019-02-18T15:01:55.055Z","0.1.6":"2019-02-18T17:02:01.053Z","0.1.7":"2019-02-18T18:07:17.890Z","0.1.8":"2019-02-18T22:22:39.702Z","0.1.9":"2019-02-19T14:49:07.969Z","0.1.10":"2019-02-19T15:42:57.797Z","0.1.11":"2019-02-19T15:45:06.093Z","0.2.0":"2019-02-22T13:41:14.072Z","0.2.1":"2019-02-26T11:19:23.013Z","0.2.2":"2019-02-26T15:23:32.073Z","0.2.3":"2019-02-26T15:25:09.075Z","0.2.4":"2019-02-28T13:28:20.851Z","0.2.5":"2019-03-05T10:03:30.938Z","0.2.6":"2019-03-05T11:31:30.787Z","0.2.7":"2019-03-11T11:27:04.081Z","0.2.8":"2019-04-14T14:53:27.834Z","0.2.9-rc.1":"2021-01-05T11:47:21.569Z","0.2.9-rc.2":"2021-01-05T12:18:43.453Z","0.2.9-rc.3":"2021-05-04T13:50:22.231Z","0.2.9":"2021-09-09T09:34:30.200Z","0.2.10-1":"2023-02-23T18:30:13.021Z","0.2.10-0":"2023-02-23T18:31:51.661Z","0.2.10-2":"2023-02-23T18:33:41.513Z","0.2.10-3":"2023-02-23T18:36:52.987Z","0.2.10":"2023-02-23T18:41:08.451Z"},"maintainers":[{"name":"lightness","email":"uladzimir.aleshka@gmail.com"}],"description":"Useful comparator functions written on Typescript","author":{"name":"Uladzimir Aleshka","email":"uladzimir.aleshka@gmail.com"},"license":"MIT","readme":"\n<img src=\"https://pp.userapi.com/c852036/v852036486/bbce5/DCotw_jzAKo.jpg\" width=\"100\" alt=\"Logo\" align=\"right\" />\n\n<a href=\"https://www.npmjs.com/package/type-comparator\">\n    <img src=\"https://img.shields.io/npm/v/type-comparator.svg?style=flat\" alt=\"NPM Version\" />\n</a>\n<a href=\"https://www.npmjs.com/package/type-comparator\">\n    <img src=\"https://img.shields.io/npm/l/type-comparator.svg?style=flat\" alt=\"Package License\" />\n</a>\n<a href=\"https://www.npmjs.com/package/type-comparator\">\n    <img src=\"https://img.shields.io/npm/dm/type-comparator.svg?style=flat\" alt=\"NPM Downloads\" />\n</a>\n<a href=\"https://travis-ci.org/lightness/type-comparator\">\n    <img src=\"https://img.shields.io/travis/lightness/type-comparator.svg?style=flat\" alt=\"Travis\" />\n</a>\n<a href=\"https://codecov.io/gh/lightness/type-comparator\">\n    <img src=\"https://img.shields.io/codecov/c/github/lightness/type-comparator.svg?style=flat\" alt=\"Travis\" />\n</a>\n\n# Type Comparator\n\nUseful comparator functions written on Typescript (But you can use it on your JS project)\n\n<img src=\"https://pp.userapi.com/c847124/v847124060/1bc6cf/t_jixj5HLK4.jpg\" width=\"730\" alt=\"Image\" align=\"center\" />\n\n## Table of Contents\n\n- [Type Comparator](#type-comparator)\n  - [Table of Contents](#table-of-contents)\n  - [Installation](#installation)\n  - [Usage](#usage)\n    - [Base comparators: `asc` and `desc`](#base-comparators-asc-and-desc)\n    - [Functional way](#functional-way)\n      - [Function `reverse(comparator)`](#function-reversecomparator)\n      - [Function `map(mapper, comparator)`](#function-mapmapper-comparator)\n      - [Function `condition(conditionFn, comparatorA, comparatorB)`](#function-conditionconditionfn-comparatora-comparatorb)\n      - [Function `queue(comparators)`](#function-queuecomparators)\n    - [Chaining way](#chaining-way)\n      - [Basic usage](#basic-usage)\n      - [Chain `.reverse()`](#chain-reverse)\n      - [Chain `.map(mapper)`](#chain-mapmapper)\n      - [Chain `.if(conditionFn)`](#chain-ifconditionfn)\n      - [Chain `.then(comparator)`](#chain-thencomparator)\n      - [Chain `.elif(conditionFn)`](#chain-elifconditionfn)\n      - [Chain `.else(comparator)`](#chain-elsecomparator)\n      - [Chain `.use(comparators)`](#chain-usecomparators)\n    - [Something more complex?... Ok!](#something-more-complex-ok)\n    - [Q&A](#qa)\n  - [Support](#support)\n  - [Contributing](#contributing)\n\n## Installation\n\n```sh\nnpm i type-comparator\n```\n\n## Usage\n\n### Base comparators: `asc` and `desc` \n\n`asc` is simple comparator contains just base comparison logic. \n\nIt works well with numbers...\n\n```ts\nconst array = [17, 4, -17, 42, -3, 0];\n\n// [-17, -3, 0, 4, 17, 42]\narray.slice().sort(asc); \n// [42, 17, 4, 0, -3, -17]\narray.slice().sort(desc); \n```\n\nAnd with strings...\n\n```ts\nconst array = ['aaa', 'bax', 'a', 'x', 'ax', 'ab', 'ba', 'bx'];\n\n// [\"a\", \"aaa\", \"ab\", \"ax\", \"ba\", \"bax\", \"bx\", \"x\"]\narray.slice().sort(asc); \n// [\"x\", \"bx\", \"bax\", \"ba\", \"ax\", \"ab\", \"aaa\", \"a\"]\narray.slice().sort(desc);\n```\n\nEven with dates...\n\n```ts\nconst array = [new Date(2018, 0, 1), new Date(2017, 0, 1), new Date(2019, 0, 1)];\n\n// [Date(2017, 0, 1), Date(2018, 0, 1), Date(2019, 0, 1)]\narray.slice().sort(asc); \n// [Date(2019, 0, 1), Date(2018, 0, 1), Date(2017, 0, 1)]\narray.slice().sort(desc);\n```\n\nActually it works well with everything comparable by `>` and `<`. \n\n**NOTE** Every values which are neither `>` nor `<` are equal.\n\nAs you can see below, the initial order remains. If you want to sort by value of some item property, take a look on `map` function.\n\n```ts\nvar array1 = [{a: 1}, {a: 5}];\nvar array2 = [{a: 5}, {a: 1}];\n\narray1.slice().sort(asc);  // [{a: 1}, {a: 5}]\narray2.slice().sort(asc);  // [{a: 5}, {a: 1}]\narray1.slice().sort(desc); // [{a: 1}, {a: 5}]\narray2.slice().sort(desc); // [{a: 5}, {a: 1}]\n```\n\n*****\n\n### Functional way\n\n#### Function `reverse(comparator)`\nJust swap comparator args.\n```ts\nimport { asc, cmp, reverse } from 'type-comparator';\n\nconst functionalCmp = reverse(asc);\nconst array = [17, 4, -17, 42, -3, 0];\n\n// [ 42, 17, 4, 0, -3, -17 ]\narray.slice().sort(functionalCmp);  \n```\n\n#### Function `map(mapper, comparator)`\nMaps each args with `mapper` and apply `comparator`.\n\n```ts\nimport { asc, cmp, map } from 'type-comparator';\n\nconst mapper = x => x.a;\nconst comparator = map(mapper, asc);\nconst array = [{ a: 15 }, { a: 5 }];\n\n// [ { a: 5 }, { a: 15 } ]\narray.slice().sort(comparator);\n```\n\n#### Function `condition(conditionFn, comparatorA, comparatorB)`\nHas following logic:\n - Applies `comparatorA`, if both args satisfy `conditionFn`.\n - Applies `comparatorB`, if both args do not satisfy `conditionFn`.\n - Returns positive value, if only first arg satisfies `conditionFn`.\n - Returns negative value, if only second arg satisfies `conditionFn`.\n\n```ts\nimport { asc, cmp, condition } from 'type-comparator';\n\nconst conditionFn = x => x % 2 === 0;\nconst comparator = condition(conditionFn, asc, desc);\nconst array = [17, 4, -17, 42, -3, 0];\n\n// [ 17, -3, -17, 0, 4, 42 ]\narray.slice().sort(comparator);\n```\n\n#### Function `queue(comparators)`\nApplies first comparator from `comparators`. \n - If comparator returns non-zero value, returns it as result.\n - If comparator returns `0`, apply next comparator from `comparators`. \n - If there is no more comparator in `comparators` list, returns `0`.\n\n```ts\nimport { asc, cmp, desc, map, queue } from 'type-comparator';\n\nconst comparator = queue([\n    map(x => x.name, asc),\n    map(x => x.age, desc),\n]);\nconst array = [\n    { name: 'Alex', age: 21 },\n    { name: 'Jane', age: 19 },\n    { name: 'Alex', age: 26 },\n];\n\n// [ \n//    { name: 'Alex', age: 26 },\n//    { name: 'Alex', age: 21 },\n//    { name: 'Jane', age: 19 } \n// ]\narray.slice().sort(comparator);\n```\n\n******\n\n### Chaining way\n\n#### Basic usage\n`cmp()` - just starts chaining.\n`.use(comparator)` - applies comparator and terminates chaining.\n\n**Note:** `use()` chain can work with any comparator function (not only produced by `type-comparator`)\n\n```ts\nimport { asc, cmp } from 'type-comparator';\n\n// same as just `asc` function\nconst comparator1 = cmp().use(asc);\n\n// works like `asc` but just for numbers\nconst comparator2 = cmp().use((a, b) => a - b); \n\n// not a lot of sense, but it's possible\nconst comparator3 = cmp().use(comparator1); \n```\n\n#### Chain `.reverse()`\n\n```ts\nimport { asc, cmp, reverse } from 'type-comparator';\n\nconst comparator = cmp().reverse().use(asc);\nconst array = [17, 4, -17, 42, -3, 0];\n\n// [ 42, 17, 4, 0, -3, -17 ]\narray.slice().sort(comparator);\n```\n#### Chain `.map(mapper)`\n\n```ts\nimport { asc, cmp, map } from 'type-comparator';\n\nconst mapper = x => x.a;\nconst comparator = cmp().map(mapper).use(asc);\nconst array = [{ a: 15 }, { a: 5 }];\n\n// [ { a: 5 }, { a: 15 } ]\narray.slice().sort(comparator);\n```\n\n#### Chain `.if(conditionFn)`\nChecks `conditionFn` for each arg. \n - Applies next `.then` chain, if both args satisfy `conditionFn`.\n - Applies next `.else`/`.elif` chain, if both args do not satisfy `conditionFn`.\n - Returns positive value, if only first arg satisfies `conditionFn`.\n - Returns negative value, if only second arg satisfies `conditionFn`.\n\n**Note:** After `.if()` chain, only `.then` chain is available.\n```ts\nimport { asc, cmp } from 'type-comparator';\n\nconst conditionFn = x => x % 4 === 0;\nconst conditionFn2 = x => x % 2 === 0;\nconst chainingCmp = cmp()\n    .if(conditionFn).then(asc)\n    .elif(conditionFn2).then(asc)\n    .else(asc);\nconst array = [17, 4, -17, 42, -3, 0];\n\n// [ -17, -3, 17, 42, 0, 4 ]\narray.slice().sort(chainingCmp);\n```\n\n#### Chain `.then(comparator)`\nApplies `comparator`, if condition from previous `.if()`chain satisfies for both args.\n\n**Note:** After `.then()` chain, only `.elif()` or `.else()` chains are available.\n**Note:** `.then()` chain is available only after `.if()` or `.elif()` chains.\n\n#### Chain `.elif(conditionFn)`\nWorks same `.if()` chain.\n\n**Note:** After `.elif()` chain, only `.then()` chain is available.\n**Note:** `.elif()` chain is available only after `.then()` chain.\n\n#### Chain `.else(comparator)`\nApplies `comparator`, if both args do not satisfy comparators from previous `.if()`/`.elif` chains.\n\n**Note:** `.else()` chain is available only after `.then()` chain.\n**Note:** `.else()` chain finishes chaining and returns result comparator function.\n\n#### Chain `.use(comparators)` \nWorks same as `queue(comparators)` and terminates chaining.\n\n```ts\nimport { asc, cmp, desc } from 'type-comparator';\n\nconst comparator = cmp().use([\n    cmp().map(x => x.name).use(asc),\n    cmp().map(x => x.age).use(desc),\n]);\nconst array = [\n    { name: 'Alex', age: 21 },\n    { name: 'Jane', age: 19 },\n    { name: 'Alex', age: 26 },\n];\n\n// [ \n//    { name: 'Alex', age: 26 },\n//    { name: 'Alex', age: 21 },\n//    { name: 'Jane', age: 19 } \n// ]\narray.slice().sort(comparator);    \n```\n\n*********************************\n\n### Something more complex?... Ok!\n```ts\nimport { asc, cmp, desc } from 'type-comparator';\n\nconst comparator = cmp()\n    .map(x => x.a)\n    .use([\n        cmp()\n            .map(x => x.b)\n            .use(desc),\n        cmp()\n            .if(x => (x.b + x.c) % 2 === 0)\n            .map(x => x.c)\n            .use(asc),\n    ]);\n\nconst array = [\n    { a: { b: 1, c: 7 } },\n    { a: { b: 1, c: 6 } },\n    { a: { b: 1, c: 5 } },\n    { a: { b: 1, c: 4 } },\n    { a: { b: 1, c: 3 } },\n    { a: { b: 3, c: 2 } },\n];\n\n// [\n//     { a: { b: 3, c: 2 } },\n//     { a: { b: 1, c: 4 } },\n//     { a: { b: 1, c: 6 } },\n//     { a: { b: 1, c: 3 } },\n//     { a: { b: 1, c: 5 } },\n//     { a: { b: 1, c: 7 } },\n// ]\narray.slice().sort(comparator);\n```\n\n****\n### Q&A\n\n**Q:** Should `reverse(cmp)` be equals to reversed array with `cmp` ?\n\n**A:** In general, it should not. \n`Array.prototype.reverse` just reverse all elements order, regardless its values.\nWhen comparator suppose both values are equal, it returns `0`. And these elements save original order.\n\n```ts\nconst array = [1, 2, 4];\nconst comparator = cmp().map(x => x % 2 === 0).use(asc);\n\n// [2, 4, 1]\narray.slice().sort(reverse(comparator));\n\n// [4, 2, 1]\narray.slice().sort(comparator).reverse();\n```\n\n\n## Support\n\nPlease [open an issue](https://github.com/lightness/type-comparator/issues/new) for support.\n\n## Contributing\n\nPlease contribute using [Github Flow](https://guides.github.com/introduction/flow/). Create a branch, add commits, and [open a pull request](https://github.com/lightness/type-comparator/compare/).\n","readmeFilename":"README.md","homepage":"https://github.com/lightness/type-comparator#readme","keywords":["comparator","comparators","type","types","typescript"],"repository":{"type":"git","url":"git+https://github.com/lightness/type-comparator.git"},"bugs":{"url":"https://github.com/lightness/type-comparator/issues"}}