{"_id":"@ederzadravec/super-model-mongo","_rev":"8-a0d65b8317294cc25daedfa10db407c3","name":"@ederzadravec/super-model-mongo","dist-tags":{"latest":"2.3.1"},"versions":{"2.1.0":{"name":"@ederzadravec/super-model-mongo","version":"2.1.0","keywords":["mongodb","mongoose","nested-documents","aggregation","crud","typescript","database","query-builder"],"author":{"name":"Éder Zadravec","email":"ederzadravec@gmail.com"},"license":"MIT","_id":"@ederzadravec/super-model-mongo@2.1.0","maintainers":[{"name":"ezadravec","email":"ederzadravec@gmail.com"}],"homepage":"https://github.com/ederzadravec/super-model-mongo#readme","bugs":{"url":"https://github.com/ederzadravec/super-model-mongo/issues"},"dist":{"shasum":"0ffcc2ce3a0289f7b4c33bdd6e0ab2fb52072b75","tarball":"https://registry.npmjs.org/@ederzadravec/super-model-mongo/-/super-model-mongo-2.1.0.tgz","fileCount":15,"integrity":"sha512-Kckrv5c5oNCj+VtkiSLbNTMQVT3ZHXi+Dj/peMWp+K7FcdWYAeHPiZYlI/ueXfXBoNrNuYhXKTNQAIWnlziZ9g==","signatures":[{"sig":"MEYCIQCY5ptsOubMWgJPgv6Re37ha3tz+tqANjmSM+W92qN/WwIhAKNqoJJ4nZMrbIKKizfjrT5cMCU6kzB40Su4T9lesqVE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44915},"main":"dist/model.js","types":"dist/model.d.ts","engines":{"node":">=12.0.0"},"gitHead":"1e94de953ef8489f20d2e3db70d95ecb836d2d3c","private":false,"scripts":{"lint":"tslint 'src/**/*.ts'","test":"jest","build":"tsc && yarn copy-dts","clean":"rm -rf dist","copy-dts":"cp -R src/*.d.ts dist/","lint:fix":"tslint 'src/**/*.ts' --fix","test:watch":"jest --watch","test:coverage":"jest --coverage","prepublishOnly":"yarn clean && yarn build"},"_npmUser":{"name":"ezadravec","email":"ederzadravec@gmail.com"},"repository":{"url":"git+ssh://git@github.com/ederzadravec/super-model-mongo.git","type":"git"},"_npmVersion":"10.8.2","description":"A powerful MongoDB wrapper with enhanced functionality for nested documents and complex queries","directories":{},"_nodeVersion":"20.19.4","dependencies":{"ramda":"^0.27.1","objectid":"^3.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e","devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","mongoose":"^5.11.19","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/ramda":"^0.27.38","@types/mongoose":"^5.10.3"},"peerDependencies":{"mongoose":"^5.0.0 || ^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/super-model-mongo_2.1.0_1760233706232_0.2549636953039591","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@ederzadravec/super-model-mongo","version":"2.1.1","keywords":["mongodb","mongoose","nested-documents","aggregation","crud","typescript","database","query-builder"],"author":{"name":"Éder Zadravec","email":"ederzadravec@gmail.com"},"license":"MIT","_id":"@ederzadravec/super-model-mongo@2.1.1","maintainers":[{"name":"ezadravec","email":"ederzadravec@gmail.com"}],"homepage":"https://github.com/ederzadravec/super-model-mongo#readme","bugs":{"url":"https://github.com/ederzadravec/super-model-mongo/issues"},"dist":{"shasum":"dbdf55b28c81479ab04649ffbc8fe2bd6cce5a21","tarball":"https://registry.npmjs.org/@ederzadravec/super-model-mongo/-/super-model-mongo-2.1.1.tgz","fileCount":15,"integrity":"sha512-1zeTNS7XHaDqLiwTeoUgTo6qDJeGYweuzq+jfu7HGQ2SAVCZvMO5xzOcrdA4EC4wZkzN7RH0mhwNqjYQ24aVHA==","signatures":[{"sig":"MEYCIQCrfuRhME9mewM7xB+3WLSzqfSCYFLhvBuZbZDFdUK7KAIhANkpcKPFegXuLYXUudSUfpUPZYeCZ5lG14yYHxbkr4WQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45823},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=12.0.0"},"gitHead":"253a8c398490ea27eb0c228d2a93ce596e00a454","private":false,"scripts":{"lint":"tslint 'src/**/*.ts'","test":"jest","build":"tsc && yarn copy-dts","clean":"rm -rf dist","copy-dts":"cp -R src/*.d.ts dist/","lint:fix":"tslint 'src/**/*.ts' --fix","test:watch":"jest --watch","test:coverage":"jest --coverage","prepublishOnly":"yarn clean && yarn build"},"_npmUser":{"name":"ezadravec","email":"ederzadravec@gmail.com"},"repository":{"url":"git+ssh://git@github.com/ederzadravec/super-model-mongo.git","type":"git"},"_npmVersion":"10.8.2","description":"A powerful MongoDB wrapper with enhanced functionality for nested documents and complex queries","directories":{},"_nodeVersion":"20.19.4","dependencies":{"ramda":"^0.27.1","objectid":"^3.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e","devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","mongoose":"^5.11.19","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/ramda":"^0.27.38","@types/mongoose":"^5.10.3"},"peerDependencies":{"mongoose":"^5.0.0 || ^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/super-model-mongo_2.1.1_1760236128854_0.2908695348458854","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"@ederzadravec/super-model-mongo","version":"2.1.2","keywords":["mongodb","mongoose","nested-documents","aggregation","crud","typescript","database","query-builder"],"author":{"name":"Éder Zadravec","email":"ederzadravec@gmail.com"},"license":"MIT","_id":"@ederzadravec/super-model-mongo@2.1.2","maintainers":[{"name":"ezadravec","email":"ederzadravec@gmail.com"}],"homepage":"https://github.com/ederzadravec/super-model-mongo#readme","bugs":{"url":"https://github.com/ederzadravec/super-model-mongo/issues"},"dist":{"shasum":"71a92c5853e084ac2f1e8b6d9b9201bc28259b6b","tarball":"https://registry.npmjs.org/@ederzadravec/super-model-mongo/-/super-model-mongo-2.1.2.tgz","fileCount":15,"integrity":"sha512-GdiPmwQQtkzcNNzV2s62STYIn0oGlRvEOHOiblRAI2QZziZWPOvaJ9WDfa2kp1dzT+bCf0p5GQCrrhdRtpQBJw==","signatures":[{"sig":"MEUCIQCjeFfRV4S79FEq1xnfSWgZF5Kv//siv22UIaNYqU9ovwIgA+xC8vHDuzpaYTelJaC9FGM/wc5KNHouJ2AvEyRoBYc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45307},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=12.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"c9c835e0ec3f4744fa82178aef9d8ca6adbcaba6","private":false,"scripts":{"lint":"tslint 'src/**/*.ts'","test":"jest","build":"tsc && yarn copy-dts","clean":"rm -rf dist","copy-dts":"cp -R src/*.d.ts dist/","lint:fix":"tslint 'src/**/*.ts' --fix","test:watch":"jest --watch","test:coverage":"jest --coverage","prepublishOnly":"yarn clean && yarn build"},"_npmUser":{"name":"ezadravec","email":"ederzadravec@gmail.com"},"repository":{"url":"git+ssh://git@github.com/ederzadravec/super-model-mongo.git","type":"git"},"_npmVersion":"10.8.2","description":"A powerful MongoDB wrapper with enhanced functionality for nested documents and complex queries","directories":{},"_nodeVersion":"20.19.4","dependencies":{"ramda":"^0.27.1","objectid":"^3.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e","devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","mongoose":"^5.11.19","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/ramda":"^0.27.38","@types/mongoose":"^5.10.3"},"peerDependencies":{"mongoose":"^5.0.0 || ^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/super-model-mongo_2.1.2_1760236742218_0.7952595677899053","host":"s3://npm-registry-packages-npm-production"}},"2.1.3":{"name":"@ederzadravec/super-model-mongo","version":"2.1.3","keywords":["mongodb","mongoose","nested-documents","aggregation","crud","typescript","database","query-builder"],"author":{"name":"Éder Zadravec","email":"ederzadravec@gmail.com"},"license":"MIT","_id":"@ederzadravec/super-model-mongo@2.1.3","maintainers":[{"name":"ezadravec","email":"ederzadravec@gmail.com"}],"homepage":"https://github.com/ederzadravec/super-model-mongo#readme","bugs":{"url":"https://github.com/ederzadravec/super-model-mongo/issues"},"dist":{"shasum":"a65fb9ca5bd38581ec1283471a4fc0d7fa7548f9","tarball":"https://registry.npmjs.org/@ederzadravec/super-model-mongo/-/super-model-mongo-2.1.3.tgz","fileCount":15,"integrity":"sha512-LvERfaEHA8tfvNMdJLDMc3dTs56/9m9j4SCnezH0yBQECIhlYECCJ8/r/s2mTuSoDbajRVLwBiodapykLU08jA==","signatures":[{"sig":"MEUCIGuQf6TG8DlbD0SqlXBwhBcQKevzAMGVgUOvsnhhvOsIAiEAifjw9/ma0Nn4xg9m/kMTX6poMrpLvSZV5nrUK1hjFe0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45812},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=12.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"8011e0e8fc25165b1ecb371f2ba584a7a2e0f85d","private":false,"scripts":{"lint":"tslint 'src/**/*.ts'","test":"jest","build":"tsc && yarn copy-dts","clean":"rm -rf dist","copy-dts":"cp -R src/*.d.ts dist/","lint:fix":"tslint 'src/**/*.ts' --fix","test:watch":"jest --watch","test:coverage":"jest --coverage","prepublishOnly":"yarn clean && yarn build"},"_npmUser":{"name":"ezadravec","email":"ederzadravec@gmail.com"},"repository":{"url":"git+ssh://git@github.com/ederzadravec/super-model-mongo.git","type":"git"},"_npmVersion":"10.8.2","description":"A powerful MongoDB wrapper with enhanced functionality for nested documents and complex queries","directories":{},"_nodeVersion":"20.19.4","dependencies":{"ramda":"^0.27.1","objectid":"^3.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e","devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","mongoose":"^5.11.19","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/ramda":"^0.27.38","@types/mongoose":"^5.10.3"},"peerDependencies":{"mongoose":"^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/super-model-mongo_2.1.3_1760239506804_0.41546027266334273","host":"s3://npm-registry-packages-npm-production"}},"2.1.4":{"name":"@ederzadravec/super-model-mongo","version":"2.1.4","keywords":["mongodb","mongoose","nested-documents","aggregation","crud","typescript","database","query-builder"],"author":{"name":"Éder Zadravec","email":"ederzadravec@gmail.com"},"license":"MIT","_id":"@ederzadravec/super-model-mongo@2.1.4","maintainers":[{"name":"ezadravec","email":"ederzadravec@gmail.com"}],"homepage":"https://github.com/ederzadravec/super-model-mongo#readme","bugs":{"url":"https://github.com/ederzadravec/super-model-mongo/issues"},"dist":{"shasum":"78edc06fee1cd223a72dc354bc0cc0577bff8598","tarball":"https://registry.npmjs.org/@ederzadravec/super-model-mongo/-/super-model-mongo-2.1.4.tgz","fileCount":15,"integrity":"sha512-TD3NSSYy0Ekv2BVFSul7z6+hvz4yrJR5wMDbTI4nsKIQsNhrspt78HjwhhLWx2t5WwIEzs7xXdjLzUGbxHGzYg==","signatures":[{"sig":"MEUCIFDrYSCX6Ep5yBtEiQsg6eRv356+ly7W/iLroXyLYVOdAiEAzIsJyVtNW2Nis7iqjK0J3g6du0pAajuJhnZ5mAz/Gjo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45763},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=12.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"ea661bd8f12df7e3e4552f7453efeb26d47c2164","private":false,"scripts":{"lint":"tslint 'src/**/*.ts'","test":"jest","build":"tsc && yarn copy-dts","clean":"rm -rf dist","copy-dts":"cp -R src/*.d.ts dist/","lint:fix":"tslint 'src/**/*.ts' --fix","test:watch":"jest --watch","test:coverage":"jest --coverage","prepublishOnly":"yarn clean && yarn build"},"_npmUser":{"name":"ezadravec","email":"ederzadravec@gmail.com"},"repository":{"url":"git+ssh://git@github.com/ederzadravec/super-model-mongo.git","type":"git"},"_npmVersion":"11.6.2","description":"A powerful MongoDB wrapper with enhanced functionality for nested documents and complex queries","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ramda":"^0.27.1","objectid":"^3.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e","devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","mongoose":"^5.11.19","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/ramda":"^0.27.38","@types/mongoose":"^5.10.3"},"peerDependencies":{"mongoose":"^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/super-model-mongo_2.1.4_1763999288023_0.07038958122830707","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@ederzadravec/super-model-mongo","version":"2.2.0","keywords":["mongodb","mongoose","nested-documents","aggregation","crud","typescript","database","query-builder"],"author":{"name":"Éder Zadravec","email":"ederzadravec@gmail.com"},"license":"MIT","_id":"@ederzadravec/super-model-mongo@2.2.0","maintainers":[{"name":"ezadravec","email":"ederzadravec@gmail.com"}],"homepage":"https://github.com/ederzadravec/super-model-mongo#readme","bugs":{"url":"https://github.com/ederzadravec/super-model-mongo/issues"},"dist":{"shasum":"d8ab8d612b769bb97134ee9ced02745e85d8049f","tarball":"https://registry.npmjs.org/@ederzadravec/super-model-mongo/-/super-model-mongo-2.2.0.tgz","fileCount":16,"integrity":"sha512-/l/T+wNSa86Qpj/Xct9PUruNjHY9OnHr/ECa4CSgB3atnASolLGKdKRHhya8wGPoKJG2BfKKYoKl+kLboM3kbg==","signatures":[{"sig":"MEQCIFg8SbNAfd47Tq9VJR4GjxhOZEs/Dz7hpc2lXs5Q/cKpAiBDTSQRzabSA0aIjWG0Hw1YewRRDzs85lw88+lMtFcbOQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64908},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=12.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"97223cd42bdf24b4e305e864e91c22b0557dd5d7","private":false,"scripts":{"lint":"tslint 'src/**/*.ts'","test":"jest","build":"tsc && yarn copy-dts","clean":"rm -rf dist","copy-dts":"cp -R src/*.d.ts dist/","lint:fix":"tslint 'src/**/*.ts' --fix","test:watch":"jest --watch","test:coverage":"jest --coverage","prepublishOnly":"yarn clean && yarn build"},"_npmUser":{"name":"ezadravec","email":"ederzadravec@gmail.com"},"repository":{"url":"git+ssh://git@github.com/ederzadravec/super-model-mongo.git","type":"git"},"_npmVersion":"11.6.2","description":"A powerful MongoDB wrapper with enhanced functionality for nested documents and complex queries","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ramda":"^0.27.1","objectid":"^3.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e","devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","mongoose":"^5.11.19","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/ramda":"^0.27.38","@types/mongoose":"^5.10.3"},"peerDependencies":{"mongoose":"^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/super-model-mongo_2.2.0_1764034643387_0.039324636198605045","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@ederzadravec/super-model-mongo","version":"2.3.0","keywords":["mongodb","mongoose","nested-documents","aggregation","crud","typescript","database","query-builder"],"author":{"name":"Éder Zadravec","email":"ederzadravec@gmail.com"},"license":"MIT","_id":"@ederzadravec/super-model-mongo@2.3.0","maintainers":[{"name":"ezadravec","email":"ederzadravec@gmail.com"}],"homepage":"https://github.com/ederzadravec/super-model-mongo#readme","bugs":{"url":"https://github.com/ederzadravec/super-model-mongo/issues"},"dist":{"shasum":"8a658b98cf915c5a0520afbaec81fe51d2a8d593","tarball":"https://registry.npmjs.org/@ederzadravec/super-model-mongo/-/super-model-mongo-2.3.0.tgz","fileCount":16,"integrity":"sha512-g1JqmtTELVNVvugfS5YelJ2q1hjRwdi0ajqRlyfG9m38XVnxaW5FyqvKAzZL8lRSvo+t1TSkXtwF81Zs3urlmQ==","signatures":[{"sig":"MEQCIDt83gV2Qfwy3hqxnNd3KosmNVeLijuXbsJtb2SQY/AUAiBVO0j8RBPgQt5TlSidRiUxLSN6+eYdxL0ftpvk4VtgUQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65824},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=12.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"cdbeb1a04ccaf63f609c6924be42dcd829eb2dde","private":false,"scripts":{"lint":"tslint 'src/**/*.ts'","test":"jest","build":"tsc && yarn copy-dts","clean":"rm -rf dist","copy-dts":"cp -R src/*.d.ts dist/","lint:fix":"tslint 'src/**/*.ts' --fix","test:watch":"jest --watch","test:coverage":"jest --coverage","prepublishOnly":"yarn clean && yarn build"},"_npmUser":{"name":"ezadravec","email":"ederzadravec@gmail.com"},"repository":{"url":"git+ssh://git@github.com/ederzadravec/super-model-mongo.git","type":"git"},"_npmVersion":"11.6.2","description":"A powerful MongoDB wrapper with enhanced functionality for nested documents and complex queries","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ramda":"^0.27.1","objectid":"^3.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e","devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","mongoose":"^5.11.19","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/ramda":"^0.27.38","@types/mongoose":"^5.10.3","mongodb-memory-server":"^11.2.0"},"peerDependencies":{"mongoose":"^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/super-model-mongo_2.3.0_1780613535313_0.7279080795443076","host":"s3://npm-registry-packages-npm-production"}},"2.3.1":{"name":"@ederzadravec/super-model-mongo","version":"2.3.1","description":"A powerful MongoDB wrapper with enhanced functionality for nested documents and complex queries","main":"dist/index.js","module":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js","import":"./dist/index.js"}},"repository":{"type":"git","url":"git+ssh://git@github.com/ederzadravec/super-model-mongo.git"},"homepage":"https://github.com/ederzadravec/super-model-mongo#readme","bugs":{"url":"https://github.com/ederzadravec/super-model-mongo/issues"},"author":{"name":"Éder Zadravec","email":"ederzadravec@gmail.com"},"license":"MIT","private":false,"publishConfig":{"access":"public"},"keywords":["mongodb","mongoose","nested-documents","aggregation","crud","typescript","database","query-builder"],"engines":{"node":">=12.0.0"},"scripts":{"build":"tsc && yarn copy-dts","copy-dts":"cp -R src/*.d.ts dist/","clean":"rm -rf dist","prepublishOnly":"yarn clean && yarn build","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","lint":"tslint 'src/**/*.ts'","lint:fix":"tslint 'src/**/*.ts' --fix"},"dependencies":{"objectid":"^3.2.1","ramda":"^0.27.1"},"peerDependencies":{"mongoose":"^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"},"devDependencies":{"@types/jest":"^29.5.0","@types/mongoose":"^5.10.3","@types/ramda":"^0.27.38","jest":"^29.5.0","mongodb-memory-server":"^11.2.0","mongoose":"^5.11.19","ts-jest":"^29.1.0","typescript":"^5.0.0"},"packageManager":"yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e","gitHead":"c2ff04f8cf3633e22b30b752431b38b697fbac82","_id":"@ederzadravec/super-model-mongo@2.3.1","_nodeVersion":"22.17.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-w9fLXjrnELzRlmrskMNIDD4dmmtCOxdMBjdqB2FZvrJmFv8Sed4tb+xYbAgMvt4fyRuz6MYJZO9CX43tS7j6VA==","shasum":"1c5acb147e9ed4229b4b4d756857e5c899c11052","tarball":"https://registry.npmjs.org/@ederzadravec/super-model-mongo/-/super-model-mongo-2.3.1.tgz","fileCount":16,"unpackedSize":65991,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQChV3txC6T57nK+5Y1uY8BWfweu/WUs6jhrVxvV4TI7ewIgaxxaHo/RAC3fX11dPbiG5yDqHeSsMLMxRBA4JvCCNII="}]},"_npmUser":{"name":"ezadravec","email":"ederzadravec@gmail.com"},"directories":{},"maintainers":[{"name":"ezadravec","email":"ederzadravec@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/super-model-mongo_2.3.1_1784562711744_0.24580235189241062"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-12T01:48:26.140Z","modified":"2026-07-20T15:51:52.055Z","2.1.0":"2025-10-12T01:48:26.427Z","2.1.1":"2025-10-12T02:28:49.042Z","2.1.2":"2025-10-12T02:39:02.407Z","2.1.3":"2025-10-12T03:25:07.042Z","2.1.4":"2025-11-24T15:48:08.202Z","2.2.0":"2025-11-25T01:37:23.550Z","2.3.0":"2026-06-04T22:52:15.534Z","2.3.1":"2026-07-20T15:51:51.878Z"},"bugs":{"url":"https://github.com/ederzadravec/super-model-mongo/issues"},"author":{"name":"Éder Zadravec","email":"ederzadravec@gmail.com"},"license":"MIT","homepage":"https://github.com/ederzadravec/super-model-mongo#readme","keywords":["mongodb","mongoose","nested-documents","aggregation","crud","typescript","database","query-builder"],"repository":{"type":"git","url":"git+ssh://git@github.com/ederzadravec/super-model-mongo.git"},"description":"A powerful MongoDB wrapper with enhanced functionality for nested documents and complex queries","maintainers":[{"name":"ezadravec","email":"ederzadravec@gmail.com"}],"readme":"# Super Model Mongo\n\n[English version](README.en.md)\n\nUma camada de serviço para Mongoose que simplifica consultas aninhadas, paginação e manipulação de subdocumentos complexos.\n\n## Sumário\n\n- [Visão Geral](#visão-geral)\n- [Principais Recursos](#principais-recursos)\n- [Instalação](#instalação)\n- [Importação Rápida](#importação-rápida)\n- [Exemplo Inicial](#exemplo-inicial)\n- [Criando a Instância do Serviço](#criando-a-instância-do-serviço)\n- [API do ServiceInstance](#api-do-serviceinstance)\n  - [Operações Básicas](#operações-básicas)\n  - [Utilitários](#utilitários)\n  - [Operações em Caminhos](#operações-em-caminhos)\n- [Sintaxe de Caminhos](#sintaxe-de-caminhos)\n- [Funções Utilitárias](#funções-utilitárias)\n- [Exemplos Completos](#exemplos-completos)\n- [Suporte a TypeScript](#suporte-a-typescript)\n- [Licença](#licença)\n\n## Visão Geral\n\nO Super Model Mongo encapsula um `Model` do Mongoose e fornece uma interface consistente para trabalhar com coleções MongoDB, especialmente quando há documentos aninhados ou arrays grandes que precisam de paginação.\n\n## Principais Recursos\n\n- CRUD com sanitização automática de dados.\n- Paginação baseada em pipeline de agregação com metadados (`total`, `limit`, `page`).\n- Operações em caminhos aninhados com sintaxe declarativa (`itens.id:<ObjectId>.tags`).\n- Hooks opcionais de `populate` ou pós-processamento em todas as respostas.\n- Helpers reutilizáveis para pipelines e updates aninhados.\n- Tipos TypeScript completos para intellisense e segurança de tipos.\n\n## Instalação\n\n```bash\nnpm install @ederzadravec/super-model-mongo\n# ou\nyarn add @ederzadravec/super-model-mongo\n```\n\n## Importação Rápida\n\n```typescript\n// Importação padrão (recomendado)\nimport SuperModelMongo from '@ederzadravec/super-model-mongo';\n\n// Importação nomeada\nimport { createSuperModel } from '@ederzadravec/super-model-mongo';\n\n// Importação com tipos\nimport SuperModelMongo, { ServiceInstance, FindAllResponse } from '@ederzadravec/super-model-mongo';\n```\n\n## Exemplo Inicial\n\n```typescript\nimport mongoose from 'mongoose';\nimport SuperModelMongo from '@ederzadravec/super-model-mongo';\n\nconst UserModel = mongoose.model('User', userSchema);\n\nconst userService = SuperModelMongo(UserModel);\n\nconst users = await userService.findAll(\n  { name: { $regex: 'john', $options: 'i' } },\n  { limit: 10, page: 1, sort: { name: 1 } }\n);\n```\n\n## Criando a Instância do Serviço\n\n```typescript\nconst userService = SuperModelMongo(UserModel, {\n  populate: async (result) => {\n    // Executado em toda resposta que retorna dados\n    return result;\n  },\n});\n```\n\n- `model`: instância de `mongoose.Model` obrigatória.\n- `defaultOptions.populate`: função assíncrona opcional usada para enriquecer ou transformar os dados antes de retorná-los.\n- Retorno: um `ServiceInstance<T>` com todos os métodos listados abaixo.\n\n## API do ServiceInstance\n\n### Operações Básicas\n\n#### `findOne(query?, projection?, options?)`\n\nLocaliza o primeiro documento que corresponde ao `query`.\n`projection` e `options` são repassados para `model.findOne`.\nCaso exista `populate`, o resultado é transformado antes do retorno.\n\n> Retorna: `Promise<T | null>`\n\n```typescript\nconst user = await userService.findOne(\n  { email: 'admin@example.com' },\n  { password: 0 }\n);\n```\n\n**Exemplo de resposta:**\n\n```json\n{\n  \"_id\": \"507f1f77bcf86cd799439011\",\n  \"email\": \"admin@example.com\",\n  \"name\": \"Admin User\",\n  \"role\": \"admin\",\n  \"createdAt\": \"2024-01-15T10:30:00.000Z\"\n}\n```\n\n#### `findAll(query?, options?)`\n\nExecuta um pipeline de agregação que aplica paginação, ordenação e projeção.\n`limit` é limitado entre 1 e 100; `page` padrão é 1.\nResultado inclui `data`, `total`, `page` e `limit`.\n\n> Retorna: `Promise<FindAllResponse<T>>`\n\n```typescript\nconst { data, total, page } = await userService.findAll(\n  { active: true },\n  { limit: 20, page: 2, sort: { createdAt: -1 }, project: { password: 0 } }\n);\n```\n\n**Exemplo de resposta:**\n\n```json\n{\n  \"data\": [\n    {\n      \"_id\": \"507f1f77bcf86cd799439011\",\n      \"name\": \"João Silva\",\n      \"active\": true,\n      \"createdAt\": \"2024-01-15T10:30:00.000Z\"\n    },\n    {\n      \"_id\": \"507f1f77bcf86cd799439012\",\n      \"name\": \"Maria Santos\",\n      \"active\": true,\n      \"createdAt\": \"2024-01-14T08:20:00.000Z\"\n    }\n  ],\n  \"total\": 45,\n  \"page\": 2,\n  \"limit\": 20\n}\n```\n\n#### `create(data?)`\n\nRemove chaves com `undefined` usando `removeUndefined` antes de persistir.\nÚtil quando payloads vêm de forms ou APIs com campos opcionais.\n\n> Retorna: `Promise<T>`\n\n```typescript\nconst newUser = await userService.create({ name: 'Sofia', role: undefined, metadata: { age: 30 } });\n```\n\n**Exemplo de resposta:**\n\n```json\n{\n  \"_id\": \"507f1f77bcf86cd799439013\",\n  \"name\": \"Sofia\",\n  \"metadata\": {\n    \"age\": 30\n  },\n  \"createdAt\": \"2024-01-20T14:25:00.000Z\",\n  \"__v\": 0\n}\n```\n\n#### `update(query?, data?)`\n\nExecuta `model.updateOne` com o filtro informado.\nPayload tem `undefined` removidos automaticamente.\n\n> Retorna: `Query<UpdateResult, T>`\n\n```typescript\nconst result = await userService.update({ _id: userId }, { lastLogin: new Date() });\n```\n\n**Exemplo de resposta:**\n\n```json\n{\n  \"acknowledged\": true,\n  \"matchedCount\": 1,\n  \"modifiedCount\": 1,\n  \"upsertedCount\": 0,\n  \"upsertedId\": null\n}\n```\n\n#### `remove(query?)`\n\nEncaminha para `model.remove` e retorna o resultado bruto do MongoDB.\n\n> Retorna: `Query<UpdateResult, T>`\n\n```typescript\nconst result = await userService.remove({ email: 'temp@example.com' });\n```\n\n**Exemplo de resposta:**\n\n```json\n{\n  \"acknowledged\": true,\n  \"deletedCount\": 1\n}\n```\n\n### Utilitários\n\n#### `aggregate(pipeline)`\n\nProxy direto para `model.aggregate` para cenários customizados.\n\n> Retorna: `Aggregate<unknown[]>`\n\n```typescript\nconst stats = await userService.aggregate([\n  { $match: { active: true } },\n  { $group: { _id: '$role', count: { $sum: 1 } } },\n]);\n```\n\n**Exemplo de resposta:**\n\n```json\n[\n  { \"_id\": \"admin\", \"count\": 5 },\n  { \"_id\": \"user\", \"count\": 38 },\n  { \"_id\": \"manager\", \"count\": 2 }\n]\n```\n\n#### `hasAny(fields?, exclude?)`\n\nVerifica colisões de campos (e.g. email duplicado) usando `$or`.\n`exclude` aceita um `_id` em string para ignorar o próprio registro.\n\n> Retorna: `Promise<string[]>`\n\n```typescript\nconst conflicts = await userService.hasAny(\n  { email: 'john@example.com', username: 'johnny' },\n  '653cfa2c10ed3f00f1c15e5b'\n);\nif (conflicts.length) {\n  throw new Error(`Campos já utilizados: ${conflicts.join(', ')}`);\n}\n```\n\n**Exemplo de resposta:**\n\n```json\n[\"email\"]\n```\n\n### Operações em Caminhos\n\nAs funções abaixo trabalham sobre subdocumentos identificados via caminho (veja a sintaxe na próxima seção).\n\n#### `findOnePath(query?, path)`\n\nRetorna o primeiro subdocumento encontrado.\n\n> Retorna: `Promise<R | null>`\n\n```typescript\nconst item = await userService.findOnePath({ _id: userId }, 'items.id:item1');\n```\n\n**Exemplo de resposta:**\n\n```json\n{\n  \"_id\": \"507f1f77bcf86cd799439020\",\n  \"name\": \"Item 1\",\n  \"price\": 99.90,\n  \"tags\": [\"electronics\", \"sale\"]\n}\n```\n\n#### `findAllPath(query?, path, options?)`\n\nPagina itens de um array aninhado usando a mesma estratégia de `findAll`.\n\n> Retorna: `Promise<FindAllResponse<R>>`\n\n```typescript\nconst purchases = await userService.findAllPath(\n  { _id: userId },\n  'purchases',\n  { limit: 5, page: 2, sort: { createdAt: -1 } }\n);\n```\n\n**Exemplo de resposta:**\n\n```json\n{\n  \"data\": [\n    {\n      \"_id\": \"507f1f77bcf86cd799439030\",\n      \"product\": \"Notebook\",\n      \"amount\": 2500.00,\n      \"createdAt\": \"2024-01-18T16:45:00.000Z\"\n    },\n    {\n      \"_id\": \"507f1f77bcf86cd799439031\",\n      \"product\": \"Mouse\",\n      \"amount\": 50.00,\n      \"createdAt\": \"2024-01-17T10:30:00.000Z\"\n    }\n  ],\n  \"total\": 12,\n  \"page\": 2,\n  \"limit\": 5\n}\n```\n\n#### `createPath(query?, path, data)`\n\nAdiciona um novo item a um array aninhado com `$push`.\n\n> Retorna: `Promise<UpdateResult>`\n\n```typescript\nconst result = await userService.createPath({ _id: userId }, 'items', { name: 'Novo item', price: 15 });\n```\n\n**Exemplo de resposta:**\n\n```json\n{\n  \"acknowledged\": true,\n  \"matchedCount\": 1,\n  \"modifiedCount\": 1,\n  \"upsertedCount\": 0,\n  \"upsertedId\": null\n}\n```\n\n#### `updatePath(query?, path, data)`\n\nAtualiza campos de um subdocumento usando `$set` com `arrayFilters` geradas automaticamente.\n\n> Retorna: `Promise<UpdateResult>`\n\n```typescript\nconst result = await userService.updatePath({ _id: userId }, 'items.id:item1', { name: 'Item atualizado' });\n```\n\n**Exemplo de resposta:**\n\n```json\n{\n  \"acknowledged\": true,\n  \"matchedCount\": 1,\n  \"modifiedCount\": 1,\n  \"upsertedCount\": 0,\n  \"upsertedId\": null\n}\n```\n\n#### `removePath(query?, path)`\n\nRemove o subdocumento correspondente utilizando `$pull`.\n\n> Retorna: `Promise<UpdateResult>`\n\n```typescript\nconst result = await userService.removePath({ _id: userId }, 'items.id:item1');\n```\n\n**Exemplo de resposta:**\n\n```json\n{\n  \"acknowledged\": true,\n  \"matchedCount\": 1,\n  \"modifiedCount\": 1,\n  \"upsertedCount\": 0,\n  \"upsertedId\": null\n}\n```\n\n## Sintaxe de Caminhos\n\nA sintaxe aceita segmentos separados por ponto (`.`). Segmentar por `id:<ObjectId>` filtra itens por `_id`.\n\n```typescript\n'items'                             // Array superior\n'items.id:60f1b2b3c4a5d6e7f8f9a0b'   // Item específico\n'items.id:... .tags.id:...'          // Subdocumento dentro de subdocumento\n```\n\nO helper valida automaticamente cada ObjectId, gera `$match`/`$unwind` para agregações e `arrayFilters` para updates.\n\n## Funções Utilitárias\n\n- `removeUndefined(data)`: limpa objetos/arrays ignorando valores que já são `ObjectId`.\n- `getAggregationPath(path)`: transforma o caminho em estágios de agregação (`$match`, `$unwind`, `$replaceRoot`).\n- `getUpdatePath(type, path, data?)`: cria a combinação de operação (`$push`, `$set`, `$pull`) e `arrayFilters` usada pelos métodos de caminho.\n\n## Exemplos Completos\n\n### Paginando comentários de um post\n\n```typescript\nconst comments = await postService.findAllPath(\n  { _id: postId },\n  'comments',\n  { limit: 10, page: 3, sort: { createdAt: -1 } }\n);\n```\n\n**Exemplo de resposta:**\n\n```json\n{\n  \"data\": [\n    {\n      \"_id\": \"507f1f77bcf86cd799439040\",\n      \"author\": \"Maria Silva\",\n      \"text\": \"Excelente post!\",\n      \"createdAt\": \"2024-01-19T15:20:00.000Z\"\n    },\n    {\n      \"_id\": \"507f1f77bcf86cd799439041\",\n      \"author\": \"Carlos Santos\",\n      \"text\": \"Muito útil, obrigado!\",\n      \"createdAt\": \"2024-01-19T14:10:00.000Z\"\n    }\n  ],\n  \"total\": 47,\n  \"page\": 3,\n  \"limit\": 10\n}\n```\n```\n\n### Atualizando um endereço específico do usuário\n\n```typescript\nconst result = await userService.updatePath(\n  { _id: userId },\n  'addresses.id:64f1c2d3e4f5a6b7c8d9e0f1',\n  { label: 'Endereço Principal', city: 'São Paulo' }\n);\n```\n\n**Exemplo de resposta:**\n\n```json\n{\n  \"acknowledged\": true,\n  \"matchedCount\": 1,\n  \"modifiedCount\": 1,\n  \"upsertedCount\": 0,\n  \"upsertedId\": null\n}\n```\n```\n\n## Suporte a TypeScript\n\n```typescript\nimport superModel, { ServiceInstance, FindAllResponse } from '@ederzadravec/super-model-mongo';\n\n// Interface simples com seus campos de negócio\ninterface User {\n  name: string;\n  email: string;\n  active: boolean;\n}\n\n// Crie seu modelo Mongoose normalmente\nconst UserModel = mongoose.model<User>('User', userSchema);\n\n// Especifique o tipo apenas uma vez no genérico\nconst service: ServiceInstance<User> = superModel<User>(UserModel);\n\n// Todos os métodos retornam o tipo correto\nconst user: User | null = await service.findOne({ email: 'user@example.com' });\nconst result: FindAllResponse<User> = await service.findAll();\nconst newUser: User = await service.create({ name: 'João', email: 'joao@example.com', active: true });\n```\n\n**Principais vantagens:**\n- Não é necessário estender `Document` ou usar tipos complexos\n- Basta especificar sua interface uma vez: `superModel<User>(UserModel)`\n- Todos os métodos retornam o tipo correto automaticamente\n- Funciona com interfaces simples ou interfaces que estendem outros tipos customizados\n\n## Licença\n\nMIT\n//   ]\n","readmeFilename":"README.md"}