{"_id":"@concepta/nestjs-repository-typeorm","_rev":"14-9ae4c8df26cd970e2276cf81c118cf65","name":"@concepta/nestjs-repository-typeorm","dist-tags":{"latest":"8.0.0-alpha.12","alpha":"8.0.0-alpha.11"},"versions":{"8.0.0-alpha.0":{"name":"@concepta/nestjs-repository-typeorm","version":"8.0.0-alpha.0","license":"BSD-3-Clause","_id":"@concepta/nestjs-repository-typeorm@8.0.0-alpha.0","maintainers":[{"name":"leoafarias","email":"leoafarias@gmail.com"},{"name":"mrmaz","email":"marshall.sorenson@gmail.com"}],"dist":{"shasum":"1448f10645d85d61af79c78613fe01cebf846745","tarball":"https://registry.npmjs.org/@concepta/nestjs-repository-typeorm/-/nestjs-repository-typeorm-8.0.0-alpha.0.tgz","fileCount":2,"integrity":"sha512-VjjroH/XG0+N0AAtI4PIaeJohQynZ5vNt2bFcicX+pikctdrt5SXaZztNd5drubCSkiUATOx9BBmw4y4NN7xCw==","signatures":[{"sig":"MEUCIQDIrekFerz1x4zPezA12hx2KjXd5+6Cqx6s/bweWMtipwIgOF5Hn9d5EQJBeSgBykkir3eqoMU99lq1V8FK5Sg2UpM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15803},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"8621ea0a2b7a14f52a2324b578dee4b4318ad7a5","_npmUser":{"name":"mrmaz","email":"marshall.sorenson@gmail.com"},"_npmVersion":"10.8.2","description":"Rockets NestJS TypeORM Repository Module","directories":{},"_nodeVersion":"20.19.5","dependencies":{"@nestjs/common":"^11.1.9","@nestjs/typeorm":"^11.0.0","@tsyche/membrane":"^0.7.0","@concepta/nestjs-hook":"^7.0.0-alpha.10","@concepta/nestjs-common":"^7.0.0-alpha.10","@concepta/nestjs-repository":"^7.0.0-alpha.10"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sqlite3":"^5.1.4","@faker-js/faker":"^8.4.1","@nestjs/testing":"^11.1.9","@concepta/typeorm-seeding":"^4.0.0"},"peerDependencies":{"typeorm":"^0.3.0","class-validator":"*","class-transformer":"*"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-repository-typeorm_8.0.0-alpha.0_1772655575379_0.8646415713321967","host":"s3://npm-registry-packages-npm-production"}},"8.0.0-alpha.1":{"name":"@concepta/nestjs-repository-typeorm","version":"8.0.0-alpha.1","license":"BSD-3-Clause","_id":"@concepta/nestjs-repository-typeorm@8.0.0-alpha.1","maintainers":[{"name":"leoafarias","email":"leoafarias@gmail.com"},{"name":"mrmaz","email":"marshall.sorenson@gmail.com"}],"dist":{"shasum":"1027390d2ed794a73fa32e3d76982dcc5ea51208","tarball":"https://registry.npmjs.org/@concepta/nestjs-repository-typeorm/-/nestjs-repository-typeorm-8.0.0-alpha.1.tgz","fileCount":92,"integrity":"sha512-yaD9CXUVMMC87QQ6d5Ji7iUKMjSy/wyxJF4WM9fSqL27uO5EOzTre/31c9zYHcGLdWQb1LK9pwcl6rhFJ8+Tqg==","signatures":[{"sig":"MEYCIQCoV2FEm4F4u5c/iDF4hLhH+5FB43diC65WaYwmcwwn/gIhAOalyM2sndsR/6bYtQnFm+Mw5B16N2ZWDBsEiTkUxoQI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":135083},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"e5df07eee73df53a7ea9ec12e43a078b07d7f7b1","_npmUser":{"name":"mrmaz","email":"marshall.sorenson@gmail.com"},"_npmVersion":"10.8.2","description":"Rockets NestJS TypeORM Repository Module","directories":{},"_nodeVersion":"20.19.5","dependencies":{"@nestjs/common":"^11.1.9","@nestjs/typeorm":"^11.0.0","@tsyche/membrane":"^0.7.0","@concepta/nestjs-hook":"8.0.0-alpha.1","@concepta/nestjs-common":"8.0.0-alpha.1","@concepta/nestjs-repository":"8.0.0-alpha.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sqlite3":"^5.1.4","@faker-js/faker":"^8.4.1","@nestjs/testing":"^11.1.9","@concepta/typeorm-seeding":"^4.0.0"},"peerDependencies":{"typeorm":"^0.3.0","class-validator":"*","class-transformer":"*"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-repository-typeorm_8.0.0-alpha.1_1772715669082_0.35772330032305866","host":"s3://npm-registry-packages-npm-production"}},"8.0.0-alpha.2":{"name":"@concepta/nestjs-repository-typeorm","version":"8.0.0-alpha.2","license":"BSD-3-Clause","_id":"@concepta/nestjs-repository-typeorm@8.0.0-alpha.2","maintainers":[{"name":"leoafarias","email":"leoafarias@gmail.com"},{"name":"mrmaz","email":"marshall.sorenson@gmail.com"}],"dist":{"shasum":"6816519077fd87d19587cf108761228779d20fa2","tarball":"https://registry.npmjs.org/@concepta/nestjs-repository-typeorm/-/nestjs-repository-typeorm-8.0.0-alpha.2.tgz","fileCount":92,"integrity":"sha512-yrGUv68B9DEF1fCcYH/FxdvpOajvXobqTDnNR0F8HqHkKCMEAx5tQ+z9anQ+fs7eiSvSycP7D1HlsiJme7t7yA==","signatures":[{"sig":"MEQCIDTl9ZEOoyS56BoJcRM+UE2q+n74ruMFmxZlTBzzDWa+AiAJD9ZcFmWMVgbb1221rMnYDYif6lkN57k2jKXq+1pbIQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":138861},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"5df7cda706188f42a0f42295a6c77300c297a9f7","_npmUser":{"name":"mrmaz","email":"marshall.sorenson@gmail.com"},"_npmVersion":"10.8.2","description":"Rockets NestJS TypeORM Repository Module","directories":{},"_nodeVersion":"20.19.5","dependencies":{"@nestjs/common":"^11.1.9","@nestjs/typeorm":"^11.0.0","@tsyche/membrane":"^0.7.0","@concepta/nestjs-hook":"8.0.0-alpha.2","@concepta/nestjs-common":"8.0.0-alpha.2","@concepta/nestjs-repository":"8.0.0-alpha.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sqlite3":"^5.1.4","@faker-js/faker":"^8.4.1","@nestjs/testing":"^11.1.9","@concepta/typeorm-seeding":"^4.0.0"},"peerDependencies":{"typeorm":"^0.3.0","class-validator":"*","class-transformer":"*"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-repository-typeorm_8.0.0-alpha.2_1773954954655_0.3439577762979449","host":"s3://npm-registry-packages-npm-production"}},"8.0.0-alpha.3":{"name":"@concepta/nestjs-repository-typeorm","version":"8.0.0-alpha.3","license":"BSD-3-Clause","_id":"@concepta/nestjs-repository-typeorm@8.0.0-alpha.3","maintainers":[{"name":"leoafarias","email":"leoafarias@gmail.com"},{"name":"mrmaz","email":"marshall.sorenson@gmail.com"}],"dist":{"shasum":"f5c12f1e404aa7d5ffb96af86be339d79ec4681c","tarball":"https://registry.npmjs.org/@concepta/nestjs-repository-typeorm/-/nestjs-repository-typeorm-8.0.0-alpha.3.tgz","fileCount":92,"integrity":"sha512-pueKRhTg0Ij+mPTFFQuxt/De4lLkzTxkIJmgUujOES1kpqzp6VHTrkXChmonYEnjnCziSlA20q0Aq2SLT5si+Q==","signatures":[{"sig":"MEUCID/gNJWOne8iYFE9bl4gnX/4K4jeJUUec+/ZkeK5+TK5AiEA4yN3LFintRYQLJwyDJJCu83B47ynyVA23lk46FEKfs4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":138602},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"580151a37425d0c17c8f113ab55866dc5b0f6855","_npmUser":{"name":"mrmaz","email":"marshall.sorenson@gmail.com"},"_npmVersion":"10.8.2","description":"Rockets NestJS TypeORM Repository Module","directories":{},"_nodeVersion":"20.19.5","dependencies":{"@nestjs/common":"^11.1.9","@nestjs/typeorm":"^11.0.0","@tsyche/membrane":"^0.7.0","@concepta/nestjs-hook":"8.0.0-alpha.3","@concepta/nestjs-common":"8.0.0-alpha.3","@concepta/nestjs-repository":"8.0.0-alpha.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sqlite3":"^5.1.4","@faker-js/faker":"^8.4.1","@nestjs/testing":"^11.1.9","@concepta/typeorm-seeding":"^4.0.0"},"peerDependencies":{"typeorm":"^0.3.0","class-validator":"*","class-transformer":"*"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-repository-typeorm_8.0.0-alpha.3_1775221760285_0.6193416188309258","host":"s3://npm-registry-packages-npm-production"}},"8.0.0-alpha.4":{"name":"@concepta/nestjs-repository-typeorm","version":"8.0.0-alpha.4","license":"BSD-3-Clause","_id":"@concepta/nestjs-repository-typeorm@8.0.0-alpha.4","maintainers":[{"name":"leoafarias","email":"leoafarias@gmail.com"},{"name":"mrmaz","email":"marshall.sorenson@gmail.com"}],"dist":{"shasum":"080760676e5767d9831f214e4207cc7c9435007f","tarball":"https://registry.npmjs.org/@concepta/nestjs-repository-typeorm/-/nestjs-repository-typeorm-8.0.0-alpha.4.tgz","fileCount":92,"integrity":"sha512-r2qiyFwSRvAh2RdWmMMrMZkwzAhWx0cF3rRuXpseUgfiZeBkO8b9HzXQY7dSKway+u9qGnFi6tD9aw6HQtdzUg==","signatures":[{"sig":"MEUCIQCEA0OXNyIewwG5AI4mA4UvyZe70SnEbaH6uMkurrFplgIgfbyh/UzxYd4pnCNyBRpvpHdVz73nscb/GDg6bF71JLY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":133080},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"448b8886aa73db1001b026f5b2ea582dc4d990ce","_npmUser":{"name":"mrmaz","email":"marshall.sorenson@gmail.com"},"_npmVersion":"10.8.2","description":"Rockets NestJS TypeORM Repository Module","directories":{},"_nodeVersion":"20.19.5","dependencies":{"@nestjs/common":"^11.1.9","@nestjs/typeorm":"^11.0.0","@tsyche/membrane":"^0.7.0","@concepta/nestjs-hook":"8.0.0-alpha.4","@concepta/nestjs-common":"8.0.0-alpha.4","@concepta/nestjs-repository":"8.0.0-alpha.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sqlite3":"^5.1.4","@faker-js/faker":"^8.4.1","@nestjs/testing":"^11.1.9","@concepta/typeorm-seeding":"^4.0.0"},"peerDependencies":{"typeorm":"^0.3.0","class-validator":"*","class-transformer":"*"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-repository-typeorm_8.0.0-alpha.4_1775482261624_0.44886585075445673","host":"s3://npm-registry-packages-npm-production"}},"8.0.0-alpha.5":{"name":"@concepta/nestjs-repository-typeorm","version":"8.0.0-alpha.5","license":"BSD-3-Clause","_id":"@concepta/nestjs-repository-typeorm@8.0.0-alpha.5","maintainers":[{"name":"leoafarias","email":"leoafarias@gmail.com"},{"name":"mrmaz","email":"marshall.sorenson@gmail.com"}],"dist":{"shasum":"251dafe0e07fc6194eab59fc3bbc65ba4283cd5f","tarball":"https://registry.npmjs.org/@concepta/nestjs-repository-typeorm/-/nestjs-repository-typeorm-8.0.0-alpha.5.tgz","fileCount":92,"integrity":"sha512-CEKQvuDbzgPWVfs3b5dG16k1lV2K0w4Tbm7jYPMgDkrRQKRPIiqRTTMhKQjaLsN0htHHfyW06htIUIJYvow0QA==","signatures":[{"sig":"MEUCIQCaUeOevV1ekm2l7riucx8v3UWVuRvMqlCueXkGRtxwEAIgZDQHjwK85xexz5IMzH75Xxl3bxXHVKskPnrWECD40lc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131969},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"48fcef1f8f6123ab7e4a3c5102d730b753b97d7f","_npmUser":{"name":"mrmaz","email":"marshall.sorenson@gmail.com"},"_npmVersion":"10.8.2","description":"Rockets NestJS TypeORM Repository Module","directories":{},"_nodeVersion":"20.19.5","dependencies":{"@nestjs/common":"^11.1.9","@nestjs/typeorm":"^11.0.0","@tsyche/membrane":"^0.7.0","@concepta/nestjs-hook":"8.0.0-alpha.5","@concepta/nestjs-common":"8.0.0-alpha.5","@concepta/nestjs-repository":"8.0.0-alpha.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sqlite3":"^5.1.4","@faker-js/faker":"^8.4.1","@nestjs/testing":"^11.1.9","@concepta/typeorm-seeding":"^4.0.0"},"peerDependencies":{"typeorm":"^0.3.0","class-validator":"*","class-transformer":"*"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-repository-typeorm_8.0.0-alpha.5_1777058522206_0.5866810727479492","host":"s3://npm-registry-packages-npm-production"}},"8.0.0-alpha.6":{"name":"@concepta/nestjs-repository-typeorm","version":"8.0.0-alpha.6","license":"BSD-3-Clause","_id":"@concepta/nestjs-repository-typeorm@8.0.0-alpha.6","maintainers":[{"name":"leoafarias","email":"leoafarias@gmail.com"},{"name":"mrmaz","email":"marshall.sorenson@gmail.com"}],"dist":{"shasum":"ad9817a09d624d531d03e971a6ce00c0c6aaf29d","tarball":"https://registry.npmjs.org/@concepta/nestjs-repository-typeorm/-/nestjs-repository-typeorm-8.0.0-alpha.6.tgz","fileCount":92,"integrity":"sha512-P9/LMfKTArGU8gsfkg0OyL92ZwxojfODfF1/ZufiUjyDkZZpTF+iz5eHArgmF1qu0+ZV21zzbu6/m3xiuabQ+g==","signatures":[{"sig":"MEYCIQDRlgkOPa2slAXRXclzHhPXplwv5zL65fhkbyAlIvCqkQIhALc+G1SG6FouJDkD5W+zGVygvsZwmEur5GCUNmFNz0iw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":132005},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"02173c2a821a2bfa82e0534fd878939b6e690a39","_npmUser":{"name":"mrmaz","email":"marshall.sorenson@gmail.com"},"_npmVersion":"10.8.2","description":"Rockets NestJS TypeORM Repository Module","directories":{},"_nodeVersion":"20.19.5","dependencies":{"@nestjs/common":"^11.1.9","@nestjs/typeorm":"^11.0.0","@tsyche/membrane":"^0.7.0","@concepta/nestjs-hook":"8.0.0-alpha.6","@concepta/nestjs-common":"8.0.0-alpha.6","@concepta/nestjs-repository":"8.0.0-alpha.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sqlite3":"^5.1.4","@faker-js/faker":"^8.4.1","@nestjs/testing":"^11.1.9","jest-mock-extended":"^4.0.0","@concepta/typeorm-seeding":"^4.0.0"},"peerDependencies":{"typeorm":"^0.3.0","class-validator":"*","class-transformer":"*"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-repository-typeorm_8.0.0-alpha.6_1777495825442_0.6247456774008877","host":"s3://npm-registry-packages-npm-production"}},"8.0.0-alpha.7":{"name":"@concepta/nestjs-repository-typeorm","version":"8.0.0-alpha.7","license":"BSD-3-Clause","_id":"@concepta/nestjs-repository-typeorm@8.0.0-alpha.7","maintainers":[{"name":"leoafarias","email":"leoafarias@gmail.com"},{"name":"mrmaz","email":"marshall.sorenson@gmail.com"}],"dist":{"shasum":"083fe1002a757bbf21433465a3b64866afd33ec0","tarball":"https://registry.npmjs.org/@concepta/nestjs-repository-typeorm/-/nestjs-repository-typeorm-8.0.0-alpha.7.tgz","fileCount":32,"integrity":"sha512-pvi2mnFQU8SIISKhFHNeRtLpkKLdKNaFL/z3mdKLyT/oolizP/AIIyP78iQvqWdhUZKHknu9GHIbqvji/4NpKA==","signatures":[{"sig":"MEQCIGoGO02DXHNTxt1vLJsh2pIJBCwv7U4v0zwxx4uSr1vAAiAKow6r8Udqob6jJ7S0pmzD3CAUehLtJu02cr2XlqBYDA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63470},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"e5040610813ded61b169a9d6e32add5007924ff2","_npmUser":{"name":"mrmaz","email":"marshall.sorenson@gmail.com"},"_npmVersion":"10.8.2","description":"Rockets NestJS TypeORM Repository Module","directories":{},"_nodeVersion":"20.19.5","dependencies":{"@nestjs/common":"^11.1.9","@nestjs/typeorm":"^11.0.0","@tsyche/membrane":"^0.7.0","@concepta/nestjs-core":"^8.0.0-alpha.7","@concepta/nestjs-repository":"8.0.0-alpha.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sqlite3":"^5.1.4","@faker-js/faker":"^8.4.1","@nestjs/testing":"^11.1.9","jest-mock-extended":"^4.0.0","@concepta/typeorm-seeding":"^4.0.0"},"peerDependencies":{"typeorm":"^0.3.0","class-validator":"*","class-transformer":"*"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-repository-typeorm_8.0.0-alpha.7_1781985073925_0.46500977025018453","host":"s3://npm-registry-packages-npm-production"}},"8.0.0-alpha.8":{"name":"@concepta/nestjs-repository-typeorm","version":"8.0.0-alpha.8","license":"BSD-3-Clause","_id":"@concepta/nestjs-repository-typeorm@8.0.0-alpha.8","maintainers":[{"name":"leoafarias","email":"leoafarias@gmail.com"},{"name":"mrmaz","email":"marshall.sorenson@gmail.com"}],"dist":{"shasum":"fde4616b2477b71396fc0c8925abebd89749a119","tarball":"https://registry.npmjs.org/@concepta/nestjs-repository-typeorm/-/nestjs-repository-typeorm-8.0.0-alpha.8.tgz","fileCount":34,"integrity":"sha512-JnR2xDoBZKI6k+x1gKL61keieAuVv+V69uzo6BDzB2xB75jAzXS+vPo3NWJkibx4+UATBYntL4uLo7WRMBeSTg==","signatures":[{"sig":"MEUCID2cYehsEZtVuMx5IkON6dPUKlepyPdz73guyQ/PCQfWAiEAz1EAvQcd6/nhiVR8zJ2dUxc94QJvbbv/e7GU5s9bi0g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59184},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"3b752ac1855f1385461c378562da549ca3c974fb","_npmUser":{"name":"mrmaz","email":"marshall.sorenson@gmail.com"},"_npmVersion":"10.8.2","description":"Rockets NestJS TypeORM Repository Module","directories":{},"_nodeVersion":"20.19.5","dependencies":{"@nestjs/common":"12.0.0-alpha.5","@nestjs/typeorm":"^11.0.0","@tsyche/membrane":"^0.7.0","@concepta/nestjs-core":"^8.0.0-alpha.8","@concepta/nestjs-repository":"8.0.0-alpha.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sqlite3":"^5.1.4","@faker-js/faker":"^8.4.1","@nestjs/testing":"12.0.0-alpha.5","vitest-mock-extended":"^4.0.0","@concepta/typeorm-seeding":"^4.0.0"},"peerDependencies":{"typeorm":"^0.3.0","class-validator":"*","class-transformer":"*"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-repository-typeorm_8.0.0-alpha.8_1784411143669_0.4536886193437235","host":"s3://npm-registry-packages-npm-production"}},"8.0.0-alpha.9":{"name":"@concepta/nestjs-repository-typeorm","version":"8.0.0-alpha.9","license":"BSD-3-Clause","_id":"@concepta/nestjs-repository-typeorm@8.0.0-alpha.9","maintainers":[{"name":"leoafarias","email":"leoafarias@gmail.com"},{"name":"mrmaz","email":"marshall.sorenson@gmail.com"},{"name":"tnramalho","email":"thiago.nramalho@gmail.com"}],"dist":{"shasum":"3216d55e1e0d59d4fe624089387bc9d60858076b","tarball":"https://registry.npmjs.org/@concepta/nestjs-repository-typeorm/-/nestjs-repository-typeorm-8.0.0-alpha.9.tgz","fileCount":34,"integrity":"sha512-I5VRrJ3M4nK+1PgmKNz3FNY9cOqyFyZBPGdPaJ4HK0HzY1fasgwWD0Zk7iC5tRhjVxOAfnxeZcBEFTOJ0AzhFQ==","signatures":[{"sig":"MEQCIAIkXJ6XEcVMQOXKePZ1xB3t2vwAD7poHjD5r5rAA5/yAiBXJ9Z89hbAhQHnFGoe4iOJRz0sTJ/oKi3NxqBeDbQbLQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59311},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"d374a8ecbb2364c229a46c283bedb7f381ec0dbe","_npmUser":{"name":"mrmaz","email":"marshall.sorenson@gmail.com"},"_npmVersion":"11.16.0","description":"Rockets NestJS TypeORM Repository Module","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@nestjs/common":"12.0.0-alpha.6","@nestjs/typeorm":"^11.0.3","@tsyche/membrane":"^0.7.0","@concepta/nestjs-core":"^8.0.0-alpha.9","@concepta/nestjs-repository":"8.0.0-alpha.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sqlite3":"^5.1.4","@faker-js/faker":"^8.4.1","@nestjs/testing":"12.0.0-alpha.6","vitest-mock-extended":"^4.0.0","@concepta/typeorm-seeding":"^4.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-repository-typeorm_8.0.0-alpha.9_1787607365918_0.9871840729580539","host":"s3://npm-registry-packages-npm-production"}},"8.0.0-alpha.10":{"name":"@concepta/nestjs-repository-typeorm","version":"8.0.0-alpha.10","license":"BSD-3-Clause","_id":"@concepta/nestjs-repository-typeorm@8.0.0-alpha.10","maintainers":[{"name":"leoafarias","email":"leoafarias@gmail.com"},{"name":"mrmaz","email":"marshall.sorenson@gmail.com"},{"name":"tnramalho","email":"thiago.nramalho@gmail.com"}],"dist":{"shasum":"8d629ee168c16e2a6adf8787096afab5265626e4","tarball":"https://registry.npmjs.org/@concepta/nestjs-repository-typeorm/-/nestjs-repository-typeorm-8.0.0-alpha.10.tgz","fileCount":34,"integrity":"sha512-3eabSwXw3leBq+mGsho/hNqnnJKu+C3tub5yTTu0NoH29AK9Biqs9Qqqrnw2F/sB0HbS0nHXCekngM69Ase0rQ==","signatures":[{"sig":"MEUCIQDgz42JE2pMjUa94sLxEOiETX33jdfZc67esP86LqUOYgIgZpYsGxQSUSmBGRceEGyU0QB80zggsuNWGOLjAmP5dks=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58012},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"3d5b377e5b94786d547083850abcc98338b314bc","_npmUser":{"name":"mrmaz","email":"marshall.sorenson@gmail.com"},"_npmVersion":"11.16.0","description":"Rockets NestJS TypeORM Repository Module","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@nestjs/common":"^12.0.1","@nestjs/typeorm":"^12.0.1","@tsyche/membrane":"^0.7.0","@concepta/nestjs-core":"^8.0.0-alpha.10","@concepta/nestjs-repository":"8.0.0-alpha.10"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sqlite3":"^5.1.4","@faker-js/faker":"^8.4.1","@nestjs/testing":"^12.0.1","vitest-mock-extended":"^4.0.0","@concepta/typeorm-seeding":"^4.0.0"},"peerDependencies":{"typeorm":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-repository-typeorm_8.0.0-alpha.10_1788105352550_0.7898722561449893","host":"s3://npm-registry-packages-npm-production"}},"8.0.0-alpha.11":{"name":"@concepta/nestjs-repository-typeorm","version":"8.0.0-alpha.11","license":"BSD-3-Clause","_id":"@concepta/nestjs-repository-typeorm@8.0.0-alpha.11","maintainers":[{"name":"leoafarias","email":"leoafarias@gmail.com"},{"name":"mrmaz","email":"marshall.sorenson@gmail.com"},{"name":"tnramalho","email":"thiago.nramalho@gmail.com"}],"dist":{"shasum":"208ecb7cc57ccaac3b8e3defa9aea02fdc776d9e","tarball":"https://registry.npmjs.org/@concepta/nestjs-repository-typeorm/-/nestjs-repository-typeorm-8.0.0-alpha.11.tgz","fileCount":35,"integrity":"sha512-SF8rub2YKMBfbpQvXx2dICN1K6SrplpVZnbwA1CWND8cRmc3liaC+GWqG7cMhGLYfwczZoudJMuTnVPTbyRkyQ==","signatures":[{"sig":"MEYCIQCC0r/qvhyxNcySAtvzu5itDuiuApoBRLuCvdi2PFffCgIhAIYnwILKT020Zx2AgMXJcbIP8ZfiTiCccTK49rOfa7d6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCiD743U2KPUTLsMyhmCResCcHb4bxvphgcyh70iWbE2AIhAMW6uVJfPBMdlSFJpdmXLnnYDNwhD+2HGOk3MZN0C3A2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65858},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"_npmUser":{"name":"mrmaz","email":"marshall.sorenson@gmail.com"},"description":"Rockets NestJS TypeORM Repository Module","directories":{},"dependencies":{"@nestjs/typeorm":"^12.0.1","@tsyche/membrane":"^0.8.1","@concepta/nestjs-core":"^8.0.0-alpha.11","@concepta/nestjs-repository":"8.0.0-alpha.11"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sqlite3":"^5.1.4","typeorm":"^0.3.28","@nestjs/common":"^12.0.1","@faker-js/faker":"^8.4.1","@nestjs/testing":"^12.0.1","vitest-mock-extended":"^4.0.0","@concepta/typeorm-seeding":"^4.0.0"},"peerDependencies":{"typeorm":"^0.3.0","@nestjs/common":"^12.0.1"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-repository-typeorm_8.0.0-alpha.11_1789070556199_0.36565094974592016","host":"s3://npm-registry-packages-npm-production"}},"8.0.0-alpha.12":{"_id":"@concepta/nestjs-repository-typeorm@8.0.0-alpha.12","dist":{"shasum":"6215d73018c18e9870111e904d863a9df1e9ae01","tarball":"https://registry.npmjs.org/@concepta/nestjs-repository-typeorm/-/nestjs-repository-typeorm-8.0.0-alpha.12.tgz","fileCount":35,"integrity":"sha512-raOwvSqGsnv6w8Owb6EZ/tOvB64MOIgrbzeHQxuYu+USaWaLBBk0t45OTmtrfITeA5MGDezkjDEG4pKAHOIVng==","signatures":[{"sig":"MEUCIQClbSKTOPKR1ZGBVdV/7q9qtNr+aj2BqfKlhfuG2kwXTgIgSOg+NC4xxa5h3CaUylwjib2w2A4P3UzFlNiot1FVxpY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDRfVaIOeW4VlGE9AswRG6qUEeo403Cv/DXXRdIiKwxjgIhAOgtA3Q1PxxOCCCYCG7J8T89rcLn9U/lpVakW+QmOTeY"}],"unpackedSize":69323},"main":"./dist/index.js","name":"@concepta/nestjs-repository-typeorm","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"license":"BSD-3-Clause","version":"8.0.0-alpha.12","_npmUser":{"name":"mrmaz","email":"marshall.sorenson@gmail.com"},"description":"Rockets NestJS TypeORM Repository Module","directories":{},"maintainers":[{"name":"leoafarias","email":"leoafarias@gmail.com"},{"name":"mrmaz","email":"marshall.sorenson@gmail.com"},{"name":"tnramalho","email":"thiago.nramalho@gmail.com"}],"dependencies":{"@nestjs/typeorm":"^12.0.1","@tsyche/membrane":"^0.8.1","@concepta/nestjs-core":"^8.0.0-alpha.12","@concepta/nestjs-repository":"8.0.0-alpha.12"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sqlite3":"^5.1.4","typeorm":"^0.3.28","@nestjs/common":"^12.0.1","@faker-js/faker":"^8.4.1","@nestjs/testing":"^12.0.1","vitest-mock-extended":"^4.0.0","@concepta/typeorm-seeding":"^4.0.0"},"peerDependencies":{"typeorm":"^0.3.0","@nestjs/common":"^12.0.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nestjs-repository-typeorm_8.0.0-alpha.12_1789312601811_0.07095355888724075"}}},"time":{"created":"2026-03-04T20:19:35.221Z","modified":"2026-09-13T15:16:42.058Z","8.0.0-alpha.0":"2026-03-04T20:19:35.523Z","8.0.0-alpha.1":"2026-03-05T13:01:09.243Z","8.0.0-alpha.2":"2026-03-19T21:15:54.820Z","8.0.0-alpha.3":"2026-04-03T13:09:20.421Z","8.0.0-alpha.4":"2026-04-06T13:31:01.781Z","8.0.0-alpha.5":"2026-04-24T19:22:02.349Z","8.0.0-alpha.6":"2026-04-29T20:50:25.585Z","8.0.0-alpha.7":"2026-06-20T19:51:14.054Z","8.0.0-alpha.8":"2026-07-18T21:45:43.799Z","8.0.0-alpha.9":"2026-08-24T21:36:06.056Z","8.0.0-alpha.10":"2026-08-30T15:55:52.712Z","8.0.0-alpha.11":"2026-09-10T20:02:36.296Z","8.0.0-alpha.12":"2026-09-13T15:16:41.887Z"},"license":"BSD-3-Clause","description":"Rockets NestJS TypeORM Repository Module","maintainers":[{"name":"leoafarias","email":"leoafarias@gmail.com"},{"name":"mrmaz","email":"marshall.sorenson@gmail.com"},{"name":"tnramalho","email":"thiago.nramalho@gmail.com"}],"readme":"# @concepta/nestjs-repository-typeorm\n\nTypeORM driver for `@concepta/nestjs-repository`. Provides `TypeOrmRepository`\n(extending `RepositoryAdapter`), `TypeOrmTransaction` / `TypeOrmTransactionFactory`\nfor automatic transaction management, WhereClause-to-TypeORM translation, and\ndatabase-specific base entities for Postgres and SQLite.\n\n## Project\n\n[![NPM Latest](https://img.shields.io/npm/v/@concepta/nestjs-repository-typeorm)](https://www.npmjs.com/package/@concepta/nestjs-repository-typeorm)\n[![NPM Downloads](https://img.shields.io/npm/dw/@concepta/nestjs-repository-typeorm)](https://www.npmjs.com/package/@concepta/nestjs-repository-typeorm)\n[![GH Last Commit](https://img.shields.io/github/last-commit/conceptadev/rockets?logo=github)](https://github.com/conceptadev/rockets)\n[![GH Contrib](https://img.shields.io/github/contributors/conceptadev/rockets?logo=github)](https://github.com/conceptadev/rockets/graphs/contributors)\n[![NestJS Dep](https://img.shields.io/github/package-json/dependency-version/conceptadev/nestjs-modules/peer/@nestjs/common/feature/version-8?label=NestJS&logo=nestjs&filename=packages%2Fnestjs-repository-typeorm%2Fpackage.json)](https://www.npmjs.com/package/@nestjs/common)\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Module Registration](#module-registration)\n- [TypeOrmRepository](#typeormrepository)\n- [WhereClause Translation](#whereclause-translation)\n- [Transaction Support](#transaction-support)\n- [Repository Hooks](#repository-hooks)\n- [Base Entities](#base-entities)\n- [Exceptions](#exceptions)\n- [Entry Points](#entry-points)\n\n## Installation\n\n```sh\nyarn add @concepta/nestjs-repository-typeorm @nestjs/common typeorm\n```\n\n### Requirements\n\nESM-only — no CJS build is published. Requires Node `>= 22.12` and\nNestJS 12.\n\n### Dependencies\n\n| Package | Notes |\n| --- | --- |\n| `@concepta/nestjs-core` | Core interfaces, utilities, and hook system |\n| `@concepta/nestjs-repository` | Abstract repository layer (`RepositoryAdapter`) |\n| `@nestjs/typeorm` | TypeORM integration for NestJS |\n| `@tsyche/membrane` | Hook pipeline (`Permeator`/`Membrane`) |\n\n### Peer Dependencies\n\n| Package | Required | Notes |\n| --- | --- | --- |\n| `@nestjs/common` | Yes | NestJS core — install explicitly, no longer bundled |\n| `typeorm` | Yes | TypeORM ^0.3.0 |\n\n## Module Registration\n\n### With RepositoryModule (recommended)\n\nUse `RepositoryModule.forFeature()` to register entities through the\nTypeORM driver. This provides transaction management, repository hooks,\nand duplicate key detection.\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { TypeOrmModule } from '@nestjs/typeorm';\nimport { RepositoryModule } from '@concepta/nestjs-repository';\nimport { TypeOrmRepositoryModule } from '@concepta/nestjs-repository-typeorm';\n\n@Module({\n  imports: [\n    TypeOrmModule.forRoot({\n      type: 'postgres',\n      url: 'postgres://user:pass@localhost:5432/mydb',\n      entities: [OrderEntity, CustomerEntity],\n    }),\n    RepositoryModule.forRoot({}),\n    RepositoryModule.forFeature({\n      module: TypeOrmRepositoryModule,\n      entities: [\n        { key: 'orders', entity: OrderEntity },\n        { key: 'customers', entity: CustomerEntity },\n      ],\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\nEach entity key creates a `TypeOrmRepository` instance injectable via\n`@InjectDynamicRepository(key)`.\n\n### Direct Usage\n\n`TypeOrmRepositoryModule` can also be used directly without `RepositoryModule`:\n\n```ts\n@Module({\n  imports: [\n    TypeOrmModule.forRoot({ /* ... */ }),\n    TypeOrmRepositoryModule.forFeature([\n      { key: 'orders', entity: OrderEntity },\n      { key: 'customers', entity: CustomerEntity, dataSource: 'secondary' },\n      { key: 'audit', entity: AuditLog, factory: createAuditRepository },\n    ]),\n  ],\n})\nexport class AppModule {}\n```\n\n### Provider Options\n\n```ts\ninterface TypeOrmProviderOptionsInterface<Entity> extends RepositoryProviderOptions<Entity> {\n  key: string;                                             // Injection key\n  entity: Type<Entity>;                                    // TypeORM entity class\n  dataSource?: TypeOrmDataSourceToken;                     // Data source (default: 'default')\n  factory?: (dataSource: DataSource) => Repository<Entity>; // Custom repository factory\n}\n```\n\n- **`key`** -- string key used with `@InjectDynamicRepository(key)`\n- **`entity`** -- TypeORM entity class\n- **`dataSource`** -- optional data source name, `DataSource` instance, or\n  `DataSourceOptions`; defaults to `'default'`\n- **`factory`** -- optional factory for custom TypeORM repositories; receives\n  `DataSource`, returns `Repository<Entity>`\n\n### Injecting Repositories\n\n```ts\nimport { Injectable } from '@nestjs/common';\nimport { InjectDynamicRepository } from '@concepta/nestjs-repository';\nimport { TypeOrmRepository } from '@concepta/nestjs-repository-typeorm';\n\n@Injectable()\nexport class OrderService {\n  constructor(\n    @InjectDynamicRepository('orders')\n    private readonly orderRepo: TypeOrmRepository<OrderEntity>,\n  ) {}\n\n  async findAll(): Promise<OrderEntity[]> {\n    return this.orderRepo.find();\n  }\n}\n```\n\n## TypeOrmRepository\n\n`TypeOrmRepository` extends `RepositoryAdapter` from\n`@concepta/nestjs-repository` and implements the protected `do*` template\nmethods using TypeORM; the public methods below are inherited concrete\nwrappers that run the hook pipeline. Every operation is transaction-aware,\nruns repository hooks, and wraps opaque driver errors in\n`RepositoryQueryException`. Purpose-built `RuntimeException` subclasses such\nas `OptimisticLockException` propagate unwrapped so callers can catch them\nby type.\n\n### Methods\n\n| Category | Method | Signature |\n| --- | --- | --- |\n| Query | `find` | `(options?) => Promise<Entity[]>` |\n| Query | `findOne` | `(options) => Promise<Entity \\| null>` |\n| Query | `count` | `(options?) => Promise<number>` |\n| Query | `findAndCount` | `(options?) => Promise<[Entity[], number]>` |\n| Create | `create` | `(entity, options?) => Promise<Entity>` |\n| Create | `createMany` | `(entities, options?) => Promise<Entity[]>` |\n| Update | `update` | `(entity, data, options?) => Promise<Entity>` |\n| Update | `upsert` | `(entity, options?) => Promise<Entity>` |\n| Update | `replace` | `(entity, data, options?) => Promise<Entity>` |\n| Delete | `delete` | `(entity, options?) => Promise<Entity>` |\n| Delete | `deleteMany` | `(entities, options?) => Promise<Entity[]>` |\n| Delete | `softDelete` | `(entity, options?) => Promise<Entity>` |\n| Lifecycle | `restore` | `(entity, options?) => Promise<Entity>` |\n| Utility | `transform` | `(entityLike) => Entity` |\n| Utility | `merge` | `(mergeIntoEntity, ...entityLikes) => Entity` |\n| Utility | `prepare` | `(dto) => Entity \\| undefined` |\n\nAll query and mutation methods accept an `options` parameter that includes\nan optional `ctx` (repository context) for transaction and hook support.\n\n### Optimistic Locking\n\n`update`/`replace` automatically enforce optimistic locking whenever the\ntarget entity carries a TypeORM `@VersionColumn` — which includes every\nentity extending `AuditPostgresEntity`, `AuditSqliteEntity`,\n`CommonPostgresEntity`, or `CommonSqliteEntity` (see\n[Base Entities](#base-entities)), plus any entity that declares one itself.\nThe check derives entirely from the `entity` argument the caller already\npasses in: its version is compared, atomically, against the row's current\nversion at write time, and a stale write — one based on an `entity` fetched\nbefore someone else already updated it — is rejected with\n`OptimisticLockException` (HTTP 409) instead of silently overwriting the\nconcurrent change. No extra API surface and no opt-in required, but two\nbehaviors do change for versioned entities. First, the write is applied to\na freshly re-read row rather than to the `entity` you passed: your `entity`\ninstance is no longer mutated in place, the returned entity is a different\nobject with no relations loaded, and any in-memory changes you made to\n`entity` that aren't also in `data` are discarded — read the result back\nfrom the return value. Second, because the guard runs inside a\n`TransactionScope.run()` (see below), a conflict dooms the enclosing\ntransaction — catching `OptimisticLockException` and continuing does not\nrescue it; retry the whole transaction from outside, re-reading the entity\nfirst.\n\nThe check runs inside a transaction, opening one scoped to just that call\nif the caller isn't already inside one (e.g. via `@Transactional()`), so a\nthird writer can't interleave between the version check and the field\nwrite — **when `RepositoryModule.forRoot()` is imported**, since it's the\none that provides `TransactionScope`. If `TypeOrmRepositoryModule` is used\ndirectly without it (see [Module Registration](#module-registration)) and\nthe caller isn't already inside their own active transaction, `update`/\n`replace` on a versioned entity throws immediately — a `RuntimeException`\nwhose message names the entity and points at `RepositoryModule.forRoot()` —\nrather than silently running the guard and the write as two separate,\nunprotected statements. This is a configuration error surfaced at call\ntime, not a runtime conflict; it is not an `OptimisticLockException`.\n\nA version value supplied by the caller in `data` is always ignored — only\nthe version read from the `entity` argument, and the row's own\nauto-incrementing column, ever determine the real version. This is\ndistinct from `options.expectedVersion`, below, which the caller *does*\ncontrol.\n\n### Expected Version (cross-request optimistic locking)\n\nThe check above guards a read-then-write inside one request; it can't stop\ntwo requests that each re-read before writing, since each compares against\nits own fresh value. Passing `expectedVersion` in `options` (see\n[nestjs-repository's Expected Version\nsection](../nestjs-repository/README.md#expected-version)) extends the\nsame atomic compare-and-swap mechanism to `delete`, `softDelete`, and\n`restore` as well — but, unlike `update`/`replace`, only when the caller\nactually supplies one. That's what keeps this non-breaking: an existing\ncaller of those three methods that never passes `expectedVersion` inherits\nno new transaction requirement.\n\nThis driver never decides *whether* a guard applies or *what* value to\ncheck — `RepositoryAdapter` resolves that into a `RepositoryVersionGuardInterface`\ndescriptor and hands it down as `options.versionGuard`; the driver's only\njob is running the atomic `UPDATE ... WHERE <column> = <value>` probe\nagainst whatever descriptor it's given.\n\nTwo caveats carried over from the in-request check: on MySQL, the probe\nrelies on `affected` reflecting rows *matched*, not rows *changed* — true\nby default for Postgres and sqlite, but on MySQL only with\n`CLIENT_FOUND_ROWS` enabled, so an entity with no other auto-updating\ncolumn (e.g. no `@UpdateDateColumn`) can see a false conflict without it.\nAnd supplying `expectedVersion` to `softDelete` on an already-soft-deleted\nrow *voids* the idempotency guarantee below by design: a stale entity\nwhose caller honestly restates its own (also stale) version passes the\nin-memory check trivially, so the no-op is skipped and the driver's CAS\nconflicts instead — the discriminating case is exactly what makes\n`expectedVersion` on delete paths meaningful. (Unreachable over HTTP:\n`nestjs-crud`'s `getOneOrFail` always re-reads with `withDeleted: false`\nbefore a soft-delete, so an already-soft-deleted row 404s first.)\n\n### Soft-Deleted Immutability\n\n`update`, `replace`, and `upsert` reject a soft-deleted target with\n`SoftDeletedImmutableException` (HTTP 409) — enforced once in\n`RepositoryAdapter` itself, so this driver has no separate opt-out logic to\nmaintain. See [nestjs-repository's Soft-Deleted Immutability\nsection](../nestjs-repository/README.md#soft-deleted-immutability) for the\n`{ force: true }` escape hatch and the `softDelete()` no-op behavior.\n\nEntities without a version column are unaffected — `update`/`replace`\nbehave exactly as before.\n\n### Transaction Awareness\n\nWhen a `PlainLiteralObject` context with an active `trx` is provided,\n`TypeOrmRepository` automatically:\n\n1. Resolves the TypeORM transaction via `ctx.trx.getOrStart(transactionKey)`\n2. Uses the transactional `EntityManager` for all operations\n\n## WhereClause Translation\n\n`TypeOrmRepository` translates the ORM-agnostic `WhereClause` AST from\n`@concepta/nestjs-repository` into TypeORM `FindOptionsWhere` objects.\n\n### Supported Operators\n\n| WhereOperator | TypeORM Translation | Description |\n| --- | --- | --- |\n| `eq` | `Equal(value)` | Equal |\n| `ne` | `Not(Equal(value))` | Not equal |\n| `gt` | `MoreThan(value)` | Greater than |\n| `gte` | `MoreThanOrEqual(value)` | Greater than or equal |\n| `lt` | `LessThan(value)` | Less than |\n| `lte` | `LessThanOrEqual(value)` | Less than or equal |\n| `contains` | `Like('%value%')` | Contains substring |\n| `ncontains` | `Not(Like('%value%'))` | Does not contain substring |\n| `starts` | `Like('value%')` | Starts with |\n| `nstarts` | `Not(Like('value%'))` | Does not start with |\n| `ends` | `Like('%value')` | Ends with |\n| `nends` | `Not(Like('%value'))` | Does not end with |\n| `in` | `In(values)` | In array |\n| `nin` | `Not(In(values))` | Not in array |\n| `null` | `IsNull()` | Is null |\n| `nnull` | `Not(IsNull())` | Is not null |\n| `between` | `Between(from, to)` | Between range |\n\n### Compound Operators\n\n| Operator | Description |\n| --- | --- |\n| `and` | All conditions must match |\n| `or` | Any condition must match |\n\n### Using the Where Builder\n\nThe `Where` helper from `@concepta/nestjs-repository` builds `WhereClause`\nobjects that `TypeOrmRepository` translates automatically:\n\n```ts\nimport { Where } from '@concepta/nestjs-repository';\n\n// Static API\nconst orders = await orderRepo.find(\n  Where.where(\n    Where.and(\n      Where.eq<OrderEntity>('status', 'active'),\n      Where.gt<OrderEntity>('total', 100),\n    ),\n  ),\n);\n\n// Typed builder API\nconst w = Where.for<OrderEntity>();\nconst orders = await orderRepo.find(\n  w.where(\n    w.and(\n      w.eq('status', 'active'),\n      w.or(\n        w.gte('total', 1000),\n        w.contains('notes', 'priority'),\n      ),\n    ),\n  ),\n);\n```\n\n### Translation Process\n\n1. The `WhereClause` AST is flattened into Disjunctive Normal Form (DNF)\n   using `toDnf()` from `RepositoryAdapter`\n2. Each AND-branch is translated to a TypeORM `FindOptionsWhere` object\n3. Same-field conditions within a branch are merged using TypeORM `And()`\n4. The resulting array of `FindOptionsWhere` objects represents the OR\n   of all branches\n\n## Transaction Support\n\nThis module provides `TypeOrmTransaction` and `TypeOrmTransactionFactory`\nfor integration with `@concepta/nestjs-repository`'s transaction layer.\n\n### TypeOrmTransaction\n\nWraps a TypeORM `QueryRunner` to manage transaction lifecycle:\n\n```ts\nconst tx = new TypeOrmTransaction(dataSource);\nawait tx.start();\n\nconst manager = tx.getClient<EntityManager>();\nawait manager.save(entity);\n\nawait tx.commit();\n```\n\n| Property / Method | Description |\n| --- | --- |\n| `isActive` | Whether the transaction is currently active |\n| `start()` | Create a QueryRunner and begin a transaction |\n| `commit()` | Commit the transaction and release the QueryRunner |\n| `rollback()` | Rollback the transaction and release the QueryRunner |\n| `getClient<T>()` | Get the transactional `EntityManager` |\n\n### TypeOrmTransactionFactory\n\nFactory for creating `TypeOrmTransaction` instances. Automatically registered\nwith the `TransactionFactoryRegistry` when using `RepositoryModule.forFeature()`.\n\nThe transaction key follows the pattern `typeorm:<dataSourceName>` (e.g.,\n`typeorm:default`).\n\n### Automatic Transaction Integration\n\nWhen `TypeOrmRepositoryModule` is used via `RepositoryModule.forFeature()`,\ntransaction factories are registered automatically. The `TypeOrmRepository`\njoins transactions from the context:\n\n```ts\nimport { TransactionScope } from '@concepta/nestjs-repository';\n\n@Injectable()\nexport class OrderService {\n  constructor(\n    private readonly txScope: TransactionScope,\n    @InjectDynamicRepository('orders')\n    private readonly orderRepo: TypeOrmRepository<OrderEntity>,\n  ) {}\n\n  async createOrder(ctx: PlainLiteralObject, dto: DeepPartial<OrderEntity>) {\n    return this.txScope.run(ctx, async (txCtx) => {\n      // TypeOrmRepository automatically uses the transactional EntityManager\n      return this.orderRepo.create(dto, { ctx: txCtx });\n    });\n  }\n}\n```\n\n## Repository Hooks\n\n`TypeOrmRepository` runs repository hooks from `@concepta/nestjs-repository`\nat each operation lifecycle stage. Both high-level semantic hooks and\nfine-grained hooks fire automatically.\n\n| Operation | Before Hooks | After Hooks |\n| --- | --- | --- |\n| `find` | `beforeRead` -> `beforeFind` | `afterFind` -> `afterRead` |\n| `findOne` | `beforeRead` -> `beforeFindOne` | `afterFindOne` -> `afterRead` |\n| `count` | `beforeRead` -> `beforeCount` | `afterCount` |\n| `findAndCount` | `beforeRead` -> `beforeFindAndCount` | `afterFindAndCount` |\n| `create` | `beforeWrite` -> `beforeCreate` | `afterCreate` -> `afterWrite` |\n| `createMany` | `beforeWrite` -> `beforeCreateMany` | `afterCreateMany` -> `afterWrite` |\n| `update` | `beforeWrite` -> `beforeUpdate` | `afterUpdate` -> `afterWrite` |\n| `upsert` | `beforeWrite` -> `beforeUpsert` | `afterUpsert` -> `afterWrite` |\n| `replace` | `beforeWrite` -> `beforeReplace` | `afterReplace` -> `afterWrite` |\n| `delete` | `beforeDestroy` -> `beforeDelete` | `afterDelete` -> `afterDestroy` |\n| `deleteMany` | `beforeDestroy` -> `beforeDeleteMany` | `afterDeleteMany` -> `afterDestroy` |\n| `softDelete` | `beforeTransition` -> `beforeSoftDelete` | `afterSoftDelete` -> `afterTransition` |\n| `restore` | `beforeTransition` -> `beforeRestore` | `afterRestore` -> `afterTransition` |\n\nHooks are resolved via `HookResolverService` from `@concepta/nestjs-core`.\nThe hook resolver is optional -- `TypeOrmRepository` works without it.\n\n## Base Entities\n\nThe module provides abstract base entities for Postgres and SQLite with\naudit fields and optimistic locking.\n\n### Core Base Entities\n\n| Entity | Database | Extends | Key Fields |\n| --- | --- | --- | --- |\n| `AuditPostgresEntity` | Postgres | -- | dateCreated, dateUpdated, dateDeleted (`timestamptz`), version |\n| `AuditSqliteEntity` | SQLite | -- | dateCreated, dateUpdated, dateDeleted, version |\n| `CommonPostgresEntity` | Postgres | `AuditPostgresEntity` | id (UUID primary key) |\n| `CommonSqliteEntity` | SQLite | `AuditSqliteEntity` | id (UUID primary key) |\n\n`AuditPostgresEntity` uses `@CreateDateColumn`, `@UpdateDateColumn`,\n`@DeleteDateColumn` (for soft deletes), and `@VersionColumn` (for\noptimistic locking). The Postgres variant uses `timestamptz` column types.\n\n### Using Base Entities\n\n```ts\nimport { Entity, Column } from 'typeorm';\nimport { CommonPostgresEntity } from '@concepta/nestjs-repository-typeorm';\n\n@Entity()\nexport class OrderEntity extends CommonPostgresEntity {\n  @Column()\n  status!: string;\n\n  @Column('uuid')\n  customerId!: string;\n}\n```\n\nThis gives `OrderEntity` the `id`, `dateCreated`, `dateUpdated`,\n`dateDeleted`, and `version` fields automatically.\n\n## Exceptions\n\n| Exception | Package | Description |\n| --- | --- | --- |\n| `RepositoryQueryException` | `@concepta/nestjs-repository` | Repository query error (wraps original error) |\n| `OptimisticLockException` | `@concepta/nestjs-repository` | An `update`/`replace` targeted a stale version — see [Optimistic Locking](#optimistic-locking) |\n\n## Entry Points\n\n| Import Path | Contents |\n| --- | --- |\n| `@concepta/nestjs-repository-typeorm` | `TypeOrmRepositoryModule`, `TypeOrmRepository`, `TypeOrmProviderOptionsInterface`, `TypeOrmTransaction`, `TypeOrmTransactionFactory`, `AuditPostgresEntity`, `AuditSqliteEntity`, `CommonPostgresEntity`, `CommonSqliteEntity` |\n","readmeFilename":""}