{"_id":"@denis_bruns/nosql-mongodb","_rev":"2-7ded177ffa793d7415109b6b0c4ef58c","name":"@denis_bruns/nosql-mongodb","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@denis_bruns/nosql-mongodb","version":"0.1.0","keywords":["clean-architecture","typescript","mongodb","nosql"],"author":{"name":"denis_bruns@protonmail.com"},"license":"MIT","_id":"@denis_bruns/nosql-mongodb@0.1.0","maintainers":[{"name":"denis_bruns","email":"denis_bruns@protonmail.com"}],"dist":{"shasum":"cc0298359292b0104901ab94462987d84a3572d2","tarball":"https://registry.npmjs.org/@denis_bruns/nosql-mongodb/-/nosql-mongodb-0.1.0.tgz","fileCount":19,"integrity":"sha512-A2e17GLC20db4SwcxqeTbHo7sWLPJH6Eok2FbdaOy0Ho+SMx/QYhgvcRofoBDCRQ6B0XUT0aLlaEG4IKwu8dQA==","signatures":[{"sig":"MEYCIQDlIpG5bK57PVqTCILtSUKxtoH9UU/EXzwTzCJA1BRdMAIhAKTsccNhPPh8SerXXSIvRjs1U//tpeLthVY7LJ0XyoxH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33881},"main":"./dist/index.js","types":"./dist/types/index.d.ts","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"b8f8dcf66a6669453400e5a0d2f369cab65b6704","scripts":{"jest":"jest","lint":"eslint src/lib --ext .ts","test":"jest src/tests --detectOpenHandles --forceExit","build":"tsc && npm run postbuild","clean":"rimraf dist","release":"bash release.sh patch","postbuild":"cp package.json README.md dist/","release:major":"bash release.sh major","release:minor":"bash release.sh minor","release:patch":"bash release.sh patch","prepublishOnly":"npm cache clean && npm run build","release:premajor":"bash release.sh premajor","release:prepatch":"bash release.sh prepatch","release:premminor":"bash release.sh preminor","release:prerelease":"bash release.sh prerelease"},"_npmUser":{"name":"denis_bruns","email":"denis_bruns@protonmail.com"},"_npmVersion":"10.8.2","description":"> **A MongoDB service for clean architecture projects, featuring filter expressions, pagination, and safe validations.**","directories":{},"_nodeVersion":"18.20.5","dependencies":{"mongodb":"^6.12.0","@denis_bruns/core":"^0.1.0","@aws-sdk/client-dynamodb":"^3.726.1","@denis_bruns/database-core":"^0.1.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.2.5","ts-node":"^10.9.2","typescript":"^5.7.2","@types/jest":"^29.5.14"},"_npmOperationalInternal":{"tmp":"tmp/nosql-mongodb_0.1.0_1737667078007_0.8380227199127317","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@denis_bruns/nosql-mongodb","version":"0.1.1","keywords":["clean-architecture","typescript","mongodb","nosql"],"author":{"name":"denis_bruns@protonmail.com"},"license":"MIT","_id":"@denis_bruns/nosql-mongodb@0.1.1","maintainers":[{"name":"denis_bruns","email":"denis_bruns@protonmail.com"}],"dist":{"shasum":"a3a672d1af53996e953984e2e0e52bc00932dc62","tarball":"https://registry.npmjs.org/@denis_bruns/nosql-mongodb/-/nosql-mongodb-0.1.1.tgz","fileCount":19,"integrity":"sha512-s0S1KX+kkG6gfX8+KJX4/AZsZd8Mx41bOYRj5qzk8ryeawx5N2sMR/wIdHo7PmyK7vYL1PmigdHpJ3ayc9cJcQ==","signatures":[{"sig":"MEUCIGcQk0OL78ppNKraHUq8BsHyyLGDCLNDcliIR462wCigAiEAqACTFq7nzTkgJ+P9T5GUrCbiKItbym+vUCPfRhSqshM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33865},"main":"./dist/index.js","types":"./dist/types/index.d.ts","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"jest":"jest","lint":"eslint src/lib --ext .ts","test":"jest src/tests --detectOpenHandles --forceExit","build":"tsc && npm run postbuild","clean":"rimraf dist","release":"bash release.sh patch","postbuild":"cp package.json README.md dist/","release:major":"bash release.sh major","release:minor":"bash release.sh minor","release:patch":"bash release.sh patch","prepublishOnly":"npm cache clean && npm run build","release:premajor":"bash release.sh premajor","release:prepatch":"bash release.sh prepatch","release:premminor":"bash release.sh preminor","release:prerelease":"bash release.sh prerelease"},"_npmUser":{"name":"denis_bruns","email":"denis_bruns@protonmail.com"},"_npmVersion":"10.8.2","description":"> **A MongoDB service for clean architecture projects, featuring filter expressions, pagination, and safe validations.**","directories":{},"_nodeVersion":"18.20.5","dependencies":{"mongodb":"^6.12.0","@denis_bruns/core":"^0.1.0","@aws-sdk/client-dynamodb":"^3.726.1","@denis_bruns/database-core":"^0.1.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.2.5","ts-node":"^10.9.2","typescript":"^5.7.2","@types/jest":"^29.5.14"},"_npmOperationalInternal":{"tmp":"tmp/nosql-mongodb_0.1.1_1737667160801_0.7314977678431849","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@denis_bruns/nosql-mongodb","version":"0.1.2","main":"./dist/index.js","types":"./dist/types/index.d.ts","exports":{".":{"require":"./dist/index.js","import":"./dist/index.js","types":"./dist/types/index.d.ts"}},"scripts":{"build":"tsc && npm run postbuild","postbuild":"cp package.json README.md dist/","lint":"eslint src/lib --ext .ts","clean":"rimraf dist","prepublishOnly":"npm cache clean && npm run build","release":"bash release.sh patch","release:prerelease":"bash release.sh prerelease","release:minor":"bash release.sh minor","release:major":"bash release.sh major","release:patch":"bash release.sh patch","release:prepatch":"bash release.sh prepatch","release:premminor":"bash release.sh preminor","release:premajor":"bash release.sh premajor","jest":"jest","test":"jest src/tests --detectOpenHandles --forceExit"},"keywords":["clean-architecture","typescript","mongodb","nosql"],"author":{"name":"denis_bruns@protonmail.com"},"license":"MIT","dependencies":{"@aws-sdk/client-dynamodb":"^3.726.1","@denis_bruns/database-core":"^0.1.0","@denis_bruns/core":"^0.1.0","mongodb":"^6.12.0"},"devDependencies":{"@types/jest":"^29.5.14","jest":"^29.7.0","ts-jest":"^29.2.5","ts-node":"^10.9.2","typescript":"^5.7.2"},"_id":"@denis_bruns/nosql-mongodb@0.1.2","gitHead":"3b3e13ed005e42a6926fa6edde36926933dbeda2","description":"> **A MongoDB service for clean architecture projects, featuring filter expressions, pagination, and safe validations.**","_nodeVersion":"18.20.5","_npmVersion":"10.8.2","dist":{"integrity":"sha512-qc6Ox1aCG8LdtEZ9yDhehXqzVHz+K8Jf/2SC4MazMdg1W6Tl83wQgGrGicgJCO7JCv8ZGAQfK7buIzP/OwOovA==","shasum":"36ffc7e64aec0fa280844b8c3afcd917440bca5a","tarball":"https://registry.npmjs.org/@denis_bruns/nosql-mongodb/-/nosql-mongodb-0.1.2.tgz","fileCount":19,"unpackedSize":33737,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICNBnie3xihRNMX1xzXoGnSA04aRq7RxeJCKOZzs2UpoAiEArYtyB4tB7q5jFrfe9QVT3YbVQy1LwqngeD6BL8u1xlY="}]},"_npmUser":{"name":"denis_bruns","email":"denis_bruns@protonmail.com"},"directories":{},"maintainers":[{"name":"denis_bruns","email":"denis_bruns@protonmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nosql-mongodb_0.1.2_1737670119458_0.9653641329224523"},"_hasShrinkwrap":false}},"time":{"created":"2025-01-23T21:17:57.870Z","modified":"2025-01-23T22:08:39.828Z","0.1.0":"2025-01-23T21:17:58.195Z","0.1.1":"2025-01-23T21:19:21.007Z","0.1.2":"2025-01-23T22:08:39.654Z"},"author":{"name":"denis_bruns@protonmail.com"},"license":"MIT","keywords":["clean-architecture","typescript","mongodb","nosql"],"description":"> **A MongoDB service for clean architecture projects, featuring filter expressions, pagination, and safe validations.**","maintainers":[{"name":"denis_bruns","email":"denis_bruns@protonmail.com"}],"readme":"# @denis_bruns/nosql-mongodb\n\n> **A MongoDB service for clean architecture projects, featuring filter expressions, pagination, and safe validations.**\n\n[![NPM Version](https://img.shields.io/npm/v/@denis_bruns/nosql-mongodb?style=flat-square&logo=npm)](https://www.npmjs.com/package/@denis_bruns/nosql-mongodb)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0-blue?style=flat-square&logo=typescript)](https://www.typescriptlang.org/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://opensource.org/licenses/MIT)\n[![GitHub](https://img.shields.io/badge/GitHub--181717.svg?style=flat-square&logo=github)](https://github.com/h3llf1r33/nosql-mongodb)\n\n---\n\n## Overview\n\n`@denis_bruns/nosql-mongodb` provides a **MongoDB-specific** data service based on clean architecture principles. It extends [`@denis_bruns/database-core`](https://www.npmjs.com/package/@denis_bruns/database-core) to offer:\n\n- **Filter expression** construction (`MongoExpressionBuilder`), converting filters to MongoDB queries\n- **Offset-based** pagination and in-memory transformations\n- **Type-safe** mapping of `_id` to `id` for convenience\n- **Validation** utilities to mitigate NoSQL injection attempts\n- Seamless integration with MongoDB’s native `Collection` API\n\nThis library aims to simplify the **boilerplate** involved in typical CRUD or query operations on MongoDB while keeping your **business logic** clean and testable.\n\n---\n\n## Key Features\n\n1. **MongoDB-Specific Expression Builder**\n    - Converts common filter queries (`IFilterQuery`) into a structured MongoDB `conditions` object.\n    - Supports operators like `<`, `<=`, `>`, `>=`, `=`, `!=`, `in`, `not in`, `like`, and `not like`.\n\n2. **Pagination & Sorting**\n    - Applies `limit`, `skip` (offset), and `sort` automatically based on your query.\n    - Offers page-based and offset-based pagination in one approach.\n\n3. **Type-Safe Results**\n    - Converts Mongo’s `_id` to a string `id`, enabling a more consistent domain model.\n    - Allows further overrides of `processResults` for custom transformations if desired.\n\n4. **Built-in Validation**\n    - Ensures safe field names and values (`validateValue`) to help guard against potential injection patterns.\n    - Checks pagination parameters (`validatePagination`) to confirm integer inputs.\n\n5. **Extensible Architecture**\n    - Extends the `BaseDatabaseService` so you can override or customize query building, error handling, or result processing.\n\n---\n\n## Installation\n\nWith **npm**:\n\n```bash\nnpm install @denis_bruns/nosql-mongodb\n```\n\nOr with **yarn**:\n\n```bash\nyarn add @denis_bruns/nosql-mongodb\n```\n\nYou’ll also need **MongoDB** types and driver:\n\n```bash\nnpm install mongodb\n```\n\n---\n\n## Basic Usage\n\nBelow is a **simple** usage example. In a real-world application, you might integrate this into a domain-specific repository or service layer.\n\n```ts\nimport { MongoClient } from \"mongodb\";\nimport { fetchWithFiltersAndPaginationMongoDb, MongoDBService } from \"@denis_bruns/nosql-mongodb\";\nimport { IGenericFilterQuery } from \"@denis_bruns/core\";\n\ninterface User {\n  id: string;\n  name: string;\n  email: string;\n}\n\nasync function example() {\n  // 1) Connect to MongoDB\n  const client = new MongoClient(\"mongodb://localhost:27017\");\n  await client.connect();\n  const collection = client.db(\"my-database\").collection(\"users\");\n\n  // 2) Build a filter query\n  const query: IGenericFilterQuery = {\n    filters: [\n      { field: \"email\", operator: \"=\", value: \"test@example.com\" }\n    ],\n    pagination: { page: 1, limit: 5, sortBy: \"name\" }\n  };\n\n  // 3) Option A: Direct Helper Function\n  const directResult = await fetchWithFiltersAndPaginationMongoDb<User>(\n    \"users\", // tableName\n    query,\n    collection\n  );\n  console.log(\"Direct Helper:\", directResult.data);\n\n  // 4) Option B: MongoDBService instance\n  const service = new MongoDBService(\"users\");\n  const serviceResult = await service.fetchWithFiltersAndPagination<User>(query, collection);\n  console.log(\"Service Class:\", serviceResult.data);\n\n  client.close();\n}\n\nexample().catch((err) => console.error(\"Mongo Example Error:\", err));\n```\n\nIn this snippet:\n- **`fetchWithFiltersAndPaginationMongoDb`** is a quick helper if you just need a one-off query.\n- **`MongoDBService`** allows for deeper customization or extension in your codebase.\n\n---\n\n## Core Concepts\n\n1. **Filter Expressions**  \n   Each filter has `field`, `operator`, and `value`. Operators like `\"in\"`, `\"not in\"`, `\"like\"`, and `\"not like\"` are mapped to Mongo’s `$in`, `$nin`, `$regex`, and `$not` respectively.\n   ```ts\n   filters: [\n     { field: \"status\", operator: \"=\", value: \"active\" },\n     { field: \"name\", operator: \"like\", value: \"john\" }\n   ];\n   ```\n2. **Pagination**\n    - `page`, `limit`, `offset` are all supported.\n    - `sortBy` and `sortDirection` let you sort on a specific field in ascending or descending order.\n\n3. **Validation**\n    - `validateValue` checks for suspicious patterns in strings or objects (to reduce injection attacks).\n    - `validatePagination` ensures `page`, `limit`, and `offset` are valid integers.\n\n4. **ID Mapping**\n    - If your filters or results use `\"id\"`, it’s automatically mapped to or from `_id` so you can keep a consistent domain model.\n\n---\n\n## Related Packages\n\n- **@denis_bruns/core**  \n  [![NPM](https://img.shields.io/npm/v/@denis_bruns/core?style=flat-square&logo=npm)](https://www.npmjs.com/package/@denis_bruns/core)  \n  [![GitHub](https://img.shields.io/badge/GitHub--181717.svg?style=flat-square&logo=github)](https://github.com/h3llf1r33/core)  \n  *Contains the fundamental interfaces and types used in this library (e.g., `IFilterQuery`, `IGenericFilterQuery`, etc.).*\n\n- **@denis_bruns/database-core**  \n  [![NPM](https://img.shields.io/npm/v/@denis_bruns/database-core?style=flat-square&logo=npm)](https://www.npmjs.com/package/@denis_bruns/database-core)  \n  [![GitHub](https://img.shields.io/badge/GitHub--181717.svg?style=flat-square&logo=github)](https://github.com/h3llf1r33/database-core)  \n  *The abstract service this library extends to handle common database logic, such as error handling and pagination utilities.*\n\n---\n\n## Contributing\n\nContributions, bug reports, and feature requests are welcome! Please feel free to open an issue or submit a pull request on [GitHub](https://github.com/h3llf1r33/nosql-mongodb).\n\n---\n\n## License\n\nThis project is [MIT licensed](LICENSE).\n\n---\n\n<p align=\"center\">\n  Built with ❤️ by <a href=\"https://github.com/h3llf1r33\">h3llf1r33</a>\n</p>","readmeFilename":"README.md"}