{"_id":"@anephenix/objection-relations","_rev":"25-43164d7320c2a6c1ba5d89edf68e4001","name":"@anephenix/objection-relations","dist-tags":{"latest":"0.0.27"},"versions":{"0.0.1":{"name":"@anephenix/objection-relations","version":"0.0.1","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.1","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"30ecdf4d031c93c151b4a1b4df3881fa4629333f","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.1.tgz","fileCount":12,"integrity":"sha512-hmXLqRWBf6MZG+KxSiITfOHk8lwoVStxwZQdBRPJzdhubuXHJGH5mL7oHC/9xqZRQVWUJ3/biJP+48Y6Qq+yxA==","signatures":[{"sig":"MEQCIG8QfD3EOxr1ApwdDGzHihnO9V2WWUD3YbFKttFTh6b0AiB9qrqdKosLjevNxPMSJpj+H4hmsaQcFo3aF2aWHaU9rQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49258,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiCPbcCRA9TVsSAnZWagAAAIsP/1Mj1viGC6iAcT56NCVo\n4gCvkT22s7mDb9Nbjsu/7mcMKc2Tqt8d2zv2ZB/Apssf3uY8kwvfbnmNw67K\ngmSbMqEgo1+xYCPjyXDEywUCOkSloXe+7CNKaxJ29NuM+gY0uprnJaG3EmjA\nomamqdZo2qUb23H0uv4O/zsnmWo+Uqd4/FwW5bFhDC6Cuw+CTIsXrslu35Y9\nNuTym+Lq6bN/0rYvdim5dTAzPoG0fyyqUWQXTMPqJndgHbAse+m/n22bdU+o\nbHAonvjQoqkj86s2KCZ432q7VDjJpBOhur+KsTHCSQ0p0j3oDxuuDWj0uBW0\nhTFUKtq1zfMG80lI1qzD69pBEufuSQmfRW9mpDmxgdlLepa4v5JnHokCKgPq\nwhd7UJKPzV1vW1FryEPaaQgxMF2jrULm/RlJre/UpSaMoEKycLK0VVSoS1kn\ngr3RlsJs5apyUcr0OVnjlfcBMtUFdthdvJR0lpCpxKvzx+PrQ+7GJiHY7+n2\nXSJyTxFBy3ND8fejDIri2qJKblYOnODdIXarGt+4jgdyOflA1PjfJBy8HATJ\nqUCOVGlzzrGq1ziWNV1pt2s5v4+nryaGwU1O2J/of1i1jXuu9oSw4nzIsKkG\niqbp5BVllwSmFLXACe7DyZsb4VoIp9NK8TGxnzSgAXwKxny0zlrDylRciL4A\n/2dN\r\n=x0nU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"tsdx lint && tsdx test"}},"module":"dist/objection-relations.esm.js","engines":{"node":">=10"},"gitHead":"293c9c16c642d9229b8e2178878e22ccbe6458ec","scripts":{"lint":"tsdx lint","size":"size-limit","test":"tsdx test","build":"tsdx build --target node","start":"tsdx watch --target node","analyze":"size-limit --why","prepare":"tsdx build --target node"},"typings":"dist/index.d.ts","_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/objection-relations.cjs.production.min.js","limit":"10 KB"},{"path":"dist/objection-relations.esm.js","limit":"10 KB"}],"_npmVersion":"7.10.0","description":"A relations helper for Objection.js. This provides a convenient way to define relations in the `relationMappings` function on an Objection.js model.","directories":{},"_nodeVersion":"16.0.0","dependencies":{"objection":"^3.0.1","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","husky":"^7.0.4","tslib":"^1.14.1","size-limit":"^7.0.8","typescript":"^4.5.5","@types/jest":"^27.4.0","npm-upgrade":"^3.1.0","@types/pluralize":"^0.0.29","@types/lodash.snakecase":"^4.1.6","@size-limit/preset-small-lib":"^7.0.8"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.1_1644754651867_0.4929019155663623","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"@anephenix/objection-relations","version":"0.0.2","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.2","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"54503000d830334c7b566918523ee17b7b4b26bb","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.2.tgz","fileCount":17,"integrity":"sha512-fYzKtxZ4vDyaIEr2mD97SDtPSfYNagqSm2oP2s0oGMWnreoKqP8Yt5uq/qvYsw2u3WpVc4JmQ8swYBhZAIwlIQ==","signatures":[{"sig":"MEYCIQDLoNeMUunBjnVwLIZnPkVo3lwjoRWNnlZakpjcXz032QIhAM8sWjyOUj4meCLG0kqneqhl75D7FOdnafjuD6AY/Jsv","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67145,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiEMN5ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo8kQ//T0OLxOU1XuKm5KyZWFxlVXrBzcqQbWr5hKQWJFbFDJkMWz1r\r\nqKgIRJnuoBlgBKwyI+CdqpDDamxVHN1w90/yO5SHyrzzHliG2LD5EP3qCCfz\r\nuWbd2q4cCjcBbvnWGErW4gzvuPOVvArOk0EgGdaORunS/GI+vptCKDsLMWxI\r\nfKRFdaDOBDekQ/caBW1SrXZ1VQn2tDoQJ64EMGayPJmArfSDbvFdJSFtGYq6\r\niGbLbsKUY4zpPvrzieTGMOAOJvxbW0Y5WYxUI4A+UA+thPs+49z4xCLvtgYa\r\nDHGjpMO4K3Y1EhCMt2ZnBhLDJBLMIjiu9XPC9hWs+r0QAyY/d5THSr3a/nyK\r\nOgzNq5MmVRGcA5meT8oMzRVjcY/WCHpyQ3awia4ftliExT7UCUhVEuDODWrQ\r\nlEBCQJZMbET5sc8Y2IWougB8ZYpPR0ozNfXToUg+EaLR2UpLlfThwqUSVw62\r\nZaRiPXB9xBgIuHXWXUu/4k7QIo7pahDYezAk074rjrTccOMgdLTQA8mckJv2\r\nn2PjMPdb3vzVK4B1JgTBEOm7W5elYyLlFtbHQH/Tg5xOdvEwPBZUhZj7Ej8a\r\n2ra3vby0QOaG4/zVEEVDHOa7vng/Xq7VfJ07vZL+wp+RGH6Q+ASsZ+ITtiVO\r\nTzSa1lO0neHMEnFpe7ni8biDkmM78yB9qw0=\r\n=CmCi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"tsdx lint && tsdx test"}},"module":"dist/objection-relations.esm.js","engines":{"node":">=10"},"gitHead":"244c91ffee6fa4b84e6c9434616fd76c3abfe527","scripts":{"lint":"tsdx lint --fix","size":"size-limit","test":"tsdx test --collectCoverage","build":"tsdx build --target node","start":"tsdx watch --target node","analyze":"size-limit --why","prepare":"tsdx build --target node"},"typings":"dist/index.d.ts","_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/objection-relations.cjs.production.min.js","limit":"10 KB"},{"path":"dist/objection-relations.esm.js","limit":"10 KB"}],"_npmVersion":"7.10.0","description":"A relations helper for Objection.js. This provides a convenient way to define relations in the `relationMappings` function on an Objection.js model.","directories":{},"_nodeVersion":"16.0.0","dependencies":{"objection":"^3.0.1","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","husky":"^7.0.4","tslib":"^1.14.1","size-limit":"^7.0.8","typescript":"^4.5.5","@types/jest":"^27.4.0","npm-upgrade":"^3.1.0","@types/pluralize":"^0.0.29","@types/lodash.snakecase":"^4.1.6","@size-limit/preset-small-lib":"^7.0.8"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.2_1645265785739_0.7049296682857435","host":"s3://npm-registry-packages"}},"0.0.3":{"name":"@anephenix/objection-relations","version":"0.0.3","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.3","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"37890f6c22bb693dd19e28f5654ae2c5a409b177","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.3.tgz","fileCount":7,"integrity":"sha512-cHy8u/J5Sd2me1j788R1HUY8ZMK1jP7rfI6jyjztuxkPkoYznrFK1wKT5wm3JxxdbiTWb4u9n9haLT+jsOYlog==","signatures":[{"sig":"MEYCIQCV7QNhVMCL5p4Pf7RtnG22ZQyoiqnjxZcEluCuQj7z6QIhAIxfGduC9mv0D9XJwBjgAyGSRx938sNJxsUhoJiEmy6m","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":15193},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"tsdx lint && tsdx test"}},"module":"dist/objection-relations.esm.js","engines":{"node":">=10"},"gitHead":"33241d165ff8679fd684fb263cf9e85c1b213fcd","scripts":{"lint":"tsdx lint --fix","size":"size-limit","test":"tsdx test --collectCoverage","build":"tsdx build --target node","start":"tsdx watch --target node","analyze":"size-limit --why","update-changelog":"node scripts/update-changelog.js","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"typings":"dist/index.d.ts","_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/objection-relations.cjs.production.min.js","limit":"10 KB"},{"path":"dist/objection-relations.esm.js","limit":"10 KB"}],"_npmVersion":"10.9.0","description":"[![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml) [![Maintainability](https://api.codeclimate.com/v1/badges/33642d97558","directories":{},"_nodeVersion":"22.12.0","dependencies":{"objection":"^3.0.1","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","husky":"^9.1.7","tslib":"^2.8.1","size-limit":"^7.0.8","typescript":"^5.7.3","@types/jest":"^29.5.14","npm-upgrade":"^3.1.0","@types/pluralize":"^0.0.33","@types/lodash.snakecase":"^4.1.6","@size-limit/preset-small-lib":"^7.0.8"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.3_1736511096991_0.7903953905340948","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@anephenix/objection-relations","version":"0.0.4","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.4","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"4cd297c67cf739e2d347f037a936dbeb0676fdc2","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.4.tgz","fileCount":7,"integrity":"sha512-OU6JQKRJgiTsxlXGPbz8cnk1g1xrAiH0mdgvjblVrIDQOMC00jLMEQ8uTvdsgqmQ3BZo1c7SFHrK/VLnvJvDpA==","signatures":[{"sig":"MEUCIQCwgwuqVys7SyNmcGCkeyOjnqhWl6R5jrwfh3mBxKCOtAIgVYD5AITu372ldrVbi6qFHTQns5B9fDKPKVeKj3sWQSQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":15194},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"tsdx lint && tsdx test"}},"module":"dist/objection-relations.esm.js","engines":{"node":">=10"},"gitHead":"163ac018d65e81cf255640ec94439150e4c992dc","scripts":{"lint":"tsdx lint --fix","size":"size-limit","test":"tsdx test --collectCoverage","build":"tsdx build --target node","start":"tsdx watch --target node","analyze":"size-limit --why","update-changelog":"node scripts/update-changelog.js","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"typings":"dist/index.d.ts","_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/objection-relations.cjs.production.min.js","limit":"10 KB"},{"path":"dist/objection-relations.esm.js","limit":"10 KB"}],"_npmVersion":"10.9.0","description":"[![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml) [![Maintainability](https://api.codeclimate.com/v1/badges/33642d97558","directories":{},"_nodeVersion":"22.12.0","dependencies":{"objection":"^3.1.5","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","husky":"^9.1.7","tslib":"^2.8.1","size-limit":"^7.0.8","typescript":"^5.7.3","@types/jest":"^29.5.14","npm-upgrade":"^3.1.0","@types/pluralize":"^0.0.33","@types/lodash.snakecase":"^4.1.9","@size-limit/preset-small-lib":"^11.1.6"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.4_1736800008003_0.2521827567023731","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@anephenix/objection-relations","version":"0.0.6","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.6","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"3009f4733a7bdddd1a8f85f2e1f73cc55514cc79","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.6.tgz","fileCount":7,"integrity":"sha512-65tLbdF44REFxRX23UmtuSQXUeZ9tpGC3CjivtkmbsnTbKgo2CZE4DLSWSxYh2jfhh4BNQpIANeI2sIeznfI5w==","signatures":[{"sig":"MEUCIQDdfsik7aDP3BAmkD2Wn82nDWUJwQUnD44tKp7vx4VA+QIgIscbdqbDkMg1jcg+JM/2KzZ85IcwMr6g6kB5ZFUL29g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":15195},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"tsdx lint && tsdx test"}},"module":"dist/objection-relations.esm.js","engines":{"node":">=10"},"gitHead":"3b1db0a8999626a445f6e3712b8b856fbd2032f9","scripts":{"lint":"tsdx lint --fix","size":"size-limit","test":"tsdx test --collectCoverage","build":"tsdx build --target node","start":"tsdx watch --target node","analyze":"size-limit --why","update-changelog":"node scripts/update-changelog.js","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"typings":"dist/index.d.ts","_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/objection-relations.cjs.production.min.js","limit":"10 KB"},{"path":"dist/objection-relations.esm.js","limit":"10 KB"}],"_npmVersion":"10.9.0","description":"[![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml) [![Maintainability](https://api.codeclimate.com/v1/badges/33642d97558","directories":{},"_nodeVersion":"22.12.0","dependencies":{"objection":"^3.1.5","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","husky":"^9.1.7","tslib":"^2.8.1","size-limit":"^11.1.6","typescript":"^5.7.3","@types/jest":"^29.5.14","npm-upgrade":"^3.1.0","@types/pluralize":"^0.0.33","@types/lodash.snakecase":"^4.1.9","@size-limit/preset-small-lib":"^11.1.6"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.6_1736883125382_0.5076071586732769","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@anephenix/objection-relations","version":"0.0.5","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.5","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"81a52648728426d3b9e6830ee4a33570c376759d","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.5.tgz","fileCount":7,"integrity":"sha512-BfGtaCqJaUCXp5RB+liC+1FdRhK6piGbAncNoxsX7fTo0uj0VEUcSfYMhJaWUWiGVVb4ydY1RLfIYyvxzfsEug==","signatures":[{"sig":"MEUCIQC8YIEAcs4Rdkge89S2+Gyk+R/zuKQqb9Wcr5LZc1CZowIgadj8lI27sZkftHnBAP7TinoRsVjjnP85oxaPwR169I8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":15195},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"tsdx lint && tsdx test"}},"module":"dist/objection-relations.esm.js","engines":{"node":">=10"},"gitHead":"f1a0c45a4316338d45dc6cd421cdfb55f0e61af4","scripts":{"lint":"tsdx lint --fix","size":"size-limit","test":"tsdx test --collectCoverage","build":"tsdx build --target node","start":"tsdx watch --target node","analyze":"size-limit --why","update-changelog":"node scripts/update-changelog.js","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"typings":"dist/index.d.ts","_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/objection-relations.cjs.production.min.js","limit":"10 KB"},{"path":"dist/objection-relations.esm.js","limit":"10 KB"}],"_npmVersion":"10.9.2","description":"[![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml) [![Maintainability](https://api.codeclimate.com/v1/badges/33642d97558","directories":{},"_nodeVersion":"22.13.0","dependencies":{"objection":"^3.1.5","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","husky":"^9.1.7","tslib":"^2.8.1","size-limit":"^11.1.6","typescript":"^5.7.3","@types/jest":"^29.5.14","npm-upgrade":"^3.1.0","@types/pluralize":"^0.0.33","@types/lodash.snakecase":"^4.1.9","@size-limit/preset-small-lib":"^11.1.6"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.5_1736883126311_0.5839230773813335","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@anephenix/objection-relations","version":"0.0.8","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.8","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"5a2aae0412a877f9b414c7c5956e5397d195d90b","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.8.tgz","fileCount":7,"integrity":"sha512-dor0olKJPFpdvoMrcc49fwLCA9ll4ic6bGgKxqJTzMCZ37PMFnBQMOCB/yIndxihBPmuHMChTPM+DyWzVkvmSg==","signatures":[{"sig":"MEUCIQDNkorhlD8Z87F1m1NouXr4FVK8+2sVFvFbg7NVfuFReAIgBHCkSeKVMOyD3jRDgszQML4LxOsi7s96ugp6AxNLhD8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15627},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"npm run lint && npm test"}},"module":"dist/objection-relations.esm.js","engines":{"node":">=10"},"gitHead":"cad46429e64b30f4c93f0236aa3dd4303af0353e","scripts":{"lint":"npx eslint .","size":"size-limit","test":"NODE_ENV=test npx mocha --require ts-node/register --extensions ts test/**/*","build":"tsc --project tsconfig.json","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","start":"tsdx watch --target node","analyze":"size-limit --why","prepare":"husky","update-changelog":"npx ts-node scripts/update-changelog.ts","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"typings":"dist/index.d.ts","_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/index.js","limit":"10 KB"}],"_npmVersion":"10.9.2","description":"[![npm version](https://badge.fury.io/js/%40anephenix%2Fobjection-relations.svg)](https://badge.fury.io/js/%40anephenix%2Fobjection-relations) [![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https:","directories":{},"_nodeVersion":"22.13.1","dependencies":{"objection":"^3.1.5","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^17.1.0","husky":"^9.1.7","mocha":"^11.1.0","eslint":"^9.19.0","globals":"^15.14.0","ts-node":"^10.9.2","@eslint/js":"^9.19.0","size-limit":"^11.1.6","typescript":"^5.7.3","@types/jest":"^29.5.14","@types/pluralize":"^0.0.33","typescript-eslint":"^8.23.0","@types/lodash.snakecase":"^4.1.9","size-limit-preset-node-lib":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.8_1738692867770_0.40762053830870304","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@anephenix/objection-relations","version":"0.0.9","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.9","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"e7e164535f2a3d5076f61239422400dbd2723df0","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.9.tgz","fileCount":7,"integrity":"sha512-2tdVqA/qqD44zZ9XhQJi0fa2WLysjkQ+4CsDZ8tLLmm2fj5vFd/QSgQpNWNjrJKdEH1ObvQWzKoMj9tLT81S0Q==","signatures":[{"sig":"MEUCIAisykXuQrZI+uWJxFapu6VGCa/PHY8ZLBJ077u89KNuAiEAmUeEgDr+Bu6Vq8WfRq9QVQFD3j4NO51r4qDOJ70Dv1I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15623},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"npm run lint && npm test"}},"module":"dist/objection-relations.esm.js","engines":{"node":">=10"},"gitHead":"9ed25afaf0c7a8b5e09fb5cf869e75b40f52e759","scripts":{"lint":"npx eslint .","size":"size-limit","test":"NODE_ENV=test npx mocha --require ts-node/register --extensions ts test/**/*","build":"tsc --project tsconfig.json","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","start":"tsdx watch --target node","analyze":"size-limit --why","prepare":"husky","update-changelog":"npx ts-node scripts/update-changelog.ts","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"typings":"dist/index.d.ts","_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/*.js","limit":"10 KB"}],"_npmVersion":"10.9.2","description":"[![npm version](https://badge.fury.io/js/%40anephenix%2Fobjection-relations.svg)](https://badge.fury.io/js/%40anephenix%2Fobjection-relations) [![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https:","directories":{},"_nodeVersion":"22.13.1","dependencies":{"objection":"^3.1.5","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^17.1.0","husky":"^9.1.7","mocha":"^11.1.0","eslint":"^9.20.1","globals":"^15.15.0","ts-node":"^10.9.2","@eslint/js":"^9.19.0","size-limit":"^11.1.6","typescript":"^5.7.3","@types/jest":"^29.5.14","@types/pluralize":"^0.0.33","typescript-eslint":"^8.24.0","@types/lodash.snakecase":"^4.1.9","size-limit-preset-node-lib":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.9_1739620044540_0.1075921486496898","host":"s3://npm-registry-packages-npm-production"}},"0.0.10":{"name":"@anephenix/objection-relations","version":"0.0.10","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.10","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"665fab9da571ee5b6aed651ff55599f2ae59ca0d","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.10.tgz","fileCount":7,"integrity":"sha512-koy1T1AntnmbxVn9f4Gq7895WR3ph/ttnww7KT65z1BFx/SNIw3d5aV6fe288oMTPuYTo6DSK1cR5vCQ2LFABg==","signatures":[{"sig":"MEUCIQDEgQHmgkgl3JnBZqPAt46hWgze87R/ePmDKeqMd5mIfQIgaOTdd8Ce+BMUcI1pocL9ZNb6Lfm+k3I91xfeuCyaM0Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15623},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"npm run lint && npm test"}},"module":"dist/objection-relations.esm.js","engines":{"node":">=10"},"gitHead":"30ef93d03bce780237f1a9517e6ed359e40a638f","scripts":{"lint":"npx eslint .","size":"size-limit","test":"NODE_ENV=test npx mocha --require ts-node/register --extensions ts test/**/*","build":"tsc --project tsconfig.json","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","start":"tsdx watch --target node","analyze":"size-limit --why","prepare":"husky","update-changelog":"npx ts-node scripts/update-changelog.ts","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"typings":"dist/index.d.ts","_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/*.js","limit":"10 KB"}],"_npmVersion":"10.9.2","description":"[![npm version](https://badge.fury.io/js/%40anephenix%2Fobjection-relations.svg)](https://badge.fury.io/js/%40anephenix%2Fobjection-relations) [![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https:","directories":{},"_nodeVersion":"22.13.1","dependencies":{"objection":"^3.1.5","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^17.1.0","husky":"^9.1.7","mocha":"^11.1.0","eslint":"^9.21.0","globals":"^16.0.0","ts-node":"^10.9.2","@eslint/js":"^9.21.0","size-limit":"^11.2.0","typescript":"^5.7.3","@types/jest":"^29.5.14","@types/pluralize":"^0.0.33","typescript-eslint":"^8.24.1","@types/lodash.snakecase":"^4.1.9","size-limit-preset-node-lib":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.10_1740414247080_0.050455857252708514","host":"s3://npm-registry-packages-npm-production"}},"0.0.11":{"name":"@anephenix/objection-relations","version":"0.0.11","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.11","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"0c0fd9567ec02f0228773dd01653d0bae4a32964","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.11.tgz","fileCount":7,"integrity":"sha512-mIvmSRzS7aGMO16BX1Uah39KHjrOeIlPyCwTOxbiMB2iVZc5rAjgONjoBNPIv9AJ8UcfgTjQFT88lpwZqZcLiA==","signatures":[{"sig":"MEUCIQCwra2csafDPBDmKn1eROdXXa6lU/D2sSu0B9z0YGjPYgIgX0juMKRq84DxTkPu4E6BZ03fG2atY1N1t+jD35v8VqA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15623},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"npm run lint && npm test"}},"module":"dist/objection-relations.esm.js","engines":{"node":">=10"},"gitHead":"6fb44816412446723d464fd744a04fabdff38379","scripts":{"lint":"npx eslint .","size":"size-limit","test":"NODE_ENV=test npx mocha --require ts-node/register --extensions ts test/**/*","build":"tsc --project tsconfig.json","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","start":"tsdx watch --target node","analyze":"size-limit --why","prepare":"husky","update-changelog":"npx ts-node scripts/update-changelog.ts","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"typings":"dist/index.d.ts","_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/*.js","limit":"10 KB"}],"_npmVersion":"10.9.2","description":"[![npm version](https://badge.fury.io/js/%40anephenix%2Fobjection-relations.svg)](https://badge.fury.io/js/%40anephenix%2Fobjection-relations) [![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https:","directories":{},"_nodeVersion":"22.14.0","dependencies":{"objection":"^3.1.5","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^17.1.0","husky":"^9.1.7","mocha":"^11.1.0","eslint":"^9.22.0","globals":"^16.0.0","ts-node":"^10.9.2","@eslint/js":"^9.22.0","size-limit":"^11.2.0","typescript":"^5.8.2","@types/jest":"^29.5.14","@types/pluralize":"^0.0.33","typescript-eslint":"^8.26.0","@types/lodash.snakecase":"^4.1.9","size-limit-preset-node-lib":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.11_1741641847387_0.9189396010569821","host":"s3://npm-registry-packages-npm-production"}},"0.0.12":{"name":"@anephenix/objection-relations","version":"0.0.12","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.12","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"2aa34b52bd144e2d4026c6769c8ba2a7b914b73d","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.12.tgz","fileCount":7,"integrity":"sha512-bp7Q/oZ2JzQSTUoklt+r35r/+t6DTyeWBHXtAJG8c6gsz7I47MxTW+rN1vOwcQqCjLj4cxIZcE2gpzH2407COg==","signatures":[{"sig":"MEYCIQCQLKxrEk6XHc07e+ElPnSC0CMSfqf3dVyMQ4mUliVwDwIhAPwIWmafzSA0SRUudNoffqbHEIje6n3OGUMVbbFS9Tiy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15623},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"npm run lint && npm test"}},"module":"dist/objection-relations.esm.js","engines":{"node":">=10"},"gitHead":"93d128dfdfb88b66c68441b9e80a12eb92fc2f27","scripts":{"lint":"npx eslint .","size":"size-limit","test":"NODE_ENV=test npx mocha --require ts-node/register --extensions ts test/**/*","build":"tsc --project tsconfig.json","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","start":"tsdx watch --target node","analyze":"size-limit --why","prepare":"husky","update-changelog":"npx ts-node scripts/update-changelog.ts","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"typings":"dist/index.d.ts","_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/*.js","limit":"10 KB"}],"_npmVersion":"10.9.2","description":"[![npm version](https://badge.fury.io/js/%40anephenix%2Fobjection-relations.svg)](https://badge.fury.io/js/%40anephenix%2Fobjection-relations) [![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https:","directories":{},"_nodeVersion":"22.14.0","dependencies":{"objection":"^3.1.5","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^17.1.0","husky":"^9.1.7","mocha":"^11.1.0","eslint":"^9.24.0","globals":"^16.0.0","ts-node":"^10.9.2","@eslint/js":"^9.24.0","size-limit":"^11.2.0","typescript":"^5.8.3","@types/jest":"^29.5.14","@types/pluralize":"^0.0.33","typescript-eslint":"^8.29.1","@types/lodash.snakecase":"^4.1.9","size-limit-preset-node-lib":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.12_1744117233724_0.05486154602714244","host":"s3://npm-registry-packages-npm-production"}},"0.0.13":{"name":"@anephenix/objection-relations","version":"0.0.13","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.13","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"7cc547b6ea1dfc7f7fd2f12a4b77a04e248d949d","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.13.tgz","fileCount":7,"integrity":"sha512-0ql34FRl5wqIUW7afG3dlEWwMAn/wK1DTeN9qjEGhMcocaXD2dVux8knz9+El6jwQE8XJGgmHPOeTCE3iBpIWQ==","signatures":[{"sig":"MEUCIDcJfD2PxDqrmlCCzLbm0s6l55zfhSZq9838a3LGmDD8AiEAhGzFaIVzU8CGvwEU8JN9lM1Ri39ytpBemY8spA8i6/s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15623},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"npm run lint && npm test"}},"module":"dist/objection-relations.esm.js","engines":{"node":">=10"},"gitHead":"c9ddffb4d373ccb64a5baf34350eda19b36e8cc0","scripts":{"lint":"npx eslint .","size":"size-limit","test":"NODE_ENV=test npx mocha --require ts-node/register --extensions ts test/**/*","build":"tsc --project tsconfig.json","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","start":"tsdx watch --target node","analyze":"size-limit --why","prepare":"husky","update-changelog":"npx ts-node scripts/update-changelog.ts","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"typings":"dist/index.d.ts","_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/*.js","limit":"10 KB"}],"_npmVersion":"10.9.2","description":"[![npm version](https://badge.fury.io/js/%40anephenix%2Fobjection-relations.svg)](https://badge.fury.io/js/%40anephenix%2Fobjection-relations) [![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https:","directories":{},"_nodeVersion":"22.15.0","dependencies":{"objection":"^3.1.5","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^17.1.0","husky":"^9.1.7","mocha":"^11.5.0","eslint":"^9.27.0","globals":"^16.2.0","ts-node":"^10.9.2","@eslint/js":"^9.27.0","size-limit":"^11.2.0","typescript":"^5.8.3","@types/jest":"^29.5.14","@types/pluralize":"^0.0.33","typescript-eslint":"^8.32.1","@types/lodash.snakecase":"^4.1.9","size-limit-preset-node-lib":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.13_1748269111007_0.686681441026459","host":"s3://npm-registry-packages-npm-production"}},"0.0.14":{"name":"@anephenix/objection-relations","version":"0.0.14","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.14","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"7bf2d7e2fd0fb221f0c043d17aea1592df87559b","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.14.tgz","fileCount":7,"integrity":"sha512-+BcFBC8IUG/2CmJC08/NvY4k7c/PkHkmehE5e8B+z3Y4aN/6U0i2qTjW81mw1iFgll773EvNirnAVSjR7m4N4g==","signatures":[{"sig":"MEQCIAl01iJO0iXE6ndFmDkgdkr19VeO0Sd+4M5VWw7CuwHcAiB1feZZDAqJGw/JlycjdkgfNcFkI/PgQ1UBWAviHG42Bg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14873},"main":"dist/index.js","type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm test"}},"module":"dist/objection-relations.esm.js","engines":{"node":">=10"},"gitHead":"d7c5b60e625c4a9aaff608263d6c2f0c1af06887","scripts":{"lint":"npx @biomejs/biome check --write src test scripts","size":"size-limit","test":"NODE_ENV=test vitest --run","build":"tsc --project tsconfig.json","cover":"NODE_ENV=test vitest --coverage --run","start":"tsdx watch --target node","analyze":"size-limit --why","prepare":"husky","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"typings":"dist/index.d.ts","_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/*.js","limit":"10 KB"}],"_npmVersion":"10.9.3","description":"[![npm version](https://badge.fury.io/js/%40anephenix%2Fobjection-relations.svg)](https://badge.fury.io/js/%40anephenix%2Fobjection-relations) [![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https:","directories":{},"_nodeVersion":"22.20.0","dependencies":{"objection":"^3.1.5","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","vitest":"^3.2.4","globals":"^16.4.0","size-limit":"^11.2.0","typescript":"^5.9.3","@types/node":"^24.6.2","@biomejs/biome":"2.2.5","@types/pluralize":"^0.0.33","@vitest/coverage-v8":"^3.2.4","@types/lodash.snakecase":"^4.1.9","size-limit-preset-node-lib":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.14_1759738348317_0.5366903133659853","host":"s3://npm-registry-packages-npm-production"}},"0.0.17":{"name":"@anephenix/objection-relations","version":"0.0.17","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.17","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"558b2601fcc6b74375920be8c670449e5acedfda","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.17.tgz","fileCount":3,"integrity":"sha512-EFRM8NAalVpUcn8sDoM1cRCDKbVUN1dWA6XSeVToCgVVw+VDiEqZ0hwu8aqBKimbWAuLMppwSx+v8yJAXG8m4g==","signatures":[{"sig":"MEYCIQCWpzkbTEN6Ybm4SdBpWz3mxiCRDRB8XH9xo5WabCeMxwIhAPFkfgDZAn2CEhaLH0PxCFnHDV5KPASVyddkiNI7psj/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8435},"main":"dist/index.js","type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm test"}},"types":"./dist/index.d.ts","module":"dist/objection-relations.esm.js","engines":{"node":">=10"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"d652d6b2e6acd77234ddf3e6509d9063430019ec","scripts":{"lint":"npx @biomejs/biome check --write src test scripts","size":"size-limit","test":"NODE_ENV=test vitest --run","build":"tsc --project tsconfig.json","cover":"NODE_ENV=test vitest --coverage --run","start":"tsdx watch --target node","analyze":"size-limit --why","prepare":"husky","test:e2e":"npm run build && npm run test:build:commonjs && npm run test:build:esm","test:build:esm":"node e2e/test-esm.js","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","test:build:commonjs":"node e2e/test-commonjs.cjs","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/*.js","limit":"10 KB"}],"_npmVersion":"10.9.3","description":"[![npm version](https://badge.fury.io/js/%40anephenix%2Fobjection-relations.svg)](https://badge.fury.io/js/%40anephenix%2Fobjection-relations) [![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https:","directories":{},"_nodeVersion":"22.20.0","dependencies":{"objection":"^3.1.5","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","vitest":"^3.2.4","globals":"^16.4.0","size-limit":"^11.2.0","typescript":"^5.9.3","@types/node":"^24.7.0","@biomejs/biome":"2.2.5","@types/pluralize":"^0.0.33","@vitest/coverage-v8":"^3.2.4","@types/lodash.snakecase":"^4.1.9","size-limit-preset-node-lib":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.17_1759828026450_0.7789216160965873","host":"s3://npm-registry-packages-npm-production"}},"0.0.18":{"name":"@anephenix/objection-relations","version":"0.0.18","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.18","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"d2fd9dedc095ddbbaabb8ebe32b11824b20cdd35","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.18.tgz","fileCount":3,"integrity":"sha512-9DIe3971iFFAc+LCT11Q77kaSHYITfc/dW4KPPck6wNghbm3bbSeD9+HC9wbff21n71DA0QXAZnGFk++JeWxcg==","signatures":[{"sig":"MEUCIHlPD4+JwjVW4N3npS37Ya+w30zbYFXESBqy/eDNdPo5AiEA0gNZTqagH1dBczYix1MfK+T2dbFhOAQVlKSXBS3E3T0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9006},"main":"dist/index.js","type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm test"}},"types":"./dist/index.d.ts","module":"dist/objection-relations.esm.js","engines":{"node":">=10"},"exports":{".":{"import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"721def10bae7eaea8f2137d4185fe8f308c0585f","scripts":{"lint":"npx @biomejs/biome check --write src test scripts","size":"size-limit","test":"NODE_ENV=test vitest --run","build":"tsc --project tsconfig.json","cover":"NODE_ENV=test vitest --coverage --run","start":"tsdx watch --target node","analyze":"size-limit --why","prepare":"husky","test:e2e":"npm run build && npm run test:build:commonjs && npm run test:build:esm","test:build:esm":"node e2e/test-esm.js","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","test:build:commonjs":"node e2e/test-commonjs.cjs","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/*.js","limit":"10 KB"}],"_npmVersion":"10.9.3","description":"[![npm version](https://badge.fury.io/js/%40anephenix%2Fobjection-relations.svg)](https://badge.fury.io/js/%40anephenix%2Fobjection-relations) [![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https:","directories":{},"_nodeVersion":"22.20.0","dependencies":{"objection":"^3.1.5","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","vitest":"^3.2.4","globals":"^16.4.0","size-limit":"^11.2.0","typescript":"^5.9.3","@types/node":"^24.7.0","@biomejs/biome":"2.2.5","@types/pluralize":"^0.0.33","@vitest/coverage-v8":"^3.2.4","@types/lodash.snakecase":"^4.1.9","size-limit-preset-node-lib":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.18_1759857883655_0.27575121657106294","host":"s3://npm-registry-packages-npm-production"}},"0.0.19":{"name":"@anephenix/objection-relations","version":"0.0.19","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.19","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"398836d5a9808aa5d52813cbd5503f588ace97f3","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.19.tgz","fileCount":3,"integrity":"sha512-ZdRmyDz1HUIp/RTfbl2z88zcSS+xeN1xjsD3/Qly2strl8JmxzC0unDyIkVqVlEkkjZqDc5Jdd1KjRc88K9RNA==","signatures":[{"sig":"MEUCIDnT8fyHDzxeF8PXLaV/75FryEgKtrgA6lHRZdAdGGY0AiEAtYcQ38ptDyPjoN5stbH8wWPrmjrtefgZJysUzZ5uLF4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8899},"type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm test"}},"types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"dcd8e0d3229d0dfd3b21224e88bbf9a058152522","scripts":{"lint":"npx @biomejs/biome check --write src test scripts","size":"size-limit","test":"NODE_ENV=test vitest --run","build":"tsc --project tsconfig.json","cover":"NODE_ENV=test vitest --coverage --run","start":"tsdx watch --target node","analyze":"size-limit --why","prepare":"husky","test:e2e":"npm run build && npm run test:build:commonjs && npm run test:build:esm","test:build:esm":"node e2e/test-esm.js","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","test:build:commonjs":"node e2e/test-commonjs.cjs","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/*.js","limit":"10 KB"}],"_npmVersion":"10.9.3","description":"[![npm version](https://badge.fury.io/js/%40anephenix%2Fobjection-relations.svg)](https://badge.fury.io/js/%40anephenix%2Fobjection-relations) [![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https:","directories":{},"_nodeVersion":"22.20.0","dependencies":{"objection":"^3.1.5","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","vitest":"^3.2.4","globals":"^16.4.0","size-limit":"^11.2.0","typescript":"^5.9.3","@types/node":"^24.7.0","@biomejs/biome":"2.2.5","@types/pluralize":"^0.0.33","@vitest/coverage-v8":"^3.2.4","@types/lodash.snakecase":"^4.1.9","size-limit-preset-node-lib":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.19_1759858618204_0.16852137526178268","host":"s3://npm-registry-packages-npm-production"}},"0.0.20":{"name":"@anephenix/objection-relations","version":"0.0.20","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.20","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"465a6d6e0fa4f15ffe402a3d3193650831280cca","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.20.tgz","fileCount":3,"integrity":"sha512-WMHiDgXm2Ndl+GWfsi3PRhjBuJr19HiBwWPnYIiWJUWMY3/7kkqPe9C7oi6KGvtzy+ysQpuDX3vBVGS3CNc5jQ==","signatures":[{"sig":"MEYCIQD8mazNzmGqJAg+nZAZBUbcGuqShblUWSaqLheR+9t1dgIhAOjaJ+7zduXsmJbwbTCnUf98REBz6RN2G94uQMqqLI2j","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8995},"main":"./dist/index.js","type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm test"}},"types":"./dist/index.d.ts","engines":{"node":">=16"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"a4580e66c8333aba55069e8ce5ef76049b5e6f86","scripts":{"lint":"npx @biomejs/biome check --write src test scripts","size":"size-limit","test":"NODE_ENV=test vitest --run","build":"tsc --project tsconfig.json","cover":"NODE_ENV=test vitest --coverage --run","start":"tsdx watch --target node","analyze":"size-limit --why","prepare":"husky","test:e2e":"npm run build && npm run test:build:commonjs && npm run test:build:esm","test:build:esm":"node e2e/test-esm.js","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","test:build:commonjs":"node e2e/test-commonjs.cjs","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/*.js","limit":"10 KB"}],"_npmVersion":"10.9.3","description":"[![npm version](https://badge.fury.io/js/%40anephenix%2Fobjection-relations.svg)](https://badge.fury.io/js/%40anephenix%2Fobjection-relations) [![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https:","directories":{},"_nodeVersion":"22.20.0","dependencies":{"objection":"^3.1.5","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","vitest":"^3.2.4","globals":"^16.4.0","size-limit":"^11.2.0","typescript":"^5.9.3","@types/node":"^24.7.0","@biomejs/biome":"2.2.5","@types/pluralize":"^0.0.33","@vitest/coverage-v8":"^3.2.4","@types/lodash.snakecase":"^4.1.9","size-limit-preset-node-lib":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.20_1759859248317_0.10798993267864354","host":"s3://npm-registry-packages-npm-production"}},"0.0.21":{"name":"@anephenix/objection-relations","version":"0.0.21","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.21","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"27ac1f22de7ece5389ff208f9e652bece1c937ce","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.21.tgz","fileCount":9,"integrity":"sha512-IDZBR6yBk11iTRVto2Yfa89iroDq3laBcXR2pH1Mvk5RrOsGnedVzAQpyWp4nJz9v8e4Q6dsc/nrR/IAlaFGkw==","signatures":[{"sig":"MEUCIQCQzga3DgyHuafSUaNKyZS9RrdNfWTT3leLVajkygWOZwIgOKq94dHjWN2NckOInx4+MZ6SPulvj/24N9lZstZwV78=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19444},"main":"./dist/index.js","type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm test"}},"types":"./dist/index.d.ts","engines":{"node":">=16"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"a24c6bdf8cea66e8be85437d6a11c65dd14f28c5","scripts":{"lint":"npx @biomejs/biome check --write src test scripts","size":"size-limit","test":"NODE_ENV=test vitest --run","build":"tsc --project tsconfig.json","cover":"NODE_ENV=test vitest --coverage --run","start":"tsdx watch --target node","analyze":"size-limit --why","prepare":"husky","test:e2e":"npm run build && npm run test:build:commonjs && npm run test:build:esm","test:build:esm":"node e2e/test-esm.js","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","test:build:commonjs":"node e2e/test-commonjs.cjs","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/*.js","limit":"10 KB"}],"_npmVersion":"10.9.3","description":"[![npm version](https://badge.fury.io/js/%40anephenix%2Fobjection-relations.svg)](https://badge.fury.io/js/%40anephenix%2Fobjection-relations) [![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https:","directories":{},"_nodeVersion":"22.20.0","dependencies":{"objection":"^3.1.5","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","vitest":"^3.2.4","globals":"^16.4.0","size-limit":"^11.2.0","typescript":"^5.9.3","@types/node":"^24.7.0","@biomejs/biome":"2.2.5","@types/pluralize":"^0.0.33","@vitest/coverage-v8":"^3.2.4","@types/lodash.snakecase":"^4.1.9","size-limit-preset-node-lib":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.21_1759859565238_0.39146415918202826","host":"s3://npm-registry-packages-npm-production"}},"0.0.22":{"name":"@anephenix/objection-relations","version":"0.0.22","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.22","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"f6b03eb294ace0fc90b74b8408a7e34ad2640aa1","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.22.tgz","fileCount":9,"integrity":"sha512-vPYGwV1gpeMKl/1CffUsZw+8na/6jKSUVnn6q/vguQAQO73RtOaFTrlFRKEq5d78LC/FWEizXF4w4yES2mBrOw==","signatures":[{"sig":"MEQCIAK460K3vXPX8KRoVSg2dv2NBc+vh9tkTrvbp0WClfY5AiBrPTTwIxmoyBtdGkcGSnzD4TzNDv3M2vl0DznlbJbU2Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19501},"main":"./dist/index.js","type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm test"}},"types":"./dist/index.d.ts","engines":{"node":">=16"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"f6541bf705cccf8828e2ec85215235e416323066","scripts":{"lint":"npx @biomejs/biome check --write src test scripts","size":"size-limit","test":"NODE_ENV=test vitest --run","build":"tsc --project tsconfig.json","cover":"NODE_ENV=test vitest --coverage --run","start":"tsdx watch --target node","analyze":"size-limit --why","prepare":"husky","test:e2e":"npm run build && npm run test:build:commonjs && npm run test:build:esm","lint:package":"npx publint","test:build:esm":"node e2e/test-esm.js","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","test:build:commonjs":"node e2e/test-commonjs.cjs","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/*.js","limit":"10 KB"}],"_npmVersion":"10.9.3","description":"[![npm version](https://badge.fury.io/js/%40anephenix%2Fobjection-relations.svg)](https://badge.fury.io/js/%40anephenix%2Fobjection-relations) [![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https:","directories":{},"_nodeVersion":"22.20.0","dependencies":{"objection":"^3.1.5","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","vitest":"^3.2.4","globals":"^16.4.0","publint":"^0.3.14","size-limit":"^11.2.0","typescript":"^5.9.3","@types/node":"^24.7.0","@biomejs/biome":"2.2.5","@types/pluralize":"^0.0.33","@vitest/coverage-v8":"^3.2.4","@types/lodash.snakecase":"^4.1.9","size-limit-preset-node-lib":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.22_1759914596492_0.19948145546010898","host":"s3://npm-registry-packages-npm-production"}},"0.0.23":{"name":"@anephenix/objection-relations","version":"0.0.23","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.23","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"91e95c74177e35e03325dfeb1a572dfd488be1d4","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.23.tgz","fileCount":9,"integrity":"sha512-/SKZ7xRxRtWeu+DyHhYN8b3kZ+P/kLQwJMrgcmc63wGVhIJN/51N/5bW5+08VenTpHTfyAcdZEcFaNzMmEFnkw==","signatures":[{"sig":"MEUCIHaTeCS2irHAtAMG+bnUwHQryj3JJxAjEcygoFd7yd8+AiEA2e9e1eCgfjc341GhYKEX/2qjWzA1LITJjEt4ojpe9HY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19534},"main":"./dist/index.js","type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm test"}},"types":"./dist/index.d.ts","engines":{"node":">=16"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"89bf9b501c27a41fd30665e3a8df9527ee9808b7","scripts":{"lint":"npx @biomejs/biome check --write src test scripts","size":"size-limit","test":"NODE_ENV=test vitest --run","build":"tsc --project tsconfig.json","cover":"NODE_ENV=test vitest --coverage --run","start":"tsdx watch --target node","analyze":"size-limit --why","prepare":"husky","test:e2e":"npm run build && npm run test:build:commonjs && npm run test:build:esm","lint:package":"npx publint","test:build:esm":"node e2e/test-esm.js","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","test:build:commonjs":"node e2e/test-commonjs.cjs","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/*.js","limit":"10 KB"}],"_npmVersion":"10.9.4","description":"[![npm version](https://badge.fury.io/js/%40anephenix%2Fobjection-relations.svg)](https://badge.fury.io/js/%40anephenix%2Fobjection-relations) [![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https:","directories":{},"_nodeVersion":"22.21.1","dependencies":{"objection":"^3.1.5","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","vitest":"^4.0.13","globals":"^16.5.0","publint":"^0.3.15","size-limit":"^12.0.0","typescript":"^5.9.3","@types/node":"^24.10.1","@biomejs/biome":"2.3.8","@size-limit/file":"^12.0.0","@types/pluralize":"^0.0.33","@vitest/coverage-v8":"^4.0.15","@types/lodash.snakecase":"^4.1.9","size-limit-node-esbuild":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.23_1764781328085_0.036850518799591336","host":"s3://npm-registry-packages-npm-production"}},"0.0.24":{"name":"@anephenix/objection-relations","version":"0.0.24","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.24","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"homepage":"https://github.com/anephenix/objection-relations","bugs":{"url":"https://github.com/anephenix/objection-relations/issues"},"dist":{"shasum":"3a00102fa05e4be255cb1b70fe6836fc21d7082a","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.24.tgz","fileCount":9,"integrity":"sha512-LkYELtn96jAOhuVzuXMRGViHZLMotNtDc2UMU0zyj/0EGM39JGvE+lktZDR+uN6+sA9yDybPgA8wkgLEDtjPJg==","signatures":[{"sig":"MEQCIHRVosLLJ1Pc3jpyHKf0Fw0tqfvPDQYJDn0CQDjip7owAiBgVJLf+Mo2A/OYXeK0UaTwLs1qp34KgmZ4//RftjLlJQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anephenix%2fobjection-relations@0.0.24","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19787},"main":"./dist/index.js","type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm test"}},"types":"./dist/index.d.ts","engines":{"node":">=16"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"022290555a00cc223f2b3037fb05292a4404a58d","scripts":{"lint":"npx @biomejs/biome check --write src test scripts","size":"size-limit","test":"NODE_ENV=test vitest --run","build":"tsc --project tsconfig.json","cover":"NODE_ENV=test vitest --coverage --run","start":"tsdx watch --target node","analyze":"size-limit --why","prepare":"husky","test:e2e":"npm run build && npm run test:build:commonjs && npm run test:build:esm","lint:package":"npx publint","test:build:esm":"node e2e/test-esm.js","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","test:build:commonjs":"node e2e/test-commonjs.cjs","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bf572710-e4b9-46e4-88db-67bbc08d3b52"}},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"repository":{"url":"git+https://github.com/anephenix/objection-relations.git","type":"git"},"size-limit":[{"path":"dist/*.js","limit":"10 KB"}],"_npmVersion":"11.6.2","description":"[![npm version](https://badge.fury.io/js/%40anephenix%2Fobjection-relations.svg)](https://badge.fury.io/js/%40anephenix%2Fobjection-relations) [![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https:","directories":{},"_nodeVersion":"24.12.0","dependencies":{"objection":"^3.1.5","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","vitest":"^4.0.16","globals":"^17.0.0","publint":"^0.3.16","size-limit":"^12.0.0","typescript":"^5.9.3","@types/node":"^25.0.3","@biomejs/biome":"2.3.10","@size-limit/file":"^12.0.0","@types/pluralize":"^0.0.33","@vitest/coverage-v8":"^4.0.16","@types/lodash.snakecase":"^4.1.9","size-limit-node-esbuild":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.24_1767556418273_0.1563726006104562","host":"s3://npm-registry-packages-npm-production"}},"0.0.25":{"name":"@anephenix/objection-relations","version":"0.0.25","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.25","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"homepage":"https://github.com/anephenix/objection-relations","bugs":{"url":"https://github.com/anephenix/objection-relations/issues"},"dist":{"shasum":"dfb3c323539675ebbbb1b8be28c19a1def6f039b","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.25.tgz","fileCount":9,"integrity":"sha512-XqQGDCi66uLvQGnLihJhi36h3Xqh97YJd+NaDh8r5u1t0wSI8E3d26Z8LqZRlHvMzFtrja85WCIeSr2m12nXXA==","signatures":[{"sig":"MEQCIBxwqThy/iDKBPLh1AvO4d0mq3J29DambheCnMnkkAOeAiAz1jU/8nEqoMxtCmxfa05ir6ZePQgGDQIeHqEhHUHqnQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anephenix%2fobjection-relations@0.0.25","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19785},"main":"./dist/index.js","type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm test"}},"types":"./dist/index.d.ts","engines":{"node":">=16"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"bc16a9e60cfb6124f32982a1238ebbea11e27520","scripts":{"lint":"npx @biomejs/biome check --write src test scripts","size":"size-limit","test":"NODE_ENV=test vitest --run","build":"tsc --project tsconfig.json","cover":"NODE_ENV=test vitest --coverage --run","start":"tsdx watch --target node","analyze":"size-limit --why","prepare":"husky","test:e2e":"npm run build && npm run test:build:commonjs && npm run test:build:esm","lint:package":"npx publint","test:build:esm":"node e2e/test-esm.js","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","test:build:commonjs":"node e2e/test-commonjs.cjs","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bf572710-e4b9-46e4-88db-67bbc08d3b52"}},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"repository":{"url":"git+https://github.com/anephenix/objection-relations.git","type":"git"},"size-limit":[{"path":"dist/*.js","limit":"10 KB"}],"_npmVersion":"11.9.0","description":"[![npm version](https://badge.fury.io/js/%40anephenix%2Fobjection-relations.svg)](https://badge.fury.io/js/%40anephenix%2Fobjection-relations) [![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https:","directories":{},"_nodeVersion":"24.14.0","dependencies":{"objection":"^3.1.5","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","vitest":"^4.0.16","globals":"^17.4.0","publint":"^0.3.18","size-limit":"^12.0.0","typescript":"^5.9.3","@types/node":"^25.5.0","@biomejs/biome":"2.4.8","@size-limit/file":"^12.0.0","@types/pluralize":"^0.0.33","@vitest/coverage-v8":"^4.1.0","@types/lodash.snakecase":"^4.1.9","size-limit-node-esbuild":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.25_1774115040627_0.028928523810545448","host":"s3://npm-registry-packages-npm-production"}},"0.0.26":{"name":"@anephenix/objection-relations","version":"0.0.26","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/objection-relations@0.0.26","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"homepage":"https://github.com/anephenix/objection-relations","bugs":{"url":"https://github.com/anephenix/objection-relations/issues"},"dist":{"shasum":"a1c4c30b00e95f4c8fdb2b7fb4e1fb1a29d6fbed","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.26.tgz","fileCount":9,"integrity":"sha512-9Bu5OHPKRPxqyd2xP+TEZ2Y4u2U/U5yRn4q+0KDdc1g3C0u+PaJY0XvKIKjTgWO/VEakn+sPrKOoup+O98cD1A==","signatures":[{"sig":"MEUCIAgkplVz/fZQG+s/hN+6/x/u/4LimaCrwEognbQ/zP04AiEAsllmXJhnRrbou+JW5yySXy3oeFjbP0lWAUVbgTitFAQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anephenix%2fobjection-relations@0.0.26","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19786},"main":"./dist/index.js","type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm test"}},"types":"./dist/index.d.ts","engines":{"node":">=16"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"b641d77f6be70b01209cfe77e65b573215ea0668","scripts":{"lint":"npx @biomejs/biome check --write src test scripts","size":"size-limit","test":"NODE_ENV=test vitest --run","build":"tsc --project tsconfig.json","cover":"NODE_ENV=test vitest --coverage --run","start":"tsdx watch --target node","analyze":"size-limit --why","prepare":"husky","test:e2e":"npm run build && npm run test:build:commonjs && npm run test:build:esm","lint:package":"npx publint","test:build:esm":"node e2e/test-esm.js","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","test:build:commonjs":"node e2e/test-commonjs.cjs","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bf572710-e4b9-46e4-88db-67bbc08d3b52"}},"prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"repository":{"url":"git+https://github.com/anephenix/objection-relations.git","type":"git"},"size-limit":[{"path":"dist/*.js","limit":"10 KB"}],"_npmVersion":"11.11.0","description":"[![npm version](https://badge.fury.io/js/%40anephenix%2Fobjection-relations.svg)](https://badge.fury.io/js/%40anephenix%2Fobjection-relations) [![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https:","directories":{},"_nodeVersion":"24.14.1","dependencies":{"objection":"^3.1.5","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","vitest":"^4.0.16","globals":"^17.4.0","publint":"^0.3.18","size-limit":"^12.0.0","typescript":"^6.0.2","@types/node":"^25.5.2","@biomejs/biome":"2.4.10","@size-limit/file":"^12.0.0","@types/pluralize":"^0.0.33","@vitest/coverage-v8":"^4.1.2","@types/lodash.snakecase":"^4.1.9","size-limit-node-esbuild":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/objection-relations_0.0.26_1775618930420_0.46647527776504116","host":"s3://npm-registry-packages-npm-production"}},"0.0.27":{"_id":"@anephenix/objection-relations@0.0.27","bugs":{"url":"https://github.com/anephenix/objection-relations/issues"},"dist":{"shasum":"fb1e0b7610ae95297d17d5aad777ac9a83788dcc","tarball":"https://registry.npmjs.org/@anephenix/objection-relations/-/objection-relations-0.0.27.tgz","fileCount":9,"integrity":"sha512-uyDmz92QAQ+ItRs12uP+cqHJQSbFcsmrfx62XIEylHzHsINlHNQmNxbpI5RVCDR/DSAKK1GiT1Qd2Oo+shlfVw==","signatures":[{"sig":"MEQCIG24fCMpsLWxno4Htd7HEyPPNbBHs07INyZElsnWZW7YAiAWyQ5yxyUjerF6axW+nGXp+kmacmLPAAwldlpEyjhnUg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCzLHN/JSw2heB5wUPXAog6ssBwfYy/BFPNVxg+cDjfugIgJrJZM5sIIKoTnsw0YwrbB38dP7Aezt+cm+f1xJb9/S4="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anephenix%2fobjection-relations@0.0.27","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19786},"main":"./dist/index.js","name":"@anephenix/objection-relations","type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm test"}},"types":"./dist/index.d.ts","author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"engines":{"node":">=16"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"d5363ea9d85c712581792f0cd5ce7fb03d139d00","license":"MIT","scripts":{"lint":"npx @biomejs/biome check --write src test scripts","size":"size-limit","test":"NODE_ENV=test vitest --run","build":"tsc --project tsconfig.json","cover":"NODE_ENV=test vitest --coverage --run","start":"tsdx watch --target node","analyze":"size-limit --why","prepare":"husky","test:e2e":"npm run build && npm run test:build:commonjs && npm run test:build:esm","lint:package":"npx publint","test:build:esm":"node e2e/test-esm.js","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","test:build:commonjs":"node e2e/test-commonjs.cjs","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin main && git push --tags"},"version":"0.0.27","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:bf572710-e4b9-46e4-88db-67bbc08d3b52"}},"homepage":"https://github.com/anephenix/objection-relations","prettier":{"semi":true,"printWidth":80,"singleQuote":true,"trailingComma":"es5"},"repository":{"url":"git+https://github.com/anephenix/objection-relations.git","type":"git"},"size-limit":[{"path":"dist/*.js","limit":"10 KB"}],"_npmVersion":"11.19.0","description":"[![npm version](https://badge.fury.io/js/%40anephenix%2Fobjection-relations.svg)](https://badge.fury.io/js/%40anephenix%2Fobjection-relations) [![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https:","directories":{},"maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"_nodeVersion":"24.21.0","dependencies":{"objection":"^3.1.5","pluralize":"^8.0.0","lodash.snakecase":"^4.1.1"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","vitest":"^5.0.1","globals":"^17.12.0","publint":"^0.3.24","size-limit":"^14.0.0","typescript":"^7.0.2","@types/node":"^26.6.1","@biomejs/biome":"2.5.14","@size-limit/file":"^14.0.0","@types/pluralize":"^0.0.33","@vitest/coverage-v8":"^5.0.1","@types/lodash.snakecase":"^4.1.9","size-limit-node-esbuild":"^0.4.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/objection-relations_0.0.27_1790495259753_0.5634604026953878"}}},"time":{"created":"2022-02-13T12:17:31.796Z","modified":"2026-09-27T07:47:40.219Z","0.0.1":"2022-02-13T12:17:32.038Z","0.0.2":"2022-02-19T10:16:25.874Z","0.0.3":"2025-01-10T12:11:37.157Z","0.0.4":"2025-01-13T20:26:48.319Z","0.0.6":"2025-01-14T19:32:05.654Z","0.0.5":"2025-01-14T19:32:06.541Z","0.0.8":"2025-02-04T18:14:27.983Z","0.0.9":"2025-02-15T11:47:24.758Z","0.0.10":"2025-02-24T16:24:07.251Z","0.0.11":"2025-03-10T21:24:07.622Z","0.0.12":"2025-04-08T13:00:33.897Z","0.0.13":"2025-05-26T14:18:31.186Z","0.0.14":"2025-10-06T08:12:28.540Z","0.0.17":"2025-10-07T09:07:06.627Z","0.0.18":"2025-10-07T17:24:43.845Z","0.0.19":"2025-10-07T17:36:58.383Z","0.0.20":"2025-10-07T17:47:28.493Z","0.0.21":"2025-10-07T17:52:45.463Z","0.0.22":"2025-10-08T09:09:56.674Z","0.0.23":"2025-12-03T17:02:08.279Z","0.0.24":"2026-01-04T19:53:38.444Z","0.0.25":"2026-03-21T17:44:00.764Z","0.0.26":"2026-04-08T03:28:50.592Z","0.0.27":"2026-09-27T07:47:39.834Z"},"bugs":{"url":"https://github.com/anephenix/objection-relations/issues"},"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","homepage":"https://github.com/anephenix/objection-relations","repository":{"url":"git+https://github.com/anephenix/objection-relations.git","type":"git"},"description":"[![npm version](https://badge.fury.io/js/%40anephenix%2Fobjection-relations.svg)](https://badge.fury.io/js/%40anephenix%2Fobjection-relations) [![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https:","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"readme":"# objection-relations\n\n[![npm version](https://badge.fury.io/js/%40anephenix%2Fobjection-relations.svg)](https://badge.fury.io/js/%40anephenix%2Fobjection-relations) [![Node.js CI](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml/badge.svg)](https://github.com/anephenix/objection-relations/actions/workflows/node.js.yml) [![Socket Badge](https://socket.dev/api/badge/npm/package/@anephenix/objection-relations)](https://socket.dev/npm/package/@anephenix/objection-relations)\n\nA relations helper for Objection.js. This provides a convenient way to define\nrelations in the `relationMappings` function on an Objection.js model.\n\nFor example, say you have a table called \"Users\" with this relation mapping:\n\n```javascript\nclass User extends Model {\n  static get tableName() {\n    return 'users';\n  }\n\n  static get relationMappings() {\n    return {\n      addresses: {\n        relation: Model.HasManyRelation,\n        modelClass: Address,\n        join: {\n          from: 'users.id',\n          to: 'addresses.user_id',\n        },\n      },\n    };\n  }\n}\n```\n\nYou can use the objection-relations helper module to write the instead:\n\n```javascript\nimport { ObjectionRelation } from '@anephenix/objection-relations';\n\nclass User extends Model {\n  static get tableName() {\n    return 'users';\n  }\n\n  static get relationMappings() {\n    const or = new ObjectionRelation({\n      subject: this.name,\n      modelPath: __dirname,\n    });\n    return {\n      addresses: or.hasMany('Address'),\n    };\n  }\n}\n```\n\nThe helper function will do the following:\n\n- Setup the relation type from Objection.js (hasOne, hasMany, hasMnayThrough, belongsTo)\n- Define the join table based on the properties of the subject and object\n  models, if they follow a particular pattern (tables for models are named in\n  plural format, and foreign keys use a singular format). e.g.\n\n| Model | table name | foreign key |\n| ----- | ---------- | ----------- |\n| User  | users      | user_id     |\n\n*NOTE*\n\nFor TypeScript files to resolve correctly in Objection.js, use the model directly instead of the name as a string:\n\n```typescript\nimport { ObjectionRelation } from '@anephenix/objection-relations';\nimport Address from './Address';\n\nclass User extends Model {\n  static get tableName() {\n    return 'users';\n  }\n\n  static get relationMappings() {\n    const or = new ObjectionRelation({\n      subject: this.name,\n      modelPath: __dirname,\n    });\n    return {\n      // This changes from 'Address' to Address\n      addresses: or.hasMany(Address),\n    };\n  }\n}\n```\n\n## Dependencies\n\n- Node.js\n\n## Install\n\n```shell\nnpm i @anephenix/objection-relations\n```\n\n## Usage\n\nYou can setup different kinds of database table relationships like this:\n\n### Belongs to\n\n```javascript\nor.belongsTo('Role');\n```\n\nIs equivalent to writing:\n\n```javascript\n{\n    relation: Model.BelongsToOneRelation,\n    modelClass: 'Role',\n    join: {\n        from: 'users.role_id',\n        to: 'roles.id'\n    }\n}\n```\n\n### Has one\n\n```javascript\nor.hasOne('Setting');\n```\n\nIs equivalent to writing:\n\n```javascript\n{\n    relation: Model.HasOneRelation,\n    modelClass: 'Setting',\n    join: {\n        from: 'users.id',\n        to: 'settings.user_id'\n    }\n}\n```\n\n### Has many\n\n```javascript\nor.hasMany('Address');\n```\n\nIs equivalent to writing:\n\n```javascript\n{\n    relation: Model.HasManyRelation,\n    modelClass: Address,\n    join: {\n        from: 'users.id',\n        to: 'addresses.user_id'\n    }\n}\n```\n\n### Has many through\n\nFor relationships defined through a join table, you can write this:\n\n```javascript\nor.hasManyThrough('Company', 'Employment');\n```\n\nThis is equivalent to:\n\n```javascript\n{\n    relation: Model.ManyToManyRelation,\n    modelClass: Company,\n    join: {\n        from: 'users.id',\n        through: {\n            from: 'employments.user_id',\n            to: 'employments.company_id'\n        },\n        to: 'companies.id'\n    }\n}\n```\n\n## Advanced usage\n\nThere might be cases where the name of the database tables and foreign keys are\nfollowing a different pattern from plural database tables and singular foreign\nkeys. In such cases you can define them in the options, like this:\n\n### SubjectTable\n\nSay a `User` model has many addresses, but the database table is called\n'account_users', you can write this code:\n\n```javascript\nor.hasMany('Address', { subjectTable: 'account_users' });\n```\n\nWhich is equivalent to writing:\n\n```javascript\n{\n    relation: Model.HasManyRelation,\n    modelClass: Address,\n    join: {\n        from: 'account_users.id',\n        to: 'addresses.user_id'\n    }\n}\n```\n\n### ObjectTable\n\nThe same applies for the object table. Say for example the `Address` model has\nthe database table 'shipping_addresses', you could write this:\n\n```javascript\nor.hasMany('Address', { objectTable: 'shipping_addresses' });\n```\n\nWhich is equivalent to writing:\n\n```javascript\n{\n    relation: Model.HasManyRelation,\n    modelClass: Address,\n    join: {\n        from: 'users.id',\n        to: 'shipping_addresses.user_id'\n    }\n}\n```\n\n### SubjectForeignKey\n\nIf you find that the foreign key is not a singular form of the related model,\nthen you can pass a foreign key for the subject like this:\n\n```javascript\nor.hasMany('Address', { subjectForeignKey: 'account_user_id' });\n```\n\nWhich is equivalent to writing:\n\n```javascript\n{\n    relation: Model.HasManyRelation,\n    modelClass: Address,\n    join: {\n        from: 'users.id',\n        to: 'addresses.account_user_id'\n    }\n}\n```\n\n### ObjectForeignKey\n\nYou can pass a custom foreign key for the object (Like a Post model) like this:\n\n```javascript\nor.belongsTo('User', { objectForeignKey: 'author_id' });\n```\n\nIs equivalent to writing:\n\n```javascript\n{\n    relation: Model.BelongsToOneRelation,\n    modelClass: User,\n    join: {\n        from: 'posts.author_id',\n        to: 'users.id'\n    }\n}\n```\n\n## Tests\n\n```shell\nnpm t\n```\n\n## Licence and credits\n\n&copy;2026 Anephenix Ltd. Objection-relations is licenced under the MIT Licence.\n","readmeFilename":"README.md"}