{"_id":"@dariuszp/apollo-datasource-mongoose","_rev":"2-861acc213d48cfdee2c716f5f31f47c8","name":"@dariuszp/apollo-datasource-mongoose","dist-tags":{"latest":"0.1.4"},"versions":{"0.1.2":{"name":"@dariuszp/apollo-datasource-mongoose","version":"0.1.2","author":{"name":"Dariusz Półtorak","email":"poltorak.dariusz@madmanlabs.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/madman-labs/apollo-datasource-mongoose.git"},"homepage":"https://github.com/madman-labs/apollo-datasource-mongoose#readme","bugs":{"url":"https://github.com/madman-labs/apollo-datasource-mongoose/issues"},"scripts":{"build":"tsc","dev":"tsc --watch","test":"jest --silent=false"},"keywords":["apollo","data-source","datasource","mongoose","mongodb"],"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=14.0"},"dependencies":{"apollo-datasource":"^3.3.1","apollo-server-caching":"^3.3.0","apollo-server-errors":"^3.3.1","apollo-server-types":"^3.6.0"},"peerDependencies":{"graphql":"^15.3.0 || ^16.0.0","mongoose":"^6.3.0"},"devDependencies":{"@sinonjs/fake-timers":"^9.1.2","@types/jest":"^28.1.1","@types/node":"^17.0.42","graphql":"^16.5.0","jest":"^28.1.1","mongoose":"*","ts-jest":"^28.0.4","ts-node":"^10.8.1","tslint":"^6.1.3","typescript":"^4.7.3"},"description":"Mongoose data source for Apollo server","directories":{"example":"example"},"gitHead":"c511b1c7e247502ad54047a829064f4544e60371","_id":"@dariuszp/apollo-datasource-mongoose@0.1.2","_nodeVersion":"18.2.0","_npmVersion":"8.12.1","dist":{"integrity":"sha512-ZFJ+WqfKWBMdUErSAncrdRq/6EB+D0tj0oXRF8kMTfXaaPgiqZ49pGCySDr29eG4ZpS0E/E5G+SuiLQwxsdvHg==","shasum":"f5502ce838ad930b42c3fad4943df96eb8f886c3","tarball":"https://registry.npmjs.org/@dariuszp/apollo-datasource-mongoose/-/apollo-datasource-mongoose-0.1.2.tgz","fileCount":14,"unpackedSize":26962,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJO2BG8bpIaZOEnGdzkFcThQGhVfNvBpijk6CjHPDpygIgUGQq7B8Yji2IIQEU73Ecf8qlL0eFVhs1fk1Oy715T8M="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJipgffACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrCcxAAjqgmKvUSrRuY/QyioIjmJdpeuk1WATLWCwrgmjiTtuR4P5su\r\n9t5bNwGZV4mBnLhj0EvIUSEBN7J3pt383BbyQge9gLjRriP1mstM0TTl2Ngj\r\n+P32ceHV0l1Z3k2KcEGwz8U7CpzPNAHCTsxYtgPM8JmBC9cw0flXAi6XEdv1\r\nOFFkQTCSrWHSHeoJ18o8hl/uQtIN/iMMtiMejA6DHh+7816ut+2iWMvhhgfP\r\n7i9miFxpP0lvx6WGReER7F9BqpJs82vuKszE57ITmCZknw/ULzE4gseH7Zf7\r\nF4EU8ZHa8k6H8vdYEF0aC0VQHIrMbssJygw/qPtBFiP/YyBwUZYgyBie96b7\r\nT5l9MtwJRslTEjzXhFJns5lqi/wsaPaMgcwwtq9QXSgqXsvLApEqN7arNF3p\r\nERPB/FFRsR7X9+bFN55QUQCsTLqzrIToUz+L/kHjMq2kXS7VD8430EG7JW8f\r\nNpNtzYGiaZWXQjhly/kKgKhcOAGtO9QtMy5IC9rwy8kKwUf9ZiEuO8TSu3e9\r\ntZekqorp0NIAmn7N7CFF7J3MmDMZHyAHIOuSlxJKSAwKjWFIn/AOqyDSQ7K6\r\nUD8NCT1dDJclFvp9nozOXNXfWUFnBEV99TaeC7F7pm08cEfWxypyI262P6B8\r\njRKKc3uU04R5b6W+0NlOk7VOslcw6aNT/8k=\r\n=dzey\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"dariuszp","email":"poltorak.dariusz@madmanlabs.com"},"maintainers":[{"name":"dariuszp","email":"poltorak.dariusz@madmanlabs.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/apollo-datasource-mongoose_0.1.2_1655048159022_0.6334951101393669"},"_hasShrinkwrap":false},"0.1.3":{"name":"@dariuszp/apollo-datasource-mongoose","version":"0.1.3","author":{"name":"Dariusz Półtorak","email":"poltorak.dariusz@madmanlabs.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/madman-labs/apollo-datasource-mongoose.git"},"homepage":"https://github.com/madman-labs/apollo-datasource-mongoose#readme","bugs":{"url":"https://github.com/madman-labs/apollo-datasource-mongoose/issues"},"scripts":{"build":"tsc","dev":"tsc --watch","test":"jest --silent=false"},"keywords":["apollo","data-source","datasource","mongoose","mongodb"],"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=14.0"},"dependencies":{"apollo-datasource":"^3.3.1","apollo-server-caching":"^3.3.0","apollo-server-errors":"^3.3.1","apollo-server-types":"^3.6.0"},"peerDependencies":{"graphql":"^15.3.0 || ^16.0.0","mongoose":"^6.3.0"},"devDependencies":{"@sinonjs/fake-timers":"^9.1.2","@types/jest":"^28.1.1","@types/node":"^17.0.42","graphql":"^16.5.0","jest":"^28.1.1","mongoose":"*","ts-jest":"^28.0.4","ts-node":"^10.8.1","tslint":"^6.1.3","typescript":"^4.7.3"},"description":"Mongoose data source for Apollo server","directories":{"example":"example"},"gitHead":"b5ffb68a16a734b683da21699ce6070d0424a2f8","_id":"@dariuszp/apollo-datasource-mongoose@0.1.3","_nodeVersion":"18.2.0","_npmVersion":"8.12.1","dist":{"integrity":"sha512-gUU6B0EV7nL7amd+U3DE1dWS/JzyGJjNb1v0Ga+Z4YD4ZwrKAD1zx87h8JgnvJgcWtdMPbRi+UDLs4JnepiSWA==","shasum":"bd81e0d29f8c68e972fb8c649ad17c4c86e22e42","tarball":"https://registry.npmjs.org/@dariuszp/apollo-datasource-mongoose/-/apollo-datasource-mongoose-0.1.3.tgz","fileCount":14,"unpackedSize":26954,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtlx7vCmi/Nm4er9RZUzN6XB2X11R2tXA/VGUKj2IdbgIhAJxIgkbUHdBP+Rbiyowweh9zicG3mbV7/jIshi7YBasD"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJipgjsACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrRvw//QiHDid831CIkXBFAGSxc9+1qVwfHDitJLwPG1DP7f4nObTv2\r\nMmWDoEk682l6PfnBiaAGgvoOacSOyQc42ZHaLOOCehBYL83FtMvdOswan3X1\r\n2bYJ1LFOuPOoZH/prHki651EDwAqaG0kfDdBLRfQZuDhXWJsIaVeUDf+cuGs\r\n5pjI6ftpBOA4t4R58tLCo2X+KRLd5tNO16sBpnY5SViyhhseWCSsiAlkkTIr\r\nyAlQS/15YKNrI4Y5vTYGddRSc304qcFwglTVaM87L55/wuGC6PwAwN5FvKxX\r\n7fa05c9gu179nc59gEsuQDlX9Kn0v3EXjqdORJY7ZeRPzu5NkYVsHFQvWXOv\r\nb5dB/XbreqONGloiPscAQF+n0QRMxBlR1ZJwFwwfucE+b0pLcj72yg1Y3k5z\r\nzH2fB5z9oc6yiw06cuud8izg5XkBBhIHBIQ/jrcs6fbCt4KiNIFWVsF5s5EV\r\nKPIKxsK5H0UwjJaLNvGNigIsCNuJp/3uF2Qtz8j9jPbQZyYiq7h9nw9MsTPb\r\nOiSFVYTg2VEurzRQ1LdRE/GEFK0AeaiyJf+9Tkm9+aPdopItLj4HGzDPuwzQ\r\nVQqoPgJyv8OTHgWit5uJOPJicPUtTHWdX6vZj1BuI3UPN8DUMZkBtwF1aGz7\r\nhLIradLaLKfoVx1sCYddPwroD7r57zLnNBg=\r\n=QgxN\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"dariuszp","email":"poltorak.dariusz@madmanlabs.com"},"maintainers":[{"name":"dariuszp","email":"poltorak.dariusz@madmanlabs.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/apollo-datasource-mongoose_0.1.3_1655048428575_0.20371540031738"},"_hasShrinkwrap":false},"0.1.4":{"name":"@dariuszp/apollo-datasource-mongoose","version":"0.1.4","author":{"name":"Dariusz Półtorak","email":"poltorak.dariusz@madmanlabs.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/madman-labs/apollo-datasource-mongoose.git"},"homepage":"https://github.com/madman-labs/apollo-datasource-mongoose#readme","bugs":{"url":"https://github.com/madman-labs/apollo-datasource-mongoose/issues"},"scripts":{"build":"tsc","dev":"tsc --watch","test":"jest --silent=false"},"keywords":["apollo","data-source","datasource","mongoose","mongodb"],"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=14.0"},"dependencies":{"apollo-datasource":"^3.3.1","apollo-server-caching":"^3.3.0","apollo-server-errors":"^3.3.1","apollo-server-types":"^3.6.0"},"peerDependencies":{"graphql":"^15.3.0 || ^16.0.0","mongoose":"^6.3.0"},"devDependencies":{"@sinonjs/fake-timers":"^9.1.2","@types/jest":"^28.1.1","@types/node":"^17.0.42","graphql":"^16.5.0","jest":"^28.1.1","mongoose":"*","ts-jest":"^28.0.4","ts-node":"^10.8.1","tslint":"^6.1.3","typescript":"^4.7.3"},"description":"Mongoose data source for Apollo server","directories":{"examples":"examples"},"gitHead":"8a608292ea82eddefbb2b2414647e918cc0f3a67","_id":"@dariuszp/apollo-datasource-mongoose@0.1.4","_nodeVersion":"18.2.0","_npmVersion":"8.12.1","dist":{"integrity":"sha512-y/3gMIKxtaw6AInDCQtS/TU8S8fEqoOiqfzIbgQNB8jsNOgppghqgzYWF05vT5SqsZXbvimFfDndW8AnSj1hjw==","shasum":"5c875d1d35656a7472f9f28dc997b22b7889b010","tarball":"https://registry.npmjs.org/@dariuszp/apollo-datasource-mongoose/-/apollo-datasource-mongoose-0.1.4.tgz","fileCount":14,"unpackedSize":28727,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPItw/UVzRDzhTO+rL4SMqauglNFqps1F2fOeRYaPhcwIhAORdiKHXylv1JSR4UIeUbis5l/1xO42PNxzFAlGdPumg"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJipkloACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrYVQ//TRZ5g5zW078Q3lLReB8IO4u9pbsKcCmmrufTTJePgzRvnwk2\r\nWVXjrqdgXpuM2Gh++n013nzStn13BMy07zQz4DoaorI0/RBaCw+HLCdz0Asr\r\nZK3JcOwfUhsMqR0K0iVKlErUUPw1tnMD88jBSgzOHuLjHs+OefOxEqUGk1bz\r\nvtoZ+K2FSbLLIKJEBvFiqFjGDUmjG4vG0jbRa0+dFJ7CGWjRPmmIfFztzFNX\r\nacPbRoB+gRpkwI+S/hpUdaeHQ1UPEHUubFCQ7DNSEofeQsmnsHE47jYzv+Zm\r\n9g7phO3OcxIvnUroYrAVSAKMWeMSjJEq3ZeEC0yL4R8M+NSDepca8eIIglLA\r\nDgkCd2yCyYIFpeXLEn1c4iey+9US9+wi2dvnSo6ve+OgzTLD53UbSUqr1L94\r\nzEytVcFqC3igcuLpZWmaSbFcI0vEJFjcCwU5yjCFZlNKFZWkDdmMbNP5/4ip\r\nP78jYUASmeABy6XjiKHWSF00WKFnlHNVs4K3f5xgpxhhNu1Hz+cCOrqQDnrP\r\nmxlehLdGdBJM5zD3VMJH7paSeCohKGY7I8djpcvI8shvZwS1AqGAekaHzwxe\r\n1zIr7gEL3rGqGNUNl76uncYc3c5R5gAmOQ6Pp5g4eLp/Oioi4tyyrTLFHhfQ\r\nuXo/4g6HlyWh772h3Wgu0BbR07IQSPmD+2U=\r\n=Cy2j\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"dariuszp","email":"poltorak.dariusz@madmanlabs.com"},"maintainers":[{"name":"dariuszp","email":"poltorak.dariusz@madmanlabs.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/apollo-datasource-mongoose_0.1.4_1655064936491_0.12435471016719712"},"_hasShrinkwrap":false}},"time":{"created":"2022-06-12T15:35:58.954Z","0.1.2":"2022-06-12T15:35:59.180Z","modified":"2022-06-12T20:15:36.708Z","0.1.3":"2022-06-12T15:40:28.703Z","0.1.4":"2022-06-12T20:15:36.635Z"},"maintainers":[{"name":"dariuszp","email":"poltorak.dariusz@madmanlabs.com"}],"description":"Mongoose data source for Apollo server","homepage":"https://github.com/madman-labs/apollo-datasource-mongoose#readme","keywords":["apollo","data-source","datasource","mongoose","mongodb"],"repository":{"type":"git","url":"git+https://github.com/madman-labs/apollo-datasource-mongoose.git"},"author":{"name":"Dariusz Półtorak","email":"poltorak.dariusz@madmanlabs.com"},"bugs":{"url":"https://github.com/madman-labs/apollo-datasource-mongoose/issues"},"license":"MIT","readme":"# apollo-datasource-mongoose\r\n\r\n![CI](https://github.com/madman-labs/apollo-datasource-mongoose/actions/workflows/ci.yml/badge.svg?branch=main)\r\n\r\n---\r\n\r\n> :warning: **I just started this project.** It's still in early developmen phase\r\n\r\n## TODO\r\n\r\n- [x] .find() and .findById() with basic parameters\r\n- [x] auto population of the fields\r\n- [x] Basic tests using active mongodb\r\n- [ ] Mocking mongodb in tests so I can drop dependency on mongodb database\r\n- [ ] Tests on a live projects to look for any issues\r\n- [x] Cache implementation\r\n- [ ] Implement mongoose hooks to track cached items\r\n\r\n## Installation\r\n\r\n```\r\nnpm install @dariuszp/apollo-datasource-mongoose\r\n```\r\n\r\n## Usage\r\n\r\n```\r\nimport mongoose, {Schema} from 'mongoose';\r\nimport {MongooseDataSource} from '@dariuszp/apollo-datasource-mongoose';\r\n\r\ninterface CatInterface {\r\n    name: string;\r\n}\r\n\r\nconst Cat = mongoose.model<CatInterface>('Cat', new Schema<CatInterface>({\r\n    name: { type: \"String\" }\r\n}));\r\n\r\nexport const dataSources = () => {\r\n    return {\r\n        cats: new MongooseDataSource<CatInterface>(Cat),\r\n    };\r\n};\r\n```\r\n\r\nCreating your own data source using inheritance:\r\n\r\n```\r\nimport mongoose, {Schema} from 'mongoose';\r\nimport {MongooseDataSource} from '@dariuszp/apollo-datasource-mongoose';\r\n\r\ninterface CatInterface {\r\n    name: string;\r\n}\r\n\r\nconst Cat = mongoose.model<CatInterface>('Cat', new Schema<CatInterface>({\r\n    name: { type: \"String\" }\r\n}));\r\n\r\nclass CatDataSource extends MongooseDataSource<CatInterface> {\r\n    findByName(name: string) {\r\n        return this.model.find({ name });\r\n    }\r\n}\r\n\r\nexport const dataSources = () => {\r\n    return {\r\n        cats: new CatDataSource(Cat),\r\n    };\r\n};\r\n```\r\n\r\n## Cache\r\n\r\nFollowing previous example, you can take advantage of implemented cache. \r\nRight now I'm simply caching queries without tracking individual documents.\r\nThere is a plan to track individual documents using and updating them in cache in the future.\r\n\r\nYou can take advantage of **this.cache()** method. Pass mongoose query to it and data source will try to create a cache for it.\r\n\r\nYou can also use cache directly by calling **this.keyValueCache**\r\n\r\n```\r\nimport mongoose, {Schema} from 'mongoose';\r\nimport {MongooseDataSource} from '@dariuszp/apollo-datasource-mongoose';\r\nimport {InMemoryLRUCache} from \"apollo-server-caching\";\r\n\r\ninterface CatInterface {\r\n    name: string;\r\n}\r\n\r\nconst Cat = mongoose.model<CatInterface>('Cat', new Schema<CatInterface>({\r\n    name: { type: \"String\" }\r\n}));\r\n\r\nclass CatDataSource extends MongooseDataSource<CatInterface> {\r\n    findByName(name: string) {\r\n        return this.find({ name });\r\n    }\r\n\r\n    findCatsStartingWithLetterC() {\r\n        const query = this.model.find({\r\n            name: {\r\n                $regex: /^c.*/i\r\n            }\r\n        });\r\n        // Using simply build-in cache method that cache using query\r\n        return this.cache(query);\r\n    }\r\n\r\n    findByIdWithCustomCache(id: string): Promise<CatInterface | null> {\r\n        return new Promise<CatInterface | null>(async (resolve, reject) => {\r\n            try {\r\n                // Querying cache using document id\r\n                const cached = await this.keyValueCache!.get(id) as CatInterface | undefined;\r\n                if (cached) {\r\n                    resolve(cached);\r\n                } else {\r\n                    const item = await this.model.findById(id);\r\n                    if (!item) {\r\n                        resolve(null);\r\n                    } else {\r\n                        // Saving in cache object using document id\r\n                        await this.keyValueCache!.set(item.id, item.toObject());\r\n                        resolve(item.toObject());\r\n                    }\r\n                }\r\n            } catch (e) {\r\n                reject(e);\r\n            }\r\n        });\r\n    }\r\n}\r\n\r\nexport const dataSources = () => {\r\n    return {\r\n        cats: new CatDataSource(Cat, {\r\n            cache: new InMemoryLRUCache(),\r\n            cacheOptions: {\r\n                ttl: 5 // Cache queries for 5s\r\n            }\r\n        }),\r\n    };\r\n};\r\n```","readmeFilename":"README.md"}