{"_id":"@arcaelas/collection","_rev":"33-adee5a0a56beaf3b19ac6961b89c5507","name":"@arcaelas/collection","dist-tags":{"latest":"2.5.3"},"versions":{"1.2.0":{"name":"@arcaelas/collection","version":"1.2.0","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"community@arcaelas.com"},"license":"GNU","_id":"@arcaelas/collection@1.2.0","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection#readme","bugs":{"url":"https://github.com/arcaelas/collection/issues"},"dist":{"shasum":"4bcc6d8d6fc13ebe191de7d9d8a949e6bd6cbfbd","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.2.0.tgz","fileCount":10,"integrity":"sha512-xPyCzgPTS3PozqlO+9wt4jC5aGqQ6Vq//TIHH/R8AxabZXYW62DU46ny8mBsb9r5Fk2oEO5IsAQRKMMeQAy5Ew==","signatures":[{"sig":"MEUCIA7JfSeUm5d+ex28JJsx4GlK2Sb7rB723HE8eEh9ktUeAiEAonyh1Am0qG5DqzPq5WTpd6Z9R6xG39xUN0lpkhUMdbQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":103835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQIoNACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoANhAAjU5DHryFNRiiieEV+bj2mdAyylfRbSI9ttTuJST9v7B3Io6R\r\n7uxHxKgJlIA5MEN2yaY7ZTosi9DvVTwNWe/RMNTH2NhdETJRqdvkmLx9PnZF\r\nyw/QjX1kNM/bvWKqHu6KVf13p2hHpvfBx1OPhn6gwardvFqWP8u6WqpAOD09\r\nvCkfqpoO5P3WwdDWgTAYxrVmUvdFmslrvTfgSFv3EflZnXMvxKtE6a8bkOWs\r\nvP5i/fFHGnCtqceIDEs5wIRQCML6/Vw177iQfOFBU16a0TDFbTTIfY46Ojve\r\nG1V3Z0d0Jh2wckiJDns9X8JDJCmH1B/H1t1I+pDprA13KGh4mgYC4ga4kZfQ\r\nsJ3pglZWd7eJ0cp+LgLsnzeiMx+9m1O8JQ0AhbaaEXRDBFSTPaOaZ5cRlyzy\r\n7H7zYCZ6lFB+fc7bsoXaQhTku3d1N9DWKw5c3JM0oX/x38N0rt8aQpybB8hU\r\nbKK8kXUKFZlkbNSC7rToYJm586Yunc1BsgTq9oQ7kMPAvjOEVF3R9uOcYbVK\r\nIt5FU93oMsigIcS6ZspEwjBdPvgbwl1RBFOE8LGGRiPvS1ySMLIwjiEY+qqF\r\nU8UoLxidpPBAeYAeThx195B95nSnLPLsh2XkLNvzU8/vVELpSY/7DeIhE6SV\r\nQibxPcfYeDSbv/YT341LmfdrO4FPx6fx/18=\r\n=h/G6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/index.js","types":"./lib/index.d.ts","gitHead":"bd0abf2ff66e61e30387ff1133d0175d8231add0","private":false,"scripts":{"test":"jest","start":"tsc --watch","commit":"npm publish --access=public","postpublish":"rm -rf lib","prepublishOnly":"jest && tsc && npm version minor"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+ssh://git@github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"9.6.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"18.16.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.24.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.178"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.2.0_1681951245691_0.4889970352417008","host":"s3://npm-registry-packages"}},"1.3.0":{"name":"@arcaelas/collection","version":"1.3.0","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"community@arcaelas.com"},"license":"GNU","_id":"@arcaelas/collection@1.3.0","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection#readme","bugs":{"url":"https://github.com/arcaelas/collection/issues"},"dist":{"shasum":"9883dfaaa92987a7254cadcc9967fe706ad74337","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.3.0.tgz","fileCount":10,"integrity":"sha512-RRe03FhkazcL69WEFEl4L2i7cIEZyeb3PGN3pKcC2XGJSbO1jGlABh9cUw3zpm+XlC2alKVNmYXP5gkOBP83bw==","signatures":[{"sig":"MEQCIAG5MvoCoQLcTEjRV41bmStkqj5SIgNnliti63p2mST3AiAoizI0iA6y12PBxsWhi0rTAaNTEpRtfx/AjwKY+njiXQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":110133,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQJZCACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq3Og/+I5Z2J7CKKZ6i/t6uadmoadMw3CVdruUNHWAG+PSxBsb1mFPM\r\nmSh2KylCA4OyKGf20Bf8HBYHZzNHpfrPMXpa8HhRgIpVdquAWc2s0KNbk3Yv\r\nvDiQx4fp9PHwFnOIrNSwOYOgqODZ5ZhjRazTFIUUOp92PzoLisMG7WM3f8SM\r\nh104gUYSMSjzwCoWFMcSbpqUVLu2D7gxJG3nsB9uIXX0ndOWWnNK66X7EvQB\r\n2qKf7I+uzk7sqLxEA0xEc8HOLlM9fDqfrK3pMqHLj21ob55+daF8B6ZWybAX\r\nDBhqwy8q25tkr8dzehmhwAqMs//LfJVOYr2E4zuvQmXiM5FUH6AEZI+eUjft\r\nCqwoN1N+pGFOyzZNLUBtD9Y3qLi2eO11KSjh/FsSsLdOpy/jGQYeDFuHDYTd\r\nNaYHfaVjr+2F0QpcQWifIebcemIqaE2FDbshXj/RWBicMPu0S2KD/2cbrcBX\r\ngG6ER6WOoqmYvJCfcp89UaXYn3ZWgenTtAMThvlk9bs23UC558qTaDKS+ZHu\r\nTaRmY0ElCzH+zIsuauXPiBFNNDg8R6nLmv1HvB34gsAsy6BkUflQxOHQlVwb\r\nacPA66Rsc9T0BoZE6ltLXWS/+GW2FUcAHNiCNxyNHPYzFhX6P8a0O6wrQnfT\r\njHoUIANnmlyzd7Tk3QbCdF9UNuY9KGSdY7M=\r\n=IZMy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/index.js","types":"./lib/index.d.ts","gitHead":"326a00e2ad86b00514bba08a2690a1edc4f83abc","private":false,"scripts":{"test":"jest","start":"tsc --watch","commit":"npm publish --access=public","postpublish":"rm -rf lib","prepublishOnly":"jest && tsc && npm version minor"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+ssh://git@github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"9.6.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"18.16.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.24.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.178"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.3.0_1681954370717_0.6154858525726576","host":"s3://npm-registry-packages"}},"1.4.0":{"name":"@arcaelas/collection","version":"1.4.0","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"community@arcaelas.com"},"license":"GNU","_id":"@arcaelas/collection@1.4.0","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection#readme","bugs":{"url":"https://github.com/arcaelas/collection/issues"},"dist":{"shasum":"0b53f76dcef200567feaeac894aa08c93620c252","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.4.0.tgz","fileCount":10,"integrity":"sha512-iwDtp/XVYvMzQDckdkAr0VO3d78Yio9I5CqogR7eX2lfR9OnVgI9iIUDg6ITP7WlTarv2vY9P4p3ZU82xl3eeg==","signatures":[{"sig":"MEUCIQDC3Vy1cRtmbrg8KiQtEPAluol5OK2Y8oLhFd0w+AVoGAIgacowP3kzId6XznWV8nzc2ElIrBlWxdkH4V5+JbS1/Nw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":110121,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQJeeACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqd2A//UB5vhNhGkLnSjs5osL8TiFN/0JcreU6EWBKkrhYK2VjMHSdg\r\n2al40qfu048zT44BW2JbiwQY1BdQ26Zwh2D84tRHd5oqqfvWpBwQqqX9rNvF\r\neGRjccLE5IfO3uST8tsaAq+7Zz/YFQu0s465k+9i/bS6uTUNc3FtBE4CIbmF\r\nReyAfFKD5r8h8DD1/nZrxZe7cYUD0S9njLr7yqasSS5K0jVTbHSUkpcmAZpt\r\n/otDPhuXBYZrxZdT5B+ChXuuVob5GJmBLlEmSZ1t3hzXHv0rtgdbLtxMlQwe\r\noEn1TXiniVPXlZCspaEo6olixVfgYG//rtMp1IMlUIyednJL3SYiXuUezVJb\r\nkKi8YTBv9ePg+Q2ldWeCCw0BVK8kTjsO0xytHvNBqQ/q3Ggnz0k4oQlrS6pE\r\niuAO2OD/8AkWT3t8habSJQ8IIHHgCrrKDt77Wp3VB34KVIpnaCLq5xXc+mL0\r\nHPQUpkvvAeRb4+y7+l0waH8/6YRbnCJgrvasO0XScLw/pFzq+0GOrqsG4ZJK\r\nk5TGmmMv4mITEkUbdakOXdFtiGZIsIdi3we/iHY+IZLY2mVSKQZmLqAVA2st\r\nwMYSK+rQDYqbwJKF0pEPwaQUpGcohdlLAIbusbUGeidgDm5Uv5o/V91R11c0\r\nZ5cI1V7J6yLspqwuhBl5AQmIQK4xl9kKSA4=\r\n=Sxdx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/index.js","types":"./lib/index.d.ts","gitHead":"432d1b7ae041987802a3fedd48831817cc1e7150","private":false,"scripts":{"test":"jest","start":"tsc --watch","commit":"npm publish --access=public","postpublish":"rm -rf lib","prepublishOnly":"jest && tsc && npm version minor"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+ssh://git@github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"9.6.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"18.16.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.24.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.178"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.4.0_1681954718604_0.9330933247831457","host":"s3://npm-registry-packages"}},"1.4.1":{"name":"@arcaelas/collection","version":"1.4.1","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.4.1","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection#readme","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"c49b79d210c6a5b7af1bd050ebe21f4bb155e1cf","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.4.1.tgz","fileCount":7,"integrity":"sha512-sd7slPMezfdE3ixQFc3++ByhcDtodfik2f54JLsHTR0hmUQ/jpW8lqwBj4WPsn4Q6hWtNyEp3WlnF9um3fgBWA==","signatures":[{"sig":"MEUCIDJZVgvhCHVAaS22dv24ypYWGNI5Vt0GY96/PF2FIXFaAiEA2Gu3nzqy8P8N8jvciZ4k2so0OvswoAsZ4y66wDgzjSw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53490},"main":"./lib/index.js","types":"./lib/index.d.ts","gitHead":"fed0106b001aade4a1ec092610338d27a5303359","scripts":{"test":"yarn build && jest","build":"tsc && ts-node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf lib","prepublishOnly":"yarn test && npm version patch"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"9.6.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"18.16.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.4"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","ts-jest":"^29.1.0","ts-node":"^10.9.1","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/node":"^20.1.0","@types/lodash":"^4.14.178"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.4.1_1683562225064_0.4027017126515653","host":"s3://npm-registry-packages"}},"1.4.2":{"name":"@arcaelas/collection","version":"1.4.2","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.4.2","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection#readme","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"d69f9d98903bd3c5abb20414600257d965b68e44","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.4.2.tgz","fileCount":7,"integrity":"sha512-HAjjbWFFpLMGL/BILb6UhpWahfleYWSyL8QNls5C2+mPE96uEK6tFLzq5QCOGAmxI+6btYLS26840LNYBD1BHw==","signatures":[{"sig":"MEUCIQD5B+eA+FCutO+XKlifAfXC+Dy+6yxeUUn+ke411Faw2QIgDflqBklO9a85BTuloPpT2bIcmZ0wNzsP4MB6Oe5w/7o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53490},"main":"./lib/index.js","types":"./lib/index.d.ts","gitHead":"9356938937526b43fb0e554b0cbcbbca62531d53","scripts":{"test":"yarn build && jest","build":"tsc && ts-node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf lib","prepublishOnly":"yarn test && npm version patch"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"9.6.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"18.16.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.4"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","ts-jest":"^29.1.0","ts-node":"^10.9.1","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/node":"^20.1.0","@types/lodash":"^4.14.178"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.4.2_1683562289462_0.582006200685036","host":"s3://npm-registry-packages"}},"1.4.3":{"name":"@arcaelas/collection","version":"1.4.3","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.4.3","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection#readme","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"7721cc95b037a9c85aa67598da4474ed40a73cc2","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.4.3.tgz","fileCount":7,"integrity":"sha512-0ijr3YNs1MNe8NeeMbBvkaHVg4K3S3hW4oVKuLhAw/3g2iXIWOC/sORjX4SXaBY9ovV4xMB3CNbKcJV+64uPYQ==","signatures":[{"sig":"MEUCIBVq2l0MB8EAO3RfuRigON5DK8OAlD/7C3ygWTrbMEEtAiEAhVtUHssUPcd7tn/7gIdf35VFMHbyixXgbFaI4asC+fY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53468},"main":"./lib/index.js","types":"./lib/index.d.ts","gitHead":"b2be809332bd9270fbaa0596f4ec261fd6988672","scripts":{"test":"yarn build && jest","build":"tsc && ts-node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf lib","prepublishOnly":"yarn test && npm version patch"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"9.6.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"18.16.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.10"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","ts-jest":"^29.1.0","ts-node":"^10.9.1","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.4.3_1683655134213_0.7301495401211344","host":"s3://npm-registry-packages"}},"1.4.4":{"name":"@arcaelas/collection","version":"1.4.4","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.4.4","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection#readme","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"08348aaa4647af70af1da04bcc33f19d99f370d2","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.4.4.tgz","fileCount":7,"integrity":"sha512-FAAgwh19umEWtJ0eFrVDivxjFF/8pe98TnCrRSQiGfs8b5mdLuQ5JF4swqSP9k4+U/RkgwzsQcT0t5hsINNDQw==","signatures":[{"sig":"MEYCIQC0YfSRBbk/ap6UHGqgDO62Q6bSOc1pAq93oSw3WjV0dgIhALcYZICX5dIujCx1wlPJNf+jWuRzSiqzL8Px0fGlVoPl","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53706},"main":"./lib/index.js","types":"./lib/index.d.ts","gitHead":"5cbc6476992ebfb22ed0631a3780d57e97d2dbb4","scripts":{"test":"yarn build && jest","build":"tsc && ts-node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf lib","prepublishOnly":"yarn test && npm version patch"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"9.6.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"18.16.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.10"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","ts-jest":"^29.1.0","ts-node":"^10.9.1","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.4.4_1683908416688_0.47343384879264594","host":"s3://npm-registry-packages"}},"1.4.5":{"name":"@arcaelas/collection","version":"1.4.5","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.4.5","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection#readme","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"b2f3ce4dcf20be01dbc17fb2b9d9a14ce1b154db","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.4.5.tgz","fileCount":7,"integrity":"sha512-L8Ktyhjg7QfVSOE3A9Zby36cV+JdrQZLnPDYRR9n2oEes81f14g2IalYgU2Ef21Dn/6VO7yNIM9gzPspTHJd+g==","signatures":[{"sig":"MEQCIBqv6jKbdg6kZ7cWLe2hMpWEEJFPZDkAfpE8vkB2cg07AiAI9JDzitst7aT6U09X+HbYpsdCETgxO+3a3gQat0Q1DA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53202},"main":"./lib/index.js","types":"./lib/index.d.ts","gitHead":"a08e73b710169e47ee24437fbe92eab0f0b16765","scripts":{"test":"yarn build && jest","build":"tsc && ts-node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf lib","prepublishOnly":"yarn test && npm version patch"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"9.6.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"18.16.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.10"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","ts-jest":"^29.1.0","ts-node":"^10.9.1","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.4.5_1684027042855_0.6256238417981079","host":"s3://npm-registry-packages"}},"1.4.6":{"name":"@arcaelas/collection","version":"1.4.6","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.4.6","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection#readme","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"cbda22647911c6cb3472c75020474cc1cf29d2e7","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.4.6.tgz","fileCount":7,"integrity":"sha512-OgsS3bm1ofMRBsWj7Hc+mqJbq8ZvZ0D0IdMAwMZCxlxdMSrywIbdk6m/apo0K6fbxbv4JQZtvAJtKs2EcN/WDA==","signatures":[{"sig":"MEUCIQCmGESx95pVOlINwt8KrBCeVNKm5zafSvlEfs7UrliMdwIgbiaEHFDyuSs6mbfKeOTnD0ThN2d0fK/VL6En4xzvnPg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53159},"main":"./lib/index.js","types":"./lib/index.d.ts","gitHead":"58654ded9433b02c72e298a66d0ad1285422fbdc","scripts":{"test":"yarn build && jest","build":"tsc && ts-node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf lib","prepublishOnly":"yarn test && npm version patch"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"9.6.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"18.16.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.10"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","ts-jest":"^29.1.0","ts-node":"^10.9.1","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.4.6_1684069903279_0.720486116013271","host":"s3://npm-registry-packages"}},"1.9.1":{"name":"@arcaelas/collection","version":"1.9.1","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.9.1","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection#readme","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"ebfa345fc9e8c09fd2405b6d90df51f6b5c92284","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.9.1.tgz","fileCount":8,"integrity":"sha512-oQmw53NZGIOs6m5Lc0LqEms3TepS+dbbKxWf18bEUtF1pUjOHdK8/6nmaDjPjhY3ssmDUrLTuVGrR27O3sP3Mw==","signatures":[{"sig":"MEYCIQD2xMSudSdJtVATVyAwkWIHp3rbOyPmBH2VWvy27czmiwIhAMJVqIdEVKNSASYcgxh1KemKbQw3s+Wa7f0gShk6qspm","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":76555},"main":"./lib/index.js","types":"./lib/index.d.ts","gitHead":"3f5ad7c09f6978404f323f9ece44f4cea8097f9f","scripts":{"test":"yarn build && jest","build":"tsc && ts-node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf lib","prepublishOnly":"yarn test && npm version patch"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"9.6.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"18.16.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.10"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","ts-jest":"^29.1.0","ts-node":"^10.9.1","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.9.1_1684329198492_0.8328440633573262","host":"s3://npm-registry-packages"}},"1.10.1":{"name":"@arcaelas/collection","version":"1.10.1","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.10.1","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection#readme","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"6e25fb2e139c365063af6a1d527495ec1dfdb3a7","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.10.1.tgz","fileCount":7,"integrity":"sha512-g6qZlwNjZ9c2dmtY4P4TGOqydYrI0PsBKtwUlkl61R5OlRdaignarI1/6O4DmaGXWGmWl/6/tTDYVUcdU9e3RA==","signatures":[{"sig":"MEUCIQDz81IWyiht+HCTpIux300BPl2gAv9OOiwzVsjOO3jKuQIgU9Jy7tpSTD2mNyzdRNgyxOfUVj8rJbWMn8Rm3FwUHWY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53552},"main":"./lib/index.js","types":"./lib/index.d.ts","gitHead":"8ee18dae0b4078d06ea128fe50ab984cfd3efcf3","scripts":{"test":"yarn build && jest","build":"tsc && ts-node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf lib","prepublishOnly":"yarn test && npm version patch"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"9.6.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"18.16.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.10"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","ts-jest":"^29.1.0","ts-node":"^10.9.1","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.10.1_1684329294791_0.93133711923768","host":"s3://npm-registry-packages"}},"1.10.2":{"name":"@arcaelas/collection","version":"1.10.2","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.10.2","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection#readme","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"a76d753f09e2136845b93ff7b67d08a7f1afe4cc","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.10.2.tgz","fileCount":6,"integrity":"sha512-F30cYeaQwCgksCxpFDHLd5tG3Azm8WR6U130fZuk9dL8eBDHLUicOeMucvEiwqvmphqfVtS5KsVEESEiaww3nw==","signatures":[{"sig":"MEYCIQCTUmpnIrZs+hk8VuYLk3xl2YBHOGvc0n6tKZj0GPf2bQIhAIioCLglkt0B3z2Li6/Jcarmu/YyN4eicWiwgc6PFqUy","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46877},"main":"./lib/index.js","types":"./lib/index.d.ts","gitHead":"62f76658e9f4b202ca7a17c6ae5ba991c646e8fb","scripts":{"test":"yarn build && jest","build":"tsc && ts-node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf lib","prepublishOnly":"yarn test"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"8.19.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"16.20.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.10"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","ts-jest":"^29.1.0","ts-node":"^10.9.1","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.10.2_1684349485606_0.08513037011770241","host":"s3://npm-registry-packages"}},"1.11.1":{"name":"@arcaelas/collection","version":"1.11.1","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.11.1","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection#readme","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"4426be09d3bff9221b82ed33934a14d3b856e8a6","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.11.1.tgz","fileCount":8,"integrity":"sha512-mHaGWcgWsriYY+MqRLkqSslsXmrd080ikiHPfq7mEaYOBmzvQzxTOqng/KRKUTqzYLXL0xQS09K3kJcdoM7Eyw==","signatures":[{"sig":"MEYCIQCwS3391zu7bBV/INKzYQ+94nTyDgjdbTUBjgdhNkhgXQIhALgElfCsj3iQVyj0S5K0ZzPRRJOW7PMHTwNeN3q61eUL","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":140346},"jest":{"testPathIgnorePatterns":["test/*.ts"]},"main":"./build/index.js","types":"./build/index.d.ts","gitHead":"bade3224eb544717c6aa847e56874d681169a390","scripts":{"test":"yarn build && jest","build":"tsc && ts-node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf build","prepublishOnly":"yarn test"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"8.19.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"16.20.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.12"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","ts-node":"^10.9.1","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.11.1_1684357041013_0.19502123163552088","host":"s3://npm-registry-packages"}},"1.11.2":{"name":"@arcaelas/collection","version":"1.11.2","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.11.2","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection#readme","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"2a1cbc063e3f67133fcf397151e3796bd6dc623a","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.11.2.tgz","fileCount":9,"integrity":"sha512-0CbynWZmfAPfHFtf2JRiEB0P25NITem5K/pTl0/OXi7M3FAYnRdXUlNcQ3DAGd4yblCZoBAWqBHGW48k1LLtWQ==","signatures":[{"sig":"MEYCIQDq3Ka/+BdWhHj1XNY3eo6C6xnS/pX7JWPrAu/ocSCETAIhAPNSVfOPbCMxiT39zv+boUmANY2mvu24o7LILNqAkqYp","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":102334},"jest":{"testPathIgnorePatterns":["test/*.ts"]},"main":"./build/index.js","types":"./build/index.d.ts","gitHead":"e09d3434a1312a3c4ea86752e1e601d03bf3ea8c","scripts":{"test":"yarn build && jest","build":"tsc && ts-node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf build","prepublishOnly":"yarn test"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"8.19.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"16.20.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.16"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","ts-node":"^10.9.1","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.11.2_1684359428161_0.692693719303417","host":"s3://npm-registry-packages"}},"1.11.3":{"name":"@arcaelas/collection","version":"1.11.3","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.11.3","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"8d2f125e48c6940d96cb614ccb0bd87d1ef51c23","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.11.3.tgz","fileCount":9,"integrity":"sha512-kqTs9pBnYMsOKdc3m/kOb2z8Ua26PX+U+sPImHxMrSemAxLuUVv2zsvwr/ofsqAT1JMn6J+1bOsTyySPKqk84A==","signatures":[{"sig":"MEUCIQCteG4fbO1upyZXBWxGv1WsJ079GvjWifh/EJPcfEfyqgIgQAeBlTy6sSwJ0EFg98KdbjI1PjToLKy3lNst49Bym3E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":102320},"jest":{"testPathIgnorePatterns":["test/*.ts"]},"main":"build/index.js","types":"./build/index.d.ts","gitHead":"8e03d728af0b44e93c1d846042122a30b51673a4","scripts":{"test":"yarn build && jest","build":"tsc && node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf build","prepublishOnly":"yarn test"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"8.19.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"16.20.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.17"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.11.3_1684360194643_0.9056104184149056","host":"s3://npm-registry-packages"}},"1.11.4":{"name":"@arcaelas/collection","version":"1.11.4","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.11.4","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"735adaf59d7fa071f0eb09c8a380b0dc1033dc1e","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.11.4.tgz","fileCount":9,"integrity":"sha512-QhGN/doBGckpmkZEmiC1+Bu9xovuEDzkhFzekEa8gQSxVsT+kqc4i0F/aaN25z9zomSGgnhGrGTbwbNKRko0zA==","signatures":[{"sig":"MEQCICucYY+f9WWfxORj5E4AtbsUi4jINCAKDrqw2BBMwyKqAiB/cJCZFhktfRwCXS9CRv0MV5On6ZPcBpQu7imO06JX8g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":102320},"jest":{"testPathIgnorePatterns":["test/*.ts"]},"main":"build/index.js","types":"./build/index.d.ts","gitHead":"90c9c18d0d1d665e769dec403985b776270ce0bb","scripts":{"test":"yarn build && jest","build":"tsc && node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf build","prepublishOnly":"yarn test"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"8.19.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"16.20.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.18"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.11.4_1684360594390_0.3521514791777316","host":"s3://npm-registry-packages"}},"1.11.5":{"name":"@arcaelas/collection","version":"1.11.5","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.11.5","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"b4572c3a7ae77e51d8e0801c0631e3e80fc9ff8d","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.11.5.tgz","fileCount":9,"integrity":"sha512-Pp2Wa0oxbVS87YmU1UuZOwLUhoiiAgoBMu0kJK2NjS/kIr1vbuefAbQjvPtPMbJN9u4XXfSlcjaTtra/Uj36Ow==","signatures":[{"sig":"MEUCIFUWvqaEiAQDbt0/XyhEll+hZdlWwrP6Y8RPycUICVzqAiEAiEZjWPgqe89yBVE5gRiWeFSwi9HjCV18N+jKHZiv4mU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":108400},"jest":{"testPathIgnorePatterns":["test/*.ts"]},"main":"build/index.js","types":"./build/index.d.ts","gitHead":"2b8c0467007672fd347aec1b0c0dbb5dd6910572","scripts":{"test":"yarn build && jest","build":"tsc && node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf build","prepublishOnly":"yarn test"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"8.19.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"16.20.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.18"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.11.5_1684513652980_0.2320070443989779","host":"s3://npm-registry-packages"}},"1.12.0":{"name":"@arcaelas/collection","version":"1.12.0","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.12.0","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"b57823fab70f5faefb3c4b27fb0b7b3dd05098db","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.12.0.tgz","fileCount":9,"integrity":"sha512-HmG8vmKWwcUdnymC023QdgXxgOa5CsAg7OmNpLmNqTEvQwIPziVnI8AO9emuuRXobJv604q+FomvT5zl9zWdfQ==","signatures":[{"sig":"MEYCIQCnPRxakzUI5Up46x4YCu6k9X/PcOQlKdbmrfqBxUyesQIhAIee6rEFDkXUjSHqjHybpQraE/ssoRVEq6P5Xjh++fwY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":108672},"jest":{"testPathIgnorePatterns":["test/*.ts"]},"main":"build/index.js","types":"./build/index.d.ts","gitHead":"5e5a765166a18c2d9c968037a84550591d4768f3","scripts":{"test":"yarn build && jest","build":"tsc && node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf build","prepublishOnly":"yarn test"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"8.19.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"16.20.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.18"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.12.0_1684521913721_0.21748447018024053","host":"s3://npm-registry-packages"}},"1.12.1":{"name":"@arcaelas/collection","version":"1.12.1","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.12.1","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"0ae83748a37ff663e459a41a39cc9c4c7e79b3ea","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.12.1.tgz","fileCount":9,"integrity":"sha512-d/l4FkiXLce3nbjBAcQyCs7hg/qQWJAjnkairOpE+h4qSH6jWSxMDjssWepAIR0Dx0KqOQEBgTW8wjRUP/kp/Q==","signatures":[{"sig":"MEYCIQD4y9DqGjDaNrPuylQ7Oiq/BFOIhJk7kEHP1j4/p273BQIhANnEAeCy2FjNnrhzr1woJzvDphy6BLtGiqJQ3Yn9JZhF","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":108343},"jest":{"testPathIgnorePatterns":["test/*.ts"]},"main":"build/index.js","types":"./build/index.d.ts","gitHead":"75826c2901179bbdeed0da88a0093dc9d04c88a9","scripts":{"test":"yarn build && jest","build":"tsc && node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf build","prepublishOnly":"yarn test"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"8.19.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"16.20.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.18"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.12.1_1684523172796_0.875163002108178","host":"s3://npm-registry-packages"}},"1.12.2":{"name":"@arcaelas/collection","version":"1.12.2","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.12.2","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"7fbc31de8cb19f4c0c578a6e603d7356c762cc75","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.12.2.tgz","fileCount":9,"integrity":"sha512-8uoKecVivLIVx+OUC7UDHY0WXNZajHn2vItuUNnKvo04RE85N4g9QDJ0qD/05fUsk7Vbr+MEk98eapKkOyBnFA==","signatures":[{"sig":"MEUCIGODluMwxegidBXkPHIwEnAg3zm4RZWdyEloKXpIt8QSAiEAxrHoIfwlVQkwQxakSsnADOQVLG+0bunXsALpAKbzqsg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":108340},"jest":{"testPathIgnorePatterns":["test/*.ts"]},"main":"build/index.js","types":"./build/index.d.ts","gitHead":"3f5c09391ef4fb0331e8c019053b545491b81f25","scripts":{"test":"yarn build && jest","build":"tsc && node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf build","prepublishOnly":"yarn test"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"8.19.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"16.20.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.18"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.12.2_1684523477059_0.5438755125792838","host":"s3://npm-registry-packages"}},"1.12.3":{"name":"@arcaelas/collection","version":"1.12.3","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.12.3","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"a1935f6ddba33d26df39499fc4f7816b3c1cf1d1","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.12.3.tgz","fileCount":9,"integrity":"sha512-XS51NTLGfOXtRuEzjk6yU20Y2FdUlFUVVd3fI/AiLw1KTiVRtATJR088JPon5MPTxF5OcqvNxheLMyNcdd4+pQ==","signatures":[{"sig":"MEYCIQDEW/OEhvcjZCqRWm0Dmga8lMFRjCRpNkbthPLjgJMDUgIhAM/U5HY6V69cx9hTXMIQv0YT5RkYYWYaOW66LU9T4Ig2","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":108389},"jest":{"testPathIgnorePatterns":["test/*.ts"]},"main":"build/index.js","types":"./build/index.d.ts","gitHead":"78a588e6f6b300c6adecdb71379db471cef1fbf9","scripts":{"test":"yarn build && jest","build":"tsc && node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf build","prepublishOnly":"yarn test"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"8.19.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"16.20.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.18"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.12.3_1684523683227_0.5800758856099455","host":"s3://npm-registry-packages"}},"1.12.4":{"name":"@arcaelas/collection","version":"1.12.4","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.12.4","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"12c7af74bcb49c345c3a724ecfc7d058a4e47103","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.12.4.tgz","fileCount":9,"integrity":"sha512-wCCNFJf+MRHQCP4BPSMddICQ3NOnAqAb4LsbxgbNb/QCiTLMAu2itCvsXN5srvA+NqLtCeW+GXC7fYE+/9b0vg==","signatures":[{"sig":"MEQCIDB44KTTQ/CD5jfrimx2NXhH7c61ATqWjGU4bPVc8z23AiBuxnoKOQ8QRWwP1LlxvupWBpWdFyj0pjIL61ATgOF3Lg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":108401},"jest":{"testPathIgnorePatterns":["test/*.ts"]},"main":"build/index.js","types":"./build/index.d.ts","gitHead":"99081879fb378252224ce21aac01750e914a3330","scripts":{"test":"yarn build && jest","build":"tsc && node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf build","prepublishOnly":"yarn test"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"8.19.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"16.20.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.18"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.12.4_1684523944912_0.34437116026656045","host":"s3://npm-registry-packages"}},"1.12.5":{"name":"@arcaelas/collection","version":"1.12.5","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.12.5","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"daabf879b1ea2e2b0be7cad489b1ce95a69dcd48","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.12.5.tgz","fileCount":9,"integrity":"sha512-pgyAFuplluRpPCQIB8+9G1hAsVGMeVnw9gYyNy0N6x848MOcMtGcSiM73kWJVgDSK1TUr5u7QHIFTgtvab9OlA==","signatures":[{"sig":"MEUCIQDyXyvrEDHCCPxutfKyJ7uh/IU/WqAHz7UJ8g3IBWzs1gIgAMgrfsnY17fBJOivQvobgHk37BKQq6U+60vaeRQnHek=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":109945},"jest":{"testPathIgnorePatterns":["test/*.ts"]},"main":"build/index.js","types":"./build/index.d.ts","gitHead":"dadd32201972e45485050d3d06d5d0702ab58583","scripts":{"test":"yarn build && jest","build":"tsc && node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf build","prepublishOnly":"yarn test"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"8.19.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"16.20.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.18"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.12.5_1684524670525_0.11615113610119887","host":"s3://npm-registry-packages"}},"1.12.6":{"name":"@arcaelas/collection","version":"1.12.6","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.12.6","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"48fb7e26192c4023a24fd471aea6563edeb4862e","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.12.6.tgz","fileCount":9,"integrity":"sha512-WCSLqqdQrQ3atG0Wr8eobvswfiDGZUlKea2KKKrDB69kKjpwbRbFzMgjl6LDkXHKfXF+4q7vWi4cAPM9HMSLxw==","signatures":[{"sig":"MEUCIQDT/eRaLNO5jlLV/iemCYleOwy8Ykiw1l+yLCZs0lwQlgIgLIQRmzDX0GoI/bnA2h5gos7KwDJtVPsoz/kzAGaPEqE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":109952},"jest":{"testPathIgnorePatterns":["test/*.ts"]},"main":"build/index.js","types":"./build/index.d.ts","gitHead":"12f9b15e6b4a618e4591c665a06df2628cd86d63","scripts":{"test":"yarn build && jest","build":"tsc && node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf build","prepublishOnly":"yarn test"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"8.19.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"16.20.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.18"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.12.6_1684524734009_0.375683014331204","host":"s3://npm-registry-packages"}},"1.13.0":{"name":"@arcaelas/collection","version":"1.13.0","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@1.13.0","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"4a6ba6f805be591eef2333d2eae6d85ac5ff47ab","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-1.13.0.tgz","fileCount":9,"integrity":"sha512-BusZGNjBug+fl5B0f7DAyCLEBXkvpmBaJCIMaCL6+BV8D93BsOY+wrbZOhrFJmmGrvsAA6M/YbJT+dx231s0tA==","signatures":[{"sig":"MEUCIHdX4v6FK6dLdHMy+pRDX/Y+YTpgSD1gWMnq3/pf0b5iAiEA7CizeiYqPNc2pl3Ypw5uKmB3o2vTNUn8PSilPfkCz9s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":110499},"jest":{"testPathIgnorePatterns":["test/*.ts"]},"main":"build/index.js","types":"./build/index.d.ts","gitHead":"ecea6f5dd94d72fdde93b6bb63cd53e79420b744","scripts":{"test":"yarn build && jest","build":"tsc && node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf build","prepublishOnly":"yarn test"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"8.19.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"16.20.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.45.18"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_1.13.0_1684527359822_0.31326901198951607","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"@arcaelas/collection","version":"2.0.0","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@2.0.0","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"469b177f4a558568cf2d81802d67dce1e463a9e4","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-2.0.0.tgz","fileCount":9,"integrity":"sha512-LnvPO/MSmzGw+YX+U6b6GiU/SriOBxn3VocR57ygs0sPa5TN1VvYLKQOTyaz2qiGy6CtppCVuWRjKUvirujzhw==","signatures":[{"sig":"MEUCIC22+795G+72LsJ6BEEJP2ap8ZEkxRQXBWMs8plEJ99KAiEAjmKrwXnSlA8/8P6v4KTC9Yyc1nXmZmzJpaAF+5fYDhM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":81784},"jest":{"testPathIgnorePatterns":["test/*.ts"]},"main":"build/index.js","types":"./build/index.d.ts","gitHead":"fd120c1072cc3fbdee036283e1ea7b5af88e1161","scripts":{"test":"yarn build && jest","build":"tsc && node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf build","prepublishOnly":"yarn test"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"8.19.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"16.20.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.47.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_2.0.0_1684642668971_0.15822014524068173","host":"s3://npm-registry-packages"}},"2.0.1":{"name":"@arcaelas/collection","version":"2.0.1","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@2.0.1","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"27f3ac54e17a0bd9d45d00a8e3d82ff97510f5fa","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-2.0.1.tgz","fileCount":9,"integrity":"sha512-gHab1i9Q0fLRksi7nmZtjaaG7OdSqkX8gLUwXFUTDU990UUuzw+RPLf0nE215vNYOVJRPG5KKISOYzNN6aJNig==","signatures":[{"sig":"MEYCIQD3ogd0T6boxVyWfVjTGtYdhWuw7Gso083iu/ZCYcoEAQIhAJPBEk0c1IB6YbhNgCFalcSfparBqiyR0XGaBgvrnwmi","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":81784},"jest":{"testPathIgnorePatterns":["test/*.ts"]},"main":"build/index.js","types":"./build/index.d.ts","gitHead":"ce7193acccc18b8dcb6c54729ee6c07fc7752f89","scripts":{"test":"yarn build && jest","build":"tsc && node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf build","prepublishOnly":"yarn test"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"8.19.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"16.20.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.48.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_2.0.1_1684970397183_0.56191707805468","host":"s3://npm-registry-packages"}},"2.0.2":{"name":"@arcaelas/collection","version":"2.0.2","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@2.0.2","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"44040e3aaaaae680c5756a5c9192a9c8f72cf84c","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-2.0.2.tgz","fileCount":9,"integrity":"sha512-S/qu3ZbMiVIGv7iq9RphErcL2tudATA5rF9VAPO95fmqXPAXm5B46IA2oMA6t2g1hrVx5MTr1U3A9LnVpNp5ng==","signatures":[{"sig":"MEUCIFQKAC1KnW3wksmC/dFld5Ff4DfRji7m8Y9RVyc9KI5hAiEA+YXzAXwnBdEjvSCBvVDxG/bMHrY8YLwJ5VHUA8ThcBk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":81784},"jest":{"testPathIgnorePatterns":["test/*.ts"]},"main":"build/index.js","types":"./build/index.d.ts","gitHead":"44d689b50a3ef50e554f33d9c4837cf60a52ab92","scripts":{"test":"yarn build && jest","build":"tsc && node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf build","prepublishOnly":"yarn test"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"8.19.4","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"16.20.0","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^1.48.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_2.0.2_1685135788562_0.5213658632785074","host":"s3://npm-registry-packages"}},"2.1.0":{"name":"@arcaelas/collection","version":"2.1.0","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@2.1.0","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"7d61cf2760d4d575cb9341d2e5705c85eff8df5c","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-2.1.0.tgz","fileCount":9,"integrity":"sha512-b2AYG6B6KfkZYz3mQUuiSwJoSaGhdlqYal3qyXsCivTTksLch6WauGTuPeLQXxVPtqSb+K7MMxIXq66Cg1s+1g==","signatures":[{"sig":"MEUCIGXUggtQLAf+LHXpHgr5xqeYHUrcdvYJFPBwQXZRKexHAiEA1JWbKZxnp9+PMDkSPUNLaPN+Eita0G86GrkFRWitrWY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":82696},"jest":{"testPathIgnorePatterns":["test/*.ts"]},"main":"build/index.js","types":"./build/index.d.ts","gitHead":"7ef7b8d02f07e558ef30e4b690e93cecfb720a9d","scripts":{"test":"yarn build && jest","build":"tsc && node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf build","prepublishOnly":"yarn test"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"10.7.0","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"20.13.1","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^2.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_2.1.0_1716759693377_0.9036700561684614","host":"s3://npm-registry-packages"}},"2.1.1":{"name":"@arcaelas/collection","version":"2.1.1","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@2.1.1","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"f100d48972351041f3f2b559a343273d5da7b043","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-2.1.1.tgz","fileCount":9,"integrity":"sha512-fDCmk0lmsrY480FlA3l7jmE9jJ6imeGm5dGXs6Mxc3jc8sSD9s3q2CjIl3wlsLhipANNRHRtzr9TiJs7HOaRjQ==","signatures":[{"sig":"MEUCIQDxyKiFEwP7oJxEmy9pRInb8mMgw/ROACHwA7r9MV3AxwIgVhJwWEl+RLn/3gkh1paT4uP5X74GHmcHMZHf6I9xb9k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":82792},"jest":{"testPathIgnorePatterns":["test/*.ts"]},"main":"build/index.js","types":"./build/index.d.ts","gitHead":"ecb73cfa6eca093d2d5c14749ab19f92e37a3d76","scripts":{"test":"yarn build && jest","build":"tsc && node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf build","prepublishOnly":"yarn test"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"10.7.0","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"20.13.1","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^2.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_2.1.1_1716781390416_0.8629985131447573","host":"s3://npm-registry-packages"}},"2.1.2":{"name":"@arcaelas/collection","version":"2.1.2","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@2.1.2","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"8e2285328cf454893e18edef274dc4aad8a11ec7","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-2.1.2.tgz","fileCount":9,"integrity":"sha512-qKwSWBriHlDHmwifMJmXYK15BJktcDody3rB5q3ymbNv7z3ljz0NIE/d377W9W2dHTFDxp6CQ/iZkhRkwoBt7w==","signatures":[{"sig":"MEYCIQDYczG8mXahnvtL6qySXyKv0ODLfDY3lm7cEV0E6090pwIhAL1/GMEHwceToElvuvjvk6wpCcqDR4Sw3wULOInsIELm","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":82792},"jest":{"testPathIgnorePatterns":["test/*.ts"]},"main":"build/index.js","types":"./build/index.d.ts","gitHead":"bda1263b376ef1ca70aed179162dda39f1834ddc","scripts":{"test":"yarn build && jest","build":"tsc && node esbuild.js","commit":"npm publish --access=public","postpublish":"rm -rf build","prepublishOnly":"yarn test"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"10.7.0","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"20.13.1","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^2.0.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","esbuild":"^0.17.18","typescript":"^5.0.4","@types/jest":"^29.5.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_2.1.2_1716783453522_0.32515015771009703","host":"s3://npm-registry-packages"}},"2.2.0":{"name":"@arcaelas/collection","version":"2.2.0","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"author":{"url":"https://github.com/arcaelas","name":"Arcaelas Insiders","email":"comunity@arcaelas.com"},"license":"ISC","_id":"@arcaelas/collection@2.2.0","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"homepage":"https://github.com/arcaelas/collection","bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dist":{"shasum":"af106ae218489094ff180c21d38b1d96a6b51c61","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-2.2.0.tgz","fileCount":15,"integrity":"sha512-k8oB5Zs7ttwBNQs4NPSG+SGT0pA9grP07X6P9+7Q+EpGmEYXvvmtT2zBQ56vGtSZUuKrYuaSZLMysdMhDTkBDg==","signatures":[{"sig":"MEYCIQD98ZBrvgRgn8T/bH+qhvgnhZ9IAJZqhogEoz0NpCOKiAIhAJc2XYTHbCc/TC9aLLrweKL5CJQyygh/W4Wa1Nl8V73e","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":114248},"main":"build/index.js","types":"./build/index.d.ts","gitHead":"c203dacd9d677b7fdae8480fb501740802211ee6","scripts":{"test":"yarn build && jest","build":"tsc && node esbuild.js","commit":"npm publish --access=public","prepare":"husky","test:async":"npx -y tsx tests/setup/init.redis.ts && jest tests/async.redis.test.ts","test:setup":"npx -y tsx tests/setup/init.redis.ts","postpublish":"rm -rf build","prepublishOnly":"yarn test"},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"repository":{"url":"git+https://github.com/arcaelas/collection.git","type":"git"},"_npmVersion":"10.8.2","description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","directories":{},"_nodeVersion":"20.19.2","dependencies":{"lodash":"^4.17.21","@arcaelas/utils":"^2.0.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","husky":"9.1.7","redis":"^5.8.3","esbuild":"^0.25.0","ts-jest":"^29.4.5","ts-node":"^10.9.2","typescript":"^5.0.4","@types/jest":"^29.5.14","@types/node":"^24.8.1","@types/lodash":"^4.14.194"},"_npmOperationalInternal":{"tmp":"tmp/collection_2.2.0_1760727606213_0.5425184214215564","host":"s3://npm-registry-packages-npm-production"}},"2.5.3":{"author":{"name":"Arcaelas Insiders","email":"comunity@arcaelas.com","url":"https://github.com/arcaelas"},"bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"dependencies":{"@arcaelas/utils":"^2.0.8","lodash":"^4.17.21"},"description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","devDependencies":{"@types/lodash":"^4.14.194","@types/node":"^24.8.1","tsc-alias":"^1.8.16","typescript":"^5.0.4"},"homepage":"https://github.com/arcaelas/collection","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"license":"ISC","main":"src/index.js","name":"@arcaelas/collection","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"repository":{"type":"git","url":"git+https://github.com/arcaelas/collection.git"},"scripts":{"build":"tsc && tsc-alias","deploy":"npm version patch && npm publish --access=public","docs":"mkdocs gh-deploy --force","postpublish":"find src -type f \\( -name '*.js' -o -name '*.d.ts' -o -name '*.map' \\) -delete","prepublishOnly":"yarn build"},"version":"2.5.3","_id":"@arcaelas/collection@2.5.3","gitHead":"b7941d5a966f18d68dd2ca577304f0bfe41535c8","types":"./src/index.d.ts","_nodeVersion":"20.19.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-Y88jJO2uBH/F7ym9SOlRAtmJTn9T10jQRgKOH9R5d52M6wxYFnaKaC/Yt6HwhknfHdWoBTj+jxAd+Xw4gF23AA==","shasum":"77c9ec7dcbabafa28eb121eb5cd817ca05bc6349","tarball":"https://registry.npmjs.org/@arcaelas/collection/-/collection-2.5.3.tgz","fileCount":5,"unpackedSize":64998,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDuyj/DYkdUrev0TbaCKFMdssDpZsqsG5wea/xjlSIBZAiBh9X2iry1E+MQuW2QyxeXaPJ4zPv57PFLJZhOxb+l3Pg=="}]},"_npmUser":{"name":"arcaelas","email":"arcaela.reyes@gmail.com"},"directories":{},"maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/collection_2.5.3_1760846278065_0.6622922426901487"},"_hasShrinkwrap":false}},"time":{"created":"2023-04-20T00:40:45.575Z","modified":"2025-10-19T03:57:58.424Z","1.2.0":"2023-04-20T00:40:45.842Z","1.3.0":"2023-04-20T01:32:50.922Z","1.4.0":"2023-04-20T01:38:38.790Z","1.4.1":"2023-05-08T16:10:25.232Z","1.4.2":"2023-05-08T16:11:29.640Z","1.4.3":"2023-05-09T17:58:54.356Z","1.4.4":"2023-05-12T16:20:16.914Z","1.4.5":"2023-05-14T01:17:23.035Z","1.4.6":"2023-05-14T13:11:43.535Z","1.9.1":"2023-05-17T13:13:18.677Z","1.10.1":"2023-05-17T13:14:54.949Z","1.10.2":"2023-05-17T18:51:25.803Z","1.11.1":"2023-05-17T20:57:21.249Z","1.11.2":"2023-05-17T21:37:08.320Z","1.11.3":"2023-05-17T21:49:54.928Z","1.11.4":"2023-05-17T21:56:34.583Z","1.11.5":"2023-05-19T16:27:33.192Z","1.12.0":"2023-05-19T18:45:13.922Z","1.12.1":"2023-05-19T19:06:12.953Z","1.12.2":"2023-05-19T19:11:17.233Z","1.12.3":"2023-05-19T19:14:43.425Z","1.12.4":"2023-05-19T19:19:05.086Z","1.12.5":"2023-05-19T19:31:10.708Z","1.12.6":"2023-05-19T19:32:14.184Z","1.13.0":"2023-05-19T20:15:59.988Z","2.0.0":"2023-05-21T04:17:49.251Z","2.0.1":"2023-05-24T23:19:57.335Z","2.0.2":"2023-05-26T21:16:28.829Z","2.1.0":"2024-05-26T21:41:33.557Z","2.1.1":"2024-05-27T03:43:10.576Z","2.1.2":"2024-05-27T04:17:33.651Z","2.2.0":"2025-10-17T19:00:06.415Z","2.5.3":"2025-10-19T03:57:58.242Z"},"bugs":{"url":"https://github.com/arcaelas/collection/issues","email":"community@arcaelas.com"},"author":{"name":"Arcaelas Insiders","email":"comunity@arcaelas.com","url":"https://github.com/arcaelas"},"license":"ISC","homepage":"https://github.com/arcaelas/collection","keywords":["collect","collection","object","arcaelas","@arcaelas","framework","open source","database"],"repository":{"type":"git","url":"git+https://github.com/arcaelas/collection.git"},"description":"Searching, filtering and mapping collections is the bread and butter for developers, that's why we offer you \"eloquent\".","maintainers":[{"name":"arcaelas","email":"arcaela.reyes@gmail.com"}],"readme":"![Arcaelas Insiders Banner](https://raw.githubusercontent.com/arcaelas/dist/main/banner/svg/dark.svg#gh-dark-mode-only)\n\n![Arcaelas Insiders Banner](https://raw.githubusercontent.com/arcaelas/dist/main/banner/svg/light.svg#gh-light-mode-only)\n\n# Welcome to Arcaelas Insiders!\n\nHello, if this is your first time reading the **[Arcaelas Insiders](https://github.com/arcaelas)** **documentation**, let me tell you that you have found a good place to learn.\n\n**Our team** and _community_ are happy to write and make methods simple to implement and understand, but I think you already know that.\n\n> The documentation for this tool is open to edits and suggestions.\n\nLet's start with the basic implementation steps.\n\n```bash\n> npm i --save @arcaelas/collection\n> yarn add --save @arcaelas/collection\n```\n\n## Implementation\n\n```javascript\n// Class Import Statement\nimport Collection from \"@arcaelas/Collection\";\n\n// Function import statement\nimport { Collection } from \"@arcaelas/collection\";\n\n// EsModule\nconst Collection = require(\"@arcaelas/collection\");\n```\n\n## Motivation\n\nIn object-oriented programming we find common situations, such as those where we want to order, filter and modify elements of a list, however the \"Array Prototypes\" are not very complete in some cases, for these situations the **Arcaelas Insiders** team has designed useful tools that allow these actions within \"Collections\".\n\n### Curiosities\n\nAs an interesting part of this tool, we have the B-JSON notation that Atlas implements in its MongoDB database engine, only some of them are implemented here, but we will explain how to extend them and create your own validators.\n\n## Get Started\n\n```typescript\nimport Collection from \"@arcaelas/collection\"\n\nconst collection = new Collection([ ... ])\n```\n\n## Method Reference and Use Cases\n\n### `filter()`\n\n> Filters elements by a callback or Query expression.\n\n```ts\ncollection.filter((item) => item.age >= 18);\ncollection.filter({ age: { $gte: 18 } });\ncollection.filter({\n  name: /Alejandro/,\n  skills: { $contains: \"Liberty\" },\n  gender: { $not: { $in: [\"animal\", \"fruit\"] } },\n  work: { $not: { $in: [\"work\", \"without\", \"coffee\"] } },\n});\n```\n\n### `not()`\n\n> Returns elements that do NOT match the expression.\n\n```ts\ncollection.not({ online: false });\n```\n\n### `first()` / `last()`\n\n> Returns the first or last element that matches a Query or function.\n\n```ts\ncollection.first({ age: { $gte: 18 } });\ncollection.last((item) => item.name === \"Joe\");\n```\n\n### `where()` / `whereNot()`\n\n> Shorthand for querying with operator and value.\n\n```ts\ncollection.where(\"online\", false);\ncollection.where(\"age\", \">=\", 21);\ncollection.whereNot(\"role\", \"admin\");\ncollection.whereNot(\"price\", \"<\", 100);\n```\n\n### `update()`\n\n> Updates elements based on query or globally. **⚠️ Mutates** collection. Returns number of updated items.\n\n```ts\n// Update matched elements\ncollection.update({ online: false }, { deletedAt: new Date() });\n\n// Use template strings for dynamic values\ncollection.update({ email: /gmail\\.com$/ }, {\n  prevEmail: \"${email}\",\n  email: null\n});\n\n// Update all elements\ncollection.update({ deletedAt: new Date() });\n```\n\n### `delete()`\n\n> Removes matched elements. **⚠️ Mutates** collection. Returns number of deleted items.\n\n```ts\nconst deleted = collection.delete({ deletedAt: { $exists: true } });\nconsole.log(`Deleted ${deleted} items`);\n```\n\n### `collect()`\n\n> Creates a new `Collection` instance **preserving all macros** from parent.\n\n```ts\n// Useful for cloning with custom macros preserved\nconst clone = collection.collect([ ... ]);\n\n// All macros added to parent are available in clone\nCollection.macro('pluck', function(key) { return this.map(i => i[key]); });\nconst copy = collection.collect([...]);\ncopy.pluck('name'); // Works! Macro is preserved\n```\n\n### `dd()` / `dump()`\n\n> Debug methods to print and exit or continue.\n\n```ts\ncollection.dump();\ncollection.dd();\n```\n\n### `max()` / `min()` / `sum()`\n\n> Performs aggregate calculations by key or function.\n\n```ts\ncollection.max(\"score\");\ncollection.min(\"price\");\ncollection.sum(\"amount\");\ncollection.sum((item) => item.price * 1.18);\n```\n\n### `random()` / `shuffle()`\n\n> `random(n)` returns array of n random items. `shuffle()` **⚠️ mutates** collection with random order.\n\n```ts\nconst two_items = collection.random(2); // Returns T[], not Collection\ncollection.shuffle(); // Mutates and returns this\n```\n\n### `chunk()` / `paginate()`\n\n> Splits into chunks or paginates.\n\n```ts\n// chunk() returns T[][] (array of arrays)\nconst chunks = collection.chunk(100);\n// chunks = [[item1, item2, ...], [item101, item102, ...]]\n\n// paginate() returns { items: T[], prev: number | false, next: number | false }\nconst page = collection.paginate(1, 50);\n// page = { items: [...], prev: false, next: 2 }\n```\n\n### `countBy()` / `groupBy()`\n\n> Aggregates by key or iterator.\n\n```ts\n// countBy() returns Record<string, number>\nconst counts = collection.countBy(\"type\");\n// { active: 5, inactive: 3 }\n\ncollection.countBy((item) => item.group);\n\n// groupBy() returns Dictionary<T[]> (plain object, not Collection)\nconst groups = collection.groupBy(\"status\");\n// { active: [item1, item2], inactive: [item3] }\n\ncollection.groupBy((item) => item.role);\n```\n\n### `each()`\n\n> Iterates over elements. `return false` to break.\n\n```ts\ncollection.each((item) => {\n  if (!item.active) return false;\n});\n```\n\n### `forget()`\n\n> Removes specific fields from each item. **⚠️ Mutates** collection.\n\n```ts\n// Removes sensitive fields from all items\ncollection.forget(\"password\", \"token\");\n\n// To preserve original, use collect() first\nconst safe = collection.collect().forget(\"password\");\n```\n\n### `unique()`\n\n> Filters to unique values by key or callback.\n\n```ts\ncollection.unique(\"email\");\ncollection.unique((item) => item.id);\n```\n\n### `macro()` / `Collection.macro()`\n\n> Adds custom methods.\n\n```ts\nCollection.macro(\"pluck\", function (key) {\n  return this.map((item) => item[key]);\n});\ncollection.pluck(\"name\");\n```\n\n### `sort()`\n\n> Sorts the collection by key, direction or comparator function. **⚠️ Mutates** collection.\n\n```ts\ncollection.sort(\"age\", \"asc\");\ncollection.sort(\"name\", \"desc\");\ncollection.sort((a, b) => a.score - b.score);\n\n// Items with undefined values are placed at end (asc) or start (desc)\n```\n\n### `every()`\n\n> Verifies that all elements satisfy the expression.\n\n```ts\ncollection.every(\"active\");\ncollection.every(\"score\", \">=\", 0);\ncollection.every({ verified: true });\ncollection.every((item) => item.age >= 18);\n```\n\n### `stringify()`\n\n> Converts collection to JSON string. Wrapper for `JSON.stringify()`.\n\n```ts\ncollection.stringify(); // Compact JSON\ncollection.stringify(null, 2); // Pretty-printed with 2 spaces\n\n// See MDN for replacer and space parameters\ncollection.stringify((key, value) => typeof value === 'bigint' ? value.toString() : value);\n```\n\n### Native methods preserved\n\n- `concat`, `map`, `pop`, `slice`, `splice`, `shift`, `unshift` are fully supported.\n\n## Collection Quick Reference\n\n### Mutability Matrix\n\n| Method | Mutates | Returns | Notes |\n|--------|---------|---------|-------|\n| `filter()` | ❌ No | New Collection | Creates filtered copy |\n| `where()` | ❌ No | New Collection | Shorthand for filter |\n| `whereNot()` | ❌ No | New Collection | Negated filter |\n| `not()` | ❌ No | New Collection | Negated filter |\n| `map()` | ❌ No | New Array | Native method |\n| `collect()` | ❌ No | New Collection | Clones with macros |\n| `chunk()` | ❌ No | `T[][]` | Array of arrays |\n| `groupBy()` | ❌ No | `Dictionary<T[]>` | Plain object |\n| `paginate()` | ❌ No | `{ items, prev, next }` | Pagination object |\n| `random()` | ❌ No | `T[]` | Array of random items |\n| `unique()` | ❌ No | New Collection | Deduplicated copy |\n| **`delete()`** | ✅ **Yes** | `number` | Returns deleted count |\n| **`update()`** | ✅ **Yes** | `number` | Returns updated count |\n| **`forget()`** | ✅ **Yes** | `this` | Removes fields |\n| **`shuffle()`** | ✅ **Yes** | `this` | Random order in place |\n| **`sort()`** | ✅ **Yes** | `this` | Sorts in place |\n\n### Query Operators Complete Reference\n\nAll operators can be used in `filter()`, `where()`, `whereNot()`, `not()`, `every()`, `first()`, `last()`, etc.\n\n#### Equality Operators\n\n```ts\n// $eq - Equal (default, can be omitted)\ncollection.filter({ age: 25 });\ncollection.filter({ age: { $eq: 25 } });\ncollection.where('age', '=', 25);\ncollection.where('age', 25); // '=' assumed\n\n// $not / != - Not equal\ncollection.filter({ $not: { status: 'deleted' } });\ncollection.where('status', '!=', 'deleted');\n```\n\n#### Comparison Operators\n\n```ts\n// $gt / > - Greater than\ncollection.filter({ age: { $gt: 18 } });\ncollection.where('age', '>', 18);\n\n// $gte / >= - Greater than or equal\ncollection.filter({ score: { $gte: 100 } });\ncollection.where('score', '>=', 100);\n\n// $lt / < - Less than\ncollection.filter({ price: { $lt: 50 } });\ncollection.where('price', '<', 50);\n\n// $lte / <= - Less than or equal\ncollection.filter({ stock: { $lte: 10 } });\ncollection.where('stock', '<=', 10);\n```\n\n#### Array and String Operators\n\n```ts\n// $in - Value in array\ncollection.filter({ status: { $in: ['active', 'pending'] } });\ncollection.where('status', 'in', ['active', 'pending']);\n\n// $includes - Contains substring or value\ncollection.filter({ skills: { $includes: 'TypeScript' } });\ncollection.where('skills', 'includes', 'TypeScript');\n```\n\n#### Advanced Queries\n\n```ts\n// Nested object queries with dot notation\ncollection.where('user.address.city', 'New York');\n\n// Multiple conditions (AND logic)\ncollection\n  .where('age', '>=', 18)\n  .where('verified', true)\n  .where('status', 'in', ['active', 'premium']);\n\n// Complex query object\ncollection.filter({\n  name: /^John/i,                          // Regex match\n  age: { $gte: 18, $lt: 65 },             // Range\n  status: { $in: ['active', 'premium'] }, // Array inclusion\n  skills: { $includes: 'JavaScript' },    // Contains\n  $not: { deleted: true }                 // Negation\n});\n```\n\n### Constructor with Validators\n\n```ts\nimport Collection from \"@arcaelas/collection\";\n\ninterface CustomValidators {\n  $between(ref: string, range: [number, number]): (item: any) => boolean;\n  $isPast(ref: string, value: boolean): (item: any) => boolean;\n}\n\nconst validators: CustomValidators = {\n  $between(ref, range) {\n    return (item) => item[ref] >= range[0] && item[ref] <= range[1];\n  },\n  $isPast(ref, value) {\n    return (item) => {\n      const date = new Date(item[ref]);\n      const is_past = date < new Date();\n      return value ? is_past : !is_past;\n    };\n  }\n};\n\n// Use custom validators\nconst collection = new Collection<User, CustomValidators>(users, validators);\n\ncollection.filter({\n  age: { $between: [18, 65] },\n  expireDate: { $isPast: false }\n});\n```\n\n## AsyncCollection\n\nAsyncCollection es un Query Builder que implementa el patrón de ejecución diferida para trabajar con fuentes de datos asíncronas como ORMs, bases de datos y APIs. En lugar de ejecutar operaciones inmediatamente, AsyncCollection registra todas las operaciones en un \"query plan\" que se ejecuta solo cuando se resuelve la promesa usando `await` o `.then()`.\n\n### Conceptos Fundamentales\n\n#### ExecutorContext\n\nEl contexto de ejecución que se pasa a la función executor cuando se resuelve la promesa:\n\n```typescript\ninterface ExecutorContext<T, V> {\n  operations: [string, ...any[]][]; // Array de operaciones registradas\n  validators?: V;                    // Validators personalizados\n  metadata: {\n    created_at: Date;                // Fecha de creación\n    operation_count: number;         // Total de operaciones\n    chain_depth: number;             // Profundidad de la cadena\n  };\n}\n```\n\n#### Función Executor\n\nLa función que procesa el contexto y retorna los resultados:\n\n```typescript\ntype Executor<T, V> = (\n  context: ExecutorContext<T, V>\n) => T | T[] | Promise<T | T[]>;\n```\n\n#### Implementación Thenable\n\nAsyncCollection implementa la interfaz Promise-like con `then()`, `catch()` y `finally()`, permitiendo usar `await` directamente sin necesidad de llamar a un método explícito de ejecución.\n\n#### Patrón de Registro de Operaciones\n\nCada método encadena operaciones en un array interno con el formato `[nombre_metodo, ...args]`, que se procesa cuando se resuelve la promesa.\n\n### Uso Básico\n\n#### Executor Simple con Array\n\n```typescript\nimport AsyncCollection from \"@arcaelas/collection/async\";\n\n// Crear un executor simple que procesa operaciones en memoria\nconst users = new AsyncCollection<User>(async ({ operations }) => {\n  let data = await fetchUsers(); // Obtener datos iniciales\n\n  operations.forEach(([method, ...args]) => {\n    if (method === 'where') {\n      const [key, operator, value] = args.length === 3 ? args : [args[0], '=', args[1]];\n      data = data.filter(item => {\n        if (operator === '>=') return item[key] >= value;\n        if (operator === '>') return item[key] > value;\n        if (operator === '=') return item[key] === value;\n        return true;\n      });\n    } else if (method === 'sort') {\n      const [key, direction] = args;\n      data.sort((a, b) => {\n        const result = a[key] > b[key] ? 1 : -1;\n        return direction === 'desc' ? -result : result;\n      });\n    }\n  });\n\n  return data;\n});\n```\n\n#### Encadenamiento de Operaciones\n\n```typescript\n// Las operaciones se registran pero no se ejecutan hasta el await\nconst result = await users\n  .where('age', '>=', 18)\n  .where('status', 'active')\n  .not({ deleted: true })\n  .sort('name', 'asc')\n  .paginate(1, 20);\n\nconsole.log(result); // Array de usuarios filtrados y paginados\n```\n\n#### Validators Personalizados\n\nPuedes extender los operadores de query con validators personalizados:\n\n```typescript\nconst custom_validators = {\n  $between(ref: string, range: [number, number]) {\n    return (item: any) => {\n      const value = item[ref];\n      return value >= range[0] && value <= range[1];\n    };\n  },\n  $contains(ref: string, search: string) {\n    return (item: any) => {\n      const value = String(item[ref] ?? '');\n      return value.toLowerCase().includes(search.toLowerCase());\n    };\n  },\n  $isPast(ref: string, value: boolean) {\n    return (item: any) => {\n      const date = new Date(item[ref]);\n      const is_past = date < new Date();\n      return value ? is_past : !is_past;\n    };\n  }\n};\n\nconst items = new AsyncCollection(\n  async ({ operations, validators }) => {\n    // Usar validators para procesar operaciones avanzadas\n    return processWithValidators(operations, validators);\n  },\n  custom_validators\n);\n\n// Usar operadores personalizados\nawait items.filter({\n  age: { $between: [18, 65] },\n  name: { $contains: 'John' },\n  expireDate: { $isPast: false }\n});\n```\n\n### Integraciones con ORMs\n\n#### Prisma\n\n```typescript\nimport { PrismaClient } from '@prisma/client';\nimport AsyncCollection from \"@arcaelas/collection/async\";\n\nconst prisma = new PrismaClient();\n\nconst users = new AsyncCollection<User>(async ({ operations }) => {\n  const where: any = {};\n  const orderBy: any = [];\n  let take: number | undefined;\n  let skip: number | undefined;\n\n  operations.forEach(([method, ...args]) => {\n    if (method === 'where') {\n      const [key, operator, value] = args.length === 3 ? args : [args[0], '=', args[1]];\n      if (operator === '>=') where[key] = { gte: value };\n      else if (operator === '>') where[key] = { gt: value };\n      else if (operator === '<=') where[key] = { lte: value };\n      else if (operator === '<') where[key] = { lt: value };\n      else if (operator === '!=') where[key] = { not: value };\n      else where[key] = value;\n    } else if (method === 'sort') {\n      const [key, direction] = args;\n      orderBy.push({ [key]: direction || 'asc' });\n    } else if (method === 'paginate') {\n      const [page, per_page] = args;\n      take = per_page;\n      skip = (page - 1) * per_page;\n    }\n  });\n\n  const query: any = { where };\n  if (orderBy.length > 0) query.orderBy = orderBy;\n  if (take !== undefined) query.take = take;\n  if (skip !== undefined) query.skip = skip;\n\n  const last_op = operations[operations.length - 1];\n  if (last_op?.[0] === 'first') {\n    return await prisma.user.findFirst(query);\n  }\n\n  return await prisma.user.findMany(query);\n});\n\n// Usar como un query builder normal\nconst active_users = await users\n  .where('status', 'active')\n  .where('age', '>=', 18)\n  .sort('created_at', 'desc')\n  .paginate(1, 10);\n```\n\n#### TypeORM\n\n```typescript\nimport { getRepository } from 'typeorm';\nimport AsyncCollection from \"@arcaelas/collection/async\";\nimport { User } from './entities/User';\n\nconst users = new AsyncCollection<User>(async ({ operations }) => {\n  const qb = getRepository(User).createQueryBuilder('user');\n\n  operations.forEach(([method, ...args]) => {\n    if (method === 'where') {\n      const [key, operator, value] = args.length === 3 ? args : [args[0], '=', args[1]];\n      const param_name = `${key}_${Math.random().toString(36).substr(2, 9)}`;\n\n      if (operator === '>=') {\n        qb.andWhere(`user.${key} >= :${param_name}`, { [param_name]: value });\n      } else if (operator === '>') {\n        qb.andWhere(`user.${key} > :${param_name}`, { [param_name]: value });\n      } else if (operator === '=') {\n        qb.andWhere(`user.${key} = :${param_name}`, { [param_name]: value });\n      }\n    } else if (method === 'sort') {\n      const [key, direction] = args;\n      qb.orderBy(`user.${key}`, direction?.toUpperCase() || 'ASC');\n    } else if (method === 'paginate') {\n      const [page, per_page] = args;\n      qb.skip((page - 1) * per_page).take(per_page);\n    }\n  });\n\n  const last_op = operations[operations.length - 1];\n  if (last_op?.[0] === 'first') {\n    return await qb.getOne();\n  }\n\n  return await qb.getMany();\n});\n\n// Query encadenable con TypeORM\nconst premium_users = await users\n  .where('subscription', 'premium')\n  .where('last_login', '>', new Date('2025-01-01'))\n  .sort('points', 'desc')\n  .first();\n```\n\n#### Redis con JSON\n\n```typescript\nimport { createClient } from 'redis';\nimport AsyncCollection from \"@arcaelas/collection/async\";\n\nconst redis_client = createClient();\nawait redis_client.connect();\n\nconst cache = new AsyncCollection<CacheItem>(async ({ operations }) => {\n  // Obtener todos los keys que coincidan con un patrón\n  const keys = await redis_client.keys('users:*');\n  let items = await Promise.all(\n    keys.map(async (key) => {\n      const data = await redis_client.get(key);\n      return JSON.parse(data || '{}');\n    })\n  );\n\n  // Procesar operaciones en memoria\n  operations.forEach(([method, ...args]) => {\n    if (method === 'where') {\n      const [key, operator, value] = args.length === 3 ? args : [args[0], '=', args[1]];\n      items = items.filter(item => {\n        if (operator === '>=') return item[key] >= value;\n        if (operator === '=') return item[key] === value;\n        return true;\n      });\n    } else if (method === 'sort') {\n      const [key, direction] = args;\n      items.sort((a, b) => {\n        const result = a[key] > b[key] ? 1 : -1;\n        return direction === 'desc' ? -result : result;\n      });\n    }\n  });\n\n  const last_op = operations[operations.length - 1];\n  if (last_op?.[0] === 'first') return items[0];\n  if (last_op?.[0] === 'last') return items[items.length - 1];\n\n  return items;\n});\n\n// Query sobre datos en Redis\nconst cached_users = await cache\n  .where('active', true)\n  .where('score', '>=', 100)\n  .sort('last_access', 'desc')\n  .paginate(1, 20);\n```\n\n### Cómo Funciona Internamente\n\nAsyncCollection utiliza un sistema de ejecución diferida en tres fases: registro de operaciones, construcción de contexto y ejecución.\n\n#### 1. Fase de Registro de Operaciones\n\nCuando llamas a métodos como `where()`, `sort()` o `filter()`, AsyncCollection **no ejecuta nada inmediatamente**. En su lugar, registra cada operación en un array interno con el formato `[nombre_metodo, ...argumentos]`.\n\n```typescript\nconst users = new AsyncCollection<User>(async ({ operations }) => {\n  // En este punto, operations contiene todas las operaciones registradas\n  console.log(operations);\n  return [];\n});\n\n// Cada método añade una operación al array interno\nconst query = users\n  .where('age', '>=', 18)      // Añade: ['where', 'age', '>=', 18]\n  .where('status', 'active')   // Añade: ['where', 'status', 'active']\n  .sort('name', 'asc')         // Añade: ['sort', 'name', 'asc']\n  .slice(0, 10);               // Añade: ['slice', 0, 10]\n\n// NADA se ha ejecutado todavía\n// El array operations está completo pero el executor no ha sido llamado\n```\n\n#### 2. Fase de Construcción de Contexto\n\nLa ejecución se desencadena solo cuando resuelves la promesa usando `await`, `.then()`, `.catch()` o `.finally()`. En ese momento, AsyncCollection llama internamente a `_build_context()` que crea el `ExecutorContext`:\n\n```typescript\n// Cuando haces await, internamente pasa esto:\nconst context = {\n  operations: [\n    ['where', 'age', '>=', 18],\n    ['where', 'status', 'active'],\n    ['sort', 'name', 'asc'],\n    ['slice', 0, 10]\n  ],\n  validators: custom_validators,  // Si se proporcionaron\n  metadata: {\n    created_at: new Date(),\n    operation_count: 4,\n    chain_depth: 4\n  }\n};\n```\n\n#### 3. Fase de Ejecución del Executor\n\nEl executor recibe el contexto y es responsable de:\n\n1. Interpretar cada operación del array `operations`\n2. Transformarlas al formato de tu fuente de datos (SQL, Prisma, TypeORM, etc.)\n3. Ejecutar la query final\n4. Retornar los resultados\n\n```typescript\nconst users = new AsyncCollection<User>(async ({ operations }) => {\n  // El executor interpreta las operaciones\n  let data = await fetchUsers();\n\n  // Procesa cada operación en orden\n  operations.forEach(([method, ...args]) => {\n    if (method === 'where') {\n      const [key, operator, value] = args.length === 3 ? args : [args[0], '=', args[1]];\n      data = data.filter(item => {\n        if (operator === '>=') return item[key] >= value;\n        if (operator === '=') return item[key] === value;\n        return true;\n      });\n    } else if (method === 'sort') {\n      const [key, direction] = args;\n      data.sort((a, b) => {\n        const result = a[key] > b[key] ? 1 : -1;\n        return direction === 'desc' ? -result : result;\n      });\n    } else if (method === 'slice') {\n      const [start, end] = args;\n      data = data.slice(start, end);\n    }\n  });\n\n  return data;\n});\n\n// Al hacer await, se ejecuta el executor con el contexto\nconst result = await users\n  .where('age', '>=', 18)\n  .where('status', 'active')\n  .sort('name', 'asc')\n  .slice(0, 10);\n```\n\n#### 4. Fase de Resolución de Resultados\n\nLa promesa se resuelve con el valor que retorna el executor:\n\n```typescript\n// El resultado es lo que retorna tu executor\nconst result = await users.where('age', '>=', 18); // T[] o T dependiendo del executor\n```\n\n### Visualización del Array de Operaciones\n\nEl array `operations` es la columna vertebral de AsyncCollection. Aquí puedes ver exactamente qué contiene en diferentes escenarios:\n\n#### Ejemplo 1: Operaciones Básicas\n\n```typescript\nconst users = new AsyncCollection<User>(async ({ operations }) => {\n  console.log('Operations:', JSON.stringify(operations, null, 2));\n  return [];\n});\n\nawait users\n  .where('age', '>=', 18)\n  .where('status', 'active')\n  .sort('name', 'asc')\n  .slice(0, 10);\n\n// Console output:\n// Operations: [\n//   [\"where\", \"age\", \">=\", 18],\n//   [\"where\", \"status\", \"active\"],\n//   [\"sort\", \"name\", \"asc\"],\n//   [\"slice\", 0, 10]\n// ]\n```\n\n#### Ejemplo 2: Operaciones con Objetos de Query\n\n```typescript\nawait users\n  .filter({ age: { $gte: 18 }, status: 'active' })\n  .not({ deleted: true })\n  .sort('created_at', 'desc');\n\n// Operations: [\n//   [\"filter\", { age: { $gte: 18 }, status: \"active\" }],\n//   [\"not\", { deleted: true }],\n//   [\"sort\", \"created_at\", \"desc\"]\n// ]\n```\n\n#### Ejemplo 3: Operaciones con Paginación\n\n```typescript\nawait users\n  .where('verified', true)\n  .sort('score', 'desc')\n  .paginate(2, 20);\n\n// Operations: [\n//   [\"where\", \"verified\", true],\n//   [\"sort\", \"score\", \"desc\"],\n//   [\"paginate\", 2, 20]\n// ]\n```\n\n#### Ejemplo 4: Operaciones Terminales\n\n```typescript\nawait users\n  .where('role', 'admin')\n  .sort('last_login', 'desc')\n  .first();\n\n// Operations: [\n//   [\"where\", \"role\", \"admin\"],\n//   [\"sort\", \"last_login\", \"desc\"],\n//   [\"first\"]\n// ]\n```\n\n### Operaciones Terminales\n\nLas **operaciones terminales** son métodos que indican al executor que debe retornar un único elemento en lugar de un array. AsyncCollection reconoce estas operaciones y permite que tu executor las maneje de forma especial.\n\n#### Operaciones Terminales Disponibles\n\n- `first()` - Retorna el primer elemento que coincida o `null`\n- `last()` - Retorna el último elemento que coincida o `null`\n- `find()` - Alias de `first()` (retorna primer elemento o `null`)\n\n#### Detectar Operaciones Terminales\n\nPuedes verificar la última operación en el array para determinar si necesitas retornar un único elemento:\n\n```typescript\nconst users = new AsyncCollection<User>(async ({ operations }) => {\n  const query = buildQuery(operations);\n  const last_op = operations[operations.length - 1];\n\n  // Detectar si la última operación es terminal\n  if (last_op && (last_op[0] === 'first' || last_op[0] === 'find')) {\n    // Retornar un único elemento o null\n    const result = await db.query(query).limit(1);\n    return result[0] ?? null;\n  }\n\n  if (last_op && last_op[0] === 'last') {\n    // Retornar el último elemento o null\n    const results = await db.query(query);\n    return results[results.length - 1] ?? null;\n  }\n\n  // Operación normal, retornar array\n  return await db.query(query);\n});\n```\n\n#### Ejemplo con Prisma\n\n```typescript\nconst users = new AsyncCollection<User>(async ({ operations }) => {\n  const where: any = {};\n  const orderBy: any = [];\n\n  operations.forEach(([method, ...args]) => {\n    if (method === 'where') {\n      const [key, operator, value] = args.length === 3 ? args : [args[0], '=', args[1]];\n      where[key] = operator === '=' ? value : { gte: value };\n    } else if (method === 'sort') {\n      const [key, direction] = args;\n      orderBy.push({ [key]: direction || 'asc' });\n    }\n  });\n\n  const query = { where, orderBy };\n  const last_op = operations[operations.length - 1];\n\n  // Usar findFirst() para operaciones terminales\n  if (last_op?.[0] === 'first' || last_op?.[0] === 'find') {\n    return await prisma.user.findFirst(query);\n  }\n\n  // Usar findMany() para operaciones normales\n  return await prisma.user.findMany(query);\n});\n\n// Retorna un único usuario o null\nconst admin = await users.where('role', 'admin').first();\n\n// Retorna array de usuarios\nconst all_admins = await users.where('role', 'admin');\n```\n\n#### Ejemplo con TypeORM\n\n```typescript\nconst users = new AsyncCollection<User>(async ({ operations }) => {\n  const qb = getRepository(User).createQueryBuilder('user');\n\n  operations.forEach(([method, ...args]) => {\n    if (method === 'where') {\n      const [key, operator, value] = args.length === 3 ? args : [args[0], '=', args[1]];\n      qb.andWhere(`user.${key} = :${key}`, { [key]: value });\n    }\n  });\n\n  const last_op = operations[operations.length - 1];\n\n  // Usar getOne() para operaciones terminales\n  if (last_op?.[0] === 'first' || last_op?.[0] === 'find') {\n    return await qb.getOne();\n  }\n\n  if (last_op?.[0] === 'last') {\n    const results = await qb.getMany();\n    return results[results.length - 1] ?? null;\n  }\n\n  // Usar getMany() para operaciones normales\n  return await qb.getMany();\n});\n```\n\n### Consideraciones de Rendimiento\n\n#### 1. Crecimiento del Array de Operaciones\n\nCada llamada a un método añade una entrada al array `operations`. Para cadenas muy largas (100+ operaciones), considera estas estrategias:\n\n```typescript\n// ❌ Evitar: cadena extremadamente larga\nconst result = await users\n  .where('field1', 'value1')\n  .where('field2', 'value2')\n  // ... 98 operaciones más\n  .where('field100', 'value100');\n\n// ✅ Mejor: agrupar condiciones en filter()\nconst result = await users.filter({\n  field1: 'value1',\n  field2: 'value2',\n  // ... todas las condiciones en un objeto\n  field100: 'value100'\n});\n\n// ✅ Mejor: dividir en múltiples queries\nconst filtered = await users.where('category', 'active');\nconst paginated = await filtered.sort('date', 'desc').paginate(1, 20);\n```\n\nEl array `operations` se copia cuando se construye el contexto, por lo que cadenas muy largas pueden tener un pequeño overhead de memoria. En la práctica, esto solo es relevante con 100+ operaciones.\n\n#### 2. Caché de Resultados en el Executor\n\n**AsyncCollection NO cachea resultados por defecto**. Cada vez que haces `await`, se vuelve a ejecutar el executor completo:\n\n```typescript\nconst active_users = users.where('status', 'active');\n\n// Primera ejecución: ejecuta el executor\nconst result1 = await active_users;\n\n// Segunda ejecución: vuelve a ejecutar el executor desde cero\nconst result2 = await active_users;\n```\n\nSi necesitas cachear resultados, debes implementarlo en tu executor:\n\n```typescript\nconst cache = new Map<string, any>();\n\nconst users = new AsyncCollection<User>(async ({ operations }) => {\n  // Crear clave de caché basada en las operaciones\n  const cache_key = JSON.stringify(operations);\n\n  // Verificar si el resultado está en caché\n  if (cache.has(cache_key)) {\n    console.log('Resultado desde caché');\n    return cache.get(cache_key);\n  }\n\n  // Ejecutar query si no está en caché\n  console.log('Ejecutando query...');\n  const result = await executeQuery(operations);\n\n  // Guardar en caché\n  cache.set(cache_key, result);\n\n  return result;\n});\n\n// Primera ejecución: ejecuta query\nconst result1 = await users.where('age', '>=', 18); // \"Ejecutando query...\"\n\n// Segunda ejecución: retorna desde caché\nconst result2 = await users.where('age', '>=', 18); // \"Resultado desde caché\"\n\n// Tercera ejecución con operaciones diferentes: ejecuta query\nconst result3 = await users.where('status', 'active'); // \"Ejecutando query...\"\n```\n\nPara cachés más sofisticados, considera usar TTL (time-to-live):\n\n```typescript\ninterface CacheEntry<T> {\n  data: T;\n  expires_at: number;\n}\n\nconst cache = new Map<string, CacheEntry<any>>();\nconst CACHE_TTL = 60000; // 60 segundos\n\nconst users = new AsyncCollection<User>(async ({ operations }) => {\n  const cache_key = JSON.stringify(operations);\n  const now = Date.now();\n\n  // Verificar caché válido\n  const cached = cache.get(cache_key);\n  if (cached && cached.expires_at > now) {\n    return cached.data;\n  }\n\n  // Ejecutar query y cachear con TTL\n  const result = await executeQuery(operations);\n  cache.set(cache_key, {\n    data: result,\n    expires_at: now + CACHE_TTL\n  });\n\n  return result;\n});\n```\n\n#### 3. Múltiples Awaits y Re-ejecución\n\nEs importante entender que cada `await` causa una re-ejecución completa del executor:\n\n```typescript\nconst active_users = users\n  .where('status', 'active')\n  .sort('name', 'asc');\n\n// Primera ejecución: query a la base de datos\nconst result1 = await active_users;\n\n// Segunda ejecución: OTRA query a la base de datos\nconst result2 = await active_users;\n\n// Tercera ejecución: OTRA query a la base de datos\nconst result3 = await active_users;\n```\n\nSi necesitas usar el resultado múltiples veces, guárdalo en una variable:\n\n```typescript\n// ✅ Mejor: ejecutar una vez y reutilizar\nconst active_users_query = users\n  .where('status', 'active')\n  .sort('name', 'asc');\n\nconst result = await active_users_query;\n\n// Usar el resultado múltiples veces sin re-ejecutar\nconsole.log(result.length);\nresult.forEach(user => console.log(user.name));\nconst first_user = result[0];\n```\n\n#### 4. Optimización en Executors para ORMs\n\nCuando trabajes con ORMs, es crucial construir queries eficientes:\n\n```typescript\n// ❌ Evitar: cargar todos los datos y filtrar en memoria\nconst users = new AsyncCollection<User>(async ({ operations }) => {\n  let data = await prisma.user.findMany(); // Carga TODOS los usuarios\n\n  operations.forEach(([method, ...args]) => {\n    if (method === 'where') {\n      data = data.filter(/* ... */); // Filtra en memoria\n    }\n  });\n\n  return data;\n});\n\n// ✅ Mejor: construir query eficiente en el ORM\nconst users = new AsyncCollection<User>(async ({ operations }) => {\n  const where: any = {};\n\n  operations.forEach(([method, ...args]) => {\n    if (method === 'where') {\n      const [key, operator, value] = args.length === 3 ? args : [args[0], '=', args[1]];\n      where[key] = value; // Construye query de Prisma\n    }\n  });\n\n  return await prisma.user.findMany({ where }); // Query optimizada\n});\n```\n\n#### 5. Medición de Performance\n\nPara identificar cuellos de botella, añade logging a tu executor:\n\n```typescript\nconst users = new AsyncCollection<User>(async ({ operations, metadata }) => {\n  const start = Date.now();\n\n  console.log(`Ejecutando ${metadata.operation_count} operaciones`);\n\n  const result = await executeQuery(operations);\n\n  const duration = Date.now() - start;\n  console.log(`Query completada en ${duration}ms`);\n\n  return result;\n});\n```\n\n## Collection TypeScript Signature\n\n```ts\nCollection<T, V>;\n// T = item type\n// V = shape for query validation\n```\n\nThis ensures type-safe autocompletion and query shape consistency.\n\n## Query DSL Aliases\n\n| Alias      | Mongo DSL   | Meaning                     |\n| ---------- | ----------- | --------------------------- |\n| `=`        | `$eq`       | equal                       |\n| `!=`       | `$not`      | not equal                   |\n| `>`        | `$gt`       | greater than                |\n| `<`        | `$lt`       | less than                   |\n| `>=`       | `$gte`      | greater or equal            |\n| `<=`       | `$lte`      | less or equal               |\n| `in`       | `$in`       | included in array           |\n| `includes` | `$includes` | contains substring or value |\n\n## Performance and Best Practices\n\n- Underlying logic delegates to native `Array` methods.\n- Query filtering is optimized using precompiled functions.\n- Avoid frequent mutation in large collections; prefer `.collect()` clones.\n- For secure randomness, override `random()` with your own comparator.\n\n## Contribution Guide\n\n1. Fork and clone this repo.\n2. Run `npm install`.\n3. Run tests: `npm run test`.\n4. Follow conventional commits.\n\n### Available Scripts\n\n| Script          | Description             |\n| --------------- | ----------------------- |\n| `npm run build` | Compile TS and bundle   |\n| `npm run test`  | Run unit tests          |\n| `npm run lint`  | Run ESLint and Prettier |\n\n## Roadmap\n\n- [ ] LazyCollection using generators\n- [x] AsyncCollection support for promises/streams\n- [ ] Drop lodash dependency\n- [ ] YAML/CSV serialization\n\n## License\n\nMIT © 2025 Miguel Alejandro (Miguel Guevara) [miguel.guevara@arcaelas.com](mailto:miguel.guevara@arcaelas.com)\n\n---\n\n<div  style=\"text-align:center;margin-top:50px;\">\n\t<p  align=\"center\">\n\t\t<img  src=\"https://raw.githubusercontent.com/arcaelas/dist/main/logo/svg/64.svg\"  height=\"32px\">\n\t<p>\n\nWant to discuss any of my open source projects, or something else? Send me a direct message on [Twitter](https://twitter.com/arcaelas).<br> If you already use these libraries and want to support us to continue development, you can sponsor us at [Github Sponsors](https://github.com/sponsors/arcaelas).\n\n</div>\n","readmeFilename":"README.md"}