{"_id":"@alihamza1020/trends","_rev":"7-441cd89613905477dc31eb7d32dc580c","name":"@alihamza1020/trends","dist-tags":{"latest":"0.0.7"},"versions":{"0.0.1":{"name":"@alihamza1020/trends","version":"0.0.1","license":"MIT","_id":"@alihamza1020/trends@0.0.1","maintainers":[{"name":"alihamza1020","email":"ali.hamza.dev28@gmail.com"}],"dist":{"shasum":"5cfe8aa385a5a294d278e467c6af6a6009c9bb0a","tarball":"https://registry.npmjs.org/@alihamza1020/trends/-/trends-0.0.1.tgz","fileCount":24,"integrity":"sha512-99ecHgDaL/OjkNJ1+43wwCAtlEETkR6hYzjWFmM3waxmJmooSp1YaBTnxPfaIsBOEZrICcjE9/YfX5tcs1mP2Q==","signatures":[{"sig":"MEUCIH5dakBSo8a5ZaEzS+nRULAfIMzak+1AuYaPFisPo3nUAiEAlf423vYfZVNQ7JZxYv/46v2Fs3fV7zbnMj9rI5m6gS4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25699},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"941fc4b241a6a56b2589fa488b1bf4c78f2b9443","scripts":{"lint":"eslint \"{src,apps,libs,test}/**/*.ts\" --fix","test":"jest","build":"nest build","start":"nest start","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","test:cov":"jest --coverage","test:e2e":"jest --config ./test/jest-e2e.json","start:dev":"nest start --watch","start:prod":"node dist/main","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","start:debug":"nest start --debug --watch"},"_npmUser":{"name":"alihamza1020","email":"ali.hamza.dev28@gmail.com"},"_npmVersion":"11.16.0","description":"Reusable NestJS trends module backed by MongoDB","directories":{},"_nodeVersion":"24.18.0","dependencies":{"rxjs":"^7.8.1","axios":"^1.19.0","luxon":"^3.7.2","bcrypt":"^6.0.0","mongoose":"^9.0.0","passport":"^0.7.0","@nestjs/jwt":"^11.0.2","@nestjs/core":"^11.0.1","passport-jwt":"^4.0.1","@nestjs/axios":"^4.0.1","@types/bcrypt":"^6.0.0","cookie-parser":"^1.4.7","@nestjs/common":"^11.0.0","@nestjs/config":"^4.0.4","@nestjs/swagger":"^11.4.6","class-validator":"^0.15.1","@nestjs/mongoose":"^11.0.0","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","@nestjs/throttler":"^6.5.0","class-transformer":"^0.5.1","swagger-ui-express":"^5.0.1","@nestjs/mapped-types":"^2.1.1","@types/cookie-parser":"^1.4.10","@nestjs/platform-express":"^11.0.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^9.18.0","globals":"^17.0.0","ts-jest":"^29.2.5","ts-node":"^10.9.2","prettier":"^3.4.2","supertest":"^7.0.0","ts-loader":"^9.5.2","@eslint/js":"^9.18.0","typescript":"^5.7.3","@nestjs/cli":"^11.0.0","@types/jest":"^30.0.0","@types/node":"^24.0.0","@types/luxon":"^3.7.4","@types/express":"^5.0.0","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.0.1","@eslint/eslintrc":"^3.2.0","@types/supertest":"^7.0.0","typescript-eslint":"^8.20.0","@nestjs/schematics":"^11.0.0","source-map-support":"^0.5.21","eslint-config-prettier":"^10.0.1","eslint-plugin-prettier":"^5.2.2"},"peerDependencies":{"mongoose":"^9.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.15.1","@nestjs/mongoose":"^11.0.0","class-transformer":"^0.5.1"},"_npmOperationalInternal":{"tmp":"tmp/trends_0.0.1_1788438567864_0.45097985990916034","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@alihamza1020/trends","version":"0.0.2","license":"MIT","_id":"@alihamza1020/trends@0.0.2","maintainers":[{"name":"alihamza1020","email":"ali.hamza.dev28@gmail.com"}],"dist":{"shasum":"9305258cdcff6a6ea5aebfbb27297b05dda8973d","tarball":"https://registry.npmjs.org/@alihamza1020/trends/-/trends-0.0.2.tgz","fileCount":24,"integrity":"sha512-lue/yq8lwF85oDaCByhpODRWfWarNuH0urIHylCa+zJWDZOkt3KX2EhD96WBwDOMPHrGpVIMKVP70QJxEkgHTw==","signatures":[{"sig":"MEQCIEOrH1te31vcLAy1r58PU9MTdjIZ8nY1QTuRbbsIXOK4AiARJYyeBDVcjkKgvJZux/wkV6SMpiOZ2vZ94qRH9nO+Hg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25838},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"941fc4b241a6a56b2589fa488b1bf4c78f2b9443","scripts":{"lint":"eslint \"{src,apps,libs,test}/**/*.ts\" --fix","test":"jest","build":"nest build","start":"nest start","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","test:cov":"jest --coverage","test:e2e":"jest --config ./test/jest-e2e.json","start:dev":"nest start --watch","start:prod":"node dist/main","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","start:debug":"nest start --debug --watch"},"_npmUser":{"name":"alihamza1020","email":"ali.hamza.dev28@gmail.com"},"_npmVersion":"11.16.0","description":"Reusable NestJS trends module backed by MongoDB","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"rxjs":"^7.8.1","axios":"^1.19.0","luxon":"^3.7.2","bcrypt":"^6.0.0","mongoose":"^9.0.0","passport":"^0.7.0","@nestjs/jwt":"^11.0.2","@nestjs/core":"^11.0.1","passport-jwt":"^4.0.1","@nestjs/axios":"^4.0.1","@types/bcrypt":"^6.0.0","cookie-parser":"^1.4.7","@nestjs/common":"^11.0.0","@nestjs/config":"^4.0.4","@nestjs/swagger":"^11.4.6","class-validator":"^0.15.1","@nestjs/mongoose":"^11.0.0","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","@nestjs/throttler":"^6.5.0","class-transformer":"^0.5.1","swagger-ui-express":"^5.0.1","@nestjs/mapped-types":"^2.1.1","@types/cookie-parser":"^1.4.10","@nestjs/platform-express":"^11.0.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^9.18.0","globals":"^17.0.0","ts-jest":"^29.2.5","ts-node":"^10.9.2","prettier":"^3.4.2","supertest":"^7.0.0","ts-loader":"^9.5.2","@eslint/js":"^9.18.0","typescript":"^5.7.3","@nestjs/cli":"^11.0.0","@types/jest":"^30.0.0","@types/node":"^24.0.0","@types/luxon":"^3.7.4","@types/express":"^5.0.0","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.0.1","@eslint/eslintrc":"^3.2.0","@types/supertest":"^7.0.0","typescript-eslint":"^8.20.0","@nestjs/schematics":"^11.0.0","source-map-support":"^0.5.21","eslint-config-prettier":"^10.0.1","eslint-plugin-prettier":"^5.2.2"},"peerDependencies":{"mongoose":"^9.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.15.1","@nestjs/mongoose":"^11.0.0","class-transformer":"^0.5.1"},"_npmOperationalInternal":{"tmp":"tmp/trends_0.0.2_1788439854109_0.17226133388677733","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@alihamza1020/trends","version":"0.0.3","license":"MIT","_id":"@alihamza1020/trends@0.0.3","maintainers":[{"name":"alihamza1020","email":"ali.hamza.dev28@gmail.com"}],"dist":{"shasum":"38e9bd1eedd63a2bda98bdb31a50a02caab2b26e","tarball":"https://registry.npmjs.org/@alihamza1020/trends/-/trends-0.0.3.tgz","fileCount":24,"integrity":"sha512-71/Ee1BOghFUQrWoO/u00ZdcsT6fIfq/rRU69nxR6TB2MO2zW3Bsm4Q+KmuTewu1qMmEZB8KUIUzNSSQJzTHGQ==","signatures":[{"sig":"MEUCIQDwI3h40JVpqypg1liKhraEgqkGdyzROlsR8XXpqPmakwIgTVpseF7ho942Ztd68O/LBAeeaa4x37c9SQDf7KXgpyQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33949},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"941fc4b241a6a56b2589fa488b1bf4c78f2b9443","scripts":{"lint":"eslint \"{src,apps,libs,test}/**/*.ts\" --fix","test":"jest","build":"nest build","start":"nest start","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","test:cov":"jest --coverage","test:e2e":"jest --config ./test/jest-e2e.json","start:dev":"nest start --watch","start:prod":"node dist/main","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","start:debug":"nest start --debug --watch"},"_npmUser":{"name":"alihamza1020","email":"ali.hamza.dev28@gmail.com"},"_npmVersion":"11.16.0","description":"Reusable NestJS trends module backed by MongoDB","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"rxjs":"^7.8.1","axios":"^1.19.0","luxon":"^3.7.2","bcrypt":"^6.0.0","mongoose":"^9.0.0","passport":"^0.7.0","@nestjs/jwt":"^11.0.2","@nestjs/core":"^11.0.1","passport-jwt":"^4.0.1","@nestjs/axios":"^4.0.1","@types/bcrypt":"^6.0.0","cookie-parser":"^1.4.7","@nestjs/common":"^11.0.0","@nestjs/config":"^4.0.4","@nestjs/swagger":"^11.4.6","class-validator":"^0.15.1","@nestjs/mongoose":"^11.0.0","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","@nestjs/throttler":"^6.5.0","class-transformer":"^0.5.1","swagger-ui-express":"^5.0.1","@nestjs/mapped-types":"^2.1.1","@types/cookie-parser":"^1.4.10","@nestjs/platform-express":"^11.0.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^9.18.0","globals":"^17.0.0","ts-jest":"^29.2.5","ts-node":"^10.9.2","prettier":"^3.4.2","supertest":"^7.0.0","ts-loader":"^9.5.2","@eslint/js":"^9.18.0","typescript":"^5.7.3","@nestjs/cli":"^11.0.0","@types/jest":"^30.0.0","@types/node":"^24.0.0","@types/luxon":"^3.7.4","@types/express":"^5.0.0","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.0.1","@eslint/eslintrc":"^3.2.0","@types/supertest":"^7.0.0","typescript-eslint":"^8.20.0","@nestjs/schematics":"^11.0.0","source-map-support":"^0.5.21","eslint-config-prettier":"^10.0.1","eslint-plugin-prettier":"^5.2.2"},"peerDependencies":{"mongoose":"^9.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.15.1","@nestjs/mongoose":"^11.0.0","class-transformer":"^0.5.1"},"_npmOperationalInternal":{"tmp":"tmp/trends_0.0.3_1788759147095_0.20763971189388464","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@alihamza1020/trends","version":"0.0.4","license":"MIT","_id":"@alihamza1020/trends@0.0.4","maintainers":[{"name":"alihamza1020","email":"ali.hamza.dev28@gmail.com"}],"dist":{"shasum":"c982d4ec9c1c0aadf554769dc85304498da114e8","tarball":"https://registry.npmjs.org/@alihamza1020/trends/-/trends-0.0.4.tgz","fileCount":25,"integrity":"sha512-G7E4JMQMQXJ8e5PVtyqA5MbiynYqkuXTf8D38OoF2ZZ+bHV25K39e0PxTK21KaQb7XGzTtRzLGdLT670p3RySw==","signatures":[{"sig":"MEYCIQDucjqXe8VJNlwvw0TYW5TzIml4hfDwEa5jwtUn2harTAIhAMO3BKIV4pOySDTyeK7tluGm9ALPkRu2/nzG2id/tBqZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38399},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"941fc4b241a6a56b2589fa488b1bf4c78f2b9443","scripts":{"lint":"eslint \"{src,apps,libs,test}/**/*.ts\" --fix","test":"jest","build":"nest build","start":"nest start","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","test:cov":"jest --coverage","test:e2e":"jest --config ./test/jest-e2e.json","start:dev":"nest start --watch","start:prod":"node dist/main","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","start:debug":"nest start --debug --watch"},"_npmUser":{"name":"alihamza1020","email":"ali.hamza.dev28@gmail.com"},"_npmVersion":"11.16.0","description":"Reusable NestJS trends module backed by MongoDB","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"rxjs":"^7.8.1","axios":"^1.19.0","luxon":"^3.7.2","bcrypt":"^6.0.0","mongoose":"^9.0.0","passport":"^0.7.0","@nestjs/jwt":"^11.0.2","@nestjs/core":"^11.0.1","passport-jwt":"^4.0.1","@nestjs/axios":"^4.0.1","@types/bcrypt":"^6.0.0","cookie-parser":"^1.4.7","@nestjs/common":"^11.0.0","@nestjs/config":"^4.0.4","@nestjs/swagger":"^11.4.6","class-validator":"^0.15.1","@nestjs/mongoose":"^11.0.0","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","@nestjs/throttler":"^6.5.0","class-transformer":"^0.5.1","swagger-ui-express":"^5.0.1","@nestjs/mapped-types":"^2.1.1","@types/cookie-parser":"^1.4.10","@nestjs/platform-express":"^11.0.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^9.18.0","globals":"^17.0.0","ts-jest":"^29.2.5","ts-node":"^10.9.2","prettier":"^3.4.2","supertest":"^7.0.0","ts-loader":"^9.5.2","@eslint/js":"^9.18.0","typescript":"^5.7.3","@nestjs/cli":"^11.0.0","@types/jest":"^30.0.0","@types/node":"^24.0.0","@types/luxon":"^3.7.4","@types/express":"^5.0.0","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.0.1","@eslint/eslintrc":"^3.2.0","@types/supertest":"^7.0.0","typescript-eslint":"^8.20.0","@nestjs/schematics":"^11.0.0","source-map-support":"^0.5.21","eslint-config-prettier":"^10.0.1","eslint-plugin-prettier":"^5.2.2"},"peerDependencies":{"mongoose":"^9.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.15.1","@nestjs/mongoose":"^11.0.0","class-transformer":"^0.5.1"},"_npmOperationalInternal":{"tmp":"tmp/trends_0.0.4_1788759322827_0.6203748238966431","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@alihamza1020/trends","version":"0.0.5","license":"MIT","_id":"@alihamza1020/trends@0.0.5","maintainers":[{"name":"alihamza1020","email":"ali.hamza.dev28@gmail.com"}],"dist":{"shasum":"b0a4802dae68e7dca53e0cb3b5126185b495d660","tarball":"https://registry.npmjs.org/@alihamza1020/trends/-/trends-0.0.5.tgz","fileCount":25,"integrity":"sha512-0VnvsuqLzXy/nbHv6xXxMdZZejb6JiZ1OB5QkoBO0KCv5Ngx6EZwwKhWeiWCXY0FHnTh96a7i0cC8U/Wp0nkBA==","signatures":[{"sig":"MEQCIBbBov73qFLXzCcXFnXl3CdT3bKzwyvTKHfrccM7jyBSAiAgWDutJIuiaEngSCtBGaxlsYWs4ZgrPvegQQ4+yqmDXQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38417},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"0be92f65108cd16d8ca81352287a6401bc083f9e","scripts":{"lint":"eslint \"{src,apps,libs,test}/**/*.ts\" --fix","test":"jest","build":"nest build","start":"nest start","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","test:cov":"jest --coverage","test:e2e":"jest --config ./test/jest-e2e.json","start:dev":"nest start --watch","start:prod":"node dist/main","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","start:debug":"nest start --debug --watch"},"_npmUser":{"name":"alihamza1020","email":"ali.hamza.dev28@gmail.com"},"_npmVersion":"11.16.0","description":"Reusable NestJS trends module backed by MongoDB","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"rxjs":"^7.8.1","axios":"^1.19.0","luxon":"^3.7.2","bcrypt":"^6.0.0","mongoose":"^9.0.0","passport":"^0.7.0","@nestjs/jwt":"^11.0.2","@nestjs/core":"^11.0.1","passport-jwt":"^4.0.1","@nestjs/axios":"^4.0.1","@types/bcrypt":"^6.0.0","cookie-parser":"^1.4.7","@nestjs/common":"^11.0.0","@nestjs/config":"^4.0.4","@nestjs/swagger":"^11.4.6","class-validator":"^0.15.1","@nestjs/mongoose":"^11.0.0","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","@nestjs/throttler":"^6.5.0","class-transformer":"^0.5.1","swagger-ui-express":"^5.0.1","@nestjs/mapped-types":"^2.1.1","@types/cookie-parser":"^1.4.10","@nestjs/platform-express":"^11.0.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^9.18.0","globals":"^17.0.0","ts-jest":"^29.2.5","ts-node":"^10.9.2","prettier":"^3.4.2","supertest":"^7.0.0","ts-loader":"^9.5.2","@eslint/js":"^9.18.0","typescript":"^5.7.3","@nestjs/cli":"^11.0.0","@types/jest":"^30.0.0","@types/node":"^24.0.0","@types/luxon":"^3.7.4","@types/express":"^5.0.0","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.0.1","@eslint/eslintrc":"^3.2.0","@types/supertest":"^7.0.0","typescript-eslint":"^8.20.0","@nestjs/schematics":"^11.0.0","source-map-support":"^0.5.21","eslint-config-prettier":"^10.0.1","eslint-plugin-prettier":"^5.2.2"},"peerDependencies":{"mongoose":"^9.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.15.1","@nestjs/mongoose":"^11.0.0","class-transformer":"^0.5.1"},"_npmOperationalInternal":{"tmp":"tmp/trends_0.0.5_1788759682631_0.2626261392664364","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@alihamza1020/trends","version":"0.0.6","license":"MIT","_id":"@alihamza1020/trends@0.0.6","maintainers":[{"name":"alihamza1020","email":"ali.hamza.dev28@gmail.com"}],"dist":{"shasum":"8f941c8824bb4b52a0a9c1862c2e7af3af9eb090","tarball":"https://registry.npmjs.org/@alihamza1020/trends/-/trends-0.0.6.tgz","fileCount":25,"integrity":"sha512-NfTSZqMtulqpU3CwwWCIwBjpXckIZ5I/8Q9ceL6nVr4GCzFEgj0AbIHgT8JY1S7Q7q30CB2EKXFSexU1QBQHyw==","signatures":[{"sig":"MEUCIFIAn/z9Kdh8YgzMslN27rDf31iD2wHu2uTa1mTt8mCYAiEAzc8MaZhoqXd9C3NQRidMQP2KWmUeTguUOw2yPyiued0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38830},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"0be92f65108cd16d8ca81352287a6401bc083f9e","scripts":{"lint":"eslint \"{src,apps,libs,test}/**/*.ts\" --fix","test":"jest","build":"nest build","start":"nest start","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","test:cov":"jest --coverage","test:e2e":"jest --config ./test/jest-e2e.json","start:dev":"nest start --watch","start:prod":"node dist/main","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","start:debug":"nest start --debug --watch"},"_npmUser":{"name":"alihamza1020","email":"ali.hamza.dev28@gmail.com"},"_npmVersion":"11.16.0","description":"Reusable NestJS trends module backed by MongoDB","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"rxjs":"^7.8.1","axios":"^1.19.0","luxon":"^3.7.2","bcrypt":"^6.0.0","mongoose":"^9.0.0","passport":"^0.7.0","@nestjs/jwt":"^11.0.2","@nestjs/core":"^11.0.1","passport-jwt":"^4.0.1","@nestjs/axios":"^4.0.1","@types/bcrypt":"^6.0.0","cookie-parser":"^1.4.7","@nestjs/common":"^11.0.0","@nestjs/config":"^4.0.4","@nestjs/swagger":"^11.4.6","class-validator":"^0.15.1","@nestjs/mongoose":"^11.0.0","@nestjs/passport":"^11.0.5","reflect-metadata":"^0.2.2","@nestjs/throttler":"^6.5.0","class-transformer":"^0.5.1","swagger-ui-express":"^5.0.1","@nestjs/mapped-types":"^2.1.1","@types/cookie-parser":"^1.4.10","@nestjs/platform-express":"^11.0.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","eslint":"^9.18.0","globals":"^17.0.0","ts-jest":"^29.2.5","ts-node":"^10.9.2","prettier":"^3.4.2","supertest":"^7.0.0","ts-loader":"^9.5.2","@eslint/js":"^9.18.0","typescript":"^5.7.3","@nestjs/cli":"^11.0.0","@types/jest":"^30.0.0","@types/node":"^24.0.0","@types/luxon":"^3.7.4","@types/express":"^5.0.0","tsconfig-paths":"^4.2.0","@nestjs/testing":"^11.0.1","@eslint/eslintrc":"^3.2.0","@types/supertest":"^7.0.0","typescript-eslint":"^8.20.0","@nestjs/schematics":"^11.0.0","source-map-support":"^0.5.21","eslint-config-prettier":"^10.0.1","eslint-plugin-prettier":"^5.2.2"},"peerDependencies":{"mongoose":"^9.0.0","@nestjs/common":"^11.0.0","class-validator":"^0.15.1","@nestjs/mongoose":"^11.0.0","class-transformer":"^0.5.1"},"_npmOperationalInternal":{"tmp":"tmp/trends_0.0.6_1788764249949_0.8971969866308769","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@alihamza1020/trends","version":"0.0.7","description":"Reusable NestJS trends module backed by MongoDB","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"sideEffects":false,"license":"MIT","scripts":{"build":"nest build","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","start":"nest start","start:dev":"nest start --watch","start:debug":"nest start --debug --watch","start:prod":"node dist/main","lint":"eslint \"{src,apps,libs,test}/**/*.ts\" --fix","test":"jest","test:watch":"jest --watch","test:cov":"jest --coverage","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:e2e":"jest --config ./test/jest-e2e.json"},"dependencies":{"@nestjs/axios":"^4.0.1","@nestjs/common":"^11.0.0","@nestjs/config":"^4.0.4","@nestjs/core":"^11.0.1","@nestjs/jwt":"^11.0.2","@nestjs/mapped-types":"^2.1.1","@nestjs/mongoose":"^11.0.0","@nestjs/passport":"^11.0.5","@nestjs/platform-express":"^11.0.1","@nestjs/swagger":"^11.4.6","@nestjs/throttler":"^6.5.0","@types/bcrypt":"^6.0.0","@types/cookie-parser":"^1.4.10","axios":"^1.19.0","bcrypt":"^6.0.0","class-transformer":"^0.5.1","class-validator":"^0.15.1","cookie-parser":"^1.4.7","luxon":"^3.7.2","mongoose":"^9.0.0","passport":"^0.7.0","passport-jwt":"^4.0.1","reflect-metadata":"^0.2.2","rxjs":"^7.8.1","swagger-ui-express":"^5.0.1"},"peerDependencies":{"@nestjs/common":"^11.0.0","@nestjs/mongoose":"^11.0.0","class-transformer":"^0.5.1","class-validator":"^0.15.1","mongoose":"^9.0.0"},"devDependencies":{"@eslint/eslintrc":"^3.2.0","@eslint/js":"^9.18.0","@nestjs/cli":"^11.0.0","@nestjs/schematics":"^11.0.0","@nestjs/testing":"^11.0.1","@types/express":"^5.0.0","@types/jest":"^30.0.0","@types/luxon":"^3.7.4","@types/node":"^24.0.0","@types/supertest":"^7.0.0","eslint":"^9.18.0","eslint-config-prettier":"^10.0.1","eslint-plugin-prettier":"^5.2.2","globals":"^17.0.0","jest":"^30.0.0","prettier":"^3.4.2","source-map-support":"^0.5.21","supertest":"^7.0.0","ts-jest":"^29.2.5","ts-loader":"^9.5.2","ts-node":"^10.9.2","tsconfig-paths":"^4.2.0","typescript":"^5.7.3","typescript-eslint":"^8.20.0"},"gitHead":"0be92f65108cd16d8ca81352287a6401bc083f9e","_id":"@alihamza1020/trends@0.0.7","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-eDmb3ZssKevbWFeFeYuo8JDeS0GVIFrKgDzQIOr7wpk5+Adzlbe1cE2JNakG0dqfSVRiDs+9qgNBvp//4wYHOQ==","shasum":"eee3684e28aedbdd9101eb76d9066146a2af0083","tarball":"https://registry.npmjs.org/@alihamza1020/trends/-/trends-0.0.7.tgz","fileCount":25,"unpackedSize":38932,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCCc1db62KwUjoUfgK/ZtEXBmXz3U8rVR3r2hFkKlwKcAIgY/05X15QHByWHPRb97dvAmV6kYtZCcIjw5jrFohZpzA="}]},"_npmUser":{"name":"alihamza1020","email":"ali.hamza.dev28@gmail.com"},"directories":{},"maintainers":[{"name":"alihamza1020","email":"ali.hamza.dev28@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/trends_0.0.7_1788764782763_0.917237072074055"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-03T12:29:27.674Z","modified":"2026-09-07T07:06:23.026Z","0.0.1":"2026-09-03T12:29:28.004Z","0.0.2":"2026-09-03T12:50:54.246Z","0.0.3":"2026-09-07T05:32:27.240Z","0.0.4":"2026-09-07T05:35:22.957Z","0.0.5":"2026-09-07T05:41:22.776Z","0.0.6":"2026-09-07T06:57:30.069Z","0.0.7":"2026-09-07T07:06:22.886Z"},"license":"MIT","description":"Reusable NestJS trends module backed by MongoDB","maintainers":[{"name":"alihamza1020","email":"ali.hamza.dev28@gmail.com"}],"readme":"# @alihamza1020/trends\r\n\r\nReusable NestJS trends module for querying meter data from MongoDB collections.\r\n\r\n## Features\r\n\r\n- Dynamic NestJS module configuration.\r\n- Multiple MongoDB collections queried in parallel and merged by timestamp.\r\n- Configurable daily interval start and end times.\r\n- Configurable interval timezone.\r\n- BSON `Date` timestamps or string timestamps.\r\n- Public TypeScript types and request DTO.\r\n- Uses the consuming application's default Mongoose connection.\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install @alihamza1020/trends @nestjs/mongoose mongoose class-validator class-transformer\r\n```\r\n\r\nThe package expects the consuming application to provide a default Mongoose connection.\r\n\r\n## Configuration\r\n\r\n```ts\r\nimport { Module } from '@nestjs/common';\r\nimport { MongooseModule } from '@nestjs/mongoose';\r\nimport { TrendsModule } from '@alihamza1020/trends';\r\n\r\n@Module({\r\n  imports: [\r\n    MongooseModule.forRoot(process.env.MONGODB_URI!),\r\n    TrendsModule.register({\r\n      collections: ['historical_z1', 'historical_z2'],\r\n      interval: {\r\n        startTime: '06:30',\r\n        endTime: '06:30',\r\n        timezone: 'Asia/Karachi',\r\n      },\r\n      timestamp: {\r\n        field: 'timestamp',\r\n        type: 'date',\r\n      },\r\n    }),\r\n  ],\r\n})\r\nexport class AppModule {}\r\n```\r\n\r\n### Module options\r\n\r\n```ts\r\ninterface TrendsModuleOptions {\r\n  collections: string[];\r\n  interval?: {\r\n    startTime: string;\r\n    endTime?: string;\r\n    timezone: string;\r\n  };\r\n  timestamp?: {\r\n    field: string;\r\n    type: 'date' | 'string';\r\n    timezone?: string;\r\n    format?: string;\r\n  };\r\n}\r\n```\r\n\r\n`startTime` and `endTime` use `HH:mm` format. If `endTime` is omitted, the interval ends at `23:59:59.999` on the requested end date. `00:00` to `00:00` also represents the current calendar day and ends at `23:59:59.999`. For other times, an end time earlier than the start time is treated as the next day.\r\n\r\nDefaults:\r\n\r\n```ts\r\ninterval: {\r\n  startTime: '06:00',\r\n  timezone: 'Asia/Karachi',\r\n}\r\n\r\ntimestamp: {\r\n  field: 'timestamp',\r\n  type: 'date',\r\n}\r\n```\r\n\r\n## Timestamp storage\r\n\r\n### MongoDB BSON Date (recommended)\r\n\r\nUse this when the MongoDB field is stored as a native `Date`:\r\n\r\n```ts\r\ntimestamp: {\r\n  field: 'timestamp',\r\n  type: 'date',\r\n}\r\n```\r\n\r\nThis keeps the date filter index-friendly and is recommended for large collections.\r\n\r\n### String timestamp\r\n\r\nUse this when the MongoDB field contains a date string:\r\n\r\n```ts\r\ntimestamp: {\r\n  field: 'recordedAt',\r\n  type: 'string',\r\n  timezone: 'Asia/Karachi',\r\n  format: '%Y-%m-%d %H:%M:%S',\r\n}\r\n```\r\n\r\nThe `format` uses MongoDB `$dateFromString` format tokens. String timestamps are parsed during aggregation and can be slower than native BSON dates, especially on large collections. Migrate to BSON `Date` where possible.\r\n\r\nISO strings with an embedded offset, such as `2026-06-01T06:00:05+05:00`, are parsed automatically. The package first tries ISO conversion and then falls back to the configured `format`, so a legacy format can remain configured while ISO values are migrated:\r\n\r\n```ts\r\ntimestamp: {\r\n  field: 'timestamp',\r\n  type: 'string',\r\n  timezone: 'Asia/Karachi',\r\n}\r\n```\r\n\r\n## Validation pipe\r\n\r\nEnable NestJS validation in the consuming application:\r\n\r\n```ts\r\nimport { ValidationPipe } from '@nestjs/common';\r\n\r\napp.useGlobalPipes(\r\n  new ValidationPipe({\r\n    whitelist: true,\r\n    forbidNonWhitelisted: true,\r\n    transform: true,\r\n  }),\r\n);\r\n```\r\n\r\n## API\r\n\r\nThe module exposes `POST /trends`.\r\n\r\n### Request body\r\n\r\n```json\r\n{\r\n  \"start_date\": \"2026-09-05\",\r\n  \"end_date\": \"2026-09-06\",\r\n  \"meterIds\": [\"meter_1\", \"meter_2\"],\r\n  \"suffixes\": [\"kwh\", \"voltage\"],\r\n  \"userTimezone\": \"Asia/Karachi\"\r\n}\r\n```\r\n\r\n- `start_date`: required ISO date string.\r\n- `end_date`: required ISO date string.\r\n- `meterIds`: required non-empty string array.\r\n- `suffixes`: required non-empty string array.\r\n- `userTimezone`: optional response/display timezone. If omitted, the authenticated user's timezone is used when available, otherwise `Asia/Karachi`.\r\n\r\n### Response\r\n\r\n```json\r\n{\r\n  \"timezone\": \"Asia/Karachi\",\r\n  \"data\": [\r\n    {\r\n      \"timestamp\": \"2026-09-05T06:00:00\",\r\n      \"meter_1_kwh\": 123.45,\r\n      \"meter_1_voltage\": 230\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\n## UTC midnight-to-midnight example\r\n\r\n```ts\r\nTrendsModule.register({\r\n  collections: ['historical_utc'],\r\n  interval: {\r\n    startTime: '00:00',\r\n    endTime: '00:00',\r\n    timezone: 'UTC',\r\n  },\r\n  timestamp: {\r\n    field: 'timestamp',\r\n    type: 'date',\r\n  },\r\n});\r\n```\r\n\r\n## Build and publish\r\n\r\n```bash\r\nnpm run build\r\nnpm test -- --runInBand\r\nnpm pack --dry-run\r\nnpm publish --access public\r\n```\r\n\r\nPublishing requires npm authentication. For a scoped public package, use `--access public`.\r\n\r\n## Exports\r\n\r\nThe package exports:\r\n\r\n- `TrendsModule`\r\n- `TrendsRequestDto`\r\n- `TrendsModuleOptions`\r\n- `TrendsIntervalOptions`\r\n- `TrendsTimestampOptions`\r\n- `TrendsTimestampType`\r\n- `TrendsResult`\r\n\r\n## License\r\n\r\nMIT\r\n","readmeFilename":"README.md"}