{"_id":"@berish/linq","_rev":"11-6886fb832c63d92e26decd5827dbaaa6","name":"@berish/linq","dist-tags":{"latest":"1.3.0"},"versions":{"1.0.0":{"name":"@berish/linq","version":"1.0.0","author":{"name":"Berishev Ravil","email":"quadraticteam@gmail.com"},"license":"MIT","_id":"@berish/linq@1.0.0","maintainers":[{"name":"quadraticstudio","email":"quadraticteam@gmail.com"}],"dist":{"shasum":"c34d174b3d728d553c427f6ede967db0eede7a2a","tarball":"https://registry.npmjs.org/@berish/linq/-/linq-1.0.0.tgz","fileCount":7,"integrity":"sha512-Bp3CVLakxPECS7iD3BM/JY3fK40iNeJkVUKyM1StlSpIZyCRmzrYX3M57cKlv3yyHZGayEbgQa7EIS2DbOV19g==","signatures":[{"sig":"MEUCIQDpNaoimRY268GokS6AZXnAHGn+7sZBbgElk3/XixaYtAIgakmN/E5MT+1lDyiEywB8bO/ibY72ux/LvUiZ5wyzvSQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38612,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdGUhhCRA9TVsSAnZWagAAcVkQAKQ54Oga34Sgo5024kbT\nOuK+4Oq5+8+zbhnZhdeh9sszBSWywhmoCobF2sPJTsM6DahZtUyQ013uX0EN\nM3Ddh7U+bxnjhbQXRTZsrC+mqn83a5JcOdA58Ml3air8BUCkZBX32Rxe1bxX\n8KKsZAP3UKLOEfSOC37ggjmFH9euUubYR/L/oOI34uZuoGrjMuJR2hrTBHmp\nWu8ynHP4S67WWSMoEX930vvI9wQSyWBtI+znOs5pC4RlFP8L8oQc8z1PyeVi\nPuepqpZ7AMuNXSx26YyobPk5mr/GGGp+EYiyrjiuzGglSLD/rXGRGZkgE+RQ\nIGlX/GnwdPWnTabH+EiCxqBz0nkaxLk/unUlgHhPbuhyW5mU+N9/BdpxzJAe\nrDkAJ9ani3YIdPI4xx3EnTJxGrV3LD95UwOCPjTyQPzu0HMA3xBXh61CVaFt\nbM5PP5/sWRxqOY26XcBg7kl0zb7ZfBNqdzMtH8REFf2jsFeb3bkbutMj2tC/\njc1vA0JY3EHM6aScHOZDyDzOkfQ16YMazPC5HguUbZYw6dqnguEH1nx3h/Kj\n9BrFbTLV8prK+V8yhSfAZyE111u80SpxexcBmfeX3ajmMPr0BsNr+FL/IJcw\nBu5bg32L8sZd2Hb2U8rD6CMcsx0XrlUwZUY/CESt481B6F5iPH/ABAL+uPOI\nRuJk\r\n=h9mo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","private":false,"scripts":{"lint":"tslint -p tsconfig.json","test":"jest --config jestconfig.json","build":"tsc -p .","format":"prettier --write \"src/**/*.ts\" \"src/**/*.js\"","prepare":"npm run build","version":"npm run format && git add -A src","test:dev":"jest --config jestconfig.json --watch --verbose=false","preversion":"npm run lint","postversion":"git push && git push --tags","prepublishOnly":"npm test && npm run lint"},"typings":"build/index.d.ts","_npmUser":{"name":"quadraticstudio","email":"quadraticteam@gmail.com"},"repository":{"url":"git@gitlab.com:berish/packages/berish-linq.git","type":"git"},"description":"LINQ - very usefull helper for working with arrays and collections","directories":{},"dependencies":{"berish-collection":"^2.0.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^24.8.0","faker":"^4.1.0","tslint":"^5.18.0","ts-jest":"^24.0.2","prettier":"^1.18.2","typescript":"^3.5.2","@types/jest":"^24.0.15","@types/faker":"^4.1.5","tslint-config-prettier":"^1.18.0"},"peerDependencies":{"berish-collection":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/linq_1.0.0_1561938016408_0.32698222439517144","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@berish/linq","version":"1.0.1","author":{"name":"Berishev Ravil","email":"quadraticteam@gmail.com"},"license":"MIT","_id":"@berish/linq@1.0.1","maintainers":[{"name":"quadraticstudio","email":"quadraticteam@gmail.com"}],"dist":{"shasum":"7e19342233fbf62655f82262e0019e94d42b2fae","tarball":"https://registry.npmjs.org/@berish/linq/-/linq-1.0.1.tgz","fileCount":7,"integrity":"sha512-cKpufUcrwmhrxbqG/Gh72pCAangTb447t0s/WFek3ombzUglxPxiSa2iivZKvdBSRueTjm21qlcSkdhVwb2Lvg==","signatures":[{"sig":"MEUCIEbou2afpW00E1knunuwSfCOTwtvIlk5l5Q6wIgdCyssAiEAyncUKO25QJJQMoWVyXf86JulAGrjFlASxeh3JK8L3E8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39011,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdMjhTCRA9TVsSAnZWagAAnPoQAJX8PnIZo/kpJD02akcX\ncKYZznIYHuABhRcIb5dbfKb6qKxmReY5Q+GTO0aBeP85MR2Go+cvnhafdggo\n/Sk3X5ji0sZRIO1PNtIGHpTyFUwGdNWJf330ymARtdKWqfGSQTchMQ7ZDQYg\nVFteiSielJ8c8l7UwiqA2k0t57iCy2fAqgJa0ULcdC69a5emNtweuiGroxqQ\n0Ipx2Xbfq3IsCYW4bYL6Up6o0MwX3fu5HkSxWpHQ6mrX/YyuWHPdS8fYUjU/\ndy84yh2fPQ5CuGWWHqd4rgbxP3KYb4Y70e7q4sE8MAc+LOOnHN+TEptjPW2E\nyLe60rpEU3KsE/wubIYWr6Kh+6nrdMFfznBP+zsVEHBFL1f7o7tr09VP2H14\nX+GKBXXzkQncXWNpOvoY92RLbe6z/awkoViaIjB6NUpqhX41n5NTys6e6jcr\nl2gAqpLcLaaA1y6kaEL/A6eL3DT7B61hjvjY9+uGET3khTAjSt4uRj5m9n0C\nP8GclA3dMPoxj4zchJT7wePkHQsZ8Ao12InxCL6ikIu0f7H+rr/FhrsA0asW\nttfA08kiR+EJjVpvyNHjis+31q3nh9RfGbpGN/Jnhw4tiVhnD/R1YjPk9n0F\nfM5U1XqfcFnev2ilbzoMrYu9Mg8JyaDSZiI6WUHBFeKC06rI8VYhyIOvrA5O\nBMNH\r\n=eWT5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","private":false,"scripts":{"lint":"tslint -p tsconfig.json","test":"jest --config jestconfig.json","build":"tsc -p .","format":"prettier --write \"src/**/*.ts\" \"src/**/*.js\"","prepare":"npm run build","version":"npm run format && git add -A src","test:dev":"jest --config jestconfig.json --watch --verbose=false","preversion":"npm run lint","postversion":"git push && git push --tags","prepublishOnly":"npm test && npm run lint"},"typings":"build/index.d.ts","_npmUser":{"name":"quadraticstudio","email":"quadraticteam@gmail.com"},"repository":{"url":"git@gitlab.com:berish/packages/berish-linq.git","type":"git"},"description":"LINQ - very usefull helper for working with arrays and collections","directories":{},"dependencies":{"berish-collection":"^2.0.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^24.8.0","faker":"^4.1.0","tslint":"^5.18.0","ts-jest":"^24.0.2","prettier":"^1.18.2","typescript":"^3.5.2","@types/jest":"^24.0.15","@types/faker":"^4.1.5","tslint-config-prettier":"^1.18.0"},"peerDependencies":{"berish-collection":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/linq_1.0.1_1563572304441_0.8908565088148086","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"@berish/linq","version":"1.0.2","author":{"name":"Berishev Ravil","email":"quadraticteam@gmail.com"},"license":"MIT","_id":"@berish/linq@1.0.2","maintainers":[{"name":"quadraticstudio","email":"quadraticteam@gmail.com"}],"dist":{"shasum":"21307d08d521ffb3e9854f4e0f143c9288167caa","tarball":"https://registry.npmjs.org/@berish/linq/-/linq-1.0.2.tgz","fileCount":7,"integrity":"sha512-7qDuhRVEwSuX0Hr/QJRP/cRf+fg77KhJ1gNWzNE+fP82rvxz+kga20VbtHYKMxocXrLwUWyfEPdKteDE2/k1BA==","signatures":[{"sig":"MEYCIQCaPBzSL/a8Wtnff1DsxNEeUPKBTnGu+WMVCDGnp5l/3gIhAL+K5TQwYFxESlccATOlowxL+dDkwLhH2a7aBvgFaYkY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39621,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQhNjCRA9TVsSAnZWagAA9UMQAIb10oN9303vXRflSzL3\n67v5HGezqO7DjkbZ1xTkGYuzTXyEP77MdEaCjPvcl+yu7O1Sgmkg+xn9KEi9\nQINSIMgJutsGqjcrDh7tvSa1xJR51n0KfxnrpMm0hc1/LwJVKf8HLF8tfq62\nNkq5KM9uaoqDg48WKnUePs4f2B8loveQw/hOswt1nl21JQbpYj6/6nsq2iQ+\nE8XnWCDIxHzqRrURivLOrklIH4KAeiefW5sbUSntirX7QyV4gvRvhyofiqIT\n1r0560V58OzoALNIt5hC4OoPHOEPWpoX7c7mlpoGQr5Pu+oZfOM0uZE9kXSt\n9cfu6+ohcsw8xLcT/TauFQhSL6lahVun6id9Z7fKAafHY2iBDOXRfk7I8JBZ\nfTB7bRT+v+ViXxj5Y5BpuPJH76s7O5bq7VSN6zjICOjAL3VS5RAOMyQEvOsE\ny7HPrK8BewxVR0MqeQ+7QCOPPYLOzOPORONIiBGtse5iyNlLn6efCEwXGwvG\nf560FycQNRrsH75/T4eWoyaiBSsvI1H0HwplGXidqdo68rsaJYBfg0GyGHHq\n9vqNvbpmsMgjrXeyJsPzi0sip37WIxXrpLbfxpKdBU9OYdcFWiJdQ0UAJEjk\nopl1QFd5oETZy0X+UuyGxqMYgs7LD6L+eZ3zRtbi9YZV243flZWgF1MgKOrX\nGABQ\r\n=UrTz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","private":false,"scripts":{"lint":"tslint -p tsconfig.json","test":"jest --config jestconfig.json","build":"tsc -p .","format":"prettier --write \"src/**/*.ts\" \"src/**/*.js\"","prepare":"npm run build","version":"npm run format && git add -A src","test:dev":"jest --config jestconfig.json --watch --verbose=false","preversion":"npm run lint","postversion":"git push && git push --tags","prepublishOnly":"npm test && npm run lint"},"typings":"build/index.d.ts","_npmUser":{"name":"quadraticstudio","email":"quadraticteam@gmail.com"},"repository":{"url":"git@gitlab.com:berish/packages/berish-linq.git","type":"git"},"description":"LINQ - very usefull helper for working with arrays and collections","directories":{},"dependencies":{"berish-collection":"^2.0.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^24.8.0","faker":"^4.1.0","tslint":"^5.18.0","ts-jest":"^24.0.2","prettier":"^1.18.2","typescript":"^3.5.2","@types/jest":"^24.0.15","@types/faker":"^4.1.5","tslint-config-prettier":"^1.18.0"},"peerDependencies":{"berish-collection":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/linq_1.0.2_1564611426322_0.23249975168793768","host":"s3://npm-registry-packages"}},"1.0.3":{"name":"@berish/linq","version":"1.0.3","keywords":["linq","berish","array","collection","helper","csharp","dotnet","tsql","native","js","ts","typescript","standart","Berishev","Ravil","Fartix","quadraticteam","jest","package"],"author":{"name":"Berishev Ravil","email":"quadraticteam@gmail.com"},"license":"MIT","_id":"@berish/linq@1.0.3","maintainers":[{"name":"quadraticstudio","email":"quadraticteam@gmail.com"}],"dist":{"shasum":"7272340664e6f0f2dccb62aee6fa1a3939d910a0","tarball":"https://registry.npmjs.org/@berish/linq/-/linq-1.0.3.tgz","fileCount":7,"integrity":"sha512-2c5XNBREEJA+OCUEh37FUtFw5/T8blcwX8AC9IFPKbDhhTiIohQCr73JLtomDaR9IfTP8ci7O5AgI/zCFKYehg==","signatures":[{"sig":"MEQCIDfLpkT5huK/xoP1bb35/agoUso3xSr7WsiqpGrxAUGQAiBhIEwU2pntuGRVtO4KAS83GlhiZM06/liNrFAY0gzblQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39911,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQhP6CRA9TVsSAnZWagAAhakP/1JWCyEHaNHmMvKVeBII\nCfWcS12POMOnQy7DIoSJo5mnVt2EDoftLqwfdYF8ZpsdNyNkAxE453dQOXBw\nzn35JBstA4XI4RcLI+abya9OVU00r9+gFsKdLu5pEehTCJGxtSwsvNTyx2nV\nM3hPQCoMRuCvn0452K/Pu4HjMwjxjkln4NFeb7Ah5xqfeotg0t4fFpxXifXz\ncxdJkcxhBEvsqgZveqr/n0KdJs84m0oI5/7V10eSME5OBDu8P9tyDFx3Ck41\n40Pud7iqpOnFZXQJHQAct3eeBHH2f76nVVs3J4MWFJuLDJCQwcPtNfQ8rfnn\nai0N8CzEqCMuW7ukPKweuT0vTu75/EdtOpYKpvvTkPqElNqMSf8DixmXCEBM\nacdqDFrVfqbdSlG8bopNu2XPPPoDLbyMJ8DxcA6VkrrkSeMqtg0KX2J9L1K7\nv3FvIrF4x7z2gjAhwLRY+2dkyAPhiCSZ1P33Vlu8/52R4P/VUzTdMzCfmD5l\nnPo30dvFzdhFx6+bZjD4N/jb982LUuqOZiNNylB67u5U03jS182AwzftAicg\n1FFjFZT4cKGjGAEHlc7lAfFZm68odfNNbAFgt0Q6a6ovh1AJR4vF8KPcFEtn\n+Z4AkuurNdOuOxqwbetDt5/emuuh2Zycj+LT3Gwqw9G11pwyLcA22SmHgoyV\nBpVh\r\n=UxOo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","private":false,"scripts":{"lint":"tslint -p tsconfig.json","test":"jest --config jestconfig.json","build":"tsc -p .","format":"prettier --write \"src/**/*.ts\" \"src/**/*.js\"","prepare":"npm run build","version":"npm run format && git add -A src","test:dev":"jest --config jestconfig.json --watch --verbose=false","preversion":"npm run lint","postversion":"git push && git push --tags","prepublishOnly":"npm test && npm run lint"},"typings":"build/index.d.ts","_npmUser":{"name":"quadraticstudio","email":"quadraticteam@gmail.com"},"repository":{"url":"git@gitlab.com:berish/packages/berish-linq.git","type":"git"},"description":"LINQ - very usefull helper for working with arrays and collections","directories":{},"dependencies":{"berish-collection":"^2.0.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^24.8.0","faker":"^4.1.0","tslint":"^5.18.0","ts-jest":"^24.0.2","prettier":"^1.18.2","typescript":"^3.5.2","@types/jest":"^24.0.15","@types/faker":"^4.1.5","tslint-config-prettier":"^1.18.0"},"peerDependencies":{"berish-collection":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/linq_1.0.3_1564611577634_0.2439128584969199","host":"s3://npm-registry-packages"}},"1.0.4":{"name":"@berish/linq","version":"1.0.4","keywords":["linq","berish","array","collection","helper","csharp","dotnet","tsql","native","js","ts","typescript","standart","Berishev","Ravil","Fartix","quadraticteam","jest","package"],"author":{"name":"Berishev Ravil","email":"quadraticteam@gmail.com"},"license":"MIT","_id":"@berish/linq@1.0.4","maintainers":[{"name":"quadraticstudio","email":"quadraticteam@gmail.com"}],"dist":{"shasum":"9914ab55fc43fb2a82463e5cb12f811003ee5297","tarball":"https://registry.npmjs.org/@berish/linq/-/linq-1.0.4.tgz","fileCount":7,"integrity":"sha512-T20q8Z+oB8QMpOCHnWVsytI/Q8nfCivMTLGSQLrD81xP5xzR4WQ9rJ8bGl9NF989jnou6+2/EnsDdI3aKVxUHw==","signatures":[{"sig":"MEQCIBCSgd/YHtQBjkEx4kxTqmlxEbxZxNt32JHLCgtoqX3YAiBGPo87zaieq/Q9C+qkZTAjsxlZS05CDw9HMcwyEeiwfg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42295,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdUEouCRA9TVsSAnZWagAA6hsQAJMNaKOHaGKr4ROdt02n\nIx22Zse9CUyM565CwjvBm71gYDx3UlkwLRttFuQTgcqfrJNnpWAJFhZ7aHxZ\nujeIUy2O6gauI4CPdBpE214zQxgMZbXtc10HlbPzv1U8ClPhv7xR6NQdimT4\n1tfyenjeHzDIVwo1eM6LJb21mOGMaZVwQmrCcupghYMNJ+eUahWOPN6j5rlG\nbXQasJsuu0B2oq5eUV4ezcHi4xn1GNuG2r0D9BFf2F+PTvjJlgY5d0RFlBUY\nuLo9h6flHHyHTvGRHQCA5x0nGbGy2eAyi9UwMlUXXzEOUVme08lwtxqc6Of7\nmlUAsKJcGDFh4kHbO55AHrQWXt8jYEnjcq65XZy09r+GSl/oplWWZolfrjfF\nSFffM6772GAXsiKaA0nG+X75wBjdlPU/VSjtWu4NIl4cOBqhPBfxKQKhzc9B\nHrybDRrc7l6m4Yb+39XMHyImcz0T5hB/n6gevHj23+T4tDVyB6ABO+jURlB5\njP7g9ZtoUFWdaJOLEnEjlTSQvUbOSKuSdCeUPUsbsPSaxbaqls0CoqUu1z5Y\nk5TLIBxoVC5AAQCn23JqAG9hPtbkM/QEmVJccqpILjRYvqiElSDS7rXOOWcJ\nj+U+/ueTwMeylwIE1h3rCNqA2m9aBbXtg7QGMYCG1tCsZA9Eq7ViNtZd7l6v\ng9V6\r\n=0Wtc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","private":false,"scripts":{"lint":"tslint -p tsconfig.json","test":"jest --config jestconfig.json","build":"tsc -p .","format":"prettier --write \"src/**/*.ts\" \"src/**/*.js\"","prepare":"npm run build","version":"npm run format && git add -A src","test:dev":"jest --config jestconfig.json --watch --verbose=false","preversion":"npm run lint","postversion":"git push && git push --tags","prepublishOnly":"npm test && npm run lint"},"typings":"build/index.d.ts","_npmUser":{"name":"quadraticstudio","email":"quadraticteam@gmail.com"},"repository":{"url":"git@gitlab.com:berish/packages/berish-linq.git","type":"git"},"description":"LINQ - very usefull helper for working with arrays and collections","directories":{},"dependencies":{"berish-collection":"^2.0.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^24.8.0","faker":"^4.1.0","tslint":"^5.18.0","ts-jest":"^24.0.2","prettier":"^1.18.2","typescript":"^3.5.2","@types/jest":"^24.0.15","@types/faker":"^4.1.5","tslint-config-prettier":"^1.18.0"},"peerDependencies":{"berish-collection":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/linq_1.0.4_1565542958127_0.8500585080704399","host":"s3://npm-registry-packages"}},"1.0.5":{"name":"@berish/linq","version":"1.0.5","keywords":["linq","berish","array","collection","helper","csharp","dotnet","tsql","native","js","ts","typescript","standart","Berishev","Ravil","Fartix","quadraticteam","jest","package"],"author":{"name":"Berishev Ravil","email":"quadraticteam@gmail.com"},"license":"MIT","_id":"@berish/linq@1.0.5","maintainers":[{"name":"quadraticstudio","email":"quadraticteam@gmail.com"},{"name":"raakhme","email":"akhmetshin@fartix.com"}],"dist":{"shasum":"435a2cf97080fe5c166bc51269bf22642f29d8a7","tarball":"https://registry.npmjs.org/@berish/linq/-/linq-1.0.5.tgz","fileCount":7,"integrity":"sha512-uvzva+8kisGy9ZK0vCnE4v/OqNvVgbL2czrU0qb7X94itZQH747ygNaJh915bMobIc1bZUSW/kZ2BMCOiFI6cg==","signatures":[{"sig":"MEUCIQCZDHAiOou47jYVpgaISg7mSu4d9zVWWQw65A02RaZmMgIgVymjcz3exI4I0evzHf1pobBuvaeDVAv6P57t8Dp9/vw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42438,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJerzviCRA9TVsSAnZWagAAvH0QAIkznuhgwjBSbpq8RIYA\nndYaQZ+rlu0XK8RX1uq8VHyR/z8Fvf3/JnjEa21t8pMfOGXXxfywwZ+vAeQN\nyyWlIcaNM+fPU+239Zxr62pTTm0Y0v/F7sx3NdMQ1pQpiYndRa6T/P/xqDmh\np5h1bKyqMxTtuEEIkONuuC3TIkfEzqpakzcdqKV7peXacMZv/kCAJbOUaNvf\nN0mTgLlSVZ/QZ9UigwUHph1lq5b4bmJszc33wG0FYB8vJ4Acb+lpbJ1Nh+PU\n4Aq4dew2fnlxjHYRFb7Ru+Q2w5HxGe8h8bY3keg0+7bgwMhYphwcgEtYZat6\n+7jCD2My+/DO04nPN0sAdpQunz3guob29Y22buCRyPniwZ1lApn3jwt+/alN\neQGCcVvr74ET7wBrLYe2SxmpU2HcWbva2cctU9dbqSuZUGk8avYgVhkSAp9b\nz3uybreTDT2f6TISAbs5p/ICSDvh08NhQRxbECVfSkmIT73iVvGG0e+gjk6o\nbK62wGn2lTzemo5g1/K2BXfXpu544ILQUBa0Sfavs6ayRnrFigrlP71bc9Pg\n6YJUac7kvhXc59omzHYNdJkHnKWZNoIruxGjf2DVCkSA8yQ57AonBn2FXMvk\ni/9qxndAd1a/q7xZbR+E8pLNrK1v3fDrSwbu8R2Np90/20o+6+uL5P3Z8tfH\nBtHu\r\n=ztNT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","private":false,"scripts":{"lint":"tslint -p tsconfig.json","test":"jest --config jestconfig.json","build":"tsc -p .","format":"prettier --write \"src/**/*.ts\" \"src/**/*.js\"","prepare":"npm run build","version":"npm run format && git add -A src","test:dev":"jest --config jestconfig.json --watch --verbose=false","preversion":"npm run lint","postversion":"git push && git push --tags","prepublishOnly":"npm test && npm run lint"},"typings":"build/index.d.ts","_npmUser":{"name":"quadraticstudio","email":"quadraticteam@gmail.com"},"repository":{"url":"git@gitlab.com:berish/packages/berish-linq.git","type":"git"},"description":"LINQ - very usefull helper for working with arrays and collections","directories":{},"dependencies":{"berish-collection":"^2.0.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^24.8.0","faker":"^4.1.0","tslint":"^5.18.0","ts-jest":"^24.0.2","prettier":"^1.18.2","typescript":"^3.5.2","@types/jest":"^24.0.15","@types/faker":"^4.1.5","tslint-config-prettier":"^1.18.0"},"peerDependencies":{"berish-collection":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/linq_1.0.5_1588542433994_0.6028361022538804","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@berish/linq","version":"1.1.0","keywords":["linq","berish","array","collection","helper","csharp","dotnet","tsql","native","js","ts","typescript","standart","Berishev","Ravil","Fartix","quadraticteam","jest","package"],"author":{"name":"Berishev Ravil","email":"quadraticteam@gmail.com"},"license":"MIT","_id":"@berish/linq@1.1.0","maintainers":[{"name":"quadraticstudio","email":"quadraticteam@gmail.com"},{"name":"raakhme","email":"akhmetshin@fartix.com"}],"dist":{"shasum":"da62d357b65bbd0f3c0bd2aa930d21b6bb05568a","tarball":"https://registry.npmjs.org/@berish/linq/-/linq-1.1.0.tgz","fileCount":7,"integrity":"sha512-KKwyulTigMpPudw/wptGx9oJvaH9yYB7ulxm6GMytAJUqvcYufrBcOF5jpe1Gqw4o1EYLKcN2/1NR+jxhtBOmQ==","signatures":[{"sig":"MEUCIH3Y9SMPpv6GbN/DTfJMJEx2slOVqzAELkXQ4XuSzGr6AiEA7Co/Z3MeKi2WptQUmSRprsGMzwwkxwu6hUARbjzOono=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":43315,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezqiyCRA9TVsSAnZWagAAD2QP/i2XgHL2fGt4IAgZqnI/\nPiREHJGqODEJbL19a07A0JDB8M/+i5J6nnwPn/usQrEju08Aet22yjRcpcBw\n+62EAUU/EsQESqrkjemIIcjk37Qwu6vHRUR7MuAlk0Ot7e4nCSdtdDop6Alb\nzJfP5asO8uBkSLQkuFGSUKDVBEhQLSviWl+sKw9ZYmfCS4FjTTHs1LDtosfP\nUFfVV/tPsI38MJJ6bgN/Ox+SP66D7KFvGhNmHD6DpvQ2cRjpLF5rLjAD6aBB\nAZyi7OiYBFYtEjaGqKNhaZr2iOJTnS9m/KtyecV/8l7NfSNekI91o74K3/oJ\nnzUHewvueOshG8o5jlbDeCJ0WcIRJnjeq6GK2HjZsK9HheSMKM5fVA5YKC+p\nQ5jSfMsX6lNJYh3d2weuTT2JtQL+Ui5laT5BT/A6J2UE9G28kSCHaDbFjGFF\nnMDHxrav4PxUbR687kjfXqY+RPTKgnIzTwwAOuWpFIZ7SyhI3PChekB0qBcP\nLR9hec6vzN8fzOSLiALuCCZePbZ5DRk1UmV9tqXpC9PXGgUusEgZJJ7PxMwI\nzzCvRb12zxWKhsjNJKGNjIxDXRAMdKmq5+NRY8Rk63ZQh6QOgPWcbyMVBuGy\nav8/WTPrHzD6oL0vyhVLfPoLlfJRgCbCqeMzRZpM4x++3fgfGd3qzX/GvUu2\nO5gb\r\n=RrMA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","private":false,"scripts":{"lint":"tslint -p tsconfig.json","test":"jest --config jestconfig.json","build":"tsc -p .","format":"prettier --write \"src/**/*.ts\" \"src/**/*.js\"","prepare":"npm run build","version":"npm run format && git add -A src","test:dev":"jest --config jestconfig.json --watch --verbose=false","preversion":"npm run lint","postversion":"git push && git push --tags","prepublishOnly":"npm test && npm run lint"},"typings":"build/index.d.ts","_npmUser":{"name":"quadraticstudio","email":"quadraticteam@gmail.com"},"repository":{"url":"git@gitlab.com:berish/packages/berish-linq.git","type":"git"},"description":"LINQ - very usefull helper for working with arrays and collections","directories":{},"_hasShrinkwrap":false,"devDependencies":{"jest":"^24.8.0","faker":"^4.1.0","tslint":"^5.18.0","ts-jest":"^24.0.2","prettier":"^1.18.2","typescript":"^3.5.2","@types/jest":"^24.0.15","@types/faker":"^4.1.5","tslint-config-prettier":"^1.18.0"},"_npmOperationalInternal":{"tmp":"tmp/linq_1.1.0_1590601905992_0.7233882700514722","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"@berish/linq","version":"1.2.0","keywords":["linq","berish","array","collection","helper","csharp","dotnet","tsql","native","js","ts","typescript","standart","Berishev","Ravil","Fartix","quadraticteam","jest","package"],"author":{"name":"Berishev Ravil","email":"quadraticteam@gmail.com"},"license":"MIT","_id":"@berish/linq@1.2.0","maintainers":[{"name":"quadraticstudio","email":"quadraticteam@gmail.com"}],"dist":{"shasum":"b6dbddf2f19b886437214a7831faf61807e5ef77","tarball":"https://registry.npmjs.org/@berish/linq/-/linq-1.2.0.tgz","fileCount":7,"integrity":"sha512-WV7oLC3xx2mq2/bT0DPI5FHrZ+lZtdH2bEz0MsJzGkSay7jyAyuudO0bNHwQUnxif+W+BVmfyptxkQT5ZuelAA==","signatures":[{"sig":"MEYCIQCO/bBBZ9XG6g3fmwiRMeu7jpEq1DW7TXfhe3bqU70nHQIhAKXthKphTkCqF+uHgys084vfwWeq9kIdN5bJmm2n7vIJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":43784,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkAxaCRA9TVsSAnZWagAAob8P/Ao9vqIOwZwItHg7K8q1\n1WyCOu+OXP+Hx0LXVp8KOjoPGHrzMjXEx8GKR7+wJvd9NLV1kn7nTKsgk35v\nmeDbWPMNomWfWpCIQ9yQQ0eqXixK0KcVgqyGonHbdrSm48JMmOlXF9aMm9V0\nUjabuV3+qFYsIGZzd618yE4X5cHswQKkP2DGG+9lOAp/WtNo6NZOyv4CuADT\nPi/mJsDeFEYCMK4PikFHQ3fLC1aYUnkIAsKLjEB8Ipv+Xz+/eUpHNlZahBl3\n7woDzhgGyIGKyJF8ETuUl83nWrA6Y2MtgyuGEZQnOB7nc+LpTeZAPjFb2YwR\nQa+Iand/umXs1t7pQrg61Obn6BlErsb1r3gGFXI1Bnm9qjU+ZNb+OQd62obt\nD/YhHv3YZ7pbxotbGnX82xL3iGCTwBY1u79sN0BJK+8YeqGkXQkpbKSfj0fK\nVYMO6AsVxQwvh1BNiUz4NRne5BAvb6/xAN3bL/3C/M69f3atzVFUR1Smw7v2\nZLo3rLeyvRvE7jdhNKsf1ph8peky7nLKdAyJ1JbYCJX5ygFeAerndP/zdwkl\nzy2blHgyre7uovgmWZJckC7MuejfIGLKmYHJcsmMS5K/Qq3j4b3c6AhKLO9a\nQaWciC5o+dO7es8IL3x3eFBxS3F1p9KfKQVk0Wzh0vtBKAfpN2S+supqF2RW\nwiyE\r\n=N260\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/index.js","private":false,"scripts":{"lint":"tslint -p tsconfig.json","test":"jest --config jestconfig.json","build":"tsc -p .","format":"prettier --write \"src/**/*.ts\" \"src/**/*.js\"","prepare":"npm run build","version":"npm run format && git add -A src","test:dev":"jest --config jestconfig.json --watch --verbose=false","preversion":"npm run lint","postversion":"git push && git push --tags","prepublishOnly":"npm test && npm run lint"},"typings":"build/index.d.ts","_npmUser":{"name":"quadraticstudio","email":"quadraticteam@gmail.com"},"repository":{"url":"git@gitlab.com:berish/packages/berish-linq.git","type":"git"},"description":"LINQ - very usefull helper for working with arrays and collections","directories":{},"dependencies":{"bignumber.js":"^9.0.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^24.8.0","faker":"^4.1.0","tslint":"^5.18.0","ts-jest":"^24.0.2","prettier":"^1.18.2","typescript":"^3.5.2","@types/jest":"^24.0.15","@types/faker":"^4.1.5","tslint-config-prettier":"^1.18.0"},"_npmOperationalInternal":{"tmp":"tmp/linq_1.2.0_1620053081907_0.6007535269191975","host":"s3://npm-registry-packages"}},"1.3.0":{"name":"@berish/linq","version":"1.3.0","description":"LINQ - very usefull helper for working with arrays and collections","main":"build/index.js","typings":"build/index.d.ts","repository":{"type":"git","url":"git@gitlab.com:berish/packages/berish-linq.git"},"author":{"name":"Berishev Ravil","email":"quadraticteam@gmail.com"},"license":"MIT","private":false,"keywords":["linq","berish","array","collection","helper","csharp","dotnet","tsql","native","js","ts","typescript","standart","Berishev","Ravil","Fartix","quadraticteam","jest","package"],"scripts":{"test":"jest --config jestconfig.json","test:dev":"jest --config jestconfig.json --watch --verbose=false","build":"tsc -p .","format":"prettier --write \"src/**/*.ts\" \"src/**/*.js\"","prepare":"npm run build","prepublishOnly2":"npm test","version":"npm run format && git add -A src","postversion":"git push && git push --tags"},"devDependencies":{"@faker-js/faker":"^9.5.0","@types/jest":"^29.5.14","jest":"^29.7.0","prettier":"^3.5.2","ts-jest":"^29.2.6","typescript":"^5.7.3"},"dependencies":{"decimal.js":"^10.5.0"},"_id":"@berish/linq@1.3.0","dist":{"shasum":"f48ea2ba5840c0abda6a6b89e9e80e894e042379","integrity":"sha512-PbgAOJhgKIR46el+in74mc7vPV6Fst/lx+dgzPd6SXmVN1dTtLZZ0qNVvcvOVlU/+OjBrIe3VjkVqm9snII6dA==","tarball":"https://registry.npmjs.org/@berish/linq/-/linq-1.3.0.tgz","fileCount":7,"unpackedSize":43582,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCL5qvJDe+8eI5FDCeL5mY5DwdQe6EycFjddZ9GzKgSPQIhAIhwciRpFyA63RJ7pLEU4CJ+xvZaaQiXN5TiLT6KYdNM"}]},"_npmUser":{"name":"quadraticstudio","email":"quadraticteam@gmail.com"},"directories":{},"maintainers":[{"name":"quadraticstudio","email":"quadraticteam@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/linq_1.3.0_1740304588606_0.1044254575489092"},"_hasShrinkwrap":false}},"time":{"created":"2019-06-30T23:40:16.206Z","modified":"2025-02-23T09:56:28.932Z","1.0.0":"2019-06-30T23:40:16.588Z","1.0.1":"2019-07-19T21:38:26.356Z","1.0.2":"2019-07-31T22:17:06.437Z","1.0.3":"2019-07-31T22:19:37.771Z","1.0.4":"2019-08-11T17:02:38.267Z","1.0.5":"2020-05-03T21:47:14.099Z","1.1.0":"2020-05-27T17:51:46.111Z","1.2.0":"2021-05-03T14:44:42.236Z","1.3.0":"2025-02-23T09:56:28.771Z"},"author":{"name":"Berishev Ravil","email":"quadraticteam@gmail.com"},"license":"MIT","keywords":["linq","berish","array","collection","helper","csharp","dotnet","tsql","native","js","ts","typescript","standart","Berishev","Ravil","Fartix","quadraticteam","jest","package"],"repository":{"type":"git","url":"git@gitlab.com:berish/packages/berish-linq.git"},"description":"LINQ - very usefull helper for working with arrays and collections","maintainers":[{"name":"quadraticstudio","email":"quadraticteam@gmail.com"}],"readme":"# @berish/linq\n\nLibrary for convenient work with arrays. Allows you to make convenient sampling, and work with arrays as usual. It is a direct inheritor from the array, which allows you to work with linq as with a regular array.\n\n## Installation\n\n```\n$ npm install @berish/linq --save\n```\n\nor\n\n```\n$ yarn add @berish/linq\n```\n\n**Supports typescript**\n\n## Interfaces\n\n```typescript\ntype CallbackType<T, Response> = (item: T, index: number, linq: LINQ<T>) => Response;\ntype CallbackWithAccumType<T, Accum, Response> = (item: T, index: number, linq: LINQ<T>, accum: Accum) => Response;\ntype CallbackOnlyItemType<T, Response> = (item: T) => Response;\n```\n\n## Initialize (from method)\n\nSyntax: `public static from<T>(items?: T[]): LINQ<T>`\n\nExample:\n\n```typesciprt\nimport LINQ from '@berish/linq';\n\nconst linq = LINQ.from(array);\n```\n\n### Test dataset for examples in this article:\n\n```typescript\nimport LINQ from '@berish/linq';\n\n/* This packages need only for examples in this article */\nimport * as collection from 'berish-collection';\nimport * as faker from 'faker';\n\nclass TestAType {}\nclass TestBType {}\n/* This packages need only for examples in this article */\n\nfunction generateCard(index: number = 0) {\n  return {\n    age: faker.random.number({ min: 0, max: 30 }),\n    email: faker.internet.email(),\n    id: faker.random.uuid(),\n    rating: faker.random.number({ min: 0, max: 100 }),\n    types: index % 2 === 0 ? new TestAType() : new TestBType(),\n  };\n}\n\nfunction getLinq(count: number = 10) {\n  const data = Array(count)\n    .fill(null)\n    .map((m, i) => generateCard(i));\n  return LINQ.from(data);\n}\n```\n\n## `clone`\n\n> Makes no deep clone for current LINQ array.\n\nSyntax: `public clone(): LINQ<T>`\n\nExample:\n\n```typescript\nconst linq1 = LINQ.from([1, 2, 3]);\nconst cloned = linq1.clone();\n\nexpect(cloned).toEqual(linq1);\nexpect(cloned === linq1).toBeFalsy();\n```\n\n## `equals`\n\n> Check equals this LINQ and another array by link-pointer\n\nSyntax: `public equals(linq: any[]): boolean`\n\nExample:\n\n```typescript\nconst linq1 = LINQ.from([1, 2, 3]);\nconst cloned = linq1.clone();\n\nexpect(linq1.equals(cloned)).toBeFalsy();\nexpect(linq1.equals(linq1)).toBeTruthy();\n```\n\n## `equalsValues`\n\n> Check equals this LINQ and another array by values. You can map a sequence of values based on a predicate.\n\nSyntax: `public equalsValues<K>(linq: any[], selectFunc?: CallbackType<T, K>): boolean`\n\nExample:\n\n```typescript\nconst linq1 = LINQ.from([1, 2, 3]);\nconst cloned = linq1.clone();\n\nexpect(linq1.equalsValues(cloned)).toBeTruthy();\nexpect(linq1.equalsValues(linq1)).toBeTruthy();\n\nconst linq2 = LINQ.from([{ id: 1 }, { id: 2 }, { id: 3 }]);\nconst linq3 = [{ id: 1 }, { id: 2 }, { id: 3 }];\n\nexpect(linq2.equalsValues(linq3)).toBeFalsy();\nexpect(linq2.equalsValues(linq3, m => m.id)).toBeTruthy();\n```\n\n## `where`\n\n> Filters a sequence of values based on a predicate.\n\nSyntax: `public where(whereFunc?: CallbackType<T, boolean>): LINQ<T>`\n\nExample:\n\n```typescript\nconst linq = getLinq();\nexpect(linq.where(m => m.age % 2 === 0)).toEqual(linq.filter(m => m.age % 2 === 0));\n```\n\n## `whereWithAccum`\n\n> Allows you to narrow the LINQ on a specific condition on the elements of this LINQ (**selectFunc** and **whereSelectedFunc**). It is also possible to accumulate any value (**accumFunc**) for later use in the condition (**whereSelectedFunc**)\n\nSyntax: `public whereWithAccum<K, Accum = LINQ<K>>( selectFunc: CallbackType<T, K>, accumFunc: (selected: LINQ<K>, linq: LINQ<T>) => Accum, whereSelectedFunc: CallbackWithAccumType<K, Accum, boolean>, ): LINQ<T>`\n\nExample:\n\n```typescript\nconst linq = getLinq();\n\nconst where = linq.whereWithAccum(m => m.age, selected => Math.max(...selected), (m, i, l, max) => m >= max);\nconst max = Math.max(...linq.map(m => m.age));\nconst maxWhere = linq.where(m => m.age === max);\n\nexpect(where).toEqual(maxWhere);\n```\n\n## `select`\n\n> Calls a defined **selectFunc** on each element of an LINQ, and returns an LINQ that contains the results. _It's analog for array **map** method_\n\nSyntax: `public select<K>(selectFunc: CallbackType<T, K>): LINQ<K>`\n\nExample:\n\n```typescript\nconst linq = getLinq();\n\nconst selected = linq.select(m => m.email);\nconst mapped = linq.map(m => m.email);\n\nexpect(selected).toEqual(mapped);\n```\n\n## `selectMany`\n\n> Projects each element of a sequence to an LINQ<T> and flattens the resulting sequences into one sequence.\n\nSyntax: `public selectMany<K>(selectFunc?: CallbackType<T, K[]>): LINQ<K>`\n\nExample:\n\n```typescript\nconst linq = LINQ.from([getLinq(), getLinq(), getLinq()]);\n\nconst selected1 = linq.selectMany();\nexpect(selected1).toEqual([...linq[0], ...linq[1], ...linq[2]]);\n\nconst selected2 = linq.selectMany(m => m.select(m => m.id));\nexpect(selected2).toEqual([...linq[0].select(m => m.id), ...linq[1].select(m => m.id), ...linq[2].select(m => m.id)]);\n```\n\n## `take`\n\n> Returns a specified number of contiguous elements from the start of a sequence.\n\nSyntax: `public take(count: number): LINQ<T>`\n\nExample:\n\n```typescript\nconst linq = getLinq(50);\n\nconst take = linq.take(20);\nexpect(take.length).toBe(20);\nexpect(take).toEqual(linq.slice(0, 20));\n```\n\n## `skip`\n\n> Bypasses a specified number of elements in a sequence and then returns the remaining elements.\n\nSyntax: `public skip(count: number): LINQ<T>`\n\nExample:\n\n```typescript\nconst linq = getLinq(100);\n\nconst skip = linq.skip(20);\nexpect(skip.length).toBe(80);\nexpect(skip).toEqual(linq.slice(20));\n```\n\n## `count`\n\n> Returns the number of elements in a sequence.\n\nSyntax: `public count(whereFunc?: CallbackType<T, boolean>): number`\n\nExample:\n\n```typescript\nconst linq = getLinq(100);\n\nconst count1 = linq.count();\nexpect(count1).toBe(100);\n\nconst count2 = linq.count(m => m.age % 2 === 0);\nexpect(count2).toBe(linq.where(m => m.age % 2 === 0).count());\n```\n\n## `indexWhere`\n\n> Returns the indexes of elements in a sequence by **whereFunc**\n\nSyntax: `public indexWhere(whereFunc?: CallbackType<T, boolean>): LINQ<number>`\n\nExample:\n\n```typescript\nconst linq = getLinq();\n\nconst indexWhere = linq.indexWhere(m => m.age % 2 === 0);\nexpect(indexWhere).toEqual(linq.select((m, i) => (m.age % 2 === 0 ? i : null)).notNull());\n```\n\n## `elementsAtIndex`\n\n> Returns elements in LINQ by indexes of this elements\n\nSyntax: `public elementsAtIndex(indexes: number[]): LINQ<T>`\n\nExample:\n\n```typescript\nconst linq = getLinq();\n\nconst elementsAtIndex = linq.elementsAtIndex([0, 5, 8, 12]);\nexpect(elementsAtIndex.length).toBe(4);\nexpect(elementsAtIndex).toEqual([linq[0], linq[5], linq[8], linq[12]]);\n```\n\n## `notNull`\n\n> Return only not null elements. Can be using with the **selectFunc** to filtered elements from a sequence by mapped values.\n\nSyntax: `public notNull<K>(selectFunc?: CallbackType<T, K>): LINQ<T>`\n\nExample:\n\n```typescript\nconst linq = getLinq(100);\n\nconst notNull = linq.select((m, i) => (i % 2 === 0 ? m : null)).notNull();\nexpect(notNull.length).toBe(50);\nexpect(notNull).toEqual(linq.where((m, i) => i % 2 === 0));\n```\n\n## `notEmpty`\n\n> Return only not empty elements (!!value). Can be using with the **selectFunc** to filtered elements from a sequence by mapped values.\n\nSyntax: `public notEmpty<K>(selectFunc?: CallbackType<T, K>): LINQ<T>`\n\nExample:\n\n```typescript\nconst linq = getLinq(100);\n\nconst notEmpty = linq.select((m, i) => (i % 2 === 0 ? m : '')).notEmpty();\nexpect(notEmpty.length).toBe(50);\nexpect(notEmpty).toEqual(linq.where((m, i) => i % 2 === 0));\n```\n\n## `first`\n\n> Returns the first element in a sequence that satisfies a specified condition.\n\nSyntax: `public first(whereFunc?: CallbackType<T, boolean>): T`\n\nExample:\n\n```typescript\nconst linq = getLinq();\n\nconst first1 = linq.first();\nexpect(first1).toBe(linq[0]);\n\nconst first2 = linq.first(m => m.age % 2 === 0);\nexpect(first2).toBe(linq.where(m => m.age % 2 === 0).first());\n```\n\n## `last`\n\n> Returns the last element in a sequence that satisfies a specified condition.\n\nSyntax: `public last(whereFunc?: CallbackType<T, boolean>): T`\n\nExample:\n\n```typescript\nconst linq = getLinq();\n\nconst last1 = linq.last();\nexpect(last1).toBe(linq[linq.length - 1]);\n\nconst last2 = linq.last(m => m.age % 2 === 0);\nexpect(last2).toBe(linq.where(m => m.age % 2 === 0).last());\n```\n\n## `distinct`\n\n> Returns distinct elements from a sequence. Can be using with the **selectFunc** to filtered elements from a sequence by mapped values.\n\nSyntax: `public distinct<K>(selectFunc?: CallbackType<T, K>): LINQ<T>`\n\nExample:\n\n```typescript\nconst linq = getLinq(100);\n\nconst distinct1 = linq.select(m => m.age).distinct();\nexpect(distinct1.length).toBe(new Set(linq.select(m => m.age)).size);\n\nconst distinct2 = linq.distinct(m => m.age);\nconst addedAges: number[] = [];\nconst testDistinct2 = linq.where(m => {\n  if (addedAges.indexOf(m.age) === -1) {\n    addedAges.push(m.age);\n    return true;\n  }\n  return false;\n});\nexpect(distinct2).toEqual(testDistinct2);\n```\n\n## `max`\n\n> Returns the elements with maximum value in a sequence of values.\n\nSyntax: `public max(numberFunc?: CallbackType<T, number>): LINQ<T>`\n\nExample:\n\n```typescript\nconst linq = getLinq();\n\nconst max = linq.max(m => m.age);\nconst maxValue = Math.max(...linq.select(m => m.age));\nexpect(max).toEqual(linq.where(m => m.age === maxValue));\n```\n\n## `maxValue`\n\n> Returns the maximum value in a sequence of values.\n\nSyntax: `public maxValue(numberFunc?: CallbackType<T, number>): number`\nExample:\n\n```typescript\nconst linq = getLinq();\n\nconst maxValue = linq.maxValue(m => m.age);\nexpect(maxValue).toBe(Math.max(...linq.select(m => m.age)));\n```\n\n## `min`\n\n> Returns the elements with minimum value in a sequence of values.\n\nSyntax: `public min(numberFunc?: CallbackType<T, number>): LINQ<T>`\n\nExample:\n\n```typescript\nconst linq = getLinq();\n\nconst min = linq.min(m => m.age);\nconst minValue = Math.min(...linq.select(m => m.age));\nexpect(min).toEqual(linq.where(m => m.age === minValue));\n```\n\n## `minValue`\n\n> Returns the minimum value in a sequence of values.\n\nSyntax: `public minValue(numberFunc?: CallbackType<T, number>): number`\n\nExample:\n\n```typescript\nconst linq = getLinq();\n\nconst minValue = linq.minValue(m => m.age);\nexpect(minValue).toBe(Math.min(...linq.select(m => m.age)));\n```\n\n## `ofType`\n\n> Filters the elements of a LINQ based on a specified types. Can be using with the **selectFunc** to filtered elements from a sequence by mapped values.\n\nSyntax: `public ofType<Type extends new (...args) => any, K>( type: OfTypeStringValues | OfTypeStringValues[] | Type | Type[] | (OfTypeStringValues | Type)[], selectFunc?: CallbackType<T, K>, ): LINQ<T>`\n\n`type OfTypeStringValues = 'string' | 'number' | 'bigint' | 'boolean' | 'symbol' | 'undefined' | 'object' | 'function';`\n\nExample:\n\n```typescript\nconst linq = getLinq();\n\nconst ofType1 = linq.ofType(Object);\nexpect(ofType1).toEqual(linq);\n\nconst ofType2 = linq.ofType(TestAType, m => m.types);\nexpect(ofType2).toEqual(linq.where(m => m.types instanceof TestAType));\n\nconst ofType3 = linq.ofType([TestAType, TestBType], m => m.types);\nexpect(ofType3).toEqual(linq);\n\nconst ofType4 = linq.ofType('number', m => m.age);\nexpect(ofType4.count()).toBe(linq.count());\n\nconst ofType5 = linq.ofType('string', m => m.age);\nexpect(ofType5.count()).toBe(0);\n```\n\n## `orderByAscending`\n\n> Sorts the elements of a sequence in ascending order according to a value. Can be using with the **sortSelectFunc** to order elements from a sequence by mapped values.\n\nSyntax: `public orderByAscending<K>(sortSelectFunc?: CallbackOnlyItemType<T, K>): LINQ<T>`\n\nExample:\n\n```typescript\nconst linq1 = LINQ.from([4, 2, 1, 5, 8, -1]);\nconst orderByAscending1 = linq1.orderByAscending();\nexpect(orderByAscending1).toEqual([-1, 1, 2, 4, 5, 8]);\n\nconst linq2 = getLinq();\n\nconst orderByAscending2 = linq2.orderByAscending(m => m.age);\nconst bySort2 = linq2.sort((a, b) => {\n  if (a.age > b.age) return 1;\n  if (a.age < b.age) return -1;\n  return 0;\n});\nexpect(orderByAscending2).toEqual(bySort2);\n```\n\n## `orderByDescending`\n\n> Sorts the elements of a sequence in descending order according to a value. Can be using with the **sortSelectFunc** to order elements from a sequence by mapped values.\n\nSyntax: `public orderByDescending<K>(sortSelectFunc?: CallbackOnlyItemType<T, K>): LINQ<T>`\n\nExample:\n\n```typescript\nconst linq1 = LINQ.from([4, 2, 1, 5, 8, -1]);\nconst orderByDescending1 = linq1.orderByDescending();\nexpect(orderByDescending1).toEqual([8, 5, 4, 2, 1, -1]);\n\nconst linq2 = getLinq();\n\nconst orderByDescending2 = linq2.orderByDescending(m => m.age);\nconst bySort2 = linq2.sort((a, b) => {\n  if (a.age < b.age) return 1;\n  if (a.age > b.age) return -1;\n  return 0;\n});\nexpect(orderByDescending2).toEqual(bySort2);\n```\n\n## `sum`\n\n> Computes the sum of a sequence of numeric values. Can be using with the **selectFunc** to sum elements from a sequence by mapped values.\n\nSyntax: `public sum(selectFunc?: CallbackType<T, number>): number`\n\nExample:\n\n```typescript\nconst linq1 = LINQ.from([4, 2, 1, 5, 8, -1]);\nconst sum1 = linq1.sum();\nexpect(sum1).toBe(linq1.reduce((a, b) => a + b, 0));\n\nconst linq2 = getLinq();\nconst sum2 = linq2.sum(m => m.age);\nexpect(sum2).toBe(linq2.select(m => m.age).reduce((a, b) => a + b, 0));\n```\n\n## `except`\n\n> Produces the set difference of two sequences. Can be using with the **selectFunc** to except elements from a sequence by mapped values.\n\nSyntax: `public except<K>(items: T | T[] | LINQ<T>, selectFunc?: CallbackType<T, K>): LINQ<T>`\n\nExample:\n\n```typescript\nconst linq1 = LINQ.from([4, 2, 1, 5, 8, -1]);\nconst linq2 = LINQ.from([4, -100, 7, 5, 8, -1]);\nconst expect1 = linq1.except(linq2);\nexpect(expect1).toEqual([2, 1]);\n\nconst linq3 = getLinq(100);\nconst linq4 = getLinq(100);\nconst expect2 = linq3.except(linq4);\nexpect(expect2).toEqual(linq3);\n\nconst expect3 = linq3.except(linq4, m => m.age);\nexpect(expect3).toEqual(linq3.where(m => !linq4.contains(m, k => k.age)));\n```\n\n## `groupBy`\n\n> Groups the elements of a sequence according to a specified key selector function and creates a result value from each group and its key. The elements of each group are projected by using a specified function **selectFunc**.\n\nSyntax: `public groupBy<K>(selectFunc: CallbackType<T, K>): collection.Dictionary<K, LINQ<T>>`\n\nExample:\n\n```typescript\nconst linq = getLinq();\nconst dict1 = linq.groupBy(m => m.age);\n\nconst ages = linq.select(m => m.age).distinct();\nconst dict2 = collection.Dictionary.fromArray(\n  ages.select(m => new collection.KeyValuePair(m, linq.where(k => k.age === m))),\n);\n\nexpect(dict1).toEqual(dict2);\n```\n\n## `contains`\n\n> Determines whether a sequence contains a specified element. Can be using with the **selectFunc** to check for contain elements from a sequence by mapped values.\n\nSyntax: `public contains<K>(value: T, selectFunc?: CallbackOnlyItemType<T, K>): boolean`\n\nExample:\n\n```typescript\nconst linq1 = LINQ.from(['hey', 'bro']);\nexpect(linq1.contains('hey')).toBeTruthy();\nexpect(linq1.contains('hello')).toBeFalsy();\n\nconst linq2 = getLinq(100);\nexpect(linq2.contains(linq2[0])).toBeTruthy();\n\nlet card = generateCard();\nwhile (!linq2.first(m => m.age === card.age)) {\n  card = generateCard();\n}\nexpect(linq2.contains(card)).toBeFalsy();\nexpect(linq2.contains(card, m => m.age)).toBeTruthy();\n```\n\n## `containsAll`\n\n> Determines whether a sequence contains all of the specified elements at once. Can be using with the **selectFunc** to check for contain elements from a sequence by mapped values.\n\nSyntax: `public containsAll<K>(value: T[] | LINQ<T>, selectFunc?: CallbackType<T, K>): boolean`\n\nExample:\n\n```typescript\nconst linq1 = LINQ.from(['hey', 'bro']);\nexpect(linq1.containsAll(['hey', 'bro'])).toBeTruthy();\nexpect(linq1.containsAll(['hey', 'hello'])).toBeFalsy();\n\nconst linq2 = getLinq(100);\nexpect(linq2.containsAll([linq2.first(), linq2.last()])).toBeTruthy();\n\nlet card1 = generateCard();\nwhile (!linq2.first(m => m.age === card1.age)) {\n  card1 = generateCard();\n}\n\nlet card2 = generateCard();\nwhile (!linq2.first(m => m.age === card2.age)) {\n  card2 = generateCard();\n}\nexpect(linq2.containsAll([card1, card2])).toBeFalsy();\nexpect(linq2.containsAll([card1, card2], m => m.age)).toBeTruthy();\n```\n\n## `average`\n\n> Computes the average of a sequence of numeric values. Can be using with the **selectFunc** to average elements from a sequence by mapped values. Can be using with the **whereFunc** to filter elements from a sequence by specified condition.\n\nSyntax: `public average(selectFunc?: CallbackType<T, number>, whereFunc?: CallbackType<T, boolean>): number`\n\nExample:\n\n```typescript\nconst linq1 = LINQ.from([1, 2, 5, 10]);\nexpect(linq1.average()).toBe(4.5);\nexpect(linq1.average(null, m => m % 2 === 0)).toBe(6);\n\nconst linq2 = getLinq();\nexpect(linq2.average(m => m.age)).toBe(linq2.select(m => m.age).average());\nexpect(linq2.average(m => m.rating, m => m.age > 18)).toBe(\n  linq2\n    .where(m => m.age > 18)\n    .select(m => m.rating)\n    .average(),\n);\n```\n\n## `intersect`\n\n> Produces the set intersection of two sequences. Can be using with the **selectFunc** to intersect elements from a sequence by mapped values.\n\nSyntax: `public intersect<K>(items: T | T[] | LINQ<T>, selectFunc?: CallbackType<T, K>): LINQ<T>`\n\nExample:\n\n```typescript\nconst linq1 = LINQ.from([4, 2, 1, 5, 8, -1]);\nconst linq2 = LINQ.from([4, -100, 7, 5, 8, -1]);\nconst intersect1 = linq1.intersect(linq2);\nexpect(intersect1).toEqual([4, 5, 8, -1]);\n\nconst linq3 = getLinq(100);\nconst linq4 = getLinq(100);\nconst intersect2 = linq3.intersect(linq4);\nexpect(intersect2).toEqual([]);\n\nconst intersect3 = linq3.intersect(linq4, m => m.age);\nexpect(intersect3).toEqual(linq3.where(m => linq4.contains(m, k => k.age)));\n```\n\n## `reverse`\n\n> Reverses the elements in an Array.\n\nSyntax: `public reverse(): LINQ<T>`\n\nExample:\n\n```typescript\nconst linq = LINQ.from([1, 4, 2, 3, 3]);\nexpect(linq.reverse()).toEqual([3, 3, 2, 4, 1]);\n```\n\n## `concat`\n\n> Combines two or more arrays. Combines two or more arrays.\n\nSyntax: `public concat(...items: (T | ConcatArray<T> | LINQ<T>)[]): LINQ<T>`\n\nExample:\n\n```typescript\nconst linq1 = LINQ.from([1, 4, 3]);\nconst linq2 = LINQ.from([2, 3, 3]);\nexpect(linq1.concat(linq2)).toEqual([1, 4, 3, 2, 3, 3]);\n```\n\n## `slice`\n\n> Returns a section of an array.\n\nSyntax: `public slice(start?: number, end?: number): LINQ<T>`\n\nExample:\n\n```typescript\nconst linq = LINQ.from([1, 4, 2, 3, 3]);\nexpect(linq.slice(2, 4)).toEqual([2, 3]);\n```\n\n## `splice`\n\n> Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.\n\nSyntax: `public splice(start: number, deleteCount: number, ...items: T[]): LINQ<T>`\n\nExample:\n\n```typescript\nconst linq = getLinq();\nconst cloned = linq.clone();\ncloned.splice(0, 3);\nexpect(cloned).toEqual(linq.skip(3));\n```\n\n## `map`\n\n> Calls a defined callback function on each element of an array, and returns an array that contains the results.\n\nSyntax: `public map<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): LINQ<U>`\n\nExample:\n\n```typescript\nconst linq = LINQ.from([{ id: 1 }, { id: 2 }]);\nexpect(linq.map(m => m.id)).toEqual([1, 2]);\n```\n\n## `filter`\n\n> Returns the elements of an array that meet the condition specified in a callback function. Returns the elements of an array that meet the condition specified in a callback function.\n\nSyntax: `public filter(callbackfn: (value: T, index: number, array: T[]) => unknown, thisArg?: any): LINQ<T>`\n\nExample:\n\n```typescript\nconst linq = LINQ.from([{ id: 1 }, { id: 2 }]);\nexpect(linq.filter(m => m.id > 1)).toEqual([{ id: 2 }]);\n```\n\n<!--stackedit_data:\neyJoaXN0b3J5IjpbLTE4ODU1NjY3NjgsMTkzNTg3MjUzNl19\n-->\n","readmeFilename":"README.md"}