From 93f2fc18492d149b434ad1ca91cef9c3b10039b6 Mon Sep 17 00:00:00 2001 From: mutterpedro Date: Thu, 5 Dec 2019 18:57:47 -0300 Subject: [PATCH 01/14] * chore(package): update lockfile package-lock.json * chore(package): added react-simple-code-editor dependency * feat(CodeEditor): added CodeEditor component --- package-lock.json | 724 +++++++++++++----- package.json | 1 + .../CodeEditor/CodeEditor.example.js | 20 + src/components/CodeEditor/CodeEditor.react.js | 46 ++ src/components/CodeEditor/CodeEditor.scss | 3 + src/lib/tests/CodeEditor.test.js | 24 + src/parse-interface-guide/ComponentsMap.js | 1 + 7 files changed, 621 insertions(+), 198 deletions(-) create mode 100644 src/components/CodeEditor/CodeEditor.example.js create mode 100644 src/components/CodeEditor/CodeEditor.react.js create mode 100644 src/components/CodeEditor/CodeEditor.scss create mode 100644 src/lib/tests/CodeEditor.test.js diff --git a/package-lock.json b/package-lock.json index bd3a1f5aed..3cad412346 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,13 +4,42 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@apollo/protobufjs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.0.3.tgz", + "integrity": "sha512-gqeT810Ect9WIqsrgfUvr+ljSB5m1PyBae9HGdrRyQ3HjHjTcjVvxpsMYXlUk4rUHnrfUqyoGvLSy2yLlRGEOw==", + "dev": true, + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.0", + "@types/node": "^10.1.0", + "long": "^4.0.0" + }, + "dependencies": { + "@types/node": { + "version": "10.17.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.6.tgz", + "integrity": "sha512-0a2X6cgN3RdPBL2MIlR6Lt0KlM7fOFsutuXcdglcOq6WvLnYXgPQSh0Mx6tO1KCAE8MxbHSOSTWDoUxRq+l3DA==", + "dev": true + } + } + }, "@apollographql/apollo-tools": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.4.0.tgz", - "integrity": "sha512-7wEO+S+zgz/wVe3ilFQqICufRBYYDSNUkd1V03JWvXuSydbYq2SM5EgvWmFF+04iadt+aQ0XCCsRzCzRPQODfQ==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.4.1.tgz", + "integrity": "sha512-9NaTBPX+YYCsio6AqnLHlLiqYBszgTBul2qzG2+YNZ/1RQ2owhO/7xB5XJyQz76NGOefORaZt5idwvTJXpg/Sg==", "dev": true, "requires": { - "apollo-env": "0.5.1" + "apollo-env": "^0.6.0" } }, "@apollographql/graphql-playground-html": { @@ -2571,15 +2600,58 @@ } }, "@parse/push-adapter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@parse/push-adapter/-/push-adapter-3.1.0.tgz", - "integrity": "sha512-SvLXKtAtlVMvlwl0Dw3smpy8ZgGicZDIxkUokV5HrZIFaQxHCEIj+9aj4y9IYOo6+7jE97vVwDmvh+n4geyZRg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@parse/push-adapter/-/push-adapter-3.2.0.tgz", + "integrity": "sha512-6V7Bnh9+pSRc2U6ONvDPrPN20nRO4YT9eAITiZyVQu2N9WRCE+QoR2wyK7f+iTmyhRbVWP5xeSEoEhOPkS4pWA==", "dev": true, "requires": { "@parse/node-apn": "^3.1.0", "@parse/node-gcm": "^1.0.0", "npmlog": "^4.0.2", - "parse": "^2.7.1" + "parse": "2.8.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz", + "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "@babel/runtime-corejs3": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.6.3.tgz", + "integrity": "sha512-933SXHQr7apa95F+3IqkBne8mqOnu1kDh6dnSddC07aW/R51WsOVD7MSczJ6DRpq/L8KLll7TFDxmt30pft44w==", + "dev": true, + "requires": { + "core-js-pure": "^3.0.0", + "regenerator-runtime": "^0.13.2" + } + }, + "parse": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/parse/-/parse-2.8.0.tgz", + "integrity": "sha512-dd6IOPYST+qDqWG22xyZpBLQJ+vqozzE4/43cc0OcKakELoSEsJS43JPaxmELI5/sVxsYYYAqshuPePPnefu5A==", + "dev": true, + "requires": { + "@babel/runtime": "7.6.3", + "@babel/runtime-corejs3": "7.6.3", + "uuid": "3.3.3", + "ws": "7.1.2", + "xmlhttprequest": "1.8.0" + } + }, + "ws": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.1.2.tgz", + "integrity": "sha512-gftXq3XI81cJCgkUiAVixA0raD9IVmXqsylCrjRygw4+UOOGzPoxnQ6r/CnVL9i+mDncJo94tSkyrtuuQVBmrg==", + "dev": true, + "requires": { + "async-limiter": "^1.0.0" + } + } } }, "@parse/s3-files-adapter": { @@ -2784,9 +2856,9 @@ } }, "@types/express-serve-static-core": { - "version": "4.16.10", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.10.tgz", - "integrity": "sha512-gM6evDj0OvTILTRKilh9T5dTaGpv1oYiFcJAfgSejuMJgGJUsD9hKEU2lB4aiTNy4WwChxRnjfYFuBQsULzsJw==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.0.tgz", + "integrity": "sha512-Xnub7w57uvcBqFdIGoRg1KhNOeEj0vB6ykUM7uFWyxvbdE89GFyqgmUcanAriMr4YOxNFZBAWkfcWIb4WBPt3g==", "dev": true, "requires": { "@types/node": "*", @@ -2872,9 +2944,9 @@ "dev": true }, "@types/koa": { - "version": "2.0.51", - "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.0.51.tgz", - "integrity": "sha512-L5e/l6Z+SR9Jk6HM0wNYdkvWhSUBOvi+7Q5Uwn7kE/VmBXX7NIxARMigARWAyXAtXiv5Ry1P2HmebolFdvuIVg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.11.0.tgz", + "integrity": "sha512-Hgx/1/rVlJvqYBrdeCsS7PDiR2qbxlMt1RnmNWD4Uxi5FF9nwkYqIldo7urjc+dfNpk+2NRGcnAYd4L5xEhCcQ==", "dev": true, "requires": { "@types/accepts": "*", @@ -2886,9 +2958,9 @@ } }, "@types/koa-compose": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.4.tgz", - "integrity": "sha512-ioou0rxkuWL+yBQYsHUQAzRTfVxAg8Y2VfMftU+Y3RA03/MzuFL0x/M2sXXj3PkfnENbHsjeHR1aMdezLYpTeA==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz", + "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==", "dev": true, "requires": { "@types/koa": "*" @@ -2912,9 +2984,9 @@ "dev": true }, "@types/node": { - "version": "12.11.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.11.7.tgz", - "integrity": "sha512-JNbGaHFCLwgHn/iCckiGSOZ1XYHsKFwREtzPwSGCVld1SGhOlmZw2D4ZI94HQCrBHbADzW9m4LER/8olJTRGHA==", + "version": "12.12.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.14.tgz", + "integrity": "sha512-u/SJDyXwuihpwjXy7hOOghagLEV1KdAST6syfnOk6QZAMzZuWZqXy5aYYZbh8Jdpd4escVFP0MvftHNDb9pruA==", "dev": true }, "@types/prop-types": { @@ -2937,6 +3009,16 @@ "csstype": "^2.2.0" } }, + "@types/readable-stream": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.5.tgz", + "integrity": "sha512-Mq2eLkGYamlcolW603FY2ROBvcl90jPF+3jLkjpBV6qS+2aVeJqlgRG0TVAa1oWbmPdb5yOWlOPVvQle76nUNw==", + "dev": true, + "requires": { + "@types/node": "*", + "safe-buffer": "*" + } + }, "@types/serve-static": { "version": "1.13.3", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.3.tgz", @@ -2959,9 +3041,9 @@ "dev": true }, "@types/ws": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.3.tgz", - "integrity": "sha512-yBTM0P05Tx9iXGq00BbJPo37ox68R5vaGTXivs6RGh/BQ6QP5zqZDGWdAO6JbRE/iR1l80xeGAwCQS2nMV9S/w==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.4.tgz", + "integrity": "sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg==", "dev": true, "requires": { "@types/node": "*" @@ -3371,13 +3453,13 @@ } }, "apollo-cache-control": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.8.5.tgz", - "integrity": "sha512-2yQ1vKgJQ54SGkoQS/ZLZrDX3La6cluAYYdruFYJMJtL4zQrSdeOCy11CQliCMYEd6eKNyE70Rpln51QswW2Og==", + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.8.8.tgz", + "integrity": "sha512-hpIJg3Tmb6quA111lrVO+d3qcyYRlJ8JqbeQdcgwLT3fb2VQzk21SrBZYl2oMM4ZqSOWCZWg4/Cn9ARYqdWjKA==", "dev": true, "requires": { "apollo-server-env": "^2.4.3", - "graphql-extensions": "^0.10.4" + "graphql-extensions": "^0.10.7" } }, "apollo-datasource": { @@ -3391,33 +3473,33 @@ } }, "apollo-engine-reporting": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-1.4.7.tgz", - "integrity": "sha512-qsKDz9VkoctFhojM3Nj3nvRBO98t8TS2uTgtiIjUGs3Hln2poKMP6fIQ37Nm2Q2B3JJst76HQtpPwXmRJd1ZUg==", + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-1.4.11.tgz", + "integrity": "sha512-7ZkbOGvPfWppN8+1KHzyHPrJTMOmrMUy38unao2c9TTToOAnEvx2MtUTo6mr3aw/g8UQYUf0x2Cq+K2YSlUTPw==", "dev": true, "requires": { - "apollo-engine-reporting-protobuf": "^0.4.1", + "apollo-engine-reporting-protobuf": "^0.4.4", "apollo-graphql": "^0.3.4", "apollo-server-caching": "^0.5.0", "apollo-server-env": "^2.4.3", - "apollo-server-types": "^0.2.5", + "apollo-server-types": "^0.2.8", "async-retry": "^1.2.1", - "graphql-extensions": "^0.10.4" + "graphql-extensions": "^0.10.7" } }, "apollo-engine-reporting-protobuf": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.4.1.tgz", - "integrity": "sha512-d7vFFZ2oUrvGaN0Hpet8joe2ZG0X0lIGilN+SwgVP38dJnOuadjsaYMyrD9JudGQJg0bJA5wVQfYzcCVy0slrw==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.4.4.tgz", + "integrity": "sha512-SGrIkUR7Q/VjU8YG98xcvo340C4DaNUhg/TXOtGsMlfiJDzHwVau/Bv6zifAzBafp2lj0XND6Daj5kyT/eSI/w==", "dev": true, "requires": { - "protobufjs": "^6.8.6" + "@apollo/protobufjs": "^1.0.3" } }, "apollo-env": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.5.1.tgz", - "integrity": "sha512-fndST2xojgSdH02k5hxk1cbqA9Ti8RX4YzzBoAB4oIe1Puhq7+YlhXGXfXB5Y4XN0al8dLg+5nAkyjNAR2qZTw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.6.0.tgz", + "integrity": "sha512-DttHOpLISRej8STjbXjQCXq3YeE2pATaC4UEd2YE7TjjYhQmp9yxohlkHfSR78BvPzczhyDs6WQQEzasHv0M0A==", "dev": true, "requires": { "core-js": "^3.0.1", @@ -3434,12 +3516,12 @@ } }, "apollo-graphql": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.3.4.tgz", - "integrity": "sha512-w+Az1qxePH4oQ8jvbhQBl5iEVvqcqynmU++x/M7MM5xqN1C7m1kyIzpN17gybXlTJXY4Oxej2WNURC2/hwpfYw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.3.5.tgz", + "integrity": "sha512-X2N/LREJSAkI0RhMEJ6d0kGjdJSI4SFyf6soLvLLTQn0Bhi/52hMLf8k4kO5t0SCKuWc1+Pw/tdCniK4Gc1IdA==", "dev": true, "requires": { - "apollo-env": "^0.5.1", + "apollo-env": "^0.6.0", "lodash.sortby": "^4.7.0" } }, @@ -3509,26 +3591,26 @@ } }, "apollo-server-core": { - "version": "2.9.7", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.9.7.tgz", - "integrity": "sha512-EqKyROy+21sM93YHjGpy6wlnzK/vH0fnZh7RCf3uB69aQ3OjgdP4AQ5oWRQ62NDN+aoic7OLhChSDJeDonq/NQ==", + "version": "2.9.13", + "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.9.13.tgz", + "integrity": "sha512-iXTGNCtouB0Xe37ySovuZO69NBYOByJlZfUc87gj0pdcz0WbdfUp7qUtNzy3onp63Zo60TFkHWhGNcBJYFluzw==", "dev": true, "requires": { "@apollographql/apollo-tools": "^0.4.0", "@apollographql/graphql-playground-html": "1.6.24", "@types/graphql-upload": "^8.0.0", "@types/ws": "^6.0.0", - "apollo-cache-control": "^0.8.5", + "apollo-cache-control": "^0.8.8", "apollo-datasource": "^0.6.3", - "apollo-engine-reporting": "^1.4.7", + "apollo-engine-reporting": "^1.4.11", "apollo-server-caching": "^0.5.0", "apollo-server-env": "^2.4.3", "apollo-server-errors": "^2.3.4", - "apollo-server-plugin-base": "^0.6.5", - "apollo-server-types": "^0.2.5", - "apollo-tracing": "^0.8.5", + "apollo-server-plugin-base": "^0.6.8", + "apollo-server-types": "^0.2.8", + "apollo-tracing": "^0.8.8", "fast-json-stable-stringify": "^2.0.0", - "graphql-extensions": "^0.10.4", + "graphql-extensions": "^0.10.7", "graphql-tag": "^2.9.2", "graphql-tools": "^4.0.0", "graphql-upload": "^8.0.2", @@ -3537,6 +3619,37 @@ "ws": "^6.0.0" }, "dependencies": { + "graphql-upload": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/graphql-upload/-/graphql-upload-8.1.0.tgz", + "integrity": "sha512-U2OiDI5VxYmzRKw0Z2dmfk0zkqMRaecH9Smh1U277gVgVe9Qn+18xqf4skwr4YJszGIh7iQDZ57+5ygOK9sM/Q==", + "dev": true, + "requires": { + "busboy": "^0.3.1", + "fs-capacitor": "^2.0.4", + "http-errors": "^1.7.3", + "object-path": "^0.11.4" + } + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, "ws": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", @@ -3565,9 +3678,9 @@ "dev": true }, "apollo-server-express": { - "version": "2.9.7", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.9.7.tgz", - "integrity": "sha512-+DuJk1oq34Zx0bLYzgBgJH/eXS0JNxw2JycHQvV0+PAQ0Qi01oomJRA2r1S5isnfnSAnHb2E9jyBTptoHdw3MQ==", + "version": "2.9.12", + "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.9.12.tgz", + "integrity": "sha512-4Ev8MY7m23mSzwO/BvLTy97a/68IP/wZoCRBn2R81OoZt9/GxlvvYZGvozJCXYsQt1qAbIT4Sn05LmqawsI98w==", "dev": true, "requires": { "@apollographql/graphql-playground-html": "1.6.24", @@ -3576,8 +3689,8 @@ "@types/cors": "^2.8.4", "@types/express": "4.17.1", "accepts": "^1.3.5", - "apollo-server-core": "^2.9.7", - "apollo-server-types": "^0.2.5", + "apollo-server-core": "^2.9.12", + "apollo-server-types": "^0.2.8", "body-parser": "^1.18.3", "cors": "^2.8.4", "express": "^4.17.1", @@ -3589,33 +3702,33 @@ } }, "apollo-server-plugin-base": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.6.5.tgz", - "integrity": "sha512-z2ve7HEPWmZI3EzL0iiY9qyt1i0hitT+afN5PzssCw594LB6DfUQWsI14UW+W+gcw8hvl8VQUpXByfUntAx5vw==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.6.8.tgz", + "integrity": "sha512-0pKCjcg9gHBK8qlb280+N0jl99meixQtxXnMJFyIfD+45OpKQ+WolHIbO0oZgNEt7r/lNWwH8v3l5yYm1ghz1A==", "dev": true, "requires": { - "apollo-server-types": "^0.2.5" + "apollo-server-types": "^0.2.8" } }, "apollo-server-types": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-0.2.5.tgz", - "integrity": "sha512-6iJQsPh59FWu4K7ABrVmpnQVgeK8Ockx8BcawBh+saFYWTlVczwcLyGSZPeV1tPSKwFwKZutyEslrYSafcarXQ==", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-0.2.8.tgz", + "integrity": "sha512-5OclxkAqjhuO75tTNHpSO/+doJZ+VlRtTefnrPJdK/uwVew9U/VUCWkYdryZWwEyVe1nvQ/4E7RYR4tGb8l8wA==", "dev": true, "requires": { - "apollo-engine-reporting-protobuf": "^0.4.1", + "apollo-engine-reporting-protobuf": "^0.4.4", "apollo-server-caching": "^0.5.0", "apollo-server-env": "^2.4.3" } }, "apollo-tracing": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.8.5.tgz", - "integrity": "sha512-lZn10/GRBZUlMxVYLghLMFsGcLN0jTYDd98qZfBtxw+wEWUx+PKkZdljDT+XNoOm/kDvEutFGmi5tSLhArIzWQ==", + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.8.8.tgz", + "integrity": "sha512-aIwT2PsH7VZZPaNrIoSjzLKMlG644d2Uf+GYcoMd3X6UEyg1sXdWqkKfCeoS6ChJKH2khO7MXAvOZC03UnCumQ==", "dev": true, "requires": { "apollo-server-env": "^2.4.3", - "graphql-extensions": "^0.10.4" + "graphql-extensions": "^0.10.7" } }, "apollo-utilities": { @@ -3834,9 +3947,9 @@ "dev": true }, "aws-sdk": { - "version": "2.556.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.556.0.tgz", - "integrity": "sha512-qILMUNl/a7FYWU67Y24OGsXFhyDHM4qYdplMR2tps/g17pN9bEQ5ijxvGzW2T8VVyAsTanmn+dFyl/CH38pC5Q==", + "version": "2.585.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.585.0.tgz", + "integrity": "sha512-T3JG4JZUmELqxT4hwJa93xns/TWIllaeYoyhRPGwXUj78vhCYJUiigtU6WRYLu84AMoZAGT/pVkARH7vfxpq9Q==", "dev": true, "requires": { "buffer": "4.9.1", @@ -4023,6 +4136,15 @@ "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" }, + "backoff": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", + "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=", + "dev": true, + "requires": { + "precond": "0.2" + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -4096,23 +4218,14 @@ "dev": true }, "bcrypt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-3.0.6.tgz", - "integrity": "sha512-taA5bCTfXe7FUjKroKky9EXpdhkVvhE5owfxfLYodbrAR1Ul3juLmIQmIQBK4L9a5BuUcE6cqmwT+Da20lF9tg==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-3.0.7.tgz", + "integrity": "sha512-K5UglF9VQvBMHl/1elNyyFvAfOY9Bj+rpKrCSR9sFwcW8FywAYJSRwTURNej5TaAK2TEJkcJ6r6lh1YPmspx5Q==", "dev": true, "optional": true, "requires": { - "nan": "2.13.2", - "node-pre-gyp": "0.12.0" - }, - "dependencies": { - "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", - "dev": true, - "optional": true - } + "nan": "2.14.0", + "node-pre-gyp": "0.13.0" } }, "bcrypt-pbkdf": { @@ -4368,9 +4481,9 @@ } }, "bson": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz", - "integrity": "sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.3.tgz", + "integrity": "sha512-TdiJxMVnodVS7r0BdL42y/pqC9cL2iKynVwA0Ho3qbsQYr428veL3l7BQyuqiw+Q5SqqoT0m4srSY/BlZ9AxXg==", "dev": true }, "buffer": { @@ -4422,6 +4535,18 @@ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, + "bunyan": { + "version": "1.8.12", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz", + "integrity": "sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=", + "dev": true, + "requires": { + "dtrace-provider": "~0.8", + "moment": "^2.10.6", + "mv": "~2", + "safe-json-stringify": "~1" + } + }, "busboy": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz", @@ -5089,24 +5214,95 @@ "dev": true }, "coveralls": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.7.tgz", - "integrity": "sha512-mUuH2MFOYB2oBaA4D4Ykqi9LaEYpMMlsiOMJOrv358yAjP6enPIk55fod2fNJ8AvwoYXStWQls37rA+s5e7boA==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.9.tgz", + "integrity": "sha512-nNBg3B1+4iDox5A5zqHKzUTiwl2ey4k2o0NEcVZYvl+GOSJdKBj4AJGKLv6h3SvWch7tABHePAQOSZWM9E2hMg==", "dev": true, "requires": { - "growl": "~> 1.10.0", "js-yaml": "^3.13.1", - "lcov-parse": "^0.0.10", + "lcov-parse": "^1.0.0", "log-driver": "^1.2.7", "minimist": "^1.2.0", - "request": "^2.86.0" + "request": "^2.88.0" }, "dependencies": { + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } } } }, @@ -5678,6 +5874,16 @@ "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=", "dev": true }, + "dtrace-provider": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", + "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.14.0" + } + }, "duplexer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", @@ -7757,6 +7963,7 @@ "integrity": "sha512-+r8qY2JRRs+uaZcrZOxpNhdlCZoS8yS5KQ6X53Twc8WecZ6VtAn+MVHroLOd4u9HVPxTXZ9RUd9+556EpTc0xA==", "requires": { "codemirror": "^5.26.0", + "codemirror-graphql": "^0.6.11", "markdown-it": "^8.4.0" } }, @@ -7781,14 +7988,14 @@ } }, "graphql-extensions": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.10.4.tgz", - "integrity": "sha512-lE6MroluEYocbR/ICwccv39w+Pz4cBPadJ11z1rJkbZv5wstISEganbDOwl9qN21rcZGiWzh7QUNxUiFUXXEDw==", + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.10.7.tgz", + "integrity": "sha512-YuP7VQxNePG4bWRQ5Vk+KRMbZ9r1IWCqCCogOMz/1ueeQ4gZe93eGRcb0vhpOdMFnCX6Vyvd4+sC+N6LR3YFOQ==", "dev": true, "requires": { "@apollographql/apollo-tools": "^0.4.0", "apollo-server-env": "^2.4.3", - "apollo-server-types": "^0.2.5" + "apollo-server-types": "^0.2.8" } }, "graphql-import": { @@ -7811,12 +8018,12 @@ } }, "graphql-language-service-parser": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/graphql-language-service-parser/-/graphql-language-service-parser-1.5.0.tgz", - "integrity": "sha512-DX3B6DfvKa28gJoywtnkkIUdZitWqKqBTrZ6CQV8V5wO3GzJalQKT0J+B56oDkS6MhjLt928Yu8fj63laNWfoA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/graphql-language-service-parser/-/graphql-language-service-parser-1.5.1.tgz", + "integrity": "sha512-uGAeZSVr4afJc94Z2lCVLnhF2zdzDNgdx6ggCPUEAbhe9H5KFgmLVaZBVgqZJ0qmE9rIxV9wm59TbLxHTaxM1Q==", "requires": { "graphql-config": "2.2.1", - "graphql-language-service-types": "^1.5.0" + "graphql-language-service-types": "^1.5.1" }, "dependencies": { "graphql-config": { @@ -7843,9 +8050,9 @@ } }, "graphql-language-service-types": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/graphql-language-service-types/-/graphql-language-service-types-1.5.0.tgz", - "integrity": "sha512-THxB15oPC56zlNVSwv7JCahuSUbI9xnUHdftjOqZOz5588qjlPw/UHWQ8V/k0/XwZvH/TwCkmnBkIRmPVb1S5Q==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/graphql-language-service-types/-/graphql-language-service-types-1.5.1.tgz", + "integrity": "sha512-jOym7GFkAVoqCakkIWNfV2hrB4zq8ZrAOAoOU26oafF8iaG2Ezs0SMvfWhfFYpGDGtJ/4tKzxy9eRZpobGnKeg==", "requires": { "graphql-config": "2.2.1" }, @@ -8017,6 +8224,15 @@ } } }, + "graphql-relay": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/graphql-relay/-/graphql-relay-0.6.0.tgz", + "integrity": "sha512-OVDi6C9/qOT542Q3KxZdXja3NrDvqzbihn1B44PH8P/c5s0Q90RyQwT6guhGqXqbYEH6zbeLJWjQqiYvcg2vVw==", + "dev": true, + "requires": { + "prettier": "^1.16.0" + } + }, "graphql-request": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-1.8.2.tgz", @@ -8054,17 +8270,27 @@ } }, "graphql-upload": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/graphql-upload/-/graphql-upload-8.1.0.tgz", - "integrity": "sha512-U2OiDI5VxYmzRKw0Z2dmfk0zkqMRaecH9Smh1U277gVgVe9Qn+18xqf4skwr4YJszGIh7iQDZ57+5ygOK9sM/Q==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/graphql-upload/-/graphql-upload-9.0.0.tgz", + "integrity": "sha512-YR2o9GoDa5On3q3lYLkLo3gHfa8crCHvMY1QbT7Zqja6BUqiihqaGjbWbvSPko/gbDSmZE+zLcX46Ef+/SmRyA==", "dev": true, "requires": { "busboy": "^0.3.1", - "fs-capacitor": "^2.0.4", + "fs-capacitor": "^4.0.1", "http-errors": "^1.7.3", "object-path": "^0.11.4" }, "dependencies": { + "fs-capacitor": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-4.0.1.tgz", + "integrity": "sha512-e0qFoKQMFe52F54dMvZLD+I1M/Gs6xB2gnZVQB5FYT/8ioP6qTb3U/tzp55O0IuPOMvSM8j4ta0bVafIFjJzxQ==", + "dev": true, + "requires": { + "@types/readable-stream": "^2.3.5", + "readable-stream": "^3.4.0" + } + }, "http-errors": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", @@ -8076,22 +8302,29 @@ "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + } } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } } } }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, "growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", @@ -8428,9 +8661,9 @@ "dev": true }, "https-proxy-agent": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.3.tgz", - "integrity": "sha512-Ytgnz23gm2DVftnzqRRz2dOXZbGd2uiajSw/95bPp6v53zPRspQjLm/AfBgqbJ2qfeRXWIOMVLpp86+/5yX39Q==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", "dev": true, "requires": { "agent-base": "^4.3.0", @@ -9785,11 +10018,54 @@ } }, "lcov-parse": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", - "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", + "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", "dev": true }, + "ldap-filter": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/ldap-filter/-/ldap-filter-0.2.2.tgz", + "integrity": "sha1-8rhCvguG2jNSeYUFsx68rlkNd9A=", + "dev": true, + "requires": { + "assert-plus": "0.1.5" + }, + "dependencies": { + "assert-plus": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", + "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=", + "dev": true + } + } + }, + "ldapjs": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-1.0.2.tgz", + "integrity": "sha1-VE/3Ayt7g8aPBwEyjZKXqmlDQPk=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "^1.0.0", + "backoff": "^2.5.0", + "bunyan": "^1.8.3", + "dashdash": "^1.14.0", + "dtrace-provider": "~0.8", + "ldap-filter": "0.2.2", + "once": "^1.4.0", + "vasync": "^1.6.4", + "verror": "^1.8.1" + }, + "dependencies": { + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + } + } + }, "left-pad": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", @@ -9979,12 +10255,6 @@ "triple-beam": "^1.3.0" }, "dependencies": { - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -10574,6 +10844,44 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", + "dev": true, + "optional": true, + "requires": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "optional": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", + "dev": true, + "optional": true, + "requires": { + "glob": "^6.0.1" + } + } + } + }, "nan": { "version": "2.14.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", @@ -10605,6 +10913,13 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", + "dev": true, + "optional": true + }, "needle": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", @@ -10827,9 +11142,9 @@ } }, "node-pre-gyp": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz", - "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.13.0.tgz", + "integrity": "sha512-Md1D3xnEne8b/HGVQkZZwV27WUi1ZRuZBij24TNaZwUPU3ZAFtvT6xxJGaUVillfmMKnn5oD1HoGsp2Ftik7SQ==", "dev": true, "optional": true, "requires": { @@ -10894,9 +11209,9 @@ } }, "node-rsa": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-1.0.6.tgz", - "integrity": "sha512-v42495lozKpuQmrcIzld9ds/Tn7pwjuh0BHSHnhPrKkAVSyTAyrZodFLFafOfWiUKamLt4lgWdngP8W/LzCm2w==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-1.0.7.tgz", + "integrity": "sha512-idwRXma6scFufZmbaKkHpJoLL93yynRefP6yur13wZ5i9FR35ex451KCoF2OORDeJanyRVahmjjiwmUlCnTqJA==", "dev": true, "requires": { "asn1": "^0.2.4" @@ -11665,35 +11980,39 @@ "dev": true }, "parse-server": { - "version": "github:parseplatform/parse-server#f67f8dbe705e69b457b5e90cc9208840f4841284", + "version": "github:parseplatform/parse-server#5d76b2f354e568bb0c84f3d6b5ae3fd56cbd83c1", "from": "github:parseplatform/parse-server#master", "dev": true, "requires": { "@apollographql/graphql-playground-html": "1.6.24", "@parse/fs-files-adapter": "1.0.1", - "@parse/push-adapter": "3.1.0", + "@parse/push-adapter": "3.2.0", "@parse/s3-files-adapter": "1.3.0", "@parse/simple-mailgun-adapter": "1.1.0", - "apollo-server-express": "2.9.7", - "bcrypt": "3.0.6", + "apollo-server-express": "2.9.12", + "bcrypt": "3.0.7", "bcryptjs": "2.4.3", "body-parser": "1.19.0", + "commander": "4.0.1", "cors": "2.8.5", "deepcopy": "2.0.0", "express": "4.17.1", "follow-redirects": "1.9.0", "graphql": "14.5.8", "graphql-list-fields": "2.0.2", + "graphql-relay": "^0.6.0", "graphql-tools": "^4.0.5", - "graphql-upload": "8.1.0", + "graphql-upload": "9.0.0", "intersect": "1.0.1", "jsonwebtoken": "8.5.1", + "ldapjs": "1.0.2", "lodash": "4.17.15", "lru-cache": "5.1.1", "mime": "2.4.4", "mongodb": "3.3.2", - "node-rsa": "1.0.6", - "pg-promise": "9.3.3", + "node-rsa": "1.0.7", + "parse": "2.10.0", + "pg-promise": "10.3.1", "pluralize": "^8.0.0", "redis": "2.8.0", "semver": "6.3.0", @@ -11880,15 +12199,15 @@ "dev": true }, "pg": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/pg/-/pg-7.12.1.tgz", - "integrity": "sha512-l1UuyfEvoswYfcUe6k+JaxiN+5vkOgYcVSbSuw3FvdLqDbaoa2RJo1zfJKfPsSYPFVERd4GHvX3s2PjG1asSDA==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-7.14.0.tgz", + "integrity": "sha512-TLsdOWKFu44vHdejml4Uoo8h0EwCjdIj9Z9kpz7pA5i8iQxOTwVb1+Fy+X86kW5AXKxQpYpYDs4j/qPDbro/lg==", "dev": true, "requires": { "buffer-writer": "2.0.0", "packet-reader": "1.0.0", "pg-connection-string": "0.1.3", - "pg-pool": "^2.0.4", + "pg-pool": "^2.0.7", "pg-types": "^2.1.0", "pgpass": "1.x", "semver": "4.3.2" @@ -11927,14 +12246,14 @@ "dev": true }, "pg-promise": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-9.3.3.tgz", - "integrity": "sha512-C7Mj5RSUvK0cGOaJ0p1fcOk5jhS1n+HgY+DoE8s1+Zjzf6ta70zYDIlOmy6MtYWs4DFHhUW654hb0FmtGKkIkg==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-10.3.1.tgz", + "integrity": "sha512-1b9Nx1UMV0SE5zJC92ckM+DHFGB5koly/AILd5DpV0Zx4Z9/iytnbdUGz9qnnqKt+XIuXjdizT2FIyGyV2AxTQ==", "dev": true, "requires": { "assert-options": "0.6.0", "manakin": "0.5.2", - "pg": "7.12.1", + "pg": "7.14.0", "pg-minify": "1.5.1", "spex": "3.0.0" } @@ -12165,6 +12484,12 @@ "xtend": "^4.0.0" } }, + "precond": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", + "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=", + "dev": true + }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -12313,35 +12638,6 @@ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" }, - "protobufjs": { - "version": "6.8.8", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", - "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", - "dev": true, - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "@types/node": "^10.1.0", - "long": "^4.0.0" - }, - "dependencies": { - "@types/node": { - "version": "10.17.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.0.tgz", - "integrity": "sha512-wuJwN2KV4tIRz1bu9vq5kSPasJ8IsEjZaP1ZR7KlmdUZvGF/rXy8DmXOVwUD0kAtvtJ7aqMKPqUXC0NUTDbrDg==", - "dev": true - } - } - }, "proxy-addr": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", @@ -12813,6 +13109,11 @@ "shallowequal": "^1.0.1" } }, + "react-simple-code-editor": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/react-simple-code-editor/-/react-simple-code-editor-0.10.0.tgz", + "integrity": "sha512-bL5W5mAxSW6+cLwqqVWY47Silqgy2DKDTR4hDBrLrUqC5BXc29YVx17l2IZk5v36VcDEq1Bszu2oHm1qBwKqBA==" + }, "react-sortable-hoc": { "version": "0.8.4", "resolved": "https://registry.npmjs.org/react-sortable-hoc/-/react-sortable-hoc-0.8.4.tgz", @@ -13447,6 +13748,13 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, + "safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "dev": true, + "optional": true + }, "safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", @@ -13965,9 +14273,9 @@ } }, "smart-buffer": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.2.tgz", - "integrity": "sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", + "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", "dev": true }, "snapdragon": { @@ -14078,13 +14386,13 @@ } }, "socks": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.2.tgz", - "integrity": "sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", + "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", "dev": true, "requires": { - "ip": "^1.1.5", - "smart-buffer": "4.0.2" + "ip": "1.1.5", + "smart-buffer": "^4.1.0" } }, "socks-proxy-agent": { @@ -15267,6 +15575,32 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, + "vasync": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/vasync/-/vasync-1.6.4.tgz", + "integrity": "sha1-3+k2Fq0OeugBszKp2Iv8XNyOHR8=", + "dev": true, + "requires": { + "verror": "1.6.0" + }, + "dependencies": { + "extsprintf": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.2.0.tgz", + "integrity": "sha1-WtlGwi9bMrp/jNdCZxHG6KP8JSk=", + "dev": true + }, + "verror": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.6.0.tgz", + "integrity": "sha1-fROyex+swuLakEBetepuW90lLqU=", + "dev": true, + "requires": { + "extsprintf": "1.2.0" + } + } + } + }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -15688,12 +16022,6 @@ "triple-beam": "^1.2.0" }, "dependencies": { - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, "logform": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/logform/-/logform-1.10.0.tgz", diff --git a/package.json b/package.json index d81dfef49f..eab4c9b9c2 100644 --- a/package.json +++ b/package.json @@ -67,6 +67,7 @@ "react-redux": "5.1.1", "react-router": "5.1.2", "react-router-dom": "5.1.2", + "react-simple-code-editor": "^0.10.0", "regenerator-runtime": "0.13.3", "semver": "6.3.0" }, diff --git a/src/components/CodeEditor/CodeEditor.example.js b/src/components/CodeEditor/CodeEditor.example.js new file mode 100644 index 0000000000..8b3fa0b069 --- /dev/null +++ b/src/components/CodeEditor/CodeEditor.example.js @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2016-present, Parse, LLC + * All rights reserved. + * + * This source code is licensed under the license found in the LICENSE file in + * the root directory of this source tree. + */ +import React from 'react'; +import CodeEditor from 'components/CodeEditor/CodeEditor.react'; + +export const component = CodeEditor; + +export const demos = [ + { + name: 'Simple code editor (only JS support)', + render: () => ( + + ) + } +]; diff --git a/src/components/CodeEditor/CodeEditor.react.js b/src/components/CodeEditor/CodeEditor.react.js new file mode 100644 index 0000000000..cee871855f --- /dev/null +++ b/src/components/CodeEditor/CodeEditor.react.js @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2016-present, Parse, LLC + * All rights reserved. + * + * This source code is licensed under the license found in the LICENSE file in + * the root directory of this source tree. + */ +import React from 'react'; +import Editor from 'react-simple-code-editor'; +import PropTypes from 'lib/PropTypes'; +import {highlight, languages} from 'prismjs/components/prism-core'; + +import 'prismjs/components/prism-clike'; +import 'prismjs/components/prism-javascript'; +import './CodeEditor.scss'; + +export default class CodeEditor extends React.Component { + constructor(props) { + super(props); + + this.state = {code: ''} + } + + render() { + return ( +
+         this.setState({code})}
+          highlight={code => highlight(code, languages.js)}
+          padding={10}
+          style={{
+            fontFamily: '"Fira code", "Fira Mono", monospace',
+            fontSize: 12,
+          }}
+        />
+      
+ ) + } +} + +CodeEditor.propTypes = { + className: PropTypes.string.describe('CSS classes'), + placeHolder: PropTypes.string.describe('Code place holder') +}; diff --git a/src/components/CodeEditor/CodeEditor.scss b/src/components/CodeEditor/CodeEditor.scss new file mode 100644 index 0000000000..e1a838d5ba --- /dev/null +++ b/src/components/CodeEditor/CodeEditor.scss @@ -0,0 +1,3 @@ +pre > div > textarea:focus { + outline: none; +} diff --git a/src/lib/tests/CodeEditor.test.js b/src/lib/tests/CodeEditor.test.js new file mode 100644 index 0000000000..82ec77b7c5 --- /dev/null +++ b/src/lib/tests/CodeEditor.test.js @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2016-present, Parse, LLC + * All rights reserved. + * + * This source code is licensed under the license found in the LICENSE file in + * the root directory of this source tree. + */ +jest.dontMock('../../components/CodeEditor/CodeEditor.react'); + +import React from 'react'; +import ReactDOM from 'react-dom'; + +const CodeEditor = require('../../components/CodeEditor/CodeEditor.react'); + +describe('CodeEditor', () => { + it('can render examples', () => { + jest.dontMock('../../components/CodeEditor/CodeEditor.example'); + const example = require('../../components/CodeEditor/CodeEditor.example'); + example.demos.forEach((example, i) => { + example.render(); + }); + }); + // test suite goes here +}); diff --git a/src/parse-interface-guide/ComponentsMap.js b/src/parse-interface-guide/ComponentsMap.js index 941aa039d6..280f9bbe75 100644 --- a/src/parse-interface-guide/ComponentsMap.js +++ b/src/parse-interface-guide/ComponentsMap.js @@ -12,6 +12,7 @@ export let Chart = require('components/Chart/Chart.example') export let Checkbox = require('components/Checkbox/Checkbox.example'); export let ChromeDatePicker = require('components/ChromeDatePicker/ChromeDatePicker.example'); export let ChromeDropdown = require('components/ChromeDropdown/ChromeDropdown.example'); +export let CodeEditor = require('components/CodeEditor/CodeEditor.example'); export let CodeSnippet = require('components/CodeSnippet/CodeSnippet.example'); export let CreditCardInput = require('components/CreditCardInput/CreditCardInput.example'); export let DataBrowserHeader = require('components/DataBrowserHeader/DataBrowserHeader.example'); From f5e156a1756e9d464dbe37c5cab4f123882d03ef Mon Sep 17 00:00:00 2001 From: mutterpedro Date: Fri, 13 Dec 2019 10:19:25 -0300 Subject: [PATCH 02/14] added id tho the code editor props --- package-lock.json | 301 +++++++++++------- .../CodeEditor/CodeEditor.example.js | 2 +- src/components/CodeEditor/CodeEditor.react.js | 13 +- src/lib/tests/CodeEditor.test.js | 18 +- 4 files changed, 210 insertions(+), 124 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3cad412346..8922495357 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2654,15 +2654,6 @@ } } }, - "@parse/s3-files-adapter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@parse/s3-files-adapter/-/s3-files-adapter-1.3.0.tgz", - "integrity": "sha512-Sw5P2qLt5wxFv/j8auChfOomZFIZ4jhP5f85qpgOk1OCITFwvd7FWF6Qo3N72Hqn/9MCr76tblb/JBNEU+Qgjw==", - "dev": true, - "requires": { - "aws-sdk": "^2.59.0" - } - }, "@parse/simple-mailgun-adapter": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@parse/simple-mailgun-adapter/-/simple-mailgun-adapter-1.1.0.tgz", @@ -2984,9 +2975,9 @@ "dev": true }, "@types/node": { - "version": "12.12.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.14.tgz", - "integrity": "sha512-u/SJDyXwuihpwjXy7hOOghagLEV1KdAST6syfnOk6QZAMzZuWZqXy5aYYZbh8Jdpd4escVFP0MvftHNDb9pruA==", + "version": "12.12.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.17.tgz", + "integrity": "sha512-Is+l3mcHvs47sKy+afn2O1rV4ldZFU7W8101cNlOd+MRbjM4Onida8jSZnJdTe/0Pcf25g9BNIUsuugmE6puHA==", "dev": true }, "@types/prop-types": { @@ -3629,6 +3620,23 @@ "fs-capacitor": "^2.0.4", "http-errors": "^1.7.3", "object-path": "^0.11.4" + }, + "dependencies": { + "busboy": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz", + "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==", + "dev": true, + "requires": { + "dicer": "0.3.0" + } + }, + "object-path": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", + "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=", + "dev": true + } } }, "http-errors": { @@ -3677,30 +3685,6 @@ "integrity": "sha512-Y0PKQvkrb2Kd18d1NPlHdSqmlr8TgqJ7JQcNIfhNDgdb45CnqZlxL1abuIRhr8tiw8OhVOcFxz2KyglBi8TKdA==", "dev": true }, - "apollo-server-express": { - "version": "2.9.12", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.9.12.tgz", - "integrity": "sha512-4Ev8MY7m23mSzwO/BvLTy97a/68IP/wZoCRBn2R81OoZt9/GxlvvYZGvozJCXYsQt1qAbIT4Sn05LmqawsI98w==", - "dev": true, - "requires": { - "@apollographql/graphql-playground-html": "1.6.24", - "@types/accepts": "^1.3.5", - "@types/body-parser": "1.17.1", - "@types/cors": "^2.8.4", - "@types/express": "4.17.1", - "accepts": "^1.3.5", - "apollo-server-core": "^2.9.12", - "apollo-server-types": "^0.2.8", - "body-parser": "^1.18.3", - "cors": "^2.8.4", - "express": "^4.17.1", - "graphql-subscriptions": "^1.0.0", - "graphql-tools": "^4.0.0", - "parseurl": "^1.3.2", - "subscriptions-transport-ws": "^0.9.16", - "type-is": "^1.6.16" - } - }, "apollo-server-plugin-base": { "version": "0.6.8", "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.6.8.tgz", @@ -3946,37 +3930,6 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, - "aws-sdk": { - "version": "2.585.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.585.0.tgz", - "integrity": "sha512-T3JG4JZUmELqxT4hwJa93xns/TWIllaeYoyhRPGwXUj78vhCYJUiigtU6WRYLu84AMoZAGT/pVkARH7vfxpq9Q==", - "dev": true, - "requires": { - "buffer": "4.9.1", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.3.2", - "xml2js": "0.4.19" - }, - "dependencies": { - "sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - } - } - }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -6458,12 +6411,6 @@ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true - }, "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", @@ -8018,12 +7965,12 @@ } }, "graphql-language-service-parser": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/graphql-language-service-parser/-/graphql-language-service-parser-1.5.1.tgz", - "integrity": "sha512-uGAeZSVr4afJc94Z2lCVLnhF2zdzDNgdx6ggCPUEAbhe9H5KFgmLVaZBVgqZJ0qmE9rIxV9wm59TbLxHTaxM1Q==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/graphql-language-service-parser/-/graphql-language-service-parser-1.5.2.tgz", + "integrity": "sha512-kModfvwX5XiT+tYRhh8d6X+rb5Zq9zFQVdcoVlQJvoIW7U6SkxUAeO5Ei9OI3KOMH5r8wyfmXflBZ+xUbJySJw==", "requires": { "graphql-config": "2.2.1", - "graphql-language-service-types": "^1.5.1" + "graphql-language-service-types": "^1.5.2" }, "dependencies": { "graphql-config": { @@ -8050,9 +7997,9 @@ } }, "graphql-language-service-types": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/graphql-language-service-types/-/graphql-language-service-types-1.5.1.tgz", - "integrity": "sha512-jOym7GFkAVoqCakkIWNfV2hrB4zq8ZrAOAoOU26oafF8iaG2Ezs0SMvfWhfFYpGDGtJ/4tKzxy9eRZpobGnKeg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/graphql-language-service-types/-/graphql-language-service-types-1.5.2.tgz", + "integrity": "sha512-WOFHBZX1K41svohPTmhOcKg+zz27d6ULFuZ8mzkiJ9nIpGKueAPyh7/xR0VZNBUAfDzTCbE6wQZxsPl5Kvd7IA==", "requires": { "graphql-config": "2.2.1" }, @@ -10477,6 +10424,13 @@ "readable-stream": "^2.0.1" } }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "dev": true, + "optional": true + }, "meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", @@ -10800,25 +10754,6 @@ "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", "dev": true }, - "mongodb": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.3.2.tgz", - "integrity": "sha512-fqJt3iywelk4yKu/lfwQg163Bjpo5zDKhXiohycvon4iQHbrfflSAz9AIlRE6496Pm/dQKQK5bMigdVo2s6gBg==", - "dev": true, - "requires": { - "bson": "^1.1.1", - "require_optional": "^1.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", - "dev": true - } - } - }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -11425,16 +11360,26 @@ "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" }, "npm-bundled": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", - "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "dev": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "dev": true, "optional": true }, "npm-packlist": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.6.tgz", - "integrity": "sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.7.tgz", + "integrity": "sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ==", "dev": true, "optional": true, "requires": { @@ -11980,16 +11925,16 @@ "dev": true }, "parse-server": { - "version": "github:parseplatform/parse-server#5d76b2f354e568bb0c84f3d6b5ae3fd56cbd83c1", + "version": "github:parseplatform/parse-server#e0e06ef131dd6ff60e6fd80a40771ac7116ea8c0", "from": "github:parseplatform/parse-server#master", "dev": true, "requires": { "@apollographql/graphql-playground-html": "1.6.24", "@parse/fs-files-adapter": "1.0.1", "@parse/push-adapter": "3.2.0", - "@parse/s3-files-adapter": "1.3.0", + "@parse/s3-files-adapter": "1.4.0", "@parse/simple-mailgun-adapter": "1.1.0", - "apollo-server-express": "2.9.12", + "apollo-server-express": "2.9.13", "bcrypt": "3.0.7", "bcryptjs": "2.4.3", "body-parser": "1.19.0", @@ -12009,7 +11954,7 @@ "lodash": "4.17.15", "lru-cache": "5.1.1", "mime": "2.4.4", - "mongodb": "3.3.2", + "mongodb": "3.4.0", "node-rsa": "1.0.7", "parse": "2.10.0", "pg-promise": "10.3.1", @@ -12024,12 +11969,87 @@ "ws": "7.2.0" }, "dependencies": { + "@parse/s3-files-adapter": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@parse/s3-files-adapter/-/s3-files-adapter-1.4.0.tgz", + "integrity": "sha512-qivvhL09Fqozo6B86PgUZjnY3VZQtxbH+6TtHEIg20Ol9THG/JaHGzSxlWNOBsCf7lvpRp0dELgbhMnMK3LWJA==", + "dev": true, + "requires": { + "aws-sdk": "2.59.0", + "parse": "2.10.0" + } + }, + "apollo-server-express": { + "version": "2.9.13", + "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.9.13.tgz", + "integrity": "sha512-M306e07dpZ8YpZx4VBYa0FWlt+wopj4Bwn0Iy1iJ6VjaRyGx2HCUJvLpHZ+D0TIXtQ2nX3DTYeOouVaDDwJeqQ==", + "dev": true, + "requires": { + "@apollographql/graphql-playground-html": "1.6.24", + "@types/accepts": "^1.3.5", + "@types/body-parser": "1.17.1", + "@types/cors": "^2.8.4", + "@types/express": "4.17.1", + "accepts": "^1.3.5", + "apollo-server-core": "^2.9.13", + "apollo-server-types": "^0.2.8", + "body-parser": "^1.18.3", + "cors": "^2.8.4", + "express": "^4.17.1", + "graphql-subscriptions": "^1.0.0", + "graphql-tools": "^4.0.0", + "parseurl": "^1.3.2", + "subscriptions-transport-ws": "^0.9.16", + "type-is": "^1.6.16" + } + }, + "aws-sdk": { + "version": "2.59.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.59.0.tgz", + "integrity": "sha1-8kG2SrqIyI4jW4Wz8cHnFUgzGyc=", + "dev": true, + "requires": { + "buffer": "5.0.6", + "crypto-browserify": "1.0.9", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.0.1", + "xml2js": "0.4.17", + "xmlbuilder": "4.2.1" + }, + "dependencies": { + "uuid": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", + "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", + "dev": true + } + } + }, "bcryptjs": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=", "dev": true }, + "buffer": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.6.tgz", + "integrity": "sha1-LqZp9+7Atu2gWwj4tf9mGyhXNYg=", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "crypto-browserify": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-1.0.9.tgz", + "integrity": "sha1-zFRJaF37hesRyYKKzHy4erW7/MA=", + "dev": true + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -12045,6 +12065,30 @@ "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", "dev": true }, + "mongodb": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.4.0.tgz", + "integrity": "sha512-W90jm/n8F0Edm47ljkVRK9l8qGW9g8T9ZSiZWRiUP58wLhsCJCeN/JxdpVnH0CUwwAw2hITUcCo9x58udpX2Uw==", + "dev": true, + "requires": { + "bson": "^1.1.1", + "require_optional": "^1.0.1", + "safe-buffer": "^5.1.2", + "saslprep": "^1.0.0" + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=", + "dev": true + }, "ws": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.0.tgz", @@ -12054,6 +12098,25 @@ "async-limiter": "^1.0.0" } }, + "xml2js": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz", + "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "^4.1.0" + } + }, + "xmlbuilder": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz", + "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=", + "dev": true, + "requires": { + "lodash": "^4.0.0" + } + }, "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -13794,6 +13857,16 @@ } } }, + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "dev": true, + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, "sass-graph": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", @@ -14464,6 +14537,16 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "dev": true, + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", diff --git a/src/components/CodeEditor/CodeEditor.example.js b/src/components/CodeEditor/CodeEditor.example.js index 8b3fa0b069..87ba16cc77 100644 --- a/src/components/CodeEditor/CodeEditor.example.js +++ b/src/components/CodeEditor/CodeEditor.example.js @@ -14,7 +14,7 @@ export const demos = [ { name: 'Simple code editor (only JS support)', render: () => ( - + ) } ]; diff --git a/src/components/CodeEditor/CodeEditor.react.js b/src/components/CodeEditor/CodeEditor.react.js index cee871855f..44596e2dca 100644 --- a/src/components/CodeEditor/CodeEditor.react.js +++ b/src/components/CodeEditor/CodeEditor.react.js @@ -19,17 +19,25 @@ export default class CodeEditor extends React.Component { super(props); this.state = {code: ''} + this.id = `EDITOR-${Math.floor(Math.random() * 1000)}` + } + + get value() { + return document.querySelector(`#${this.id}`).value; } render() { + const {className, placeHolder, id} = this.props; + return ( -
+      
          this.setState({code})}
           highlight={code => highlight(code, languages.js)}
           padding={10}
+          textareaId={id}
           style={{
             fontFamily: '"Fira code", "Fira Mono", monospace',
             fontSize: 12,
@@ -41,6 +49,7 @@ export default class CodeEditor extends React.Component {
 }
 
 CodeEditor.propTypes = {
+  id: PropTypes.string.describe('Text area element id to be queried afterwards'),
   className: PropTypes.string.describe('CSS classes'),
   placeHolder: PropTypes.string.describe('Code place holder')
 };
diff --git a/src/lib/tests/CodeEditor.test.js b/src/lib/tests/CodeEditor.test.js
index 82ec77b7c5..5bdb00fe01 100644
--- a/src/lib/tests/CodeEditor.test.js
+++ b/src/lib/tests/CodeEditor.test.js
@@ -5,20 +5,14 @@
  * This source code is licensed under the license found in the LICENSE file in
  * the root directory of this source tree.
  */
-jest.dontMock('../../components/CodeEditor/CodeEditor.react');
+jest.dontMock("../../components/CodeEditor/CodeEditor.react");
 
-import React                            from 'react';
-import ReactDOM                         from 'react-dom';
-
-const CodeEditor = require('../../components/CodeEditor/CodeEditor.react');
-
-describe('CodeEditor', () => {
-  it('can render examples', () => {
-    jest.dontMock('../../components/CodeEditor/CodeEditor.example');
-    const example = require('../../components/CodeEditor/CodeEditor.example');
-    example.demos.forEach((example, i) => {
+describe("CodeEditor", () => {
+  it("can render examples", () => {
+    jest.dontMock("../../components/CodeEditor/CodeEditor.example");
+    const example = require("../../components/CodeEditor/CodeEditor.example");
+    example.demos.forEach(example => {
       example.render();
     });
   });
-  // test suite goes here
 });

From ea1bd42c63b0ff6413d1bc5431eb2d9f399908f7 Mon Sep 17 00:00:00 2001
From: mutterpedro 
Date: Tue, 24 Dec 2019 16:53:01 -0300
Subject: [PATCH 03/14] added playground to dashboard

---
 Parse-Dashboard/parse-dashboard-config.json   |   6 +-
 package-lock.json                             | 637 +++++++++---------
 .../BrowserFilter/BrowserFilter.react.js      |   2 +-
 src/components/Calendar/Calendar.react.js     |   2 +-
 .../ChromeDropdown/ChromeDropdown.react.js    |   4 +-
 src/components/CodeEditor/CodeEditor.react.js |   2 +-
 .../ColumnsConfiguration.react.js             |   2 +-
 .../DateTimeEditor/DateTimeEditor.react.js    |   2 +-
 .../DateTimeEntry/DateTimeEntry.react.js      |   2 +-
 .../DateTimePicker/DateTimePicker.react.js    |   2 +-
 .../ExplorerQueryComposer.react.js            |   2 +-
 src/components/FlowView/FlowView.react.js     |   2 +-
 src/components/FourOhFour/FourOhFour.react.js |   2 +-
 src/components/LiveReload/LiveReload.react.js |   2 +-
 .../MultiSelect/MultiSelect.react.js          |   2 +-
 src/components/Popover/Popover.react.js       |   6 +-
 .../PushAudienceDialog.react.js               |   2 +-
 .../PushAudiencesBaseRow.react.js             |   4 +-
 .../PushAudiencesOption.react.js              |   2 +-
 .../PushExperimentDropdown.react.js           |   2 +-
 src/components/Sidebar/SidebarHeader.react.js |   2 +-
 .../SlowQueriesFilter.react.js                |   2 +-
 .../Analytics/Overview/Overview.react.js      |   4 +-
 .../Performance/Performance.react.js          |   4 +-
 .../Analytics/Retention/Retention.react.js    |   4 +-
 src/dashboard/Apps/AppsIndex.react.js         |   2 +-
 src/dashboard/Dashboard.js                    |   5 +
 src/dashboard/DashboardView.react.js          |   6 +
 .../Browser/AttachSelectedRowsDialog.react.js |   2 +-
 .../Data/Browser/BrowserTable.react.js        |   2 +-
 .../Data/Browser/DataBrowser.react.js         |   2 +-
 .../Data/Browser/ExportDialog.react.js        |   2 +-
 .../Data/Browser/Notification.react.js        |   2 +-
 .../Data/CloudCode/CloudCode.react.js         |   4 +-
 src/dashboard/Data/Jobs/JobsData.react.js     |   2 +-
 src/dashboard/Data/Logs/Logs.react.js         |   2 +-
 .../Data/Playground/Playground.react.js       |  32 +
 src/dashboard/Push/PushAudiencesData.react.js |   4 +-
 src/dashboard/Push/PushIndex.react.js         |   4 +-
 src/dashboard/Settings/SettingsData.react.js  |   2 +-
 src/lib/subscribeTo.js                        |   6 +-
 41 files changed, 410 insertions(+), 372 deletions(-)
 create mode 100644 src/dashboard/Data/Playground/Playground.react.js

diff --git a/Parse-Dashboard/parse-dashboard-config.json b/Parse-Dashboard/parse-dashboard-config.json
index c252aebd73..04e24905e6 100644
--- a/Parse-Dashboard/parse-dashboard-config.json
+++ b/Parse-Dashboard/parse-dashboard-config.json
@@ -1,8 +1,8 @@
 {
   "apps": [{
-    "serverURL": "http://localhost:1338/parse",
-    "appId": "hello",
-    "masterKey": "world",
+    "serverURL": "https://parsedev.behive.io/parse",
+    "appId": "Q2keNQdPMD2t3dzwWANyw5w5MzaT5h6TfdVAm5oC",
+    "masterKey": "tBlFocOzlsGKSad40KmLx7wckRhxSAFhgV72GlTK",
     "appName": "",
     "iconName": "",
     "primaryBackgroundColor": "",
diff --git a/package-lock.json b/package-lock.json
index 0758126845..6fa0f12abe 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2654,6 +2654,16 @@
         }
       }
     },
+    "@parse/s3-files-adapter": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/@parse/s3-files-adapter/-/s3-files-adapter-1.4.0.tgz",
+      "integrity": "sha512-qivvhL09Fqozo6B86PgUZjnY3VZQtxbH+6TtHEIg20Ol9THG/JaHGzSxlWNOBsCf7lvpRp0dELgbhMnMK3LWJA==",
+      "dev": true,
+      "requires": {
+        "aws-sdk": "2.59.0",
+        "parse": "2.10.0"
+      }
+    },
     "@parse/simple-mailgun-adapter": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/@parse/simple-mailgun-adapter/-/simple-mailgun-adapter-1.1.0.tgz",
@@ -2980,9 +2990,9 @@
       "dev": true
     },
     "@types/node": {
-      "version": "12.12.17",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.17.tgz",
-      "integrity": "sha512-Is+l3mcHvs47sKy+afn2O1rV4ldZFU7W8101cNlOd+MRbjM4Onida8jSZnJdTe/0Pcf25g9BNIUsuugmE6puHA==",
+      "version": "13.1.0",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.0.tgz",
+      "integrity": "sha512-zwrxviZS08kRX40nqBrmERElF2vpw4IUTd5khkhBTfFH8AOaeoLVx48EC4+ZzS2/Iga7NevncqnsUSYjM4OWYA==",
       "dev": true
     },
     "@types/prop-types": {
@@ -2997,9 +3007,9 @@
       "dev": true
     },
     "@types/react": {
-      "version": "16.9.15",
-      "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.15.tgz",
-      "integrity": "sha512-WsmM1b6xQn1tG3X2Hx4F3bZwc2E82pJXt5OPs2YJgg71IzvUoKOSSSYOvLXYCg1ttipM+UuA4Lj3sfvqjVxyZw==",
+      "version": "16.9.17",
+      "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.17.tgz",
+      "integrity": "sha512-UP27In4fp4sWF5JgyV6pwVPAQM83Fj76JOcg02X5BZcpSu5Wx+fP9RMqc2v0ssBoQIFvD5JdKY41gjJJKmw6Bg==",
       "requires": {
         "@types/prop-types": "*",
         "csstype": "^2.2.0"
@@ -3077,6 +3087,7 @@
         "glob": "^7.1.6",
         "is-glob": "^4.0.1",
         "lodash.unescape": "4.0.1",
+        "semver": "^6.3.0",
         "tsutils": "^3.17.1"
       },
       "dependencies": {
@@ -3108,6 +3119,12 @@
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
           "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
           "dev": true
+        },
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+          "dev": true
         }
       }
     },
@@ -3442,16 +3459,6 @@
         }
       }
     },
-    "apollo-cache-control": {
-      "version": "0.8.8",
-      "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.8.8.tgz",
-      "integrity": "sha512-hpIJg3Tmb6quA111lrVO+d3qcyYRlJ8JqbeQdcgwLT3fb2VQzk21SrBZYl2oMM4ZqSOWCZWg4/Cn9ARYqdWjKA==",
-      "dev": true,
-      "requires": {
-        "apollo-server-env": "^2.4.3",
-        "graphql-extensions": "^0.10.7"
-      }
-    },
     "apollo-datasource": {
       "version": "0.6.3",
       "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.6.3.tgz",
@@ -3462,21 +3469,6 @@
         "apollo-server-env": "^2.4.3"
       }
     },
-    "apollo-engine-reporting": {
-      "version": "1.4.11",
-      "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-1.4.11.tgz",
-      "integrity": "sha512-7ZkbOGvPfWppN8+1KHzyHPrJTMOmrMUy38unao2c9TTToOAnEvx2MtUTo6mr3aw/g8UQYUf0x2Cq+K2YSlUTPw==",
-      "dev": true,
-      "requires": {
-        "apollo-engine-reporting-protobuf": "^0.4.4",
-        "apollo-graphql": "^0.3.4",
-        "apollo-server-caching": "^0.5.0",
-        "apollo-server-env": "^2.4.3",
-        "apollo-server-types": "^0.2.8",
-        "async-retry": "^1.2.1",
-        "graphql-extensions": "^0.10.7"
-      }
-    },
     "apollo-engine-reporting-protobuf": {
       "version": "0.4.4",
       "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.4.4.tgz",
@@ -3580,35 +3572,141 @@
         }
       }
     },
-    "apollo-server-core": {
-      "version": "2.9.13",
-      "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.9.13.tgz",
-      "integrity": "sha512-iXTGNCtouB0Xe37ySovuZO69NBYOByJlZfUc87gj0pdcz0WbdfUp7qUtNzy3onp63Zo60TFkHWhGNcBJYFluzw==",
+    "apollo-server-env": {
+      "version": "2.4.3",
+      "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.4.3.tgz",
+      "integrity": "sha512-23R5Xo9OMYX0iyTu2/qT0EUb+AULCBriA9w8HDfMoChB8M+lFClqUkYtaTTHDfp6eoARLW8kDBhPOBavsvKAjA==",
+      "dev": true,
+      "requires": {
+        "node-fetch": "^2.1.2",
+        "util.promisify": "^1.0.0"
+      }
+    },
+    "apollo-server-errors": {
+      "version": "2.3.4",
+      "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.3.4.tgz",
+      "integrity": "sha512-Y0PKQvkrb2Kd18d1NPlHdSqmlr8TgqJ7JQcNIfhNDgdb45CnqZlxL1abuIRhr8tiw8OhVOcFxz2KyglBi8TKdA==",
+      "dev": true
+    },
+    "apollo-server-express": {
+      "version": "2.9.14",
+      "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.9.14.tgz",
+      "integrity": "sha512-ai+VKPlOUzJsbSQcazjATNtWwdgcvZBWBCbTF7ZUC9Uo6FfSlKOmP3raQAq+gKqsnFwv34p4k17c/Asw5ZjSMQ==",
       "dev": true,
       "requires": {
-        "@apollographql/apollo-tools": "^0.4.0",
         "@apollographql/graphql-playground-html": "1.6.24",
-        "@types/graphql-upload": "^8.0.0",
-        "@types/ws": "^6.0.0",
-        "apollo-cache-control": "^0.8.8",
-        "apollo-datasource": "^0.6.3",
-        "apollo-engine-reporting": "^1.4.11",
-        "apollo-server-caching": "^0.5.0",
-        "apollo-server-env": "^2.4.3",
-        "apollo-server-errors": "^2.3.4",
-        "apollo-server-plugin-base": "^0.6.8",
-        "apollo-server-types": "^0.2.8",
-        "apollo-tracing": "^0.8.8",
-        "fast-json-stable-stringify": "^2.0.0",
-        "graphql-extensions": "^0.10.7",
-        "graphql-tag": "^2.9.2",
+        "@types/accepts": "^1.3.5",
+        "@types/body-parser": "1.17.1",
+        "@types/cors": "^2.8.4",
+        "@types/express": "4.17.1",
+        "accepts": "^1.3.5",
+        "apollo-server-core": "^2.9.14",
+        "apollo-server-types": "^0.2.9",
+        "body-parser": "^1.18.3",
+        "cors": "^2.8.4",
+        "express": "^4.17.1",
+        "graphql-subscriptions": "^1.0.0",
         "graphql-tools": "^4.0.0",
-        "graphql-upload": "^8.0.2",
-        "sha.js": "^2.4.11",
-        "subscriptions-transport-ws": "^0.9.11",
-        "ws": "^6.0.0"
+        "parseurl": "^1.3.2",
+        "subscriptions-transport-ws": "^0.9.16",
+        "type-is": "^1.6.16"
       },
       "dependencies": {
+        "apollo-cache-control": {
+          "version": "0.8.9",
+          "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.8.9.tgz",
+          "integrity": "sha512-EFRAEL13QkMbXhl0NSABVS0wfiKYIVV4sDR+XNtRy3EWf2rWw7xulYFDMPiujjtElF2qjTswzcpLtYOXgOZN9A==",
+          "dev": true,
+          "requires": {
+            "apollo-server-env": "^2.4.3",
+            "graphql-extensions": "^0.10.8"
+          }
+        },
+        "apollo-engine-reporting": {
+          "version": "1.4.12",
+          "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-1.4.12.tgz",
+          "integrity": "sha512-W1PpXaXSrqZu4Ae9NrjWXtTL9HFbQPynQLiGDAsDmCsL/wRAVyl6qRhVteSj7drwgXgAH5TwtUCnjJgSI+ixlg==",
+          "dev": true,
+          "requires": {
+            "apollo-engine-reporting-protobuf": "^0.4.4",
+            "apollo-graphql": "^0.3.4",
+            "apollo-server-caching": "^0.5.0",
+            "apollo-server-env": "^2.4.3",
+            "apollo-server-types": "^0.2.9",
+            "async-retry": "^1.2.1",
+            "graphql-extensions": "^0.10.8"
+          }
+        },
+        "apollo-server-core": {
+          "version": "2.9.14",
+          "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.9.14.tgz",
+          "integrity": "sha512-Vc8TicXFFZGuEgo5AY1Ey0XuvHn7NQS1y7WxOQnr85KJ2zeRa6uIT8tU+73ZObzan3nlm9ysYtfSXh2QL21oyg==",
+          "dev": true,
+          "requires": {
+            "@apollographql/apollo-tools": "^0.4.0",
+            "@apollographql/graphql-playground-html": "1.6.24",
+            "@types/graphql-upload": "^8.0.0",
+            "@types/ws": "^6.0.0",
+            "apollo-cache-control": "^0.8.9",
+            "apollo-datasource": "^0.6.3",
+            "apollo-engine-reporting": "^1.4.12",
+            "apollo-server-caching": "^0.5.0",
+            "apollo-server-env": "^2.4.3",
+            "apollo-server-errors": "^2.3.4",
+            "apollo-server-plugin-base": "^0.6.9",
+            "apollo-server-types": "^0.2.9",
+            "apollo-tracing": "^0.8.9",
+            "fast-json-stable-stringify": "^2.0.0",
+            "graphql-extensions": "^0.10.8",
+            "graphql-tag": "^2.9.2",
+            "graphql-tools": "^4.0.0",
+            "graphql-upload": "^8.0.2",
+            "sha.js": "^2.4.11",
+            "subscriptions-transport-ws": "^0.9.11",
+            "ws": "^6.0.0"
+          }
+        },
+        "apollo-server-plugin-base": {
+          "version": "0.6.9",
+          "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.6.9.tgz",
+          "integrity": "sha512-75rorl0y07PK7A/U1Oe9unLIGgbmy1T6uaCQ5zl8zy+mtmFFcH1nYERfXZha1eTDWLCx0F/xNI6YJmWxSisc5w==",
+          "dev": true,
+          "requires": {
+            "apollo-server-types": "^0.2.9"
+          }
+        },
+        "apollo-server-types": {
+          "version": "0.2.9",
+          "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-0.2.9.tgz",
+          "integrity": "sha512-Iu9twx3lycH41F8shmrb33b4y0mNBz1chBdTIaSgIMmNwPDR4xs4eB6iyTK5swnaYC1eW+c+t5lHRUk7yexs/g==",
+          "dev": true,
+          "requires": {
+            "apollo-engine-reporting-protobuf": "^0.4.4",
+            "apollo-server-caching": "^0.5.0",
+            "apollo-server-env": "^2.4.3"
+          }
+        },
+        "apollo-tracing": {
+          "version": "0.8.9",
+          "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.8.9.tgz",
+          "integrity": "sha512-DYHPUW0rFcxxtI8+qU3leNU+fKfq9NPTjgPMr/AJmxKfsdOI6QgfVzVP/khiik0kU0+BMl5zBplwEDDdgbkUlg==",
+          "dev": true,
+          "requires": {
+            "apollo-server-env": "^2.4.3",
+            "graphql-extensions": "^0.10.8"
+          }
+        },
+        "graphql-extensions": {
+          "version": "0.10.8",
+          "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.10.8.tgz",
+          "integrity": "sha512-cUcc014vz+pfwcER8pc4ts/WWhDCrC9jhNFIiWYYntd2TshS+tZFsZ362i4P2VYLbpYCgFiO+xRY1f2mylyz5A==",
+          "dev": true,
+          "requires": {
+            "@apollographql/apollo-tools": "^0.4.0",
+            "apollo-server-env": "^2.4.3",
+            "apollo-server-types": "^0.2.9"
+          }
+        },
         "graphql-upload": {
           "version": "8.1.0",
           "resolved": "https://registry.npmjs.org/graphql-upload/-/graphql-upload-8.1.0.tgz",
@@ -3619,23 +3717,6 @@
             "fs-capacitor": "^2.0.4",
             "http-errors": "^1.7.3",
             "object-path": "^0.11.4"
-          },
-          "dependencies": {
-            "busboy": {
-              "version": "0.3.1",
-              "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz",
-              "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==",
-              "dev": true,
-              "requires": {
-                "dicer": "0.3.0"
-              }
-            },
-            "object-path": {
-              "version": "0.11.4",
-              "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz",
-              "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=",
-              "dev": true
-            }
           }
         },
         "http-errors": {
@@ -3668,52 +3749,6 @@
         }
       }
     },
-    "apollo-server-env": {
-      "version": "2.4.3",
-      "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.4.3.tgz",
-      "integrity": "sha512-23R5Xo9OMYX0iyTu2/qT0EUb+AULCBriA9w8HDfMoChB8M+lFClqUkYtaTTHDfp6eoARLW8kDBhPOBavsvKAjA==",
-      "dev": true,
-      "requires": {
-        "node-fetch": "^2.1.2",
-        "util.promisify": "^1.0.0"
-      }
-    },
-    "apollo-server-errors": {
-      "version": "2.3.4",
-      "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.3.4.tgz",
-      "integrity": "sha512-Y0PKQvkrb2Kd18d1NPlHdSqmlr8TgqJ7JQcNIfhNDgdb45CnqZlxL1abuIRhr8tiw8OhVOcFxz2KyglBi8TKdA==",
-      "dev": true
-    },
-    "apollo-server-plugin-base": {
-      "version": "0.6.8",
-      "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.6.8.tgz",
-      "integrity": "sha512-0pKCjcg9gHBK8qlb280+N0jl99meixQtxXnMJFyIfD+45OpKQ+WolHIbO0oZgNEt7r/lNWwH8v3l5yYm1ghz1A==",
-      "dev": true,
-      "requires": {
-        "apollo-server-types": "^0.2.8"
-      }
-    },
-    "apollo-server-types": {
-      "version": "0.2.8",
-      "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-0.2.8.tgz",
-      "integrity": "sha512-5OclxkAqjhuO75tTNHpSO/+doJZ+VlRtTefnrPJdK/uwVew9U/VUCWkYdryZWwEyVe1nvQ/4E7RYR4tGb8l8wA==",
-      "dev": true,
-      "requires": {
-        "apollo-engine-reporting-protobuf": "^0.4.4",
-        "apollo-server-caching": "^0.5.0",
-        "apollo-server-env": "^2.4.3"
-      }
-    },
-    "apollo-tracing": {
-      "version": "0.8.8",
-      "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.8.8.tgz",
-      "integrity": "sha512-aIwT2PsH7VZZPaNrIoSjzLKMlG644d2Uf+GYcoMd3X6UEyg1sXdWqkKfCeoS6ChJKH2khO7MXAvOZC03UnCumQ==",
-      "dev": true,
-      "requires": {
-        "apollo-server-env": "^2.4.3",
-        "graphql-extensions": "^0.10.7"
-      }
-    },
     "apollo-utilities": {
       "version": "1.3.2",
       "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.2.tgz",
@@ -3929,6 +3964,72 @@
       "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
       "dev": true
     },
+    "aws-sdk": {
+      "version": "2.59.0",
+      "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.59.0.tgz",
+      "integrity": "sha1-8kG2SrqIyI4jW4Wz8cHnFUgzGyc=",
+      "dev": true,
+      "requires": {
+        "buffer": "5.0.6",
+        "crypto-browserify": "1.0.9",
+        "jmespath": "0.15.0",
+        "querystring": "0.2.0",
+        "sax": "1.2.1",
+        "url": "0.10.3",
+        "uuid": "3.0.1",
+        "xml2js": "0.4.17",
+        "xmlbuilder": "4.2.1"
+      },
+      "dependencies": {
+        "buffer": {
+          "version": "5.0.6",
+          "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.6.tgz",
+          "integrity": "sha1-LqZp9+7Atu2gWwj4tf9mGyhXNYg=",
+          "dev": true,
+          "requires": {
+            "base64-js": "^1.0.2",
+            "ieee754": "^1.1.4"
+          }
+        },
+        "crypto-browserify": {
+          "version": "1.0.9",
+          "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-1.0.9.tgz",
+          "integrity": "sha1-zFRJaF37hesRyYKKzHy4erW7/MA=",
+          "dev": true
+        },
+        "sax": {
+          "version": "1.2.1",
+          "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",
+          "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=",
+          "dev": true
+        },
+        "uuid": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
+          "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=",
+          "dev": true
+        },
+        "xml2js": {
+          "version": "0.4.17",
+          "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz",
+          "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=",
+          "dev": true,
+          "requires": {
+            "sax": ">=0.6.0",
+            "xmlbuilder": "^4.1.0"
+          }
+        },
+        "xmlbuilder": {
+          "version": "4.2.1",
+          "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz",
+          "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=",
+          "dev": true,
+          "requires": {
+            "lodash": "^4.0.0"
+          }
+        }
+      }
+    },
     "aws-sign2": {
       "version": "0.7.0",
       "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
@@ -5454,9 +5555,9 @@
       }
     },
     "csstype": {
-      "version": "2.6.7",
-      "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.7.tgz",
-      "integrity": "sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ=="
+      "version": "2.6.8",
+      "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.8.tgz",
+      "integrity": "sha512-msVS9qTuMT5zwAGCVm4mxfrZ18BNc6Csd0oJAtiFMZ1FAx1CCvy2+5MDmYoix63LM/6NDbNtodCiGYGmFgO0dA=="
     },
     "csurf": {
       "version": "1.10.0",
@@ -5495,12 +5596,6 @@
         "array-find-index": "^1.0.1"
       }
     },
-    "cycle": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
-      "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
-      "dev": true
-    },
     "cyclist": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
@@ -5784,9 +5879,9 @@
       },
       "dependencies": {
         "redux": {
-          "version": "4.0.4",
-          "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.4.tgz",
-          "integrity": "sha512-vKv4WdiJxOWKxK0yRoaK3Y4pxxB0ilzVx6dszU2W8wLxlb2yikRph4iV/ymtdJ6ZxpBLFbyrxklnT5yBbQSl3Q==",
+          "version": "4.0.5",
+          "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz",
+          "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==",
           "requires": {
             "loose-envify": "^1.4.0",
             "symbol-observable": "^1.2.0"
@@ -6851,9 +6946,9 @@
       }
     },
     "file-stream-rotator": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.4.1.tgz",
-      "integrity": "sha512-W3aa3QJEc8BS2MmdVpQiYLKHj3ijpto1gMDlsgCRSKfIUe6MwkcpODGPQ3vZfb0XvCeCqlu9CBQTN7oQri2TZQ==",
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.5.5.tgz",
+      "integrity": "sha512-XzvE1ogpxUbARtZPZLICaDRAeWxoQLFMKS3ZwADoCQmurKEwuDD2jEfDVPm/R1HeKYsRYEl9PzVIezjQ3VTTPQ==",
       "dev": true,
       "requires": {
         "moment": "^2.11.2"
@@ -7945,17 +8040,6 @@
         "minimatch": "^3.0.4"
       }
     },
-    "graphql-extensions": {
-      "version": "0.10.7",
-      "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.10.7.tgz",
-      "integrity": "sha512-YuP7VQxNePG4bWRQ5Vk+KRMbZ9r1IWCqCCogOMz/1ueeQ4gZe93eGRcb0vhpOdMFnCX6Vyvd4+sC+N6LR3YFOQ==",
-      "dev": true,
-      "requires": {
-        "@apollographql/apollo-tools": "^0.4.0",
-        "apollo-server-env": "^2.4.3",
-        "apollo-server-types": "^0.2.8"
-      }
-    },
     "graphql-import": {
       "version": "0.4.5",
       "resolved": "https://registry.npmjs.org/graphql-import/-/graphql-import-0.4.5.tgz",
@@ -9181,7 +9265,16 @@
         "@babel/template": "^7.4.0",
         "@babel/traverse": "^7.4.3",
         "@babel/types": "^7.4.0",
-        "istanbul-lib-coverage": "^2.0.5"
+        "istanbul-lib-coverage": "^2.0.5",
+        "semver": "^6.0.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+          "dev": true
+        }
       }
     },
     "istanbul-lib-report": {
@@ -9600,7 +9693,16 @@
         "jest-resolve": "^24.9.0",
         "mkdirp": "^0.5.1",
         "natural-compare": "^1.4.0",
-        "pretty-format": "^24.9.0"
+        "pretty-format": "^24.9.0",
+        "semver": "^6.2.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+          "dev": true
+        }
       }
     },
     "jest-util": {
@@ -10763,6 +10865,26 @@
       "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==",
       "dev": true
     },
+    "mongodb": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.4.1.tgz",
+      "integrity": "sha512-juqt5/Z42J4DcE7tG7UdVaTKmUC6zinF4yioPfpeOSNBieWSK6qCY+0tfGQcHLKrauWPDdMZVROHJOa8q2pWsA==",
+      "dev": true,
+      "requires": {
+        "bson": "^1.1.1",
+        "require_optional": "^1.0.1",
+        "safe-buffer": "^5.1.2",
+        "saslprep": "^1.0.0"
+      },
+      "dependencies": {
+        "safe-buffer": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
+          "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
+          "dev": true
+        }
+      }
+    },
     "move-concurrently": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
@@ -11511,9 +11633,9 @@
       }
     },
     "object-hash": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
-      "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.0.1.tgz",
+      "integrity": "sha512-HgcGMooY4JC2PBt9sdUdJ6PMzpin+YtY3r/7wg0uTifP+HJWW8rammseSEHuyt0UeShI183UGssCJqm1bJR7QA==",
       "dev": true
     },
     "object-inspect": {
@@ -11853,7 +11975,15 @@
       "requires": {
         "got": "^9.6.0",
         "registry-auth-token": "^4.0.0",
-        "registry-url": "^5.0.0"
+        "registry-url": "^5.0.0",
+        "semver": "^6.2.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+        }
       }
     },
     "packet-reader": {
@@ -11893,12 +12023,21 @@
       "resolved": "https://registry.npmjs.org/parse/-/parse-2.10.0.tgz",
       "integrity": "sha512-TBJCvQPachrcGGLbN8llN8tOr01VsKB6pxi3OWq3/C0bIHHdb2Bd+cgH4v5ZlRCrZt3MHVasGH4rvx7Klkp7Wg==",
       "requires": {
+        "@babel/runtime": "7.7.4",
         "@babel/runtime-corejs3": "7.7.4",
         "uuid": "3.3.3",
         "ws": "7.2.0",
         "xmlhttprequest": "1.8.0"
       },
       "dependencies": {
+        "@babel/runtime": {
+          "version": "7.7.4",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.4.tgz",
+          "integrity": "sha512-r24eVUUr0QqNZa+qrImUk8fn5SPhHq+IfYvIoIMg0do3GdK9sMdiLKP3GYVVaxpPKORgm8KRKaNTEhAjgIpLMw==",
+          "requires": {
+            "regenerator-runtime": "^0.13.2"
+          }
+        },
         "ws": {
           "version": "7.2.0",
           "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.0.tgz",
@@ -11940,7 +12079,7 @@
       "dev": true
     },
     "parse-server": {
-      "version": "github:parseplatform/parse-server#e0e06ef131dd6ff60e6fd80a40771ac7116ea8c0",
+      "version": "github:parseplatform/parse-server#1a99cb3f2ec51ffc90c8d54c99eae483df11abe3",
       "from": "github:parseplatform/parse-server#master",
       "dev": true,
       "requires": {
@@ -11949,7 +12088,7 @@
         "@parse/push-adapter": "3.2.0",
         "@parse/s3-files-adapter": "1.4.0",
         "@parse/simple-mailgun-adapter": "1.1.0",
-        "apollo-server-express": "2.9.13",
+        "apollo-server-express": "2.9.14",
         "bcrypt": "3.0.7",
         "bcryptjs": "2.4.3",
         "body-parser": "1.19.0",
@@ -11969,101 +12108,27 @@
         "lodash": "4.17.15",
         "lru-cache": "5.1.1",
         "mime": "2.4.4",
-        "mongodb": "3.4.0",
+        "mongodb": "3.4.1",
         "node-rsa": "1.0.7",
         "parse": "2.10.0",
         "pg-promise": "10.3.1",
         "pluralize": "^8.0.0",
         "redis": "2.8.0",
+        "semver": "7.1.1",
         "subscriptions-transport-ws": "0.9.16",
         "tv4": "1.3.0",
         "uuid": "3.3.3",
         "winston": "3.2.1",
-        "winston-daily-rotate-file": "3.10.0",
-        "ws": "7.2.0"
+        "winston-daily-rotate-file": "4.4.0",
+        "ws": "7.2.1"
       },
       "dependencies": {
-        "@parse/s3-files-adapter": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/@parse/s3-files-adapter/-/s3-files-adapter-1.4.0.tgz",
-          "integrity": "sha512-qivvhL09Fqozo6B86PgUZjnY3VZQtxbH+6TtHEIg20Ol9THG/JaHGzSxlWNOBsCf7lvpRp0dELgbhMnMK3LWJA==",
-          "dev": true,
-          "requires": {
-            "aws-sdk": "2.59.0",
-            "parse": "2.10.0"
-          }
-        },
-        "apollo-server-express": {
-          "version": "2.9.13",
-          "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.9.13.tgz",
-          "integrity": "sha512-M306e07dpZ8YpZx4VBYa0FWlt+wopj4Bwn0Iy1iJ6VjaRyGx2HCUJvLpHZ+D0TIXtQ2nX3DTYeOouVaDDwJeqQ==",
-          "dev": true,
-          "requires": {
-            "@apollographql/graphql-playground-html": "1.6.24",
-            "@types/accepts": "^1.3.5",
-            "@types/body-parser": "1.17.1",
-            "@types/cors": "^2.8.4",
-            "@types/express": "4.17.1",
-            "accepts": "^1.3.5",
-            "apollo-server-core": "^2.9.13",
-            "apollo-server-types": "^0.2.8",
-            "body-parser": "^1.18.3",
-            "cors": "^2.8.4",
-            "express": "^4.17.1",
-            "graphql-subscriptions": "^1.0.0",
-            "graphql-tools": "^4.0.0",
-            "parseurl": "^1.3.2",
-            "subscriptions-transport-ws": "^0.9.16",
-            "type-is": "^1.6.16"
-          }
-        },
-        "aws-sdk": {
-          "version": "2.59.0",
-          "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.59.0.tgz",
-          "integrity": "sha1-8kG2SrqIyI4jW4Wz8cHnFUgzGyc=",
-          "dev": true,
-          "requires": {
-            "buffer": "5.0.6",
-            "crypto-browserify": "1.0.9",
-            "jmespath": "0.15.0",
-            "querystring": "0.2.0",
-            "sax": "1.2.1",
-            "url": "0.10.3",
-            "uuid": "3.0.1",
-            "xml2js": "0.4.17",
-            "xmlbuilder": "4.2.1"
-          },
-          "dependencies": {
-            "uuid": {
-              "version": "3.0.1",
-              "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
-              "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=",
-              "dev": true
-            }
-          }
-        },
         "bcryptjs": {
           "version": "2.4.3",
           "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
           "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=",
           "dev": true
         },
-        "buffer": {
-          "version": "5.0.6",
-          "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.6.tgz",
-          "integrity": "sha1-LqZp9+7Atu2gWwj4tf9mGyhXNYg=",
-          "dev": true,
-          "requires": {
-            "base64-js": "^1.0.2",
-            "ieee754": "^1.1.4"
-          }
-        },
-        "crypto-browserify": {
-          "version": "1.0.9",
-          "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-1.0.9.tgz",
-          "integrity": "sha1-zFRJaF37hesRyYKKzHy4erW7/MA=",
-          "dev": true
-        },
         "lru-cache": {
           "version": "5.1.1",
           "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
@@ -12079,57 +12144,11 @@
           "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==",
           "dev": true
         },
-        "mongodb": {
-          "version": "3.4.0",
-          "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.4.0.tgz",
-          "integrity": "sha512-W90jm/n8F0Edm47ljkVRK9l8qGW9g8T9ZSiZWRiUP58wLhsCJCeN/JxdpVnH0CUwwAw2hITUcCo9x58udpX2Uw==",
-          "dev": true,
-          "requires": {
-            "bson": "^1.1.1",
-            "require_optional": "^1.0.1",
-            "safe-buffer": "^5.1.2",
-            "saslprep": "^1.0.0"
-          }
-        },
-        "safe-buffer": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
-          "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
-          "dev": true
-        },
-        "sax": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",
-          "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=",
-          "dev": true
-        },
         "ws": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.0.tgz",
-          "integrity": "sha512-+SqNqFbwTm/0DC18KYzIsMTnEWpLwJsiasW/O17la4iDRRIO9uaHbvKiAS3AHgTiuuWerK/brj4O6MYZkei9xg==",
-          "dev": true,
-          "requires": {
-            "async-limiter": "^1.0.0"
-          }
-        },
-        "xml2js": {
-          "version": "0.4.17",
-          "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz",
-          "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=",
-          "dev": true,
-          "requires": {
-            "sax": ">=0.6.0",
-            "xmlbuilder": "^4.1.0"
-          }
-        },
-        "xmlbuilder": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz",
-          "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=",
-          "dev": true,
-          "requires": {
-            "lodash": "^4.0.0"
-          }
+          "version": "7.2.1",
+          "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.1.tgz",
+          "integrity": "sha512-sucePNSafamSKoOqoNfBd8V0StlkzJKL2ZAhGQinCfNQ+oacw+Pk7lcdAElecBF2VkLNZRiIb5Oi1Q5lVUVt2A==",
+          "dev": true
         },
         "yallist": {
           "version": "3.1.1",
@@ -12317,9 +12336,9 @@
       "dev": true
     },
     "pg-pool": {
-      "version": "2.0.7",
-      "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.7.tgz",
-      "integrity": "sha512-UiJyO5B9zZpu32GSlP0tXy8J2NsJ9EFGFfz5v6PSbdz/1hBLX1rNiiy5+mAm5iJJYwfCv4A0EBcQLGWwjbpzZw==",
+      "version": "2.0.8",
+      "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.8.tgz",
+      "integrity": "sha512-UE4H+4PT53RbwYaGxkeVDcMcp1g8EmYo91qeUugijsHwzV/RDpYVRWzmfiDisEQZhVDzyf/GUctNOrh+ZPJCGA==",
       "dev": true
     },
     "pg-promise": {
@@ -14107,7 +14126,16 @@
         "clone-deep": "^4.0.1",
         "loader-utils": "^1.2.3",
         "neo-async": "^2.6.1",
-        "schema-utils": "^2.1.0"
+        "schema-utils": "^2.1.0",
+        "semver": "^6.3.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+          "dev": true
+        }
       }
     },
     "sax": {
@@ -16106,48 +16134,15 @@
         }
       }
     },
-    "winston-compat": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/winston-compat/-/winston-compat-0.1.4.tgz",
-      "integrity": "sha512-mMEfFsSm6GmkFF+f4/0UJtG4N1vSaczGmXLVJYmS/+u2zUaIPcw2ZRuwUg2TvVBjswgiraN+vNnAG8z4fRUZ4w==",
-      "dev": true,
-      "requires": {
-        "cycle": "~1.0.3",
-        "logform": "^1.6.0",
-        "triple-beam": "^1.2.0"
-      },
-      "dependencies": {
-        "logform": {
-          "version": "1.10.0",
-          "resolved": "https://registry.npmjs.org/logform/-/logform-1.10.0.tgz",
-          "integrity": "sha512-em5ojIhU18fIMOw/333mD+ZLE2fis0EzXl1ZwHx4iQzmpQi6odNiY/t+ITNr33JZhT9/KEaH+UPIipr6a9EjWg==",
-          "dev": true,
-          "requires": {
-            "colors": "^1.2.1",
-            "fast-safe-stringify": "^2.0.4",
-            "fecha": "^2.3.3",
-            "ms": "^2.1.1",
-            "triple-beam": "^1.2.0"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        }
-      }
-    },
     "winston-daily-rotate-file": {
-      "version": "3.10.0",
-      "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-3.10.0.tgz",
-      "integrity": "sha512-KO8CfbI2CvdR3PaFApEH02GPXiwJ+vbkF1mCkTlvRIoXFI8EFlf1ACcuaahXTEiDEKCii6cNe95gsL4ZkbnphA==",
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-4.4.0.tgz",
+      "integrity": "sha512-1JHFqpqkZphLZPUDQBoJpcBj2cy/aZkOXlcHcZa3oVcNXxuenptGGXztI07jqTJ/FJdUPm1MOLwrp09zPFIUew==",
       "dev": true,
       "requires": {
-        "file-stream-rotator": "^0.4.1",
-        "object-hash": "^1.3.0",
+        "file-stream-rotator": "^0.5.5",
+        "object-hash": "^2.0.1",
         "triple-beam": "^1.3.0",
-        "winston-compat": "^0.1.4",
         "winston-transport": "^4.2.0"
       }
     },
diff --git a/src/components/BrowserFilter/BrowserFilter.react.js b/src/components/BrowserFilter/BrowserFilter.react.js
index 9d821b6fca..16d809407f 100644
--- a/src/components/BrowserFilter/BrowserFilter.react.js
+++ b/src/components/BrowserFilter/BrowserFilter.react.js
@@ -34,7 +34,7 @@ export default class BrowserFilter extends React.Component {
     this.node = ReactDOM.findDOMNode(this);
   }
 
-  componentWillReceiveProps(props) {
+  UNSAFE_componentWillReceiveProps(props) {
     if (props.className !== this.props.className) {
       this.setState({ open: false });
     }
diff --git a/src/components/Calendar/Calendar.react.js b/src/components/Calendar/Calendar.react.js
index 64076468c6..7616627a60 100644
--- a/src/components/Calendar/Calendar.react.js
+++ b/src/components/Calendar/Calendar.react.js
@@ -26,7 +26,7 @@ export default class Calendar extends React.Component {
     };
   }
 
-  componentWillReceiveProps(props) {
+  UNSAFE_componentWillReceiveProps(props) {
     if (props.value) {
       this.setState({
         currentMonth: new Date(props.value[getDateMethod(props.local, 'getFullYear')](), props.value[getDateMethod(props.local, 'getMonth')](), 1)
diff --git a/src/components/ChromeDropdown/ChromeDropdown.react.js b/src/components/ChromeDropdown/ChromeDropdown.react.js
index dac17a3409..6f3fb6de16 100644
--- a/src/components/ChromeDropdown/ChromeDropdown.react.js
+++ b/src/components/ChromeDropdown/ChromeDropdown.react.js
@@ -22,7 +22,7 @@ export default class ChromeDropdown extends React.Component {
     };
   }
 
-  componentWillReceiveProps(nextProps) {
+  UNSAFE_componentWillReceiveProps(nextProps) {
     this.keyValueMap = {};
     nextProps.options.forEach((value) => {
       if (value instanceof Object) {
@@ -34,7 +34,7 @@ export default class ChromeDropdown extends React.Component {
     }
   }
 
-  componentWillMount() {
+  UNSAFE_componentWillMount() {
     this.styles = this.props.styles || styles;
   }
 
diff --git a/src/components/CodeEditor/CodeEditor.react.js b/src/components/CodeEditor/CodeEditor.react.js
index 44596e2dca..bab6d22959 100644
--- a/src/components/CodeEditor/CodeEditor.react.js
+++ b/src/components/CodeEditor/CodeEditor.react.js
@@ -18,7 +18,7 @@ export default class CodeEditor extends React.Component {
   constructor(props) {
     super(props);
 
-    this.state = {code: ''}
+    this.state = {code: ''};
     this.id = `EDITOR-${Math.floor(Math.random() * 1000)}`
   }
 
diff --git a/src/components/ColumnsConfiguration/ColumnsConfiguration.react.js b/src/components/ColumnsConfiguration/ColumnsConfiguration.react.js
index b56f1466b8..43b23ade0f 100644
--- a/src/components/ColumnsConfiguration/ColumnsConfiguration.react.js
+++ b/src/components/ColumnsConfiguration/ColumnsConfiguration.react.js
@@ -23,7 +23,7 @@ export default class ColumnsConfiguration extends React.Component {
     this.node = ReactDOM.findDOMNode(this);
   }
 
-  componentWillReceiveProps(props) {
+  UNSAFE_componentWillReceiveProps(props) {
     if (props.schema !== this.props.schema) {
       this.setState({
         open: false
diff --git a/src/components/DateTimeEditor/DateTimeEditor.react.js b/src/components/DateTimeEditor/DateTimeEditor.react.js
index 9c9bd1a34d..80f5e8255e 100644
--- a/src/components/DateTimeEditor/DateTimeEditor.react.js
+++ b/src/components/DateTimeEditor/DateTimeEditor.react.js
@@ -25,7 +25,7 @@ export default class DateTimeEditor extends React.Component {
     this.handleKey = this.handleKey.bind(this);
   }
 
-  componentWillReceiveProps(props) {
+  UNSAFE_componentWillReceiveProps(props) {
     this.setState({ value: props.value, text: props.value.toISOString() });
   }
 
diff --git a/src/components/DateTimeEntry/DateTimeEntry.react.js b/src/components/DateTimeEntry/DateTimeEntry.react.js
index 176155cc42..a735e7b493 100644
--- a/src/components/DateTimeEntry/DateTimeEntry.react.js
+++ b/src/components/DateTimeEntry/DateTimeEntry.react.js
@@ -22,7 +22,7 @@ export default class DateTimeEntry extends React.Component {
     }
   }
 
-  componentWillReceiveProps(props) {
+  UNSAFE_componentWillReceiveProps(props) {
     this.setState({
       value: props.value.toISOString ? props.value.toISOString() : props.value
     });
diff --git a/src/components/DateTimePicker/DateTimePicker.react.js b/src/components/DateTimePicker/DateTimePicker.react.js
index 5f9908f490..4855ff6e74 100644
--- a/src/components/DateTimePicker/DateTimePicker.react.js
+++ b/src/components/DateTimePicker/DateTimePicker.react.js
@@ -22,7 +22,7 @@ export default class DateTimePicker extends React.Component {
     }
   }
 
-  componentWillReceiveProps(props) {
+  UNSAFE_componentWillReceiveProps(props) {
     let timeRef = props.value || hoursFrom(new Date(), 1);
     this.setState({
       hours: String(timeRef[getDateMethod(props.local, 'getHours')]()),
diff --git a/src/components/ExplorerQueryComposer/ExplorerQueryComposer.react.js b/src/components/ExplorerQueryComposer/ExplorerQueryComposer.react.js
index c852974bc8..1f3b8bc58a 100644
--- a/src/components/ExplorerQueryComposer/ExplorerQueryComposer.react.js
+++ b/src/components/ExplorerQueryComposer/ExplorerQueryComposer.react.js
@@ -187,7 +187,7 @@ export default class ExplorerQueryComposer extends React.Component {
     return options;
   }
 
-  componentWillReceiveProps(nextProps) {
+  UNSAFE_componentWillReceiveProps(nextProps) {
     let initialState = this.getInitialStateFromProps(nextProps);
     this.setState({ ...initialState });
   }
diff --git a/src/components/FlowView/FlowView.react.js b/src/components/FlowView/FlowView.react.js
index 275f272b4e..b5a76b0f8e 100644
--- a/src/components/FlowView/FlowView.react.js
+++ b/src/components/FlowView/FlowView.react.js
@@ -22,7 +22,7 @@ export default class FlowView extends React.Component {
     };
   }
 
-  componentWillReceiveProps(props) {
+  UNSAFE_componentWillReceiveProps(props) {
     let newChanges = {...this.state.changes};
     for (let k in props.initialFields) {
       if (this.state.changes[k] === props.initialFields[k]) {
diff --git a/src/components/FourOhFour/FourOhFour.react.js b/src/components/FourOhFour/FourOhFour.react.js
index edbfd0d1a4..ca2691e78a 100644
--- a/src/components/FourOhFour/FourOhFour.react.js
+++ b/src/components/FourOhFour/FourOhFour.react.js
@@ -22,7 +22,7 @@ export default class FourOhFour extends React.Component {
     this.updateEmoji = this.updateEmoji.bind(this);
   }
 
-  componentWillMount() {
+  UNSAFE_componentWillMount() {
     this.timeout = setTimeout(this.updateEmoji, 3000);
   }
 
diff --git a/src/components/LiveReload/LiveReload.react.js b/src/components/LiveReload/LiveReload.react.js
index 2497760ac3..f25d932ed7 100644
--- a/src/components/LiveReload/LiveReload.react.js
+++ b/src/components/LiveReload/LiveReload.react.js
@@ -53,7 +53,7 @@ export default class LiveReload extends React.Component {
 		return promise;
 	}
 
-  componentWillMount() {
+  UNSAFE_componentWillMount() {
 		this.shouldContinueReloading = true;
 		if (!this.state.currentData) {
 			this.fetchNewData();
diff --git a/src/components/MultiSelect/MultiSelect.react.js b/src/components/MultiSelect/MultiSelect.react.js
index 08532a641a..4736de5159 100644
--- a/src/components/MultiSelect/MultiSelect.react.js
+++ b/src/components/MultiSelect/MultiSelect.react.js
@@ -27,7 +27,7 @@ export default class MultiSelect extends React.Component {
     this.node = ReactDOM.findDOMNode(this);
   }
 
-  componentWillReceiveProps() {
+  UNSAFE_componentWillReceiveProps() {
     //Necessary for when the size of the field changes.
     this.setState({}, this.setPosition.bind(this));
   }
diff --git a/src/components/Popover/Popover.react.js b/src/components/Popover/Popover.react.js
index 243aef3d1c..ae4dd68947 100644
--- a/src/components/Popover/Popover.react.js
+++ b/src/components/Popover/Popover.react.js
@@ -32,7 +32,7 @@ export default class Popover extends React.Component {
     super();
     this._checkExternalClick = this._checkExternalClick.bind(this);
   }
-  componentWillMount() {
+  UNSAFE_componentWillMount() {
     let wrapperStyle = this.props.fixed ?
       styles.fixed_wrapper :
       styles.popover_wrapper;
@@ -60,7 +60,7 @@ export default class Popover extends React.Component {
     this._popoverWrapper.appendChild(this._popoverLayer);
   }
 
-  componentWillReceiveProps(nextProps) {
+  UNSAFE_componentWillReceiveProps(nextProps) {
     if (nextProps.position) {
       this._popoverLayer.style.left = this.props.position.x + 'px';
       this._popoverLayer.style.top = this.props.position.y + 'px';
@@ -78,7 +78,7 @@ export default class Popover extends React.Component {
     this._popoverWrapper.removeChild(this._popoverLayer);
   }
 
-  componentWillUpdate(nextProps) {
+  UNSAFE_componentWillUpdate(nextProps) {
     ReactDOM.render({React.Children.only(nextProps.children)}, this._popoverLayer);
   }
 
diff --git a/src/components/PushAudienceDialog/PushAudienceDialog.react.js b/src/components/PushAudienceDialog/PushAudienceDialog.react.js
index 58d8e179b2..a2e9bc933a 100644
--- a/src/components/PushAudienceDialog/PushAudienceDialog.react.js
+++ b/src/components/PushAudienceDialog/PushAudienceDialog.react.js
@@ -58,7 +58,7 @@ export default class PushAudienceDialog extends React.Component {
     };
   }
 
-  componentWillMount() {
+  UNSAFE_componentWillMount() {
     let stateSettings = {};
     let audienceInfo = this.props.audienceInfo;
     //this case is only for 'New Segment' to prepopulate existing audience
diff --git a/src/components/PushAudiencesSelector/PushAudiencesBaseRow.react.js b/src/components/PushAudiencesSelector/PushAudiencesBaseRow.react.js
index f643b9c5b0..9ef6ef31ad 100644
--- a/src/components/PushAudiencesSelector/PushAudiencesBaseRow.react.js
+++ b/src/components/PushAudiencesSelector/PushAudiencesBaseRow.react.js
@@ -43,14 +43,14 @@ export default class PushAudiencesBaseRow extends React.Component {
     }, () => {});
   }
 
-  componentWillMount() {
+  UNSAFE_componentWillMount() {
     this.fetchPushSubscriberCount.call(this,this.context);
     if (this.props.id == NEW_SEGMENT_ID) {
       this.setState({ isNewSegment: true });
     }
   }
 
-  componentWillReceiveProps(props, context) {
+  UNSAFE_componentWillReceiveProps(props, context) {
     if (this.context !== context) {
       this.fetchPushSubscriberCount.call(this, context);
     }
diff --git a/src/components/PushAudiencesSelector/PushAudiencesOption.react.js b/src/components/PushAudiencesSelector/PushAudiencesOption.react.js
index fd458e6560..550152b9f0 100644
--- a/src/components/PushAudiencesSelector/PushAudiencesOption.react.js
+++ b/src/components/PushAudiencesSelector/PushAudiencesOption.react.js
@@ -40,7 +40,7 @@ export default class PushAudiencesOption extends PushAudiencesBaseRow {
   }
 
   // pass count information to PushNew flow
-  componentWillUpdate(nextProps, nextState) {
+  UNSAFE_componentWillUpdate(nextProps, nextState) {
     if ((nextState.count !== this.state.count || JSON.stringify(nextProps.query) !== JSON.stringify(this.props.query))
       && this.props.isChecked) {
       nextProps.onChange.call(undefined, nextState.count);
diff --git a/src/components/PushExperimentDropdown/PushExperimentDropdown.react.js b/src/components/PushExperimentDropdown/PushExperimentDropdown.react.js
index e1efbb1c68..085f3d2181 100644
--- a/src/components/PushExperimentDropdown/PushExperimentDropdown.react.js
+++ b/src/components/PushExperimentDropdown/PushExperimentDropdown.react.js
@@ -22,7 +22,7 @@ export default class PushExperimentDropdown extends React.Component {
     };
   }
 
-  componentWillMount() {
+  UNSAFE_componentWillMount() {
     this.styles = this.props.styles || styles;
   }
 
diff --git a/src/components/Sidebar/SidebarHeader.react.js b/src/components/Sidebar/SidebarHeader.react.js
index 67de9c4cad..be6cc75d2b 100644
--- a/src/components/Sidebar/SidebarHeader.react.js
+++ b/src/components/Sidebar/SidebarHeader.react.js
@@ -17,7 +17,7 @@ export default class SidebarHeader extends React.Component {
     super();
     this.state = { };
   }
-  componentWillMount() {
+  UNSAFE_componentWillMount() {
     let mountPath = window.PARSE_DASHBOARD_PATH;
     fetch(mountPath).then(response => {
       this.setState({ dashboardUser: response.headers.get('username') });
diff --git a/src/components/SlowQueriesFilter/SlowQueriesFilter.react.js b/src/components/SlowQueriesFilter/SlowQueriesFilter.react.js
index 53b3572107..9065000a50 100644
--- a/src/components/SlowQueriesFilter/SlowQueriesFilter.react.js
+++ b/src/components/SlowQueriesFilter/SlowQueriesFilter.react.js
@@ -27,7 +27,7 @@ export default class SlowQueriesFilter extends React.Component {
     this.node = ReactDOM.findDOMNode(this);
   }
 
-  componentWillReceiveProps(props) {
+  UNSAFE_componentWillReceiveProps(props) {
     if (props.schema !== this.props.schema) {
       this.setState({ open: false });
     }
diff --git a/src/dashboard/Analytics/Overview/Overview.react.js b/src/dashboard/Analytics/Overview/Overview.react.js
index 7b4af28c22..f65f9480b3 100644
--- a/src/dashboard/Analytics/Overview/Overview.react.js
+++ b/src/dashboard/Analytics/Overview/Overview.react.js
@@ -99,11 +99,11 @@ export default class Overview extends DashboardView {
     }
   }
 
-  componentWillMount() {
+  UNSAFE_componentWillMount() {
     this.fetchOverview(this.context.currentApp);
   }
 
-  componentWillReceiveProps(nextProps, nextContext) {
+  UNSAFE_componentWillReceiveProps(nextProps, nextContext) {
     if (this.context !== nextContext) {
       this.fetchOverview(nextContext.currentApp);
     }
diff --git a/src/dashboard/Analytics/Performance/Performance.react.js b/src/dashboard/Analytics/Performance/Performance.react.js
index bfaecf7d5b..7929ffe289 100644
--- a/src/dashboard/Analytics/Performance/Performance.react.js
+++ b/src/dashboard/Analytics/Performance/Performance.react.js
@@ -101,7 +101,7 @@ export default class Performance extends DashboardView {
     };
   }
 
-  componentWillMount() {
+  UNSAFE_componentWillMount() {
     this.handleRunQuery(this.context.currentApp);
   }
 
@@ -109,7 +109,7 @@ export default class Performance extends DashboardView {
     this.xhrHandles.forEach(xhr => xhr.abort());
   }
 
-  componentWillReceiveProps(nextProps, nextContext) {
+  UNSAFE_componentWillReceiveProps(nextProps, nextContext) {
     if (this.context !== nextContext) {
       this.handleRunQuery(nextContext.currentApp);
     }
diff --git a/src/dashboard/Analytics/Retention/Retention.react.js b/src/dashboard/Analytics/Retention/Retention.react.js
index b734e84a31..522cfa8d13 100644
--- a/src/dashboard/Analytics/Retention/Retention.react.js
+++ b/src/dashboard/Analytics/Retention/Retention.react.js
@@ -52,7 +52,7 @@ export default class Retention extends DashboardView {
     };
   }
 
-  componentWillMount() {
+  UNSAFE_componentWillMount() {
     this.fetchRetention(this.context.currentApp);
   }
 
@@ -60,7 +60,7 @@ export default class Retention extends DashboardView {
     this.xhrHandles.forEach((xhr) => xhr.abort());
   }
 
-  componentWillReceiveProps(nextProps, nextContext) {
+  UNSAFE_componentWillReceiveProps(nextProps, nextContext) {
     if (this.context !== nextContext) {
       this.fetchRetention(nextContext.currentApp);
     }
diff --git a/src/dashboard/Apps/AppsIndex.react.js b/src/dashboard/Apps/AppsIndex.react.js
index 164151d96a..befd58c6b8 100644
--- a/src/dashboard/Apps/AppsIndex.react.js
+++ b/src/dashboard/Apps/AppsIndex.react.js
@@ -95,7 +95,7 @@ export default class AppsIndex extends React.Component {
     this.focusField = this.focusField.bind(this);
   }
 
-  componentWillMount() {
+  UNSAFE_componentWillMount() {
     if (AppsManager.apps().length === 1) {
       const [app] = AppsManager.apps();
       history.push(`/apps/${app.slug}/browser`);
diff --git a/src/dashboard/Dashboard.js b/src/dashboard/Dashboard.js
index dd33e4dce2..65091d27c6 100644
--- a/src/dashboard/Dashboard.js
+++ b/src/dashboard/Dashboard.js
@@ -56,6 +56,7 @@ import {
 import { Route, Redirect } from 'react-router-dom';
 import createClass from 'create-react-class';
 import { Helmet } from 'react-helmet';
+import Playground from "./Data/Playground/Playground.react";
 
 const ShowSchemaOverview = false; //In progress features. Change false to true to work on this feature.
 
@@ -100,6 +101,9 @@ const PARSE_DOT_COM_SERVER_INFO = {
       update: true,
       delete: true,
     },
+    playground: {
+      evalCode: true
+    }
   },
   parseServerVersion: 'Parse.com',
 }
@@ -284,6 +288,7 @@ export default class Dashboard extends React.Component {
 
           
           
+          
           
 
 
diff --git a/src/dashboard/DashboardView.react.js b/src/dashboard/DashboardView.react.js
index 849d823a1b..04f5a5ab28 100644
--- a/src/dashboard/DashboardView.react.js
+++ b/src/dashboard/DashboardView.react.js
@@ -86,6 +86,12 @@ export default class DashboardView extends React.Component {
       link: '/api_console'
     });
 
+    coreSubsections.push({
+      name: 'Playground',
+      link: '/playground'
+    });
+
+
     if (this.context.currentApp.migration) {
       coreSubsections.push({
         name: 'Migration',
diff --git a/src/dashboard/Data/Browser/AttachSelectedRowsDialog.react.js b/src/dashboard/Data/Browser/AttachSelectedRowsDialog.react.js
index aea434f49d..805a63d8e8 100644
--- a/src/dashboard/Data/Browser/AttachSelectedRowsDialog.react.js
+++ b/src/dashboard/Data/Browser/AttachSelectedRowsDialog.react.js
@@ -25,7 +25,7 @@ export default class AttachSelectedRowsDialog extends React.Component {
     this.handleTargetObjectIdChange = this.handleTargetObjectIdChange.bind(this);
   }
 
-  componentWillMount() {
+  UNSAFE_componentWillMount() {
     const { selection, classes, onSelectClass } = this.props;
     if (selection) {
       const currentClass = classes[0];
diff --git a/src/dashboard/Data/Browser/BrowserTable.react.js b/src/dashboard/Data/Browser/BrowserTable.react.js
index 4b5b95255f..14306d98bd 100644
--- a/src/dashboard/Data/Browser/BrowserTable.react.js
+++ b/src/dashboard/Data/Browser/BrowserTable.react.js
@@ -35,7 +35,7 @@ export default class BrowserTable extends React.Component {
     this.handleScroll = this.handleScroll.bind(this);
   }
 
-  componentWillReceiveProps(props) {
+  UNSAFE_componentWillReceiveProps(props) {
     if (props.className !== this.props.className) {
       this.setState({
         offset: 0,
diff --git a/src/dashboard/Data/Browser/DataBrowser.react.js b/src/dashboard/Data/Browser/DataBrowser.react.js
index 105ff4d908..66066b72fb 100644
--- a/src/dashboard/Data/Browser/DataBrowser.react.js
+++ b/src/dashboard/Data/Browser/DataBrowser.react.js
@@ -47,7 +47,7 @@ export default class DataBrowser extends React.Component {
     this.saveOrderTimeout = null;
   }
 
-  componentWillReceiveProps(props, context) {
+  UNSAFE_componentWillReceiveProps(props, context) {
     if (props.className !== this.props.className) {
       let order = ColumnPreferences.getOrder(
         props.columns,
diff --git a/src/dashboard/Data/Browser/ExportDialog.react.js b/src/dashboard/Data/Browser/ExportDialog.react.js
index 1bba7e155f..ba774c0371 100644
--- a/src/dashboard/Data/Browser/ExportDialog.react.js
+++ b/src/dashboard/Data/Browser/ExportDialog.react.js
@@ -18,7 +18,7 @@ export default class ExportDialog extends React.Component {
     };
   }
 
-  componentWillMount() {
+  UNSAFE_componentWillMount() {
     this.context.currentApp.getExportProgress().then((progress) => {
       this.setState({ progress });
     });
diff --git a/src/dashboard/Data/Browser/Notification.react.js b/src/dashboard/Data/Browser/Notification.react.js
index b09be8d5ab..0f0650108e 100644
--- a/src/dashboard/Data/Browser/Notification.react.js
+++ b/src/dashboard/Data/Browser/Notification.react.js
@@ -27,7 +27,7 @@ export default class Notification extends React.Component {
     clearTimeout(this.timeout);
   }
 
-  componentWillReceiveProps(nextProps) {
+  UNSAFE_componentWillReceiveProps(nextProps) {
     if (this.state.lastNote !== nextProps.note) {
       clearTimeout(this.timeout);
       if (this.state.hiding) {
diff --git a/src/dashboard/Data/CloudCode/CloudCode.react.js b/src/dashboard/Data/CloudCode/CloudCode.react.js
index 9387271680..d82f8394a4 100644
--- a/src/dashboard/Data/CloudCode/CloudCode.react.js
+++ b/src/dashboard/Data/CloudCode/CloudCode.react.js
@@ -30,11 +30,11 @@ export default class CloudCode extends DashboardView {
     };
   }
 
-  componentWillMount() {
+  UNSAFE_componentWillMount() {
     this.fetchSource(this.context.currentApp, getPath(this.props.params));
   }
 
-  componentWillReceiveProps(nextProps, nextContext) {
+  UNSAFE_componentWillReceiveProps(nextProps, nextContext) {
     if (this.context !== nextContext) {
       this.fetchSource(nextContext.currentApp, getPath(nextProps.params));
     }
diff --git a/src/dashboard/Data/Jobs/JobsData.react.js b/src/dashboard/Data/Jobs/JobsData.react.js
index 29467ed635..88efb0a583 100644
--- a/src/dashboard/Data/Jobs/JobsData.react.js
+++ b/src/dashboard/Data/Jobs/JobsData.react.js
@@ -50,7 +50,7 @@ export default class JobsData extends React.Component {
     // this.fetchRelease(this.context.currentApp);
   }
 
-  componentWillReceiveProps(props, context) {
+  UNSAFE_componentWillReceiveProps(props, context) {
     if (this.context !== context) {
       this.fetchJobs(context.currentApp);
       // this.fetchRelease(context.currentApp);
diff --git a/src/dashboard/Data/Logs/Logs.react.js b/src/dashboard/Data/Logs/Logs.react.js
index 26c9b21067..7de930b098 100644
--- a/src/dashboard/Data/Logs/Logs.react.js
+++ b/src/dashboard/Data/Logs/Logs.react.js
@@ -38,7 +38,7 @@ export default class Logs extends DashboardView {
     // this.fetchRelease(this.context.currentApp);
   }
 
-  componentWillReceiveProps(nextProps, nextContext) {
+  UNSAFE_componentWillReceiveProps(nextProps, nextContext) {
     if (this.context !== nextContext) {
       this.fetchLogs(nextContext.currentApp, nextProps.params.type);
       // this.fetchRelease(nextContext.currentApp);
diff --git a/src/dashboard/Data/Playground/Playground.react.js b/src/dashboard/Data/Playground/Playground.react.js
new file mode 100644
index 0000000000..1419439bb1
--- /dev/null
+++ b/src/dashboard/Data/Playground/Playground.react.js
@@ -0,0 +1,32 @@
+import React from "react";
+
+import CategoryList from 'components/CategoryList/CategoryList.react'
+import DashboardView from 'dashboard/DashboardView.react'
+import CodeEditor from "components/CodeEditor/CodeEditor.react";
+import Button from "components/Button/Button.react";
+
+export default class Playground extends DashboardView {
+
+  constructor() {
+    super();
+    this.section = 'Core';
+    this.subsection = 'Playground';
+  }
+
+  renderSidebar() {
+    const {path} = this.props.match;
+    const current = path.substr(path.lastIndexOf('/') + 1, path.length - 1);
+    return (
+      
+    )
+  }
+
+  renderContent() {
+    return React.cloneElement(
+      <>
+        
+