{"_id":"@dsavidge02/mongo-connector-ts","_rev":"9-e46e4269f91eb3bd6edf56171e86dbd2","name":"@dsavidge02/mongo-connector-ts","dist-tags":{"latest":"2.0.1"},"versions":{"1.0.3":{"name":"@dsavidge02/mongo-connector-ts","version":"1.0.3","keywords":["mongodb","typescript","mongo","connector","singleton","crud"],"author":{"name":"Daniel Savidge"},"license":"MIT","_id":"@dsavidge02/mongo-connector-ts@1.0.3","maintainers":[{"name":"dsavidge02","email":"dsavidge02@gmail.com"}],"dist":{"shasum":"84c0b6b0724901fb6ae8e1b43c92e2ab341671f2","tarball":"https://registry.npmjs.org/@dsavidge02/mongo-connector-ts/-/mongo-connector-ts-1.0.3.tgz","fileCount":7,"integrity":"sha512-oC/FUMsic7kqIYq8ErrpCtzM9Y+5FAQkd0UYEkU6jBaLB5xSmXD27ZDEqgePH7S0Mjhh95HUf3ltZhik3u+01Q==","signatures":[{"sig":"MEUCIGU+1zCF5t1IL/+eq7FGFw9ouv1c2H8coQ0/DYC1aBtrAiEAgC992RwEYRpuTOB33rWCTGuouVk3V5XFDuAk80TIRM0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12939},"main":"dist/mongoConnector.js","types":"dist/mongoConnector.d.ts","gitHead":"3c37d410051b8c8d76672ab93a72d0e622de419f","scripts":{"build":"tsc","prepare":"npm run build"},"_npmUser":{"name":"dsavidge02","email":"dsavidge02@gmail.com"},"repository":{},"_npmVersion":"10.8.3","description":"Basic Mongo Connector Singleton Instance","directories":{},"_nodeVersion":"20.15.1","dependencies":{"mongodb":"^6.17.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/mongodb":"^4.0.6"},"_npmOperationalInternal":{"tmp":"tmp/mongo-connector-ts_1.0.3_1753111693057_0.8271715006368208","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@dsavidge02/mongo-connector-ts","version":"1.0.4","keywords":["mongodb","typescript","mongo","connector","singleton","crud"],"author":{"name":"Daniel Savidge"},"license":"MIT","_id":"@dsavidge02/mongo-connector-ts@1.0.4","maintainers":[{"name":"dsavidge02","email":"dsavidge02@gmail.com"}],"dist":{"shasum":"77a4765667f83d1db8994baff175f079ae502cfb","tarball":"https://registry.npmjs.org/@dsavidge02/mongo-connector-ts/-/mongo-connector-ts-1.0.4.tgz","fileCount":7,"integrity":"sha512-ns2dYSmjjdZ4za4CbVHMgZtwHGwQIZJthM7C2NZ9NZ63vj6vu/Hu5q4ZViM+xCNLz1+hj/Hep3ZllJ4vgsEwBA==","signatures":[{"sig":"MEUCIQDDZ17oh2I/l2lzHuI1RjrGWmo91sjk45AP3Wa/i34M8wIgSHIGQduoHy6+HDC1aK9xGpFXwh7/5jKoC+xIETtjUdg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13040},"main":"dist/mongoConnector.js","types":"dist/mongoConnector.d.ts","gitHead":"44cf7d360c91c9689659af9adc9a22dd82b27707","scripts":{"build":"tsc","prepare":"npm run build"},"_npmUser":{"name":"dsavidge02","email":"dsavidge02@gmail.com"},"repository":{},"_npmVersion":"10.8.3","description":"Basic Mongo Connector Singleton Instance","directories":{},"_nodeVersion":"20.15.1","dependencies":{"mongodb":"^6.17.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/mongodb":"^4.0.6"},"_npmOperationalInternal":{"tmp":"tmp/mongo-connector-ts_1.0.4_1753118909887_0.4524393578029884","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@dsavidge02/mongo-connector-ts","version":"1.0.5","keywords":["mongodb","typescript","mongo","connector","singleton","crud"],"author":{"name":"Daniel Savidge"},"license":"MIT","_id":"@dsavidge02/mongo-connector-ts@1.0.5","maintainers":[{"name":"dsavidge02","email":"dsavidge02@gmail.com"}],"dist":{"shasum":"d8e0c980d061d34db270d4ab3ae1e2b1f5e4430e","tarball":"https://registry.npmjs.org/@dsavidge02/mongo-connector-ts/-/mongo-connector-ts-1.0.5.tgz","fileCount":7,"integrity":"sha512-O9z+3KS9xuApMIoUgJ4c9MpxlsZdGXkMgES8KEwoiZ7cyPC3JnpLv5OcAwxdqNCoT7OBjraUxvmaz8OArKeQYw==","signatures":[{"sig":"MEUCIARZIZKQj09b407RvxQmJc+AShje56zlDq+kvTHYETNDAiEAzmHU/pDpw34hsmk0DmZUjponvfdCfV1yTy8N1G2vmj4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12959},"main":"dist/mongoConnector.js","types":"dist/mongoConnector.d.ts","gitHead":"44cf7d360c91c9689659af9adc9a22dd82b27707","scripts":{"build":"tsc","prepare":"npm run build"},"_npmUser":{"name":"dsavidge02","email":"dsavidge02@gmail.com"},"repository":{},"_npmVersion":"10.8.3","description":"Basic Mongo Connector Singleton Instance","directories":{},"_nodeVersion":"20.15.1","dependencies":{"mongodb":"^6.17.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/mongodb":"^4.0.6"},"_npmOperationalInternal":{"tmp":"tmp/mongo-connector-ts_1.0.5_1753119187813_0.6235909275290128","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@dsavidge02/mongo-connector-ts","version":"1.0.6","keywords":["mongodb","typescript","mongo","connector","singleton","crud"],"author":{"name":"Daniel Savidge"},"license":"MIT","_id":"@dsavidge02/mongo-connector-ts@1.0.6","maintainers":[{"name":"dsavidge02","email":"dsavidge02@gmail.com"}],"dist":{"shasum":"a16f00e7f12f36940d899439aad23b62ac537959","tarball":"https://registry.npmjs.org/@dsavidge02/mongo-connector-ts/-/mongo-connector-ts-1.0.6.tgz","fileCount":7,"integrity":"sha512-OLwQz39nGuzyGzUUzouwEsKdA51CGJH21EMxKT4WER48JkOmOnHHZp9JiSFyHTCKKHYULGyb1YljC99k5Yhmqg==","signatures":[{"sig":"MEUCIHfZLYrFxj8ZB7mtRIlqT91zirOExM+/XDCWP9yYbP8+AiEA0XwBNmGB648ko/lMTBSAOlnoO6NdHqqJnYfh5FSfdbc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12734},"main":"dist/mongoConnector.js","types":"dist/mongoConnector.d.ts","gitHead":"417b403e6f6ba6c299f7ddc4149f3da9b9ebea99","scripts":{"build":"tsc","prepare":"npm run build"},"_npmUser":{"name":"dsavidge02","email":"dsavidge02@gmail.com"},"repository":{},"_npmVersion":"10.8.3","description":"Basic Mongo Connector Singleton Instance","directories":{},"_nodeVersion":"20.15.1","dependencies":{"mongodb":"^6.17.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/mongodb":"^4.0.6"},"_npmOperationalInternal":{"tmp":"tmp/mongo-connector-ts_1.0.6_1753881729398_0.016062585001930696","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@dsavidge02/mongo-connector-ts","version":"1.0.7","keywords":["mongodb","typescript","mongo","connector","singleton","crud"],"author":{"name":"Daniel Savidge"},"license":"MIT","_id":"@dsavidge02/mongo-connector-ts@1.0.7","maintainers":[{"name":"dsavidge02","email":"dsavidge02@gmail.com"}],"homepage":"https://github.com/dsavidge02/mongo-connector#readme","bugs":{"url":"https://github.com/dsavidge02/mongo-connector/issues"},"dist":{"shasum":"270701965dabf53706fcefab405b8097c3a89754","tarball":"https://registry.npmjs.org/@dsavidge02/mongo-connector-ts/-/mongo-connector-ts-1.0.7.tgz","fileCount":8,"integrity":"sha512-Dg5jXAapvzqEcJAhnpGSRcyq9lXr5iXgrsrs0bCgzGFZ3bDt1N3+t0+9XfB46CqxFPUsPQpMQTeplGFS0rDULg==","signatures":[{"sig":"MEUCIDMeE2o8LhYODZ9RZi0UE+bYH+qscfGY2dFvE6Lzkf45AiEAupRNnLYH57+TGzHWD4LNFMf6VtF5fA01v0uDEBwJ99A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dsavidge02%2fmongo-connector-ts@1.0.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":16649},"main":"dist/mongoConnector.js","types":"dist/mongoConnector.d.ts","gitHead":"6da0bd5ce8843a069cb7edc47e574436c394d697","scripts":{"build":"tsc","prepare":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:49f7883b-ca02-4d7d-81b9-91c2291983bc"}},"repository":{"url":"git+https://github.com/dsavidge02/mongo-connector.git","type":"git"},"_npmVersion":"11.6.2","description":"Basic Mongo Connector Singleton Instance","directories":{},"_nodeVersion":"20.19.5","dependencies":{"mongodb":"^6.17.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/mongodb":"^4.0.6"},"_npmOperationalInternal":{"tmp":"tmp/mongo-connector-ts_1.0.7_1763479855252_0.9064940306535656","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@dsavidge02/mongo-connector-ts","version":"1.0.8","keywords":["mongodb","typescript","mongo","connector","singleton","crud"],"author":{"name":"Daniel Savidge"},"license":"MIT","_id":"@dsavidge02/mongo-connector-ts@1.0.8","maintainers":[{"name":"dsavidge02","email":"dsavidge02@gmail.com"}],"homepage":"https://github.com/dsavidge02/mongo-connector#readme","bugs":{"url":"https://github.com/dsavidge02/mongo-connector/issues"},"dist":{"shasum":"dd892543a269d4e349c6067234abf97fed534b6f","tarball":"https://registry.npmjs.org/@dsavidge02/mongo-connector-ts/-/mongo-connector-ts-1.0.8.tgz","fileCount":12,"integrity":"sha512-KdfychFlEYXJHB+yqLc39BcwRbF++LNr0WuSlCFpuGD++XXSSNi6dUkttFnkt1ll+VXZhr2gr4jBNOxbslr+4A==","signatures":[{"sig":"MEYCIQCFsZZsKOqjYgBv2jyo+r/RKed268QBNrtPcE/2hcZKiQIhAPxu8Nv9o+1Qty4g9kQDcA11zhsGP3j7YYIhhqecy0Y8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dsavidge02%2fmongo-connector-ts@1.0.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":31156},"main":"dist/mongoConnector.js","types":"dist/mongoConnector.d.ts","gitHead":"6cc9671d60101416e41363385c9d11ea8117225a","scripts":{"test":"jest","build":"tsc","prepare":"npm run build","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:49f7883b-ca02-4d7d-81b9-91c2291983bc"}},"repository":{"url":"git+https://github.com/dsavidge02/mongo-connector.git","type":"git"},"_npmVersion":"11.6.4","description":"Basic Mongo Connector Singleton Instance","directories":{},"_nodeVersion":"20.19.5","dependencies":{"mongodb":"^6.17.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.1.2","typescript":"^5.9.3","@types/jest":"^29.5.12","@types/mongodb":"^4.0.6","mongodb-memory-server":"^10.1.3"},"_npmOperationalInternal":{"tmp":"tmp/mongo-connector-ts_1.0.8_1764695880339_0.6591460447083093","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@dsavidge02/mongo-connector-ts","version":"1.0.9","keywords":["mongodb","typescript","mongo","connector","singleton","crud"],"author":{"name":"Daniel Savidge"},"license":"MIT","_id":"@dsavidge02/mongo-connector-ts@1.0.9","maintainers":[{"name":"dsavidge02","email":"dsavidge02@gmail.com"}],"homepage":"https://github.com/dsavidge02/mongo-connector#readme","bugs":{"url":"https://github.com/dsavidge02/mongo-connector/issues"},"dist":{"shasum":"9a14a187a88cd5e20865dc0729e11e9524061168","tarball":"https://registry.npmjs.org/@dsavidge02/mongo-connector-ts/-/mongo-connector-ts-1.0.9.tgz","fileCount":12,"integrity":"sha512-XH1K2egZqHSAd6VneJwVV8IMulwoabn1KP2sXe4BYC2nqvXuJJcmY7viFGXAVln9C3nIbFtYCt+f66vONl4VLA==","signatures":[{"sig":"MEQCIFJiiby6AYLgNwHG9zuWmhezVV3VPXQ+1hLI2zw9WB5+AiAu4/3IYX9y0FYCs+NjxOj0VpqkuP6JAzPnoEtK1Nxc6w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dsavidge02%2fmongo-connector-ts@1.0.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":31581},"main":"dist/mongoConnector.js","types":"dist/mongoConnector.d.ts","gitHead":"75758e3249081c74b5a049b0f6c05733e600e939","scripts":{"test":"jest","build":"tsc","prepare":"npm run build","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:49f7883b-ca02-4d7d-81b9-91c2291983bc"}},"repository":{"url":"git+https://github.com/dsavidge02/mongo-connector.git","type":"git"},"_npmVersion":"11.6.4","description":"Basic Mongo Connector Singleton Instance","directories":{},"_nodeVersion":"20.19.5","dependencies":{"mongodb":"^6.17.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.1.2","typescript":"^5.9.3","@types/jest":"^29.5.12","@types/mongodb":"^4.0.6","mongodb-memory-server":"^10.1.3"},"_npmOperationalInternal":{"tmp":"tmp/mongo-connector-ts_1.0.9_1764701601152_0.14477156710252403","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@dsavidge02/mongo-connector-ts","version":"2.0.0","keywords":["mongodb","typescript","mongo","connector","singleton","crud"],"author":{"name":"Daniel Savidge"},"license":"MIT","_id":"@dsavidge02/mongo-connector-ts@2.0.0","maintainers":[{"name":"dsavidge02","email":"dsavidge02@gmail.com"}],"homepage":"https://github.com/dsavidge02/mongo-connector#readme","bugs":{"url":"https://github.com/dsavidge02/mongo-connector/issues"},"dist":{"shasum":"2158d260927155a478d40e847e2b0f7173b400c9","tarball":"https://registry.npmjs.org/@dsavidge02/mongo-connector-ts/-/mongo-connector-ts-2.0.0.tgz","fileCount":102,"integrity":"sha512-jgqy0mgFK9GHlhsmW1W9WMxaE0SreI/JAzE2KD+J+lCasdNzjR+4U+Jt2Ng+iAmSpR/syr79uR9Jo2MAOyJCvQ==","signatures":[{"sig":"MEQCIDIiwYSnckSLmgMpJmqkrO3fTvGvgBbhZy2SVYUtF6xDAiBHraRarxVFXlcPT/X4wQQpqJU31LWJPHTh+cJaBFHWYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dsavidge02%2fmongo-connector-ts@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":387267},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing.d.ts","default":"./dist/testing.js"}},"gitHead":"8ddb24da52d4f7ff932f29d135991cf5e0b4824f","scripts":{"test":"jest","build":"tsc","prepare":"npm run build","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:49f7883b-ca02-4d7d-81b9-91c2291983bc"}},"repository":{"url":"git+https://github.com/dsavidge02/mongo-connector.git","type":"git"},"_npmVersion":"11.7.0","description":"Basic Mongo Connector Singleton Instance","directories":{},"_nodeVersion":"20.19.6","dependencies":{"mongodb":"^6.17.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.1.2","typescript":"^5.9.3","@types/jest":"^29.5.12","@types/mongodb":"^4.0.6","mongodb-memory-server":"^10.1.3"},"_npmOperationalInternal":{"tmp":"tmp/mongo-connector-ts_2.0.0_1766623064397_0.8060209706403905","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@dsavidge02/mongo-connector-ts","version":"2.0.1","description":"Basic Mongo Connector Singleton Instance","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./testing":{"types":"./dist/testing.d.ts","default":"./dist/testing.js"}},"scripts":{"build":"tsc -p tsconfig.build.json","prepare":"npm run build","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage"},"repository":{"type":"git","url":"git+https://github.com/dsavidge02/mongo-connector.git"},"keywords":["mongodb","typescript","mongo","connector","singleton","crud"],"author":{"name":"Daniel Savidge"},"license":"MIT","dependencies":{"mongodb":"^6.17.0"},"devDependencies":{"@types/jest":"^29.5.12","@types/mongodb":"^4.0.6","jest":"^29.7.0","mongodb-memory-server":"^10.1.3","ts-jest":"^29.1.2","typescript":"^5.9.3"},"gitHead":"966c203a7261e82e93a2b8d542302ebfd0d584c4","_id":"@dsavidge02/mongo-connector-ts@2.0.1","bugs":{"url":"https://github.com/dsavidge02/mongo-connector/issues"},"homepage":"https://github.com/dsavidge02/mongo-connector#readme","_nodeVersion":"20.19.6","_npmVersion":"11.7.0","dist":{"integrity":"sha512-2wv1nORXTz1yU83RGm8EWbaUj/CenqBVuNPehQXlpKdHD/qtCPl/cqP+u1L3zGSep4hDnk7Sxq6Wwh96ylVxkg==","shasum":"997572db7cf1958085a185768fd9524ed51ba76d","tarball":"https://registry.npmjs.org/@dsavidge02/mongo-connector-ts/-/mongo-connector-ts-2.0.1.tgz","fileCount":37,"unpackedSize":88638,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dsavidge02%2fmongo-connector-ts@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDBxOty3SVjXAf1EPw4wD8nHCePd3tj5T5dKmYq6ZfL6QIgKxhZTag6h7QEQfXPtKTYQV41b5SJI81yVC9vjG4MVH4="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:49f7883b-ca02-4d7d-81b9-91c2291983bc"}},"directories":{},"maintainers":[{"name":"dsavidge02","email":"dsavidge02@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mongo-connector-ts_2.0.1_1766629443344_0.8391225950524999"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-21T15:28:12.952Z","modified":"2025-12-25T02:24:03.844Z","1.0.3":"2025-07-21T15:28:13.251Z","1.0.4":"2025-07-21T17:28:30.067Z","1.0.5":"2025-07-21T17:33:08.025Z","1.0.6":"2025-07-30T13:22:09.576Z","1.0.7":"2025-11-18T15:30:55.452Z","1.0.8":"2025-12-02T17:18:00.518Z","1.0.9":"2025-12-02T18:53:21.377Z","2.0.0":"2025-12-25T00:37:44.552Z","2.0.1":"2025-12-25T02:24:03.482Z"},"bugs":{"url":"https://github.com/dsavidge02/mongo-connector/issues"},"author":{"name":"Daniel Savidge"},"license":"MIT","homepage":"https://github.com/dsavidge02/mongo-connector#readme","keywords":["mongodb","typescript","mongo","connector","singleton","crud"],"repository":{"type":"git","url":"git+https://github.com/dsavidge02/mongo-connector.git"},"description":"Basic Mongo Connector Singleton Instance","maintainers":[{"name":"dsavidge02","email":"dsavidge02@gmail.com"}],"readme":"# MongoDB Connector TypeScript\n\nA robust, type-safe MongoDB connector library with a singleton pattern, comprehensive error handling, and modern async/await operations.\n\n## Installation\n\n```bash\nnpm install @dsavidge02/mongo-connector-ts\n```\n\n## Features\n\n- **Singleton Pattern**: Single connection instance across your application\n- **Type-Safe**: Full TypeScript support with generics\n- **Comprehensive Error Handling**: Custom error classes for different failure scenarios\n- **Connection Management**: Built-in retry logic with exponential backoff\n- **Index Management**: Easy-to-use methods for creating and managing indexes\n- **Bulk Operations**: Efficient multi-document operations\n- **Query Enhancements**: Powerful query options with limit, skip, and sort\n- **Zero Logging**: Silent by default, won't pollute your logs\n- **Testing Utilities**: Helper functions for testing with the singleton pattern\n\n## Quick Start\n\n```typescript\nimport { mongoConnector } from '@dsavidge02/mongo-connector-ts';\n\n// Connect to MongoDB\nawait mongoConnector.connect('mongodb://localhost:27017', 'myDatabase');\n\n// Create a document\ninterface User {\n    name: string;\n    email: string;\n    age: number;\n}\n\nconst user = await mongoConnector.createOne<User>('users', {\n    name: 'Alice',\n    email: 'alice@example.com',\n    age: 30\n});\n\n// Query documents\nconst users = await mongoConnector.getMany<User>('users',\n    { age: { $gte: 25 } },\n    { limit: 10, sort: { name: 1 } }\n);\n\n// Close connection when done\nawait mongoConnector.close();\n```\n\n## API Reference\n\n### Connection Management\n\n#### `connect(uri: string, dbName?: string, options?: ConnectOptions): Promise<void>`\n\nConnects to MongoDB with automatic retry logic.\n\n```typescript\n// Basic connection\nawait mongoConnector.connect('mongodb://localhost:27017', 'mydb');\n\n// With custom retry options\nawait mongoConnector.connect('mongodb://localhost:27017', 'mydb', {\n    retry: {\n        maxAttempts: 5,\n        baseDelayMs: 200,\n        maxDelayMs: 10000\n    }\n});\n```\n\n#### `close(): Promise<void>`\n\nCloses the MongoDB connection and resets the connector state.\n\n```typescript\nawait mongoConnector.close();\n```\n\n#### `setDB(dbName: string): void`\n\nSwitches to a different database.\n\n```typescript\nmongoConnector.setDB('anotherDatabase');\n```\n\n#### `isConnected(): boolean`\n\nChecks if the connector is currently connected.\n\n```typescript\nif (mongoConnector.isConnected()) {\n    console.log('Connected to MongoDB');\n}\n```\n\n### CRUD Operations\n\n#### `createOne<T>(collectionName: string, document: T): Promise<WithId<T>>`\n\nCreates a single document and returns it with its generated `_id`.\n\n```typescript\nconst user = await mongoConnector.createOne<User>('users', {\n    name: 'Bob',\n    email: 'bob@example.com',\n    age: 25\n});\n// user now has _id property\n```\n\n**Throws**: `DuplicateKeyError` if a unique index is violated.\n\n#### `getOne<T>(collectionName: string, filter: Filter<T>): Promise<WithId<T> | null>`\n\nFinds a single document matching the filter.\n\n```typescript\nconst user = await mongoConnector.getOne<User>('users', { email: 'alice@example.com' });\nif (user) {\n    console.log(user.name);\n}\n```\n\n**Returns**: `null` if no document is found.\n\n#### `getMany<T>(collectionName: string, filter?: Filter<T>, options?: QueryOptions): Promise<WithId<T>[]>`\n\nFinds multiple documents with optional query options.\n\n```typescript\n// Get all users\nconst allUsers = await mongoConnector.getMany<User>('users');\n\n// Get users with filter\nconst adults = await mongoConnector.getMany<User>('users', { age: { $gte: 18 } });\n\n// With query options\nconst topUsers = await mongoConnector.getMany<User>(\n    'users',\n    { active: true },\n    { limit: 10, skip: 0, sort: { createdAt: -1 } }\n);\n```\n\n#### `updateOne<T>(collectionName: string, filter: Filter<T>, update: UpdateFilter<T>): Promise<WithId<T>>`\n\nUpdates a single document and returns the updated document.\n\n```typescript\nconst updatedUser = await mongoConnector.updateOne<User>(\n    'users',\n    { email: 'alice@example.com' },\n    { $set: { age: 31 } }\n);\n```\n\n**Throws**: `DocumentNotFoundError` if no document matches the filter.\n\n#### `deleteOne<T>(collectionName: string, filter: Filter<T>): Promise<void>`\n\nDeletes a single document.\n\n```typescript\nawait mongoConnector.deleteOne<User>('users', { email: 'alice@example.com' });\n```\n\n**Throws**: `DocumentNotFoundError` if no document matches the filter.\n\n### Bulk Operations\n\n#### `createMany<T>(collectionName: string, documents: T[]): Promise<BulkCreateResult<T>>`\n\nInserts multiple documents, continuing on error (unordered insert).\n\n```typescript\nconst result = await mongoConnector.createMany<User>('users', [\n    { name: 'User1', email: 'user1@example.com', age: 20 },\n    { name: 'User2', email: 'user2@example.com', age: 25 },\n    { name: 'User3', email: 'user3@example.com', age: 30 }\n]);\n\nconsole.log(`Inserted: ${result.inserted.length}`);\nconsole.log(`Failed: ${result.failed.length}`);\n```\n\n**Returns**: Object with `inserted` array and `failed` array.\n**Throws**: `ValidationError` if all documents fail to insert.\n\n#### `updateMany<T>(collectionName: string, filter: Filter<T>, update: UpdateFilter<T>): Promise<number>`\n\nUpdates all documents matching the filter.\n\n```typescript\nconst modifiedCount = await mongoConnector.updateMany<User>(\n    'users',\n    { active: false },\n    { $set: { status: 'inactive' } }\n);\nconsole.log(`Updated ${modifiedCount} documents`);\n```\n\n**Returns**: Number of documents modified.\n\n#### `deleteMany<T>(collectionName: string, filter: Filter<T>): Promise<number>`\n\nDeletes all documents matching the filter.\n\n```typescript\nconst deletedCount = await mongoConnector.deleteMany<User>(\n    'users',\n    { status: 'inactive' }\n);\n```\n\n**Returns**: Number of documents deleted.\n**Throws**: `ValidationError` if filter is empty (safety check).\n\n#### `deleteAll<T>(collectionName: string): Promise<number>`\n\nDeletes all documents in a collection (explicit method to prevent accidents).\n\n```typescript\nconst deletedCount = await mongoConnector.deleteAll<User>('users');\n```\n\n### Query Utilities\n\n#### `count<T>(collectionName: string, filter?: Filter<T>): Promise<number>`\n\nCounts documents matching the filter.\n\n```typescript\nconst totalUsers = await mongoConnector.count<User>('users');\nconst activeUsers = await mongoConnector.count<User>('users', { active: true });\n```\n\n#### `exists<T>(collectionName: string, filter: Filter<T>): Promise<boolean>`\n\nChecks if any document matches the filter (more efficient than `getOne`).\n\n```typescript\nconst emailExists = await mongoConnector.exists<User>('users', {\n    email: 'alice@example.com'\n});\n```\n\n### Index Management\n\n#### `ensureIndex<T>(collectionName: string, field: keyof T & string, options?: CreateIndexesOptions): Promise<string>`\n\nCreates an index on a field.\n\n```typescript\nawait mongoConnector.ensureIndex<User>('users', 'email');\n```\n\n#### `ensureUniqueIndex<T>(collectionName: string, field: keyof T & string): Promise<string>`\n\nCreates a unique index on a field.\n\n```typescript\nawait mongoConnector.ensureUniqueIndex<User>('users', 'email');\n```\n\n#### `ensureCompoundIndex<T>(collectionName: string, fields: (keyof T & string)[], options?: CreateIndexesOptions): Promise<string>`\n\nCreates a compound index on multiple fields.\n\n```typescript\nawait mongoConnector.ensureCompoundIndex<User>('users', ['email', 'name'], { unique: true });\n```\n\n#### `listIndexes(collectionName: string): Promise<Document[]>`\n\nLists all indexes on a collection.\n\n```typescript\nconst indexes = await mongoConnector.listIndexes('users');\nconsole.log(indexes);\n```\n\n#### `dropIndex(collectionName: string, indexName: string): Promise<void>`\n\nDrops an index from a collection.\n\n```typescript\nawait mongoConnector.dropIndex('users', 'email_1');\n```\n\n## Error Handling\n\nThe library provides custom error classes for different scenarios:\n\n### `ConnectionError`\n\nThrown when connection to MongoDB fails.\n\n```typescript\nimport { ConnectionError } from '@dsavidge02/mongo-connector-ts';\n\ntry {\n    await mongoConnector.connect('mongodb://invalid-uri:27017');\n} catch (err) {\n    if (err instanceof ConnectionError) {\n        console.error('Failed to connect:', err.message);\n        console.error('URI:', err.uri);\n    }\n}\n```\n\n### `ValidationError`\n\nThrown when input validation fails.\n\n```typescript\nimport { ValidationError } from '@dsavidge02/mongo-connector-ts';\n\ntry {\n    await mongoConnector.createMany('users', []); // Empty array\n} catch (err) {\n    if (err instanceof ValidationError) {\n        console.error('Validation failed:', err.field);\n    }\n}\n```\n\n### `InvalidObjectIdError`\n\nThrown when an invalid ObjectId string is provided.\n\n```typescript\nimport { InvalidObjectIdError } from '@dsavidge02/mongo-connector-ts';\n\ntry {\n    await mongoConnector.getOne('users', { _id: 'not-valid-id' });\n} catch (err) {\n    if (err instanceof InvalidObjectIdError) {\n        console.error('Invalid ID:', err.value);\n    }\n}\n```\n\n### `DuplicateKeyError`\n\nThrown when a unique index constraint is violated.\n\n```typescript\nimport { DuplicateKeyError } from '@dsavidge02/mongo-connector-ts';\n\ntry {\n    await mongoConnector.createOne('users', { email: 'duplicate@example.com' });\n} catch (err) {\n    if (err instanceof DuplicateKeyError) {\n        console.error(`Duplicate ${err.field} in ${err.collection}`);\n    }\n}\n```\n\n### `DocumentNotFoundError`\n\nThrown when `updateOne` or `deleteOne` cannot find the target document.\n\n```typescript\nimport { DocumentNotFoundError } from '@dsavidge02/mongo-connector-ts';\n\ntry {\n    await mongoConnector.updateOne('users', { _id: 'nonexistent' }, { $set: { name: 'X' } });\n} catch (err) {\n    if (err instanceof DocumentNotFoundError) {\n        console.error(`Not found in ${err.collection}: ${err.id}`);\n    }\n}\n```\n\n## Testing\n\nThe library provides testing utilities to work with the singleton pattern:\n\n```typescript\nimport { resetMongoConnector, createTestConnector } from '@dsavidge02/mongo-connector-ts/testing';\n\ndescribe('My Tests', () => {\n    beforeEach(() => {\n        // Reset singleton between tests\n        resetMongoConnector();\n    });\n\n    it('should work with independent connector', () => {\n        // Create independent test instance\n        const testConnector = createTestConnector();\n        // Use testConnector in your tests\n    });\n});\n```\n\n## TypeScript Types\n\nAll operations support full TypeScript generics:\n\n```typescript\ninterface Product {\n    name: string;\n    price: number;\n    category: string;\n    inStock: boolean;\n}\n\n// Type-safe operations\nconst product = await mongoConnector.createOne<Product>('products', {\n    name: 'Widget',\n    price: 29.99,\n    category: 'Tools',\n    inStock: true\n});\n\n// product._id is typed as ObjectId\n// product.name is typed as string\n```\n\n## Migration from v1.x\n\n### Breaking Changes in v2.0.0\n\n1. **`createOne` signature changed**:\n   - **Before**: `createOne(collection, doc, uniqueFields)`\n   - **After**: `createOne(collection, doc)`\n   - Use `ensureUniqueIndex()` to create unique indexes instead\n\n2. **`createOne` return type changed**:\n   - **Before**: Returns `WithId<T> | null`\n   - **After**: Returns `WithId<T>` (throws on error)\n\n3. **`getCollectionArray` removed**:\n   - Use `getMany()` instead\n\n4. **No more console logging**:\n   - Library is silent; handle errors with try-catch\n\n### Migration Example\n\n```typescript\n// v1.x\nconst user = await mongoConnector.createOne('users',\n    { email: 'test@example.com', name: 'Test' },\n    ['email'] // uniqueFields parameter\n);\nif (!user) {\n    console.error('Failed to create user');\n}\n\n// v2.0.0\n// Setup (once, during app initialization)\nawait mongoConnector.ensureUniqueIndex<User>('users', 'email');\n\n// Usage\ntry {\n    const user = await mongoConnector.createOne('users',\n        { email: 'test@example.com', name: 'Test' }\n    );\n    // user is guaranteed to exist here\n} catch (err) {\n    if (err instanceof DuplicateKeyError) {\n        console.error('Email already exists');\n    }\n}\n```\n\n## Future Work\n\nThe following features are planned for post-v2.0.0 releases:\n\n### Phase 9: Aggregation Support\n- Type-safe aggregation pipeline execution\n- Support for complex MongoDB aggregation operations\n- Generic typing for input and output document types\n\n### Phase 10: Transaction Support\n- Multi-document atomic operations\n- Automatic commit/abort handling\n- **Note**: Requires MongoDB replica set configuration\n\nThese features will be added in subsequent minor or major version releases based on user demand and project priorities.\n\n## License\n\nMIT\n\n## Author\n\nDaniel Savidge\n\n## Repository\n\nhttps://github.com/dsavidge02/mongo-connector","readmeFilename":"README.md"}