{"_id":"@anysols/anysols-odm","_rev":"4-14a6e7caa9216604628fadcf8c091a86","name":"@anysols/anysols-odm","dist-tags":{"latest":"1.6.8"},"versions":{"1.6.7":{"name":"@anysols/anysols-odm","version":"1.6.7","description":"Anysols ODM (Object Document Mapper) is built for NodeJS and provides transparent persistence for JavaScript objects to MongoDB database","main":"./index.js","scripts":{"prepare":"npm run build","build":"gulp | tsc","test":"nyc mocha --recursive test/init.test.js test/unit/**/*test.js test/end.test.js","coverage":"nyc report --reporter=text-lcov | coveralls","release":"npm publish"},"keywords":["anysols","anysols odm","mongodb wrapper","object document mapper"],"nyc":{"check-coverage":false,"all":true,"extension":[".js"],"include":["lib/"],"exclude":["**/**.interface.js"],"reporter":["html","lcov","text","text-summary"],"report-dir":"docs/reports/coverage"},"repository":{"type":"git","url":"git+https://github.com/anysols/anysols-odm.git"},"author":{"name":"Shivaji Varma","email":"contact@shivajivarma.com"},"contributors":[],"license":"Apache-2.0","bugs":{"url":"https://github.com/anysols/anysols-odm/issues"},"homepage":"https://anysols.com","dependencies":{"@types/mongodb":"^3.3.4","mongodb":"^3.3.2","anysols-utils":"^0.3.7"},"devDependencies":{"chai":"^4.2.0","coveralls":"^3.0.6","del":"^5.1.0","gulp":"^4.0.2","mocha":"^6.2.0","nyc":"^14.1.1","typescript":"^3.6.2"},"gitHead":"b645bf42f2bdfc5671c65dc61aff549b185cd5d7","_id":"@anysols/anysols-odm@1.6.7","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","dist":{"integrity":"sha512-nAMO8LVM5c4GxhE9rTYG7CvMDRYSkATTkle8VhuegTc2Wojt+dGgbmeDJQPMVqgykv5dimXUYP/19IgtR0NXnw==","shasum":"212bd274848b86e9eef974de7a6ff5382da94bf2","tarball":"https://registry.npmjs.org/@anysols/anysols-odm/-/anysols-odm-1.6.7.tgz","fileCount":63,"unpackedSize":67732,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4kr0CRA9TVsSAnZWagAAnkEP/iQmCfPDYjch/MO6DYf7\njBV8WqlPWqN0lHZl3UaxuEA8zF2O0oLz22u6IVhQUUGLGLj9qgdkmKRNeydH\nsfSsEt+AUSxtQp1iLkNs7Tb2yVrOr8xDOtOOpGiCFjyHBYbHSIrX+JdIDbYi\nOqbitp+5mzO2lGM8eE1jBPBBGeW3X2t13jIZOvgwiciYiu2E9B6oX9mStaum\nS4rK33StRZFY2PSiKQMQTenB7C6UkTpJ93qPzTePFqWXjsKmd6qZ2Hc30XML\nSAcs7PHQl+dHZ6/0FWV8DWhcud3jSy3RFyaBkbe1W6nIam9L1mYGrOYEmS0/\nrbW84m6FzkErBcbsgInusfTK+mula9RlPQt9a0NklmGFBI40zcWFMxSY1jMF\nIFof9hGKhky2BSCsg+GzpyVY4sZIEgZvMcrtiOZooI8NE1mRcU9W249wzqwe\nenkbB449bBwn7vhyyfn/rBixWPlcRGzz7R0tBZ/vik+S5EOJDjrTv+BgIRRn\nKnJA5PSJ9t2+WVZ0J/mDHt87w23HmBtu3TTdGNT8YdbSoduM3kbVcV/YvXr2\nHM2OjnW21hWL+KPow+EgxUeUlqDZ/1YNfP7pQu91t7cCGvgV/gzTi1O4S16W\nPm0ql3X4OujljK+4r2vYX1vJ6FRw3wARtKQ5uvwipp5J+ow4+yOusNA5uAuX\nPJ8/\r\n=kAUf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGFfq01+WCnnyWUVdtlvk17YyKm97zy0KNo85Ou2zXs/AiEAkQA5iUfjk/CkCCYb4njA1yEl4FYhHVqIz7241dszSK0="}]},"maintainers":[{"name":"shivajivarma","email":"contact@shivajivarma.com"}],"_npmUser":{"name":"shivajivarma","email":"contact@shivajivarma.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anysols-odm_1.6.7_1575111411791_0.2292470323885416"},"_hasShrinkwrap":false,"deprecated":"this package has been deprecated"},"1.6.8":{"name":"@anysols/anysols-odm","version":"1.6.8","description":"Anysols ODM (Object Document Mapper) is built for NodeJS and provides transparent persistence for JavaScript objects to MongoDB database","main":"./index.js","scripts":{"prepare":"npm run build","build":"gulp | tsc","test":"nyc mocha --recursive test/init.test.js test/unit/**/*test.js test/end.test.js","coverage":"nyc report --reporter=text-lcov | coveralls","release":"npm publish"},"keywords":["anysols","anysols odm","mongodb wrapper","object document mapper"],"nyc":{"check-coverage":false,"all":true,"extension":[".js"],"include":["lib/"],"exclude":["**/**.interface.js"],"reporter":["html","lcov","text","text-summary"],"report-dir":"docs/reports/coverage"},"repository":{"type":"git","url":"git+https://github.com/anysols/anysols-odm.git"},"author":{"name":"Shivaji Varma","email":"contact@shivajivarma.com"},"contributors":[],"license":"Apache-2.0","bugs":{"url":"https://github.com/anysols/anysols-odm/issues"},"homepage":"https://anysols.com","dependencies":{"@types/mongodb":"^3.3.4","mongodb":"^3.3.2","anysols-utils":"^0.3.7"},"devDependencies":{"chai":"^4.2.0","coveralls":"^3.0.6","del":"^5.1.0","gulp":"^4.0.2","mocha":"^6.2.0","nyc":"^14.1.1","typescript":"^3.6.2"},"gitHead":"8b79766697bedc74b1971501d75736e73fd58086","_id":"@anysols/anysols-odm@1.6.8","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-7XniSbgWoS/4tb7sF8jc0SV8SVS0BtFRDmvmAAhXwjMtN7qeqJzeE7Nr+bAJuwilrVZdpzyrCqTq7o4f2NfW7Q==","shasum":"5dfd64b8437e61a69355f84e86f1c22210325cda","tarball":"https://registry.npmjs.org/@anysols/anysols-odm/-/anysols-odm-1.6.8.tgz","fileCount":63,"unpackedSize":67750,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd4mlUCRA9TVsSAnZWagAAF8wP/2fjbtuLkDsIv+IDFJS1\n3VcS1hCKlgZZK41Q91TvtepzLpVl661Y7LDKSeBSqdXGRxiUWYx2+9BJ9Kvg\nmdXQAz9zpoTIvsYanbgMXVIZnmZKCXBQ7R9EmmlTGaHq1114M7/1XkRbW82d\n6tA1azv0/iYmGUmp8nqKP75H/x8UQVq0DjhFCIuMIN+567T73hY3Ffm1iN1N\nSRud8Hrm1hOMtmRMWz/0Gm+HV5+RLjDYSsw1iu/8bbkGkxvCOA9TutHL6fV/\n2j7Q3p0kat9y4aMPRbVgtn/x00FSvVxdFHSEoonXvE+6iDLRFX1FwZsUngXH\nBjFhLbCglOElTEe/ClIrNIBA1UHnnfJfL79H7n/FwYYKtvHhB6GUsyDZYTJ1\n/XvcWOjsMBRmzLkKPulk1hmozOa6/eTilAzIMGA2h+26peQLi6CyUvOVgawK\nn9tqJXNijszY8AHOU63/ELaLrDRGiy+yNCj8sHN26qocThQ65k0S5bHmMM/o\nFra2H86xXBrGCb4qTRxZpOqVA9bhTDfzM16t89XQv3eDgMo09XLVOzzqp1QA\nJlZMugYNd5x0BlE39PssIGOYv1n4CB9A9BM0I7YhDpU5BAPX3Asm5lsN2dWS\ngpvYrrUnq1ZcwziaNKMRFb3yqPb2DIXjTQm9XjHFmOGWLeHZU9W/OTKZNeyh\nbp8A\r\n=2kF9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBcbdj/fHH+37GCt5KGczYDExg2S+FXH+nGDpgKehgPrAiBJL3L3bPpTngCV/CUn4hjTrDcihdlLFay0CljBL3Ycvw=="}]},"maintainers":[{"name":"shivajivarma","email":"contact@shivajivarma.com"}],"_npmUser":{"name":"shivajivarma","email":"contact@shivajivarma.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anysols-odm_1.6.8_1575119188314_0.3022273545154248"},"_hasShrinkwrap":false,"deprecated":"this package has been deprecated"}},"time":{"created":"2019-11-30T10:56:51.582Z","1.6.7":"2019-11-30T10:56:51.866Z","modified":"2022-04-04T14:27:31.227Z","1.6.8":"2019-11-30T13:06:28.512Z"},"maintainers":[{"email":"npm@npmjs.com","name":"npm"}],"description":"Anysols ODM (Object Document Mapper) is built for NodeJS and provides transparent persistence for JavaScript objects to MongoDB database","homepage":"https://anysols.com","keywords":["anysols","anysols odm","mongodb wrapper","object document mapper"],"repository":{"type":"git","url":"git+https://github.com/anysols/anysols-odm.git"},"contributors":[],"author":{"name":"Shivaji Varma","email":"contact@shivajivarma.com"},"bugs":{"url":"https://github.com/anysols/anysols-odm/issues"},"license":"Apache-2.0","readme":"# Anysols ODM\nAnysols ODM (Object Document Mapper) is built for NodeJS and provides transparent persistence for JavaScript objects to MongoDB database.\n \n Supports schemas with multi-level inheritance. Also supports interception on operations (create, read, update and delete). \n\n[![Coverage Status](https://coveralls.io/repos/github/anysols/anysols-odm/badge.svg?branch=master)](https://coveralls.io/github/anysols/anysols-odm?branch=master)\n\n```bash\nnpm install --save @anysols/anysols-odm\n```\n## Establishing database connection\n```js\nconst {AnysolsODM} = require(\"@anysols/anysols-odm\");\n\nconst anysolsODM = new AnysolsODM();\n \nconst config = {\n    \"host\": \"localhost\",\n    \"port\": \"27017\",\n    \"database\": \"anysols-collection-service\",\n    \"dialect\": \"mongodb\",\n};\n\nanysolsODM.connect(config).then(() => {\n    console.log('connection success');\n    anysolsODM.databaseExists().then(() => {\n        console.log('db exists');\n        anysolsODM.closeConnection();\n    }, () => {\n        console.log(\"db does not exists\");\n        anysolsODM.closeConnection();\n    });\n}, (err) => {\n    console.log('connection failed');\n    anysolsODM.closeConnection();\n});\n\n```\n\n## Intercepting database operations\n```js\n// after establishing connection\n\nanysolsODM.addInterceptor({\n\n    getName: function () {\n        return \"my-intercept\";\n    },\n\n    intercept: (collectionName, operation, when, payload) => {\n        return new Promise((resolve, reject) => {\n            if (collectionName === 'student') {\n                if (operation === 'CREATE') {\n                    console.log(\"[collectionName=\" + collectionName + \", operation=\" + operation + \", when=\" + when + \"]\");\n                    if (when === \"BEFORE\") {\n                        for (let record of payload.records) {\n                            console.log(\"computed field updated for :: \" + record.get('name'));\n                            record.set(\"computed\", record.get(\"name\") + \" +++ computed\");\n                        }\n                    }\n                }\n                if (operation === 'READ') {\n                    console.log(\"[collectionName=\" + collectionName + \", operation=\" + operation + \", when=\" + when + \"]\");\n                    if (when === \"AFTER\") {\n                        for (let record of payload.records)\n                            console.log(JSON.stringify(record.toObject(), null, 4));\n                    }\n                }\n            }\n            resolve(payload);\n        });\n    }\n});\n\nanysolsODM.defineCollection({\n    name: 'student',\n    fields: [{\n        name: 'name',\n        type: 'string'\n    }, {\n        name: 'computed',\n        type: 'string'\n    }]\n});\n\nlet studentCollection = anysolsODM.collection(\"student\");\nlet s = studentCollection.createNewRecord();\ns.set(\"name\", \"John \" + new Date().toISOString());\ns.insert().then(function () {\n    studentCollection.find().toArray().then(function (students) {\n        anysolsODM.closeConnection();\n    });\n});\n```\n\n## Define custom field type\n```js\n// after establishing connection\n\nanysolsODM.addFieldType({\n\n    getDataType: function (fieldDefinition) {\n        return new StringDataType({pattern: \"(.+)@(.+){2,}\\\\.(.+){2,}\"})\n    },\n\n    getType: function () {\n        return \"email\"\n    },\n\n    validateDefinition: function (fieldDefinition) {\n        return !!fieldDefinition.name\n    }\n});\n\nanysolsODM.defineCollection({\n    name: 'student',\n    fields: [{\n        name: 'name',\n        type: 'string'\n    }, {\n        name: 'email',\n        type: 'email'\n    }, {\n        name: 'dob',\n        type: 'date'\n    }]\n});\n\nlet studentCollection = anysolsODM.collection(\"student\");\nlet s = studentCollection.createNewRecord();\ns.set(\"name\", \"John\");\ns.set(\"email\", \"test@example.com\");\ns.set(\"dob\", new Date());\ns.insert().then(function () {\n    console.log(\"Student created\");\n    anysolsODM.closeConnection();\n}, (err) => {\n    console.log(err);\n    anysolsODM.closeConnection();\n});\n```\n\nCheck the examples >> [here](./examples) <<\n\n## Code of Conduct\n[Contributor Covenant](/CODE_OF_CONDUCT.md)\n\n## License\n[Apache License 2.0](/LICENSE)\n","readmeFilename":"README.md"}