├── .gitignore ├── server ├── package.json ├── src │ └── index.js └── yarn.lock └── web ├── package.json ├── public ├── favicon.ico ├── index.html └── manifest.json ├── src ├── App.js ├── Files.js ├── Upload.js ├── apollo.js ├── index.js └── serviceWorker.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "dependencies": { 7 | "apollo-server-express": "^2.5.0", 8 | "express": "^4.17.0", 9 | "graphql": "^14.3.1" 10 | }, 11 | "scripts": { 12 | "start": "node src/index.js" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /server/src/index.js: -------------------------------------------------------------------------------- 1 | const { ApolloServer, gql } = require("apollo-server-express"); 2 | const { createWriteStream, existsSync, mkdirSync } = require("fs"); 3 | const path = require("path"); 4 | const express = require("express"); 5 | 6 | const files = []; 7 | 8 | const typeDefs = gql` 9 | type Query { 10 | files: [String] 11 | } 12 | 13 | type Mutation { 14 | uploadFile(file: Upload!): Boolean 15 | } 16 | `; 17 | 18 | const resolvers = { 19 | Query: { 20 | files: () => files 21 | }, 22 | Mutation: { 23 | uploadFile: async (_, { file }) => { 24 | const { createReadStream, filename } = await file; 25 | 26 | await new Promise(res => 27 | createReadStream() 28 | .pipe(createWriteStream(path.join(__dirname, "../images", filename))) 29 | .on("close", res) 30 | ); 31 | 32 | files.push(filename); 33 | 34 | return true; 35 | } 36 | } 37 | }; 38 | 39 | existsSync(path.join(__dirname, "../images")) || mkdirSync(path.join(__dirname, "../images")); 40 | 41 | const server = new ApolloServer({ typeDefs, resolvers }); 42 | const app = express(); 43 | app.use("/images", express.static(path.join(__dirname, "../images"))); 44 | server.applyMiddleware({ app }); 45 | 46 | app.listen(4000, () => { 47 | console.log(`🚀 Server ready at http://localhost:4000/`); 48 | }); 49 | -------------------------------------------------------------------------------- /server/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@apollographql/apollo-tools@^0.3.6-alpha.1": 6 | version "0.3.7" 7 | resolved "https://registry.yarnpkg.com/@apollographql/apollo-tools/-/apollo-tools-0.3.7.tgz#3bc9c35b9fff65febd4ddc0c1fc04677693a3d40" 8 | integrity sha512-+ertvzAwzkYmuUtT8zH3Zi6jPdyxZwOgnYaZHY7iLnMVJDhQKWlkyjLMF8wyzlPiEdDImVUMm5lOIBZo7LkGlg== 9 | dependencies: 10 | apollo-env "0.5.1" 11 | 12 | "@apollographql/graphql-playground-html@^1.6.6": 13 | version "1.6.18" 14 | resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.18.tgz#c0763b4b5a64d4a5316ae6adc2a3a61af58df402" 15 | integrity sha512-7HGC1hQ0Aj93z2kv8h4RBtYClkiccj+F2Juh1m74Pky7D9tJDsQ4eBlaNNn0jMxGAL6EuaGwBN46EA9JtBMRog== 16 | 17 | "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": 18 | version "1.1.2" 19 | resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" 20 | integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78= 21 | 22 | "@protobufjs/base64@^1.1.2": 23 | version "1.1.2" 24 | resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" 25 | integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== 26 | 27 | "@protobufjs/codegen@^2.0.4": 28 | version "2.0.4" 29 | resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" 30 | integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== 31 | 32 | "@protobufjs/eventemitter@^1.1.0": 33 | version "1.1.0" 34 | resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" 35 | integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A= 36 | 37 | "@protobufjs/fetch@^1.1.0": 38 | version "1.1.0" 39 | resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" 40 | integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU= 41 | dependencies: 42 | "@protobufjs/aspromise" "^1.1.1" 43 | "@protobufjs/inquire" "^1.1.0" 44 | 45 | "@protobufjs/float@^1.0.2": 46 | version "1.0.2" 47 | resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" 48 | integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E= 49 | 50 | "@protobufjs/inquire@^1.1.0": 51 | version "1.1.0" 52 | resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" 53 | integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik= 54 | 55 | "@protobufjs/path@^1.1.2": 56 | version "1.1.2" 57 | resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" 58 | integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0= 59 | 60 | "@protobufjs/pool@^1.1.0": 61 | version "1.1.0" 62 | resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" 63 | integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q= 64 | 65 | "@protobufjs/utf8@^1.1.0": 66 | version "1.1.0" 67 | resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" 68 | integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= 69 | 70 | "@types/accepts@^1.3.5": 71 | version "1.3.5" 72 | resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575" 73 | integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ== 74 | dependencies: 75 | "@types/node" "*" 76 | 77 | "@types/body-parser@*", "@types/body-parser@1.17.0": 78 | version "1.17.0" 79 | resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.0.tgz#9f5c9d9bd04bb54be32d5eb9fc0d8c974e6cf58c" 80 | integrity sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w== 81 | dependencies: 82 | "@types/connect" "*" 83 | "@types/node" "*" 84 | 85 | "@types/connect@*": 86 | version "3.4.32" 87 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz#aa0e9616b9435ccad02bc52b5b454ffc2c70ba28" 88 | integrity sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg== 89 | dependencies: 90 | "@types/node" "*" 91 | 92 | "@types/cors@^2.8.4": 93 | version "2.8.5" 94 | resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.5.tgz#c0c54c4e643e1d943d447292f2baf9dc82cfc8ec" 95 | integrity sha512-GmK8AKu8i+s+EChK/uZ5IbrXPcPaQKWaNSGevDT/7o3gFObwSUQwqb1jMqxuo+YPvj0ckGzINI+EO7EHcmJjKg== 96 | dependencies: 97 | "@types/express" "*" 98 | 99 | "@types/events@*": 100 | version "3.0.0" 101 | resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" 102 | integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== 103 | 104 | "@types/express-serve-static-core@*": 105 | version "4.16.6" 106 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.6.tgz#66d4b29ece3e2fb6e5aac2232723002426e651bd" 107 | integrity sha512-8wr3CA/EMybyb6/V8qvTRKiNkPmgUA26uA9XWD6hlA0yFDuqi4r2L0C2B0U2HAYltJamoYJszlkaWM31vrKsHg== 108 | dependencies: 109 | "@types/node" "*" 110 | "@types/range-parser" "*" 111 | 112 | "@types/express@*", "@types/express@4.16.1": 113 | version "4.16.1" 114 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.16.1.tgz#d756bd1a85c34d87eaf44c888bad27ba8a4b7cf0" 115 | integrity sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg== 116 | dependencies: 117 | "@types/body-parser" "*" 118 | "@types/express-serve-static-core" "*" 119 | "@types/serve-static" "*" 120 | 121 | "@types/long@^4.0.0": 122 | version "4.0.0" 123 | resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.0.tgz#719551d2352d301ac8b81db732acb6bdc28dbdef" 124 | integrity sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q== 125 | 126 | "@types/mime@*": 127 | version "2.0.1" 128 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d" 129 | integrity sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw== 130 | 131 | "@types/node@*": 132 | version "12.0.2" 133 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.2.tgz#3452a24edf9fea138b48fad4a0a028a683da1e40" 134 | integrity sha512-5tabW/i+9mhrfEOUcLDu2xBPsHJ+X5Orqy9FKpale3SjDA17j5AEpYq5vfy3oAeAHGcvANRCO3NV3d2D6q3NiA== 135 | 136 | "@types/node@^10.1.0": 137 | version "10.14.7" 138 | resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.7.tgz#1854f0a9aa8d2cd6818d607b3d091346c6730362" 139 | integrity sha512-on4MmIDgHXiuJDELPk1NFaKVUxxCFr37tm8E9yN6rAiF5Pzp/9bBfBHkoexqRiY+hk/Z04EJU9kKEb59YqJ82A== 140 | 141 | "@types/range-parser@*": 142 | version "1.2.3" 143 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" 144 | integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== 145 | 146 | "@types/serve-static@*": 147 | version "1.13.2" 148 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.2.tgz#f5ac4d7a6420a99a6a45af4719f4dcd8cd907a48" 149 | integrity sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q== 150 | dependencies: 151 | "@types/express-serve-static-core" "*" 152 | "@types/mime" "*" 153 | 154 | "@types/ws@^6.0.0": 155 | version "6.0.1" 156 | resolved "https://registry.yarnpkg.com/@types/ws/-/ws-6.0.1.tgz#ca7a3f3756aa12f62a0a62145ed14c6db25d5a28" 157 | integrity sha512-EzH8k1gyZ4xih/MaZTXwT2xOkPiIMSrhQ9b8wrlX88L0T02eYsddatQlwVFlEPyEqV0ChpdpNnE51QPH6NVT4Q== 158 | dependencies: 159 | "@types/events" "*" 160 | "@types/node" "*" 161 | 162 | accepts@^1.3.5, accepts@~1.3.7: 163 | version "1.3.7" 164 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" 165 | integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== 166 | dependencies: 167 | mime-types "~2.1.24" 168 | negotiator "0.6.2" 169 | 170 | apollo-cache-control@0.6.0: 171 | version "0.6.0" 172 | resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.6.0.tgz#df22db28f850ea90a5722f5e92654d30c96e7f91" 173 | integrity sha512-66aCF6MHe0/FdD3knphwTv6CCIdb1ZxrMsiRpxP474qqyYVe2jAwBu6aJBn4emffZHZ7i6gp9dY6cPHThjnbKA== 174 | dependencies: 175 | apollo-server-env "2.3.0" 176 | graphql-extensions "0.6.0" 177 | 178 | apollo-datasource@0.4.0: 179 | version "0.4.0" 180 | resolved "https://registry.yarnpkg.com/apollo-datasource/-/apollo-datasource-0.4.0.tgz#f042641fd2593fa5f4f002fc30d1fb1a20284df8" 181 | integrity sha512-6QkgnLYwQrW0qv+yXIf617DojJbGmza2XJXUlgnzrGGhxzfAynzEjaLyYkc8rYS1m82vjrl9EOmLHTcnVkvZAQ== 182 | dependencies: 183 | apollo-server-caching "0.4.0" 184 | apollo-server-env "2.3.0" 185 | 186 | apollo-engine-reporting-protobuf@0.3.0: 187 | version "0.3.0" 188 | resolved "https://registry.yarnpkg.com/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.3.0.tgz#2c764c054ff9968387cf16115546e0d5b04ee9f1" 189 | integrity sha512-PYowpx/E+TJT/8nKpp3JmJuKh3x1SZcxDF6Cquj0soV205TUpFFCZQMi91i5ACiEp2AkYvM/GDBIrw+rfIwzTg== 190 | dependencies: 191 | protobufjs "^6.8.6" 192 | 193 | apollo-engine-reporting@1.1.0: 194 | version "1.1.0" 195 | resolved "https://registry.yarnpkg.com/apollo-engine-reporting/-/apollo-engine-reporting-1.1.0.tgz#10def3d3bf3f11ddb24765c19d9c81e30cb9d55c" 196 | integrity sha512-Dj0BwgcluHL0QVUaquhAoYoLX9Z4DRP/n2REcIwO8d2iy52r+1wN5QqZLx97dEFh7CjhNjTWeysJzc8XMWKa1Q== 197 | dependencies: 198 | apollo-engine-reporting-protobuf "0.3.0" 199 | apollo-graphql "^0.2.1-alpha.1" 200 | apollo-server-core "2.5.0" 201 | apollo-server-env "2.3.0" 202 | async-retry "^1.2.1" 203 | graphql-extensions "0.6.0" 204 | 205 | apollo-env@0.4.1-register.1: 206 | version "0.4.1-register.1" 207 | resolved "https://registry.yarnpkg.com/apollo-env/-/apollo-env-0.4.1-register.1.tgz#e8c94e21a5b3f9c45088dec47862dfe2026111c2" 208 | integrity sha512-fg1US7YZ6yW1N0tFq8g4HpCR3eJZmI+rIiHDiknYN9D1MTjvwYdmXYhi7VaPvQ21hV5nMRvfBUMqYXjP+6FsGQ== 209 | dependencies: 210 | core-js "3.0.0-beta.13" 211 | node-fetch "^2.2.0" 212 | sha.js "^2.4.11" 213 | 214 | apollo-env@0.5.1: 215 | version "0.5.1" 216 | resolved "https://registry.yarnpkg.com/apollo-env/-/apollo-env-0.5.1.tgz#b9b0195c16feadf0fe9fd5563edb0b9b7d9e97d3" 217 | integrity sha512-fndST2xojgSdH02k5hxk1cbqA9Ti8RX4YzzBoAB4oIe1Puhq7+YlhXGXfXB5Y4XN0al8dLg+5nAkyjNAR2qZTw== 218 | dependencies: 219 | core-js "^3.0.1" 220 | node-fetch "^2.2.0" 221 | sha.js "^2.4.11" 222 | 223 | apollo-graphql@^0.2.1-alpha.1: 224 | version "0.2.1-register.1" 225 | resolved "https://registry.yarnpkg.com/apollo-graphql/-/apollo-graphql-0.2.1-register.1.tgz#941dd165a9428c2ea3407ab410f842c4050cea28" 226 | integrity sha512-Z2LOuvYomC9CN9K+mpFVcVQu6Ml5PIJlV+YOkGzFq73xeqWg1InxHqI3eEdCEhxTJq6H8rlWT8ATrMS+4sIhqw== 227 | dependencies: 228 | apollo-env "0.4.1-register.1" 229 | lodash.sortby "^4.7.0" 230 | 231 | apollo-link@^1.2.3: 232 | version "1.2.11" 233 | resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.11.tgz#493293b747ad3237114ccd22e9f559e5e24a194d" 234 | integrity sha512-PQvRCg13VduLy3X/0L79M6uOpTh5iHdxnxYuo8yL7sJlWybKRJwsv4IcRBJpMFbChOOaHY7Og9wgPo6DLKDKDA== 235 | dependencies: 236 | apollo-utilities "^1.2.1" 237 | ts-invariant "^0.3.2" 238 | tslib "^1.9.3" 239 | zen-observable-ts "^0.8.18" 240 | 241 | apollo-server-caching@0.4.0: 242 | version "0.4.0" 243 | resolved "https://registry.yarnpkg.com/apollo-server-caching/-/apollo-server-caching-0.4.0.tgz#e82917590d723c0adc1fa52900e79e93ad65e4d9" 244 | integrity sha512-GTOZdbLhrSOKYNWMYgaqX5cVNSMT0bGUTZKV8/tYlyYmsB6ey7l6iId3Q7UpHS6F6OR2lstz5XaKZ+T3fDfPzQ== 245 | dependencies: 246 | lru-cache "^5.0.0" 247 | 248 | apollo-server-core@2.5.0: 249 | version "2.5.0" 250 | resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.5.0.tgz#89fc28ba1018ebf9240bc3cc0c103fe705309023" 251 | integrity sha512-7hyQ/Rt0hC38bUfxMQmLNHDBIGEBykFWo9EO0W+3o/cno/SqBKd1KKichrABVv+v+SCvZAUutX6gYS5l3G+ULQ== 252 | dependencies: 253 | "@apollographql/apollo-tools" "^0.3.6-alpha.1" 254 | "@apollographql/graphql-playground-html" "^1.6.6" 255 | "@types/ws" "^6.0.0" 256 | apollo-cache-control "0.6.0" 257 | apollo-datasource "0.4.0" 258 | apollo-engine-reporting "1.1.0" 259 | apollo-server-caching "0.4.0" 260 | apollo-server-env "2.3.0" 261 | apollo-server-errors "2.3.0" 262 | apollo-server-plugin-base "0.4.0" 263 | apollo-tracing "0.6.0" 264 | fast-json-stable-stringify "^2.0.0" 265 | graphql-extensions "0.6.0" 266 | graphql-subscriptions "^1.0.0" 267 | graphql-tag "^2.9.2" 268 | graphql-tools "^4.0.0" 269 | graphql-upload "^8.0.2" 270 | sha.js "^2.4.11" 271 | subscriptions-transport-ws "^0.9.11" 272 | ws "^6.0.0" 273 | 274 | apollo-server-env@2.3.0: 275 | version "2.3.0" 276 | resolved "https://registry.yarnpkg.com/apollo-server-env/-/apollo-server-env-2.3.0.tgz#f0bf4484a6cc331a8c13763ded56e91beb16ba17" 277 | integrity sha512-WIwlkCM/gir0CkoYWPMTCH8uGCCKB/aM074U1bKayvkFOBVO2VgG5x2kgsfkyF05IMQq2/GOTsKhNY7RnUEhTA== 278 | dependencies: 279 | node-fetch "^2.1.2" 280 | util.promisify "^1.0.0" 281 | 282 | apollo-server-errors@2.3.0: 283 | version "2.3.0" 284 | resolved "https://registry.yarnpkg.com/apollo-server-errors/-/apollo-server-errors-2.3.0.tgz#700622b66a16dffcad3b017e4796749814edc061" 285 | integrity sha512-rUvzwMo2ZQgzzPh2kcJyfbRSfVKRMhfIlhY7BzUfM4x6ZT0aijlgsf714Ll3Mbf5Fxii32kD0A/DmKsTecpccw== 286 | 287 | apollo-server-express@^2.5.0: 288 | version "2.5.0" 289 | resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-2.5.0.tgz#ff6cbd3fcb8933f6316c5a5edd4db12d9a56fa65" 290 | integrity sha512-2gd3VWIqji2jyDYMTTqKzVU4/znjEjugtLUmPgVl5SoBvJSMTsO7VgJv+roBubZGDK8jXXUEXr2a33RtIeHe4g== 291 | dependencies: 292 | "@apollographql/graphql-playground-html" "^1.6.6" 293 | "@types/accepts" "^1.3.5" 294 | "@types/body-parser" "1.17.0" 295 | "@types/cors" "^2.8.4" 296 | "@types/express" "4.16.1" 297 | accepts "^1.3.5" 298 | apollo-server-core "2.5.0" 299 | body-parser "^1.18.3" 300 | cors "^2.8.4" 301 | graphql-subscriptions "^1.0.0" 302 | graphql-tools "^4.0.0" 303 | type-is "^1.6.16" 304 | 305 | apollo-server-plugin-base@0.4.0: 306 | version "0.4.0" 307 | resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-0.4.0.tgz#38a3c37767043873dd1b07143d4e70eecbb09562" 308 | integrity sha512-iD7ARNtwnvHGd1EMPK0CuodM8d8hgDvFwTfIDzJY04QIQ6/KrBFaWhnCXJsy+HMb47GovwBbq67IK6eb2WJgBg== 309 | 310 | apollo-tracing@0.6.0: 311 | version "0.6.0" 312 | resolved "https://registry.yarnpkg.com/apollo-tracing/-/apollo-tracing-0.6.0.tgz#afc2b9cbea173dc4c315a5d98053797469518083" 313 | integrity sha512-OpYPHVBgcQ/HT2WLXJQWwhilzR1rrl01tZeMU2N7yinsp/oyKngF5aUSMtuvX1k/T3abilQo+w10oAQlBCGdPA== 314 | dependencies: 315 | apollo-server-env "2.3.0" 316 | graphql-extensions "0.6.0" 317 | 318 | apollo-utilities@^1.0.1, apollo-utilities@^1.2.1: 319 | version "1.3.0" 320 | resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.3.0.tgz#9803724c07ac94ca11dc26397edb58735d2b0211" 321 | integrity sha512-wQjV+FdWcTWmWUFlChG5rS0vHKy5OsXC6XlV9STRstQq6VbXANwHy6DHnTEQAfLXWAbNcPgBu+nBUpR3dFhwrA== 322 | dependencies: 323 | fast-json-stable-stringify "^2.0.0" 324 | ts-invariant "^0.4.0" 325 | tslib "^1.9.3" 326 | 327 | array-flatten@1.1.1: 328 | version "1.1.1" 329 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 330 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= 331 | 332 | async-limiter@~1.0.0: 333 | version "1.0.0" 334 | resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" 335 | integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== 336 | 337 | async-retry@^1.2.1: 338 | version "1.2.3" 339 | resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.2.3.tgz#a6521f338358d322b1a0012b79030c6f411d1ce0" 340 | integrity sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q== 341 | dependencies: 342 | retry "0.12.0" 343 | 344 | backo2@^1.0.2: 345 | version "1.0.2" 346 | resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" 347 | integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= 348 | 349 | body-parser@1.19.0, body-parser@^1.18.3: 350 | version "1.19.0" 351 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" 352 | integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== 353 | dependencies: 354 | bytes "3.1.0" 355 | content-type "~1.0.4" 356 | debug "2.6.9" 357 | depd "~1.1.2" 358 | http-errors "1.7.2" 359 | iconv-lite "0.4.24" 360 | on-finished "~2.3.0" 361 | qs "6.7.0" 362 | raw-body "2.4.0" 363 | type-is "~1.6.17" 364 | 365 | busboy@^0.3.1: 366 | version "0.3.1" 367 | resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" 368 | integrity sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw== 369 | dependencies: 370 | dicer "0.3.0" 371 | 372 | bytes@3.1.0: 373 | version "3.1.0" 374 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" 375 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== 376 | 377 | content-disposition@0.5.3: 378 | version "0.5.3" 379 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" 380 | integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== 381 | dependencies: 382 | safe-buffer "5.1.2" 383 | 384 | content-type@~1.0.4: 385 | version "1.0.4" 386 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 387 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 388 | 389 | cookie-signature@1.0.6: 390 | version "1.0.6" 391 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 392 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= 393 | 394 | cookie@0.4.0: 395 | version "0.4.0" 396 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" 397 | integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== 398 | 399 | core-js@3.0.0-beta.13: 400 | version "3.0.0-beta.13" 401 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.0.0-beta.13.tgz#7732c69be5e4758887917235fe7c0352c4cb42a1" 402 | integrity sha512-16Q43c/3LT9NyePUJKL8nRIQgYWjcBhjJSMWg96PVSxoS0PeE0NHitPI3opBrs9MGGHjte1KoEVr9W63YKlTXQ== 403 | 404 | core-js@^3.0.1: 405 | version "3.1.2" 406 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.1.2.tgz#2549a2cfb3ca1a5d851c9f7838e8b282cef2f3ba" 407 | integrity sha512-3poRGjbu56leCtZCZCzCgQ7GcKOflDFnjWIepaPFUsM0IXUBrne10sl3aa2Bkcz3+FjRdIxBe9dAMhIJmEnQNA== 408 | 409 | cors@^2.8.4: 410 | version "2.8.5" 411 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 412 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== 413 | dependencies: 414 | object-assign "^4" 415 | vary "^1" 416 | 417 | debug@2.6.9: 418 | version "2.6.9" 419 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 420 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 421 | dependencies: 422 | ms "2.0.0" 423 | 424 | define-properties@^1.1.2: 425 | version "1.1.3" 426 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 427 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 428 | dependencies: 429 | object-keys "^1.0.12" 430 | 431 | depd@~1.1.2: 432 | version "1.1.2" 433 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 434 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 435 | 436 | deprecated-decorator@^0.1.6: 437 | version "0.1.6" 438 | resolved "https://registry.yarnpkg.com/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz#00966317b7a12fe92f3cc831f7583af329b86c37" 439 | integrity sha1-AJZjF7ehL+kvPMgx91g68ym4bDc= 440 | 441 | destroy@~1.0.4: 442 | version "1.0.4" 443 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 444 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= 445 | 446 | dicer@0.3.0: 447 | version "0.3.0" 448 | resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872" 449 | integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA== 450 | dependencies: 451 | streamsearch "0.1.2" 452 | 453 | ee-first@1.1.1: 454 | version "1.1.1" 455 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 456 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 457 | 458 | encodeurl@~1.0.2: 459 | version "1.0.2" 460 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 461 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 462 | 463 | es-abstract@^1.5.1: 464 | version "1.13.0" 465 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" 466 | integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== 467 | dependencies: 468 | es-to-primitive "^1.2.0" 469 | function-bind "^1.1.1" 470 | has "^1.0.3" 471 | is-callable "^1.1.4" 472 | is-regex "^1.0.4" 473 | object-keys "^1.0.12" 474 | 475 | es-to-primitive@^1.2.0: 476 | version "1.2.0" 477 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" 478 | integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== 479 | dependencies: 480 | is-callable "^1.1.4" 481 | is-date-object "^1.0.1" 482 | is-symbol "^1.0.2" 483 | 484 | escape-html@~1.0.3: 485 | version "1.0.3" 486 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 487 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 488 | 489 | etag@~1.8.1: 490 | version "1.8.1" 491 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 492 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 493 | 494 | eventemitter3@^3.1.0: 495 | version "3.1.2" 496 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" 497 | integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== 498 | 499 | express@^4.17.0: 500 | version "4.17.0" 501 | resolved "https://registry.yarnpkg.com/express/-/express-4.17.0.tgz#288af62228a73f4c8ea2990ba3b791bb87cd4438" 502 | integrity sha512-1Z7/t3Z5ZnBG252gKUPyItc4xdeaA0X934ca2ewckAsVsw9EG71i++ZHZPYnus8g/s5Bty8IMpSVEuRkmwwPRQ== 503 | dependencies: 504 | accepts "~1.3.7" 505 | array-flatten "1.1.1" 506 | body-parser "1.19.0" 507 | content-disposition "0.5.3" 508 | content-type "~1.0.4" 509 | cookie "0.4.0" 510 | cookie-signature "1.0.6" 511 | debug "2.6.9" 512 | depd "~1.1.2" 513 | encodeurl "~1.0.2" 514 | escape-html "~1.0.3" 515 | etag "~1.8.1" 516 | finalhandler "~1.1.2" 517 | fresh "0.5.2" 518 | merge-descriptors "1.0.1" 519 | methods "~1.1.2" 520 | on-finished "~2.3.0" 521 | parseurl "~1.3.3" 522 | path-to-regexp "0.1.7" 523 | proxy-addr "~2.0.5" 524 | qs "6.7.0" 525 | range-parser "~1.2.1" 526 | safe-buffer "5.1.2" 527 | send "0.17.1" 528 | serve-static "1.14.1" 529 | setprototypeof "1.1.1" 530 | statuses "~1.5.0" 531 | type-is "~1.6.18" 532 | utils-merge "1.0.1" 533 | vary "~1.1.2" 534 | 535 | fast-json-stable-stringify@^2.0.0: 536 | version "2.0.0" 537 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 538 | integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= 539 | 540 | finalhandler@~1.1.2: 541 | version "1.1.2" 542 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 543 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== 544 | dependencies: 545 | debug "2.6.9" 546 | encodeurl "~1.0.2" 547 | escape-html "~1.0.3" 548 | on-finished "~2.3.0" 549 | parseurl "~1.3.3" 550 | statuses "~1.5.0" 551 | unpipe "~1.0.0" 552 | 553 | forwarded@~0.1.2: 554 | version "0.1.2" 555 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 556 | integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= 557 | 558 | fresh@0.5.2: 559 | version "0.5.2" 560 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 561 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 562 | 563 | fs-capacitor@^2.0.1: 564 | version "2.0.4" 565 | resolved "https://registry.yarnpkg.com/fs-capacitor/-/fs-capacitor-2.0.4.tgz#5a22e72d40ae5078b4fe64fe4d08c0d3fc88ad3c" 566 | integrity sha512-8S4f4WsCryNw2mJJchi46YgB6CR5Ze+4L1h8ewl9tEpL4SJ3ZO+c/bS4BWhB8bK+O3TMqhuZarTitd0S0eh2pA== 567 | 568 | function-bind@^1.1.1: 569 | version "1.1.1" 570 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 571 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 572 | 573 | graphql-extensions@0.6.0: 574 | version "0.6.0" 575 | resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.6.0.tgz#3ee3aa57fe213f90aec5cd31275f6d04767c6a23" 576 | integrity sha512-SshzmbD68fHXRv2q3St29olMOxHDLQ5e9TOh+Tz2BYxinrfhjFaPNcEefiK/vF295wW827Y58bdO11Xmhf8J+Q== 577 | dependencies: 578 | "@apollographql/apollo-tools" "^0.3.6-alpha.1" 579 | 580 | graphql-subscriptions@^1.0.0: 581 | version "1.1.0" 582 | resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-1.1.0.tgz#5f2fa4233eda44cf7570526adfcf3c16937aef11" 583 | integrity sha512-6WzlBFC0lWmXJbIVE8OgFgXIP4RJi3OQgTPa0DVMsDXdpRDjTsM1K9wfl5HSYX7R87QAGlvcv2Y4BIZa/ItonA== 584 | dependencies: 585 | iterall "^1.2.1" 586 | 587 | graphql-tag@^2.9.2: 588 | version "2.10.1" 589 | resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.10.1.tgz#10aa41f1cd8fae5373eaf11f1f67260a3cad5e02" 590 | integrity sha512-jApXqWBzNXQ8jYa/HLkZJaVw9jgwNqZkywa2zfFn16Iv1Zb7ELNHkJaXHR7Quvd5SIGsy6Ny7SUKATgnu05uEg== 591 | 592 | graphql-tools@^4.0.0: 593 | version "4.0.4" 594 | resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.4.tgz#ca08a63454221fdde825fe45fbd315eb2a6d566b" 595 | integrity sha512-chF12etTIGVVGy3fCTJ1ivJX2KB7OSG4c6UOJQuqOHCmBQwTyNgCDuejZKvpYxNZiEx7bwIjrodDgDe9RIkjlw== 596 | dependencies: 597 | apollo-link "^1.2.3" 598 | apollo-utilities "^1.0.1" 599 | deprecated-decorator "^0.1.6" 600 | iterall "^1.1.3" 601 | uuid "^3.1.0" 602 | 603 | graphql-upload@^8.0.2: 604 | version "8.0.6" 605 | resolved "https://registry.yarnpkg.com/graphql-upload/-/graphql-upload-8.0.6.tgz#90fb6246962d953b64d9ddabd6472d8e8b116ee0" 606 | integrity sha512-cBRALMOvGBm2AD6M61b1QbSmKfCLXvgV+Z3wXT2JS1EQwGWQ1g5/sby4J/cpwAaGnq5P2eGp+N3HQI9cSn9Jfg== 607 | dependencies: 608 | busboy "^0.3.1" 609 | fs-capacitor "^2.0.1" 610 | http-errors "^1.7.2" 611 | object-path "^0.11.4" 612 | 613 | graphql@^14.3.1: 614 | version "14.3.1" 615 | resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.3.1.tgz#b3aa50e61a841ada3c1f9ccda101c483f8e8c807" 616 | integrity sha512-FZm7kAa3FqKdXy8YSSpAoTtyDFMIYSpCDOr+3EqlI1bxmtHu+Vv/I2vrSeT1sBOEnEniX3uo4wFhFdS/8XN6gA== 617 | dependencies: 618 | iterall "^1.2.2" 619 | 620 | has-symbols@^1.0.0: 621 | version "1.0.0" 622 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" 623 | integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= 624 | 625 | has@^1.0.1, has@^1.0.3: 626 | version "1.0.3" 627 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 628 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 629 | dependencies: 630 | function-bind "^1.1.1" 631 | 632 | http-errors@1.7.2, http-errors@^1.7.2, http-errors@~1.7.2: 633 | version "1.7.2" 634 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" 635 | integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== 636 | dependencies: 637 | depd "~1.1.2" 638 | inherits "2.0.3" 639 | setprototypeof "1.1.1" 640 | statuses ">= 1.5.0 < 2" 641 | toidentifier "1.0.0" 642 | 643 | iconv-lite@0.4.24: 644 | version "0.4.24" 645 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 646 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 647 | dependencies: 648 | safer-buffer ">= 2.1.2 < 3" 649 | 650 | inherits@2.0.3, inherits@^2.0.1: 651 | version "2.0.3" 652 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 653 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 654 | 655 | ipaddr.js@1.9.0: 656 | version "1.9.0" 657 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" 658 | integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== 659 | 660 | is-callable@^1.1.4: 661 | version "1.1.4" 662 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" 663 | integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== 664 | 665 | is-date-object@^1.0.1: 666 | version "1.0.1" 667 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 668 | integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= 669 | 670 | is-regex@^1.0.4: 671 | version "1.0.4" 672 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" 673 | integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= 674 | dependencies: 675 | has "^1.0.1" 676 | 677 | is-symbol@^1.0.2: 678 | version "1.0.2" 679 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" 680 | integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== 681 | dependencies: 682 | has-symbols "^1.0.0" 683 | 684 | iterall@^1.1.3, iterall@^1.2.1, iterall@^1.2.2: 685 | version "1.2.2" 686 | resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" 687 | integrity sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA== 688 | 689 | lodash.sortby@^4.7.0: 690 | version "4.7.0" 691 | resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" 692 | integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= 693 | 694 | long@^4.0.0: 695 | version "4.0.0" 696 | resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" 697 | integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== 698 | 699 | lru-cache@^5.0.0: 700 | version "5.1.1" 701 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" 702 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== 703 | dependencies: 704 | yallist "^3.0.2" 705 | 706 | media-typer@0.3.0: 707 | version "0.3.0" 708 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 709 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 710 | 711 | merge-descriptors@1.0.1: 712 | version "1.0.1" 713 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 714 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 715 | 716 | methods@~1.1.2: 717 | version "1.1.2" 718 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 719 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= 720 | 721 | mime-db@1.40.0: 722 | version "1.40.0" 723 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" 724 | integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== 725 | 726 | mime-types@~2.1.24: 727 | version "2.1.24" 728 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" 729 | integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== 730 | dependencies: 731 | mime-db "1.40.0" 732 | 733 | mime@1.6.0: 734 | version "1.6.0" 735 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 736 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 737 | 738 | ms@2.0.0: 739 | version "2.0.0" 740 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 741 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 742 | 743 | ms@2.1.1: 744 | version "2.1.1" 745 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 746 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 747 | 748 | negotiator@0.6.2: 749 | version "0.6.2" 750 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" 751 | integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== 752 | 753 | node-fetch@^2.1.2, node-fetch@^2.2.0: 754 | version "2.6.0" 755 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" 756 | integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== 757 | 758 | object-assign@^4: 759 | version "4.1.1" 760 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 761 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 762 | 763 | object-keys@^1.0.12: 764 | version "1.1.1" 765 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 766 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 767 | 768 | object-path@^0.11.4: 769 | version "0.11.4" 770 | resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949" 771 | integrity sha1-NwrnUvvzfePqcKhhwju6iRVpGUk= 772 | 773 | object.getownpropertydescriptors@^2.0.3: 774 | version "2.0.3" 775 | resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" 776 | integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= 777 | dependencies: 778 | define-properties "^1.1.2" 779 | es-abstract "^1.5.1" 780 | 781 | on-finished@~2.3.0: 782 | version "2.3.0" 783 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 784 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 785 | dependencies: 786 | ee-first "1.1.1" 787 | 788 | parseurl@~1.3.3: 789 | version "1.3.3" 790 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 791 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 792 | 793 | path-to-regexp@0.1.7: 794 | version "0.1.7" 795 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 796 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= 797 | 798 | protobufjs@^6.8.6: 799 | version "6.8.8" 800 | resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.8.8.tgz#c8b4f1282fd7a90e6f5b109ed11c84af82908e7c" 801 | integrity sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw== 802 | dependencies: 803 | "@protobufjs/aspromise" "^1.1.2" 804 | "@protobufjs/base64" "^1.1.2" 805 | "@protobufjs/codegen" "^2.0.4" 806 | "@protobufjs/eventemitter" "^1.1.0" 807 | "@protobufjs/fetch" "^1.1.0" 808 | "@protobufjs/float" "^1.0.2" 809 | "@protobufjs/inquire" "^1.1.0" 810 | "@protobufjs/path" "^1.1.2" 811 | "@protobufjs/pool" "^1.1.0" 812 | "@protobufjs/utf8" "^1.1.0" 813 | "@types/long" "^4.0.0" 814 | "@types/node" "^10.1.0" 815 | long "^4.0.0" 816 | 817 | proxy-addr@~2.0.5: 818 | version "2.0.5" 819 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" 820 | integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== 821 | dependencies: 822 | forwarded "~0.1.2" 823 | ipaddr.js "1.9.0" 824 | 825 | qs@6.7.0: 826 | version "6.7.0" 827 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" 828 | integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== 829 | 830 | range-parser@~1.2.1: 831 | version "1.2.1" 832 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 833 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 834 | 835 | raw-body@2.4.0: 836 | version "2.4.0" 837 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" 838 | integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== 839 | dependencies: 840 | bytes "3.1.0" 841 | http-errors "1.7.2" 842 | iconv-lite "0.4.24" 843 | unpipe "1.0.0" 844 | 845 | retry@0.12.0: 846 | version "0.12.0" 847 | resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" 848 | integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= 849 | 850 | safe-buffer@5.1.2, safe-buffer@^5.0.1: 851 | version "5.1.2" 852 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 853 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 854 | 855 | "safer-buffer@>= 2.1.2 < 3": 856 | version "2.1.2" 857 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 858 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 859 | 860 | send@0.17.1: 861 | version "0.17.1" 862 | resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" 863 | integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== 864 | dependencies: 865 | debug "2.6.9" 866 | depd "~1.1.2" 867 | destroy "~1.0.4" 868 | encodeurl "~1.0.2" 869 | escape-html "~1.0.3" 870 | etag "~1.8.1" 871 | fresh "0.5.2" 872 | http-errors "~1.7.2" 873 | mime "1.6.0" 874 | ms "2.1.1" 875 | on-finished "~2.3.0" 876 | range-parser "~1.2.1" 877 | statuses "~1.5.0" 878 | 879 | serve-static@1.14.1: 880 | version "1.14.1" 881 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" 882 | integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== 883 | dependencies: 884 | encodeurl "~1.0.2" 885 | escape-html "~1.0.3" 886 | parseurl "~1.3.3" 887 | send "0.17.1" 888 | 889 | setprototypeof@1.1.1: 890 | version "1.1.1" 891 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" 892 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== 893 | 894 | sha.js@^2.4.11: 895 | version "2.4.11" 896 | resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" 897 | integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== 898 | dependencies: 899 | inherits "^2.0.1" 900 | safe-buffer "^5.0.1" 901 | 902 | "statuses@>= 1.5.0 < 2", statuses@~1.5.0: 903 | version "1.5.0" 904 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 905 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 906 | 907 | streamsearch@0.1.2: 908 | version "0.1.2" 909 | resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" 910 | integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= 911 | 912 | subscriptions-transport-ws@^0.9.11: 913 | version "0.9.16" 914 | resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.16.tgz#90a422f0771d9c32069294c08608af2d47f596ec" 915 | integrity sha512-pQdoU7nC+EpStXnCfh/+ho0zE0Z+ma+i7xvj7bkXKb1dvYHSZxgRPaU6spRP+Bjzow67c/rRDoix5RT0uU9omw== 916 | dependencies: 917 | backo2 "^1.0.2" 918 | eventemitter3 "^3.1.0" 919 | iterall "^1.2.1" 920 | symbol-observable "^1.0.4" 921 | ws "^5.2.0" 922 | 923 | symbol-observable@^1.0.4: 924 | version "1.2.0" 925 | resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" 926 | integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== 927 | 928 | toidentifier@1.0.0: 929 | version "1.0.0" 930 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 931 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== 932 | 933 | ts-invariant@^0.3.2: 934 | version "0.3.3" 935 | resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.3.3.tgz#b5742b1885ecf9e29c31a750307480f045ec0b16" 936 | integrity sha512-UReOKsrJFGC9tUblgSRWo+BsVNbEd77Cl6WiV/XpMlkifXwNIJbknViCucHvVZkXSC/mcWeRnIGdY7uprcwvdQ== 937 | dependencies: 938 | tslib "^1.9.3" 939 | 940 | ts-invariant@^0.4.0: 941 | version "0.4.2" 942 | resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.4.2.tgz#8685131b8083e67c66d602540e78763408be9113" 943 | integrity sha512-PTAAn8lJPEdRBJJEs4ig6MVZWfO12yrFzV7YaPslmyhG7+4MA279y4BXT3f72gXeVl0mC1aAWq2rMX4eKTWU/Q== 944 | dependencies: 945 | tslib "^1.9.3" 946 | 947 | tslib@^1.9.3: 948 | version "1.9.3" 949 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" 950 | integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== 951 | 952 | type-is@^1.6.16, type-is@~1.6.17, type-is@~1.6.18: 953 | version "1.6.18" 954 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 955 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 956 | dependencies: 957 | media-typer "0.3.0" 958 | mime-types "~2.1.24" 959 | 960 | unpipe@1.0.0, unpipe@~1.0.0: 961 | version "1.0.0" 962 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 963 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 964 | 965 | util.promisify@^1.0.0: 966 | version "1.0.0" 967 | resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" 968 | integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== 969 | dependencies: 970 | define-properties "^1.1.2" 971 | object.getownpropertydescriptors "^2.0.3" 972 | 973 | utils-merge@1.0.1: 974 | version "1.0.1" 975 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 976 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= 977 | 978 | uuid@^3.1.0: 979 | version "3.3.2" 980 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" 981 | integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== 982 | 983 | vary@^1, vary@~1.1.2: 984 | version "1.1.2" 985 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 986 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 987 | 988 | ws@^5.2.0: 989 | version "5.2.2" 990 | resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" 991 | integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== 992 | dependencies: 993 | async-limiter "~1.0.0" 994 | 995 | ws@^6.0.0: 996 | version "6.2.1" 997 | resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" 998 | integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== 999 | dependencies: 1000 | async-limiter "~1.0.0" 1001 | 1002 | yallist@^3.0.2: 1003 | version "3.0.3" 1004 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" 1005 | integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== 1006 | 1007 | zen-observable-ts@^0.8.18: 1008 | version "0.8.18" 1009 | resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.18.tgz#ade44b1060cc4a800627856ec10b9c67f5f639c8" 1010 | integrity sha512-q7d05s75Rn1j39U5Oapg3HI2wzriVwERVo4N7uFGpIYuHB9ff02P/E92P9B8T7QVC93jCMHpbXH7X0eVR5LA7A== 1011 | dependencies: 1012 | tslib "^1.9.3" 1013 | zen-observable "^0.8.0" 1014 | 1015 | zen-observable@^0.8.0: 1016 | version "0.8.14" 1017 | resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.14.tgz#d33058359d335bc0db1f0af66158b32872af3bf7" 1018 | integrity sha512-kQz39uonEjEESwh+qCi83kcC3rZJGh4mrZW7xjkSQYXkq//JZHTtKo+6yuVloTgMtzsIWOJrjIrKvk/dqm0L5g== 1019 | -------------------------------------------------------------------------------- /web/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "web", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@apollo/react-hooks": "^0.1.0-beta.5", 7 | "apollo-cache-inmemory": "^1.6.0", 8 | "apollo-client": "^2.6.0", 9 | "apollo-upload-client": "^10.0.1", 10 | "graphql-tag": "^2.10.1", 11 | "react": "^16.8.6", 12 | "react-dom": "^16.8.6", 13 | "react-dropzone": "^10.1.5", 14 | "react-scripts": "3.0.1" 15 | }, 16 | "scripts": { 17 | "start": "react-scripts start", 18 | "build": "react-scripts build", 19 | "test": "react-scripts test", 20 | "eject": "react-scripts eject" 21 | }, 22 | "eslintConfig": { 23 | "extends": "react-app" 24 | }, 25 | "browserslist": { 26 | "production": [ 27 | ">0.2%", 28 | "not dead", 29 | "not op_mini all" 30 | ], 31 | "development": [ 32 | "last 1 chrome version", 33 | "last 1 firefox version", 34 | "last 1 safari version" 35 | ] 36 | }, 37 | "devDependencies": { 38 | "graphql": "^14.3.1" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /web/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benawad/apollo-server-react-file-upload/603ad544cfef3918e0d0092ca2869283957036cd/web/public/favicon.ico -------------------------------------------------------------------------------- /web/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 22 | React App 23 | 24 | 25 | 26 |
27 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /web/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": ".", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /web/src/App.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Upload } from "./Upload"; 3 | import { Files } from "./Files"; 4 | 5 | function App() { 6 | return ( 7 |
8 | 9 | 10 |
11 | ); 12 | } 13 | 14 | export default App; 15 | -------------------------------------------------------------------------------- /web/src/Files.js: -------------------------------------------------------------------------------- 1 | import { useQuery } from "@apollo/react-hooks"; 2 | import gql from "graphql-tag"; 3 | import React from "react"; 4 | 5 | export const filesQuery = gql` 6 | { 7 | files 8 | } 9 | `; 10 | 11 | export const Files = () => { 12 | const { data, loading } = useQuery(filesQuery); 13 | 14 | if (loading) { 15 | return
loading...
; 16 | } 17 | 18 | return ( 19 |
20 | {data.files.map(x => ( 21 | {x} 27 | ))} 28 |
29 | ); 30 | }; 31 | -------------------------------------------------------------------------------- /web/src/Upload.js: -------------------------------------------------------------------------------- 1 | import React, { useCallback } from "react"; 2 | import { useDropzone } from "react-dropzone"; 3 | import gql from "graphql-tag"; 4 | import { useMutation } from "@apollo/react-hooks"; 5 | import { filesQuery } from "./Files"; 6 | 7 | const uploadFileMutation = gql` 8 | mutation UploadFile($file: Upload!) { 9 | uploadFile(file: $file) 10 | } 11 | `; 12 | 13 | export const Upload = () => { 14 | const [uploadFile] = useMutation(uploadFileMutation, { 15 | refetchQueries: [{ query: filesQuery }] 16 | }); 17 | const onDrop = useCallback( 18 | ([file]) => { 19 | uploadFile({ variables: { file } }); 20 | }, 21 | [uploadFile] 22 | ); 23 | const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop }); 24 | 25 | return ( 26 |
27 | 28 | {isDragActive ? ( 29 |

Drop the files here ...

30 | ) : ( 31 |

Drag 'n' drop some files here, or click to select files

32 | )} 33 |
34 | ); 35 | }; 36 | -------------------------------------------------------------------------------- /web/src/apollo.js: -------------------------------------------------------------------------------- 1 | import ApolloClient from "apollo-client"; 2 | import { InMemoryCache } from "apollo-cache-inmemory"; 3 | import { createUploadLink } from "apollo-upload-client"; 4 | 5 | const link = createUploadLink({ uri: "http://localhost:4000/graphql" }); 6 | 7 | export const client = new ApolloClient({ 8 | link, 9 | cache: new InMemoryCache() 10 | }); 11 | -------------------------------------------------------------------------------- /web/src/index.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom"; 3 | import { ApolloProvider } from "@apollo/react-hooks"; 4 | import App from "./App"; 5 | import * as serviceWorker from "./serviceWorker"; 6 | import { client } from "./apollo"; 7 | 8 | ReactDOM.render( 9 | 10 | 11 | , 12 | document.getElementById("root") 13 | ); 14 | 15 | // If you want your app to work offline and load faster, you can change 16 | // unregister() to register() below. Note this comes with some pitfalls. 17 | // Learn more about service workers: https://bit.ly/CRA-PWA 18 | serviceWorker.unregister(); 19 | -------------------------------------------------------------------------------- /web/src/serviceWorker.js: -------------------------------------------------------------------------------- 1 | // This optional code is used to register a service worker. 2 | // register() is not called by default. 3 | 4 | // This lets the app load faster on subsequent visits in production, and gives 5 | // it offline capabilities. However, it also means that developers (and users) 6 | // will only see deployed updates on subsequent visits to a page, after all the 7 | // existing tabs open on the page have been closed, since previously cached 8 | // resources are updated in the background. 9 | 10 | // To learn more about the benefits of this model and instructions on how to 11 | // opt-in, read https://bit.ly/CRA-PWA 12 | 13 | const isLocalhost = Boolean( 14 | window.location.hostname === 'localhost' || 15 | // [::1] is the IPv6 localhost address. 16 | window.location.hostname === '[::1]' || 17 | // 127.0.0.1/8 is considered localhost for IPv4. 18 | window.location.hostname.match( 19 | /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ 20 | ) 21 | ); 22 | 23 | export function register(config) { 24 | if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { 25 | // The URL constructor is available in all browsers that support SW. 26 | const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); 27 | if (publicUrl.origin !== window.location.origin) { 28 | // Our service worker won't work if PUBLIC_URL is on a different origin 29 | // from what our page is served on. This might happen if a CDN is used to 30 | // serve assets; see https://github.com/facebook/create-react-app/issues/2374 31 | return; 32 | } 33 | 34 | window.addEventListener('load', () => { 35 | const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; 36 | 37 | if (isLocalhost) { 38 | // This is running on localhost. Let's check if a service worker still exists or not. 39 | checkValidServiceWorker(swUrl, config); 40 | 41 | // Add some additional logging to localhost, pointing developers to the 42 | // service worker/PWA documentation. 43 | navigator.serviceWorker.ready.then(() => { 44 | console.log( 45 | 'This web app is being served cache-first by a service ' + 46 | 'worker. To learn more, visit https://bit.ly/CRA-PWA' 47 | ); 48 | }); 49 | } else { 50 | // Is not localhost. Just register service worker 51 | registerValidSW(swUrl, config); 52 | } 53 | }); 54 | } 55 | } 56 | 57 | function registerValidSW(swUrl, config) { 58 | navigator.serviceWorker 59 | .register(swUrl) 60 | .then(registration => { 61 | registration.onupdatefound = () => { 62 | const installingWorker = registration.installing; 63 | if (installingWorker == null) { 64 | return; 65 | } 66 | installingWorker.onstatechange = () => { 67 | if (installingWorker.state === 'installed') { 68 | if (navigator.serviceWorker.controller) { 69 | // At this point, the updated precached content has been fetched, 70 | // but the previous service worker will still serve the older 71 | // content until all client tabs are closed. 72 | console.log( 73 | 'New content is available and will be used when all ' + 74 | 'tabs for this page are closed. See https://bit.ly/CRA-PWA.' 75 | ); 76 | 77 | // Execute callback 78 | if (config && config.onUpdate) { 79 | config.onUpdate(registration); 80 | } 81 | } else { 82 | // At this point, everything has been precached. 83 | // It's the perfect time to display a 84 | // "Content is cached for offline use." message. 85 | console.log('Content is cached for offline use.'); 86 | 87 | // Execute callback 88 | if (config && config.onSuccess) { 89 | config.onSuccess(registration); 90 | } 91 | } 92 | } 93 | }; 94 | }; 95 | }) 96 | .catch(error => { 97 | console.error('Error during service worker registration:', error); 98 | }); 99 | } 100 | 101 | function checkValidServiceWorker(swUrl, config) { 102 | // Check if the service worker can be found. If it can't reload the page. 103 | fetch(swUrl) 104 | .then(response => { 105 | // Ensure service worker exists, and that we really are getting a JS file. 106 | const contentType = response.headers.get('content-type'); 107 | if ( 108 | response.status === 404 || 109 | (contentType != null && contentType.indexOf('javascript') === -1) 110 | ) { 111 | // No service worker found. Probably a different app. Reload the page. 112 | navigator.serviceWorker.ready.then(registration => { 113 | registration.unregister().then(() => { 114 | window.location.reload(); 115 | }); 116 | }); 117 | } else { 118 | // Service worker found. Proceed as normal. 119 | registerValidSW(swUrl, config); 120 | } 121 | }) 122 | .catch(() => { 123 | console.log( 124 | 'No internet connection found. App is running in offline mode.' 125 | ); 126 | }); 127 | } 128 | 129 | export function unregister() { 130 | if ('serviceWorker' in navigator) { 131 | navigator.serviceWorker.ready.then(registration => { 132 | registration.unregister(); 133 | }); 134 | } 135 | } 136 | --------------------------------------------------------------------------------