{"_id":"@bernierllc/validators-referential-integrity","_rev":"7-478b6520574e8e2e9320a076df5903d5","name":"@bernierllc/validators-referential-integrity","dist-tags":{"latest":"1.6.0"},"versions":{"1.0.0":{"name":"@bernierllc/validators-referential-integrity","version":"1.0.0","keywords":["validator","referential-integrity","foreign-key","validation","schema","primitive","bernierllc"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-referential-integrity@1.0.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/BernierLLC/tools#readme","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"dist":{"shasum":"6380064e6d86267157f4fdd419b8aa1c5abe28a9","tarball":"https://registry.npmjs.org/@bernierllc/validators-referential-integrity/-/validators-referential-integrity-1.0.0.tgz","fileCount":26,"integrity":"sha512-Vdf+yipj+SBiA1jJ0YG+1/5yUHGyRLBAdTIYkLMisW7hhEm9Slf5EQBTEEqAFkhRPtKLmqKhWX5I3xn0EHqstg==","signatures":[{"sig":"MEMCIAIXWTm9fLjqyTPQkYwx9wKnexvqnPXzSiHENgU8Ey68Ah9mlnNzMQYYTcarmDAh8lETareu43i+LjO5qbMlX4eW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72364},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"f184001df6da605bb9584b5f5bc17a1b93ee29f4","scripts":{"lint":"eslint src --ext .ts","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","typecheck":"tsc --noEmit","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/validators/validators-referential-integrity"},"_npmVersion":"11.4.2","description":"Primitive validator for referential integrity - foreign key relationships and cross-document validation","directories":{},"_nodeVersion":"24.4.1","dependencies":{"@bernierllc/validators-core":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-referential-integrity_1.0.0_1760037579274_0.5660697253348541","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@bernierllc/validators-referential-integrity","version":"1.2.0","keywords":["validator","referential-integrity","foreign-key","validation","schema","primitive","bernierllc"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-referential-integrity@1.2.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/BernierLLC/tools#readme","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"dist":{"shasum":"04df07eb07b7127e989a66549b9c46c33191c119","tarball":"https://registry.npmjs.org/@bernierllc/validators-referential-integrity/-/validators-referential-integrity-1.2.0.tgz","fileCount":26,"integrity":"sha512-pgabK1CY13SoqL4w/4MyMJD05OvoYmuEx9eyYMEC/xFDXclOftdw+FJuSiqWz0GaWkCb91O8f9zRqzFNMsg9jA==","signatures":[{"sig":"MEYCIQC/Xic7+RU4gMWrCDfL/zp2oFf9Tbjgz79BJ+mRdC11QwIhALIBD2iH5bum7QzKtN1VIoQamBhrEoQM8NsAKG0JCs9/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72467},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"af7e74b3715d56d3a193e1bb6743b337c2b0df6d","scripts":{"lint":"eslint src --ext .ts","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","typecheck":"tsc --noEmit","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0e764894-4669-456c-9c61-6c461fada985"}},"repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/validators/validators-referential-integrity"},"_npmVersion":"lerna/9.0.3/node@v20.19.6+x64 (linux)","description":"Primitive validator for referential integrity - foreign key relationships and cross-document validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{"@bernierllc/validators-core":"0.1.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-referential-integrity_1.2.0_1767642371777_0.5320197941948097","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@bernierllc/validators-referential-integrity","version":"1.2.1","keywords":["validator","referential-integrity","foreign-key","validation","schema","primitive","bernierllc"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-referential-integrity@1.2.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/BernierLLC/tools#readme","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"dist":{"shasum":"313900880db4ba68f0b152fe20c55dcf3f193b16","tarball":"https://registry.npmjs.org/@bernierllc/validators-referential-integrity/-/validators-referential-integrity-1.2.1.tgz","fileCount":26,"integrity":"sha512-vkPD/D5lBPFNj1VGcDXOvbGGbVQmup3+uDe92PV3VZR7tISZLIGReNce9G5SkXtMsDprgZAdq8YnivRYcd4bEg==","signatures":[{"sig":"MEYCIQCt980KcGPBTCWMJSyrn3U0yMPj/E6J1xlXYJsvTB/IPAIhALUJuZ3/+I8RVS01ZckCwypH2Um3C87eiypCew6HTAzi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72409},"main":"./dist/index.js","type":"module","_from":"file:bernierllc-validators-referential-integrity-1.2.1.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","typecheck":"tsc --noEmit","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0e764894-4669-456c-9c61-6c461fada985"}},"_resolved":"/tmp/47ff664c753c9a8d762f954c6a2482ba/bernierllc-validators-referential-integrity-1.2.1.tgz","_integrity":"sha512-vkPD/D5lBPFNj1VGcDXOvbGGbVQmup3+uDe92PV3VZR7tISZLIGReNce9G5SkXtMsDprgZAdq8YnivRYcd4bEg==","repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/validators/validators-referential-integrity"},"_npmVersion":"11.11.0","description":"Primitive validator for referential integrity - foreign key relationships and cross-document validation","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bernierllc/validators-core":"0.1.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-referential-integrity_1.2.1_1773078312919_0.12050016222609616","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@bernierllc/validators-referential-integrity","version":"1.2.2","keywords":["validator","referential-integrity","foreign-key","validation","schema","primitive","bernierllc"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-referential-integrity@1.2.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/BernierLLC/tools#readme","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"dist":{"shasum":"4a4d15ebc6842f99db267ad860d65580a4d29953","tarball":"https://registry.npmjs.org/@bernierllc/validators-referential-integrity/-/validators-referential-integrity-1.2.2.tgz","fileCount":26,"integrity":"sha512-N/mLrw+8KKeKvjunIAfJXRx75iCQj3qAxpwLl8xz8glHpL8m0Dtlkpy342Y9EIWNmVUlliKZGoRmkFCgKeBeMg==","signatures":[{"sig":"MEUCIEhQxt89zRPN2vv8q8251n1lXE7xH6o4S49MtSnKRfvEAiEA0ILI3941rCBEER9Mfo3Emo32Z7kqxagSTDeQi7Ancw8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72409},"main":"./dist/index.js","type":"module","_from":"file:bernierllc-validators-referential-integrity-1.2.2.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","typecheck":"tsc --noEmit","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0e764894-4669-456c-9c61-6c461fada985"}},"_resolved":"/home/runner/work/tools/tools/packages/validators/validators-referential-integrity/bernierllc-validators-referential-integrity-1.2.2.tgz","_integrity":"sha512-N/mLrw+8KKeKvjunIAfJXRx75iCQj3qAxpwLl8xz8glHpL8m0Dtlkpy342Y9EIWNmVUlliKZGoRmkFCgKeBeMg==","repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/validators/validators-referential-integrity"},"_npmVersion":"11.11.0","description":"Primitive validator for referential integrity - foreign key relationships and cross-document validation","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bernierllc/validators-core":"0.1.4"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-referential-integrity_1.2.2_1773163962740_0.7614766684520067","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@bernierllc/validators-referential-integrity","version":"1.3.0","keywords":["validator","referential-integrity","foreign-key","validation","schema","primitive","bernierllc"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-referential-integrity@1.3.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/BernierLLC/tools#readme","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"dist":{"shasum":"50312f24a1997b51cafeaf676c10334c6fe3cd47","tarball":"https://registry.npmjs.org/@bernierllc/validators-referential-integrity/-/validators-referential-integrity-1.3.0.tgz","fileCount":26,"integrity":"sha512-thqxNr3knQiroUBTXJT6vYfXdkvLoGNYNMlcu840Co1PpAthe3nNIvYXTIDcM65izWYJ3IWweE/XNzB+vqsOpQ==","signatures":[{"sig":"MEUCID4pLe4bstsDhEKihe6NpDDZzQRIxE6uvZhn9hPl5xjkAiEAvT+u11HYWB08lk3rMjZ+nn2eCxhqvm529Y9VHZaqrVE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72409},"main":"./dist/index.js","type":"module","_from":"file:bernierllc-validators-referential-integrity-1.3.0.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","typecheck":"tsc --noEmit","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0e764894-4669-456c-9c61-6c461fada985"}},"_resolved":"/home/runner/work/tools/tools/packages/validators/validators-referential-integrity/bernierllc-validators-referential-integrity-1.3.0.tgz","_integrity":"sha512-thqxNr3knQiroUBTXJT6vYfXdkvLoGNYNMlcu840Co1PpAthe3nNIvYXTIDcM65izWYJ3IWweE/XNzB+vqsOpQ==","repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/validators/validators-referential-integrity"},"_npmVersion":"11.14.1","description":"Primitive validator for referential integrity - foreign key relationships and cross-document validation","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/validators-core":"0.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-referential-integrity_1.3.0_1779242196338_0.7624398477451813","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@bernierllc/validators-referential-integrity","version":"1.4.0","keywords":["validator","referential-integrity","foreign-key","validation","schema","primitive","bernierllc"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/validators-referential-integrity@1.4.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/BernierLLC/tools#readme","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"dist":{"shasum":"42f257e9c884a0583f17cb97665c90a5cf9a5df9","tarball":"https://registry.npmjs.org/@bernierllc/validators-referential-integrity/-/validators-referential-integrity-1.4.0.tgz","fileCount":26,"integrity":"sha512-J/Xz4pgCm116cPZZHhqvMY9gqfblYSuyqFKqL0dts1+Z2PRsMXD00jV0MDFslPwc7ubAx/2ljmNZDN68cwoRRQ==","signatures":[{"sig":"MEUCIG/lnyTExczqPa5cF/q+apjdro3ffxGKE5lc3JhbEH2uAiEA7vJTKcZKWG5WItWHBWEZMxCW+tup1Z89yjMzx8/xYB8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72409},"main":"./dist/index.js","type":"module","_from":"file:bernierllc-validators-referential-integrity-1.4.0.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --watch","build":"tsc","clean":"rm -rf dist","test:run":"jest","typecheck":"tsc --noEmit","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0e764894-4669-456c-9c61-6c461fada985"}},"_resolved":"/home/runner/work/tools/tools/packages/validators/validators-referential-integrity/bernierllc-validators-referential-integrity-1.4.0.tgz","_integrity":"sha512-J/Xz4pgCm116cPZZHhqvMY9gqfblYSuyqFKqL0dts1+Z2PRsMXD00jV0MDFslPwc7ubAx/2ljmNZDN68cwoRRQ==","repository":{"url":"git+https://github.com/BernierLLC/tools.git","type":"git","directory":"packages/validators/validators-referential-integrity"},"_npmVersion":"11.14.1","description":"Primitive validator for referential integrity - foreign key relationships and cross-document validation","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/validators-core":"0.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.40.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/validators-referential-integrity_1.4.0_1779250952053_0.7935769600561087","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@bernierllc/validators-referential-integrity","version":"1.6.0","description":"Primitive validator for referential integrity - foreign key relationships and cross-document validation","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","keywords":["validator","referential-integrity","foreign-key","validation","schema","primitive","bernierllc"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","dependencies":{"@bernierllc/validators-core":"0.4.0"},"devDependencies":{"@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.40.0","jest":"^29.5.0","ts-jest":"^29.1.0","typescript":"^5.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"repository":{"type":"git","url":"git+https://github.com/BernierLLC/tools.git","directory":"packages/validators/validators-referential-integrity"},"scripts":{"build":"tsc","clean":"rm -rf dist","test":"jest --watch","test:run":"jest","test:coverage":"jest --coverage","lint":"eslint src --ext .ts","typecheck":"tsc --noEmit"},"_id":"@bernierllc/validators-referential-integrity@1.6.0","bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"homepage":"https://github.com/BernierLLC/tools#readme","_integrity":"sha512-xZCo79SQpFKrC/+QUiYA1fbt8mhud3ZTTcl0Y8XCDpqojubXdTKxtD/EZYnC1FnhyK2OEqan4QeEUejUgm/BEQ==","_resolved":"/home/runner/work/tools/tools/packages/validators/validators-referential-integrity/bernierllc-validators-referential-integrity-1.6.0.tgz","_from":"file:bernierllc-validators-referential-integrity-1.6.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"11.14.1","dist":{"integrity":"sha512-xZCo79SQpFKrC/+QUiYA1fbt8mhud3ZTTcl0Y8XCDpqojubXdTKxtD/EZYnC1FnhyK2OEqan4QeEUejUgm/BEQ==","shasum":"0ac1b81492b2a8a3601677ce5c70ae113ee57c9e","tarball":"https://registry.npmjs.org/@bernierllc/validators-referential-integrity/-/validators-referential-integrity-1.6.0.tgz","fileCount":30,"unpackedSize":75261,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCcrGzKMG4k8Is//a+CXQPVdZ+fv0EEEdJTpzKtINtT5AIgJKTRH6My6JEUru3VuKo4t4lzZvppBwMeJ2CydYy7WXk="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0e764894-4669-456c-9c61-6c461fada985"}},"directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/validators-referential-integrity_1.6.0_1779252239467_0.8725757266333298"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-09T19:19:39.162Z","modified":"2026-05-20T04:43:59.752Z","1.0.0":"2025-10-09T19:19:39.487Z","1.2.0":"2026-01-05T19:46:11.920Z","1.2.1":"2026-03-09T17:45:13.076Z","1.2.2":"2026-03-10T17:32:42.878Z","1.3.0":"2026-05-20T01:56:36.482Z","1.4.0":"2026-05-20T04:22:32.235Z","1.6.0":"2026-05-20T04:43:59.601Z"},"bugs":{"url":"https://github.com/BernierLLC/tools/issues"},"author":{"name":"Bernier LLC"},"license":"UNLICENSED","homepage":"https://github.com/BernierLLC/tools#readme","keywords":["validator","referential-integrity","foreign-key","validation","schema","primitive","bernierllc"],"repository":{"type":"git","url":"git+https://github.com/BernierLLC/tools.git","directory":"packages/validators/validators-referential-integrity"},"description":"Primitive validator for referential integrity - foreign key relationships and cross-document validation","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/validators-referential-integrity\n\nPrimitive validator for referential integrity - foreign key relationships and cross-document validation.\n\n## Installation\n\n```bash\nnpm install @bernierllc/validators-referential-integrity\n```\n\n## Overview\n\nThis package provides comprehensive referential integrity validation for data structures with foreign key relationships. It validates:\n\n- **Foreign Key Existence**: Ensures all foreign keys reference existing records\n- **Orphaned Record Detection**: Detects records that should have been cascade deleted\n- **Circular Reference Detection**: Identifies cycles in foreign key relationships\n- **Cascade Delete Validation**: Validates cascade delete constraints (RESTRICT, CASCADE, SET_NULL)\n\n## Usage\n\n### Basic Validation\n\n```typescript\nimport {\n  validateReferentialIntegrity,\n  type ReferentialIntegrityData,\n} from '@bernierllc/validators-referential-integrity';\n\nconst data: ReferentialIntegrityData = {\n  schemas: [\n    {\n      collection: 'users',\n      primaryKey: 'id',\n      foreignKeys: [],\n    },\n    {\n      collection: 'posts',\n      primaryKey: 'id',\n      foreignKeys: [\n        {\n          sourceField: 'userId',\n          targetCollection: 'users',\n          targetField: 'id',\n          required: true,\n          onDelete: 'CASCADE',\n        },\n      ],\n    },\n  ],\n  documents: {\n    users: [\n      { id: 1, name: 'Alice' },\n      { id: 2, name: 'Bob' },\n    ],\n    posts: [\n      { id: 1, userId: 1, title: 'Hello World' },\n      { id: 2, userId: 999, title: 'Invalid Post' }, // Foreign key violation\n    ],\n  },\n};\n\nconst problems = await validateReferentialIntegrity(data);\nconsole.log(problems);\n// [\n//   {\n//     ruleId: 'referential-integrity/foreign-key-existence',\n//     message: \"Foreign key 'userId' references non-existent record '999' in 'users'\",\n//     severity: 'error',\n//     domain: 'schema',\n//     ...\n//   }\n// ]\n```\n\n### Check Validity\n\n```typescript\nimport { isReferentialIntegrityValid } from '@bernierllc/validators-referential-integrity';\n\nconst isValid = await isReferentialIntegrityValid(data);\nif (isValid) {\n  console.log('All foreign keys are valid!');\n}\n```\n\n### Safe Validation with Results\n\n```typescript\nimport { validateReferentialIntegritySafe } from '@bernierllc/validators-referential-integrity';\n\nconst result = await validateReferentialIntegritySafe(data);\nconsole.log(result);\n// {\n//   success: false,\n//   problems: [...],\n//   errorCount: 1,\n//   warningCount: 0\n// }\n```\n\n## Configuration Options\n\n```typescript\ninterface ReferentialIntegrityOptions {\n  /**\n   * Whether to check for foreign key existence\n   * @default true\n   */\n  checkForeignKeys?: boolean;\n\n  /**\n   * Whether to check for orphaned records\n   * @default true\n   */\n  checkOrphanedRecords?: boolean;\n\n  /**\n   * Whether to detect circular references\n   * @default true\n   */\n  checkCircularReferences?: boolean;\n\n  /**\n   * Whether to validate cascade delete constraints\n   * @default true\n   */\n  checkCascadeDelete?: boolean;\n\n  /**\n   * Maximum depth for circular reference detection\n   * @default 100\n   */\n  maxDepth?: number;\n\n  /**\n   * Whether to allow null foreign keys\n   * @default true\n   */\n  allowNullForeignKeys?: boolean;\n}\n```\n\n### Using Options\n\n```typescript\nconst problems = await validateReferentialIntegrity(data, {\n  checkCircularReferences: false, // Skip circular reference checks\n  maxDepth: 50, // Lower depth limit\n  allowNullForeignKeys: false, // Require all FKs to be non-null\n});\n```\n\n## Schema Definition\n\n### Foreign Key Relationship\n\n```typescript\ninterface ForeignKeyRelationship {\n  sourceField: string; // Field containing the foreign key\n  targetCollection: string; // Collection being referenced\n  targetField: string; // Field being referenced (usually 'id')\n  required?: boolean; // Whether FK is required (not nullable)\n  onDelete?: 'CASCADE' | 'SET_NULL' | 'RESTRICT' | 'NO_ACTION';\n}\n```\n\n### Schema Structure\n\n```typescript\ninterface ReferentialIntegritySchema {\n  collection: string; // Name of the collection\n  primaryKey?: string; // Primary key field (default: 'id')\n  foreignKeys?: ForeignKeyRelationship[]; // Foreign key definitions\n}\n```\n\n## Examples\n\n### Multi-Collection Validation\n\n```typescript\nconst data = {\n  schemas: [\n    {\n      collection: 'users',\n      foreignKeys: [],\n    },\n    {\n      collection: 'categories',\n      foreignKeys: [],\n    },\n    {\n      collection: 'posts',\n      foreignKeys: [\n        {\n          sourceField: 'userId',\n          targetCollection: 'users',\n          targetField: 'id',\n          required: true,\n        },\n        {\n          sourceField: 'categoryId',\n          targetCollection: 'categories',\n          targetField: 'id',\n        },\n      ],\n    },\n  ],\n  documents: {\n    users: [{ id: 1, name: 'Alice' }],\n    categories: [{ id: 1, name: 'Tech' }],\n    posts: [\n      { id: 1, userId: 1, categoryId: 1, title: 'Valid Post' },\n      { id: 2, userId: 999, categoryId: 1, title: 'Invalid User' },\n      { id: 3, userId: 1, categoryId: 999, title: 'Invalid Category' },\n    ],\n  },\n};\n\nconst problems = await validateReferentialIntegrity(data);\n// Returns 2 problems: missing userId 999 and missing categoryId 999\n```\n\n### Circular Reference Detection\n\n```typescript\nconst data = {\n  schemas: [\n    {\n      collection: 'nodes',\n      foreignKeys: [\n        {\n          sourceField: 'parentId',\n          targetCollection: 'nodes',\n          targetField: 'id',\n        },\n      ],\n    },\n  ],\n  documents: {\n    nodes: [\n      { id: 1, parentId: 2 },\n      { id: 2, parentId: 3 },\n      { id: 3, parentId: 1 }, // Creates a cycle: 1 -> 2 -> 3 -> 1\n    ],\n  },\n};\n\nconst problems = await validateReferentialIntegrity(data);\n// Detects the circular reference\n```\n\n### Cascade Delete Validation\n\n```typescript\nconst data = {\n  schemas: [\n    {\n      collection: 'users',\n      foreignKeys: [],\n    },\n    {\n      collection: 'posts',\n      foreignKeys: [\n        {\n          sourceField: 'userId',\n          targetCollection: 'users',\n          targetField: 'id',\n          onDelete: 'RESTRICT', // Cannot delete user if posts exist\n        },\n      ],\n    },\n  ],\n  documents: {\n    users: [], // User was deleted\n    posts: [{ id: 1, userId: 1, title: 'Post' }], // Should have prevented deletion\n  },\n};\n\nconst problems = await validateReferentialIntegrity(data);\n// Detects RESTRICT constraint violation\n```\n\n### Orphaned Record Detection\n\n```typescript\nconst data = {\n  schemas: [\n    {\n      collection: 'users',\n      foreignKeys: [],\n    },\n    {\n      collection: 'posts',\n      foreignKeys: [\n        {\n          sourceField: 'userId',\n          targetCollection: 'users',\n          targetField: 'id',\n          required: true,\n          onDelete: 'CASCADE', // Posts should be deleted with user\n        },\n      ],\n    },\n  ],\n  documents: {\n    users: [{ id: 2, name: 'Bob' }], // User 1 was deleted\n    posts: [\n      { id: 1, userId: 1, title: 'Orphaned Post' }, // Should have been cascade deleted\n    ],\n  },\n};\n\nconst problems = await validateReferentialIntegrity(data);\n// Detects orphaned record\n```\n\n## Validation Rules\n\n### Foreign Key Existence (`referential-integrity/foreign-key-existence`)\n\nValidates that all foreign key values reference existing records in the target collection.\n\n**Severity**: error\n**Checks**:\n- Foreign keys point to existing records\n- Referenced collections exist\n- Null handling based on `allowNullForeignKeys` option\n\n### Orphaned Records (`referential-integrity/orphaned-records`)\n\nDetects records that should have been cascade deleted when their parent was removed.\n\n**Severity**: error\n**Applies to**: Required foreign keys with `CASCADE` delete behavior\n**Checks**:\n- Records with null required CASCADE foreign keys\n- Records referencing non-existent parents with CASCADE\n\n### Circular References (`referential-integrity/circular-references`)\n\nDetects cycles in foreign key relationships that could cause infinite loops.\n\n**Severity**: error\n**Checks**:\n- Self-referencing cycles (e.g., A -> B -> C -> A)\n- Cross-collection cycles\n- Depth limit violations (warning)\n\n### Cascade Delete (`referential-integrity/cascade-delete`)\n\nValidates cascade delete constraints are properly enforced.\n\n**Severity**: error\n**Validates**:\n- RESTRICT: Cannot delete if dependents exist\n- CASCADE: Dependents should be deleted\n- SET_NULL: Foreign keys should be nulled\n\n## API Reference\n\n### `validateReferentialIntegrity(data, options?, utils?)`\n\nMain validation function.\n\n**Parameters**:\n- `data: ReferentialIntegrityData` - Schemas and documents to validate\n- `options?: ReferentialIntegrityOptions` - Validation options\n- `utils?: SharedUtils` - Shared utilities (optional)\n\n**Returns**: `Promise<Problem[]>` - Array of validation problems\n\n### `isReferentialIntegrityValid(data, options?)`\n\nQuick validity check.\n\n**Returns**: `Promise<boolean>` - `true` if no errors, `false` otherwise\n\n### `validateReferentialIntegritySafe(data, options?)`\n\nValidation with detailed results.\n\n**Returns**: `Promise<{ success, problems, errorCount, warningCount }>`\n\n## Integration Status\n\n- **Logger**: not-applicable - Pure validation, no logging needed\n- **Docs-Suite**: ready - Markdown documentation with examples\n- **NeverHub**: not-applicable - Primitive validator, no service integration\n\n## License\n\nCopyright (c) 2025 Bernier LLC. All rights reserved.\n\n## See Also\n\n- [@bernierllc/validators-core](../validators-core) - Core validation framework\n- [@bernierllc/validators-json-structure](../validators-json-structure) - JSON validation\n- [@bernierllc/validators-runner](../validators-runner) - Validation orchestration\n","readmeFilename":"README.md"}