├── .gitignore ├── README.md ├── functions └── mongodb-graphql │ ├── db.js │ ├── mongodb-graphql.js │ ├── package-lock.json │ ├── package.json │ ├── resolvers.js │ └── typedefs.js └── netlify.toml /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .netlify 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Netlify Functions: MongoDB + GraphQL 2 | 3 | A Netlify functions template for Apollo Server GraphQL API with MongoDB. 4 | 5 | ## Add to Existing Project 6 | cd into your project directory and run `netlify functions:create` to create a new function. 7 | 8 | select `*** Clone template from Github URL ***` from the list of templates. 9 | 10 | In the URL field enter `https://github.com/akshayymahajan/netlify-functions-mongodb-graphql/tree/master/functions/mongodb-graphql` 11 | 12 | Netlify CLI will download the function and install all the dependencies in your project. 13 | 14 | 15 | ## Local Development 16 | Clone the repository and run the following commands to install all the dependencies: 17 | ``` 18 | cd netlify-functions-mongodb-graphql/functions/mongodb-graphql 19 | npm i 20 | ``` 21 | 22 | ### Setup Environment Variables in your Netlify Site Settings 23 | 24 | Login to your [Netlify](https://app.netlify.com) account. Go to and select your site, then go to: 25 | ```Site Settings > Build & Deploy > Environment``` 26 | 27 | Then click on **Edit Variables** and setup the following variables: 28 | 29 | ``` 30 | DB_URI = 31 | DB_NAME = 32 | ``` 33 | 34 | ### typedefs.js 35 | 36 | Edit ```typedefs.js``` according to your GraphQL schema. 37 | ``` 38 | type Todo { 39 | id: ID! 40 | title: String! 41 | completed: Boolean! 42 | } 43 | 44 | type Query { 45 | allTodos: [Todo] 46 | } 47 | ``` 48 | 49 | ### resolvers.js 50 | 51 | Edit ```resolvers.js``` to return the resolvers for your schema. 52 | ``` 53 | { 54 | Query: { 55 | allTodos: async () => 56 | await db 57 | .collection("todos") 58 | .find() 59 | .toArray() 60 | } 61 | } 62 | ``` 63 | 64 | ### Run Dev Server 65 | 66 | Open a terminal and run ```netlify dev``` to start the dev server. Netlify Dev will automatically fetch and inject the environment variables from your Netlify Site Settings and start a local dev sever on http://localhost:8888. To access GraphQL Playground, visit http://localhost:8888/.netlify/functions/mongodb-graphql in a browser window. 67 | -------------------------------------------------------------------------------- /functions/mongodb-graphql/db.js: -------------------------------------------------------------------------------- 1 | const MongoClient = require("mongodb").MongoClient; 2 | const URI = process.env.DB_URI; 3 | const DB_NAME = process.env.DB_NAME; 4 | 5 | let cachedDb = null; 6 | module.exports = () => { 7 | if (cachedDb && cachedDb.serverConfig.isConnected()) { 8 | return Promise.resolve(cachedDb); 9 | } 10 | return MongoClient.connect(URI, { useNewUrlParser: true }).then(client => { 11 | cachedDb = client.db(DB_NAME); 12 | return cachedDb; 13 | }); 14 | }; 15 | -------------------------------------------------------------------------------- /functions/mongodb-graphql/mongodb-graphql.js: -------------------------------------------------------------------------------- 1 | const { ApolloServer } = require("apollo-server-lambda"); 2 | const typeDefs = require("./typedefs"); 3 | const resolvers = require("./resolvers"); 4 | const connectToMongoDB = require("./db"); 5 | 6 | exports.handler = async function(event, context) { 7 | const db = await connectToMongoDB(); 8 | const server = new ApolloServer({ 9 | typeDefs, 10 | resolvers: resolvers(db) 11 | }); 12 | return new Promise((yay, nay) => { 13 | const cb = (err, args) => (err ? nay(err) : yay(args)); 14 | server.createHandler()(event, context, cb); 15 | }); 16 | }; 17 | -------------------------------------------------------------------------------- /functions/mongodb-graphql/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "netlify-functions-mongodb-graphql", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@apollo/protobufjs": { 8 | "version": "1.0.4", 9 | "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.0.4.tgz", 10 | "integrity": "sha512-EE3zx+/D/wur/JiLp6VCiw1iYdyy1lCJMf8CGPkLeDt5QJrN4N8tKFx33Ah4V30AUQzMk7Uz4IXKZ1LOj124gA==", 11 | "requires": { 12 | "@protobufjs/aspromise": "^1.1.2", 13 | "@protobufjs/base64": "^1.1.2", 14 | "@protobufjs/codegen": "^2.0.4", 15 | "@protobufjs/eventemitter": "^1.1.0", 16 | "@protobufjs/fetch": "^1.1.0", 17 | "@protobufjs/float": "^1.0.2", 18 | "@protobufjs/inquire": "^1.1.0", 19 | "@protobufjs/path": "^1.1.2", 20 | "@protobufjs/pool": "^1.1.0", 21 | "@protobufjs/utf8": "^1.1.0", 22 | "@types/long": "^4.0.0", 23 | "@types/node": "^10.1.0", 24 | "long": "^4.0.0" 25 | }, 26 | "dependencies": { 27 | "@types/node": { 28 | "version": "10.17.24", 29 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.24.tgz", 30 | "integrity": "sha512-5SCfvCxV74kzR3uWgTYiGxrd69TbT1I6+cMx1A5kEly/IVveJBimtAMlXiEyVFn5DvUFewQWxOOiJhlxeQwxgA==" 31 | } 32 | } 33 | }, 34 | "@apollographql/apollo-tools": { 35 | "version": "0.4.8", 36 | "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.4.8.tgz", 37 | "integrity": "sha512-W2+HB8Y7ifowcf3YyPHgDI05izyRtOeZ4MqIr7LbTArtmJ0ZHULWpn84SGMW7NAvTV1tFExpHlveHhnXuJfuGA==", 38 | "requires": { 39 | "apollo-env": "^0.6.5" 40 | } 41 | }, 42 | "@apollographql/graphql-playground-html": { 43 | "version": "1.6.24", 44 | "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.24.tgz", 45 | "integrity": "sha512-8GqG48m1XqyXh4mIZrtB5xOhUwSsh1WsrrsaZQOEYYql3YN9DEu9OOSg0ILzXHZo/h2Q74777YE4YzlArQzQEQ==" 46 | }, 47 | "@protobufjs/aspromise": { 48 | "version": "1.1.2", 49 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 50 | "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" 51 | }, 52 | "@protobufjs/base64": { 53 | "version": "1.1.2", 54 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 55 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" 56 | }, 57 | "@protobufjs/codegen": { 58 | "version": "2.0.4", 59 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 60 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" 61 | }, 62 | "@protobufjs/eventemitter": { 63 | "version": "1.1.0", 64 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 65 | "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" 66 | }, 67 | "@protobufjs/fetch": { 68 | "version": "1.1.0", 69 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 70 | "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", 71 | "requires": { 72 | "@protobufjs/aspromise": "^1.1.1", 73 | "@protobufjs/inquire": "^1.1.0" 74 | } 75 | }, 76 | "@protobufjs/float": { 77 | "version": "1.0.2", 78 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 79 | "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" 80 | }, 81 | "@protobufjs/inquire": { 82 | "version": "1.1.0", 83 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 84 | "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" 85 | }, 86 | "@protobufjs/path": { 87 | "version": "1.1.2", 88 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 89 | "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" 90 | }, 91 | "@protobufjs/pool": { 92 | "version": "1.1.0", 93 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 94 | "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" 95 | }, 96 | "@protobufjs/utf8": { 97 | "version": "1.1.0", 98 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 99 | "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" 100 | }, 101 | "@types/accepts": { 102 | "version": "1.3.5", 103 | "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", 104 | "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", 105 | "requires": { 106 | "@types/node": "*" 107 | } 108 | }, 109 | "@types/aws-lambda": { 110 | "version": "8.10.53", 111 | "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.53.tgz", 112 | "integrity": "sha512-zHIgKKqwcdeHkPMPKd47DedJ4b+Tv01VGosWtJDMa8s6cnx03IeNagFWEpoxVI+H34fOvxtbqecJddpuVFbU2w==" 113 | }, 114 | "@types/body-parser": { 115 | "version": "1.19.0", 116 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", 117 | "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", 118 | "requires": { 119 | "@types/connect": "*", 120 | "@types/node": "*" 121 | } 122 | }, 123 | "@types/connect": { 124 | "version": "3.4.33", 125 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", 126 | "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==", 127 | "requires": { 128 | "@types/node": "*" 129 | } 130 | }, 131 | "@types/content-disposition": { 132 | "version": "0.5.3", 133 | "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.3.tgz", 134 | "integrity": "sha512-P1bffQfhD3O4LW0ioENXUhZ9OIa0Zn+P7M+pWgkCKaT53wVLSq0mrKksCID/FGHpFhRSxRGhgrQmfhRuzwtKdg==" 135 | }, 136 | "@types/cookies": { 137 | "version": "0.7.4", 138 | "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.4.tgz", 139 | "integrity": "sha512-oTGtMzZZAVuEjTwCjIh8T8FrC8n/uwy+PG0yTvQcdZ7etoel7C7/3MSd7qrukENTgQtotG7gvBlBojuVs7X5rw==", 140 | "requires": { 141 | "@types/connect": "*", 142 | "@types/express": "*", 143 | "@types/keygrip": "*", 144 | "@types/node": "*" 145 | } 146 | }, 147 | "@types/express": { 148 | "version": "4.17.6", 149 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.6.tgz", 150 | "integrity": "sha512-n/mr9tZI83kd4azlPG5y997C/M4DNABK9yErhFM6hKdym4kkmd9j0vtsJyjFIwfRBxtrxZtAfGZCNRIBMFLK5w==", 151 | "requires": { 152 | "@types/body-parser": "*", 153 | "@types/express-serve-static-core": "*", 154 | "@types/qs": "*", 155 | "@types/serve-static": "*" 156 | } 157 | }, 158 | "@types/express-serve-static-core": { 159 | "version": "4.17.7", 160 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.7.tgz", 161 | "integrity": "sha512-EMgTj/DF9qpgLXyc+Btimg+XoH7A2liE8uKul8qSmMTHCeNYzydDKFdsJskDvw42UsesCnhO63dO0Grbj8J4Dw==", 162 | "requires": { 163 | "@types/node": "*", 164 | "@types/qs": "*", 165 | "@types/range-parser": "*" 166 | } 167 | }, 168 | "@types/fs-capacitor": { 169 | "version": "2.0.0", 170 | "resolved": "https://registry.npmjs.org/@types/fs-capacitor/-/fs-capacitor-2.0.0.tgz", 171 | "integrity": "sha512-FKVPOCFbhCvZxpVAMhdBdTfVfXUpsh15wFHgqOKxh9N9vzWZVuWCSijZ5T4U34XYNnuj2oduh6xcs1i+LPI+BQ==", 172 | "requires": { 173 | "@types/node": "*" 174 | } 175 | }, 176 | "@types/graphql-upload": { 177 | "version": "8.0.3", 178 | "resolved": "https://registry.npmjs.org/@types/graphql-upload/-/graphql-upload-8.0.3.tgz", 179 | "integrity": "sha512-hmLg9pCU/GmxBscg8GCr1vmSoEmbItNNxdD5YH2TJkXm//8atjwuprB+xJBK714JG1dkxbbhp5RHX+Pz1KsCMA==", 180 | "requires": { 181 | "@types/express": "*", 182 | "@types/fs-capacitor": "*", 183 | "@types/koa": "*", 184 | "graphql": "^14.5.3" 185 | }, 186 | "dependencies": { 187 | "graphql": { 188 | "version": "14.6.0", 189 | "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.6.0.tgz", 190 | "integrity": "sha512-VKzfvHEKybTKjQVpTFrA5yUq2S9ihcZvfJAtsDBBCuV6wauPu1xl/f9ehgVf0FcEJJs4vz6ysb/ZMkGigQZseg==", 191 | "requires": { 192 | "iterall": "^1.2.2" 193 | } 194 | } 195 | } 196 | }, 197 | "@types/http-assert": { 198 | "version": "1.5.1", 199 | "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.1.tgz", 200 | "integrity": "sha512-PGAK759pxyfXE78NbKxyfRcWYA/KwW17X290cNev/qAsn9eQIxkH4shoNBafH37wewhDG/0p1cHPbK6+SzZjWQ==" 201 | }, 202 | "@types/keygrip": { 203 | "version": "1.0.2", 204 | "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz", 205 | "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==" 206 | }, 207 | "@types/koa": { 208 | "version": "2.11.3", 209 | "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.11.3.tgz", 210 | "integrity": "sha512-ABxVkrNWa4O/Jp24EYI/hRNqEVRlhB9g09p48neQp4m3xL1TJtdWk2NyNQSMCU45ejeELMQZBYyfstyVvO2H3Q==", 211 | "requires": { 212 | "@types/accepts": "*", 213 | "@types/content-disposition": "*", 214 | "@types/cookies": "*", 215 | "@types/http-assert": "*", 216 | "@types/keygrip": "*", 217 | "@types/koa-compose": "*", 218 | "@types/node": "*" 219 | } 220 | }, 221 | "@types/koa-compose": { 222 | "version": "3.2.5", 223 | "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz", 224 | "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==", 225 | "requires": { 226 | "@types/koa": "*" 227 | } 228 | }, 229 | "@types/long": { 230 | "version": "4.0.1", 231 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", 232 | "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" 233 | }, 234 | "@types/mime": { 235 | "version": "2.0.2", 236 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.2.tgz", 237 | "integrity": "sha512-4kPlzbljFcsttWEq6aBW0OZe6BDajAmyvr2xknBG92tejQnvdGtT9+kXSZ580DqpxY9qG2xeQVF9Dq0ymUTo5Q==" 238 | }, 239 | "@types/node": { 240 | "version": "14.0.11", 241 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.11.tgz", 242 | "integrity": "sha512-lCvvI24L21ZVeIiyIUHZ5Oflv1hhHQ5E1S25IRlKIXaRkVgmXpJMI3wUJkmym2bTbCe+WoIibQnMVAU3FguaOg==" 243 | }, 244 | "@types/node-fetch": { 245 | "version": "2.5.7", 246 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.7.tgz", 247 | "integrity": "sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw==", 248 | "requires": { 249 | "@types/node": "*", 250 | "form-data": "^3.0.0" 251 | } 252 | }, 253 | "@types/qs": { 254 | "version": "6.9.3", 255 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.3.tgz", 256 | "integrity": "sha512-7s9EQWupR1fTc2pSMtXRQ9w9gLOcrJn+h7HOXw4evxyvVqMi4f+q7d2tnFe3ng3SNHjtK+0EzGMGFUQX4/AQRA==" 257 | }, 258 | "@types/range-parser": { 259 | "version": "1.2.3", 260 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", 261 | "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" 262 | }, 263 | "@types/serve-static": { 264 | "version": "1.13.4", 265 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.4.tgz", 266 | "integrity": "sha512-jTDt0o/YbpNwZbQmE/+2e+lfjJEJJR0I3OFaKQKPWkASkCoW3i6fsUnqudSMcNAfbtmADGu8f4MV4q+GqULmug==", 267 | "requires": { 268 | "@types/express-serve-static-core": "*", 269 | "@types/mime": "*" 270 | } 271 | }, 272 | "@types/ws": { 273 | "version": "7.2.5", 274 | "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.2.5.tgz", 275 | "integrity": "sha512-4UEih9BI1nBKii385G9id1oFrSkLcClbwtDfcYj8HJLQqZVAtb/42vXVrYvRWCcufNF/a+rZD3MxNwghA7UmCg==", 276 | "requires": { 277 | "@types/node": "*" 278 | } 279 | }, 280 | "@wry/equality": { 281 | "version": "0.1.11", 282 | "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.1.11.tgz", 283 | "integrity": "sha512-mwEVBDUVODlsQQ5dfuLUS5/Tf7jqUKyhKYHmVi4fPB6bDMOfWvUPJmKgS1Z7Za/sOI3vzWt4+O7yCiL/70MogA==", 284 | "requires": { 285 | "tslib": "^1.9.3" 286 | } 287 | }, 288 | "apollo-cache-control": { 289 | "version": "0.11.0", 290 | "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.11.0.tgz", 291 | "integrity": "sha512-dmRnQ9AXGw2SHahVGLzB/p4UW/taFBAJxifxubp8hqY5p9qdlSu4MPRq8zvV2ULMYf50rBtZyC4C+dZLqmHuHQ==", 292 | "requires": { 293 | "apollo-server-env": "^2.4.4", 294 | "apollo-server-plugin-base": "^0.9.0" 295 | } 296 | }, 297 | "apollo-datasource": { 298 | "version": "0.7.1", 299 | "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.7.1.tgz", 300 | "integrity": "sha512-h++/jQAY7GA+4TBM+7ezvctFmmGNLrAPf51KsagZj+NkT9qvxp585rdsuatynVbSl59toPK2EuVmc6ilmQHf+g==", 301 | "requires": { 302 | "apollo-server-caching": "^0.5.1", 303 | "apollo-server-env": "^2.4.4" 304 | } 305 | }, 306 | "apollo-engine-reporting": { 307 | "version": "2.0.0", 308 | "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-2.0.0.tgz", 309 | "integrity": "sha512-FvNwORsh3nxEfvQqd2xbd468a0q/R3kYar/Bk6YQdBX5qwqUhqmOcOSxLFk8Zb77HpwHij5CPpPWJb53TU1zcA==", 310 | "requires": { 311 | "apollo-engine-reporting-protobuf": "^0.5.1", 312 | "apollo-graphql": "^0.4.0", 313 | "apollo-server-caching": "^0.5.1", 314 | "apollo-server-env": "^2.4.4", 315 | "apollo-server-errors": "^2.4.1", 316 | "apollo-server-plugin-base": "^0.9.0", 317 | "apollo-server-types": "^0.5.0", 318 | "async-retry": "^1.2.1", 319 | "uuid": "^8.0.0" 320 | } 321 | }, 322 | "apollo-engine-reporting-protobuf": { 323 | "version": "0.5.1", 324 | "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.5.1.tgz", 325 | "integrity": "sha512-TSfr9iAaInV8dhXkesdcmqsthRkVcJkzznmiM+1Ob/GScK7r6hBYCjVDt2613EHAg9SUzTOltIKlGD+N+GJRUw==", 326 | "requires": { 327 | "@apollo/protobufjs": "^1.0.3" 328 | } 329 | }, 330 | "apollo-env": { 331 | "version": "0.6.5", 332 | "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.6.5.tgz", 333 | "integrity": "sha512-jeBUVsGymeTHYWp3me0R2CZRZrFeuSZeICZHCeRflHTfnQtlmbSXdy5E0pOyRM9CU4JfQkKDC98S1YglQj7Bzg==", 334 | "requires": { 335 | "@types/node-fetch": "2.5.7", 336 | "core-js": "^3.0.1", 337 | "node-fetch": "^2.2.0", 338 | "sha.js": "^2.4.11" 339 | } 340 | }, 341 | "apollo-graphql": { 342 | "version": "0.4.4", 343 | "resolved": "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.4.4.tgz", 344 | "integrity": "sha512-i012iRKT5nfsOaNMx4MTwHw2jrlyaF1zikpejxsGHsKIf3OngGvGh3pyw20bEmwj413OrNQpRxvvIz5A7W/8xw==", 345 | "requires": { 346 | "apollo-env": "^0.6.5", 347 | "lodash.sortby": "^4.7.0" 348 | } 349 | }, 350 | "apollo-link": { 351 | "version": "1.2.14", 352 | "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.14.tgz", 353 | "integrity": "sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg==", 354 | "requires": { 355 | "apollo-utilities": "^1.3.0", 356 | "ts-invariant": "^0.4.0", 357 | "tslib": "^1.9.3", 358 | "zen-observable-ts": "^0.8.21" 359 | } 360 | }, 361 | "apollo-server-caching": { 362 | "version": "0.5.1", 363 | "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.5.1.tgz", 364 | "integrity": "sha512-L7LHZ3k9Ao5OSf2WStvQhxdsNVplRQi7kCAPfqf9Z3GBEnQ2uaL0EgO0hSmtVHfXTbk5CTRziMT1Pe87bXrFIw==", 365 | "requires": { 366 | "lru-cache": "^5.0.0" 367 | } 368 | }, 369 | "apollo-server-core": { 370 | "version": "2.14.2", 371 | "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.14.2.tgz", 372 | "integrity": "sha512-8G6Aoz+k+ecuQco1KNLFbMrxhe/8uR4AOaOYEvT/N5m/6lrkPYzvBAxbpRIub5AxEwpBPcIrI452rR3PD9DItA==", 373 | "requires": { 374 | "@apollographql/apollo-tools": "^0.4.3", 375 | "@apollographql/graphql-playground-html": "1.6.24", 376 | "@types/graphql-upload": "^8.0.0", 377 | "@types/ws": "^7.0.0", 378 | "apollo-cache-control": "^0.11.0", 379 | "apollo-datasource": "^0.7.1", 380 | "apollo-engine-reporting": "^2.0.0", 381 | "apollo-server-caching": "^0.5.1", 382 | "apollo-server-env": "^2.4.4", 383 | "apollo-server-errors": "^2.4.1", 384 | "apollo-server-plugin-base": "^0.9.0", 385 | "apollo-server-types": "^0.5.0", 386 | "apollo-tracing": "^0.11.0", 387 | "fast-json-stable-stringify": "^2.0.0", 388 | "graphql-extensions": "^0.12.2", 389 | "graphql-tag": "^2.9.2", 390 | "graphql-tools": "^4.0.0", 391 | "graphql-upload": "^8.0.2", 392 | "loglevel": "^1.6.7", 393 | "sha.js": "^2.4.11", 394 | "subscriptions-transport-ws": "^0.9.11", 395 | "ws": "^6.0.0" 396 | } 397 | }, 398 | "apollo-server-env": { 399 | "version": "2.4.4", 400 | "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.4.4.tgz", 401 | "integrity": "sha512-c2oddDS3lwAl6QNCIKCLEzt/dF9M3/tjjYRVdxOVN20TidybI7rAbnT4QOzf4tORnGXtiznEAvr/Kc9ahhKADg==", 402 | "requires": { 403 | "node-fetch": "^2.1.2", 404 | "util.promisify": "^1.0.0" 405 | } 406 | }, 407 | "apollo-server-errors": { 408 | "version": "2.4.1", 409 | "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.4.1.tgz", 410 | "integrity": "sha512-7oEd6pUxqyWYUbQ9TA8tM0NU/3aGtXSEibo6+txUkuHe7QaxfZ2wHRp+pfT1LC1K3RXYjKj61/C2xEO19s3Kdg==" 411 | }, 412 | "apollo-server-lambda": { 413 | "version": "2.14.2", 414 | "resolved": "https://registry.npmjs.org/apollo-server-lambda/-/apollo-server-lambda-2.14.2.tgz", 415 | "integrity": "sha512-nx/NPVZRPhqoOw1Fi4zSQmNS7r8vLw9l11V880qm1f8mMes1AZzCJdn/pSZEgt7nMKS4YmOkeSDvaj/9XvqqYw==", 416 | "requires": { 417 | "@apollographql/graphql-playground-html": "1.6.24", 418 | "@types/aws-lambda": "^8.10.31", 419 | "apollo-server-core": "^2.14.2", 420 | "apollo-server-env": "^2.4.4", 421 | "apollo-server-types": "^0.5.0", 422 | "graphql-tools": "^4.0.0" 423 | } 424 | }, 425 | "apollo-server-plugin-base": { 426 | "version": "0.9.0", 427 | "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.9.0.tgz", 428 | "integrity": "sha512-LWcPrsy2+xqwlNseh/QaGa/MPNopS8c4qGgh0g0cAn0lZBRrJ9Yab7dq+iQ6vdUBwIhUWYN6s9dwUWCZw2SL8g==", 429 | "requires": { 430 | "apollo-server-types": "^0.5.0" 431 | } 432 | }, 433 | "apollo-server-types": { 434 | "version": "0.5.0", 435 | "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-0.5.0.tgz", 436 | "integrity": "sha512-zhtsqqqfdeoJQAfc41Sy6WnnBVxKNgZ34BKXf/Q+kXmw7rbZ/B5SG3SJMvj1iFsbzZxILmWdUsE9aD20lEr0bg==", 437 | "requires": { 438 | "apollo-engine-reporting-protobuf": "^0.5.1", 439 | "apollo-server-caching": "^0.5.1", 440 | "apollo-server-env": "^2.4.4" 441 | } 442 | }, 443 | "apollo-tracing": { 444 | "version": "0.11.0", 445 | "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.11.0.tgz", 446 | "integrity": "sha512-I9IFb/8lkBW8ZwOAi4LEojfT7dMfUSkpnV8LHQI8Rcj0HtzL9HObQ3woBmzyGHdGHLFuD/6/VHyFD67SesSrJg==", 447 | "requires": { 448 | "apollo-server-env": "^2.4.4", 449 | "apollo-server-plugin-base": "^0.9.0" 450 | } 451 | }, 452 | "apollo-utilities": { 453 | "version": "1.3.4", 454 | "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.4.tgz", 455 | "integrity": "sha512-pk2hiWrCXMAy2fRPwEyhvka+mqwzeP60Jr1tRYi5xru+3ko94HI9o6lK0CT33/w4RDlxWchmdhDCrvdr+pHCig==", 456 | "requires": { 457 | "@wry/equality": "^0.1.2", 458 | "fast-json-stable-stringify": "^2.0.0", 459 | "ts-invariant": "^0.4.0", 460 | "tslib": "^1.10.0" 461 | } 462 | }, 463 | "async-limiter": { 464 | "version": "1.0.1", 465 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", 466 | "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" 467 | }, 468 | "async-retry": { 469 | "version": "1.3.1", 470 | "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.1.tgz", 471 | "integrity": "sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA==", 472 | "requires": { 473 | "retry": "0.12.0" 474 | } 475 | }, 476 | "asynckit": { 477 | "version": "0.4.0", 478 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 479 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 480 | }, 481 | "backo2": { 482 | "version": "1.0.2", 483 | "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", 484 | "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" 485 | }, 486 | "bson": { 487 | "version": "1.1.1", 488 | "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz", 489 | "integrity": "sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg==" 490 | }, 491 | "busboy": { 492 | "version": "0.3.1", 493 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz", 494 | "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==", 495 | "requires": { 496 | "dicer": "0.3.0" 497 | } 498 | }, 499 | "combined-stream": { 500 | "version": "1.0.8", 501 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 502 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 503 | "requires": { 504 | "delayed-stream": "~1.0.0" 505 | } 506 | }, 507 | "core-js": { 508 | "version": "3.6.5", 509 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", 510 | "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" 511 | }, 512 | "define-properties": { 513 | "version": "1.1.3", 514 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 515 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 516 | "requires": { 517 | "object-keys": "^1.0.12" 518 | } 519 | }, 520 | "delayed-stream": { 521 | "version": "1.0.0", 522 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 523 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 524 | }, 525 | "depd": { 526 | "version": "1.1.2", 527 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 528 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 529 | }, 530 | "deprecated-decorator": { 531 | "version": "0.1.6", 532 | "resolved": "https://registry.npmjs.org/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz", 533 | "integrity": "sha1-AJZjF7ehL+kvPMgx91g68ym4bDc=" 534 | }, 535 | "dicer": { 536 | "version": "0.3.0", 537 | "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", 538 | "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", 539 | "requires": { 540 | "streamsearch": "0.1.2" 541 | } 542 | }, 543 | "es-abstract": { 544 | "version": "1.17.5", 545 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", 546 | "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", 547 | "requires": { 548 | "es-to-primitive": "^1.2.1", 549 | "function-bind": "^1.1.1", 550 | "has": "^1.0.3", 551 | "has-symbols": "^1.0.1", 552 | "is-callable": "^1.1.5", 553 | "is-regex": "^1.0.5", 554 | "object-inspect": "^1.7.0", 555 | "object-keys": "^1.1.1", 556 | "object.assign": "^4.1.0", 557 | "string.prototype.trimleft": "^2.1.1", 558 | "string.prototype.trimright": "^2.1.1" 559 | } 560 | }, 561 | "es-to-primitive": { 562 | "version": "1.2.1", 563 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 564 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 565 | "requires": { 566 | "is-callable": "^1.1.4", 567 | "is-date-object": "^1.0.1", 568 | "is-symbol": "^1.0.2" 569 | } 570 | }, 571 | "eventemitter3": { 572 | "version": "3.1.2", 573 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", 574 | "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" 575 | }, 576 | "fast-json-stable-stringify": { 577 | "version": "2.1.0", 578 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 579 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 580 | }, 581 | "form-data": { 582 | "version": "3.0.0", 583 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", 584 | "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", 585 | "requires": { 586 | "asynckit": "^0.4.0", 587 | "combined-stream": "^1.0.8", 588 | "mime-types": "^2.1.12" 589 | } 590 | }, 591 | "fs-capacitor": { 592 | "version": "2.0.4", 593 | "resolved": "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-2.0.4.tgz", 594 | "integrity": "sha512-8S4f4WsCryNw2mJJchi46YgB6CR5Ze+4L1h8ewl9tEpL4SJ3ZO+c/bS4BWhB8bK+O3TMqhuZarTitd0S0eh2pA==" 595 | }, 596 | "function-bind": { 597 | "version": "1.1.1", 598 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 599 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 600 | }, 601 | "graphql": { 602 | "version": "14.4.1", 603 | "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.4.1.tgz", 604 | "integrity": "sha512-g4HUH26CohlMjaHneXMAtvG3QtO6peJIUTFxrPW4g5LNnXkUuFoBI6Bk1c14Q5kW8+FyjM/tTbePTgpiVB/2hQ==", 605 | "requires": { 606 | "iterall": "^1.2.2" 607 | } 608 | }, 609 | "graphql-extensions": { 610 | "version": "0.12.2", 611 | "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.12.2.tgz", 612 | "integrity": "sha512-vFaZua5aLiCOOzxfY5qzHZ6S52BCqW7VVOwzvV52Wb5edRm3dn6u+1MR9yYyEqUHSf8LvdhEojYlOkKiaQ4ghA==", 613 | "requires": { 614 | "@apollographql/apollo-tools": "^0.4.3", 615 | "apollo-server-env": "^2.4.4", 616 | "apollo-server-types": "^0.5.0" 617 | } 618 | }, 619 | "graphql-tag": { 620 | "version": "2.10.3", 621 | "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.3.tgz", 622 | "integrity": "sha512-4FOv3ZKfA4WdOKJeHdz6B3F/vxBLSgmBcGeAFPf4n1F64ltJUvOOerNj0rsJxONQGdhUMynQIvd6LzB+1J5oKA==" 623 | }, 624 | "graphql-tools": { 625 | "version": "4.0.8", 626 | "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.8.tgz", 627 | "integrity": "sha512-MW+ioleBrwhRjalKjYaLQbr+920pHBgy9vM/n47sswtns8+96sRn5M/G+J1eu7IMeKWiN/9p6tmwCHU7552VJg==", 628 | "requires": { 629 | "apollo-link": "^1.2.14", 630 | "apollo-utilities": "^1.0.1", 631 | "deprecated-decorator": "^0.1.6", 632 | "iterall": "^1.1.3", 633 | "uuid": "^3.1.0" 634 | }, 635 | "dependencies": { 636 | "uuid": { 637 | "version": "3.4.0", 638 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 639 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" 640 | } 641 | } 642 | }, 643 | "graphql-upload": { 644 | "version": "8.1.0", 645 | "resolved": "https://registry.npmjs.org/graphql-upload/-/graphql-upload-8.1.0.tgz", 646 | "integrity": "sha512-U2OiDI5VxYmzRKw0Z2dmfk0zkqMRaecH9Smh1U277gVgVe9Qn+18xqf4skwr4YJszGIh7iQDZ57+5ygOK9sM/Q==", 647 | "requires": { 648 | "busboy": "^0.3.1", 649 | "fs-capacitor": "^2.0.4", 650 | "http-errors": "^1.7.3", 651 | "object-path": "^0.11.4" 652 | } 653 | }, 654 | "has": { 655 | "version": "1.0.3", 656 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 657 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 658 | "requires": { 659 | "function-bind": "^1.1.1" 660 | } 661 | }, 662 | "has-symbols": { 663 | "version": "1.0.1", 664 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 665 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" 666 | }, 667 | "http-errors": { 668 | "version": "1.7.3", 669 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", 670 | "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", 671 | "requires": { 672 | "depd": "~1.1.2", 673 | "inherits": "2.0.4", 674 | "setprototypeof": "1.1.1", 675 | "statuses": ">= 1.5.0 < 2", 676 | "toidentifier": "1.0.0" 677 | } 678 | }, 679 | "inherits": { 680 | "version": "2.0.4", 681 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 682 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 683 | }, 684 | "is-callable": { 685 | "version": "1.2.0", 686 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", 687 | "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==" 688 | }, 689 | "is-date-object": { 690 | "version": "1.0.2", 691 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", 692 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" 693 | }, 694 | "is-regex": { 695 | "version": "1.1.0", 696 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", 697 | "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", 698 | "requires": { 699 | "has-symbols": "^1.0.1" 700 | } 701 | }, 702 | "is-symbol": { 703 | "version": "1.0.3", 704 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 705 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 706 | "requires": { 707 | "has-symbols": "^1.0.1" 708 | } 709 | }, 710 | "iterall": { 711 | "version": "1.2.2", 712 | "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", 713 | "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" 714 | }, 715 | "lodash.sortby": { 716 | "version": "4.7.0", 717 | "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", 718 | "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" 719 | }, 720 | "loglevel": { 721 | "version": "1.6.8", 722 | "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", 723 | "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==" 724 | }, 725 | "long": { 726 | "version": "4.0.0", 727 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", 728 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" 729 | }, 730 | "lru-cache": { 731 | "version": "5.1.1", 732 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 733 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 734 | "requires": { 735 | "yallist": "^3.0.2" 736 | } 737 | }, 738 | "memory-pager": { 739 | "version": "1.5.0", 740 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 741 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 742 | "optional": true 743 | }, 744 | "mime-db": { 745 | "version": "1.44.0", 746 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 747 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" 748 | }, 749 | "mime-types": { 750 | "version": "2.1.27", 751 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 752 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 753 | "requires": { 754 | "mime-db": "1.44.0" 755 | } 756 | }, 757 | "mongodb": { 758 | "version": "3.2.7", 759 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.2.7.tgz", 760 | "integrity": "sha512-2YdWrdf1PJgxcCrT1tWoL6nHuk6hCxhddAAaEh8QJL231ci4+P9FLyqopbTm2Z2sAU6mhCri+wd9r1hOcHdoMw==", 761 | "requires": { 762 | "mongodb-core": "3.2.7", 763 | "safe-buffer": "^5.1.2" 764 | } 765 | }, 766 | "mongodb-core": { 767 | "version": "3.2.7", 768 | "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.2.7.tgz", 769 | "integrity": "sha512-WypKdLxFNPOH/Jy6i9z47IjG2wIldA54iDZBmHMINcgKOUcWJh8og+Wix76oGd7EyYkHJKssQ2FAOw5Su/n4XQ==", 770 | "requires": { 771 | "bson": "^1.1.1", 772 | "require_optional": "^1.0.1", 773 | "safe-buffer": "^5.1.2", 774 | "saslprep": "^1.0.0" 775 | } 776 | }, 777 | "node-fetch": { 778 | "version": "2.6.1", 779 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 780 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" 781 | }, 782 | "object-inspect": { 783 | "version": "1.7.0", 784 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", 785 | "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" 786 | }, 787 | "object-keys": { 788 | "version": "1.1.1", 789 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 790 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" 791 | }, 792 | "object-path": { 793 | "version": "0.11.5", 794 | "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.5.tgz", 795 | "integrity": "sha512-jgSbThcoR/s+XumvGMTMf81QVBmah+/Q7K7YduKeKVWL7N111unR2d6pZZarSk6kY/caeNxUDyxOvMWyzoU2eg==" 796 | }, 797 | "object.assign": { 798 | "version": "4.1.0", 799 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 800 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 801 | "requires": { 802 | "define-properties": "^1.1.2", 803 | "function-bind": "^1.1.1", 804 | "has-symbols": "^1.0.0", 805 | "object-keys": "^1.0.11" 806 | } 807 | }, 808 | "object.getownpropertydescriptors": { 809 | "version": "2.1.0", 810 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", 811 | "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", 812 | "requires": { 813 | "define-properties": "^1.1.3", 814 | "es-abstract": "^1.17.0-next.1" 815 | } 816 | }, 817 | "require_optional": { 818 | "version": "1.0.1", 819 | "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", 820 | "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", 821 | "requires": { 822 | "resolve-from": "^2.0.0", 823 | "semver": "^5.1.0" 824 | } 825 | }, 826 | "resolve-from": { 827 | "version": "2.0.0", 828 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", 829 | "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" 830 | }, 831 | "retry": { 832 | "version": "0.12.0", 833 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", 834 | "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" 835 | }, 836 | "safe-buffer": { 837 | "version": "5.1.2", 838 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 839 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 840 | }, 841 | "saslprep": { 842 | "version": "1.0.3", 843 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 844 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 845 | "optional": true, 846 | "requires": { 847 | "sparse-bitfield": "^3.0.3" 848 | } 849 | }, 850 | "semver": { 851 | "version": "5.7.0", 852 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", 853 | "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" 854 | }, 855 | "setprototypeof": { 856 | "version": "1.1.1", 857 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 858 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 859 | }, 860 | "sha.js": { 861 | "version": "2.4.11", 862 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", 863 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", 864 | "requires": { 865 | "inherits": "^2.0.1", 866 | "safe-buffer": "^5.0.1" 867 | } 868 | }, 869 | "sparse-bitfield": { 870 | "version": "3.0.3", 871 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 872 | "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", 873 | "optional": true, 874 | "requires": { 875 | "memory-pager": "^1.0.2" 876 | } 877 | }, 878 | "statuses": { 879 | "version": "1.5.0", 880 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 881 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 882 | }, 883 | "streamsearch": { 884 | "version": "0.1.2", 885 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", 886 | "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" 887 | }, 888 | "string.prototype.trimend": { 889 | "version": "1.0.1", 890 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", 891 | "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", 892 | "requires": { 893 | "define-properties": "^1.1.3", 894 | "es-abstract": "^1.17.5" 895 | } 896 | }, 897 | "string.prototype.trimleft": { 898 | "version": "2.1.2", 899 | "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", 900 | "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", 901 | "requires": { 902 | "define-properties": "^1.1.3", 903 | "es-abstract": "^1.17.5", 904 | "string.prototype.trimstart": "^1.0.0" 905 | } 906 | }, 907 | "string.prototype.trimright": { 908 | "version": "2.1.2", 909 | "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", 910 | "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", 911 | "requires": { 912 | "define-properties": "^1.1.3", 913 | "es-abstract": "^1.17.5", 914 | "string.prototype.trimend": "^1.0.0" 915 | } 916 | }, 917 | "string.prototype.trimstart": { 918 | "version": "1.0.1", 919 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", 920 | "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", 921 | "requires": { 922 | "define-properties": "^1.1.3", 923 | "es-abstract": "^1.17.5" 924 | } 925 | }, 926 | "subscriptions-transport-ws": { 927 | "version": "0.9.16", 928 | "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.16.tgz", 929 | "integrity": "sha512-pQdoU7nC+EpStXnCfh/+ho0zE0Z+ma+i7xvj7bkXKb1dvYHSZxgRPaU6spRP+Bjzow67c/rRDoix5RT0uU9omw==", 930 | "requires": { 931 | "backo2": "^1.0.2", 932 | "eventemitter3": "^3.1.0", 933 | "iterall": "^1.2.1", 934 | "symbol-observable": "^1.0.4", 935 | "ws": "^5.2.0" 936 | }, 937 | "dependencies": { 938 | "ws": { 939 | "version": "5.2.2", 940 | "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", 941 | "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", 942 | "requires": { 943 | "async-limiter": "~1.0.0" 944 | } 945 | } 946 | } 947 | }, 948 | "symbol-observable": { 949 | "version": "1.2.0", 950 | "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", 951 | "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" 952 | }, 953 | "toidentifier": { 954 | "version": "1.0.0", 955 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 956 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 957 | }, 958 | "ts-invariant": { 959 | "version": "0.4.4", 960 | "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.4.4.tgz", 961 | "integrity": "sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA==", 962 | "requires": { 963 | "tslib": "^1.9.3" 964 | } 965 | }, 966 | "tslib": { 967 | "version": "1.13.0", 968 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", 969 | "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" 970 | }, 971 | "util.promisify": { 972 | "version": "1.0.1", 973 | "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", 974 | "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", 975 | "requires": { 976 | "define-properties": "^1.1.3", 977 | "es-abstract": "^1.17.2", 978 | "has-symbols": "^1.0.1", 979 | "object.getownpropertydescriptors": "^2.1.0" 980 | } 981 | }, 982 | "uuid": { 983 | "version": "8.1.0", 984 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.1.0.tgz", 985 | "integrity": "sha512-CI18flHDznR0lq54xBycOVmphdCYnQLKn8abKn7PXUiKUGdEd+/l9LWNJmugXel4hXq7S+RMNl34ecyC9TntWg==" 986 | }, 987 | "ws": { 988 | "version": "6.2.1", 989 | "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", 990 | "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", 991 | "requires": { 992 | "async-limiter": "~1.0.0" 993 | } 994 | }, 995 | "yallist": { 996 | "version": "3.1.1", 997 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 998 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" 999 | }, 1000 | "zen-observable": { 1001 | "version": "0.8.15", 1002 | "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", 1003 | "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==" 1004 | }, 1005 | "zen-observable-ts": { 1006 | "version": "0.8.21", 1007 | "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz", 1008 | "integrity": "sha512-Yj3yXweRc8LdRMrCC8nIc4kkjWecPAUVh0TI0OUrWXx6aX790vLcDlWca6I4vsyCGH3LpWxq0dJRcMOFoVqmeg==", 1009 | "requires": { 1010 | "tslib": "^1.9.3", 1011 | "zen-observable": "^0.8.0" 1012 | } 1013 | } 1014 | } 1015 | } 1016 | -------------------------------------------------------------------------------- /functions/mongodb-graphql/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "netlify-functions-mongodb-graphql", 3 | "version": "1.0.0", 4 | "description": "A Netlify functions template for Apollo Server GraphQL API with MongoDB.", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [ 10 | "mongodb", 11 | "graphql", 12 | "apollo", 13 | "netlify" 14 | ], 15 | "author": "Akshay Mahajan", 16 | "license": "MIT", 17 | "dependencies": { 18 | "apollo-server-lambda": "^2.14.2", 19 | "graphql": "^14.3.1", 20 | "mongodb": "^3.2.7" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /functions/mongodb-graphql/resolvers.js: -------------------------------------------------------------------------------- 1 | module.exports = db => ({ 2 | Query: { 3 | allTodos: async () => 4 | await db 5 | .collection("todos") 6 | .find() 7 | .toArray() 8 | } 9 | }); 10 | -------------------------------------------------------------------------------- /functions/mongodb-graphql/typedefs.js: -------------------------------------------------------------------------------- 1 | const { gql } = require("apollo-server-lambda"); 2 | 3 | module.exports = gql` 4 | type Todo { 5 | id: ID! 6 | title: String! 7 | completed: Boolean! 8 | } 9 | 10 | type Query { 11 | allTodos: [Todo] 12 | } 13 | `; 14 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | command = "yarn run build" 3 | functions = "functions" 4 | publish = "build" --------------------------------------------------------------------------------