├── .gitignore ├── .gitpod.yml ├── README.md ├── myApp.js ├── package-lock.json ├── package.json ├── sample.env ├── server.js └── views └── index.html /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | node_modules -------------------------------------------------------------------------------- /.gitpod.yml: -------------------------------------------------------------------------------- 1 | image: gitpod/workspace-node-lts 2 | 3 | ports: 4 | - port: 3000 5 | onOpen: open-preview 6 | visibility: public 7 | 8 | tasks: 9 | - init: npm install 10 | command: npm run start 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MongoDB and Mongoose Challenges 2 | 3 | This is the boilerplate for the MongoDB and Mongoose lessons. Instructions for completing these lessons start at https://www.freecodecamp.org/learn/apis-and-microservices/mongodb-and-mongoose/ 4 | -------------------------------------------------------------------------------- /myApp.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config(); 2 | 3 | 4 | let Person; 5 | 6 | const createAndSavePerson = (done) => { 7 | done(null /*, data*/); 8 | }; 9 | 10 | const createManyPeople = (arrayOfPeople, done) => { 11 | done(null /*, data*/); 12 | }; 13 | 14 | const findPeopleByName = (personName, done) => { 15 | done(null /*, data*/); 16 | }; 17 | 18 | const findOneByFood = (food, done) => { 19 | done(null /*, data*/); 20 | }; 21 | 22 | const findPersonById = (personId, done) => { 23 | done(null /*, data*/); 24 | }; 25 | 26 | const findEditThenSave = (personId, done) => { 27 | const foodToAdd = "hamburger"; 28 | 29 | done(null /*, data*/); 30 | }; 31 | 32 | const findAndUpdate = (personName, done) => { 33 | const ageToSet = 20; 34 | 35 | done(null /*, data*/); 36 | }; 37 | 38 | const removeById = (personId, done) => { 39 | done(null /*, data*/); 40 | }; 41 | 42 | const removeManyPeople = (done) => { 43 | const nameToRemove = "Mary"; 44 | 45 | done(null /*, data*/); 46 | }; 47 | 48 | const queryChain = (done) => { 49 | const foodToSearch = "burrito"; 50 | 51 | done(null /*, data*/); 52 | }; 53 | 54 | /** **Well Done !!** 55 | /* You completed these challenges, let's go celebrate ! 56 | */ 57 | 58 | //----- **DO NOT EDIT BELOW THIS LINE** ---------------------------------- 59 | 60 | exports.PersonModel = Person; 61 | exports.createAndSavePerson = createAndSavePerson; 62 | exports.findPeopleByName = findPeopleByName; 63 | exports.findOneByFood = findOneByFood; 64 | exports.findPersonById = findPersonById; 65 | exports.findEditThenSave = findEditThenSave; 66 | exports.findAndUpdate = findAndUpdate; 67 | exports.createManyPeople = createManyPeople; 68 | exports.removeById = removeById; 69 | exports.removeManyPeople = removeManyPeople; 70 | exports.queryChain = queryChain; 71 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fcc-mongo-mongoose-challenges", 3 | "version": "0.0.1", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "fcc-mongo-mongoose-challenges", 9 | "version": "0.0.1", 10 | "license": "MIT", 11 | "dependencies": { 12 | "body-parser": "^1.15.2", 13 | "dotenv": "^8.2.0", 14 | "express": "^4.12.4", 15 | "mongoose": "^5.11.15" 16 | } 17 | }, 18 | "node_modules/@types/bson": { 19 | "version": "4.0.5", 20 | "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.5.tgz", 21 | "integrity": "sha512-vVLwMUqhYJSQ/WKcE60eFqcyuWse5fGH+NMAXHuKrUAPoryq3ATxk5o4bgYNtg5aOM4APVg7Hnb3ASqUYG0PKg==", 22 | "dependencies": { 23 | "@types/node": "*" 24 | } 25 | }, 26 | "node_modules/@types/mongodb": { 27 | "version": "3.6.20", 28 | "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.20.tgz", 29 | "integrity": "sha512-WcdpPJCakFzcWWD9juKoZbRtQxKIMYF/JIAM4JrNHrMcnJL6/a2NWjXxW7fo9hxboxxkg+icff8d7+WIEvKgYQ==", 30 | "dependencies": { 31 | "@types/bson": "*", 32 | "@types/node": "*" 33 | } 34 | }, 35 | "node_modules/@types/node": { 36 | "version": "18.6.3", 37 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz", 38 | "integrity": "sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==" 39 | }, 40 | "node_modules/accepts": { 41 | "version": "1.3.8", 42 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 43 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 44 | "dependencies": { 45 | "mime-types": "~2.1.34", 46 | "negotiator": "0.6.3" 47 | }, 48 | "engines": { 49 | "node": ">= 0.6" 50 | } 51 | }, 52 | "node_modules/array-flatten": { 53 | "version": "1.1.1", 54 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 55 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 56 | }, 57 | "node_modules/bl": { 58 | "version": "2.2.1", 59 | "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", 60 | "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", 61 | "dependencies": { 62 | "readable-stream": "^2.3.5", 63 | "safe-buffer": "^5.1.1" 64 | } 65 | }, 66 | "node_modules/bluebird": { 67 | "version": "3.5.1", 68 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", 69 | "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" 70 | }, 71 | "node_modules/body-parser": { 72 | "version": "1.20.0", 73 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", 74 | "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", 75 | "dependencies": { 76 | "bytes": "3.1.2", 77 | "content-type": "~1.0.4", 78 | "debug": "2.6.9", 79 | "depd": "2.0.0", 80 | "destroy": "1.2.0", 81 | "http-errors": "2.0.0", 82 | "iconv-lite": "0.4.24", 83 | "on-finished": "2.4.1", 84 | "qs": "6.10.3", 85 | "raw-body": "2.5.1", 86 | "type-is": "~1.6.18", 87 | "unpipe": "1.0.0" 88 | }, 89 | "engines": { 90 | "node": ">= 0.8", 91 | "npm": "1.2.8000 || >= 1.4.16" 92 | } 93 | }, 94 | "node_modules/bson": { 95 | "version": "1.1.6", 96 | "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", 97 | "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==", 98 | "engines": { 99 | "node": ">=0.6.19" 100 | } 101 | }, 102 | "node_modules/bytes": { 103 | "version": "3.1.2", 104 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 105 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 106 | "engines": { 107 | "node": ">= 0.8" 108 | } 109 | }, 110 | "node_modules/call-bind": { 111 | "version": "1.0.2", 112 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 113 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 114 | "dependencies": { 115 | "function-bind": "^1.1.1", 116 | "get-intrinsic": "^1.0.2" 117 | }, 118 | "funding": { 119 | "url": "https://github.com/sponsors/ljharb" 120 | } 121 | }, 122 | "node_modules/content-disposition": { 123 | "version": "0.5.4", 124 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 125 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 126 | "dependencies": { 127 | "safe-buffer": "5.2.1" 128 | }, 129 | "engines": { 130 | "node": ">= 0.6" 131 | } 132 | }, 133 | "node_modules/content-type": { 134 | "version": "1.0.4", 135 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 136 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", 137 | "engines": { 138 | "node": ">= 0.6" 139 | } 140 | }, 141 | "node_modules/cookie": { 142 | "version": "0.5.0", 143 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 144 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 145 | "engines": { 146 | "node": ">= 0.6" 147 | } 148 | }, 149 | "node_modules/cookie-signature": { 150 | "version": "1.0.6", 151 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 152 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 153 | }, 154 | "node_modules/core-util-is": { 155 | "version": "1.0.3", 156 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 157 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 158 | }, 159 | "node_modules/debug": { 160 | "version": "2.6.9", 161 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 162 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 163 | "dependencies": { 164 | "ms": "2.0.0" 165 | } 166 | }, 167 | "node_modules/denque": { 168 | "version": "1.5.1", 169 | "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", 170 | "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", 171 | "engines": { 172 | "node": ">=0.10" 173 | } 174 | }, 175 | "node_modules/depd": { 176 | "version": "2.0.0", 177 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 178 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 179 | "engines": { 180 | "node": ">= 0.8" 181 | } 182 | }, 183 | "node_modules/destroy": { 184 | "version": "1.2.0", 185 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 186 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 187 | "engines": { 188 | "node": ">= 0.8", 189 | "npm": "1.2.8000 || >= 1.4.16" 190 | } 191 | }, 192 | "node_modules/dotenv": { 193 | "version": "8.6.0", 194 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", 195 | "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", 196 | "engines": { 197 | "node": ">=10" 198 | } 199 | }, 200 | "node_modules/ee-first": { 201 | "version": "1.1.1", 202 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 203 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 204 | }, 205 | "node_modules/encodeurl": { 206 | "version": "1.0.2", 207 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 208 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 209 | "engines": { 210 | "node": ">= 0.8" 211 | } 212 | }, 213 | "node_modules/escape-html": { 214 | "version": "1.0.3", 215 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 216 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 217 | }, 218 | "node_modules/etag": { 219 | "version": "1.8.1", 220 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 221 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 222 | "engines": { 223 | "node": ">= 0.6" 224 | } 225 | }, 226 | "node_modules/express": { 227 | "version": "4.18.1", 228 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", 229 | "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", 230 | "dependencies": { 231 | "accepts": "~1.3.8", 232 | "array-flatten": "1.1.1", 233 | "body-parser": "1.20.0", 234 | "content-disposition": "0.5.4", 235 | "content-type": "~1.0.4", 236 | "cookie": "0.5.0", 237 | "cookie-signature": "1.0.6", 238 | "debug": "2.6.9", 239 | "depd": "2.0.0", 240 | "encodeurl": "~1.0.2", 241 | "escape-html": "~1.0.3", 242 | "etag": "~1.8.1", 243 | "finalhandler": "1.2.0", 244 | "fresh": "0.5.2", 245 | "http-errors": "2.0.0", 246 | "merge-descriptors": "1.0.1", 247 | "methods": "~1.1.2", 248 | "on-finished": "2.4.1", 249 | "parseurl": "~1.3.3", 250 | "path-to-regexp": "0.1.7", 251 | "proxy-addr": "~2.0.7", 252 | "qs": "6.10.3", 253 | "range-parser": "~1.2.1", 254 | "safe-buffer": "5.2.1", 255 | "send": "0.18.0", 256 | "serve-static": "1.15.0", 257 | "setprototypeof": "1.2.0", 258 | "statuses": "2.0.1", 259 | "type-is": "~1.6.18", 260 | "utils-merge": "1.0.1", 261 | "vary": "~1.1.2" 262 | }, 263 | "engines": { 264 | "node": ">= 0.10.0" 265 | } 266 | }, 267 | "node_modules/finalhandler": { 268 | "version": "1.2.0", 269 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 270 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 271 | "dependencies": { 272 | "debug": "2.6.9", 273 | "encodeurl": "~1.0.2", 274 | "escape-html": "~1.0.3", 275 | "on-finished": "2.4.1", 276 | "parseurl": "~1.3.3", 277 | "statuses": "2.0.1", 278 | "unpipe": "~1.0.0" 279 | }, 280 | "engines": { 281 | "node": ">= 0.8" 282 | } 283 | }, 284 | "node_modules/forwarded": { 285 | "version": "0.2.0", 286 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 287 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 288 | "engines": { 289 | "node": ">= 0.6" 290 | } 291 | }, 292 | "node_modules/fresh": { 293 | "version": "0.5.2", 294 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 295 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 296 | "engines": { 297 | "node": ">= 0.6" 298 | } 299 | }, 300 | "node_modules/function-bind": { 301 | "version": "1.1.1", 302 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 303 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 304 | }, 305 | "node_modules/get-intrinsic": { 306 | "version": "1.1.2", 307 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", 308 | "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", 309 | "dependencies": { 310 | "function-bind": "^1.1.1", 311 | "has": "^1.0.3", 312 | "has-symbols": "^1.0.3" 313 | }, 314 | "funding": { 315 | "url": "https://github.com/sponsors/ljharb" 316 | } 317 | }, 318 | "node_modules/has": { 319 | "version": "1.0.3", 320 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 321 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 322 | "dependencies": { 323 | "function-bind": "^1.1.1" 324 | }, 325 | "engines": { 326 | "node": ">= 0.4.0" 327 | } 328 | }, 329 | "node_modules/has-symbols": { 330 | "version": "1.0.3", 331 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 332 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 333 | "engines": { 334 | "node": ">= 0.4" 335 | }, 336 | "funding": { 337 | "url": "https://github.com/sponsors/ljharb" 338 | } 339 | }, 340 | "node_modules/http-errors": { 341 | "version": "2.0.0", 342 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 343 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 344 | "dependencies": { 345 | "depd": "2.0.0", 346 | "inherits": "2.0.4", 347 | "setprototypeof": "1.2.0", 348 | "statuses": "2.0.1", 349 | "toidentifier": "1.0.1" 350 | }, 351 | "engines": { 352 | "node": ">= 0.8" 353 | } 354 | }, 355 | "node_modules/iconv-lite": { 356 | "version": "0.4.24", 357 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 358 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 359 | "dependencies": { 360 | "safer-buffer": ">= 2.1.2 < 3" 361 | }, 362 | "engines": { 363 | "node": ">=0.10.0" 364 | } 365 | }, 366 | "node_modules/inherits": { 367 | "version": "2.0.4", 368 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 369 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 370 | }, 371 | "node_modules/ipaddr.js": { 372 | "version": "1.9.1", 373 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 374 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 375 | "engines": { 376 | "node": ">= 0.10" 377 | } 378 | }, 379 | "node_modules/isarray": { 380 | "version": "1.0.0", 381 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 382 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" 383 | }, 384 | "node_modules/kareem": { 385 | "version": "2.3.2", 386 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", 387 | "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" 388 | }, 389 | "node_modules/media-typer": { 390 | "version": "0.3.0", 391 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 392 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 393 | "engines": { 394 | "node": ">= 0.6" 395 | } 396 | }, 397 | "node_modules/memory-pager": { 398 | "version": "1.5.0", 399 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 400 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 401 | "optional": true 402 | }, 403 | "node_modules/merge-descriptors": { 404 | "version": "1.0.1", 405 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 406 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 407 | }, 408 | "node_modules/methods": { 409 | "version": "1.1.2", 410 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 411 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 412 | "engines": { 413 | "node": ">= 0.6" 414 | } 415 | }, 416 | "node_modules/mime": { 417 | "version": "1.6.0", 418 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 419 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 420 | "bin": { 421 | "mime": "cli.js" 422 | }, 423 | "engines": { 424 | "node": ">=4" 425 | } 426 | }, 427 | "node_modules/mime-db": { 428 | "version": "1.52.0", 429 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 430 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 431 | "engines": { 432 | "node": ">= 0.6" 433 | } 434 | }, 435 | "node_modules/mime-types": { 436 | "version": "2.1.35", 437 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 438 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 439 | "dependencies": { 440 | "mime-db": "1.52.0" 441 | }, 442 | "engines": { 443 | "node": ">= 0.6" 444 | } 445 | }, 446 | "node_modules/mongodb": { 447 | "version": "3.7.3", 448 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.3.tgz", 449 | "integrity": "sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw==", 450 | "dependencies": { 451 | "bl": "^2.2.1", 452 | "bson": "^1.1.4", 453 | "denque": "^1.4.1", 454 | "optional-require": "^1.1.8", 455 | "safe-buffer": "^5.1.2" 456 | }, 457 | "engines": { 458 | "node": ">=4" 459 | }, 460 | "optionalDependencies": { 461 | "saslprep": "^1.0.0" 462 | }, 463 | "peerDependenciesMeta": { 464 | "aws4": { 465 | "optional": true 466 | }, 467 | "bson-ext": { 468 | "optional": true 469 | }, 470 | "kerberos": { 471 | "optional": true 472 | }, 473 | "mongodb-client-encryption": { 474 | "optional": true 475 | }, 476 | "mongodb-extjson": { 477 | "optional": true 478 | }, 479 | "snappy": { 480 | "optional": true 481 | } 482 | } 483 | }, 484 | "node_modules/mongodb/node_modules/optional-require": { 485 | "version": "1.1.8", 486 | "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz", 487 | "integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==", 488 | "dependencies": { 489 | "require-at": "^1.0.6" 490 | }, 491 | "engines": { 492 | "node": ">=4" 493 | } 494 | }, 495 | "node_modules/mongoose": { 496 | "version": "5.13.14", 497 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.14.tgz", 498 | "integrity": "sha512-j+BlQjjxgZg0iWn42kLeZTB91OejcxWpY2Z50bsZTiKJ7HHcEtcY21Godw496GMkBqJMTzmW7G/kZ04mW+Cb7Q==", 499 | "dependencies": { 500 | "@types/bson": "1.x || 4.0.x", 501 | "@types/mongodb": "^3.5.27", 502 | "bson": "^1.1.4", 503 | "kareem": "2.3.2", 504 | "mongodb": "3.7.3", 505 | "mongoose-legacy-pluralize": "1.0.2", 506 | "mpath": "0.8.4", 507 | "mquery": "3.2.5", 508 | "ms": "2.1.2", 509 | "optional-require": "1.0.x", 510 | "regexp-clone": "1.0.0", 511 | "safe-buffer": "5.2.1", 512 | "sift": "13.5.2", 513 | "sliced": "1.0.1" 514 | }, 515 | "engines": { 516 | "node": ">=4.0.0" 517 | }, 518 | "funding": { 519 | "type": "opencollective", 520 | "url": "https://opencollective.com/mongoose" 521 | } 522 | }, 523 | "node_modules/mongoose-legacy-pluralize": { 524 | "version": "1.0.2", 525 | "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", 526 | "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==", 527 | "peerDependencies": { 528 | "mongoose": "*" 529 | } 530 | }, 531 | "node_modules/mongoose/node_modules/ms": { 532 | "version": "2.1.2", 533 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 534 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 535 | }, 536 | "node_modules/mpath": { 537 | "version": "0.8.4", 538 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", 539 | "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==", 540 | "engines": { 541 | "node": ">=4.0.0" 542 | } 543 | }, 544 | "node_modules/mquery": { 545 | "version": "3.2.5", 546 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.5.tgz", 547 | "integrity": "sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A==", 548 | "dependencies": { 549 | "bluebird": "3.5.1", 550 | "debug": "3.1.0", 551 | "regexp-clone": "^1.0.0", 552 | "safe-buffer": "5.1.2", 553 | "sliced": "1.0.1" 554 | }, 555 | "engines": { 556 | "node": ">=4.0.0" 557 | } 558 | }, 559 | "node_modules/mquery/node_modules/debug": { 560 | "version": "3.1.0", 561 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 562 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 563 | "dependencies": { 564 | "ms": "2.0.0" 565 | } 566 | }, 567 | "node_modules/mquery/node_modules/safe-buffer": { 568 | "version": "5.1.2", 569 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 570 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 571 | }, 572 | "node_modules/ms": { 573 | "version": "2.0.0", 574 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 575 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 576 | }, 577 | "node_modules/negotiator": { 578 | "version": "0.6.3", 579 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 580 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 581 | "engines": { 582 | "node": ">= 0.6" 583 | } 584 | }, 585 | "node_modules/object-inspect": { 586 | "version": "1.12.2", 587 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", 588 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", 589 | "funding": { 590 | "url": "https://github.com/sponsors/ljharb" 591 | } 592 | }, 593 | "node_modules/on-finished": { 594 | "version": "2.4.1", 595 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 596 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 597 | "dependencies": { 598 | "ee-first": "1.1.1" 599 | }, 600 | "engines": { 601 | "node": ">= 0.8" 602 | } 603 | }, 604 | "node_modules/optional-require": { 605 | "version": "1.0.3", 606 | "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.0.3.tgz", 607 | "integrity": "sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA==", 608 | "engines": { 609 | "node": ">=4" 610 | } 611 | }, 612 | "node_modules/parseurl": { 613 | "version": "1.3.3", 614 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 615 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 616 | "engines": { 617 | "node": ">= 0.8" 618 | } 619 | }, 620 | "node_modules/path-to-regexp": { 621 | "version": "0.1.7", 622 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 623 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 624 | }, 625 | "node_modules/process-nextick-args": { 626 | "version": "2.0.1", 627 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 628 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 629 | }, 630 | "node_modules/proxy-addr": { 631 | "version": "2.0.7", 632 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 633 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 634 | "dependencies": { 635 | "forwarded": "0.2.0", 636 | "ipaddr.js": "1.9.1" 637 | }, 638 | "engines": { 639 | "node": ">= 0.10" 640 | } 641 | }, 642 | "node_modules/qs": { 643 | "version": "6.10.3", 644 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", 645 | "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", 646 | "dependencies": { 647 | "side-channel": "^1.0.4" 648 | }, 649 | "engines": { 650 | "node": ">=0.6" 651 | }, 652 | "funding": { 653 | "url": "https://github.com/sponsors/ljharb" 654 | } 655 | }, 656 | "node_modules/range-parser": { 657 | "version": "1.2.1", 658 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 659 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 660 | "engines": { 661 | "node": ">= 0.6" 662 | } 663 | }, 664 | "node_modules/raw-body": { 665 | "version": "2.5.1", 666 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 667 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 668 | "dependencies": { 669 | "bytes": "3.1.2", 670 | "http-errors": "2.0.0", 671 | "iconv-lite": "0.4.24", 672 | "unpipe": "1.0.0" 673 | }, 674 | "engines": { 675 | "node": ">= 0.8" 676 | } 677 | }, 678 | "node_modules/readable-stream": { 679 | "version": "2.3.7", 680 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 681 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 682 | "dependencies": { 683 | "core-util-is": "~1.0.0", 684 | "inherits": "~2.0.3", 685 | "isarray": "~1.0.0", 686 | "process-nextick-args": "~2.0.0", 687 | "safe-buffer": "~5.1.1", 688 | "string_decoder": "~1.1.1", 689 | "util-deprecate": "~1.0.1" 690 | } 691 | }, 692 | "node_modules/readable-stream/node_modules/safe-buffer": { 693 | "version": "5.1.2", 694 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 695 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 696 | }, 697 | "node_modules/regexp-clone": { 698 | "version": "1.0.0", 699 | "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", 700 | "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" 701 | }, 702 | "node_modules/require-at": { 703 | "version": "1.0.6", 704 | "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz", 705 | "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==", 706 | "engines": { 707 | "node": ">=4" 708 | } 709 | }, 710 | "node_modules/safe-buffer": { 711 | "version": "5.2.1", 712 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 713 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 714 | "funding": [ 715 | { 716 | "type": "github", 717 | "url": "https://github.com/sponsors/feross" 718 | }, 719 | { 720 | "type": "patreon", 721 | "url": "https://www.patreon.com/feross" 722 | }, 723 | { 724 | "type": "consulting", 725 | "url": "https://feross.org/support" 726 | } 727 | ] 728 | }, 729 | "node_modules/safer-buffer": { 730 | "version": "2.1.2", 731 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 732 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 733 | }, 734 | "node_modules/saslprep": { 735 | "version": "1.0.3", 736 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 737 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 738 | "optional": true, 739 | "dependencies": { 740 | "sparse-bitfield": "^3.0.3" 741 | }, 742 | "engines": { 743 | "node": ">=6" 744 | } 745 | }, 746 | "node_modules/send": { 747 | "version": "0.18.0", 748 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 749 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 750 | "dependencies": { 751 | "debug": "2.6.9", 752 | "depd": "2.0.0", 753 | "destroy": "1.2.0", 754 | "encodeurl": "~1.0.2", 755 | "escape-html": "~1.0.3", 756 | "etag": "~1.8.1", 757 | "fresh": "0.5.2", 758 | "http-errors": "2.0.0", 759 | "mime": "1.6.0", 760 | "ms": "2.1.3", 761 | "on-finished": "2.4.1", 762 | "range-parser": "~1.2.1", 763 | "statuses": "2.0.1" 764 | }, 765 | "engines": { 766 | "node": ">= 0.8.0" 767 | } 768 | }, 769 | "node_modules/send/node_modules/ms": { 770 | "version": "2.1.3", 771 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 772 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 773 | }, 774 | "node_modules/serve-static": { 775 | "version": "1.15.0", 776 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 777 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 778 | "dependencies": { 779 | "encodeurl": "~1.0.2", 780 | "escape-html": "~1.0.3", 781 | "parseurl": "~1.3.3", 782 | "send": "0.18.0" 783 | }, 784 | "engines": { 785 | "node": ">= 0.8.0" 786 | } 787 | }, 788 | "node_modules/setprototypeof": { 789 | "version": "1.2.0", 790 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 791 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 792 | }, 793 | "node_modules/side-channel": { 794 | "version": "1.0.4", 795 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 796 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 797 | "dependencies": { 798 | "call-bind": "^1.0.0", 799 | "get-intrinsic": "^1.0.2", 800 | "object-inspect": "^1.9.0" 801 | }, 802 | "funding": { 803 | "url": "https://github.com/sponsors/ljharb" 804 | } 805 | }, 806 | "node_modules/sift": { 807 | "version": "13.5.2", 808 | "resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz", 809 | "integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA==" 810 | }, 811 | "node_modules/sliced": { 812 | "version": "1.0.1", 813 | "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", 814 | "integrity": "sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA==" 815 | }, 816 | "node_modules/sparse-bitfield": { 817 | "version": "3.0.3", 818 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 819 | "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", 820 | "optional": true, 821 | "dependencies": { 822 | "memory-pager": "^1.0.2" 823 | } 824 | }, 825 | "node_modules/statuses": { 826 | "version": "2.0.1", 827 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 828 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 829 | "engines": { 830 | "node": ">= 0.8" 831 | } 832 | }, 833 | "node_modules/string_decoder": { 834 | "version": "1.1.1", 835 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 836 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 837 | "dependencies": { 838 | "safe-buffer": "~5.1.0" 839 | } 840 | }, 841 | "node_modules/string_decoder/node_modules/safe-buffer": { 842 | "version": "5.1.2", 843 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 844 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 845 | }, 846 | "node_modules/toidentifier": { 847 | "version": "1.0.1", 848 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 849 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 850 | "engines": { 851 | "node": ">=0.6" 852 | } 853 | }, 854 | "node_modules/type-is": { 855 | "version": "1.6.18", 856 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 857 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 858 | "dependencies": { 859 | "media-typer": "0.3.0", 860 | "mime-types": "~2.1.24" 861 | }, 862 | "engines": { 863 | "node": ">= 0.6" 864 | } 865 | }, 866 | "node_modules/unpipe": { 867 | "version": "1.0.0", 868 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 869 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 870 | "engines": { 871 | "node": ">= 0.8" 872 | } 873 | }, 874 | "node_modules/util-deprecate": { 875 | "version": "1.0.2", 876 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 877 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 878 | }, 879 | "node_modules/utils-merge": { 880 | "version": "1.0.1", 881 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 882 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 883 | "engines": { 884 | "node": ">= 0.4.0" 885 | } 886 | }, 887 | "node_modules/vary": { 888 | "version": "1.1.2", 889 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 890 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 891 | "engines": { 892 | "node": ">= 0.8" 893 | } 894 | } 895 | }, 896 | "dependencies": { 897 | "@types/bson": { 898 | "version": "4.0.5", 899 | "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.5.tgz", 900 | "integrity": "sha512-vVLwMUqhYJSQ/WKcE60eFqcyuWse5fGH+NMAXHuKrUAPoryq3ATxk5o4bgYNtg5aOM4APVg7Hnb3ASqUYG0PKg==", 901 | "requires": { 902 | "@types/node": "*" 903 | } 904 | }, 905 | "@types/mongodb": { 906 | "version": "3.6.20", 907 | "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.20.tgz", 908 | "integrity": "sha512-WcdpPJCakFzcWWD9juKoZbRtQxKIMYF/JIAM4JrNHrMcnJL6/a2NWjXxW7fo9hxboxxkg+icff8d7+WIEvKgYQ==", 909 | "requires": { 910 | "@types/bson": "*", 911 | "@types/node": "*" 912 | } 913 | }, 914 | "@types/node": { 915 | "version": "18.6.3", 916 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz", 917 | "integrity": "sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==" 918 | }, 919 | "accepts": { 920 | "version": "1.3.8", 921 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 922 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 923 | "requires": { 924 | "mime-types": "~2.1.34", 925 | "negotiator": "0.6.3" 926 | } 927 | }, 928 | "array-flatten": { 929 | "version": "1.1.1", 930 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 931 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 932 | }, 933 | "bl": { 934 | "version": "2.2.1", 935 | "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", 936 | "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", 937 | "requires": { 938 | "readable-stream": "^2.3.5", 939 | "safe-buffer": "^5.1.1" 940 | } 941 | }, 942 | "bluebird": { 943 | "version": "3.5.1", 944 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", 945 | "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" 946 | }, 947 | "body-parser": { 948 | "version": "1.20.0", 949 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", 950 | "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", 951 | "requires": { 952 | "bytes": "3.1.2", 953 | "content-type": "~1.0.4", 954 | "debug": "2.6.9", 955 | "depd": "2.0.0", 956 | "destroy": "1.2.0", 957 | "http-errors": "2.0.0", 958 | "iconv-lite": "0.4.24", 959 | "on-finished": "2.4.1", 960 | "qs": "6.10.3", 961 | "raw-body": "2.5.1", 962 | "type-is": "~1.6.18", 963 | "unpipe": "1.0.0" 964 | } 965 | }, 966 | "bson": { 967 | "version": "1.1.6", 968 | "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", 969 | "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==" 970 | }, 971 | "bytes": { 972 | "version": "3.1.2", 973 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 974 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" 975 | }, 976 | "call-bind": { 977 | "version": "1.0.2", 978 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 979 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 980 | "requires": { 981 | "function-bind": "^1.1.1", 982 | "get-intrinsic": "^1.0.2" 983 | } 984 | }, 985 | "content-disposition": { 986 | "version": "0.5.4", 987 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 988 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 989 | "requires": { 990 | "safe-buffer": "5.2.1" 991 | } 992 | }, 993 | "content-type": { 994 | "version": "1.0.4", 995 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 996 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 997 | }, 998 | "cookie": { 999 | "version": "0.5.0", 1000 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 1001 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" 1002 | }, 1003 | "cookie-signature": { 1004 | "version": "1.0.6", 1005 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 1006 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 1007 | }, 1008 | "core-util-is": { 1009 | "version": "1.0.3", 1010 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 1011 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 1012 | }, 1013 | "debug": { 1014 | "version": "2.6.9", 1015 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1016 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1017 | "requires": { 1018 | "ms": "2.0.0" 1019 | } 1020 | }, 1021 | "denque": { 1022 | "version": "1.5.1", 1023 | "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", 1024 | "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==" 1025 | }, 1026 | "depd": { 1027 | "version": "2.0.0", 1028 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 1029 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" 1030 | }, 1031 | "destroy": { 1032 | "version": "1.2.0", 1033 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 1034 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" 1035 | }, 1036 | "dotenv": { 1037 | "version": "8.6.0", 1038 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", 1039 | "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==" 1040 | }, 1041 | "ee-first": { 1042 | "version": "1.1.1", 1043 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 1044 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 1045 | }, 1046 | "encodeurl": { 1047 | "version": "1.0.2", 1048 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 1049 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" 1050 | }, 1051 | "escape-html": { 1052 | "version": "1.0.3", 1053 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 1054 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 1055 | }, 1056 | "etag": { 1057 | "version": "1.8.1", 1058 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 1059 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" 1060 | }, 1061 | "express": { 1062 | "version": "4.18.1", 1063 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", 1064 | "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", 1065 | "requires": { 1066 | "accepts": "~1.3.8", 1067 | "array-flatten": "1.1.1", 1068 | "body-parser": "1.20.0", 1069 | "content-disposition": "0.5.4", 1070 | "content-type": "~1.0.4", 1071 | "cookie": "0.5.0", 1072 | "cookie-signature": "1.0.6", 1073 | "debug": "2.6.9", 1074 | "depd": "2.0.0", 1075 | "encodeurl": "~1.0.2", 1076 | "escape-html": "~1.0.3", 1077 | "etag": "~1.8.1", 1078 | "finalhandler": "1.2.0", 1079 | "fresh": "0.5.2", 1080 | "http-errors": "2.0.0", 1081 | "merge-descriptors": "1.0.1", 1082 | "methods": "~1.1.2", 1083 | "on-finished": "2.4.1", 1084 | "parseurl": "~1.3.3", 1085 | "path-to-regexp": "0.1.7", 1086 | "proxy-addr": "~2.0.7", 1087 | "qs": "6.10.3", 1088 | "range-parser": "~1.2.1", 1089 | "safe-buffer": "5.2.1", 1090 | "send": "0.18.0", 1091 | "serve-static": "1.15.0", 1092 | "setprototypeof": "1.2.0", 1093 | "statuses": "2.0.1", 1094 | "type-is": "~1.6.18", 1095 | "utils-merge": "1.0.1", 1096 | "vary": "~1.1.2" 1097 | } 1098 | }, 1099 | "finalhandler": { 1100 | "version": "1.2.0", 1101 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 1102 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 1103 | "requires": { 1104 | "debug": "2.6.9", 1105 | "encodeurl": "~1.0.2", 1106 | "escape-html": "~1.0.3", 1107 | "on-finished": "2.4.1", 1108 | "parseurl": "~1.3.3", 1109 | "statuses": "2.0.1", 1110 | "unpipe": "~1.0.0" 1111 | } 1112 | }, 1113 | "forwarded": { 1114 | "version": "0.2.0", 1115 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 1116 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 1117 | }, 1118 | "fresh": { 1119 | "version": "0.5.2", 1120 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 1121 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" 1122 | }, 1123 | "function-bind": { 1124 | "version": "1.1.1", 1125 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1126 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 1127 | }, 1128 | "get-intrinsic": { 1129 | "version": "1.1.2", 1130 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", 1131 | "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", 1132 | "requires": { 1133 | "function-bind": "^1.1.1", 1134 | "has": "^1.0.3", 1135 | "has-symbols": "^1.0.3" 1136 | } 1137 | }, 1138 | "has": { 1139 | "version": "1.0.3", 1140 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1141 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1142 | "requires": { 1143 | "function-bind": "^1.1.1" 1144 | } 1145 | }, 1146 | "has-symbols": { 1147 | "version": "1.0.3", 1148 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1149 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" 1150 | }, 1151 | "http-errors": { 1152 | "version": "2.0.0", 1153 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 1154 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 1155 | "requires": { 1156 | "depd": "2.0.0", 1157 | "inherits": "2.0.4", 1158 | "setprototypeof": "1.2.0", 1159 | "statuses": "2.0.1", 1160 | "toidentifier": "1.0.1" 1161 | } 1162 | }, 1163 | "iconv-lite": { 1164 | "version": "0.4.24", 1165 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1166 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1167 | "requires": { 1168 | "safer-buffer": ">= 2.1.2 < 3" 1169 | } 1170 | }, 1171 | "inherits": { 1172 | "version": "2.0.4", 1173 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1174 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1175 | }, 1176 | "ipaddr.js": { 1177 | "version": "1.9.1", 1178 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 1179 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 1180 | }, 1181 | "isarray": { 1182 | "version": "1.0.0", 1183 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1184 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" 1185 | }, 1186 | "kareem": { 1187 | "version": "2.3.2", 1188 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", 1189 | "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" 1190 | }, 1191 | "media-typer": { 1192 | "version": "0.3.0", 1193 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1194 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" 1195 | }, 1196 | "memory-pager": { 1197 | "version": "1.5.0", 1198 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 1199 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 1200 | "optional": true 1201 | }, 1202 | "merge-descriptors": { 1203 | "version": "1.0.1", 1204 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 1205 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 1206 | }, 1207 | "methods": { 1208 | "version": "1.1.2", 1209 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1210 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" 1211 | }, 1212 | "mime": { 1213 | "version": "1.6.0", 1214 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1215 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 1216 | }, 1217 | "mime-db": { 1218 | "version": "1.52.0", 1219 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1220 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" 1221 | }, 1222 | "mime-types": { 1223 | "version": "2.1.35", 1224 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1225 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1226 | "requires": { 1227 | "mime-db": "1.52.0" 1228 | } 1229 | }, 1230 | "mongodb": { 1231 | "version": "3.7.3", 1232 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.3.tgz", 1233 | "integrity": "sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw==", 1234 | "requires": { 1235 | "bl": "^2.2.1", 1236 | "bson": "^1.1.4", 1237 | "denque": "^1.4.1", 1238 | "optional-require": "^1.1.8", 1239 | "safe-buffer": "^5.1.2", 1240 | "saslprep": "^1.0.0" 1241 | }, 1242 | "dependencies": { 1243 | "optional-require": { 1244 | "version": "1.1.8", 1245 | "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz", 1246 | "integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==", 1247 | "requires": { 1248 | "require-at": "^1.0.6" 1249 | } 1250 | } 1251 | } 1252 | }, 1253 | "mongoose": { 1254 | "version": "5.13.14", 1255 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.14.tgz", 1256 | "integrity": "sha512-j+BlQjjxgZg0iWn42kLeZTB91OejcxWpY2Z50bsZTiKJ7HHcEtcY21Godw496GMkBqJMTzmW7G/kZ04mW+Cb7Q==", 1257 | "requires": { 1258 | "@types/bson": "1.x || 4.0.x", 1259 | "@types/mongodb": "^3.5.27", 1260 | "bson": "^1.1.4", 1261 | "kareem": "2.3.2", 1262 | "mongodb": "3.7.3", 1263 | "mongoose-legacy-pluralize": "1.0.2", 1264 | "mpath": "0.8.4", 1265 | "mquery": "3.2.5", 1266 | "ms": "2.1.2", 1267 | "optional-require": "1.0.x", 1268 | "regexp-clone": "1.0.0", 1269 | "safe-buffer": "5.2.1", 1270 | "sift": "13.5.2", 1271 | "sliced": "1.0.1" 1272 | }, 1273 | "dependencies": { 1274 | "ms": { 1275 | "version": "2.1.2", 1276 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1277 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1278 | } 1279 | } 1280 | }, 1281 | "mongoose-legacy-pluralize": { 1282 | "version": "1.0.2", 1283 | "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", 1284 | "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==", 1285 | "requires": {} 1286 | }, 1287 | "mpath": { 1288 | "version": "0.8.4", 1289 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", 1290 | "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==" 1291 | }, 1292 | "mquery": { 1293 | "version": "3.2.5", 1294 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.5.tgz", 1295 | "integrity": "sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A==", 1296 | "requires": { 1297 | "bluebird": "3.5.1", 1298 | "debug": "3.1.0", 1299 | "regexp-clone": "^1.0.0", 1300 | "safe-buffer": "5.1.2", 1301 | "sliced": "1.0.1" 1302 | }, 1303 | "dependencies": { 1304 | "debug": { 1305 | "version": "3.1.0", 1306 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 1307 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 1308 | "requires": { 1309 | "ms": "2.0.0" 1310 | } 1311 | }, 1312 | "safe-buffer": { 1313 | "version": "5.1.2", 1314 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1315 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1316 | } 1317 | } 1318 | }, 1319 | "ms": { 1320 | "version": "2.0.0", 1321 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1322 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 1323 | }, 1324 | "negotiator": { 1325 | "version": "0.6.3", 1326 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 1327 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" 1328 | }, 1329 | "object-inspect": { 1330 | "version": "1.12.2", 1331 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", 1332 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" 1333 | }, 1334 | "on-finished": { 1335 | "version": "2.4.1", 1336 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 1337 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 1338 | "requires": { 1339 | "ee-first": "1.1.1" 1340 | } 1341 | }, 1342 | "optional-require": { 1343 | "version": "1.0.3", 1344 | "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.0.3.tgz", 1345 | "integrity": "sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA==" 1346 | }, 1347 | "parseurl": { 1348 | "version": "1.3.3", 1349 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1350 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 1351 | }, 1352 | "path-to-regexp": { 1353 | "version": "0.1.7", 1354 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1355 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 1356 | }, 1357 | "process-nextick-args": { 1358 | "version": "2.0.1", 1359 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1360 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 1361 | }, 1362 | "proxy-addr": { 1363 | "version": "2.0.7", 1364 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 1365 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 1366 | "requires": { 1367 | "forwarded": "0.2.0", 1368 | "ipaddr.js": "1.9.1" 1369 | } 1370 | }, 1371 | "qs": { 1372 | "version": "6.10.3", 1373 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", 1374 | "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", 1375 | "requires": { 1376 | "side-channel": "^1.0.4" 1377 | } 1378 | }, 1379 | "range-parser": { 1380 | "version": "1.2.1", 1381 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1382 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 1383 | }, 1384 | "raw-body": { 1385 | "version": "2.5.1", 1386 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 1387 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 1388 | "requires": { 1389 | "bytes": "3.1.2", 1390 | "http-errors": "2.0.0", 1391 | "iconv-lite": "0.4.24", 1392 | "unpipe": "1.0.0" 1393 | } 1394 | }, 1395 | "readable-stream": { 1396 | "version": "2.3.7", 1397 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 1398 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 1399 | "requires": { 1400 | "core-util-is": "~1.0.0", 1401 | "inherits": "~2.0.3", 1402 | "isarray": "~1.0.0", 1403 | "process-nextick-args": "~2.0.0", 1404 | "safe-buffer": "~5.1.1", 1405 | "string_decoder": "~1.1.1", 1406 | "util-deprecate": "~1.0.1" 1407 | }, 1408 | "dependencies": { 1409 | "safe-buffer": { 1410 | "version": "5.1.2", 1411 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1412 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1413 | } 1414 | } 1415 | }, 1416 | "regexp-clone": { 1417 | "version": "1.0.0", 1418 | "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", 1419 | "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" 1420 | }, 1421 | "require-at": { 1422 | "version": "1.0.6", 1423 | "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz", 1424 | "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==" 1425 | }, 1426 | "safe-buffer": { 1427 | "version": "5.2.1", 1428 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1429 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 1430 | }, 1431 | "safer-buffer": { 1432 | "version": "2.1.2", 1433 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1434 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1435 | }, 1436 | "saslprep": { 1437 | "version": "1.0.3", 1438 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 1439 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 1440 | "optional": true, 1441 | "requires": { 1442 | "sparse-bitfield": "^3.0.3" 1443 | } 1444 | }, 1445 | "send": { 1446 | "version": "0.18.0", 1447 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 1448 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 1449 | "requires": { 1450 | "debug": "2.6.9", 1451 | "depd": "2.0.0", 1452 | "destroy": "1.2.0", 1453 | "encodeurl": "~1.0.2", 1454 | "escape-html": "~1.0.3", 1455 | "etag": "~1.8.1", 1456 | "fresh": "0.5.2", 1457 | "http-errors": "2.0.0", 1458 | "mime": "1.6.0", 1459 | "ms": "2.1.3", 1460 | "on-finished": "2.4.1", 1461 | "range-parser": "~1.2.1", 1462 | "statuses": "2.0.1" 1463 | }, 1464 | "dependencies": { 1465 | "ms": { 1466 | "version": "2.1.3", 1467 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1468 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1469 | } 1470 | } 1471 | }, 1472 | "serve-static": { 1473 | "version": "1.15.0", 1474 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 1475 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 1476 | "requires": { 1477 | "encodeurl": "~1.0.2", 1478 | "escape-html": "~1.0.3", 1479 | "parseurl": "~1.3.3", 1480 | "send": "0.18.0" 1481 | } 1482 | }, 1483 | "setprototypeof": { 1484 | "version": "1.2.0", 1485 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 1486 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 1487 | }, 1488 | "side-channel": { 1489 | "version": "1.0.4", 1490 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1491 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1492 | "requires": { 1493 | "call-bind": "^1.0.0", 1494 | "get-intrinsic": "^1.0.2", 1495 | "object-inspect": "^1.9.0" 1496 | } 1497 | }, 1498 | "sift": { 1499 | "version": "13.5.2", 1500 | "resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz", 1501 | "integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA==" 1502 | }, 1503 | "sliced": { 1504 | "version": "1.0.1", 1505 | "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", 1506 | "integrity": "sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA==" 1507 | }, 1508 | "sparse-bitfield": { 1509 | "version": "3.0.3", 1510 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 1511 | "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", 1512 | "optional": true, 1513 | "requires": { 1514 | "memory-pager": "^1.0.2" 1515 | } 1516 | }, 1517 | "statuses": { 1518 | "version": "2.0.1", 1519 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 1520 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" 1521 | }, 1522 | "string_decoder": { 1523 | "version": "1.1.1", 1524 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1525 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1526 | "requires": { 1527 | "safe-buffer": "~5.1.0" 1528 | }, 1529 | "dependencies": { 1530 | "safe-buffer": { 1531 | "version": "5.1.2", 1532 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1533 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1534 | } 1535 | } 1536 | }, 1537 | "toidentifier": { 1538 | "version": "1.0.1", 1539 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 1540 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" 1541 | }, 1542 | "type-is": { 1543 | "version": "1.6.18", 1544 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1545 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1546 | "requires": { 1547 | "media-typer": "0.3.0", 1548 | "mime-types": "~2.1.24" 1549 | } 1550 | }, 1551 | "unpipe": { 1552 | "version": "1.0.0", 1553 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1554 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" 1555 | }, 1556 | "util-deprecate": { 1557 | "version": "1.0.2", 1558 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1559 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 1560 | }, 1561 | "utils-merge": { 1562 | "version": "1.0.1", 1563 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1564 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" 1565 | }, 1566 | "vary": { 1567 | "version": "1.1.2", 1568 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1569 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" 1570 | } 1571 | } 1572 | } 1573 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fcc-mongo-mongoose-challenges", 3 | "version": "0.0.1", 4 | "description": "A boilerplate project", 5 | "main": "server.js", 6 | "scripts": { 7 | "start": "node server.js" 8 | }, 9 | "dependencies": { 10 | "body-parser": "^1.15.2", 11 | "dotenv": "^8.2.0", 12 | "express": "^4.12.4", 13 | "mongoose": "^5.11.15" 14 | }, 15 | "repository": { 16 | "type": "git", 17 | "url": "https://github.com/freeCodeCamp/boilerplate-mongomongoose.git" 18 | }, 19 | "keywords": [ 20 | "node", 21 | "mongoose", 22 | "express" 23 | ], 24 | "license": "MIT" 25 | } 26 | -------------------------------------------------------------------------------- /sample.env: -------------------------------------------------------------------------------- 1 | MONGO_URI= -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | /******************************************** 2 | * DO NOT EDIT THIS FILE 3 | * the verification process may break 4 | *******************************************/ 5 | 6 | const express = require("express"); 7 | const app = express(); 8 | let mongoose; 9 | try { 10 | mongoose = require("mongoose"); 11 | } catch (e) { 12 | console.log(e); 13 | } 14 | const fs = require("fs"); 15 | const path = require("path"); 16 | const bodyParser = require("body-parser"); 17 | const router = express.Router(); 18 | 19 | const enableCORS = function (req, res, next) { 20 | if (!process.env.DISABLE_XORIGIN) { 21 | const allowedOrigins = ["https://www.freecodecamp.org"]; 22 | const origin = req.headers.origin; 23 | if (!process.env.XORIGIN_RESTRICT || allowedOrigins.indexOf(origin) > -1) { 24 | console.log(req.method); 25 | res.set({ 26 | "Access-Control-Allow-Origin": origin, 27 | "Access-Control-Allow-Methods": "GET, POST, OPTIONS", 28 | "Access-Control-Allow-Headers": 29 | "Origin, X-Requested-With, Content-Type, Accept", 30 | }); 31 | } 32 | } 33 | next(); 34 | }; 35 | 36 | // global setting for safety timeouts to handle possible 37 | // wrong callbacks that will never be called 38 | const TIMEOUT = 10000; 39 | 40 | app.use(bodyParser.urlencoded({ extended: "false" })); 41 | app.use(bodyParser.json()); 42 | 43 | app.get("/", function (req, res) { 44 | res.sendFile(path.join(__dirname, "views", "index.html")); 45 | }); 46 | 47 | router.get("/file/*?", function (req, res, next) { 48 | if (req.params[0] === ".env") { 49 | return next({ status: 401, message: "ACCESS DENIED" }); 50 | } 51 | fs.readFile(path.join(__dirname, req.params[0]), function (err, data) { 52 | if (err) { 53 | return next(err); 54 | } 55 | res.type("txt").send(data.toString()); 56 | }); 57 | }); 58 | 59 | router.get("/is-mongoose-ok", function (req, res) { 60 | if (mongoose) { 61 | res.json({ isMongooseOk: !!mongoose.connection.readyState }); 62 | } else { 63 | res.json({ isMongooseOk: false }); 64 | } 65 | }); 66 | 67 | const Person = require("./myApp.js").PersonModel; 68 | 69 | router.use(function (req, res, next) { 70 | if (req.method !== "OPTIONS" && Person.modelName !== "Person") { 71 | return next({ message: "Person Model is not correct" }); 72 | } 73 | next(); 74 | }); 75 | 76 | router.post("/mongoose-model", function (req, res, next) { 77 | // try to create a new instance based on their model 78 | // verify it's correctly defined in some way 79 | let p; 80 | p = new Person(req.body); 81 | res.json(p); 82 | }); 83 | 84 | const createPerson = require("./myApp.js").createAndSavePerson; 85 | router.get("/create-and-save-person", function (req, res, next) { 86 | // in case of incorrect function use wait timeout then respond 87 | let t = setTimeout(() => { 88 | next({ message: "timeout" }); 89 | }, TIMEOUT); 90 | createPerson(function (err, data) { 91 | clearTimeout(t); 92 | if (err) { 93 | return next(err); 94 | } 95 | if (!data) { 96 | console.log("Missing `done()` argument"); 97 | return next({ message: "Missing callback argument" }); 98 | } 99 | Person.findById(data._id, function (err, pers) { 100 | if (err) { 101 | return next(err); 102 | } 103 | res.json(pers); 104 | pers.remove(); 105 | }); 106 | }); 107 | }); 108 | 109 | const createPeople = require("./myApp.js").createManyPeople; 110 | router.post("/create-many-people", function (req, res, next) { 111 | Person.remove({}, function (err) { 112 | if (err) { 113 | return next(err); 114 | } 115 | // in case of incorrect function use wait timeout then respond 116 | let t = setTimeout(() => { 117 | next({ message: "timeout" }); 118 | }, TIMEOUT); 119 | createPeople(req.body, function (err, data) { 120 | clearTimeout(t); 121 | if (err) { 122 | return next(err); 123 | } 124 | if (!data) { 125 | console.log("Missing `done()` argument"); 126 | return next({ message: "Missing callback argument" }); 127 | } 128 | Person.find({}, function (err, pers) { 129 | if (err) { 130 | return next(err); 131 | } 132 | res.json(pers); 133 | Person.remove().exec(); 134 | }); 135 | }); 136 | }); 137 | }); 138 | 139 | const findByName = require("./myApp.js").findPeopleByName; 140 | router.post("/find-all-by-name", function (req, res, next) { 141 | let t = setTimeout(() => { 142 | next({ message: "timeout" }); 143 | }, TIMEOUT); 144 | Person.create(req.body, function (err, pers) { 145 | if (err) { 146 | return next(err); 147 | } 148 | findByName(pers.name, function (err, data) { 149 | clearTimeout(t); 150 | if (err) { 151 | return next(err); 152 | } 153 | if (!data) { 154 | console.log("Missing `done()` argument"); 155 | return next({ message: "Missing callback argument" }); 156 | } 157 | res.json(data); 158 | Person.remove().exec(); 159 | }); 160 | }); 161 | }); 162 | 163 | const findByFood = require("./myApp.js").findOneByFood; 164 | router.post("/find-one-by-food", function (req, res, next) { 165 | let t = setTimeout(() => { 166 | next({ message: "timeout" }); 167 | }, TIMEOUT); 168 | let p = new Person(req.body); 169 | p.save(function (err, pers) { 170 | if (err) { 171 | return next(err); 172 | } 173 | findByFood(pers.favoriteFoods[0], function (err, data) { 174 | clearTimeout(t); 175 | if (err) { 176 | return next(err); 177 | } 178 | if (!data) { 179 | console.log("Missing `done()` argument"); 180 | return next({ message: "Missing callback argument" }); 181 | } 182 | res.json(data); 183 | p.remove(); 184 | }); 185 | }); 186 | }); 187 | 188 | const findById = require("./myApp.js").findPersonById; 189 | router.get("/find-by-id", function (req, res, next) { 190 | let t = setTimeout(() => { 191 | next({ message: "timeout" }); 192 | }, TIMEOUT); 193 | let p = new Person({ name: "test", age: 0, favoriteFoods: ["none"] }); 194 | p.save(function (err, pers) { 195 | if (err) { 196 | return next(err); 197 | } 198 | findById(pers._id, function (err, data) { 199 | clearTimeout(t); 200 | if (err) { 201 | return next(err); 202 | } 203 | if (!data) { 204 | console.log("Missing `done()` argument"); 205 | return next({ message: "Missing callback argument" }); 206 | } 207 | res.json(data); 208 | p.remove(); 209 | }); 210 | }); 211 | }); 212 | 213 | const findEdit = require("./myApp.js").findEditThenSave; 214 | router.post("/find-edit-save", function (req, res, next) { 215 | let t = setTimeout(() => { 216 | next({ message: "timeout" }); 217 | }, TIMEOUT); 218 | let p = new Person(req.body); 219 | p.save(function (err, pers) { 220 | if (err) { 221 | return next(err); 222 | } 223 | try { 224 | findEdit(pers._id, function (err, data) { 225 | clearTimeout(t); 226 | if (err) { 227 | return next(err); 228 | } 229 | if (!data) { 230 | console.log("Missing `done()` argument"); 231 | return next({ message: "Missing callback argument" }); 232 | } 233 | res.json(data); 234 | p.remove(); 235 | }); 236 | } catch (e) { 237 | console.log(e); 238 | return next(e); 239 | } 240 | }); 241 | }); 242 | 243 | const update = require("./myApp.js").findAndUpdate; 244 | router.post("/find-one-update", function (req, res, next) { 245 | let t = setTimeout(() => { 246 | next({ message: "timeout" }); 247 | }, TIMEOUT); 248 | let p = new Person(req.body); 249 | p.save(function (err, pers) { 250 | if (err) { 251 | return next(err); 252 | } 253 | try { 254 | update(pers.name, function (err, data) { 255 | clearTimeout(t); 256 | if (err) { 257 | return next(err); 258 | } 259 | if (!data) { 260 | console.log("Missing `done()` argument"); 261 | return next({ message: "Missing callback argument" }); 262 | } 263 | res.json(data); 264 | p.remove(); 265 | }); 266 | } catch (e) { 267 | console.log(e); 268 | return next(e); 269 | } 270 | }); 271 | }); 272 | 273 | const removeOne = require("./myApp.js").removeById; 274 | router.post("/remove-one-person", function (req, res, next) { 275 | Person.remove({}, function (err) { 276 | if (err) { 277 | return next(err); 278 | } 279 | let t = setTimeout(() => { 280 | next({ message: "timeout" }); 281 | }, TIMEOUT); 282 | let p = new Person(req.body); 283 | p.save(function (err, pers) { 284 | if (err) { 285 | return next(err); 286 | } 287 | try { 288 | removeOne(pers._id, function (err, data) { 289 | clearTimeout(t); 290 | if (err) { 291 | return next(err); 292 | } 293 | if (!data) { 294 | console.log("Missing `done()` argument"); 295 | return next({ message: "Missing callback argument" }); 296 | } 297 | console.log(data); 298 | Person.count(function (err, cnt) { 299 | if (err) { 300 | return next(err); 301 | } 302 | data = data.toObject(); 303 | data.count = cnt; 304 | console.log(data); 305 | res.json(data); 306 | }); 307 | }); 308 | } catch (e) { 309 | console.log(e); 310 | return next(e); 311 | } 312 | }); 313 | }); 314 | }); 315 | 316 | const removeMany = require("./myApp.js").removeManyPeople; 317 | router.post("/remove-many-people", function (req, res, next) { 318 | Person.remove({}, function (err) { 319 | if (err) { 320 | return next(err); 321 | } 322 | let t = setTimeout(() => { 323 | next({ message: "timeout" }); 324 | }, TIMEOUT); 325 | Person.create(req.body, function (err, pers) { 326 | if (err) { 327 | return next(err); 328 | } 329 | try { 330 | removeMany(function (err, data) { 331 | clearTimeout(t); 332 | if (err) { 333 | return next(err); 334 | } 335 | if (!data) { 336 | console.log("Missing `done()` argument"); 337 | return next({ message: "Missing callback argument" }); 338 | } 339 | Person.count(function (err, cnt) { 340 | if (err) { 341 | return next(err); 342 | } 343 | if (data.ok === undefined) { 344 | // for mongoose v4 345 | try { 346 | data = JSON.parse(data); 347 | } catch (e) { 348 | console.log(e); 349 | return next(e); 350 | } 351 | } 352 | res.json({ 353 | n: data.n, 354 | count: cnt, 355 | ok: data.ok, 356 | }); 357 | }); 358 | }); 359 | } catch (e) { 360 | console.log(e); 361 | return next(e); 362 | } 363 | }); 364 | }); 365 | }); 366 | 367 | const chain = require("./myApp.js").queryChain; 368 | router.post("/query-tools", function (req, res, next) { 369 | let t = setTimeout(() => { 370 | next({ message: "timeout" }); 371 | }, TIMEOUT); 372 | Person.remove({}, function (err) { 373 | if (err) { 374 | return next(err); 375 | } 376 | Person.create(req.body, function (err, pers) { 377 | if (err) { 378 | return next(err); 379 | } 380 | try { 381 | chain(function (err, data) { 382 | clearTimeout(t); 383 | if (err) { 384 | return next(err); 385 | } 386 | if (!data) { 387 | console.log("Missing `done()` argument"); 388 | return next({ message: "Missing callback argument" }); 389 | } 390 | res.json(data); 391 | }); 392 | } catch (e) { 393 | console.log(e); 394 | return next(e); 395 | } 396 | }); 397 | }); 398 | }); 399 | 400 | app.use("/_api", enableCORS, router); 401 | 402 | // Error handler 403 | app.use(function (err, req, res, next) { 404 | if (err) { 405 | res 406 | .status(err.status || 500) 407 | .type("txt") 408 | .send(err.message || "SERVER ERROR"); 409 | } 410 | }); 411 | 412 | // Unmatched routes handler 413 | app.use(function (req, res) { 414 | if (req.method.toLowerCase() === "options") { 415 | res.end(); 416 | } else { 417 | res.status(404).type("txt").send("Not Found"); 418 | } 419 | }); 420 | 421 | const listener = app.listen(process.env.PORT || 3000, function () { 422 | console.log("Your app is listening on port " + listener.address().port); 423 | }); 424 | 425 | /******************************************** 426 | * DO NOT EDIT THIS FILE 427 | * the verification process may break 428 | *******************************************/ 429 | -------------------------------------------------------------------------------- /views/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | MongoDB & Mongoose | freeCodeCamp.org 14 | 19 | 20 | 21 | 22 | 30 | 31 | 32 | 33 |

MongoDB & Mongoose

34 | 35 | 36 | --------------------------------------------------------------------------------