{"_id":"@pabra/sortby","_rev":"5-f1651c0ab8c0b7836f076cfd830123ab","name":"@pabra/sortby","dist-tags":{"latest":"1.0.2"},"versions":{"0.1.2":{"name":"@pabra/sortby","version":"0.1.2","description":"Provide typesafe function to be passed to Array.prototype.sort() to sort an Array of Objects by multiple keys.","sideEffects":false,"main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","scripts":{"clean:coverage":"rimraf coverage/*","clean:build":"rimraf dist/*","clean:build:cjs":"rimraf dist/cjs/*","clean:build:esm":"rimraf dist/esm/*","format":"prettier --write \"{src,__tests__}/**/*.{js,ts,jsx,tsx,json,html,css,scss,yml,yaml}\"","format:check":"prettier --check \"{src,__tests__}/**/*.{js,ts,jsx,tsx,json,html,css,scss,yml,yaml}\"","lint":"eslint \"{src,__tests__}/**/*.{js,ts,jsx,tsx}\"","test":"jest","test:debug":"node --inspect node_modules/.bin/jest --runInBand","pretest:coverage":"npm run clean:coverage","test:coverage":"jest --coverage","test:after-commit":"run-p format:check lint test:coverage build:check","test:before-publish":"run-p format:check lint test build","prebuild:cjs":"npm run clean:build:cjs","build:cjs":"tsc -p tsconfig.cjs.json","prebuild:esm":"npm run clean:build:esm","build:esm":"tsc -p tsconfig.esm.json","build:check":"tsc","build":"run-p build:cjs build:esm"},"repository":{"type":"git","url":"git+https://github.com/pabra/sortby.git"},"keywords":["sortby","sort","typesafe","typescript","browser","nodejs"],"author":{"name":"Patrick Braune","email":"pabra@netzfruech.de"},"license":"MIT","publishConfig":{"access":"public"},"bugs":{"url":"https://github.com/pabra/sortby/issues"},"homepage":"https://github.com/pabra/sortby#readme","devDependencies":{"@types/jest":"^26.0.14","@typescript-eslint/eslint-plugin":"^4.4.0","@typescript-eslint/parser":"^4.4.0","eslint":"^7.11.0","eslint-config-prettier":"^6.12.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-prettier":"^3.1.4","jest":"^26.5.3","npm-run-all":"^4.1.5","prettier":"^2.1.2","prettier-plugin-organize-imports":"^1.1.1","rimraf":"^3.0.2","ts-jest":"^26.4.1","typescript":"^4.0.3"},"gitHead":"166fda192aaad7433d763dbc72d9193c3570b5e2","_id":"@pabra/sortby@0.1.2","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-lB1nRJ1Z7KBFSqCKJpvsYhIoWJg7eAJ3ctmgjYh4IHJrQcyQur+0HYsompbK/Eu810E1FUWGfuNk0DOaZpY6HA==","shasum":"292073e30d5d63e217288dc64652573288e153e1","tarball":"https://registry.npmjs.org/@pabra/sortby/-/sortby-0.1.2.tgz","fileCount":8,"unpackedSize":5277,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhoTrCRA9TVsSAnZWagAAB10P/22n7a/nhSa9204pwKHC\n6bs9LqHTBpqsdWOB9J2rg1fos3VxFbSr4khy3ZABNFMjMcfmu8PkamWZ21VU\n1Qrz2Nmy15gay9SQWVoE9+MZs0gB6s9pAw7idMM/1qXRGtokGVYpZg92unZ8\nLHUxycs7/k1utWBBRZQS2lejpnVy8M3PQ1BPU7Ix4RyHeEbMHcAASm47AaUy\nt7d7IWgM4xmOwsGdWjfeM435BjiQa52NLAqTOTC5keCqxysFzaqnsyerrP4c\nXdFnxB9cuhwrza9CzkuoBvztOlR+KJu6hpWfMGLwMFIyemz2P54YzcDZSMXH\nR6dKYe2Ww4vIg4QRMGbYBmy4jPDvuWrVWllRVh5jTQAe8/ARHFx6qIv9NLvK\n39x53n6aqcMEecBYBTBQww9zJopD6bVN7ZbxEpXlj3g8k8SSnMEi/38Mj8xQ\nZYi5ziJIuUrlSHNLH4dEMoAQUiM2BoIZn8nSN2XvgjbjUH9ZClS6F0B6lSzR\npUOzh+IgUTDRxRIZ0w8ic6YT24jkqOTWtOolOjBSsOgkFcRpc96rkfQkSgi/\nQtzIe4IqNAbh0WkfRxAezXparNSPFUfuau06GRm4oJhPeZ/t6gmvZaY6W0pB\nesjEzTM7t6tZTcMApZu0ijOspLB7i1em0pbCxOLwrbX0PXff+Ltn3Ws6a3ou\n8qH3\r\n=k3oQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWjSgScnkPvo0QixzlsunrElunr4TyE6zOMMmVacEUKwIgVwuIxFkmyElusyDDFktNKKrP32Fr/7W6ZkeAbbfuZYA="}]},"maintainers":[{"name":"pabra","email":"patrick+npm@braune.xyz"}],"_npmUser":{"name":"pabra","email":"patrick+npm@braune.xyz"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sortby_0.1.2_1602651371166_0.9932169254379017"},"_hasShrinkwrap":false},"0.2.0":{"name":"@pabra/sortby","version":"0.2.0","description":"Provide typesafe function to be passed to Array.prototype.sort() to sort an Array of Objects by multiple keys.","sideEffects":false,"main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","scripts":{"clean:coverage":"rimraf coverage/*","clean:build":"rimraf dist/*","clean:build:cjs":"rimraf dist/cjs/*","clean:build:esm":"rimraf dist/esm/*","format":"prettier --write \"{src,__tests__}/**/*.{js,ts,jsx,tsx,json,html,css,scss,yml,yaml}\"","format:check":"prettier --check \"{src,__tests__}/**/*.{js,ts,jsx,tsx,json,html,css,scss,yml,yaml}\"","lint":"eslint \"{src,__tests__}/**/*.{js,ts,jsx,tsx}\"","test":"jest","test:debug":"node --inspect node_modules/.bin/jest --runInBand","pretest:coverage":"npm run clean:coverage","test:coverage":"jest --coverage","test:after-commit":"run-p format:check lint test:coverage build:check","test:before-publish":"run-p format:check lint test build","prebuild:cjs":"npm run clean:build:cjs","build:cjs":"tsc -p tsconfig.cjs.json","prebuild:esm":"npm run clean:build:esm","build:esm":"tsc -p tsconfig.esm.json","build:check":"tsc","build":"run-p build:cjs build:esm"},"repository":{"type":"git","url":"git+https://github.com/pabra/sortby.git"},"keywords":["sortby","sort","typesafe","typescript","browser","nodejs"],"author":{"name":"Patrick Braune","email":"pabra@netzfruech.de"},"license":"MIT","publishConfig":{"access":"public"},"bugs":{"url":"https://github.com/pabra/sortby/issues"},"homepage":"https://github.com/pabra/sortby#readme","devDependencies":{"@types/jest":"^26.0.14","@typescript-eslint/eslint-plugin":"^4.4.0","@typescript-eslint/parser":"^4.4.0","eslint":"^7.11.0","eslint-config-prettier":"^6.12.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-prettier":"^3.1.4","jest":"^26.5.3","npm-run-all":"^4.1.5","prettier":"^2.1.2","prettier-plugin-organize-imports":"^1.1.1","rimraf":"^3.0.2","ts-jest":"^26.4.1","typescript":"^4.0.3"},"gitHead":"70674fc2e7b6fd0e04091c7ddff5219acdd1f352","_id":"@pabra/sortby@0.2.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-Av+QB/+DtBMUZK0q6833FoER7Ays54zO1frFmRxdqR7xEfQXM+PTLBA+HiaPnrd9pdaTS2j1DQ6hEfQFpyZ2tg==","shasum":"97731f3d0c0226099d3197f51831a9510b47992a","tarball":"https://registry.npmjs.org/@pabra/sortby/-/sortby-0.2.0.tgz","fileCount":8,"unpackedSize":9599,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhunUCRA9TVsSAnZWagAAqKsP/RE0trGvwjFs7PUik1rh\nHYCsfmrX4FJlrwqgYaDymkXhimUZtEsaPhax+huyEoB14LiW0T9vFlUNn/tx\nkDzsr0pqcsTbNcEEDiKQqcS6QmxYthwHVHUCu2GgL3a+570AdO6uMcd3upP8\n3mC9vJ5q+bJdXixe1GGFO2Z2gRNpbNWJp10A0KASRzedRVVmd4sBPfxJLXfO\nQkxcZ49gFqnw7JH1cUUWw7XOX9I6SSWS08xYXyARQWynOQhoe8cFEjAMZeyM\n8HcilaM7YhDWyFLpLgBjiLJs2eboLbjWGyH0C2ieA/g50jFuz88bc9GJ4RAK\npu2kWuA2IPuTwS/cmgfkJduDCJLACq/U+P4Tappa2MTVXWfeDlI7P6qYFq3f\n9PGtlQTPzvm1tTwDXnsav4+aZfI/3zE3wVPGmVhQTI7rUyTin9pmHFN0IV5C\nlElE+NVoBPS39Z+DgXeHny58YpXod05kX3FPUStsvn3keTiJA4/iehcuDVKq\nCpgfhi2xdt2vdBf+rjAV55LuA+ILYoEKKX86HfQPUKBnNAVExq6Zkxh2952X\nS6F7ca1poUch+NQRInCT7qOESbjyf7rgKK6nKwQF0bn5S8kD7gYBAprxT9bP\nEFABHRfltJEGTJK2+3j6qSzMCmerDUxyFDxWDeADAE4FJfJdh401178WyiV9\nLp2K\r\n=QU8a\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCOnTONWp6UeDwjU/3D4trLz+L+Qp0RjYDTNTDxaVsiqAIgEh86wHI6/I2L+ubAwkTKMNXh7m/oGEyIab7Q3ouGLb4="}]},"maintainers":[{"name":"pabra","email":"patrick+npm@braune.xyz"}],"_npmUser":{"name":"pabra","email":"patrick+npm@braune.xyz"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sortby_0.2.0_1602677203543_0.08204550893004181"},"_hasShrinkwrap":false},"1.0.0":{"name":"@pabra/sortby","version":"1.0.0","description":"Provide typesafe function to be passed to Array.prototype.sort() to sort an Array of Objects by multiple keys.","sideEffects":false,"main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","scripts":{"clean:coverage":"rimraf coverage/*","clean:build":"rimraf dist/*","clean:build:cjs":"rimraf dist/cjs/*","clean:build:esm":"rimraf dist/esm/*","format":"prettier --write \"{src,__tests__}/**/*.{js,ts,jsx,tsx,json,html,css,scss,yml,yaml}\"","format:check":"prettier --check \"{src,__tests__}/**/*.{js,ts,jsx,tsx,json,html,css,scss,yml,yaml}\"","lint":"eslint \"{src,__tests__}/**/*.{js,ts,jsx,tsx}\"","test":"jest","test:debug":"node --inspect node_modules/.bin/jest --runInBand","pretest:coverage":"npm run clean:coverage","test:coverage":"jest --coverage","test:after-commit":"run-p format:check lint test:coverage build:check","test:before-publish":"run-p format:check lint test build","prebuild:cjs":"npm run clean:build:cjs","build:cjs":"tsc -p tsconfig.cjs.json","prebuild:esm":"npm run clean:build:esm","build:esm":"tsc -p tsconfig.esm.json","build:check":"tsc","build":"run-p build:cjs build:esm"},"repository":{"type":"git","url":"git+https://github.com/pabra/sortby.git"},"keywords":["sortby","sort","typesafe","typescript","browser","nodejs"],"author":{"name":"Patrick Braune","email":"pabra@netzfruech.de"},"license":"MIT","publishConfig":{"access":"public"},"bugs":{"url":"https://github.com/pabra/sortby/issues"},"homepage":"https://github.com/pabra/sortby#readme","devDependencies":{"@types/jest":"^26.0.14","@typescript-eslint/eslint-plugin":"^4.4.0","@typescript-eslint/parser":"^4.4.0","eslint":"^7.11.0","eslint-config-prettier":"^6.12.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-prettier":"^3.1.4","jest":"^26.5.3","npm-run-all":"^4.1.5","prettier":"^2.1.2","prettier-plugin-organize-imports":"^1.1.1","rimraf":"^3.0.2","ts-jest":"^26.4.1","typescript":"^4.0.3"},"gitHead":"6e257efc748ad0e31230f76e982444ea46d189c7","_id":"@pabra/sortby@1.0.0","_nodeVersion":"12.18.4","_npmVersion":"6.14.6","dist":{"integrity":"sha512-m0PBh4AicMax3DyMXPvGYM2uxDpMS0JmNotxB/JxYXuHn6uVpWQ7WF10nSr+f0sOJX7+xHjjDaDgg06PtG+xTQ==","shasum":"f0120d551d859e39d036f3bb7fe185b745f42533","tarball":"https://registry.npmjs.org/@pabra/sortby/-/sortby-1.0.0.tgz","fileCount":9,"unpackedSize":16519,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiDj3CRA9TVsSAnZWagAAWmEQAJ7DB7FExBpfW8B/G2C4\nsNkhTfgR+9bLdAwMkumSpfVdiMMz6bGLIQNK3atUWnV5XQrv379fVB8H0q2K\nnff9tHutI26UjutjH+cWd32m7ozUvRKSYWm9XZaYVP0pQ7rx/mqfdJzM16Dd\no4LPnkGuLX/ur7vFd5vwklWGZNDT1tmtHCWbfLkjjrZkZ3N0mpJKks6rUH87\nhlr2Db6V3tjVcOdZRzEKFc2lYJXRT+D49NdRr+fOOdigoKN0jilKMuzJy9/f\nKGlUTMjW3ajp2B5OGgUGv57W3RgI1VtBGW3Xrm32SxD7XfOsWcJyYwQzbQYz\n5Vef4IkMWze2SylBZzQ2kyAjrtftqSDg0JiOe9rNhDj0KzKK8gzDkXwIgB/j\nDN0fQTDjtlp2jQkYkgl94g7t5JUsxE/eOiFH06TEJ0Xerx6Ize4mX92kop5P\nciSGKU2aBAe4VBEkp8PiWJ7GXscDkC/sODMFNZD2BaGAMEFVKWj5qE3fp4gx\npqX3UR9UbF+VkPG3Q7m7Az4u+mxDQRA4D+5IOc7LsJ97luQvVJaV7CtqEUL/\ndanjDodgBPAb3fHMpKixAc239XiTlMG0pJIRcxp02C2ekZ+ck0KtHiZId59P\nRKQwSPkOBscsz18kWU/v5Vkcl0nnAVT94VnhiNyxQ2eNFFPbn9gPqBKdURIT\nbmRL\r\n=X7jo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhoZmn9J45rH7a+otEnCYr7PY3kSdscTMIJOWgYGmYJAIhAMVDl4fcVsDXmt4ckGqYUokUBQvHOpJ9sc2Z4+PEjQ/m"}]},"maintainers":[{"name":"pabra","email":"patrick+npm@braune.xyz"}],"_npmUser":{"name":"pabra","email":"patrick+npm@braune.xyz"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sortby_1.0.0_1602762998878_0.9014603262304144"},"_hasShrinkwrap":false},"1.0.1":{"name":"@pabra/sortby","version":"1.0.1","description":"Provide typesafe function to be passed to Array.prototype.sort() to sort an Array of Objects by multiple keys.","sideEffects":false,"main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","scripts":{"clean:coverage":"rimraf coverage/*","clean:build":"rimraf dist/*","clean:build:cjs":"rimraf dist/cjs/*","clean:build:esm":"rimraf dist/esm/*","format":"prettier --write \"{src,__tests__}/**/*.{js,ts,jsx,tsx,json,html,css,scss,yml,yaml}\"","format:check":"prettier --check \"{src,__tests__}/**/*.{js,ts,jsx,tsx,json,html,css,scss,yml,yaml}\"","lint":"eslint \"{src,__tests__}/**/*.{js,ts,jsx,tsx}\"","test":"jest","test:debug":"node --inspect node_modules/.bin/jest --runInBand","pretest:coverage":"npm run clean:coverage","test:coverage":"jest --coverage","test:after-commit":"run-p format:check lint test:coverage build:check","test:before-publish":"run-p format:check lint test build","prebuild:cjs":"npm run clean:build:cjs","build:cjs":"tsc -p tsconfig.cjs.json","prebuild:esm":"npm run clean:build:esm","build:esm":"tsc -p tsconfig.esm.json","build:check":"tsc","build":"run-p build:cjs build:esm"},"repository":{"type":"git","url":"git+https://github.com/pabra/sortby.git"},"keywords":["sortby","sort","typesafe","typescript","browser","nodejs"],"author":{"name":"Patrick Braune","email":"pabra@netzfruech.de"},"license":"MIT","publishConfig":{"access":"public"},"bugs":{"url":"https://github.com/pabra/sortby/issues"},"homepage":"https://github.com/pabra/sortby#readme","devDependencies":{"@types/jest":"^26.0.15","@typescript-eslint/eslint-plugin":"^4.6.1","@typescript-eslint/parser":"^4.6.1","eslint":"^7.13.0","eslint-config-prettier":"^6.15.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-prettier":"^3.1.4","jest":"^26.6.3","npm-run-all":"^4.1.5","prettier":"^2.1.2","prettier-plugin-organize-imports":"^1.1.1","rimraf":"^3.0.2","ts-jest":"^26.4.3","typescript":"^4.0.5"},"gitHead":"50ac176941d825fc974e8f7efe4dd6b2abeb34cb","_id":"@pabra/sortby@1.0.1","_nodeVersion":"12.19.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Vt9+cDSVLYmzFDdG08dOFfKn82Qmyns9JHbwf23LYK3dquu7J5lAaBlfQotQB2pMYDMW55FUgGZeS19zVXvmWg==","shasum":"f3ac872e87f75190df301f86a64fd87ade9920ae","tarball":"https://registry.npmjs.org/@pabra/sortby/-/sortby-1.0.1.tgz","fileCount":9,"unpackedSize":20045,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfp70pCRA9TVsSAnZWagAA7y8P/A7Aj0qsnDFDMBKb68PY\nn5jFJAkLkG4Q3QJki30/eqAbb52siGelijqZhUdbuE4CeIZJeqTJ5UUTT8sJ\nxn8isx/rn/kuOLCzVm5F1FwdjIvB6fbVloCrt5j73U2Uxxw5co0ahGiXWyaN\nx3uVFwRcgfKbB9XCbHQinCwtcr8+Zh+ao8t1PZFmny8P+bmLW63M8FeE0OFu\ngiGmR0nhV462cqTGw3dP4RpUDXScMFzy9+3o9K+2idX2IPwo/7er9e/EUI61\nsIGMeoYFoBK/UvbzxYMUPu7FytivbbNDaGyuTQ0rLLc1RKw83LPLaeFQSyc0\nRbytt6/wyv0Zm47CdyBsvks+f3beXFvXnje+HRmLsHUkXqare2cXSWnS1PdW\nbAdRgVWfNMROKljDwAEv3ybFXd2u1iYs09T8MutcSCOe83g61QRjfGNZgTsw\nLhJVn2X4nqURbtDoBBRq5SpRmGV9AyUUspSg9GS6qU9l7D9wmTaaxNhBYySH\nul/ZsclaBmBjbpWTX8yCS++8xpPJo3bg2M+mbayECyHhLv0xDK8PrfDoWqhF\nakCztropNmGvlpoXzxoWwH6NvFZgxPSuVDZjN3w3aEVmjCxwFX0jN/VVAbsz\n4wk1SVG4G6kSV70kcxT73MHubNcxloSGmn8v9vVDOTRX6AosnMsPxtbC5FEU\nXEhu\r\n=pXp8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGirAignFjzMA0FMT+SWbRuxdidXi3miFb98VOrHbanGAiEAk3xGwdUxuEJwZhlbiZIKArzzQyXCrKPKlGN16/B2pes="}]},"_npmUser":{"name":"pabra","email":"patrick+npm@braune.xyz"},"directories":{},"maintainers":[{"name":"pabra","email":"patrick+npm@braune.xyz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sortby_1.0.1_1604828457210_0.3315864875121084"},"_hasShrinkwrap":false},"1.0.2":{"name":"@pabra/sortby","version":"1.0.2","description":"Provide typesafe function to be passed to Array.prototype.sort() to sort an Array of Objects by multiple keys.","sideEffects":false,"main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","scripts":{"clean:coverage":"rimraf coverage/*","clean:build":"rimraf dist/*","clean:build:cjs":"rimraf dist/cjs/*","clean:build:esm":"rimraf dist/esm/*","format":"prettier --write \"{src,__tests__}/**/*.{js,ts,jsx,tsx,json,html,css,scss,yml,yaml}\"","format:check":"prettier --check \"{src,__tests__}/**/*.{js,ts,jsx,tsx,json,html,css,scss,yml,yaml}\"","lint":"eslint \"{src,__tests__}/**/*.{js,ts,jsx,tsx}\"","test":"jest","test:debug":"node --inspect node_modules/.bin/jest --runInBand","pretest:coverage":"npm run clean:coverage","test:coverage":"jest --coverage","test:after-commit":"run-p format:check lint test:coverage build:check","test:before-publish":"run-p format:check lint test build","prebuild:cjs":"npm run clean:build:cjs","build:cjs":"tsc -p tsconfig.cjs.json","prebuild:esm":"npm run clean:build:esm","build:esm":"tsc -p tsconfig.esm.json","build:check":"tsc","build":"run-p build:cjs build:esm"},"repository":{"type":"git","url":"git+https://github.com/pabra/sortby.git"},"keywords":["sortby","sort","typesafe","typescript","browser","nodejs"],"author":{"name":"Patrick Braune","email":"pabra@netzfruech.de"},"license":"MIT","publishConfig":{"access":"public"},"bugs":{"url":"https://github.com/pabra/sortby/issues"},"homepage":"https://github.com/pabra/sortby#readme","devDependencies":{"@types/jest":"^27.0.1","@typescript-eslint/eslint-plugin":"^4.29.2","@typescript-eslint/parser":"^4.29.2","eslint":"^7.32.0","eslint-config-prettier":"^8.3.0","eslint-plugin-import":"^2.24.1","eslint-plugin-jest":"^24.4.0","eslint-plugin-prettier":"^3.4.1","jest":"^27.0.6","npm-run-all":"^4.1.5","prettier":"^2.3.2","prettier-plugin-organize-imports":"^2.3.3","rimraf":"^3.0.2","ts-jest":"^27.0.5","typescript":"^4.3.5"},"gitHead":"9e8c6af7efdb034957be38d064586f986dc490fa","_id":"@pabra/sortby@1.0.2","_nodeVersion":"14.17.5","_npmVersion":"6.14.14","dist":{"integrity":"sha512-gT4DWbGLlkctE5TwRT6/gZzHiVil1Ywg7FF5OmIilZbGCZqdYpbz98L2bqfhglwK3kj4fBZRMSCtzrjQ6J8jAw==","shasum":"9ef674da9e5048bbe6a08217ce0dede5411cdfc9","tarball":"https://registry.npmjs.org/@pabra/sortby/-/sortby-1.0.2.tgz","fileCount":9,"unpackedSize":20833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhImWyCRA9TVsSAnZWagAAVhMP/jmCDAxSCTJkbma/Sctn\nj6xlzyYevKkvxoHoga0X/2yIdNIJ/UcU//97gQl96fHWSiAT1pVl1OZWJWxW\n++xPQFoSC/vdA96yFnKu8u9d2fG9iWGB0mFe1IPt7ehmsh/lYJkUbX4oj/NE\nJS9099WIv19ZQUnkC75RRB3lzVwq57rWvAB0/o2FDkLBOzEZsjPyDESWBgoK\nsZTwzQ9nQEdA60q6kcGSpn+2zkZQ/4TFCv6eIo2cLU5+3avVaMPoyKSSWqBX\nVl8KwdsCk+LQwqb2bf6wbNlcd3uECkWSore6oDAUVygFzBzKU3F4Yl3v/Bjn\nohG6LKI3zTtOiUDEkgFG4kTeKUax9S1nbyroOQRQHH7LKhxkpMLDV8zuT5m7\nE42FoOTv3kegdx0OPHMZLNKDcaaq0NlD6iRYUcp8hx/V3/7ng2PHgUJN/VDe\nvKsVn43FIYjowjqbhxqn9m38PC84O/i4J4S7PoybUZ7R7CObruIxsUuP7YOu\nHq19zkGHrPCBmC3Bhxm8kKSUh4cKak8bbt0oDHvc/2p70CrEH1lHoXmtk3x6\nO728nsfUxzUy8PeIVCCGyl6K4XedAKk/PehAzGfxQT8sqPjtx5AXc1YwHRk7\nq5zOVfgW3XsxjrJReHlgNWtZrtJwjB/YO+itcu1Ox63dknoGcOYInB/vGtDy\n05JF\r\n=8aLd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWKTc5uGhM3rIukaLEt+YTnINkLUurPh99RpFkPlTWQwIgRhCboYmkyvi12qJ3HUlxNq21YLR9W0Yo6+JnWiCb7uw="}]},"_npmUser":{"name":"pabra","email":"patrick+npm@braune.xyz"},"directories":{},"maintainers":[{"name":"pabra","email":"patrick+npm@braune.xyz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sortby_1.0.2_1629644210379_0.5454840856164584"},"_hasShrinkwrap":false}},"time":{"created":"2020-10-14T04:56:11.128Z","0.1.2":"2020-10-14T04:56:11.308Z","modified":"2022-04-06T12:46:35.068Z","0.2.0":"2020-10-14T12:06:43.656Z","1.0.0":"2020-10-15T11:56:39.111Z","1.0.1":"2020-11-08T09:40:57.367Z","1.0.2":"2021-08-22T14:56:50.507Z"},"maintainers":[{"name":"pabra","email":"patrick+npm@braune.xyz"}],"description":"Provide typesafe function to be passed to Array.prototype.sort() to sort an Array of Objects by multiple keys.","homepage":"https://github.com/pabra/sortby#readme","keywords":["sortby","sort","typesafe","typescript","browser","nodejs"],"repository":{"type":"git","url":"git+https://github.com/pabra/sortby.git"},"author":{"name":"Patrick Braune","email":"pabra@netzfruech.de"},"bugs":{"url":"https://github.com/pabra/sortby/issues"},"license":"MIT","readme":"# @pabra/sortby\n\n[![npm version](https://img.shields.io/npm/v/%40pabra%2Fsortby?label=version&logo=npm)](https://www.npmjs.com/package/%40pabra%2Fsortby)\n[![npm bundle size (scoped)](https://img.shields.io/bundlephobia/min/@pabra/sortby?logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACSUlEQVRYw%2B2XP2gTcRTH459BEKSiQkH8%2FcmlaUpJEESECpKh0IKiU2b%2FDNKxDkrp0rjZUXBSHERcBEEX7eRQhVKcBBfrIgriYDEoorVJzs%2FL%2FdpexbSXXq4g3MHjLne%2F3%2Ft%2B3vu9y%2B9dJhPjsNb2G5O9YUzBZLbrKJVKexG9qLV9aYz9zPW01mbRGPM0m82eqVarOxMRRuAEorc5f0X4CdGfrVQqu4Jn5T3cP8%2F9eew9UBO5XO5QbNF8Pn8QZ1eI8A3i78SxMYO9G83xPO8YMHcBqXF%2BwO%2BhjkQlhUwcwcHDwIm9R7SnOs%2FY0R6Ax5m%2FgL3mekyWb6OC0gy6TqQfsVcygTTui5tF3%2Fd3UBvDBPVIlg%2Fft7TuG1g3iBT7QSHZmwwuJlXALOlhCVKKVzRXimvKATSgewHA8aQAqIcjStnHaNVFU2DCAA7CNLEvwFzt1hIENSWFbBpKtTT8dgBhE5A6xDNbKcJisbhfKe8aPmqhwNZpbAawCqKUXnZZmYz4Gsob9NsJt%2FUdFSBsDef4OfPOlcvl3Wt%2FRN4FAN%2FyfOlf0XYLIGw%2FmVsLXivzg%2BtfnfqICxDbUoAUIAVIAVKAFoDriGrBBmKXkxalH5BmpEng3%2F5qy%2FQQe%2F%2Bs61bqUXe06Nba0ptBh913uu1%2BLr0%2BgyfJxqcuZKXhWj12Sn2%2F428F%2BsO86%2BGW1pxFj5Z0f6BBudyVhhKnl4BZ2CQrreVjfZ8JfCKdbaFQOKC1dweI70A1XXakqBYRnVr5XNuWA9FRQOaU6j%2BZ%2BV%2BPP5ZRWPOOMBtbAAAAAElFTkSuQmCC)](https://bundlephobia.com/package/%40pabra%2Fsortby)\n[![Codecov](https://img.shields.io/codecov/c/github/pabra/sortby/master?logo=codecov)](https://codecov.io/gh/pabra/sortby)\n[![unit-tests](https://github.com/pabra/sortby/workflows/unit-tests/badge.svg?branch=master)](https://github.com/pabra/sortby/actions?query=branch%3Amaster+workflow%3Aunit-tests)\n[![npm-publish](https://github.com/pabra/sortby/workflows/npm-publish/badge.svg)](https://github.com/pabra/sortby/actions?query=workflow%3Anpm-publish)\n\n[![play with `sortby`](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/mystifying-brahmagupta-wv1o1?expanddevtools=1&hidenavigation=1&moduleview=0&file=/src/index.ts)\n\n## What\n\nIf you want to sort an array of objects by multiple keys, you pass the object's\nkey names in the order you want to sort them to `sortby` and get back a function\nthat you can pass to `Array.prototype.sort`.\n\nGoals are:\n\n- work with [`Array.prototype.sort`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)\n- be typesafe\n- be lightweight/small\n- be usable in browser and node.js\n- do not have dependencies\n\n## Why\n\nThere are already [`many`](https://github.com/snovakovic/fast-sort)\n[`tools`](https://github.com/bameyrick/sort-by-typescript)\n[`like`](https://github.com/stevemao/compare-func)\n[`this`](https://github.com/cosimochellini/sort-es) but I was unable to find any\nthat is typesafe and `Array.prototype.sort` compatible.\n\n## Install\n\n```console\nnpm install --save @pabra/sortby\n# or\nyarn add @pabra/sortby\n```\n\n## Getting Started\n\nLet's assume we have a list of users.\n\n```typescript\nconst users = [\n  { name: 'Bob', age: 23 },\n  { name: 'Alice', age: 23 },\n  { name: 'Chloe', age: 42 },\n  { name: 'Bob', age: 21 },\n];\n```\n\nNow we want to sort this array first by `name` and then by `age`.\n\n```typescript\nusers.sort((left, right) =>\n  left.name < right.name ? -1\n    : left.name > right.name ? 1\n    : left.age < right.age ? -1\n    : left.age > right.age ? 1\n    : 0,\n);\n```\n\nJust for 2 keys this is already alot of typing and easy to produce/overlook\ntypos - especially if you have mixed ascending and descending order direction.\nHow about this for the same result?\n\n```typescript\nimport { by } from '@pabra/sortby';\n\nusers.sort(by('name', 'age'));\n```\n\n## Usage\n\nIn the following examples we assume following `User` object.\n\n```typescript\ntype User = {\n  name: string;\n  age: number;\n};\n```\n\n### Importing\n\nImport `sortby`\n\n```typescript\nimport { by } from '@pabra/sortby';\n```\n\n### Sort by key names ascending\n\nFor each key of your object that you want to sort by, you need to pass an\nargument to `by` function. If you want to sort your array of `User`s (`User[]`)\nascending by the key \"name\" and then by \"age\", you have to pass those key names\nas 2 arguments to `by`.\n\n```typescript\nby('name', 'age')\n```\n\nThat will return a function that you can pass to `Array.prototype.sort` with a\nsignature like this:\n\n```typescript\n(left: User, right: User) => number\n```\n\n### Sort descending\n\nTo sort descending for a key, you need to pass a tuple of key name and sort\ndirection. Sort directions are abbreviated with `asc` for \"ascending\" and `desc`\nfor \"descending\". To sort first descending by \"name\" and then descending by\n\"age\", you write:\n\n```typescript\nby(['name', 'desc'], ['age', 'desc'])\n```\n\nWriting\n\n```typescript\nby('name', 'age')\n```\n\nis just a shorthand for\n\n```typescript\nby(['name', 'asc'], ['age', 'asc'])\n```\n\n### Prepare a `sortby` function\n\nIf you need to sort `User` lists at multiple places the same way, you can\nprepare a `sortby` function to be reusable.\n\n```typescript\nconst userSort = by('name', 'age');\n```\n\nThen you can just use it where needed.\n\n```typescript\nconst finalUsers = users\n  .filter(user => user.age > 23)\n  .sort(userSort);\n```\n\n`sortby` works with [generic\ntypes](https://www.typescriptlang.org/docs/handbook/generics.html). `userSort`\nfrom above will have the following (simplified) type signature:\n\n```typescript\nconst userSort: (\n  left: { name: any } & { age: any },\n  right: { name: any } & { age: any },\n) => number\n```\n\nThis means, `userSort` will work on any object with keys \"name\" and \"age\". When\nyou change the shape of your `User` type (eg. \"name\" => \"firstName\"), typescript\nwill mark places where you pass `userSort` to sort functions instead of the\nplace where you defined `userSort`.\n\nTo show typescript that this filter function is supposed to work on `User`\nobjects, you can define it like this:\n\n```typescript\nconst userSort = by<User>('name', 'age');\n```\n\nThe resulting (simplified) type signature looks like:\n\n```typescript\nconst userSort: (\n  left: User,\n  right: User,\n) => number\n```\n\n### Extractors\n\nIf you want to sort by nested objects or need to convert/manipulate a value\nbefore comparing, you can pass an extractor function instead of the key name.\nLet's assume you want to convert all user names to lower case before comping:\n\n```typescript\nby(user => user.name.toLowerCase(), 'age')\n```\n\nFor descending order, wrap it in a tuple as above:\n\n```typescript\nby([user => user.name.toLowerCase(), 'desc'], 'age')\n```\n\n## Tests\n\nRun tests.\n\n```console\nnpm run test\n```\n\nSee them succeed.\n\n```\n PASS  __tests__/index.ts\n  sort by name first\n    ✓ sort by name asc (3 ms)\n    ✓ sort by name asc, age asc (1 ms)\n    ✓ sort by name asc, age desc\n    ✓ sort by name desc, age asc (1 ms)\n    ✓ sort by name desc, age desc\n  sort explicitly asc\n    ✓ sort by name explicitly asc (1 ms)\n    ✓ sort by name asc, age asc\n    ✓ sort by name asc, age desc (1 ms)\n  sort by age first\n    ✓ sort by age asc\n    ✓ sort by age asc, name asc\n    ✓ sort by age asc, name desc (1 ms)\n    ✓ sort by age desc, name asc\n    ✓ sort by age desc, name desc\n  extractor\n    ✓ sort by last reversed name asc, age asc (1 ms)\n    ✓ sort by last reversed name desc, age asc\n\nTest Suites: 1 passed, 1 total\nTests:       15 passed, 15 total\nSnapshots:   0 total\nTime:        2.371 s\nRan all test suites.\n```\n","readmeFilename":"README.md"}