{"_id":"typeorm-query-hooks","_rev":"44-870f4e215aaac55c3afa1f83035c00fb","name":"typeorm-query-hooks","dist-tags":{"latest":"6.5.1"},"versions":{"1.0.0":{"name":"typeorm-query-hooks","version":"1.0.0","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","database","postgres","mysql","sql","table-extraction","monitoring","observability"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@1.0.0","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"dbdb183b6a4be0503f4a78e0aaca5fd218dd2ee8","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-1.0.0.tgz","fileCount":23,"integrity":"sha512-9eJpuxGYBgwJlUWZoDdkZR5Doq1J0yld7Y4+1UwxJm8MB1FUGpa+fFP2iWoBQ0ReHgA3WM3y6MNv5nGneW7xzw==","signatures":[{"sig":"MEUCIQC9De7uUNV/NflCwZsX+U/J8kWoHAqMdNYhDG1bt2tqmwIgcibNp9l1jxLgoysTyuVgl5ibPZvioYyamA2xQhCN8B4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65443},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"4845b202b89cc39f99347695bdd1092c2d9de9ca","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch","prepublishOnly":"npm run lint && npm run test && npm run build"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"A plugin-based extension system for TypeORM QueryBuilder with hooks and table extraction utilities. No import changes needed!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_1.0.0_1764861195719_0.24999765599535362","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"typeorm-query-hooks","version":"1.1.0","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","database","postgres","mysql","sql","table-extraction","monitoring","observability"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@1.1.0","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"6db77b9b03bd3fe2579d48c509b87d77d521a2e8","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-1.1.0.tgz","fileCount":23,"integrity":"sha512-P8hkGX+pMZFqZoIkolzulasn3SyuoCD791IfLRbPWFR7iqIH5kcOMwp3FR0gsaU49L8ZyWVW/q9kM7J5X6rFTw==","signatures":[{"sig":"MEUCIQDPfncKpTUY7egRlSpfSETrRRBkBgpkGkrqfvMTATJWRgIgR3gMO+18Chl6FKo7574U3zSwQXpkkWM4IxlOekr7Uy0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65951},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"a8f72134ecf9576abd12c5e15804c21a3aeb1310","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch","prepublishOnly":"npm run lint && npm run test && npm run build"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"A plugin-based extension system for TypeORM QueryBuilder with hooks and table extraction utilities. No import changes needed!","directories":{},"_nodeVersion":"20.19.6","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_1.1.0_1764863184528_0.7201025711550788","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"typeorm-query-hooks","version":"1.2.0","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","database","postgres","mysql","sql","table-extraction","monitoring","observability"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@1.2.0","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"c0a80e70c03ad0bff4bb01c055bffbba87c09607","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-1.2.0.tgz","fileCount":23,"integrity":"sha512-IkjYeIDFuqbis4nDrsGrkgO164trGRKnE+9NXRiZT4JFKbIum8noAXFcyG/BoS5jysRicWu+rUi0b2b1tH2EUQ==","signatures":[{"sig":"MEUCIAvdsAcGR2ozrUZwg3ifpCnyY9X7v8sazOm+5v07HU0hAiEA5SfWBEs7Al4UDdm2ulbfgzEBkUJHcIz21sVJOwYA9Sw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66049},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"b9030eb2e6c4fed53ccba5befd89ea4a7d16fb60","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch","prepublishOnly":"npm run lint && npm run test && npm run build"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"A plugin-based extension system for TypeORM QueryBuilder with hooks and table extraction utilities. No import changes needed!","directories":{},"_nodeVersion":"20.19.6","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_1.2.0_1764863258966_0.9846455524452542","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"typeorm-query-hooks","version":"2.0.0","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","database","postgres","mysql","sql","table-extraction","monitoring","observability"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@2.0.0","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"1600932fde92bd6fe6a5c1948e012ef9fa3f5ecb","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-2.0.0.tgz","fileCount":23,"integrity":"sha512-12KGUKcqEaakrID3wc3NqKPKnC4TR7OxmefYl4VZ9aT+9FgiTzGloRZ4TT3MHmOsKq0USXILPU474PJup9voUw==","signatures":[{"sig":"MEUCIExITfH9Cq0RsfK0QYihp2OKILdpCdK41rFugTmJoUeZAiEAiKaE0f7fIJK5iDm4nO84Bv1I0BghFz1J0EknOINtlQ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67395},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"c75d30c70cb8c70fb10c5196909972749a00390e","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch","prepublishOnly":"npm run lint && npm run test && npm run build"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"A plugin-based extension system for TypeORM QueryBuilder with hooks and table extraction utilities. No import changes needed!","directories":{},"_nodeVersion":"20.19.6","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_2.0.0_1765035019381_0.010259414171065462","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"typeorm-query-hooks","version":"2.1.0","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","database","postgres","mysql","sql","table-extraction","monitoring","observability"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@2.1.0","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"a586934007498b9c4b3db7d25ceb01046e3ae241","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-2.1.0.tgz","fileCount":23,"integrity":"sha512-f6unDIuH1Df2nHl41uH26KpycoRKiK7p5tsomaBnunCUwYJpdINY2tipwG8RSMRHjI1ElBJsM1gufU9sbplx5g==","signatures":[{"sig":"MEUCIQDvZb8MEPUKz99RESFwBK4aFXJzjMPW7yJDnPs6wX7NjQIgAsbmI2e+BFLNVxOTmFgN12bo9SK3wUKrNm8yRXyAu2w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67771},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"5a0bcb263c3365525d090c8b703713b5088bb2b2","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch","prepublishOnly":"npm run lint && npm run test && npm run build"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"A plugin-based extension system for TypeORM QueryBuilder with hooks and table extraction utilities. No import changes needed!","directories":{},"_nodeVersion":"20.19.6","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_2.1.0_1765035096360_0.8713824198776594","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"typeorm-query-hooks","version":"2.2.0","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","database","postgres","mysql","sql","table-extraction","monitoring","observability"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@2.2.0","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"e29dcf1fea04d86862cb8f5ca121bc6d448bb2d0","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-2.2.0.tgz","fileCount":27,"integrity":"sha512-W/j3TLItzgMphvyuZtETYa15u6c3xNeNEtn6qlkC90uxefOUMKWmIJx1IL8XVbIdL9qggE5LC+vR1yjl1AMPrA==","signatures":[{"sig":"MEUCIQCDSOQ+MlxY+vYR6RZbVJGw2KbJF787S1Gw/XCUeJX6QAIgXcZmT97WuAN/zMMcdnGNO45v23Y/WHqYqzBirJGMTM4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70524},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"}},"gitHead":"769c2cfce7a155535bed5464775a012a93d2df83","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch","prepublishOnly":"npm run lint && npm run test && npm run build"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"A plugin-based extension system for TypeORM QueryBuilder with hooks and table extraction utilities. No import changes needed!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_2.2.0_1765039295212_0.0707895097230451","host":"s3://npm-registry-packages-npm-production"}},"2.2.2":{"name":"typeorm-query-hooks","version":"2.2.2","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","database","postgres","mysql","sql","table-extraction","monitoring","observability"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@2.2.2","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"0f4b492737c05040a750c1c6ff0f5e9cea25c2a6","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-2.2.2.tgz","fileCount":31,"integrity":"sha512-5aGe5tWJX97hK+l07CKk9fIqqqK5ZDDDLJ7r5UJ20KoCAtX3CtYo6Gu7xwBnR5Xi8K7oth8wgrijmWor5wcEsA==","signatures":[{"sig":"MEUCIGPfzrM8FxHl14Z0ayKg7+s5pux6UbTnO6JVjOvXVifKAiEA/R3NUFaEG1hSKcCsOea65NXoVqKv+xpV881SJCbGIGc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73501},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"64554b47b5930ac16de897fa709e067a026e9954","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"A plugin-based extension system for TypeORM QueryBuilder with hooks and table extraction utilities. No import changes needed!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_2.2.2_1765092593192_0.4432480437027979","host":"s3://npm-registry-packages-npm-production"}},"2.2.3":{"name":"typeorm-query-hooks","version":"2.2.3","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","database","postgres","mysql","sql","table-extraction","monitoring","observability"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@2.2.3","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"457aa55f2a9c83e11359d7577e31a60d9038772d","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-2.2.3.tgz","fileCount":31,"integrity":"sha512-AE8opldo10DLZXzgqg/afpxlDOOsxVEHgbMuox8J2RStEfRv6KMV3xk2O6Uwuxt011FXEF9tncnkc8pQD24nEw==","signatures":[{"sig":"MEUCIFhPDRvn+xqMnBSbRApF314XuLR48rJmM+HICGxHSipKAiEAkum2KXi1PbzoXsawNYBPnSu82TbRthUFRu0voAqM+Yo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73501},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"b1ccd7f9ba285c84b93457de7055bcd7504c487e","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"A plugin-based extension system for TypeORM QueryBuilder with hooks and table extraction utilities. No import changes needed!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_2.2.3_1765093133752_0.900021110228413","host":"s3://npm-registry-packages-npm-production"}},"2.2.4":{"name":"typeorm-query-hooks","version":"2.2.4","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","database","postgres","mysql","sql","table-extraction","monitoring","observability"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@2.2.4","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"26f8fce04efdd06e9fcc4e0a70fe8c7d5e48872e","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-2.2.4.tgz","fileCount":31,"integrity":"sha512-kkwySxJy5T2E8Jv4Z8BhC4vG3qjN0svWum8I9nKQKyASw3ed8rjSpTck8RiIwqjTXZ/tDKS20efbH7x2AvnctQ==","signatures":[{"sig":"MEYCIQCGqceBOzVlAxIzW756RbHIUZ4K2Cyt82NeHDPe5pUfnwIhAKYDT32j3A+2alJyUBfNsmVHfbe9Tg+0Fm3fY+CkpDJw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73938},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"}},"gitHead":"6c039481a6ef868091ea91dcc462f6f909bd0e47","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"A plugin-based extension system for TypeORM QueryBuilder with hooks and table extraction utilities. No import changes needed!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_2.2.4_1765093301778_0.8817629955184032","host":"s3://npm-registry-packages-npm-production"}},"2.2.5":{"name":"typeorm-query-hooks","version":"2.2.5","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","database","postgres","mysql","sql","table-extraction","monitoring","observability"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@2.2.5","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"df61f699e1c39f703097c96b54ede9175b2d4228","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-2.2.5.tgz","fileCount":31,"integrity":"sha512-jDcnP9cEvRIysxNdISb8FeWEBmLgGZoru4IT30LhExHY/60DsO8y4GsEMsbKFXh5UbHyThTbcLSICcB7p4vZ8g==","signatures":[{"sig":"MEYCIQCBbrWrFRJu338UYij1b71ky1Bh/jt9yBasSPENVfwUqgIhAKsbpxl30tgFaL1rPqjB/8CYt6GV/fL99tjJhqBeKIk6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":74563},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"}},"gitHead":"2ee34e2d6eeaff6520825852111c500f0b3c0a16","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"A plugin-based extension system for TypeORM QueryBuilder with hooks and table extraction utilities. No import changes needed!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_2.2.5_1765093523642_0.9288952391906162","host":"s3://npm-registry-packages-npm-production"}},"2.2.6":{"name":"typeorm-query-hooks","version":"2.2.6","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","database","postgres","mysql","sql","table-extraction","monitoring","observability"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@2.2.6","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"bacd018fbd205cbb1f8b6a915a86b77973ca5b56","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-2.2.6.tgz","fileCount":31,"integrity":"sha512-gGEyPkOVqrhg/Y+1Pt0Q+Se3HMqTrKRjemWr8GWoevNvKm9tjZgG9P0zoocuL143bOKlnPNeUcBpVwztkEey9g==","signatures":[{"sig":"MEYCIQCOum4O6fg8pJ60c7Gqwyz+gcHuPdE65ZowrzUq1Ccs+gIhALGkaksrEQdpqkUoLmoGqUw5XF5lBAtyOkGpxbHnntMz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75096},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"}},"gitHead":"b91247dc30c479ede93c83ccdeb161e91112fe36","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"A plugin-based extension system for TypeORM QueryBuilder with hooks and table extraction utilities. No import changes needed!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_2.2.6_1765093770619_0.0110322300476553","host":"s3://npm-registry-packages-npm-production"}},"2.2.7":{"name":"typeorm-query-hooks","version":"2.2.7","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","database","postgres","mysql","sql","table-extraction","monitoring","observability"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@2.2.7","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"48c2a74e91b5363acd4f2727055b546c27b6e23e","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-2.2.7.tgz","fileCount":31,"integrity":"sha512-m04RskaBbTnodYo3KeygIHfv7e0fQ8G4wyBJ37OMPB1PXMn0iwcHC9CUY1BONandJT9SiUxEpCKhbExvi0zvzQ==","signatures":[{"sig":"MEQCIFt3IVVtWCsnwKvEy37btCvmBthzkMnuO1L98q9TaQyIAiAgUOE0Qnj6cbZ8whMRDI7SMWGT6DU1oRFblotDBlfMVA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75581},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"}},"gitHead":"fa47c934fd0953e366ca50233ef61a59b7663b75","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"A plugin-based extension system for TypeORM QueryBuilder with hooks and table extraction utilities. No import changes needed!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_2.2.7_1765093923778_0.22874187882152563","host":"s3://npm-registry-packages-npm-production"}},"2.2.8":{"name":"typeorm-query-hooks","version":"2.2.8","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","database","postgres","mysql","sql","table-extraction","monitoring","observability"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@2.2.8","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"fb96bb8aca02cbcb8e5672471aba2e12e07fc2e0","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-2.2.8.tgz","fileCount":31,"integrity":"sha512-mVwci02fJbYE6wbv0NUaOXFsMi/j5KjPqhngVGfRp9V3950HJNLPtv5F5Q4o0QWkJ/3SvA2pPXJgtG0wS8kZEQ==","signatures":[{"sig":"MEUCIGL4Epv9Td0pz2e0dyQ4+mHkN56y7/Pp+igNQ4Gfj5CoAiEA8KlU+qhsJOZlDVKR6xY8x5jBFSeoFoQjqNpBs5IoiUI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75388},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"}},"gitHead":"25c0d190a5755f523aa8e6850eebf16dd7f8bac5","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"A plugin-based extension system for TypeORM QueryBuilder with hooks and table extraction utilities. No import changes needed!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_2.2.8_1765094096350_0.8149125151237446","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"typeorm-query-hooks","version":"3.0.0","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","database","postgres","mysql","sql","table-extraction","monitoring","observability"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@3.0.0","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"c47b3f918a100bacf8f90c0e511d7c71b887a3ce","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-3.0.0.tgz","fileCount":31,"integrity":"sha512-z+wVCpWhlzGQD3SjBio29xzQj8g3ntrv5Gxlj/B+Tonuw28MEHpJUaI1JlMClW0CK4/necj1r3WkUzFHrRDHlw==","signatures":[{"sig":"MEUCIBNh+ngBoqiNnDx5c6vnyAy+F6CzMi2n2uA3fuw0x4JJAiEA4cbq8S+0nCPYDJza8D27n6H+dfTxfOISzALHpx1g0Dk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75963},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"}},"gitHead":"83682688a38ce4d2c41a6e1069b83e93306db311","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"A plugin-based extension system for TypeORM QueryBuilder with hooks and table extraction utilities. No import changes needed!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_3.0.0_1765094218426_0.3911718840779874","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"typeorm-query-hooks","version":"3.0.1","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","database","postgres","mysql","sql","table-extraction","monitoring","observability"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@3.0.1","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"55487fad2d650c76e76cf7bd08c19cd696898239","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-3.0.1.tgz","fileCount":31,"integrity":"sha512-kyloD82JAlnENqAMJfk/3kky5bSPgruuHNJkrYhTaon3NFjDotIwOwJ+FtiXpAogG7CtlZ8YRRKvYv3c00DtJQ==","signatures":[{"sig":"MEUCIBCzvKoAtVohykexCWunHo+ClQciC/73FIu8curogY0xAiEAj23HvNdQo2YAViOrhr01g4L6s7FwgQhDWQKaH/RLASw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":74054},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"}},"gitHead":"44a4dbb842aa927ed760ce4267ab6c90effe2249","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"A plugin-based extension system for TypeORM QueryBuilder with hooks and table extraction utilities. No import changes needed!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_3.0.1_1765094484465_0.5153299040861126","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"typeorm-query-hooks","version":"3.1.0","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","database","postgres","mysql","sql","table-extraction","monitoring","observability"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@3.1.0","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"ec16f5b0a32f81397d22e81ba1dd92bde3ae31c1","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-3.1.0.tgz","fileCount":31,"integrity":"sha512-H9rDGuVLa7L1G1G6CeLKCIsvz/Z5LGLsYSZRad9J3CxlwPnXb4Ex8AkYFZ07s5ucNJLfPkFNGJPuPPpSIRm2Lw==","signatures":[{"sig":"MEYCIQDXgK1+6F8DgSKDktMwJNuMs+esoLruKDtPBx9GBvBMOAIhAOG5Ib6z0NarlS0fPCDlD1Fuzrxmovhgt+Xc+nYiplm9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77692},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"}},"gitHead":"ef46a6e456d426d38c5e057a75722a65831a2a5c","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"A plugin-based extension system for TypeORM QueryBuilder with hooks and table extraction utilities. No import changes needed!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_3.1.0_1765094637721_0.04024492899049448","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"typeorm-query-hooks","version":"4.0.0","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@4.0.0","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"c8065d5585283027f740c8dc3aaf882520d1522b","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-4.0.0.tgz","fileCount":43,"integrity":"sha512-PV2PQSy9ahs96s4uCwYAX4FOUKV9L8xgsBBUvy3JXsWZsNdtud4zzVDKi0SYghEGNjl8NG7ritOOUz5+IllqpQ==","signatures":[{"sig":"MEUCIQCEGJs62Fr0DydPVCo2AQYvQOwgRB5nAoCU0tagx376pAIgKNGG62o+VW45/RDtIVUJxuQKEVu3NY6Z6m1IEMpQy/I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":128690},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"}},"gitHead":"870e573a9030a7f3af73768947d577704176e610","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_4.0.0_1765109408164_0.5713333154739995","host":"s3://npm-registry-packages-npm-production"}},"4.1.0":{"name":"typeorm-query-hooks","version":"4.1.0","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@4.1.0","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"89c95e000007ea57dddcaed35c324d9a24978110","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-4.1.0.tgz","fileCount":43,"integrity":"sha512-joXmInkn+EIEOXsLwGMgRfnBt8o8ama3xBBCloYSR4tqyicVyxnRngnUauKtg1HeHmGK7LQrtsmi0SKcz3IVyQ==","signatures":[{"sig":"MEQCIH7wJnt9IbIEsEpTp6qRzd5R3Mj3k3DimzkzKV4dqRypAiBvfYapEQJDRRKz66xFJJOZfSFC9qsNT2o1IzgYUXKLLA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":135356},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"}},"gitHead":"6e485bdf4db1ff84a8cda72c8382a7189b6e6f76","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_4.1.0_1765110028758_0.5765107305683292","host":"s3://npm-registry-packages-npm-production"}},"4.3.0":{"name":"typeorm-query-hooks","version":"4.3.0","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@4.3.0","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"56d46cb855fece8d298a1f562f038df742de7ac6","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-4.3.0.tgz","fileCount":59,"integrity":"sha512-sO3TNaSdLRY9tEBAJXtIg3viEn5BDFuCrp3Itrv+uFNMqTMPsdzXWmlShJxBdhubPKKiZ7GyyGAwGAtc6Ifk0A==","signatures":[{"sig":"MEUCIQCMoM3b8IuLoKDJo8If19UUc1G3zNdj+CS60QBEXNabLAIgHBd9mV6X2vbPn3Fk3hBWcCCWztPKLZC/u6I09OL2aIs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":190600},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"}},"gitHead":"51fd0e14edd4a8701cb81061e17f1c2b370daeb3","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_4.3.0_1765110551173_0.17599665765764994","host":"s3://npm-registry-packages-npm-production"}},"5.0.0":{"name":"typeorm-query-hooks","version":"5.0.0","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@5.0.0","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"5b84d738fc4bc23301cbac02984f77772a47bfe5","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-5.0.0.tgz","fileCount":95,"integrity":"sha512-95zPUtsgfR8bHtAIQBPbb1lokVIsOVG1WD4sd8ZaZBLgvH/MqUS3NsYsEgy3s409zsRZcCPnGxoxhV2bA4k2lQ==","signatures":[{"sig":"MEUCIAH8/wMp+K8giBG5m2gwaIERpQC+rQqj0rA4dAyhgfuqAiEA8AMjRiW7UaQssrnDrh3rF8plIQqnuTR4rMmVGsJzOz8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":319074},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"69065fe70be76072593860605438657aa50ae670","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_5.0.0_1765199625218_0.3186306131749028","host":"s3://npm-registry-packages-npm-production"}},"5.0.1":{"name":"typeorm-query-hooks","version":"5.0.1","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@5.0.1","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"258afc54511e66db8eae7c75a54a68129b035f59","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-5.0.1.tgz","fileCount":95,"integrity":"sha512-uP8Vv+GidDKk5o8nfNmw9kgtChX+WS5bli5GyzeNarHbSdmW3bCNCG2Ixmsk83PRdvwoAN/Rmr+um3PfUJBR0A==","signatures":[{"sig":"MEUCICr/0ApXFNlfo+0YAcSrFWz0BdtU9IRiqzBcg4tnsDIaAiEA3cifYZcid9nXDpKT5DjShOuGDxTG4pHUSvs5qP5EGsI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":322166},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"d9bbb926ae3b11dede13de650e36e01f4222ebf8","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_5.0.1_1765200498904_0.7791601772640451","host":"s3://npm-registry-packages-npm-production"}},"5.0.2":{"name":"typeorm-query-hooks","version":"5.0.2","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@5.0.2","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"d50078c7be3d46f237d73e4b32c31e68c8d2f9bc","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-5.0.2.tgz","fileCount":95,"integrity":"sha512-5lCaf/c0Z+k0o8H3DKuFtZm0X48ZWbCc9xavmcbJL7DA8XOCi1IBoFJjSQHT3M65eA6a8e2pbUlk2aFruauKUg==","signatures":[{"sig":"MEUCIQDNYgvKtbm7cuAVdd0LBJ8jNqSZyWomZ8zbi3Hv196qFgIgZobehK+3vF/4XFwas69tfYMRtd0CJOXz52evP//FyFk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":321340},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"75cd09686e367eff56c0d3a3ba4e2c8130a71b0c","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_5.0.2_1765201154711_0.9188624871054738","host":"s3://npm-registry-packages-npm-production"}},"5.0.3":{"name":"typeorm-query-hooks","version":"5.0.3","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@5.0.3","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"6e4a1209fa0de90aa30cf294d2c0d0fe1683e8bb","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-5.0.3.tgz","fileCount":95,"integrity":"sha512-6/d2e7qjLw5An0QzfLYvsa3B80B7FzqxzicGgDiplbTU02XQU204SFsPxCBEf187FPgJLkA0g1Pta3PKw+1z1A==","signatures":[{"sig":"MEUCIQD20agrcWyp3UapBtpYjveJOfMDOkhGPNx1eJZMPAbRmAIgUqnjOYBzeOPHN7IkyjQm27zXY3qkczyQ3avOb0ZkmtI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":321179},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"c026582a211afefdb057701d0df9a8021fa6b0d4","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_5.0.3_1765201332944_0.5016188065729112","host":"s3://npm-registry-packages-npm-production"}},"5.0.4":{"name":"typeorm-query-hooks","version":"5.0.4","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@5.0.4","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"98605cbb14ff1605a5931e18248d8d851940fbf6","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-5.0.4.tgz","fileCount":95,"integrity":"sha512-CGP6XOOrq+r/AzTSk7ybKrsqh0ej61ghAwum0sEGLmLD+SwPbuWRsKHPx2Q9dr0PXs/iy/lOC1BGpTvHMiKmHw==","signatures":[{"sig":"MEQCIGfbFG1A3xKFvTnHVPDKbxErHdHlIP6StVi3pghLRbV4AiBAAPLwOu8nMIFOnC5PeC6VzleqKgYgictewPBtxvRnyQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":321156},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"0b3c4c6706363facc31386fb097cd460c38c35b9","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_5.0.4_1765201668512_0.5639781276776303","host":"s3://npm-registry-packages-npm-production"}},"5.0.5":{"name":"typeorm-query-hooks","version":"5.0.5","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@5.0.5","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"46bbf3f86d7354b323c87c9cbd39a7f4c6bf4707","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-5.0.5.tgz","fileCount":95,"integrity":"sha512-wjCkOuyZbhboC3Wi/alJGkzuXVDzrYTfEuTz4/iv/h94UHJm13LEQ9r/gZUZXrPTgg5xqFGd1Mji0jUE7co1qQ==","signatures":[{"sig":"MEUCIQCBlvgzmbJ4cO6z7pCoiBuBXtQlzOzMDCtj7z5UWOcxsQIgTpUKa0ta8OsntR5VRgI7jRNIxMwX4H3bL84UPCK5efI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":321174},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"072ee3323d83cf399e4c332934fc3ff30253a350","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_5.0.5_1765202133891_0.6641225959375803","host":"s3://npm-registry-packages-npm-production"}},"5.0.6":{"name":"typeorm-query-hooks","version":"5.0.6","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@5.0.6","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"f372b7ebf46241a561fc614b6e06b054050b6de0","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-5.0.6.tgz","fileCount":95,"integrity":"sha512-zriz3q5rnof5jZeSXreaNAndTNArMxus+7fC3arRPGlscmjbDRMU/pypzQkgf6ePgoeRmUUn8461Ix8hksW1ag==","signatures":[{"sig":"MEYCIQC28oAQYpYIx58SdqtjZgTiQLggbk8mRP5cZnDCtywtWgIhAJfbk648YEKxKgAbU51IaXVPibfoL/DiC7ABVOIaKJiD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":321307},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"27d7930a08cbc1cb65273799b24174409965d346","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_5.0.6_1765202312916_0.9064862029820615","host":"s3://npm-registry-packages-npm-production"}},"5.0.7":{"name":"typeorm-query-hooks","version":"5.0.7","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@5.0.7","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"a04ebfabefdc213140b5757ed29b1be1e8b6ead5","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-5.0.7.tgz","fileCount":95,"integrity":"sha512-3ZCWR3/mC/wgOkgyqh6LNTGBZ1SXFXGMEqulXba9kqAIv5X1jdYlUbjBo6x7ArppUIxbpPBxZHUJTZh/rbaTMA==","signatures":[{"sig":"MEUCIQDCXnUru9cLIKDyTQxDHaO5nNjiNiWxSc8ErpSIHAG+zwIgLErlafZ0HG97Gyxm0n96s0ZrUxMj6IR9yYOuOG3t054=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":321212},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"6f689927cdb5be5f0e91540b28ecfc926d727521","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_5.0.7_1765202513469_0.6784346558133116","host":"s3://npm-registry-packages-npm-production"}},"5.1.0":{"name":"typeorm-query-hooks","version":"5.1.0","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@5.1.0","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"123d92a9c0deeaf6960b6bd2610ab4f6ce50101c","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-5.1.0.tgz","fileCount":95,"integrity":"sha512-fiGwl9GN1Nan1ieBoVv1CMRMtATiLaeL8EQs7amvRNSaStJ0Di5Fx9hmQNH8/I+w3cPlcVKb4EHW+hp7Qbjc7g==","signatures":[{"sig":"MEUCIQC8V3tGzuimoD6u6Y3RhgWwjHE4X55ceaHRyoWLUy51xwIgZlBlgTD3KsCv05S72fwhf/Ud0CAT9MfBkng1xdFIkHU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":323010},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"6c9bba646b130f611882d32ccf2a1b8e09f4d504","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_5.1.0_1765261653919_0.5977721193452108","host":"s3://npm-registry-packages-npm-production"}},"5.1.1":{"name":"typeorm-query-hooks","version":"5.1.1","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@5.1.1","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"1ca3399e68293e25ae60180535fa807ac5bd5778","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-5.1.1.tgz","fileCount":91,"integrity":"sha512-lbf5p16yccvnz3C/zyC2hOC8NZDnBkeC8p4DiwGzY+yn9wx0jDbDriXfDKRfAuYH3IXbp7HG8UlK/ONnXrN4kA==","signatures":[{"sig":"MEYCIQD4e0n3ApmLMbeBZ4ypuyFQ9vxyzpf6P8BjO8zYO5eX0gIhAOLh+Fq90GfouQSzpHRvjdDHzjHRuuvUFv2AKCLy4Bvo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":321107},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"c209627559bdb79c774aada64fb52db6871f4cb7","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.8.2","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"20.19.6","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_5.1.1_1765261697644_0.06522863538287904","host":"s3://npm-registry-packages-npm-production"}},"6.0.0":{"name":"typeorm-query-hooks","version":"6.0.0","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@6.0.0","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"ec6134d95d9f806e9db683995c18b5b59bfea062","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-6.0.0.tgz","fileCount":95,"integrity":"sha512-Y/Ch/E9KT0KJqhHhkIUDhQaedQd2+F9zqm4Lsz9mcnuktljNQNeT/OCUMOnJgy2HOf3xQZV4TQF8QxRpy20DcA==","signatures":[{"sig":"MEQCIG+UKKZxbh6v+6hpV8CraSP/UYehzUi+NoBAQBPsY1rmAiAS+5l96LLBvHqjR2RG90itvXz49ky9jwsTvwMWnodWBA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":323010},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"0498263e6bc8dea22ac64d4826c39abae262f330","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_6.0.0_1765262039422_0.1075612791211411","host":"s3://npm-registry-packages-npm-production"}},"6.1.1":{"name":"typeorm-query-hooks","version":"6.1.1","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@6.1.1","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"d54cba0a8a9ff67841e7b63c597a3ef103decbf1","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-6.1.1.tgz","fileCount":95,"integrity":"sha512-GspN7ufSFRiSKElEzF9wVQoLsADh5nYm4DuME6mQXbsO2haoCPNSKrU500pbZfAJIoCwYdBuayIQGC7MdnmiQw==","signatures":[{"sig":"MEQCIHUJw2+AyogQbEvL8PzLbQRl54WRkmq9xTyLBEGBrQSXAiAHogkF5kv2WTQzetBihIZxswG3Zcq7eCUPDu8Czg7YtA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":372238},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"bfbeb30896cc2b3e7e9afd352f8632a91b14f302","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_6.1.1_1765973460774_0.09796417607031849","host":"s3://npm-registry-packages-npm-production"}},"6.1.5":{"name":"typeorm-query-hooks","version":"6.1.5","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@6.1.5","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"26b09e35eb4771c075f3b9d0e5be7d493fa02488","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-6.1.5.tgz","fileCount":95,"integrity":"sha512-dJvKQLvnyXUtuOflh7Ywipr9lkwlf+BXPvFiPhoIzFf5Le7YwBh9py5VEw6Dv90YBn/NqDPluh/vi2UK9IREsA==","signatures":[{"sig":"MEQCIF7ttHMcZhn65a4NrlKaA05qeEdu87MFX6NQXWlMk/ZEAiAxnS9p2ooMZYlqQPKtATuVYcQb9va/Qn2MqhaDRUZgIw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":372238},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"9746536c58414e75b85fd6eadc722a12fe17cc55","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_6.1.5_1765981237439_0.5270813404270316","host":"s3://npm-registry-packages-npm-production"}},"6.1.6":{"name":"typeorm-query-hooks","version":"6.1.6","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@6.1.6","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"88c3bd13a562f352e0d88b0581bd94b5f78db921","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-6.1.6.tgz","fileCount":95,"integrity":"sha512-613V33e8sXinDZXDrBhBFdi8VQ0noAE2Sp+1JRf87f48qlpGSv9fTe3w7lfQwqdg6pnSRxpNEv5y2CYi+jT4tg==","signatures":[{"sig":"MEUCIQCnotNavKMlts4L5A0pRSWctov1aQNP1wzFbbJC/IbiNQIgV8W4TbYYTILIAW5VtoFeNqGw6p8z+02GMEArz5NDgqg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":372238},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"b3764af1e8be9b1db97516ca6f0df0d8e7a24184","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_6.1.6_1765981401948_0.34208172255384905","host":"s3://npm-registry-packages-npm-production"}},"6.2.0":{"name":"typeorm-query-hooks","version":"6.2.0","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@6.2.0","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"2463446951ea934744e1a93c84fd2ce6ab5e1401","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-6.2.0.tgz","fileCount":95,"integrity":"sha512-LuRAX6kFrUaVOQjdQyaaBiZc/g5b2pe66G+lh4t31Pc2AfOm/vZUspfN7q2F9xWNVRpNbV584L4b6JXn7f16sQ==","signatures":[{"sig":"MEUCIQD3A5R0nH4NF4k1CiHnGC8CjZw+xzGBAiC+VeDhvfZ6kgIgLGDZbCMpOKlb8SG3O/zWxHTgKfADyTwB7LU4jQBTEpk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":390748},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"ceed1f2d7e8636929837921f954e90f2c86bbd66","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_6.2.0_1766055796433_0.02687383405757693","host":"s3://npm-registry-packages-npm-production"}},"6.2.1":{"name":"typeorm-query-hooks","version":"6.2.1","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@6.2.1","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"8ee9ea9439af83090992bb473c9d2a761c4174c0","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-6.2.1.tgz","fileCount":95,"integrity":"sha512-IHFLRTEfaWCB61M5ACXBamBNhetiWHSTXeRv8/RsBSLxF8tJz9J7d/Kb2HJLXXenn6cyzNmEtcw969Nq3DYzow==","signatures":[{"sig":"MEYCIQCEIapHvESJxTZjDqc5k3/AtiiMd+wZ5BxTaAtiNwC92AIhAKm6vzx816XZ9JFC3FbueANgeiXPOyhhJeMe6DT2/g21","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":419320},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"e726dc6f45f174e3961a1b505c2f4da54319e2e5","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_6.2.1_1766057179417_0.9591423901340073","host":"s3://npm-registry-packages-npm-production"}},"6.2.2":{"name":"typeorm-query-hooks","version":"6.2.2","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@6.2.2","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"9bf1b33621b8894ef6aa2fa60caf803410d566f0","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-6.2.2.tgz","fileCount":95,"integrity":"sha512-K9YAsno4tH1ffiZZ4SW1DEDRkjAhRfiTUflz9lQSWBxNNLaO5x1Boy9xT32WNeaujPb/TThWKUwbdJOEsb2JLA==","signatures":[{"sig":"MEUCIBy8iSSwy1EN8+XkJpruq4tMlNvtmj95ByXWqdLVjf5xAiEA+A8sk1Ztx4Iz9yXmks75EhPES58gnD4fgd7Ij3hOpXs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":451514},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"ec62f9c1a790b6f8f4469cd59f789480ce5f10b4","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_6.2.2_1766305732120_0.0897278256120344","host":"s3://npm-registry-packages-npm-production"}},"6.2.3":{"name":"typeorm-query-hooks","version":"6.2.3","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@6.2.3","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"0b19a0908931e09ce32aa25e0870057d15830f83","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-6.2.3.tgz","fileCount":95,"integrity":"sha512-LbDM5jQ3+dkRg+Gv8rRqZ7Fy8NP9IxZjAPwvL/k8WjIHEkmTxsmYkzKFiZJMh/6khYygp+5ajXD8U3v4qtmP/Q==","signatures":[{"sig":"MEQCIA4qwBMnUl7AOnMvf7OsILiZ34Kl48rFoxHycIe+npQeAiBxl9lwkS07d9Yim5ApGF9qp206cSLlnZSQDC1t0lvLLQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":452644},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"d579c461fd42aea09240fdcd6a888509b098ddf4","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_6.2.3_1766600412229_0.4401164153653021","host":"s3://npm-registry-packages-npm-production"}},"6.2.4":{"name":"typeorm-query-hooks","version":"6.2.4","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@6.2.4","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"b46b6de9c5167e453228e857130f945ad4876179","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-6.2.4.tgz","fileCount":95,"integrity":"sha512-9+C+sjh14RlKAIfYAs4Pw59R2VeBbLhDnEnuknl86n39S3nXnTmVVc67Oba6Uy67jWGWu014gqLDjkaCLLGC4g==","signatures":[{"sig":"MEQCIDvtEEQUt77MQbmGh20FUjuVXeHeDViWBNHAmoLGl/duAiBXwEN5INnN860LOYRpcjgH9DRsj3Nx+DzIstCCo7EejA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":452745},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"a22d94de72e0d9f0cb3dee5eee5c0b2d09b763fc","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_6.2.4_1766600605369_0.06804586970098359","host":"s3://npm-registry-packages-npm-production"}},"6.3.0":{"name":"typeorm-query-hooks","version":"6.3.0","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@6.3.0","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"ada6ce5c74060100f1d1f951755b63d0d98c1f06","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-6.3.0.tgz","fileCount":95,"integrity":"sha512-3RhaQpBoc198tnrhAUJD41H3luSLn8F7gfoVnJQudG72nbQp96sSKRNHD4B1nJI45llcUQAVE5Dsyo9+iknPpQ==","signatures":[{"sig":"MEYCIQCd0MvWRsZMSTKx1XQ5gIxKvUqtjXsQnkQTnRklKDsZmQIhAMWLS0Ml4FftmfhBgfZsuQkJ+n789rZ9zTyC7hhrqU9d","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":452324},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"b3e76fae3aec3162453b268c9c61e80e5f383d69","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_6.3.0_1766604708225_0.37722437897394157","host":"s3://npm-registry-packages-npm-production"}},"6.3.2":{"name":"typeorm-query-hooks","version":"6.3.2","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@6.3.2","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"cd50b9eb247772bc731b698010175cde6d7f076a","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-6.3.2.tgz","fileCount":95,"integrity":"sha512-rAUd53u3Ct21O4kgIxv7y4ZT0PuQ7ZiC/0K6g0YWE7gjEJm492NQA5z8Oq9qSAo7kS0Ohw0PQqOzY7fl1ZXYiw==","signatures":[{"sig":"MEYCIQC7bBnY74Ew26zAI06HO8EXE9SZPx9H9AHZT5PwR83A/QIhAIGvqyg/FTbxwhIpSXAqrIaMRezlCeqd4J74v6BWwj3c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":441957},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"8ebe0219ddb449a7c020ee52cb0df408c2f8cb6f","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_6.3.2_1766605309641_0.7611284855020373","host":"s3://npm-registry-packages-npm-production"}},"6.3.3":{"name":"typeorm-query-hooks","version":"6.3.3","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@6.3.3","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"03b84f3e6f41a430080b6c810a3f46a090c83f21","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-6.3.3.tgz","fileCount":95,"integrity":"sha512-hhxhFQB2VivRt8b5QoCyAubuAp3XF5Wh7RhErglupZHOpJpiWis8PTQkeCFbKUvc+ydHCeK808Lk9FB8pen9ag==","signatures":[{"sig":"MEYCIQDUv+rvgwTcjmw+FgdR3/QAR3x+Ep5A+JcvSLjMAx9mrwIhAJ1Tprk1zhDujdXHjlCtdhkiY7uXsntlPrGFTtcIAigf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":444732},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"2d06dba40b8df5682cfb5823e41b83142f3269c5","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_6.3.3_1766606057940_0.6731195526798996","host":"s3://npm-registry-packages-npm-production"}},"6.3.4":{"name":"typeorm-query-hooks","version":"6.3.4","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@6.3.4","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"24f23f72f020a2eee3603e7668d575711ffeeddf","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-6.3.4.tgz","fileCount":95,"integrity":"sha512-SzSkjXtF+4ZJKLg/slLoVNcEwQxBsZ4mUeuMu52iTzJ2Xla+LXEr9l+VVU1l5HUPVVzdP2evaXVgutFy9xp8ug==","signatures":[{"sig":"MEUCIQDDbKz2/F7aFNXCKi1lxRRyG4qHthqpxWAxqBe99/MmWwIgZRMILg8P9tYsd8vLkzo0ihL84MdQz4tts7UMy+/scyE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":447114},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"9ed8eba5e0dab77abed4a616c9eb624cde807445","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_6.3.4_1766606575905_0.5218241736040332","host":"s3://npm-registry-packages-npm-production"}},"6.4.0":{"name":"typeorm-query-hooks","version":"6.4.0","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","_id":"typeorm-query-hooks@6.4.0","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"dist":{"shasum":"f30c9202e942e40e85fdf9f7b9a219880d953cf2","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-6.4.0.tgz","fileCount":95,"integrity":"sha512-6I/HwwOL7Fj6d7SZDMuRLOYxQcGiyuUqdg/QeNd8hkGhvMAaRNlH3rX0D6mvGywgk8nZkr496aeKI91nSeNgew==","signatures":[{"sig":"MEUCIQCvpp2ysYMKz0spgwtsnvy9HwTUaFzeTY/gP/ge6nZy7QIgChAx81hQ2y66iyopxHxC9o3D5U2CqkOT9TErJ2gPzXs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":457626},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js"},"./register":{"types":"./dist/register.d.ts","import":"./dist/register.js","require":"./dist/register.js"},"./plugins/query-logger":{"types":"./dist/plugins/query-logger.d.ts","import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js"},"./plugins/safety-guard":{"types":"./dist/plugins/safety-guard.d.ts","import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js"},"./plugins/audit-logging":{"types":"./dist/plugins/audit-logging.d.ts","import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js"},"./plugins/query-timeout":{"types":"./dist/plugins/query-timeout.d.ts","import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js"},"./plugins/query-modifier":{"types":"./dist/plugins/query-modifier.d.ts","import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js"},"./plugins/bulk-operations":{"types":"./dist/plugins/bulk-operations.d.ts","import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js"},"./plugins/table-extractor":{"types":"./dist/plugins/table-extractor.d.ts","import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js"},"./plugins/query-complexity":{"types":"./dist/plugins/query-complexity.d.ts","import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js"},"./plugins/result-validator":{"types":"./dist/plugins/result-validator.d.ts","import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js"},"./plugins/cache-invalidation":{"types":"./dist/plugins/cache-invalidation.d.ts","import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js"},"./plugins/n-plus-one-detector":{"types":"./dist/plugins/n-plus-one-detector.d.ts","import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js"},"./plugins/performance-monitor":{"types":"./dist/plugins/performance-monitor.d.ts","import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js"},"./plugins/query-source-tracer":{"types":"./dist/plugins/query-source-tracer.d.ts","import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js"},"./plugins/slow-query-analyzer":{"types":"./dist/plugins/slow-query-analyzer.d.ts","import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js"},"./plugins/lazy-loading-detector":{"types":"./dist/plugins/lazy-loading-detector.d.ts","import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js"},"./plugins/query-metadata-registry":{"types":"./dist/plugins/query-metadata-registry.d.ts","import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js"},"./plugins/connection-leak-detector":{"types":"./dist/plugins/connection-leak-detector.d.ts","import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js"},"./plugins/idle-transaction-monitor":{"types":"./dist/plugins/idle-transaction-monitor.d.ts","import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js"},"./plugins/query-result-transformer":{"types":"./dist/plugins/query-result-transformer.d.ts","import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js"}},"gitHead":"87be08cbdff1ea4c2ae3831e6981d0257923e680","scripts":{"lint":"eslint src/**/*.ts test/**/*.ts","test":"jest","build":"tsc","watch":"tsc --watch","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test:cov":"jest --coverage","test:watch":"jest --watch"},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"repository":{"url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git","type":"git"},"_npmVersion":"10.2.4","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","directories":{},"_nodeVersion":"18.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typeorm":"^0.3.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/typeorm-query-hooks_6.4.0_1766608238648_0.28360889778425014","host":"s3://npm-registry-packages-npm-production"}},"6.5.1":{"name":"typeorm-query-hooks","version":"6.5.1","description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.js","require":"./dist/index.js","types":"./dist/index.d.ts"},"./register":{"import":"./dist/register.js","require":"./dist/register.js","types":"./dist/register.d.ts"},"./nestjs":{"import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.js","types":"./dist/nestjs/index.d.ts"},"./plugins/table-extractor":{"import":"./dist/plugins/table-extractor.js","require":"./dist/plugins/table-extractor.js","types":"./dist/plugins/table-extractor.d.ts"},"./plugins/query-metadata-registry":{"import":"./dist/plugins/query-metadata-registry.js","require":"./dist/plugins/query-metadata-registry.js","types":"./dist/plugins/query-metadata-registry.d.ts"},"./plugins/query-logger":{"import":"./dist/plugins/query-logger.js","require":"./dist/plugins/query-logger.js","types":"./dist/plugins/query-logger.d.ts"},"./plugins/performance-monitor":{"import":"./dist/plugins/performance-monitor.js","require":"./dist/plugins/performance-monitor.js","types":"./dist/plugins/performance-monitor.d.ts"},"./plugins/result-validator":{"import":"./dist/plugins/result-validator.js","require":"./dist/plugins/result-validator.js","types":"./dist/plugins/result-validator.d.ts"},"./plugins/query-modifier":{"import":"./dist/plugins/query-modifier.js","require":"./dist/plugins/query-modifier.js","types":"./dist/plugins/query-modifier.d.ts"},"./plugins/cache-invalidation":{"import":"./dist/plugins/cache-invalidation.js","require":"./dist/plugins/cache-invalidation.js","types":"./dist/plugins/cache-invalidation.d.ts"},"./plugins/audit-logging":{"import":"./dist/plugins/audit-logging.js","require":"./dist/plugins/audit-logging.js","types":"./dist/plugins/audit-logging.d.ts"},"./plugins/bulk-operations":{"import":"./dist/plugins/bulk-operations.js","require":"./dist/plugins/bulk-operations.js","types":"./dist/plugins/bulk-operations.d.ts"},"./plugins/query-complexity":{"import":"./dist/plugins/query-complexity.js","require":"./dist/plugins/query-complexity.js","types":"./dist/plugins/query-complexity.d.ts"},"./plugins/n-plus-one-detector":{"import":"./dist/plugins/n-plus-one-detector.js","require":"./dist/plugins/n-plus-one-detector.js","types":"./dist/plugins/n-plus-one-detector.d.ts"},"./plugins/query-source-tracer":{"import":"./dist/plugins/query-source-tracer.js","require":"./dist/plugins/query-source-tracer.js","types":"./dist/plugins/query-source-tracer.d.ts"},"./plugins/safety-guard":{"import":"./dist/plugins/safety-guard.js","require":"./dist/plugins/safety-guard.js","types":"./dist/plugins/safety-guard.d.ts"},"./plugins/slow-query-analyzer":{"import":"./dist/plugins/slow-query-analyzer.js","require":"./dist/plugins/slow-query-analyzer.js","types":"./dist/plugins/slow-query-analyzer.d.ts"},"./plugins/idle-transaction-monitor":{"import":"./dist/plugins/idle-transaction-monitor.js","require":"./dist/plugins/idle-transaction-monitor.js","types":"./dist/plugins/idle-transaction-monitor.d.ts"},"./plugins/query-timeout":{"import":"./dist/plugins/query-timeout.js","require":"./dist/plugins/query-timeout.js","types":"./dist/plugins/query-timeout.d.ts"},"./plugins/connection-leak-detector":{"import":"./dist/plugins/connection-leak-detector.js","require":"./dist/plugins/connection-leak-detector.js","types":"./dist/plugins/connection-leak-detector.d.ts"},"./plugins/lazy-loading-detector":{"import":"./dist/plugins/lazy-loading-detector.js","require":"./dist/plugins/lazy-loading-detector.js","types":"./dist/plugins/lazy-loading-detector.d.ts"},"./plugins/query-result-transformer":{"import":"./dist/plugins/query-result-transformer.js","require":"./dist/plugins/query-result-transformer.js","types":"./dist/plugins/query-result-transformer.d.ts"}},"engines":{"node":">=16.0.0"},"scripts":{"build":"tsc","watch":"tsc --watch","lint":"eslint src/**/*.ts test/**/*.ts","lint:fix":"eslint src/**/*.ts test/**/*.ts --fix","test":"jest","test:watch":"jest --watch","test:cov":"jest --coverage"},"keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"author":{"name":"Roy Leibovitz"},"license":"MIT","homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"peerDependencies":{"typeorm":"^0.3.0"},"devDependencies":{"@types/jest":"^29.5.0","@types/node":"^20.10.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.40.0","jest":"^29.5.0","sqlite3":"^5.1.6","ts-jest":"^29.1.0","typescript":"^5.3.0","typeorm":"^0.3.0"},"repository":{"type":"git","url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git"},"_id":"typeorm-query-hooks@6.5.1","gitHead":"99c8d7b062e669c7c9f5d4e8ebe14e57f4245ee1","_nodeVersion":"18.19.1","_npmVersion":"10.2.4","dist":{"integrity":"sha512-fK156eoe24+hHKq8h1NDnyK2FFHoR9pw5Zn1A8CvnsiMz14OELyeZmQwkrvQMUVObbX4ydxvA7oKGoxHOh7OXQ==","shasum":"c56065d9e1540c6226c2b669b8371a9d60227c13","tarball":"https://registry.npmjs.org/typeorm-query-hooks/-/typeorm-query-hooks-6.5.1.tgz","fileCount":99,"unpackedSize":493037,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQClCZen+svrdnro+HPomKpcvLSPzb1F2/qL80kQp979owIgTLFtnjf7lL8CMpl6X6zDTK8goPj2UYQm15LkJm91OH8="}]},"_npmUser":{"name":"royleibo","email":"royleibo212@gmail.com"},"directories":{},"maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/typeorm-query-hooks_6.5.1_1766609993563_0.16243665431751442"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-04T15:13:15.718Z","modified":"2025-12-24T20:59:53.933Z","1.0.0":"2025-12-04T15:13:15.886Z","1.1.0":"2025-12-04T15:46:24.682Z","1.2.0":"2025-12-04T15:47:39.105Z","2.0.0":"2025-12-06T15:30:19.532Z","2.1.0":"2025-12-06T15:31:36.509Z","2.2.0":"2025-12-06T16:41:35.371Z","2.2.2":"2025-12-07T07:29:53.362Z","2.2.3":"2025-12-07T07:38:53.897Z","2.2.4":"2025-12-07T07:41:41.939Z","2.2.5":"2025-12-07T07:45:23.774Z","2.2.6":"2025-12-07T07:49:30.760Z","2.2.7":"2025-12-07T07:52:03.920Z","2.2.8":"2025-12-07T07:54:56.511Z","3.0.0":"2025-12-07T07:56:58.553Z","3.0.1":"2025-12-07T08:01:24.635Z","3.1.0":"2025-12-07T08:03:57.882Z","4.0.0":"2025-12-07T12:10:08.321Z","4.1.0":"2025-12-07T12:20:28.915Z","4.3.0":"2025-12-07T12:29:11.308Z","5.0.0":"2025-12-08T13:13:45.365Z","5.0.1":"2025-12-08T13:28:19.085Z","5.0.2":"2025-12-08T13:39:14.871Z","5.0.3":"2025-12-08T13:42:13.112Z","5.0.4":"2025-12-08T13:47:48.674Z","5.0.5":"2025-12-08T13:55:34.062Z","5.0.6":"2025-12-08T13:58:33.063Z","5.0.7":"2025-12-08T14:01:53.625Z","5.1.0":"2025-12-09T06:27:34.073Z","5.1.1":"2025-12-09T06:28:17.806Z","6.0.0":"2025-12-09T06:33:59.588Z","6.1.1":"2025-12-17T12:11:00.921Z","6.1.5":"2025-12-17T14:20:37.599Z","6.1.6":"2025-12-17T14:23:22.110Z","6.2.0":"2025-12-18T11:03:16.591Z","6.2.1":"2025-12-18T11:26:19.572Z","6.2.2":"2025-12-21T08:28:52.269Z","6.2.3":"2025-12-24T18:20:12.380Z","6.2.4":"2025-12-24T18:23:25.550Z","6.3.0":"2025-12-24T19:31:48.393Z","6.3.2":"2025-12-24T19:41:49.829Z","6.3.3":"2025-12-24T19:54:18.080Z","6.3.4":"2025-12-24T20:02:56.036Z","6.4.0":"2025-12-24T20:30:38.821Z","6.5.1":"2025-12-24T20:59:53.719Z"},"bugs":{"url":"https://github.com/RoyLeibo/typeorm-query-hooks/issues"},"author":{"name":"Roy Leibovitz"},"license":"MIT","homepage":"https://github.com/RoyLeibo/typeorm-query-hooks#readme","keywords":["typeorm","hooks","query-builder","plugin","extension","instrumentation","nestjs","typescript","javascript","database","postgres","postgresql","mysql","sql","table-extraction","monitoring","observability","performance","slow-query","query-optimization","transaction","multi-tenancy","apm","tracing","metrics"],"repository":{"type":"git","url":"git+https://github.com/RoyLeibo/typeorm-query-hooks.git"},"description":"🚀 Powerful plugin-based hooks for TypeORM: Performance monitoring, result validation, query modification, transaction tracking & more. Works with JS, TS & NestJS!","maintainers":[{"name":"royleibo","email":"royleibo212@gmail.com"}],"readme":"# 🚀 TypeORM Query Hooks\n\n> **The ultimate TypeORM companion** - 21 powerful plugins to prevent N+1 queries, detect connection leaks, block dangerous operations, auto-run EXPLAIN, trace query sources & more. Works seamlessly with **JavaScript**, **TypeScript**, and **NestJS**.\n\n[![npm version](https://badge.fury.io/js/typeorm-query-hooks.svg)](https://www.npmjs.com/package/typeorm-query-hooks)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue.svg)](https://www.typescriptlang.org/)\n\n---\n\n## ✨ Why Use This Library?\n\n### **Prevents Production Disasters:**\n- 🕵️ **N+1 Query Detection** - Catches the #1 performance killer automatically\n- 🛡️ **Safety Guards** - Blocks `DELETE`/`UPDATE` without `WHERE`, prevents DDL in production\n- 💧 **Connection Leak Detection** - Finds leaks before they crash your app\n- 🧟 **Zombie Transaction Monitoring** - Prevents deadlocks from idle transactions\n\n### **Automatic Debugging:**\n- 📍 **Source Code Tracing** - Shows exact file:line where queries originate (no more guessing!)\n- 🔬 **Auto-EXPLAIN** - Runs query plan analysis on slow queries automatically\n- ⚠️ **Lazy Loading Detection** - Catches hidden N+1 problems\n\n### **Enterprise Features:**\n- 📝 **Audit Logging** - GDPR/HIPAA compliance ready\n- 🗑️ **Cache Invalidation** - Auto-invalidate on data changes\n- 🔄 **Result Transformation** - Auto-convert to DTOs, remove sensitive data\n\n### **Extensible:**\n- 🎨 **Create Custom Plugins** - Build your own hooks for specific needs\n- 🔌 **21 Built-in Plugins** - Ready-to-use solutions for common problems\n- 🎯 **Full TypeScript Support** - Type-safe plugin development with exported types\n\n---\n\n## 🏗️ **21 Powerful Plugins Included**\n\n> 📚 **Event Callbacks**: All plugins support event callbacks for custom handling. See [PLUGIN_CALLBACKS_REFERENCE.md](./PLUGIN_CALLBACKS_REFERENCE.md) for complete callback documentation.\n> \n> 💡 **TypeScript**: All callback parameter types are exported and can be imported:\n> ```typescript\n> import { \n>   QueryExecutionContext, \n>   ConnectionLeak, \n>   BlockedOperation \n> } from 'typeorm-query-hooks';\n> ```\n\n### **🔥 Critical Performance & Safety**\n| Plugin | Purpose | Use Case |\n|--------|---------|----------|\n| [🕵️ **NPlusOneDetector**](#nplusonedetector) | Detect N+1 query problems | #1 performance killer - catches 80% of issues |\n| [🛡️ **SafetyGuard**](#safetyguard) | Block dangerous operations | Prevents DELETE/UPDATE without WHERE, blocks DDL |\n| [💧 **ConnectionLeakDetector**](#connectionleakdetector) | Find connection leaks | Prevents pool exhaustion and app crashes |\n| [⏱️ **QueryTimeout**](#querytimeout) | Automatic query timeouts | Prevents queries from hanging forever |\n| [🧟 **IdleTransactionMonitor**](#idletransactionmonitor) | Detect zombie transactions | Prevents deadlocks from idle transactions |\n\n### **🔬 Analysis & Debugging**\n| Plugin | Purpose | Use Case |\n|--------|---------|----------|\n| [📍 **QuerySourceTracer**](#querysourcetracer) | Show where queries originate | CSI: Database - find exact file:line in your code |\n| [🔬 **SlowQueryAnalyzer**](#slowqueryanalyzer) | Auto-run EXPLAIN on slow queries | Automatic query plan analysis |\n| [⚠️ **LazyLoadingDetector**](#lazyloadingdetector) | Detect lazy-loaded relations | Catches hidden N+1 problems |\n| [⚡ **PerformanceMonitor**](#performancemonitor) | Track query execution time | Monitor and optimize performance |\n\n### **🗃️ Data Management**\n| Plugin | Purpose | Use Case |\n|--------|---------|----------|\n| [🗑️ **CacheInvalidation**](#cacheinvalidation) | Auto-invalidate cache on writes | Maintain cache consistency |\n| [📝 **AuditLogging**](#auditlogging) | Track all database operations | Compliance (GDPR, HIPAA), security |\n| [📊 **BulkOperations**](#bulkoperations) | Detect bulk operations | Prevent accidental mass updates |\n| [🔄 **QueryResultTransformer**](#queryresulttransformer) | Transform query results | Auto-convert to DTOs, remove sensitive data |\n\n### **🛠️ Utilities**\n| Plugin | Purpose | Use Case |\n|--------|---------|----------|\n| [🏷️ **TableExtractor**](#tableextractor) | Extract table names from queries | Logging, caching, access control |\n| [🔤 **QueryTypeDetector**](#querytypedetector) | Detect SQL query types (SELECT, INSERT, etc.) | Analytics, monitoring, security |\n| [✅ **ResultValidator**](#resultvalidator) | Validate query results | Alert on empty results, pagination issues |\n| [✏️ **QueryModifier**](#querymodifier) | Modify queries before execution | Multi-tenancy, query hints, safety |\n| [🔍 **QueryComplexity**](#querycomplexity) | Warn on complex queries | Identify queries needing optimization |\n| [💾 **QueryMetadataRegistry**](#querymetadataregistry) | Store query metadata | Analytics, cross-cutting concerns |\n| [🪵 **QueryLogger**](#querylogger) | Custom query logging | Flexible logging with filters |\n\n---\n\n## 📦 Installation\n\n```bash\nnpm install typeorm-query-hooks\n# or\nyarn add typeorm-query-hooks\n```\n\n---\n\n## ⚡ Quick Start\n\n### **1. Enable Hooks**\n\n```typescript\nimport { enableQueryHooks } from 'typeorm-query-hooks';\n\n// Enable at application startup (before any TypeORM queries)\nenableQueryHooks({ \n  verbose: false  // Set to true for debugging\n});\n```\n\n**Configuration Options:**\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `verbose` | `boolean` | `false` | Enable detailed debug logging for the core hook system. Shows: when hooks fire, which plugins execute, query capture events, context propagation, errors. **Very noisy** - use only for troubleshooting plugin issues or understanding hook flow. Never enable in production. |\n\n**When to use `verbose: true`:**\n- Debugging why a plugin isn't working\n- Understanding the hook execution flow\n- Development/testing only (too noisy for production)\n\n> **Note:** This is the only configuration for `enableQueryHooks()`. All other configurations are plugin-specific.\n\n---\n\n### **2. Register Plugins**\n\n```typescript\nimport { registerPlugin } from 'typeorm-query-hooks';\nimport { NPlusOneDetectorPlugin } from 'typeorm-query-hooks/plugins/n-plus-one-detector';\n\n// Register any plugins you need\nregisterPlugin(NPlusOneDetectorPlugin({\n  threshold: 5,\n  enableLogging: true\n}));\n```\n\n---\n\n# 🏗️ Built-in Plugins (20 Total!)\n\n## **🔥 Critical Performance & Safety**\n\n<div id=\"nplusonedetector\"></div>\n\n### **🕵️ NPlusOneDetector** - Detect N+1 query problems (THE #1 performance killer)\n\n**What it does:**\nDetects when the same query runs repeatedly in a short time window - the classic N+1 problem.\n\n**The Problem:**\n```typescript\n// ❌ BAD - Causes N+1 problem\nconst users = await userRepository.find();  // 1 query\nfor (const user of users) {  // Loop\n  const posts = await postRepository.find({ where: { userId: user.id } });  // N queries!\n}\n// Total: 101 queries for 100 users!\n```\n\n**Configuration Options:**\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `threshold` | `number` | `5` | How many times the same query can run in the time window before flagging as N+1. Lower threshold (3-5) catches more issues. Higher (10+) only catches severe cases. |\n| `window` | `number` | `100` | Time window (ms) to track query patterns. 100ms catches most N+1 loops. Increase to 500-1000ms for batch jobs that intentionally space out queries. |\n| `includeStackTrace` | `boolean` | `true` | Capture stack trace showing WHERE in your code the N+1 originated. **Performance impact:** ~1-2ms per query. Essential for fixing N+1 issues - shows exact loop location. |\n| `ignorePatterns` | `RegExp[]` | `[]` | Regex patterns to exclude from N+1 detection. Example: `[/migrations/, /@nestjs/]` ignores framework code. Use to reduce false positives from legitimate repeated queries. |\n| `enableLogging` | `boolean` | `false` | Log N+1 warnings to console with query fingerprint and stack trace. |\n\n**Event Callbacks:**\n\n| Callback | Parameters | Description |\n|----------|------------|-------------|\n| `onNPlusOneDetected` | `(context: NPlusOneContext, pattern: QueryPattern)` | Called when N+1 pattern is detected |\n\n**Usage:**\n\n```typescript\nimport { NPlusOneDetectorPlugin } from 'typeorm-query-hooks/plugins/n-plus-one-detector';\n\nregisterPlugin(NPlusOneDetectorPlugin({\n  threshold: 5,        // Flag if same query runs > 5 times\n  window: 100,         // Within 100ms window\n  includeStackTrace: true,\n  enableLogging: true,\n  onNPlusOneDetected: (context, count, fingerprint) => {\n    logger.error(`🚨 N+1 DETECTED! Query ran ${count} times`, {\n      fingerprint: fingerprint.substring(0, 100),\n      suggestion: 'Use .leftJoinAndSelect() or relations: []'\n    });\n    \n    // Send to monitoring\n    datadog.increment('n_plus_one_detected', { count });\n  }\n}));\n```\n\n---\n\n<div id=\"safetyguard\"></div>\n\n### **🛡️ SafetyGuard** - Block dangerous database operations\n\n**What it does:**\nPrevents catastrophic mistakes like `UPDATE users SET role='admin'` (no WHERE = ALL users become admin!)\n\n**Real disasters this prevents:**\n- Junior dev ran `UPDATE users SET email='test@test.com'` without WHERE → 1M users had same email\n- Migration with `DROP TABLE` ran in production\n- `DELETE FROM orders` without WHERE → Lost 6 months of data\n\n**Configuration Options:**\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `blockDDL` | `boolean` | `false` | Block DDL (Data Definition Language) operations: CREATE, ALTER, DROP, TRUNCATE. Enable in production to prevent schema changes. |\n| `requireWhereClause` | `boolean` | `true` | ⚠️ **CRITICAL** - Blocks UPDATE/DELETE without WHERE clause. Prevents accidentally modifying ALL rows in a table. Should always be `true` in production. |\n| `blockTruncate` | `boolean` | `true` | Block TRUNCATE operations which delete all rows and reset auto-increment. More dangerous than DELETE as it can't be rolled back in some databases. |\n| `blockDrop` | `boolean` | `true` | Block DROP TABLE/DATABASE operations. Prevents accidental data loss from schema deletions. |\n| `allowedEnvironments` | `string[]` | `['development','test']` | Environments where destructive operations are permitted. Checks `process.env.NODE_ENV`. Production should NOT be in this list. |\n| `protectedTables` | `string[]` | `[]` | Tables requiring extra protection beyond normal rules. Operations on these tables ALWAYS require WHERE clause, even in dev. Example: `['users', 'payments', 'audit_logs']` |\n| `allowForce` | `boolean` | `false` | Allow developers to bypass safety checks by adding `/* FORCE_ALLOW */` comment to SQL. Use in dev/staging only, NEVER in production. Example: `/* FORCE_ALLOW */ DELETE FROM temp_data` |\n| `throwOnBlock` | `boolean` | `true` | When `true`: Throws error and stops query execution. When `false`: Logs warning but allows query to proceed. Set to `true` in production for maximum safety. |\n| `enableLogging` | `boolean` | `false` | Log blocked operations to console. Useful for monitoring what operations are being prevented. |\n\n**Event Callbacks:**\n\n| Callback | Parameters | Description |\n|----------|------------|-------------|\n| `onBlocked` | `(context: PreQueryContext, blocked: BlockedOperation)` | Called when dangerous operation is blocked |\n\n**Usage:**\n\n```typescript\nimport { SafetyGuardPlugin } from 'typeorm-query-hooks/plugins/safety-guard';\n\n// Recommended for production\nregisterPlugin(SafetyGuardPlugin({\n  blockDDL: process.env.NODE_ENV === 'production',\n  requireWhereClause: true,  // ALWAYS require WHERE\n  protectedTables: ['users', 'payments', 'transactions'],\n  throwOnBlock: true,\n  onBlocked: (context, blocked) => {\n    // Send critical alert\n    pagerduty.trigger({\n      severity: 'critical',\n      summary: `Dangerous operation blocked: ${blocked.operation}`,\n      tables: blocked.tables\n    });\n  },\n  enableLogging: true\n}));\n```\n\n---\n\n<div id=\"connectionleakdetector\"></div>\n\n### **💧 ConnectionLeakDetector** - Find connection leaks before they crash your app\n\n**What it does:**\nDetects connections that are acquired but never released - leads to pool exhaustion.\n\n**The Problem:**\n```typescript\nconst queryRunner = dataSource.createQueryRunner();\nawait queryRunner.connect();\nawait queryRunner.query('SELECT ...');\n// ❌ FORGOT queryRunner.release() - connection leaked!\n```\n\n**Configuration Options:**\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `maxConnectionAge` | `number` | `30000` | Maximum time (ms) a connection can remain acquired before being flagged as leaked. 30 seconds is usually enough for any query. Increase for long-running analytics queries. |\n| `warnThreshold` | `number` | `0.8` | Percentage of pool capacity (0-1) that triggers early warning. 0.8 = warns at 80% full. Helps catch issues before complete pool exhaustion. |\n| `captureStackTrace` | `boolean` | `true` | Captures stack trace when connection is acquired to show WHERE the leak originated. **Performance impact:** ~1-2ms per connection. Disable in high-throughput production if needed. |\n| `enableLogging` | `boolean` | `false` | Auto-log leak warnings to console with stack traces. |\n\n**Event Callbacks:**\n\n| Callback | Parameters | Description |\n|----------|------------|-------------|\n| `onLeak` | `(leak: ConnectionLeak)` | Called when connection leak is detected |\n| `onPoolWarning` | `(context: ConnectionPoolContext)` | Called when pool capacity warning triggered |\n\n**Usage:**\n\n```typescript\nimport { ConnectionLeakDetectorPlugin } from 'typeorm-query-hooks/plugins/connection-leak-detector';\n\nregisterPlugin(ConnectionLeakDetectorPlugin({\n  maxConnectionAge: 30000,  // 30 seconds\n  warnThreshold: 0.8,       // Warn at 80% pool capacity\n  captureStackTrace: true,\n  enableLogging: true,\n  onLeak: (leak) => {\n    logger.error('💧 CONNECTION LEAK:', {\n      age: `${leak.age}ms`,\n      stackTrace: leak.stackTrace\n    });\n    monitoring.alert({ type: 'connection_leak', severity: 'critical' });\n  }\n}));\n```\n\n\n\n<div id=\"querytimeout\"></div>\n\n### **⏱️ QueryTimeout** - Automatic query timeouts\n\n**What it does:**\nPrevents queries from hanging forever and blocking the connection pool.\n\n**Configuration Options:**\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `defaultTimeout` | `number` | `5000` | Default timeout (ms) for all queries. Prevents queries from hanging indefinitely and blocking connections. 5 seconds is reasonable for OLTP workloads. |\n| `timeoutByType` | `Record<string, number>` | `{}` | Override timeout by operation type. Example: `{ 'SELECT': 3000, 'INSERT': 10000 }`. Useful for setting stricter limits on reads vs writes. |\n| `timeoutByTablePattern` | `Record<string, number>` | `{}` | Override timeout using regex patterns for table names. Example: `{ 'report_.*': 30000, 'analytics_.*': 60000 }`. Allows longer timeouts for known slow tables. |\n| `throwOnTimeout` | `boolean` | `true` | When `true`: Throws error to cancel query. When `false`: Logs warning but lets query continue (not recommended - query will still hold connection). |\n| `warningThreshold` | `number` | `0.8` | Triggers early warning callback at percentage of timeout (0.8 = 80%). Allows proactive logging before actual timeout. Set to `0` to disable warnings. |\n| `enableLogging` | `boolean` | `false` | Auto-log timeout events to console with query details. |\n\n**Event Callbacks:**\n\n| Callback | Parameters | Description |\n|----------|------------|-------------|\n| `onTimeout` | `(context: QueryExecutionContext, timeout: number)` | Called when query times out |\n| `onTimeoutWarning` | `(context: QueryExecutionContext, elapsed: number, limit: number)` | Called when query approaches timeout |\n| `onError` | `(context: QueryExecutionContext, error: Error)` | Called when timeout mechanism fails |\n\n**Usage:**\n\n```typescript\nimport { QueryTimeoutPlugin } from 'typeorm-query-hooks/plugins/query-timeout';\n\nregisterPlugin(QueryTimeoutPlugin({\n  defaultTimeout: 5000,\n  timeoutByType: {\n    'SELECT': 3000,   // Reads should be fast\n    'INSERT': 10000,  // Writes can be slower\n    'UPDATE': 10000\n  },\n  timeoutByTablePattern: {\n    'report_.*': 30000,    // Reports can take 30s\n    'analytics_.*': 60000  // Analytics 60s\n  },\n  throwOnTimeout: true,\n  enableLogging: true\n}));\n```\n\n\n\n<div id=\"idletransactionmonitor\"></div>\n\n### **🧟 IdleTransactionMonitor** - Detect zombie transactions\n\n**What it does:**\nDetects transactions that sit idle (no queries running) - causes deadlocks.\n\n**The Problem:**\n```typescript\nawait queryRunner.startTransaction();\nawait queryRunner.manager.save(user);\n\n// ❌ Transaction is OPEN while doing HTTP call!\nawait fetch('https://api.slow-service.com');  // 5 seconds\n\n// Meanwhile: DB locks held, other queries waiting, deadlock risk\nawait queryRunner.commitTransaction();\n```\n\n**Configuration Options:**\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `maxTransactionDuration` | `number` | `5000` | Maximum total transaction duration (ms) from BEGIN to COMMIT/ROLLBACK. Long transactions hold locks and block other queries. 5 seconds is safe for OLTP. |\n| `maxIdleTime` | `number` | `1000` | Maximum idle time (ms) with no queries executing inside a transaction. Detects \"zombie\" transactions (open but doing nothing). 1 second catches most issues. |\n| `autoRollback` | `boolean` | `false` | ⚠️ **DANGEROUS** - Automatically rollback transactions exceeding limits. **Why dangerous:** May rollback legitimate long-running operations (reports, migrations, batch jobs). **Recommendation:** Keep `false` in production, use `onZombieDetected` callback for alerts instead. Only enable in dev/test environments. |\n| `enableLogging` | `boolean` | `false` | Log zombie transaction warnings to console with duration and idle time. |\n\n**Event Callbacks:**\n\n| Callback | Parameters | Description |\n|----------|------------|-------------|\n| `onZombieDetected` | `(context: TransactionContext, zombie: ZombieTransaction)` | Called when zombie transaction detected (long-running AND idle) |\n| `onLongRunningTransaction` | `(context: TransactionContext, duration: number)` | Called when transaction exceeds max duration |\n| `onIdleTransaction` | `(context: TransactionContext, idleTime: number)` | Called when transaction is idle too long |\n| `onError` | `(context: TransactionContext \\| undefined, error: Error)` | Called when monitoring fails |\n\n**Usage:**\n\n```typescript\nimport { IdleTransactionMonitorPlugin } from 'typeorm-query-hooks/plugins/idle-transaction-monitor';\n\nregisterPlugin(IdleTransactionMonitorPlugin({\n  maxTransactionDuration: 5000,\n  maxIdleTime: 1000,\n  autoRollback: false,  // Don't auto-rollback in production\n  enableLogging: true,\n  onZombieDetected: (context, zombie) => {\n    logger.error('🧟 ZOMBIE TRANSACTION:', {\n      duration: `${zombie.duration}ms`,\n      idleTime: `${zombie.idleTime}ms`,\n      queries: zombie.queriesExecuted\n    });\n  }\n}));\n```\n\n\n\n---\n\n## **🔬 Analysis & Debugging**\n\n<div id=\"querysourcetracer\"></div>\n\n### **📍 QuerySourceTracer** - CSI: Database (find exact file:line in your code)\n\n**What it does:**\nShows you EXACTLY where in your code each query originated.\n\n**The Problem:**\nYou see a slow query: `SELECT * FROM users WHERE email = '...'`\nYou have 50 places that query users. Which one is slow? You don't know!\n\n**The Solution:**\nShows: `Query from: src/services/UserService.ts:45:12 in UserService.findByEmail`\n\n**Configuration Options:**\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `basePath` | `string` | `process.cwd()` | Base directory for relative path resolution. Stack traces show paths relative to this. Default is project root. Set to `process.cwd() + '/src'` to show only source files. |\n| `attachToQueryContext` | `boolean` | `true` | When `true`, adds `context.sourceLocation` to query context so other plugins (PerformanceMonitor, NPlusOneDetector, etc.) can access file:line info. Keep enabled for better debugging. |\n| `includeFullStackTrace` | `boolean` | `false` | When `true`, captures entire stack trace (20+ frames). When `false`, captures only first relevant frame. Enable for deep debugging, disable for cleaner logs. |\n| `ignorePaths` | `string[]` | `['node_modules']` | Array of path patterns to skip when tracing. Filters out framework code to show only YOUR code. Example: `['node_modules', 'dist', '@nestjs']` |\n| `enableLogging` | `boolean` | `false` | Log source location for every query. Very verbose - use only for debugging specific issues. |\n\n**Event Callbacks:**\n\n| Callback | Parameters | Description |\n|----------|------------|-------------|\n| `onQueryLogged` | `(context: QueryContextWithSource, location: SourceLocation)` | Called when query source is traced |\n\n**Usage:**\n\n```typescript\nimport { QuerySourceTracerPlugin } from 'typeorm-query-hooks/plugins/query-source-tracer';\n\nregisterPlugin(QuerySourceTracerPlugin({\n  basePath: process.cwd() + '/src',\n  attachToQueryContext: true,  // Other plugins can use context.sourceLocation\n  enableLogging: true\n}));\n\n// Logs show:\n// [QuerySourceTracer] 📍 Query Source:\n//   File: src/services/UserService.ts\n//   Line: 45:12\n//   Function: UserService.findByEmail\n//   SQL: SELECT \"user\".\"id\", \"user\".\"email\" FROM \"users\"...\n```\n\n\n\n<div id=\"slowqueryanalyzer\"></div>\n\n### **🔬 SlowQueryAnalyzer** - Auto-run EXPLAIN on slow queries\n\n**What it does:**\nAutomatically runs `EXPLAIN` (or `EXPLAIN ANALYZE`) on slow queries to show you WHY they're slow.\n\n**The Manual Way (painful):**\n1. Slow query alert fires\n2. Copy the SQL\n3. Open pgAdmin/DBeaver\n4. Paste and run `EXPLAIN ANALYZE`\n5. Look for issues\n\n**The Automatic Way:**\nPlugin does it all automatically and logs the execution plan immediately!\n\n**Configuration Options:**\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `threshold` | `number` | `1000` | Trigger EXPLAIN analysis for queries slower than this (ms). Helps identify which slow queries need optimization. Lower threshold = more analysis but more overhead. |\n| `runAnalyze` | `boolean` | `false` | ⚠️ **USE WITH CAUTION** - `EXPLAIN ANALYZE` actually **executes the query twice**: once for real results, once for analysis. **Risks:** (1) Write operations (INSERT/UPDATE/DELETE) will modify data twice, (2) Doubles query time, (3) Side effects happen twice. **Safe for:** SELECT queries in non-production. **Never use for:** Production, or any INSERT/UPDATE/DELETE. |\n| `databaseType` | `string` | `'postgres'` | Database type determines EXPLAIN syntax. Supported: `'postgres'`, `'mysql'`, `'mariadb'`, `'sqlite'`, `'mssql'`. Each database has different EXPLAIN output format. |\n| `enableLogging` | `boolean` | `false` | Log EXPLAIN results to console. Shows query plans with cost estimates, index usage, and scan types. |\n\n**Event Callbacks:**\n\n| Callback | Parameters | Description |\n|----------|------------|-------------|\n| `onAnalysis` | `(context: QueryExecutionContext, plan: QueryExecutionPlan)` | Called when EXPLAIN analysis completes |\n\n**Usage:**\n\n```typescript\nimport { SlowQueryAnalyzerPlugin } from 'typeorm-query-hooks/plugins/slow-query-analyzer';\n\nregisterPlugin(SlowQueryAnalyzerPlugin({\n  threshold: 1000,\n  databaseType: 'postgres',\n  enableLogging: true,\n  onAnalysis: (context, plan) => {\n    if (plan.hasSeqScan) {\n      logger.error('🔍 MISSING INDEX DETECTED:', {\n        sql: context.sql.substring(0, 200),\n        executionTime: context.executionTime,\n        plan: plan.raw,\n        suggestion: 'Add an index to improve performance'\n      });\n    }\n  }\n}));\n```\n\n\n\n<div id=\"lazyloadingdetector\"></div>\n\n### **⚠️ LazyLoadingDetector** - Detect lazy-loaded relations (hidden N+1)\n\n**What it does:**\nWarns when lazy-loaded relations are accessed (often causes hidden N+1 queries).\n\n**The Problem:**\n```typescript\n@Entity()\nclass User {\n  @OneToMany(() => Post, post => post.user)\n  posts: Promise<Post[]>;  // Lazy loaded!\n}\n\n// Usage - looks innocent but causes N+1\nconst users = await userRepo.find();\nfor (const user of users) {\n  const posts = await user.posts;  // Separate query per user!\n}\n```\n\n**Configuration Options:**\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `warnOnLazyLoad` | `boolean` | `true` | ⚠️ **Deprecated** - Use `onLazyLoadDetected` callback instead for custom handling |\n| `suggestEagerLoading` | `boolean` | `true` | When `true`, includes code suggestions in warnings showing how to fix with eager loading (`relations: []` or `.leftJoinAndSelect()`). Helpful for developers learning TypeORM. |\n| `threshold` | `number` | `1` | Number of times same relation can be lazy-loaded before triggering warning. Set to `3-5` to ignore isolated cases and focus on true N+1 patterns. Set to `1` to catch every lazy load. |\n| `enableLogging` | `boolean` | `false` | Log lazy loading warnings to console with suggestions. |\n\n**Event Callbacks:**\n\n| Callback | Parameters | Description |\n|----------|------------|-------------|\n| `onLazyLoadDetected` | `(context: QueryHookContext, relationName: string, count: number)` | Called when lazy loading pattern is detected |\n| `onError` | `(context: QueryHookContext, error: Error)` | Called when detection fails |\n\n**Usage:**\n\n```typescript\nimport { LazyLoadingDetectorPlugin } from 'typeorm-query-hooks/plugins/lazy-loading-detector';\n\nregisterPlugin(LazyLoadingDetectorPlugin({\n  warnOnLazyLoad: true,\n  suggestEagerLoading: true,\n  threshold: 3,\n  enableLogging: true\n}));\n\n// Shows suggestions like:\n// ⚠️ Potential lazy loading detected\n// 💡 Suggestion: Use eager loading:\n//   - Option 1: find({ relations: ['posts'] })\n//   - Option 2: .leftJoinAndSelect('user.posts', 'posts')\n```\n\n\n\n<div id=\"performancemonitor\"></div>\n\n### **⚡ PerformanceMonitor** - Track query execution time\n\n**What it does:**\nMonitors query performance and detects slow queries.\n\n**Configuration Options:**\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `slowQueryThreshold` | `number` | `500` | Queries exceeding this duration (ms) are flagged as \"slow\" and trigger `onSlowQuery` callback. Typical values: 100ms for user-facing queries, 500ms for background jobs, 1000ms for reports. |\n| `enableLogging` | `boolean` | `false` | Log performance metrics for every query (duration, SQL, tables). Can be verbose. |\n\n**Event Callbacks:**\n\n| Callback | Parameters | Description |\n|----------|------------|-------------|\n| `onSlowQuery` | `(context: QueryExecutionContext)` | Called when query exceeds slowQueryThreshold |\n| `onMetric` | `(context: QueryExecutionContext)` | Called for all query completions (for custom metrics) |\n\n**Usage:**\n\n```typescript\nimport { PerformanceMonitorPlugin } from 'typeorm-query-hooks/plugins/performance-monitor';\n\nregisterPlugin(PerformanceMonitorPlugin({\n  slowQueryThreshold: 300,\n  enableLogging: true,\n  onSlowQuery: (context) => {\n    datadog.histogram('db.query.duration', context.executionTime);\n  },\n  onMetric: (context) => {\n    prometheus.histogram('query_duration', context.executionTime);\n  }\n}));\n```\n\n\n\n---\n\n## **🗃️ Data Management**\n\n<div id=\"cacheinvalidation\"></div>\n\n### **🗑️ CacheInvalidation** - Auto-invalidate cache on data changes\n\n**What it does:**\nAutomatically invalidates cache when `INSERT`, `UPDATE`, or `DELETE` operations occur.\n\n**Configuration Options:**\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `invalidateOnTypes` | `string[]` | `['INSERT','UPDATE','DELETE']` | Query types that trigger cache invalidation. SELECT doesn't invalidate. Add `'TRUNCATE'` if needed. Remove types to skip invalidation for certain operations. |\n| `monitorTables` | `string[]` | `[]` (all) | Limit monitoring to specific tables. Example: `['users', 'products']` only invalidates cache for these tables. Empty array = monitor ALL tables. Use to avoid invalidating rarely-cached tables. |\n| `enableLogging` | `boolean` | `false` | Log every cache invalidation (table names, operation type). |\n\n**Event Callbacks:**\n\n| Callback | Parameters | Description |\n|----------|------------|-------------|\n| `onInvalidate` | `(tables: string[], context: QueryExecutionContext)` | ⚠️ **REQUIRED** - Called to clear your cache (Redis, memory, etc.) |\n\n**Usage:**\n\n```typescript\nimport { CacheInvalidationPlugin } from 'typeorm-query-hooks/plugins/cache-invalidation';\n\nregisterPlugin(CacheInvalidationPlugin({\n  onInvalidate: async (tables) => {\n    for (const table of tables) {\n      await redis.del(`cache:${table}:*`);\n    }\n  },\n  monitorTables: ['users', 'products'],  // Only these tables\n  enableLogging: true\n}));\n```\n\n\n\n<div id=\"auditlogging\"></div>\n\n### **📝 AuditLogging** - Track all database operations (GDPR/HIPAA ready)\n\n**What it does:**\nComprehensive audit trail of who did what, when, and on which tables.\n\n**Configuration Options:**\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `auditTypes` | `string[]` | `['INSERT','UPDATE','DELETE']` | Query types to audit. Typically only data modifications. Add `'SELECT'` to audit reads (verbose). |\n| `auditTables` | `string[]` | `[]` (all) | Limit auditing to specific tables containing sensitive data. Example: `['users', 'payments', 'medical_records']`. Empty = audit ALL tables (can be storage-intensive). |\n| `includeSql` | `boolean` | `true` | Include full SQL statement in audit logs. Useful for forensics but increases log size. |\n| `includeParameters` | `boolean` | `false` | ⚠️ **SECURITY RISK** - Include query parameters (actual values) in audit logs. May expose passwords, PII, credit cards. Only enable if logs are encrypted and access-controlled. Recommended: keep `false` for GDPR/HIPAA compliance. |\n| `metadata` | `object\\|function` | `undefined` | Additional data to include in every audit entry. **Object:** static values like `{ app: 'api', version: '1.0' }`. **Function:** dynamic values like `() => ({ requestId: getRequestId(), ip: getClientIP() })`. |\n| `enableLogging` | `boolean` | `false` | Log audit entries to console (in addition to `onAudit` callback). |\n\n**Event Callbacks:**\n\n| Callback | Parameters | Description |\n|----------|------------|-------------|\n| `onAudit` | `(entry: AuditLogEntry)` | ⚠️ **REQUIRED** - Called to persist audit logs |\n| `getUserId` | `() => string \\| number \\| undefined` | Called to get current user ID |\n\n**Usage:**\n\n```typescript\nimport { AuditLoggingPlugin } from 'typeorm-query-hooks/plugins/audit-logging';\n\nregisterPlugin(AuditLoggingPlugin({\n  getUserId: () => getCurrentUser()?.id,\n  onAudit: async (entry) => {\n    await auditLogRepository.save({\n      userId: entry.userId,\n      action: entry.action,\n      tables: entry.tables,\n      timestamp: entry.timestamp,\n      success: entry.success\n    });\n  },\n  auditTypes: ['INSERT', 'UPDATE', 'DELETE'],\n  auditTables: ['users', 'financial_records'],  // Sensitive tables only\n  includeSql: true,\n  includeParameters: false,  // Don't log sensitive data\n  metadata: () => ({ \n    environment: process.env.NODE_ENV,\n    requestId: getRequestId() \n  }),\n  enableLogging: true\n}));\n```\n\n\n\n<div id=\"bulkoperations\"></div>\n\n### **📊 BulkOperations** - Prevent accidental mass updates/deletes\n\n**What it does:**\nDetects operations affecting many rows - prevents accidents like deleting 100,000 records.\n\n**Configuration Options:**\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `bulkThreshold` | `number` | `100` | Number of rows affected to consider an operation \"bulk\". Adjust based on your app: 50 for user-facing tables, 1000+ for analytics tables. Prevents accidental mass operations. |\n| `monitorTypes` | `string[]` | `['INSERT','UPDATE','DELETE']` | Query types to monitor. Bulk SELECTs are rarely dangerous (just slow), so usually only monitor data modifications. |\n| `monitorTables` | `string[]` | `[]` (all) | Limit monitoring to specific tables. Example: `['users', 'orders']` to protect critical tables. Empty = monitor all tables. |\n| `warnOnBulk` | `boolean` | `true` | ⚠️ **Deprecated** - Use `onBulkOperation` callback instead for custom handling |\n| `enableLogging` | `boolean` | `false` | Log bulk operation warnings to console with affected row count. |\n\n**Event Callbacks:**\n\n| Callback | Parameters | Description |\n|----------|------------|-------------|\n| `onBulkOperation` | `(context: QueryResultContext, affectedRows: number)` | Called when operation exceeds bulkThreshold |\n\n**Usage:**\n\n```typescript\nimport { BulkOperationsPlugin } from 'typeorm-query-hooks/plugins/bulk-operations';\n\nregisterPlugin(BulkOperationsPlugin({\n  bulkThreshold: 50,\n  warnOnBulk: true,\n  enableLogging: true,\n  onBulkOperation: (context, affectedRows) => {\n    if (process.env.NODE_ENV === 'production') {\n      throw new Error(`Bulk operation blocked: ${affectedRows} rows`);\n    }\n  }\n}));\n```\n\n\n\n<div id=\"queryresulttransformer\"></div>\n\n### **🔄 QueryResultTransformer** - Auto-transform results to DTOs\n\n**What it does:**\nAutomatically transforms database results to DTOs, removes sensitive data, adds computed fields.\n\n**Configuration Options:**\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `enableLogging` | `boolean` | `false` | Auto-log transformations |\n\n**Event Callbacks:**\n\n| Callback | Parameters | Description |\n|----------|------------|-------------|\n| `transformers` | `Record<string, TransformerFn>` | Transform results by entity/table name |\n| `globalTransformer` | `(result: any, context: QueryResultContext) => any` | Applied to all results before entity transformers |\n| `onTransformed` | `(context: QueryResultContext, originalResult: any, transformedResult: any)` | Called when result was transformed |\n| `onError` | `(context: QueryResultContext, error: Error)` | Called when transformation fails |\n\n**Usage:**\n\n```typescript\nimport { QueryResultTransformerPlugin } from 'typeorm-query-hooks/plugins/query-result-transformer';\n\nregisterPlugin(QueryResultTransformerPlugin({\n  transformers: {\n    User: (user) => ({\n      id: user.id,\n      fullName: `${user.firstName} ${user.lastName}`,\n      email: user.email,\n      // Remove sensitive data\n      password: undefined,\n      resetToken: undefined\n    }),\n    Product: (product) => ({\n      ...product,\n      price: `$${product.price.toFixed(2)}`,\n      inStock: product.quantity > 0\n    })\n  },\n  enableLogging: true\n}));\n```\n\n\n\n---\n\n## **🛠️ Utilities**\n\n<div id=\"tableextractor\"></div>\n\n### **🏷️ TableExtractor** - Extract table names from queries\n\n**What it does:**\nExtracts all table names from any TypeORM query (SELECT, INSERT, UPDATE, DELETE, CTEs, subqueries, joins).\n\n**Configuration Options:**\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `warnOnEmptyTables` | `boolean` | `false` | Emit warning when table extraction returns empty array. Useful for debugging extraction logic or catching malformed queries. Usually safe to keep `false` in production. |\n| `enableLogging` | `boolean` | `false` | Log all extracted table names for every query. Verbose - use for debugging table extraction issues. |\n\n**Event Callbacks:**\n\n| Callback | Parameters | Description |\n|----------|------------|-------------|\n| `onTablesExtracted` | `(context: QueryHookContext, tables: string[])` | Called when tables are successfully extracted |\n| `onEmptyTables` | `(context: QueryHookContext, queryType: string)` | Called when no tables were extracted |\n| `onWarning` | `(context: QueryHookContext, message: string)` | Called for warnings |\n| `onError` | `(context: QueryHookContext, error: Error)` | Called when extraction fails |\n\n**Usage:**\n\n```typescript\nimport { createTableExtractorPlugin, extractTablesFromBuilder } from 'typeorm-query-hooks/plugins/table-extractor';\n\nregisterPlugin(createTableExtractorPlugin({\n  warnOnEmptyTables: true,\n  enableLogging: true\n}));\n\n// Use directly in code:\nconst query = userRepo.createQueryBuilder('user')\n  .leftJoin('user.posts', 'posts');\nconst tables = extractTablesFromBuilder(query);\n// Or:\nconst tables2 = query.getInvolvedTables();\n```\n\n<div id=\"querytypedetector\"></div>\n\n### **🔤 QueryTypeDetector** - Detect SQL query types\n\n**What it does:**\nDetects the type of SQL query being executed (SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, etc.) using TypeORM's internal `expressionMap` (preferred) or SQL string parsing (fallback).\n\n**Why use expressionMap instead of SQL parsing?**\n- ✅ **More reliable** - Uses TypeORM's internal state, not fragile regex\n- ✅ **Faster** - Direct property access vs string parsing\n- ✅ **Type-safe** - TypeORM guarantees the type values\n\n**Configuration Options:**\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `monitorTypes` | `QueryType[]` | `[]` (all) | Only monitor specific query types. Example: `['INSERT', 'UPDATE', 'DELETE']` for write operations only. Empty = monitor all types. |\n| `enableLogging` | `boolean` | `false` | Log all detected query types. Useful for debugging and analytics. |\n\n**Event Callbacks:**\n\n| Callback | Parameters | Description |\n|----------|------------|-------------|\n| `onQueryType` | `(context: QueryTypeContext)` | Called for every query (filtered by `monitorTypes`) |\n| `onSelect` | `(context: QueryTypeContext)` | Called specifically for SELECT queries |\n| `onInsert` | `(context: QueryTypeContext)` | Called specifically for INSERT queries |\n| `onUpdate` | `(context: QueryTypeContext)` | Called specifically for UPDATE queries |\n| `onDelete` | `(context: QueryTypeContext)` | Called specifically for DELETE queries |\n| `onDDL` | `(context: QueryTypeContext)` | Called for DDL operations (CREATE, ALTER, DROP, TRUNCATE) |\n| `onTransaction` | `(context: QueryTypeContext)` | Called for transaction control (BEGIN, COMMIT, ROLLBACK) |\n\n**Supported Query Types:**\n- **DML**: `SELECT`, `INSERT`, `UPDATE`, `DELETE`\n- **DDL**: `CREATE`, `ALTER`, `DROP`, `TRUNCATE`\n- **Transaction**: `BEGIN`, `COMMIT`, `ROLLBACK`\n- **Other**: `WITH` (CTEs), `OTHER` (unknown/unsupported)\n\n**Usage Examples:**\n\n```typescript\nimport { \n  registerPlugin, \n  QueryTypeDetectorPlugin,\n  extractQueryTypeFromBuilder,\n  extractQueryTypeFromSQL\n} from 'typeorm-query-hooks';\n\n// Example 1: Monitor all write operations\nregisterPlugin(QueryTypeDetectorPlugin({\n  monitorTypes: ['INSERT', 'UPDATE', 'DELETE'],\n  onQueryType: (context) => {\n    console.log(`Write operation: ${context.queryType} on ${context.sql.substring(0, 100)}`);\n    // Track in analytics, metrics, etc.\n  }\n}));\n\n// Example 2: Specific callbacks for each operation type\nregisterPlugin(QueryTypeDetectorPlugin({\n  onSelect: (context) => {\n    console.log(`Read query executed: ${context.executionTime}ms`);\n  },\n  onInsert: (context) => {\n    console.log(`New data inserted`);\n    // Invalidate cache, send notifications, etc.\n  },\n  onUpdate: (context) => {\n    console.log(`Data updated`);\n  },\n  onDelete: (context) => {\n    console.warn(`Data deleted - audit this!`);\n  }\n}));\n\n// Example 3: Monitor DDL operations in production (security)\nregisterPlugin(QueryTypeDetectorPlugin({\n  onDDL: (context) => {\n    console.error(`⚠️ DDL operation in production: ${context.queryType}`);\n    // Alert DevOps, log to security system\n  }\n}));\n\n// Example 4: Use directly in code (like TableExtractor)\nconst repo = dataSource.getRepository(User);\n\n// Detect from QueryBuilder (uses expressionMap - preferred!)\nconst selectQuery = repo.createQueryBuilder('user').where('user.id = :id', { id: 1 });\nconst type1 = extractQueryTypeFromBuilder(selectQuery); // \"SELECT\"\n\nconst insertQuery = repo.createQueryBuilder().insert().into(User).values({ name: 'John' });\nconst type2 = extractQueryTypeFromBuilder(insertQuery); // \"INSERT\"\n\n// Detect from SQL string (fallback method)\nconst type3 = extractQueryTypeFromSQL('SELECT * FROM users'); // \"SELECT\"\nconst type4 = extractQueryTypeFromSQL('CREATE INDEX idx_name ON users(name)'); // \"CREATE\"\n\n// Helper functions\nimport { isDML, isDDL, isTransaction } from 'typeorm-query-hooks';\n\nconsole.log(isDML('SELECT'));      // true\nconsole.log(isDML('INSERT'));      // true\nconsole.log(isDML('CREATE'));      // false\n\nconsole.log(isDDL('CREATE'));      // true\nconsole.log(isDDL('ALTER'));       // true\nconsole.log(isDDL('SELECT'));      // false\n\nconsole.log(isTransaction('BEGIN'));   // true\nconsole.log(isTransaction('COMMIT'));  // true\nconsole.log(isTransaction('SELECT'));  // false\n```\n\n**Real-World Use Cases:**\n\n```typescript\n// 1. Analytics: Track read vs write ratio\nlet readCount = 0, writeCount = 0;\nregisterPlugin(QueryTypeDetectorPlugin({\n  onSelect: () => readCount++,\n  onQueryType: (ctx) => {\n    if (['INSERT', 'UPDATE', 'DELETE'].includes(ctx.queryType)) {\n      writeCount++;\n    }\n  }\n}));\n\n// 2. Security: Alert on DDL in production\nif (process.env.NODE_ENV === 'production') {\n  registerPlugin(QueryTypeDetectorPlugin({\n    onDDL: (context) => {\n      alert.critical(`DDL operation detected: ${context.queryType}`, {\n        sql: context.sql,\n        timestamp: context.timestamp\n      });\n    }\n  }));\n}\n\n// 3. Cache invalidation based on operation type\nregisterPlugin(QueryTypeDetectorPlugin({\n  monitorTypes: ['INSERT', 'UPDATE', 'DELETE'],\n  onQueryType: (context) => {\n    // Extract tables and invalidate cache\n    const tables = extractTablesFromBuilder(context.builder);\n    tables.forEach(table => cache.invalidate(table));\n  }\n}));\n\n// 4. Performance monitoring by query type\nconst metrics = {\n  SELECT: { count: 0, totalTime: 0 },\n  INSERT: { count: 0, totalTime: 0 },\n  UPDATE: { count: 0, totalTime: 0 },\n  DELETE: { count: 0, totalTime: 0 }\n};\n\nregisterPlugin(QueryTypeDetectorPlugin({\n  onQueryType: (context) => {\n    const type = context.queryType;\n    if (metrics[type]) {\n      metrics[type].count++;\n      metrics[type].totalTime += context.executionTime || 0;\n    }\n  }\n}));\n\n// Log metrics every 5 minutes\nsetInterval(() => {\n  Object.entries(metrics).forEach(([type, data]) => {\n    console.log(`${type}: ${data.count} queries, avg ${data.totalTime / data.count}ms`);\n  });\n}, 5 * 60 * 1000);\n```\n\n**Comparison: expressionMap vs SQL Parsing**\n\n| Method | Speed | Accuracy | TypeORM Only | Raw SQL |\n|--------|-------|----------|--------------|---------|\n| `extractQueryTypeFromBuilder` (expressionMap) | ⚡ Fast | ✅ 100% | ✅ Yes | ❌ No |\n| `extractQueryTypeFromSQL` (string parsing) | 🐌 Slower | ⚠️ ~95% | ✅ Yes | ✅ Yes |\n\n**The plugin automatically uses the best method available:**\n1. **Priority 1**: expressionMap from QueryBuilder (if available)\n2. **Priority 2**: SQL string parsing (fallback)\n\nThis ensures maximum reliability while supporting all query types!\n\n**Using in Your Logger:**\n\nJust like `getTablesFromSQL()`, you can use `getExtendedQueryTypeFromSQL()` to retrieve the query type in your custom logger:\n\n```typescript\nimport { getExtendedQueryTypeFromSQL, getTablesFromSQL } from 'typeorm-query-hooks';\n\nclass MyCustomLogger implements Logger {\n  logQuery(query: string, parameters?: any[]): void {\n    // Get query type extracted from expressionMap (if available)\n    const queryType = getExtendedQueryTypeFromSQL(query);\n    \n    // Get tables extracted from expressionMap (if available)\n    const tables = getTablesFromSQL(query);\n    \n    this.logger.info('Query executed', {\n      query,\n      queryType,  // \"SELECT\", \"INSERT\", \"CREATE\", \"BEGIN\", etc.\n      tables: tables.join(', '),  // \"users, posts\"\n      parameters\n    });\n  }\n}\n```\n\n**How it works:**\n1. `QueryTypeDetector` plugin extracts query type from `expressionMap` during query execution\n2. Stores it in the metadata registry with AsyncLocalStorage for concurrent safety\n3. Your logger calls `getExtendedQueryTypeFromSQL(sql)` to retrieve it\n4. Returns the stored value instantly (no parsing needed!)\n\n**Benefits:**\n- ✅ **Accurate**: Uses TypeORM's internal state, not regex\n- ✅ **Fast**: No string parsing, just registry lookup\n- ✅ **Complete**: Includes DDL, transactions, CTEs that SQL parsing might miss\n- ✅ **Safe**: Concurrent queries won't interfere with each other\n\n\n\n<div id=\"resultvalidator\"></div>\n\n### **✅ ResultValidator** - Validate query results\n\n**Configuration Options:**\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `largeResultThreshold` | `number` | `1000` | Number of rows to consider a result set \"large\". Triggers `onLargeResult` callback to suggest pagination. Adjust based on your app: lower for API endpoints (100-500), higher for reports (5000+). |\n| `monitorTables` | `string[]` | `[]` (all) | Limit validation to specific tables. Example: `['users', 'orders']` only checks these tables. Empty = monitor all. Use to focus on tables that should always be paginated. |\n| `enableLogging` | `boolean` | `false` | Log validation warnings (empty/large results) to console. |\n\n**Event Callbacks:**\n\n| Callback | Parameters | Description |\n|----------|------------|-------------|\n| `onEmptyResult` | `(context: QueryResultContext)` | Called when query returns no results |\n| `onLargeResult` | `(context: QueryResultContext, rowCount: number)` | Called when result exceeds largeResultThreshold |\n\n**Usage:**\n\n```typescript\nimport { ResultValidatorPlugin } from 'typeorm-query-hooks/plugins/result-validator';\n\nregisterPlugin(ResultValidatorPlugin({\n  largeResultThreshold: 5000,\n  monitorTables: ['users', 'orders'],\n  enableLogging: true,\n  onLargeResult: (context) => {\n    logger.warn(`Large result: ${context.rowCount} rows - consider pagination`);\n  }\n}));\n```\n\n\n\n<div id=\"querymodifier\"></div>\n\n### **✏️ QueryModifier** - Modify queries before execution\n\n**Configuration Options:**\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `enableLogging` | `boolean` | `false` | Auto-log modifications |\n\n**Event Callbacks:**\n\n| Callback | Parameters | Description |\n|----------|------------|-------------|\n| `modifySql` | `(sql: string, context: PreQueryContext) => string` | Modify SQL before execution |\n| `modifyParameters` | `(parameters: any[], context: PreQueryContext) => any[]` | Modify parameters before execution |\n| `shouldExecute` | `(context: PreQueryContext) => boolean` | Return false to cancel query |\n| `onSqlModified` | `(context: PreQueryContext, originalSql: string, modifiedSql: string)` | Called when SQL was modified |\n| `onParametersModified` | `(context: PreQueryContext, originalParams: any[], modifiedParams: any[])` | Called when parameters were modified |\n| `onError` | `(context: PreQueryContext, error: Error)` | Called when modification fails |\n\n**Usage:**\n\n```typescript\nimport { QueryModifierPlugin, TenantFilterModifier, SafetyModifier } from 'typeorm-query-hooks/plugins/query-modifier';\n\n// Multi-tenancy\nregisterPlugin(TenantFilterModifier({\n  getTenantId: () => getCurrentUser().tenantId,\n  tables: ['orders', 'products'],\n  tenantColumn: 'tenant_id'\n}));\n\n// Block queries during maintenance\nregisterPlugin(QueryModifierPlugin({\n  shouldExecute: (context) => {\n    if (isMaintenanceMode()) {\n      console.error('Database in maintenance');\n      return false;\n    }\n    return true;\n  }\n}));\n```\n\n\n\n<div id=\"querycomplexity\"></div>\n\n### **🔍 QueryComplexity** - Warn on complex queries\n\n**Configuration Options:**\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `maxJoins` | `number` | `5` | Maximum number of JOIN clauses before flagging as complex. Queries with many joins are often slow and hard to maintain. Consider denormalization or caching for queries exceeding this. |\n| `maxTables` | `number` | `10` | Maximum number of tables referenced before flagging as complex. High table count suggests overly complex query that may need refactoring. |\n| `warnOnSubqueries` | `boolean` | `false` | Flag queries containing subqueries. Subqueries can be slow (especially correlated ones). Set to `true` to identify candidates for optimization with JOINs or separate queries. |\n| `warnOnCTEs` | `boolean` | `false` | Flag queries with Common Table Expressions (WITH clauses). CTEs can impact performance in some databases. Enable to audit CTE usage. |\n| `enableLogging` | `boolean` | `false` | Log complexity warnings to console with metrics (join count, table count, etc.). |\n\n**Event Callbacks:**\n\n| Callback | Parameters | Description |\n|----------|------------|-------------|\n| `onComplexQuery` | `(context: PreQueryContext, complexity: QueryComplexityInfo)` | Called when query exceeds complexity thresholds |\n\n**Usage:**\n\n```typescript\nimport { QueryComplexityPlugin } from 'typeorm-query-hooks/plugins/query-complexity';\n\nregisterPlugin(QueryComplexityPlugin({\n  maxJoins: 3,\n  maxTables: 5,\n  warnOnSubqueries: true,\n  enableLogging: true\n}));\n```\n\n\n\n<div id=\"querylogger\"></div>\n\n### **🪵 QueryLogger** - Custom query logging with filters\n\nSee plugin documentation for details.\n\n\n\n<div id=\"querymetadataregistry\"></div>\n\n### **💾 QueryMetadataRegistry** - Store query metadata\n\nAutomatically registered when using NestJS integration. See NestJS section below.\n\n\n\n---\n\n## 🎨 Creating Custom Plugins\n\n```typescript\nimport { QueryHookPlugin } from 'typeorm-query-hooks';\n\nconst MyCustomPlugin: QueryHookPlugin = {\n  name: 'MyCustomPlugin',\n  \n  onQueryBuild: (context) => {\n    console.log('Query built:', context.sql);\n  },\n  \n  onQueryComplete: (context) => {\n    console.log(`Query took ${context.executionTime}ms`);\n  },\n  \n  onSlowQuery: (context) => {\n    console.warn('Slow query detected!');\n  }\n};\n\nregisterPlugin(MyCustomPlugin);\n```\n\n---\n\n## 🔧 NestJS Integration\n\n```typescript\n// main.ts or app.module.ts\nimport { enableQueryHooks, registerPlugin } from 'typeorm-query-hooks';\nimport { NPlusOneDetectorPlugin } from 'typeorm-query-hooks/plugins/n-plus-one-detector';\nimport { SafetyGuardPlugin } from 'typeorm-query-hooks/plugins/safety-guard';\n\n// Enable before TypeORM connection\nenableQueryHooks({ verbose: false });\n\n// Register essential plugins\nregisterPlugin(NPlusOneDetectorPlugin({ threshold: 5, enableLogging: true }));\nregisterPlugin(SafetyGuardPlugin({ requireWhereClause: true }));\n\n@Module({\n  imports: [TypeOrmModule.forRoot({ /* ... */ })],\n})\nexport class AppModule {}\n```\n\n---\n\n## 🐛 Debugging\n\nEnable verbose mode to see detailed hook execution:\n\n```typescript\nenableQueryHooks({ verbose: true });\n```\n\n**What it logs:**\n- When hooks are enabled\n- When plugins are registered  \n- When each hook fires\n- SQL queries being captured\n- Tables extracted from queries\n- Execution timing\n\n---\n\n## 📊 Real-World Impact\n\n### **Before typeorm-query-hooks:**\n- ❌ N+1 queries slow down production (found after users complain)\n- ❌ Accidental `DELETE FROM users` without WHERE\n- ❌ Connection pool exhausted → app crash\n- ❌ Slow query → manually copy SQL → run EXPLAIN → find issue\n- ❌ Don't know which file:line caused the query\n\n### **After typeorm-query-hooks:**\n- ✅ N+1 detected in development automatically\n- ✅ Dangerous queries blocked before execution\n- ✅ Connection leaks caught immediately\n- ✅ EXPLAIN runs automatically on slow queries\n- ✅ Exact source location shown for every query\n\n---\n\n## 🌟 Show Your Support\n\nIf this library helps you, please give it a ⭐️ on [GitHub](https://github.com/RoyLeibo/typeorm-query-hooks)!\n\n---\n\n## 📘 TypeScript Types Reference\n\nAll callback parameter types are fully exported and available for import:\n\n### **Core Context Types**\n```typescript\nimport {\n  QueryHookContext,           // Base context for all hooks\n  PreQueryContext,            // Pre-execution hook with setSql(), setParameters()\n  QueryExecutionContext,      // Post-execution with executionTime\n  QueryResultContext,         // With result, rowCount, isEmpty\n  TransactionContext,         // Transaction lifecycle events\n  ConnectionPoolContext,      // Connection pool metrics\n} from 'typeorm-query-hooks';\n```\n\n### **Plugin-Specific Types**\n```typescript\n// Connection Leak Detector\nimport { ConnectionLeak } from 'typeorm-query-hooks';\n\n// Safety Guard\nimport { BlockedOperation } from 'typeorm-query-hooks';\n\n// Audit Logging\nimport { AuditLogEntry } from 'typeorm-query-hooks';\n\n// Query Source Tracer\nimport { SourceLocation, QueryContextWithSource } from 'typeorm-query-hooks';\n\n// Slow Query Analyzer\nimport { QueryExecutionPlan } from 'typeorm-query-hooks';\n\n// Query Complexity\nimport { QueryComplexityMetrics } from 'typeorm-query-hooks';\n\n// Idle Transaction Monitor\nimport { ZombieTransaction } from 'typeorm-query-hooks';\n\n// Query Result Transformer\nimport { TransformerFn } from 'typeorm-query-hooks';\n```\n\n### **Usage Example with Types**\n```typescript\nimport { \n  registerPlugin,\n  QueryExecutionContext,\n  ConnectionLeak,\n  BlockedOperation \n} from 'typeorm-query-hooks';\nimport { SafetyGuardPlugin } from 'typeorm-query-hooks/plugins/safety-guard';\nimport { ConnectionLeakDetectorPlugin } from 'typeorm-query-hooks/plugins/connection-leak-detector';\n\n// Type-safe callbacks\nregisterPlugin(SafetyGuardPlugin({\n  onBlocked: (context: PreQueryContext, blocked: BlockedOperation) => {\n    logger.error('Blocked operation', {\n      operation: blocked.operation,\n      tables: blocked.tables,\n      sql: context.sql\n    });\n  }\n}));\n\nregisterPlugin(ConnectionLeakDetectorPlugin({\n  onLeak: (leak: ConnectionLeak) => {\n    logger.error('Connection leak detected', {\n      age: leak.age,\n      stackTrace: leak.stackTrace\n    });\n  }\n}));\n```\n\n> **Note:** All types are generated from TypeScript source and include full JSDoc comments for IDE autocomplete.\n\n---\n\n## 📄 License\n\nMIT © [Roy Leibovitz](https://github.com/RoyLeibo)\n\n---\n\n**Built with ❤️ to make TypeORM better for everyone**\n","readmeFilename":"README.md"}