From cd2ef887e528116f91dcf597427079a872e17511 Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Tue, 22 Dec 2020 10:52:21 +0200 Subject: [PATCH 01/13] style(server): added and tweaked some eslint rules --- .eslintrc.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.eslintrc.json b/.eslintrc.json index 2c7fb2f30..8827e7bc9 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -26,7 +26,8 @@ ], "space-in-parens": [2, "always"], "keyword-spacing": 2, - "semi": "off", + "semi": [1, "never"], + "quotes": [1, "single"], "indent": ["error", 2], "space-unary-ops": [ 2, From 6f61a36cd5d3bce57a9f53f297599abb196509eb Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Tue, 22 Dec 2020 10:53:20 +0200 Subject: [PATCH 02/13] feat(server): added migrations for totalChildrenCount and sourceApplication for commit table --- .../20201222100048_add_sourceapp_to_commits.js | 12 ++++++++++++ ...201222101522_add_totalchildrencount_to_commits.js | 12 ++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 modules/core/migrations/20201222100048_add_sourceapp_to_commits.js create mode 100644 modules/core/migrations/20201222101522_add_totalchildrencount_to_commits.js diff --git a/modules/core/migrations/20201222100048_add_sourceapp_to_commits.js b/modules/core/migrations/20201222100048_add_sourceapp_to_commits.js new file mode 100644 index 000000000..510497371 --- /dev/null +++ b/modules/core/migrations/20201222100048_add_sourceapp_to_commits.js @@ -0,0 +1,12 @@ + +exports.up = async ( knex ) => { + await knex.schema.alterTable( 'commits', table => { + table.string( 'sourceApplication', 1024 ) + } ) +} + +exports.down = async ( knex ) => { + await knex.schema.alterTable( 'commits', table => { + table.dropColumn( 'sourceApplication' ) + } ) +} diff --git a/modules/core/migrations/20201222101522_add_totalchildrencount_to_commits.js b/modules/core/migrations/20201222101522_add_totalchildrencount_to_commits.js new file mode 100644 index 000000000..026073a59 --- /dev/null +++ b/modules/core/migrations/20201222101522_add_totalchildrencount_to_commits.js @@ -0,0 +1,12 @@ + +exports.up = async ( knex ) => { + await knex.schema.alterTable( 'commits', table => { + table.integer( 'totalChildrenCount' ) + } ) +} + +exports.down = async ( knex ) => { + await knex.schema.alterTable( 'commits', table => { + table.dropColumn( 'totalChildrenCount' ) + } ) +} From e760c83aefc73dac05826e4700df46473231419e Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Tue, 22 Dec 2020 22:17:30 +0200 Subject: [PATCH 03/13] chore(server): minor cleanup --- .gitignore | 2 +- .prettierignore | 1 - .vscode/settings.json | 29 ----------------------------- 3 files changed, 1 insertion(+), 31 deletions(-) delete mode 100644 .prettierignore delete mode 100644 .vscode/settings.json diff --git a/.gitignore b/.gitignore index 47792c5f1..1d9714c27 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,4 @@ frontend/dist .nyc_output coverage/ .env -.vscode \ No newline at end of file +.vscode diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index eece7edb1..000000000 --- a/.prettierignore +++ /dev/null @@ -1 +0,0 @@ -*.graphql \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index a21d56f2c..000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "vetur.format.defaultFormatterOptions": { - "js-beautify-html": { - "wrap_attributes": "force-expand-multiline" - }, - "prettyhtml": { - "printWidth": 100, - "singleQuote": false, - "wrapAttributes": false, - "sortAttributes": false - } - }, - - "editor.formatOnSave": true, - "vetur.validation.template": false, - "editor.codeActionsOnSave": { - "source.fixAll.eslint": true - }, - "cSpell.userWords": ["vetur", "vuetify"], - "vetur.format.defaultFormatter.js": "none", - "vetur.format.defaultFormatter.ts": "none", - "[vue]": { - "editor.defaultFormatter": "dbaeumer.vscode-eslint" - }, - "[javascript]": { - "editor.defaultFormatter": "dbaeumer.vscode-eslint" - }, - "eslint.validate": ["vue"] -} From dab12e52d3b9e42e83cabc576d05fedb2686d82e Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Tue, 22 Dec 2020 22:22:29 +0200 Subject: [PATCH 04/13] chore(server): updated dependencies --- package-lock.json | 1126 ++++++++++++++++++++++----------------------- package.json | 32 +- 2 files changed, 578 insertions(+), 580 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9f2490d73..e1cb3e94e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,32 +5,57 @@ "requires": true, "dependencies": { "@apollo/client": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.1.4.tgz", - "integrity": "sha512-XPZ2eL+0GN25FazEOAVAvEyAzWPVsHeo+DgG/45d4Rb+srzPN+vmRgpQL5TdX2BYJoPd04J/g8OZwYUEKL8laA==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.3.6.tgz", + "integrity": "sha512-XSm/STyNS8aHdDigLLACKNMHwI0qaQmEHWHtTP+jHe/E1wZRnn66VZMMgwKLy2V4uHISHfmiZ4KpUKDPeJAKqg==", "dev": true, "requires": { + "@graphql-typed-document-node/core": "^3.0.0", "@types/zen-observable": "^0.8.0", "@wry/context": "^0.5.2", - "@wry/equality": "^0.2.0", + "@wry/equality": "^0.3.0", "fast-json-stable-stringify": "^2.0.0", "graphql-tag": "^2.11.0", "hoist-non-react-statics": "^3.3.2", - "optimism": "^0.12.1", + "optimism": "^0.13.1", "prop-types": "^15.7.2", - "symbol-observable": "^1.2.0", - "terser": "^5.2.0", - "ts-invariant": "^0.4.4", + "symbol-observable": "^2.0.0", + "ts-invariant": "^0.6.0", "tslib": "^1.10.0", "zen-observable": "^0.8.14" }, "dependencies": { "@wry/equality": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.2.0.tgz", - "integrity": "sha512-Y4d+WH6hs+KZJUC8YKLYGarjGekBrhslDbf/R20oV+AakHPINSitHfDRQz3EGcEWc1luXYNUvMhawWtZVWNGvQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.3.1.tgz", + "integrity": "sha512-8/Ftr3jUZ4EXhACfSwPIfNsE8V6WKesdjp+Dxi78Bej6qlasAxiz0/F8j0miACRj9CL4vC5Y5FsfwwEYAuhWbg==", "dev": true, "requires": { + "tslib": "^1.14.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "symbol-observable": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-2.0.3.tgz", + "integrity": "sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA==", + "dev": true + }, + "ts-invariant": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.6.0.tgz", + "integrity": "sha512-caoafsfgb8QxdrKzFfjKt627m4i8KTtfAiji0DYJfWI4A/S9ORNNpzYuD9br64kyKFgxn9UNaLLbSupam84mCA==", + "dev": true, + "requires": { + "@types/ungap__global-this": "^0.3.1", + "@ungap/global-this": "^0.4.2", "tslib": "^1.9.3" } } @@ -57,9 +82,9 @@ }, "dependencies": { "@types/node": { - "version": "10.17.29", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.29.tgz", - "integrity": "sha512-zLo9rjUeQ5+QVhOufDwrb3XKyso31fJBJnk9wUUQIBDExF/O4LryvpOfozfUaxgqifTnlt7FyqsAPXUq5yFZSA==" + "version": "10.17.49", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.49.tgz", + "integrity": "sha512-PGaJNs5IZz5XgzwJvL/1zRfZB7iaJ5BydZ8/Picm+lUNYoNO9iVTQkVy5eUh0dZDrx3rBOIs3GCbCRmMuYyqwg==" } } }, @@ -399,9 +424,9 @@ "optional": true }, "@eslint/eslintrc": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", - "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", + "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -424,6 +449,12 @@ } } }, + "@graphql-typed-document-node/core": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.1.0.tgz", + "integrity": "sha512-wYn6r8zVZyQJ6rQaALBEln5B1pzxb9shV5Ef97kTvn6yVGrqyXVnDqnU24MXnFubR+rZjBY9NWuxX3FB2sTsjg==", + "dev": true + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -534,47 +565,47 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" }, "@sentry/core": { - "version": "5.22.3", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.22.3.tgz", - "integrity": "sha512-eGL5uUarw3o4i9QUb9JoFHnhriPpWCaqeaIBB06HUpdcvhrjoowcKZj1+WPec5lFg5XusE35vez7z/FPzmJUDw==", + "version": "5.29.2", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.29.2.tgz", + "integrity": "sha512-7WYkoxB5IdlNEbwOwqSU64erUKH4laavPsM0/yQ+jojM76ErxlgEF0u//p5WaLPRzh3iDSt6BH+9TL45oNZeZw==", "requires": { - "@sentry/hub": "5.22.3", - "@sentry/minimal": "5.22.3", - "@sentry/types": "5.22.3", - "@sentry/utils": "5.22.3", + "@sentry/hub": "5.29.2", + "@sentry/minimal": "5.29.2", + "@sentry/types": "5.29.2", + "@sentry/utils": "5.29.2", "tslib": "^1.9.3" } }, "@sentry/hub": { - "version": "5.22.3", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.22.3.tgz", - "integrity": "sha512-INo47m6N5HFEs/7GMP9cqxOIt7rmRxdERunA3H2L37owjcr77MwHVeeJ9yawRS6FMtbWXplgWTyTIWIYOuqVbw==", + "version": "5.29.2", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.29.2.tgz", + "integrity": "sha512-LaAIo2hwUk9ykeh9RF0cwLy6IRw+DjEee8l1HfEaDFUM6TPGlNNGObMJNXb9/95jzWp7jWwOpQjoIE3jepdQJQ==", "requires": { - "@sentry/types": "5.22.3", - "@sentry/utils": "5.22.3", + "@sentry/types": "5.29.2", + "@sentry/utils": "5.29.2", "tslib": "^1.9.3" } }, "@sentry/minimal": { - "version": "5.22.3", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.22.3.tgz", - "integrity": "sha512-HoINpYnVYCpNjn2XIPIlqH5o4BAITpTljXjtAftOx6Hzj+Opjg8tR8PWliyKDvkXPpc4kXK9D6TpEDw8MO0wZA==", + "version": "5.29.2", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.29.2.tgz", + "integrity": "sha512-0aINSm8fGA1KyM7PavOBe1GDZDxrvnKt+oFnU0L+bTcw8Lr+of+v6Kwd97rkLRNOLw621xP076dL/7LSIzMuhw==", "requires": { - "@sentry/hub": "5.22.3", - "@sentry/types": "5.22.3", + "@sentry/hub": "5.29.2", + "@sentry/types": "5.29.2", "tslib": "^1.9.3" } }, "@sentry/node": { - "version": "5.22.3", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.22.3.tgz", - "integrity": "sha512-TCCKO7hJKiQi1nGmJcQfvbbqv98P08LULh7pb/NaO5pV20t1FtICfGx8UMpORRDehbcAiYq/f7rPOF6X/Xl5iw==", + "version": "5.29.2", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.29.2.tgz", + "integrity": "sha512-98m1ZejmJgA+eiz6jEFyYYfp6kJZQnx6d6KrJDMxGfss4YTmmJY57bE4xStnjjk7WINDGzlCiHuk+wJFMBjuoA==", "requires": { - "@sentry/core": "5.22.3", - "@sentry/hub": "5.22.3", - "@sentry/tracing": "5.22.3", - "@sentry/types": "5.22.3", - "@sentry/utils": "5.22.3", + "@sentry/core": "5.29.2", + "@sentry/hub": "5.29.2", + "@sentry/tracing": "5.29.2", + "@sentry/types": "5.29.2", + "@sentry/utils": "5.29.2", "cookie": "^0.4.1", "https-proxy-agent": "^5.0.0", "lru_map": "^0.3.3", @@ -582,28 +613,28 @@ } }, "@sentry/tracing": { - "version": "5.22.3", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.22.3.tgz", - "integrity": "sha512-Zp59kMCk5v56ZAyErqjv/QvGOWOQ5fRltzeVQVp8unIDTk6gEFXfhwPsYHOokJe1mfkmrgPDV6xAkYgtL3KCDQ==", + "version": "5.29.2", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.29.2.tgz", + "integrity": "sha512-iumYbVRpvoU3BUuIooxibydeaOOjl5ysc+mzsqhRs2NGW/C3uKAsFXdvyNfqt3bxtRQwJEhwJByLP2u3pLThpw==", "requires": { - "@sentry/hub": "5.22.3", - "@sentry/minimal": "5.22.3", - "@sentry/types": "5.22.3", - "@sentry/utils": "5.22.3", + "@sentry/hub": "5.29.2", + "@sentry/minimal": "5.29.2", + "@sentry/types": "5.29.2", + "@sentry/utils": "5.29.2", "tslib": "^1.9.3" } }, "@sentry/types": { - "version": "5.22.3", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.22.3.tgz", - "integrity": "sha512-cv+VWK0YFgCVDvD1/HrrBWOWYG3MLuCUJRBTkV/Opdy7nkdNjhCAJQrEyMM9zX0sac8FKWKOHT0sykNh8KgmYw==" + "version": "5.29.2", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.29.2.tgz", + "integrity": "sha512-dM9wgt8wy4WRty75QkqQgrw9FV9F+BOMfmc0iaX13Qos7i6Qs2Q0dxtJ83SoR4YGtW8URaHzlDtWlGs5egBiMA==" }, "@sentry/utils": { - "version": "5.22.3", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.22.3.tgz", - "integrity": "sha512-AHNryXMBvIkIE+GQxTlmhBXD0Ksh+5w1SwM5qi6AttH+1qjWLvV6WB4+4pvVvEoS8t5F+WaVUZPQLmCCWp6zKw==", + "version": "5.29.2", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.29.2.tgz", + "integrity": "sha512-nEwQIDjtFkeE4k6yIk4Ka5XjGRklNLThWLs2xfXlL7uwrYOH2B9UBBOOIRUraBm/g/Xrra3xsam/kRxuiwtXZQ==", "requires": { - "@sentry/types": "5.22.3", + "@sentry/types": "5.29.2", "tslib": "^1.9.3" } }, @@ -652,9 +683,9 @@ "dev": true }, "@types/connect": { - "version": "3.4.33", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", - "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==", + "version": "3.4.34", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz", + "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==", "requires": { "@types/node": "*" } @@ -671,9 +702,9 @@ "dev": true }, "@types/cookies": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.4.tgz", - "integrity": "sha512-oTGtMzZZAVuEjTwCjIh8T8FrC8n/uwy+PG0yTvQcdZ7etoel7C7/3MSd7qrukENTgQtotG7gvBlBojuVs7X5rw==", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.5.tgz", + "integrity": "sha512-3+TAFSm78O7/bAeYdB8FoYGntuT87vVP9JKuQRL8sRhv9313LP2SpHHL50VeFtnyjIcb3UELddMk5Yt0eOSOkg==", "requires": { "@types/connect": "*", "@types/express": "*", @@ -682,9 +713,9 @@ } }, "@types/cors": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.7.tgz", - "integrity": "sha512-sOdDRU3oRS7LBNTIqwDkPJyq0lpHYcbMTt0TrjzsXbk/e37hcLTH6eZX7CdbDeN0yJJvzw9hFBZkbtCSbk/jAQ==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.8.tgz", + "integrity": "sha512-fO3gf3DxU2Trcbr75O7obVndW/X5k8rJNZkLXlQWStTHhP71PkRqjwPIEI0yMnJdg9R9OasjU+Bsr+Hr1xy/0w==", "requires": { "@types/express": "*" } @@ -701,9 +732,9 @@ } }, "@types/express-serve-static-core": { - "version": "4.17.12", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.12.tgz", - "integrity": "sha512-EaEdY+Dty1jEU7U6J4CUWwxL+hyEGMkO5jan5gplfegUgCUsIUWqXxqw47uGjimeT4Qgkz/XUfwoau08+fgvKA==", + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.13.tgz", + "integrity": "sha512-RgDi5a4nuzam073lRGKTUIaL3eF2+H7LJvJ8eUnCI0wA6SNjXc44DCmWNiTLs/AZ7QlsFWZiw/gTG3nSQGL0fA==", "requires": { "@types/node": "*", "@types/qs": "*", @@ -719,14 +750,21 @@ } }, "@types/graphql-upload": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@types/graphql-upload/-/graphql-upload-8.0.3.tgz", - "integrity": "sha512-hmLg9pCU/GmxBscg8GCr1vmSoEmbItNNxdD5YH2TJkXm//8atjwuprB+xJBK714JG1dkxbbhp5RHX+Pz1KsCMA==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@types/graphql-upload/-/graphql-upload-8.0.4.tgz", + "integrity": "sha512-0TRyJD2o8vbkmJF8InppFcPVcXKk+Rvlg/xvpHBIndSJYpmDWfmtx/ZAtl4f3jR2vfarpTqYgj8MZuJssSoU7Q==", "requires": { "@types/express": "*", "@types/fs-capacitor": "*", "@types/koa": "*", - "graphql": "^14.5.3" + "graphql": "^15.3.0" + }, + "dependencies": { + "graphql": { + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.4.0.tgz", + "integrity": "sha512-EB3zgGchcabbsU9cFe1j+yxdzKQKAbGUWRb13DsrsMN1yyfmmIq+2+L5MqVWcDCE4V89R5AyUOi7sMOGxdsYtA==" + } } }, "@types/http-assert": { @@ -754,9 +792,9 @@ "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==" }, "@types/koa": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.11.4.tgz", - "integrity": "sha512-Etqs0kdqbuAsNr5k6mlZQelpZKVwMu9WPRHVVTLnceZlhr0pYmblRNJbCgoCMzKWWePldydU0AYEOX4Q9fnGUQ==", + "version": "2.11.6", + "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.11.6.tgz", + "integrity": "sha512-BhyrMj06eQkk04C97fovEDQMpLpd2IxCB4ecitaXwOKGq78Wi2tooaDOWOFGajPk8IkQOAtMppApgSVkYe1F/A==", "requires": { "@types/accepts": "*", "@types/content-disposition": "*", @@ -808,9 +846,9 @@ "optional": true }, "@types/qs": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.4.tgz", - "integrity": "sha512-+wYo+L6ZF6BMoEjtf8zB2esQsqdV6WsjRK/GP9WOgLPrq87PbNWgIxS76dS5uvl/QXtHGakZmwTznIfcPXcKlQ==" + "version": "6.9.5", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz", + "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==" }, "@types/range-parser": { "version": "1.2.3", @@ -818,12 +856,12 @@ "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" }, "@types/serve-static": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.5.tgz", - "integrity": "sha512-6M64P58N+OXjU432WoLLBQxbA0LRGBCRm7aAGQJ+SMC1IMl0dgRVi9EFfoDcS2a7Xogygk/eGN94CfwU9UF7UQ==", + "version": "1.13.8", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.8.tgz", + "integrity": "sha512-MoJhSQreaVoL+/hurAZzIm8wafFR6ajiTM1m4A0kv6AGeVBl4r4pOV8bGFrjjq1sGxDTnCoF8i22o0/aE5XCyA==", "requires": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" + "@types/mime": "*", + "@types/node": "*" } }, "@types/superagent": { @@ -836,19 +874,47 @@ "@types/node": "*" } }, + "@types/ungap__global-this": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@types/ungap__global-this/-/ungap__global-this-0.3.1.tgz", + "integrity": "sha512-+/DsiV4CxXl6ZWefwHZDXSe1Slitz21tom38qPCaG0DYCS1NnDPIQDTKcmQ/tvK/edJUKkmuIDBJbmKDiB0r/g==", + "dev": true + }, + "@types/ws": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.0.tgz", + "integrity": "sha512-Y29uQ3Uy+58bZrFLhX36hcI3Np37nqWE7ky5tjiDoy1GDZnIwVxS0CgF+s+1bXMzjKBFy+fqaRfb708iNzdinw==", + "requires": { + "@types/node": "*" + } + }, "@types/zen-observable": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.0.tgz", "integrity": "sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg==", "dev": true }, + "@ungap/global-this": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@ungap/global-this/-/global-this-0.4.3.tgz", + "integrity": "sha512-MuHEpDBurNVeD6mV9xBcAN2wfTwuaFQhHuhWkJuXmyVJ5P5sBCw+nnFpdfb0tAvgWkfefWCsAoAsh7MTUr3LPg==", + "dev": true + }, "@wry/context": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.5.2.tgz", - "integrity": "sha512-B/JLuRZ/vbEKHRUiGj6xiMojST1kHhu4WcreLfNN7q9DqQFrb97cWgf/kiYsPSUCAMVN0HzfFc8XjJdzgZzfjw==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.5.3.tgz", + "integrity": "sha512-n0uKHiWpf2ArHhmcHcUsKA+Dj0gtye/h56VmsDcoMRuK/ZPFeHKi8ck5L/ftqtF12ZbQR9l8xMPV7y+xybaRDA==", "dev": true, "requires": { - "tslib": "^1.9.3" + "tslib": "^1.14.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "@wry/equality": { @@ -874,21 +940,21 @@ } }, "acorn": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", - "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, "acorn-jsx": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", - "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", "dev": true }, "agent-base": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", - "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "requires": { "debug": "4" } @@ -904,9 +970,9 @@ } }, "ajv": { - "version": "6.12.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", - "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -1004,6 +1070,15 @@ "tslib": "^1.10.0" } }, + "apollo-cache-control": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.11.4.tgz", + "integrity": "sha512-FUKE8ASr8GxVq5rmky/tY8bsf++cleGT591lfLiqnPsP1fo3kAfgRfWA2QRHTCKFNlQxzUhVOEDv+PaysqiOjw==", + "requires": { + "apollo-server-env": "^2.4.5", + "apollo-server-plugin-base": "^0.10.2" + } + }, "apollo-cache-inmemory": { "version": "1.6.6", "resolved": "https://registry.npmjs.org/apollo-cache-inmemory/-/apollo-cache-inmemory-1.6.6.tgz", @@ -1054,12 +1129,13 @@ "zen-observable": "^0.8.0" } }, - "apollo-engine-reporting-protobuf": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.5.2.tgz", - "integrity": "sha512-4wm9FR3B7UvJxcK/69rOiS5CAJPEYKufeRWb257ZLfX7NGFTMqvbc1hu4q8Ch7swB26rTpkzfsftLED9DqH9qg==", + "apollo-datasource": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.7.2.tgz", + "integrity": "sha512-ibnW+s4BMp4K2AgzLEtvzkjg7dJgCaw9M5b5N0YKNmeRZRnl/I/qBTQae648FsRKgMwTbRQIvBhQ0URUFAqFOw==", "requires": { - "@apollo/protobufjs": "^1.0.3" + "apollo-server-caching": "^0.5.2", + "apollo-server-env": "^2.4.5" } }, "apollo-env": { @@ -1073,6 +1149,15 @@ "sha.js": "^2.4.11" } }, + "apollo-graphql": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.6.0.tgz", + "integrity": "sha512-BxTf5LOQe649e9BNTPdyCGItVv4Ll8wZ2BKnmiYpRAocYEXAVrQPWuSr3dO4iipqAU8X0gvle/Xu9mSqg5b7Qg==", + "requires": { + "apollo-env": "^0.6.5", + "lodash.sortby": "^4.7.0" + } + }, "apollo-link": { "version": "1.2.14", "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.14.tgz", @@ -1116,6 +1201,14 @@ "tslib": "^1.9.3" } }, + "apollo-reporting-protobuf": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-0.6.1.tgz", + "integrity": "sha512-qr4DheFP154PGZsd93SSIS9RkqHnR5b6vT+eCloWjy3UIpY+yZ3cVLlttlIjYvOG4xTJ25XEwcHiAExatQo/7g==", + "requires": { + "@apollo/protobufjs": "^1.0.3" + } + }, "apollo-server-caching": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.5.2.tgz", @@ -1125,200 +1218,38 @@ } }, "apollo-server-core": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.17.0.tgz", - "integrity": "sha512-rjAkBbKSrGLDfg/g5bohnPlQahmkAxgEBuMDVsoF3aa+RaEPXPUMYrLbOxntl0LWeLbPiMa/IyFF43dvlGqV7w==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.19.0.tgz", + "integrity": "sha512-2aMKUVPyNbomJQaG2tkpfqvp1Tfgxgkdr7nX5zHudYNSzsPrHw+CcYlCbIVFFI/mTZsjoK9czNq1qerFRxZbJw==", "requires": { "@apollographql/apollo-tools": "^0.4.3", "@apollographql/graphql-playground-html": "1.6.26", "@types/graphql-upload": "^8.0.0", "@types/ws": "^7.0.0", - "apollo-cache-control": "^0.11.1", + "apollo-cache-control": "^0.11.4", "apollo-datasource": "^0.7.2", - "apollo-engine-reporting": "^2.3.0", + "apollo-graphql": "^0.6.0", + "apollo-reporting-protobuf": "^0.6.1", "apollo-server-caching": "^0.5.2", "apollo-server-env": "^2.4.5", "apollo-server-errors": "^2.4.2", - "apollo-server-plugin-base": "^0.9.1", - "apollo-server-types": "^0.5.1", - "apollo-tracing": "^0.11.2", + "apollo-server-plugin-base": "^0.10.2", + "apollo-server-types": "^0.6.1", + "apollo-tracing": "^0.12.0", + "async-retry": "^1.2.1", "fast-json-stable-stringify": "^2.0.0", - "graphql-extensions": "^0.12.4", + "graphql-extensions": "^0.12.6", "graphql-tag": "^2.9.2", "graphql-tools": "^4.0.0", "graphql-upload": "^8.0.2", "loglevel": "^1.6.7", + "lru-cache": "^5.0.0", "sha.js": "^2.4.11", "subscriptions-transport-ws": "^0.9.11", + "uuid": "^8.0.0", "ws": "^6.0.0" }, "dependencies": { - "@apollographql/graphql-playground-html": { - "version": "1.6.26", - "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.26.tgz", - "integrity": "sha512-XAwXOIab51QyhBxnxySdK3nuMEUohhDsHQ5Rbco/V1vjlP75zZ0ZLHD9dTpXTN8uxKxopb2lUvJTq+M4g2Q0HQ==", - "requires": { - "xss": "^1.0.6" - } - }, - "@types/node-fetch": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.7.tgz", - "integrity": "sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw==", - "requires": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "@types/ws": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.2.6.tgz", - "integrity": "sha512-Q07IrQUSNpr+cXU4E4LtkSIBPie5GLZyyMC1QtQYRLWz701+XcoVygGUZgvLqElq1nU4ICldMYPnexlBsg3dqQ==", - "requires": { - "@types/node": "*" - } - }, - "apollo-cache-control": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.11.1.tgz", - "integrity": "sha512-6iHa8TkcKt4rx5SKRzDNjUIpCQX+7/FlZwD7vRh9JDnM4VH8SWhpj8fUR3CiEY8Kuc4ChXnOY8bCcMju5KPnIQ==", - "requires": { - "apollo-server-env": "^2.4.5", - "apollo-server-plugin-base": "^0.9.1" - } - }, - "apollo-datasource": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.7.2.tgz", - "integrity": "sha512-ibnW+s4BMp4K2AgzLEtvzkjg7dJgCaw9M5b5N0YKNmeRZRnl/I/qBTQae648FsRKgMwTbRQIvBhQ0URUFAqFOw==", - "requires": { - "apollo-server-caching": "^0.5.2", - "apollo-server-env": "^2.4.5" - } - }, - "apollo-engine-reporting": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-2.3.0.tgz", - "integrity": "sha512-SbcPLFuUZcRqDEZ6mSs8uHM9Ftr8yyt2IEu0JA8c3LNBmYXSLM7MHqFe80SVcosYSTBgtMz8mLJO8orhYoSYZw==", - "requires": { - "apollo-engine-reporting-protobuf": "^0.5.2", - "apollo-graphql": "^0.5.0", - "apollo-server-caching": "^0.5.2", - "apollo-server-env": "^2.4.5", - "apollo-server-errors": "^2.4.2", - "apollo-server-plugin-base": "^0.9.1", - "apollo-server-types": "^0.5.1", - "async-retry": "^1.2.1", - "uuid": "^8.0.0" - } - }, - "apollo-engine-reporting-protobuf": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.5.2.tgz", - "integrity": "sha512-4wm9FR3B7UvJxcK/69rOiS5CAJPEYKufeRWb257ZLfX7NGFTMqvbc1hu4q8Ch7swB26rTpkzfsftLED9DqH9qg==", - "requires": { - "@apollo/protobufjs": "^1.0.3" - } - }, - "apollo-env": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.6.5.tgz", - "integrity": "sha512-jeBUVsGymeTHYWp3me0R2CZRZrFeuSZeICZHCeRflHTfnQtlmbSXdy5E0pOyRM9CU4JfQkKDC98S1YglQj7Bzg==", - "requires": { - "@types/node-fetch": "2.5.7", - "core-js": "^3.0.1", - "node-fetch": "^2.2.0", - "sha.js": "^2.4.11" - } - }, - "apollo-graphql": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.5.0.tgz", - "integrity": "sha512-YSdF/BKPbsnQpxWpmCE53pBJX44aaoif31Y22I/qKpB6ZSGzYijV5YBoCL5Q15H2oA/v/02Oazh9lbp4ek3eig==", - "requires": { - "apollo-env": "^0.6.5", - "lodash.sortby": "^4.7.0" - } - }, - "apollo-server-caching": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.5.2.tgz", - "integrity": "sha512-HUcP3TlgRsuGgeTOn8QMbkdx0hLPXyEJehZIPrcof0ATz7j7aTPA4at7gaiFHCo8gk07DaWYGB3PFgjboXRcWQ==", - "requires": { - "lru-cache": "^5.0.0" - } - }, - "apollo-server-env": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.4.5.tgz", - "integrity": "sha512-nfNhmGPzbq3xCEWT8eRpoHXIPNcNy3QcEoBlzVMjeglrBGryLG2LXwBSPnVmTRRrzUYugX0ULBtgE3rBFNoUgA==", - "requires": { - "node-fetch": "^2.1.2", - "util.promisify": "^1.0.0" - } - }, - "apollo-server-errors": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.4.2.tgz", - "integrity": "sha512-FeGxW3Batn6sUtX3OVVUm7o56EgjxDlmgpTLNyWcLb0j6P8mw9oLNyAm3B+deHA4KNdNHO5BmHS2g1SJYjqPCQ==" - }, - "apollo-server-plugin-base": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.9.1.tgz", - "integrity": "sha512-kvrX4Z3FdpjrZdHkyl5iY2A1Wvp4b6KQp00DeZqss7GyyKNUBKr80/7RQgBLEw7EWM7WB19j459xM/TjvW0FKQ==", - "requires": { - "apollo-server-types": "^0.5.1" - } - }, - "apollo-server-types": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-0.5.1.tgz", - "integrity": "sha512-my2cPw+DAb2qVnIuBcsRKGyS28uIc2vjFxa1NpRoJZe9gK0BWUBk7wzXnIzWy3HZ5Er11e/40MPTUesNfMYNVA==", - "requires": { - "apollo-engine-reporting-protobuf": "^0.5.2", - "apollo-server-caching": "^0.5.2", - "apollo-server-env": "^2.4.5" - } - }, - "apollo-tracing": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.11.2.tgz", - "integrity": "sha512-QjmRd2ozGD+PfmF6U9w/w6jrclYSBNczN6Bzppr8qA5somEGl5pqdprIZYL28H0IapZiutA3x6p6ZVF/cVX8wA==", - "requires": { - "apollo-server-env": "^2.4.5", - "apollo-server-plugin-base": "^0.9.1" - } - }, - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - }, - "form-data": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", - "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "graphql-extensions": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.12.4.tgz", - "integrity": "sha512-GnR4LiWk3s2bGOqIh6V1JgnSXw2RCH4NOgbCFEWvB6JqWHXTlXnLZ8bRSkCiD4pltv7RHUPWqN/sGh8R6Ae/ag==", - "requires": { - "@apollographql/apollo-tools": "^0.4.3", - "apollo-server-env": "^2.4.5", - "apollo-server-types": "^0.5.1" - } - }, - "uuid": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz", - "integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==" - }, "ws": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", @@ -1338,19 +1269,25 @@ "util.promisify": "^1.0.0" } }, + "apollo-server-errors": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.4.2.tgz", + "integrity": "sha512-FeGxW3Batn6sUtX3OVVUm7o56EgjxDlmgpTLNyWcLb0j6P8mw9oLNyAm3B+deHA4KNdNHO5BmHS2g1SJYjqPCQ==" + }, "apollo-server-express": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.17.0.tgz", - "integrity": "sha512-PonpWOuM1DH3Cz0bu56Tusr3GXOnectC6AD/gy2GXK0v84E7tKTuxEY3SgsgxhvfvvhfwJbXTyIogL/wezqnCw==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.19.0.tgz", + "integrity": "sha512-3rgSrTme1SlLoecAYtSa8ThH6vYvz29QecgZCigq5Vdc6bFP2SZrCk0ls6BAdD8OZbVKUtizzRxd0yd/uREPAw==", "requires": { "@apollographql/graphql-playground-html": "1.6.26", "@types/accepts": "^1.3.5", "@types/body-parser": "1.19.0", - "@types/cors": "^2.8.4", + "@types/cors": "2.8.8", "@types/express": "4.17.7", + "@types/express-serve-static-core": "4.17.13", "accepts": "^1.3.5", - "apollo-server-core": "^2.17.0", - "apollo-server-types": "^0.5.1", + "apollo-server-core": "^2.19.0", + "apollo-server-types": "^0.6.1", "body-parser": "^1.18.3", "cors": "^2.8.4", "express": "^4.17.1", @@ -1361,24 +1298,41 @@ "type-is": "^1.6.16" } }, - "apollo-server-testing": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/apollo-server-testing/-/apollo-server-testing-2.17.0.tgz", - "integrity": "sha512-pb6ijqDbKUkeaJKP6P3sgT24X/1yErbBfobquyzOpkgyRCc93MeAY4xG3woA1/WZHQm0RN8xtsYelEKz05i14g==", + "apollo-server-plugin-base": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.10.2.tgz", + "integrity": "sha512-uM5uL1lOxbXdgvt/aEIbgs40fV9xA45Y3Mmh0VtQ/ddqq0MXR5aG92nnf8rM+URarBCUfxKJKaYzJJ/CXAnEdA==", "requires": { - "apollo-server-core": "^2.17.0" + "apollo-server-types": "^0.6.1" + } + }, + "apollo-server-testing": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/apollo-server-testing/-/apollo-server-testing-2.19.0.tgz", + "integrity": "sha512-ZrFflLC84ZzBZCfJehC2gLodkb5wwlwYLg+wMXZfDZpBIXDbC0Y9zR0zGqOYhrDMpmI1yIt3fUade33Y4UrNpA==", + "requires": { + "apollo-server-core": "^2.19.0" } }, "apollo-server-types": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-0.5.1.tgz", - "integrity": "sha512-my2cPw+DAb2qVnIuBcsRKGyS28uIc2vjFxa1NpRoJZe9gK0BWUBk7wzXnIzWy3HZ5Er11e/40MPTUesNfMYNVA==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-0.6.1.tgz", + "integrity": "sha512-IEQ37aYvMLiTUzsySVLOSuvvhxuyYdhI05f3cnH6u2aN1HgGp7vX6bg+U3Ue8wbHfdcifcGIk5UEU+Q+QO6InA==", "requires": { - "apollo-engine-reporting-protobuf": "^0.5.2", + "apollo-reporting-protobuf": "^0.6.1", "apollo-server-caching": "^0.5.2", "apollo-server-env": "^2.4.5" } }, + "apollo-tracing": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.12.0.tgz", + "integrity": "sha512-cMUYGE6mOEwb9HDqhf4fiPEo2JMhjPIqEprAQEC57El76avRpRig5NM0bnqMZcYJZR5QmLlNcttNccOwf9WrNg==", + "requires": { + "apollo-server-env": "^2.4.5", + "apollo-server-plugin-base": "^0.10.2" + } + }, "apollo-utilities": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.4.tgz", @@ -1480,9 +1434,9 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "async-limiter": { @@ -1685,12 +1639,11 @@ "dev": true }, "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, @@ -1810,12 +1763,6 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, "buffer-writer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", @@ -2419,9 +2366,9 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.1.tgz", + "integrity": "sha512-9Id2xHY1W7m8hCl8NkhQn5CufmF/WuR30BTRewvCXc1aZd3kMECwNZ69ndLbekKfakw9Rf2Xyc+QR6E7Gg+obg==" }, "core-util-is": { "version": "1.0.2", @@ -2467,9 +2414,9 @@ } }, "cross-env": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.2.tgz", - "integrity": "sha512-KZP/bMEOJEDCkDQAyRhu3RL2ZO/SUVrxQVI0G3YEQ+OLbRA3c6zgixe8Mq8a/z7+HKlNEjo8oiLUs8iRijY2Rw==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "dev": true, "requires": { "cross-spawn": "^7.0.1" @@ -2532,11 +2479,11 @@ "dev": true }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "decamelize": { @@ -2715,9 +2662,9 @@ } }, "dot-prop": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", - "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "requires": { "is-obj": "^2.0.0" @@ -2829,26 +2776,26 @@ "dev": true }, "eslint": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.8.1.tgz", - "integrity": "sha512-/2rX2pfhyUG0y+A123d0ccXtMm7DV7sH1m3lk9nk2DZ2LReq39FXHueR9xZwshE5MdfSf0xunSaMWRqyIA6M1w==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.16.0.tgz", + "integrity": "sha512-iVWPS785RuDA4dWuhhgXTNrGxHHK3a8HLSMBgbbU59ruJDubUraXN8N5rn7kb8tG6sjg74eE0RA3YWT51eusEw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.1.3", + "@eslint/eslintrc": "^0.2.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", - "eslint-scope": "^5.1.0", + "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^1.3.0", - "espree": "^7.3.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", "esquery": "^1.2.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "file-entry-cache": "^6.0.0", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", "globals": "^12.1.0", @@ -2868,7 +2815,7 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^5.2.3", + "table": "^6.0.4", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -2880,12 +2827,11 @@ "dev": true }, "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, @@ -2920,11 +2866,23 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "strip-ansi": { "version": "6.0.0", @@ -2949,16 +2907,22 @@ "requires": { "has-flag": "^4.0.0" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, "eslint-scope": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", - "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { - "esrecurse": "^4.1.0", + "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, @@ -2969,12 +2933,20 @@ "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", "dev": true }, "esm": { @@ -2983,14 +2955,22 @@ "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==" }, "espree": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", - "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "requires": { "acorn": "^7.4.0", - "acorn-jsx": "^5.2.0", + "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, "esprima": { @@ -3341,12 +3321,12 @@ } }, "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", + "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", "dev": true, "requires": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" } }, "fill-range": { @@ -3481,20 +3461,19 @@ } }, "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "dependencies": { "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -3503,15 +3482,15 @@ } }, "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", + "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==", "dev": true }, "follow-redirects": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", - "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", + "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==", "dev": true }, "for-in": { @@ -3778,6 +3757,16 @@ "iterall": "^1.2.2" } }, + "graphql-extensions": { + "version": "0.12.6", + "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.12.6.tgz", + "integrity": "sha512-EUNw+OIRXYTPxToSoJjhJvS5aGa94KkdkZnL1I9DCZT64/+rzQNeLeGj+goj2RYuYvoQe1Bmcx0CNZ1GqwBhng==", + "requires": { + "@apollographql/apollo-tools": "^0.4.3", + "apollo-server-env": "^2.4.5", + "apollo-server-types": "^0.6.1" + } + }, "graphql-redis-subscriptions": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/graphql-redis-subscriptions/-/graphql-redis-subscriptions-2.3.1.tgz", @@ -3788,9 +3777,19 @@ } }, "graphql-scalars": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/graphql-scalars/-/graphql-scalars-1.2.6.tgz", - "integrity": "sha512-k/88kZVXIuUKQuVLokokkKU2lnFEZ9aTn7O0fDweJpISd0pP5fQU1wzPN0jarH4Lnadr4092PfyIUtCcKzkeAw==" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/graphql-scalars/-/graphql-scalars-1.6.1.tgz", + "integrity": "sha512-PfgFeAioO48vziGD2SM7KgY0cmUyM9yh1BF2L12muFXIvHbIxYc5JYFSfjqtNIRRuHt00KD29pdFdV+1lLMvuw==", + "requires": { + "tslib": "~2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + } + } }, "graphql-subscriptions": { "version": "1.1.0", @@ -3983,15 +3982,15 @@ } }, "http-proxy-middleware": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.0.5.tgz", - "integrity": "sha512-CKzML7u4RdGob8wuKI//H8Ein6wNTEQR7yjVEzPbhBLGdOfkfvgTnp2HLnniKBDP9QW4eG10/724iTWLBeER3g==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.0.6.tgz", + "integrity": "sha512-NyL6ZB6cVni7pl+/IT2W0ni5ME00xR0sN27AQZZrpKn1b+qRh+mLbBxIq9Cq1oGfmTc7BUq4HB77mxwCaxAYNg==", "dev": true, "requires": { "@types/http-proxy": "^1.17.4", "http-proxy": "^1.18.1", "is-glob": "^4.0.1", - "lodash": "^4.17.19", + "lodash": "^4.17.20", "micromatch": "^4.0.2" }, "dependencies": { @@ -4211,19 +4210,32 @@ "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==" }, "ioredis": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.17.3.tgz", - "integrity": "sha512-iRvq4BOYzNFkDnSyhx7cmJNOi1x/HWYe+A4VXHBu4qpwJaGT1Mp+D2bVGJntH9K/Z/GeOM/Nprb8gB3bmitz1Q==", + "version": "4.19.4", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.19.4.tgz", + "integrity": "sha512-3haQWw9dpEjcfVcRktXlayVNrrqvvc2io7Q/uiV2UsYw8/HC2YwwJr78Wql7zu5bzwci0x9bZYA69U7KkevAvw==", "requires": { "cluster-key-slot": "^1.1.0", "debug": "^4.1.1", "denque": "^1.1.0", "lodash.defaults": "^4.2.0", "lodash.flatten": "^4.4.0", - "redis-commands": "1.5.0", + "p-map": "^2.1.0", + "redis-commands": "1.6.0", "redis-errors": "^1.2.0", "redis-parser": "^3.0.0", "standard-as-callback": "^2.0.1" + }, + "dependencies": { + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" + }, + "redis-commands": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.6.0.tgz", + "integrity": "sha512-2jnZ0IkjZxvguITjFTrGiLyzQZcTvaw8DAaCXxZq/dsHXz7KfMQ3OUJy7Tz9vnRtZRVz6VRCPDvruvU8Ts44wQ==" + } } }, "ip-regex": { @@ -4375,13 +4387,19 @@ }, "dependencies": { "global-dirs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", - "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", "dev": true, "requires": { - "ini": "^1.3.5" + "ini": "1.3.7" } + }, + "ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "dev": true } } }, @@ -4729,36 +4747,28 @@ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, "knex": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/knex/-/knex-0.21.5.tgz", - "integrity": "sha512-cQj7F2D/fu03eTr6ZzYCYKdB9w7fPYlvTiU/f2OeXay52Pq5PwD+NAkcf40WDnppt/4/4KukROwlMOaE7WArcA==", + "version": "0.21.14", + "resolved": "https://registry.npmjs.org/knex/-/knex-0.21.14.tgz", + "integrity": "sha512-UKoRtSzeSlm4Fi/jcFZ+NNmwYPnLADKy3u7Wm8WFhhFlv/I9RXf6TrTHNeE9hjIK1hCUz2yn4PeXagvjArTPUg==", "requires": { "colorette": "1.2.1", - "commander": "^5.1.0", - "debug": "4.1.1", + "commander": "^6.2.0", + "debug": "4.3.1", "esm": "^3.2.25", "getopts": "2.2.5", - "inherits": "~2.0.4", "interpret": "^2.2.0", "liftoff": "3.1.0", "lodash": "^4.17.20", - "mkdirp": "^1.0.4", - "pg-connection-string": "2.3.0", - "tarn": "^3.0.0", + "pg-connection-string": "2.4.0", + "tarn": "^3.0.1", "tildify": "2.0.0", - "uuid": "^7.0.3", "v8flags": "^3.2.0" }, "dependencies": { "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" } } }, @@ -4885,9 +4895,9 @@ } }, "loglevel": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", - "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==" + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==" }, "long": { "version": "4.0.0", @@ -5334,9 +5344,9 @@ } }, "nodemon": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.4.tgz", - "integrity": "sha512-Ltced+hIfTmaS28Zjv1BM552oQ3dbwPqI4+zI0SLgq+wpJhSyqgYude/aZa/3i31VCQWMfXJVxvu86abcam3uQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.6.tgz", + "integrity": "sha512-4I3YDSKXg6ltYpcnZeHompqac4E6JeAMpGm8tJnB9Y3T0ehasLa4139dJOcCrB93HHrUMsCrKtoAlXTqT5n4AQ==", "dev": true, "requires": { "chokidar": "^3.2.2", @@ -5347,14 +5357,14 @@ "semver": "^5.7.1", "supports-color": "^5.5.0", "touch": "^3.1.0", - "undefsafe": "^2.0.2", - "update-notifier": "^4.0.0" + "undefsafe": "^2.0.3", + "update-notifier": "^4.1.0" }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -5777,9 +5787,9 @@ } }, "optimism": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.12.1.tgz", - "integrity": "sha512-t8I7HM1dw0SECitBYAqFOVHoBAHEQBTeKjIL9y9ImHzAVkdyPK4ifTgM4VJRDtTUY4r/u5Eqxs4XcGPHaoPkeQ==", + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.13.2.tgz", + "integrity": "sha512-kJkpDUEs/Rp8HsAYYlDzyvQHlT6YZa95P+2GGNR8p/VvsIkt6NilAk7oeTvMRKCq7BeclB7+bmdIexog2859GQ==", "dev": true, "requires": { "@wry/context": "^0.5.2" @@ -6047,36 +6057,28 @@ "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" }, "pg": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.3.3.tgz", - "integrity": "sha512-wmUyoQM/Xzmo62wgOdQAn5tl7u+IA1ZYK7qbuppi+3E+Gj4hlUxVHjInulieWrd0SfHi/ADriTb5ILJ/lsJrSg==", + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.5.1.tgz", + "integrity": "sha512-9wm3yX9lCfjvA98ybCyw2pADUivyNWT/yIP4ZcDVpMN0og70BUWYEGXPCTAQdGTAqnytfRADb7NERrY1qxhIqw==", "requires": { "buffer-writer": "2.0.0", "packet-reader": "1.0.0", - "pg-connection-string": "^2.3.0", - "pg-pool": "^3.2.1", - "pg-protocol": "^1.2.5", + "pg-connection-string": "^2.4.0", + "pg-pool": "^3.2.2", + "pg-protocol": "^1.4.0", "pg-types": "^2.1.0", - "pgpass": "1.x", - "semver": "4.3.2" - }, - "dependencies": { - "semver": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz", - "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=" - } + "pgpass": "1.x" } }, "pg-connection-string": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.3.0.tgz", - "integrity": "sha512-ukMTJXLI7/hZIwTW7hGMZJ0Lj0S2XQBCJ4Shv4y1zgQ/vqVea+FLhzywvPj0ujSuofu+yA4MYHGZPTsgjBgJ+w==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.4.0.tgz", + "integrity": "sha512-3iBXuv7XKvxeMrIgym7njT+HlZkwZqqGX4Bu9cci8xHZNT+Um1gWKqCsAzcC0d95rcKMU5WBg6YRUcHyV0HZKQ==" }, "pg-cursor": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/pg-cursor/-/pg-cursor-2.3.3.tgz", - "integrity": "sha512-0hwZEd+gjDGgN42BFYOp2fVLyKUbk8jjDyO/PLU34W19shoh/qnCDAUzfa4+IhUGjAgN0r/xIT3pANT946zaFg==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/pg-cursor/-/pg-cursor-2.5.2.tgz", + "integrity": "sha512-yS0lxXA5WoIVK7BUgJr1uOJDJe5JxVezItTLvqnTXj6bF3di4UtQOrPx8RW3GpFmom2NTQfpEc2N6vvdpopQSw==" }, "pg-int8": { "version": "1.0.1", @@ -6084,21 +6086,21 @@ "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" }, "pg-pool": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.2.1.tgz", - "integrity": "sha512-BQDPWUeKenVrMMDN9opfns/kZo4lxmSWhIqo+cSAF7+lfi9ZclQbr9vfnlNaPr8wYF3UYjm5X0yPAhbcgqNOdA==" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.2.2.tgz", + "integrity": "sha512-ORJoFxAlmmros8igi608iVEbQNNZlp89diFVx6yV5v+ehmpMY9sK6QgpmgoXbmkNaBAx8cOOZh9g80kJv1ooyA==" }, "pg-protocol": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.2.5.tgz", - "integrity": "sha512-1uYCckkuTfzz/FCefvavRywkowa6M5FohNMF5OjKrqo9PSR8gYc8poVmwwYQaBxhmQdBjhtP514eXy9/Us2xKg==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.4.0.tgz", + "integrity": "sha512-El+aXWcwG/8wuFICMQjM5ZSAm6OWiJicFdNYo+VY3QP+8vI4SvLIWVe51PppTzMhikUJR+PsyIFKqfdXPz/yxA==" }, "pg-query-stream": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/pg-query-stream/-/pg-query-stream-3.2.3.tgz", - "integrity": "sha512-Ul0l5X9Sn9zl2zpIvIIB5R7jG4eqkIRvxyE+VnRk7r1Ke54vnC1+k3v0aBSV5f5o5xCF4J9C3wBHFypfYdRv9w==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/pg-query-stream/-/pg-query-stream-3.4.2.tgz", + "integrity": "sha512-kaTzsi5TQ3XG1KUznEV3MnstM1U4k5Z9cZ02PNmKLMFeYiPEn83FUc2pPVPiKKv93ITI8e5oCh+zEOunjy0ZwQ==", "requires": { - "pg-cursor": "^2.3.3" + "pg-cursor": "^2.5.1" } }, "pg-types": { @@ -6114,11 +6116,11 @@ } }, "pgpass": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz", - "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.4.tgz", + "integrity": "sha512-YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w==", "requires": { - "split": "^1.0.0" + "split2": "^3.1.1" } }, "picomatch": { @@ -6281,9 +6283,9 @@ "dev": true }, "pupa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz", - "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", "dev": true, "requires": { "escape-goat": "^2.0.0" @@ -6450,9 +6452,9 @@ "dev": true }, "registry-auth-token": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", - "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", "dev": true, "requires": { "rc": "^1.2.8" @@ -6770,20 +6772,44 @@ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true } } @@ -6915,24 +6941,6 @@ "urix": "^0.1.0" } }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, "source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", @@ -7010,14 +7018,6 @@ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "requires": { - "through": "2" - } - }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -7026,6 +7026,26 @@ "extend-shallow": "^3.0.0" } }, + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "requires": { + "readable-stream": "^3.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -7215,47 +7235,53 @@ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" }, "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.4.tgz", + "integrity": "sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw==", "dev": true, "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" + "ajv": "^6.12.4", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.0" } } } @@ -7275,35 +7301,16 @@ } }, "tarn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.0.tgz", - "integrity": "sha512-PKUnlDFODZueoA8owLehl8vLcgtA8u4dRuVbZc92tspDYZixjJL6TqYOmryf/PfP/EBX+2rgNcrj96NO+RPkdQ==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.1.tgz", + "integrity": "sha512-6usSlV9KyHsspvwu2duKH+FMUhqJnAh6J5J/4MITl8s94iSUQTLkJggdiewKv4RyARQccnigV48Z+khiuVZDJw==" }, "term-size": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", - "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", "dev": true }, - "terser": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.0.tgz", - "integrity": "sha512-XTT3D3AwxC54KywJijmY2mxZ8nJiEjBHVYzq8l9OaYuRFWeQNBwvipuzzYEP4e+/AVcd1hqG/CqgsdIRyT45Fg==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -7324,7 +7331,8 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true }, "through2": { "version": "2.0.5", @@ -7601,9 +7609,9 @@ } }, "update-notifier": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.1.tgz", - "integrity": "sha512-9y+Kds0+LoLG6yN802wVXoIfxYEwh3FlZwzMwpCZp62S2i1/Jzeqb9Eeeju3NSHccGGasfGlK5/vEHbAifYRDg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", "dev": true, "requires": { "boxen": "^4.2.0", @@ -7622,12 +7630,11 @@ }, "dependencies": { "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, @@ -7723,14 +7730,14 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==" + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", "dev": true }, "v8flags": { @@ -7883,15 +7890,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, "write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", @@ -7905,9 +7903,9 @@ } }, "ws": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", - "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz", + "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==", "dev": true }, "xdg-basedir": { diff --git a/package.json b/package.json index c823891cb..f70215827 100644 --- a/package.json +++ b/package.json @@ -19,10 +19,10 @@ "test:server": "cross-env PORT=3001 NODE_ENV=test nyc nyc --reporter html --reporter lcovonly mocha -s 0 --timeout 10000 --exit" }, "dependencies": { - "@sentry/node": "^5.22.3", - "@sentry/tracing": "^5.22.3", - "apollo-server-express": "^2.17.0", - "apollo-server-testing": "^2.12.0", + "@sentry/node": "^5.29.2", + "@sentry/tracing": "^5.29.2", + "apollo-server-express": "^2.19.0", + "apollo-server-testing": "^2.19.0", "app-root-path": "^3.0.0", "auto-load": "^3.0.4", "bcrypt": "^5.0.0", @@ -31,17 +31,17 @@ "compression": "^1.7.4", "connect-redis": "^4.0.4", "crypto-random-string": "^3.2.0", - "debug": "^4.1.1", + "debug": "^4.3.1", "dotenv": "^8.2.0", "express": "^4.17.1", "express-session": "^1.17.1", "graphql": "^14.6.0", "graphql-redis-subscriptions": "^2.2.2", - "graphql-scalars": "^1.1.0", + "graphql-scalars": "^1.6.1", "graphql-tag": "^2.11.0", "graphql-tools": "^4.0.7", - "ioredis": "^4.17.3", - "knex": "^0.21.5", + "ioredis": "^4.19.4", + "knex": "^0.21.14", "lodash.chunk": "^4.2.0", "lodash.debounce": "^4.0.8", "lodash.get": "^4.4.2", @@ -55,13 +55,13 @@ "passport-github2": "^0.1.12", "passport-google-oauth2": "^0.2.0", "passport-google-oauth20": "^2.0.0", - "pg": "^8.3.3", - "pg-query-stream": "^3.2.3", + "pg": "^8.5.1", + "pg-query-stream": "^3.4.2", "redis": "^3.0.2", "zxcvbn": "^4.4.2" }, "devDependencies": { - "@apollo/client": "^3.1.3", + "@apollo/client": "^3.3.6", "apollo-cache-inmemory": "^1.6.6", "apollo-client": "^2.6.10", "apollo-link": "^1.2.14", @@ -70,16 +70,16 @@ "chai": "^4.2.0", "chai-http": "^4.3.0", "concurrently": "^5.2.0", - "cross-env": "^7.0.2", + "cross-env": "^7.0.3", "cz-conventional-changelog": "^3.1.0", - "eslint": "^7.5.0", - "http-proxy-middleware": "^1.0.4", + "eslint": "^7.16.0", + "http-proxy-middleware": "^1.0.6", "mocha": "^7.2.0", "node-fetch": "^2.6.1", - "nodemon": "^2.0.4", + "nodemon": "^2.0.6", "nyc": "^15.0.1", "supertest": "^4.0.2", - "ws": "^7.3.1" + "ws": "^7.4.1" }, "config": { "commitizen": { From b2366f78446623cb9db1adfa5c730d7fb16bee4d Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Tue, 22 Dec 2020 22:34:15 +0200 Subject: [PATCH 05/13] feat(server/commits): create commit service now accepts source app & children count Note: children count, if not passed in by the user, will be automatically set from the referenced object --- app.js | 2 ++ .../graph/schemas/branchesAndCommits.graphql | 8 +++++++ modules/core/services/commits.js | 23 +++++++++++-------- modules/core/tests/commits.spec.js | 2 +- modules/core/tests/objects.spec.js | 2 +- 5 files changed, 25 insertions(+), 12 deletions(-) diff --git a/app.js b/app.js index 44e2f2260..59c8edd92 100644 --- a/app.js +++ b/app.js @@ -33,6 +33,8 @@ exports.init = async ( ) => { SentryInit( app ) + // Moves things along automatically on restart. + // Should perhaps be done manually? await knex.migrate.latest( ) if ( process.env.NODE_ENV !== 'test' ) { diff --git a/modules/core/graph/schemas/branchesAndCommits.graphql b/modules/core/graph/schemas/branchesAndCommits.graphql index ceada6aea..d61b363c3 100644 --- a/modules/core/graph/schemas/branchesAndCommits.graphql +++ b/modules/core/graph/schemas/branchesAndCommits.graphql @@ -21,6 +21,9 @@ type Commit { id: String! referencedObject: String! message: String + sourceApplication: String + totalChildrenCount: Int + branchName: String authorName: String authorId: String authorAvatar: String @@ -31,6 +34,9 @@ type CommitCollectionUserNode { id: String! referencedObject: String! message: String + sourceApplication: String + totalChildrenCount: Int + branchName: String streamId: String streamName: String createdAt: DateTime @@ -140,6 +146,8 @@ input CommitCreateInput { branchName: String! objectId: String! message: String + sourceApplication: String + totalChildrenCount: Int previousCommitIds: [String] } diff --git a/modules/core/services/commits.js b/modules/core/services/commits.js index e61f18c06..5ef5aa5af 100644 --- a/modules/core/services/commits.js +++ b/modules/core/services/commits.js @@ -11,16 +11,26 @@ const BranchCommits = ( ) => knex( 'branch_commits' ) const ParentCommits = ( ) => knex( 'parent_commits' ) const { getBranchesByStreamId, getBranchByNameAndStreamId } = require( './branches' ) +const { getObject } = require( './objects' ) module.exports = { - async createCommitByBranchId( { streamId, branchId, objectId, authorId, message, previousCommitIds } ) { + async createCommitByBranchId( { streamId, branchId, objectId, authorId, message, sourceApplication, totalChildrenCount, previousCommitIds } ) { + + // If no total children count is passed in, get it from the original object + // that this commit references. + if ( !totalChildrenCount ){ + let { totalChildrenCount: tc } = await getObject( {objectId} ) + totalChildrenCount = tc + } + // Create main table entry let [ id ] = await Commits( ).returning( 'id' ).insert( { id: crs( { length: 10 } ), referencedObject: objectId, author: authorId, - message: message + sourceApplication, + message } ) // Link it to a branch @@ -61,7 +71,7 @@ module.exports = { async getCommitById( { id } ) { return await Commits( ).columns( [ { id: 'commits.id' }, 'message', 'referencedObject', { authorName: 'name' }, { authorId: 'users.id' }, { authorAvatar: 'users.avatar' }, 'commits.createdAt' ] ).select( ) .join( 'users', 'commits.author', 'users.id' ) - .where( { "commits.id": id } ).first( ) + .where( { 'commits.id': id } ).first( ) }, async deleteCommit( { id } ) { @@ -117,13 +127,6 @@ module.exports = { return parseInt( res.count ) }, - /** - * Gets all the commits of a stream. - * @param {[type]} options.streamId [description] - * @param {[type]} options.limit [description] - * @param {[type]} options.cursor [description] - * @return {[type]} [description] - */ async getCommitsByStreamId( { streamId, limit, cursor } ) { limit = limit || 25 let query = StreamCommits( ) diff --git a/modules/core/tests/commits.spec.js b/modules/core/tests/commits.spec.js index 84fad5d4f..98407ee6e 100644 --- a/modules/core/tests/commits.spec.js +++ b/modules/core/tests/commits.spec.js @@ -31,7 +31,7 @@ const { getCommitsTotalCountByUserId } = require( '../services/commits' ) -describe( 'Commits', ( ) => { +describe( 'Commits @core-commits', ( ) => { let user = { name: 'Dimitrie Stefanescu', diff --git a/modules/core/tests/objects.spec.js b/modules/core/tests/objects.spec.js index c771f8950..ac01f7f92 100644 --- a/modules/core/tests/objects.spec.js +++ b/modules/core/tests/objects.spec.js @@ -47,7 +47,7 @@ let sampleObject = JSON.parse( `{ "speckleType": "Tests.Polyline" }` ) -describe( 'Objects', ( ) => { +describe( 'Objects @core-objects', ( ) => { let userOne = { name: 'Dimitrie Stefanescu', From 3aaad4bab29630aca2ae1ff86e11a9a1c4b8ba83 Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Tue, 22 Dec 2020 22:35:24 +0200 Subject: [PATCH 06/13] chore(server): excludes migration files from istanbul --- .../core/migrations/20201222100048_add_sourceapp_to_commits.js | 2 +- .../20201222101522_add_totalchildrencount_to_commits.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/core/migrations/20201222100048_add_sourceapp_to_commits.js b/modules/core/migrations/20201222100048_add_sourceapp_to_commits.js index 510497371..574c6d381 100644 --- a/modules/core/migrations/20201222100048_add_sourceapp_to_commits.js +++ b/modules/core/migrations/20201222100048_add_sourceapp_to_commits.js @@ -1,4 +1,4 @@ - +/* istanbul ignore file */ exports.up = async ( knex ) => { await knex.schema.alterTable( 'commits', table => { table.string( 'sourceApplication', 1024 ) diff --git a/modules/core/migrations/20201222101522_add_totalchildrencount_to_commits.js b/modules/core/migrations/20201222101522_add_totalchildrencount_to_commits.js index 026073a59..13daa5cf9 100644 --- a/modules/core/migrations/20201222101522_add_totalchildrencount_to_commits.js +++ b/modules/core/migrations/20201222101522_add_totalchildrencount_to_commits.js @@ -1,4 +1,4 @@ - +/* istanbul ignore file */ exports.up = async ( knex ) => { await knex.schema.alterTable( 'commits', table => { table.integer( 'totalChildrenCount' ) From dd78e8064b8d8ec3758c838223789118402810bc Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Wed, 23 Dec 2020 00:04:47 +0200 Subject: [PATCH 07/13] feat(server): wip: adds tests for new commit fields & implementation start --- modules/core/services/commits.js | 19 ++++++++++------ modules/core/tests/commits.spec.js | 36 ++++++++++++++++++++++++------ 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/modules/core/services/commits.js b/modules/core/services/commits.js index 5ef5aa5af..1305a1350 100644 --- a/modules/core/services/commits.js +++ b/modules/core/services/commits.js @@ -21,7 +21,7 @@ module.exports = { // that this commit references. if ( !totalChildrenCount ){ let { totalChildrenCount: tc } = await getObject( {objectId} ) - totalChildrenCount = tc + totalChildrenCount = tc || 1 } // Create main table entry @@ -30,6 +30,7 @@ module.exports = { referencedObject: objectId, author: authorId, sourceApplication, + totalChildrenCount, message } ) @@ -54,14 +55,14 @@ module.exports = { return id }, - async createCommitByBranchName( { streamId, branchName, objectId, authorId, message, previousCommitIds } ) { + async createCommitByBranchName( { streamId, branchName, objectId, authorId, message, sourceApplication, totalChildrenCount, previousCommitIds } ) { branchName = branchName.toLowerCase( ) let myBranch = await getBranchByNameAndStreamId( { streamId: streamId, name: branchName } ) if ( !myBranch ) throw new Error( `Failed to find branch with name ${branchName}.` ) - return await module.exports.createCommitByBranchId( { streamId, branchId: myBranch.id, objectId, authorId, message, previousCommitIds } ) + return await module.exports.createCommitByBranchId( { streamId, branchId: myBranch.id, objectId, authorId, message, sourceApplication, totalChildrenCount, previousCommitIds } ) }, async updateCommit( { id, message } ) { @@ -69,7 +70,7 @@ module.exports = { }, async getCommitById( { id } ) { - return await Commits( ).columns( [ { id: 'commits.id' }, 'message', 'referencedObject', { authorName: 'name' }, { authorId: 'users.id' }, { authorAvatar: 'users.avatar' }, 'commits.createdAt' ] ).select( ) + return await Commits( ).columns( [ { id: 'commits.id' }, 'message', 'referencedObject', 'sourceApplication', 'totalChildrenCount', { authorName: 'name' }, { authorId: 'users.id' }, { authorAvatar: 'users.avatar' }, 'commits.createdAt' ] ).select( ) .join( 'users', 'commits.author', 'users.id' ) .where( { 'commits.id': id } ).first( ) }, @@ -96,7 +97,9 @@ module.exports = { async getCommitsByBranchId( { branchId, limit, cursor } ) { limit = limit || 25 - let query = BranchCommits( ).columns( [ { id: 'commitId' }, 'message', 'referencedObject', { authorName: 'name' }, { authorId: 'users.id' }, { authorAvatar: 'users.avatar' }, 'commits.createdAt' ] ).select( ) + let query = BranchCommits( ) + .columns( [ { id: 'commitId' }, 'message', 'referencedObject', 'sourceApplication', 'totalChildrenCount', { authorName: 'name' }, { authorId: 'users.id' }, { authorAvatar: 'users.avatar' }, 'commits.createdAt' ] ) + .select( ) .join( 'commits', 'commits.id', 'branch_commits.commitId' ) .join( 'users', 'commits.author', 'users.id' ) .where( 'branchId', branchId ) @@ -130,7 +133,8 @@ module.exports = { async getCommitsByStreamId( { streamId, limit, cursor } ) { limit = limit || 25 let query = StreamCommits( ) - .columns( [ { id: 'commitId' }, 'message', 'referencedObject', { authorName: 'name' }, { authorId: 'users.id' }, { authorAvatar: 'users.avatar' }, 'commits.createdAt' ] ).select( ) + .columns( [ { id: 'commitId' }, 'message', 'referencedObject', 'sourceApplication', 'totalChildrenCount', { authorName: 'name' }, { authorId: 'users.id' }, { authorAvatar: 'users.avatar' }, 'commits.createdAt' ] ) + .select( ) .join( 'commits', 'commits.id', 'stream_commits.commitId' ) .join( 'users', 'commits.author', 'users.id' ) .where( 'streamId', streamId ) @@ -151,7 +155,8 @@ module.exports = { let query = Commits( ) - .columns( [ { id: 'commitId' }, 'message', 'referencedObject', 'commits.createdAt', { streamId: 'stream_commits.streamId' }, { streamName: 'streams.name' } ] ).select( ) + .columns( [ { id: 'commitId' }, 'message', 'referencedObject', 'sourceApplication', 'totalChildrenCount', 'commits.createdAt', { streamId: 'stream_commits.streamId' }, { streamName: 'streams.name' } ] ) + .select( ) .join( 'stream_commits', 'commits.id', 'stream_commits.commitId' ) .join( 'streams', 'stream_commits.streamId', 'streams.id' ) .where( 'author', userId ) diff --git a/modules/core/tests/commits.spec.js b/modules/core/tests/commits.spec.js index 98407ee6e..edd594eda 100644 --- a/modules/core/tests/commits.spec.js +++ b/modules/core/tests/commits.spec.js @@ -76,15 +76,15 @@ describe( 'Commits @core-commits', ( ) => { let commitId1, commitId2, commitId3 it( 'Should create a commit by branch name', async ( ) => { - commitId1 = await createCommitByBranchName( { streamId: stream.id, branchName: 'main', message: 'first commit', objectId: testObject.id, authorId: user.id } ) + commitId1 = await createCommitByBranchName( { streamId: stream.id, branchName: 'main', message: 'first commit', sourceApplication: 'tests', objectId: testObject.id, authorId: user.id, sourceApplication: 'tests' } ) expect( commitId1 ).to.be.a.string } ) it( 'Should create a commit with a previous commit id', async ( ) => { - commitId2 = await createCommitByBranchName( { streamId: stream.id, branchName: 'main', message: 'second commit', objectId: testObject2.id, authorId: user.id, previousCommitIds: [ commitId1 ] } ) + commitId2 = await createCommitByBranchName( { streamId: stream.id, branchName: 'main', message: 'second commit', sourceApplication: 'tests', objectId: testObject2.id, authorId: user.id, previousCommitIds: [ commitId1 ] } ) expect( commitId2 ).to.be.a.string - commitId3 = await createCommitByBranchName( { streamId: stream.id, branchName: 'main', message: 'third commit', objectId: testObject3.id, authorId: user.id, previousCommitIds: [ commitId1, commitId2 ] } ) + commitId3 = await createCommitByBranchName( { streamId: stream.id, branchName: 'main', message: 'third commit', sourceApplication: 'tests', objectId: testObject3.id, authorId: user.id, previousCommitIds: [ commitId1, commitId2 ] } ) expect( commitId3 ).to.be.a.string } ) @@ -95,7 +95,7 @@ describe( 'Commits @core-commits', ( ) => { } ) it( 'Should delete a commit', async ( ) => { - let tempCommit = await createCommitByBranchName( { streamId: stream.id, branchName: 'main', message: 'temp commit', objectId: testObject.id, authorId: user.id } ) + let tempCommit = await createCommitByBranchName( { streamId: stream.id, branchName: 'main', message: 'temp commit', sourceApplication: 'tests', objectId: testObject.id, authorId: user.id } ) let res = await deleteCommit( { id: tempCommit } ) expect( res ).to.equal( 1 ) @@ -112,7 +112,7 @@ describe( 'Commits @core-commits', ( ) => { for ( let i = 0; i < 10; i++ ) { let t = { qux: i } t.id = await createObject( t ) - await createCommitByBranchName( { streamId: stream.id, branchName: 'main', message: `commit # ${i+3}`, objectId: t.id, authorId: user.id } ) + await createCommitByBranchName( { streamId: stream.id, branchName: 'main', message: `commit # ${i+3}`, sourceApplication: 'tests', objectId: t.id, authorId: user.id } ) } let { commits, cursor } = await getCommitsByBranchName( { streamId: stream.id, branchName: 'main', limit: 2 } ) @@ -133,7 +133,7 @@ describe( 'Commits @core-commits', ( ) => { for ( let i = 0; i < 10; i++ ) { let t = { thud: i } t.id = await createObject( t ) - await createCommitByBranchName( { streamId: stream.id, branchName: 'dim/dev', message: `pushed something # ${i+3}`, objectId: t.id, authorId: user.id } ) + await createCommitByBranchName( { streamId: stream.id, branchName: 'dim/dev', message: `pushed something # ${i+3}`, sourceApplication: 'tests', objectId: t.id, authorId: user.id } ) } let { commits, cursor } = await getCommitsByStreamId( { streamId: stream.id, limit: 10 } ) @@ -159,7 +159,7 @@ describe( 'Commits @core-commits', ( ) => { it( 'Should get the public commits of an user only', async ( ) => { let privateStreamId = await createStream( { name: 'private', isPublic: false, ownerId: user.id } ) - let commitId = await createCommitByBranchName( { streamId: privateStreamId, branchName: 'main', message: 'first commit', objectId: testObject.id, authorId: user.id } ) + let commitId = await createCommitByBranchName( { streamId: privateStreamId, branchName: 'main', message: 'first commit', sourceApplication: 'tests', objectId: testObject.id, authorId: user.id } ) let { commits, cursor } = await getCommitsByUserId( { userId: user.id, limit: 1000 } ) expect( commits.length ).to.equal( 23 ) @@ -170,5 +170,27 @@ describe( 'Commits @core-commits', ( ) => { expect( c ).to.equal( 24 ) } ) + it( 'Commits should have source, total count and branch name fields', async() => { + let { commits: userCommits } = await getCommitsByUserId( { userId: user.id, limit: 1000 } ) + let userCommit = userCommits[0] + + let { commits: streamCommits } = await getCommitsByStreamId( { streamId: stream.id, limit: 10 } ) + let serverCommit = streamCommits[0] + + let { commits: branchCommits } = await getCommitsByBranchName( { streamId: stream.id, branchName: 'main', limit: 2 } ) + let branchCommit = branchCommits[0] + + console.log( userCommit, serverCommit, branchCommit ) + + expect(userCommit).to.have.property('sourceApplication') + expect(userCommit.sourceApplication).to.be.a('string') + + expect(userCommit).to.have.property( 'totalChildrenCount') + expect(userCommit.totalChildrenCount).to.be.a('number') + + expect(userCommit).to.have.property('branchName') + expect(userCommit.branchName).to.be.a('string') + }) + } ) From 3697559d629ec3a1caf1ca526fe890c9da9ba7c6 Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Wed, 23 Dec 2020 01:35:15 +0200 Subject: [PATCH 08/13] feat(server): deprecates `previousCommitIds` field in favour of `parents` across all commit schemas --- modules/core/graph/schemas/branchesAndCommits.graphql | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/core/graph/schemas/branchesAndCommits.graphql b/modules/core/graph/schemas/branchesAndCommits.graphql index d61b363c3..239877073 100644 --- a/modules/core/graph/schemas/branchesAndCommits.graphql +++ b/modules/core/graph/schemas/branchesAndCommits.graphql @@ -24,6 +24,7 @@ type Commit { sourceApplication: String totalChildrenCount: Int branchName: String + parents: [String] authorName: String authorId: String authorAvatar: String @@ -37,6 +38,7 @@ type CommitCollectionUserNode { sourceApplication: String totalChildrenCount: Int branchName: String + parents: [String] streamId: String streamName: String createdAt: DateTime @@ -148,7 +150,8 @@ input CommitCreateInput { message: String sourceApplication: String totalChildrenCount: Int - previousCommitIds: [String] + previousCommitIds: [String] @deprecated( reason: "Use the `parents` field.") + parents: [String] } input CommitUpdateInput { From 51a9ea6aa4f0ae85de66fd863848de4788194ba6 Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Wed, 23 Dec 2020 01:35:46 +0200 Subject: [PATCH 09/13] chore(server): allows linting in test files --- .eslintrc.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.json b/.eslintrc.json index 8827e7bc9..f1de4c957 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -7,7 +7,7 @@ "parserOptions": { "ecmaVersion": 11 }, - "ignorePatterns": ["modules/*/tests/*", "node_modules/*"], + "ignorePatterns": ["node_modules/*"], "rules": { "arrow-spacing": [ 2, From 349d91ec069b7cb53b7f5fcc75595103951a2cf6 Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Wed, 23 Dec 2020 01:36:22 +0200 Subject: [PATCH 10/13] feat(server): implements branchName and totalChildren count across all commit get services --- modules/core/services/commits.js | 24 ++++++++++++++---------- modules/core/tests/commits.spec.js | 19 +++++++++++-------- 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/modules/core/services/commits.js b/modules/core/services/commits.js index 1305a1350..40b49baf1 100644 --- a/modules/core/services/commits.js +++ b/modules/core/services/commits.js @@ -15,7 +15,7 @@ const { getObject } = require( './objects' ) module.exports = { - async createCommitByBranchId( { streamId, branchId, objectId, authorId, message, sourceApplication, totalChildrenCount, previousCommitIds } ) { + async createCommitByBranchId( { streamId, branchId, objectId, authorId, message, sourceApplication, totalChildrenCount, parents } ) { // If no total children count is passed in, get it from the original object // that this commit references. @@ -47,22 +47,22 @@ module.exports = { } ) // Link it to its children, if any. - if ( Array.isArray( previousCommitIds ) && previousCommitIds.length > 0 ) { - let childrenMap = previousCommitIds.map( childId => { return { parent: id, child: childId } } ) + if ( Array.isArray( parents ) && parents.length > 0 ) { + let childrenMap = parents.map( childId => { return { parent: id, child: childId } } ) await ParentCommits( ).insert( childrenMap ) } return id }, - async createCommitByBranchName( { streamId, branchName, objectId, authorId, message, sourceApplication, totalChildrenCount, previousCommitIds } ) { + async createCommitByBranchName( { streamId, branchName, objectId, authorId, message, sourceApplication, totalChildrenCount, parents } ) { branchName = branchName.toLowerCase( ) let myBranch = await getBranchByNameAndStreamId( { streamId: streamId, name: branchName } ) if ( !myBranch ) throw new Error( `Failed to find branch with name ${branchName}.` ) - return await module.exports.createCommitByBranchId( { streamId, branchId: myBranch.id, objectId, authorId, message, sourceApplication, totalChildrenCount, previousCommitIds } ) + return await module.exports.createCommitByBranchId( { streamId, branchId: myBranch.id, objectId, authorId, message, sourceApplication, totalChildrenCount, parents } ) }, async updateCommit( { id, message } ) { @@ -98,13 +98,13 @@ module.exports = { async getCommitsByBranchId( { branchId, limit, cursor } ) { limit = limit || 25 let query = BranchCommits( ) - .columns( [ { id: 'commitId' }, 'message', 'referencedObject', 'sourceApplication', 'totalChildrenCount', { authorName: 'name' }, { authorId: 'users.id' }, { authorAvatar: 'users.avatar' }, 'commits.createdAt' ] ) + .columns( [ { id: 'commitId' }, 'message', 'referencedObject', 'sourceApplication', 'totalChildrenCount', 'commits.createdAt', { branchName: 'branches.name' },{ authorName: 'users.name' }, { authorId: 'users.id' }, { authorAvatar: 'users.avatar' } ] ) .select( ) .join( 'commits', 'commits.id', 'branch_commits.commitId' ) .join( 'users', 'commits.author', 'users.id' ) + .join( 'branches', 'branches.id', 'branch_commits.branchId' ) .where( 'branchId', branchId ) - if ( cursor ) query.andWhere( 'commits.createdAt', '<', cursor ) @@ -133,11 +133,13 @@ module.exports = { async getCommitsByStreamId( { streamId, limit, cursor } ) { limit = limit || 25 let query = StreamCommits( ) - .columns( [ { id: 'commitId' }, 'message', 'referencedObject', 'sourceApplication', 'totalChildrenCount', { authorName: 'name' }, { authorId: 'users.id' }, { authorAvatar: 'users.avatar' }, 'commits.createdAt' ] ) + .columns( [ { id: 'commits.id' }, 'message', 'referencedObject', 'sourceApplication', 'totalChildrenCount', 'commits.createdAt', { branchName: 'branches.name' }, { authorName: 'users.name' }, { authorId: 'users.id' }, { authorAvatar: 'users.avatar' } ] ) .select( ) .join( 'commits', 'commits.id', 'stream_commits.commitId' ) .join( 'users', 'commits.author', 'users.id' ) - .where( 'streamId', streamId ) + .join( 'branch_commits', 'commits.id', 'branch_commits.commitId' ) + .join( 'branches', 'branches.id', 'branch_commits.branchId' ) + .where( 'stream_commits.streamId', streamId ) if ( cursor ) @@ -155,10 +157,12 @@ module.exports = { let query = Commits( ) - .columns( [ { id: 'commitId' }, 'message', 'referencedObject', 'sourceApplication', 'totalChildrenCount', 'commits.createdAt', { streamId: 'stream_commits.streamId' }, { streamName: 'streams.name' } ] ) + .columns( [ { id: 'commits.id' }, 'message', 'referencedObject', 'sourceApplication', 'totalChildrenCount', 'commits.createdAt', { branchName: 'branches.name' }, { streamId: 'stream_commits.streamId' }, { streamName: 'streams.name' } ] ) .select( ) .join( 'stream_commits', 'commits.id', 'stream_commits.commitId' ) .join( 'streams', 'stream_commits.streamId', 'streams.id' ) + .join( 'branch_commits', 'commits.id', 'branch_commits.commitId' ) + .join( 'branches', 'branches.id', 'branch_commits.branchId' ) .where( 'author', userId ) if ( publicOnly ) diff --git a/modules/core/tests/commits.spec.js b/modules/core/tests/commits.spec.js index edd594eda..a33d5bcc0 100644 --- a/modules/core/tests/commits.spec.js +++ b/modules/core/tests/commits.spec.js @@ -170,7 +170,7 @@ describe( 'Commits @core-commits', ( ) => { expect( c ).to.equal( 24 ) } ) - it( 'Commits should have source, total count and branch name fields', async() => { + it( 'Commits should have source, total count, branch name and ancestor fields', async() => { let { commits: userCommits } = await getCommitsByUserId( { userId: user.id, limit: 1000 } ) let userCommit = userCommits[0] @@ -182,15 +182,18 @@ describe( 'Commits @core-commits', ( ) => { console.log( userCommit, serverCommit, branchCommit ) - expect(userCommit).to.have.property('sourceApplication') - expect(userCommit.sourceApplication).to.be.a('string') + expect( userCommit ).to.have.property( 'sourceApplication' ) + expect( userCommit.sourceApplication ).to.be.a( 'string' ) - expect(userCommit).to.have.property( 'totalChildrenCount') - expect(userCommit.totalChildrenCount).to.be.a('number') + expect( userCommit ).to.have.property( 'totalChildrenCount' ) + expect( userCommit.totalChildrenCount ).to.be.a( 'number' ) - expect(userCommit).to.have.property('branchName') - expect(userCommit.branchName).to.be.a('string') - }) + expect( userCommit ).to.have.property( 'branchName' ) + expect( userCommit.branchName ).to.be.a( 'string' ) + + expect( userCommit ).to.have.property( 'parents' ) + expect( userCommit.branchName ).to.be.a( 'array' ) + } ) } ) From 1758858250e2341c77d37225075f83e1e8d9abd3 Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Wed, 23 Dec 2020 01:44:18 +0200 Subject: [PATCH 11/13] feat(server): implements branchName and total kids count in get commit by id + test --- modules/core/services/commits.js | 6 +++++- modules/core/tests/commits.spec.js | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/core/services/commits.js b/modules/core/services/commits.js index 40b49baf1..2428ebd87 100644 --- a/modules/core/services/commits.js +++ b/modules/core/services/commits.js @@ -70,8 +70,12 @@ module.exports = { }, async getCommitById( { id } ) { - return await Commits( ).columns( [ { id: 'commits.id' }, 'message', 'referencedObject', 'sourceApplication', 'totalChildrenCount', { authorName: 'name' }, { authorId: 'users.id' }, { authorAvatar: 'users.avatar' }, 'commits.createdAt' ] ).select( ) + return await Commits( ) + .columns( [ { id: 'commits.id' }, 'message', 'referencedObject', 'sourceApplication', 'totalChildrenCount', 'commits.createdAt', { branchName: 'branches.name' }, { authorName: 'users.name' }, { authorId: 'users.id' }, { authorAvatar: 'users.avatar' } ] ) + .select( ) .join( 'users', 'commits.author', 'users.id' ) + .join( 'branch_commits', 'commits.id', 'branch_commits.commitId' ) + .join( 'branches', 'branches.id', 'branch_commits.branchId' ) .where( { 'commits.id': id } ).first( ) }, diff --git a/modules/core/tests/commits.spec.js b/modules/core/tests/commits.spec.js index a33d5bcc0..4d4ffc646 100644 --- a/modules/core/tests/commits.spec.js +++ b/modules/core/tests/commits.spec.js @@ -180,7 +180,9 @@ describe( 'Commits @core-commits', ( ) => { let { commits: branchCommits } = await getCommitsByBranchName( { streamId: stream.id, branchName: 'main', limit: 2 } ) let branchCommit = branchCommits[0] - console.log( userCommit, serverCommit, branchCommit ) + let idCommit = await getCommitById( {id: streamCommits[4].id} ) + + console.log( userCommit, serverCommit, branchCommit, idCommit ) expect( userCommit ).to.have.property( 'sourceApplication' ) expect( userCommit.sourceApplication ).to.be.a( 'string' ) From 33d3ae6ca9f678baa877dd9f226b42048b4c1252 Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Wed, 23 Dec 2020 14:55:54 +0200 Subject: [PATCH 12/13] feat(server): simplifies parent commits relationship --- modules/core/migrations/000-core.js | 6 ++---- ...223120532_add_commit_parents_simplification.js | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 modules/core/migrations/20201223120532_add_commit_parents_simplification.js diff --git a/modules/core/migrations/000-core.js b/modules/core/migrations/000-core.js index e5dff740a..ad70d7a43 100644 --- a/modules/core/migrations/000-core.js +++ b/modules/core/migrations/000-core.js @@ -142,10 +142,8 @@ exports.up = async knex => { table.timestamp( 'createdAt' ).defaultTo( knex.fn.now( ) ) } ) - // Commit inheritance table. - // Tracks the inheritance of commits. A commit may have: - // - one ancestor (simple sequential push) - // - more ancestors (result of a merge) + // NOTE: DEPRECATED + // Table is dropped in later migration. await knex.schema.createTable( 'parent_commits', table => { table.string( 'parent', 10 ).references( 'id' ).inTable( 'commits' ).notNullable( ).onDelete( 'cascade' ) table.string( 'child', 10 ).references( 'id' ).inTable( 'commits' ).notNullable( ).onDelete( 'cascade' ) diff --git a/modules/core/migrations/20201223120532_add_commit_parents_simplification.js b/modules/core/migrations/20201223120532_add_commit_parents_simplification.js new file mode 100644 index 000000000..a0b53b262 --- /dev/null +++ b/modules/core/migrations/20201223120532_add_commit_parents_simplification.js @@ -0,0 +1,15 @@ +/* istanbul ignore file */ +exports.up = async ( knex ) => { + await knex.schema.dropTableIfExists( 'parent_commits' ) + await knex.schema.alterTable( 'commits', table => { + table.specificType( 'parents', 'text[]' ) + } ) +} + +exports.down = async ( knex ) => { + let hasColumn = await knex.schema.hasColumn( 'commits', 'parents' ) + if ( hasColumn ) + await knex.schema.alterTable( 'commits', table => { + table.dropColumn( 'parents' ) + } ) +} From 2973ce86943a19b9542de1d10b7f9a22f9215c8f Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Wed, 23 Dec 2020 14:56:55 +0200 Subject: [PATCH 13/13] feat(server): commits: implements all fields in services & updates parents --- .../graph/schemas/branchesAndCommits.graphql | 5 ++- modules/core/services/commits.js | 33 ++++++---------- modules/core/services/tokens.js | 2 +- modules/core/tests/branches.spec.js | 2 +- modules/core/tests/commits.spec.js | 38 ++++++++++++------- 5 files changed, 43 insertions(+), 37 deletions(-) diff --git a/modules/core/graph/schemas/branchesAndCommits.graphql b/modules/core/graph/schemas/branchesAndCommits.graphql index 239877073..f50554a02 100644 --- a/modules/core/graph/schemas/branchesAndCommits.graphql +++ b/modules/core/graph/schemas/branchesAndCommits.graphql @@ -150,7 +150,10 @@ input CommitCreateInput { message: String sourceApplication: String totalChildrenCount: Int - previousCommitIds: [String] @deprecated( reason: "Use the `parents` field.") + """ + **DEPRECATED** Use the `parents` field. + """ + previousCommitIds: [String] parents: [String] } diff --git a/modules/core/services/commits.js b/modules/core/services/commits.js index 2428ebd87..d08f6527f 100644 --- a/modules/core/services/commits.js +++ b/modules/core/services/commits.js @@ -31,26 +31,14 @@ module.exports = { author: authorId, sourceApplication, totalChildrenCount, + parents, message } ) // Link it to a branch - await BranchCommits( ).insert( { - branchId: branchId, - commitId: id - } ) - + await BranchCommits( ).insert( {branchId: branchId, commitId: id} ) // Link it to a stream - await StreamCommits( ).insert( { - streamId: streamId, - commitId: id - } ) - - // Link it to its children, if any. - if ( Array.isArray( parents ) && parents.length > 0 ) { - let childrenMap = parents.map( childId => { return { parent: id, child: childId } } ) - await ParentCommits( ).insert( childrenMap ) - } + await StreamCommits( ).insert( {streamId: streamId,commitId: id} ) return id }, @@ -70,13 +58,16 @@ module.exports = { }, async getCommitById( { id } ) { - return await Commits( ) - .columns( [ { id: 'commits.id' }, 'message', 'referencedObject', 'sourceApplication', 'totalChildrenCount', 'commits.createdAt', { branchName: 'branches.name' }, { authorName: 'users.name' }, { authorId: 'users.id' }, { authorAvatar: 'users.avatar' } ] ) + let query = await Commits( ) + .columns( [ { id: 'commits.id' }, 'message', 'referencedObject', 'sourceApplication', 'totalChildrenCount', 'parents', 'commits.createdAt', { branchName: 'branches.name' }, { authorName: 'users.name' }, { authorId: 'users.id' }, { authorAvatar: 'users.avatar' } ] ) .select( ) .join( 'users', 'commits.author', 'users.id' ) .join( 'branch_commits', 'commits.id', 'branch_commits.commitId' ) .join( 'branches', 'branches.id', 'branch_commits.branchId' ) - .where( { 'commits.id': id } ).first( ) + // .leftJoin( 'parent_commits', 'parent_commits.parent', 'commits.id' ) + .where( { 'commits.id': id } ) + .first( ) + return await query }, async deleteCommit( { id } ) { @@ -102,7 +93,7 @@ module.exports = { async getCommitsByBranchId( { branchId, limit, cursor } ) { limit = limit || 25 let query = BranchCommits( ) - .columns( [ { id: 'commitId' }, 'message', 'referencedObject', 'sourceApplication', 'totalChildrenCount', 'commits.createdAt', { branchName: 'branches.name' },{ authorName: 'users.name' }, { authorId: 'users.id' }, { authorAvatar: 'users.avatar' } ] ) + .columns( [ { id: 'commitId' }, 'message', 'referencedObject', 'sourceApplication', 'totalChildrenCount', 'parents', 'commits.createdAt', { branchName: 'branches.name' },{ authorName: 'users.name' }, { authorId: 'users.id' }, { authorAvatar: 'users.avatar' } ] ) .select( ) .join( 'commits', 'commits.id', 'branch_commits.commitId' ) .join( 'users', 'commits.author', 'users.id' ) @@ -137,7 +128,7 @@ module.exports = { async getCommitsByStreamId( { streamId, limit, cursor } ) { limit = limit || 25 let query = StreamCommits( ) - .columns( [ { id: 'commits.id' }, 'message', 'referencedObject', 'sourceApplication', 'totalChildrenCount', 'commits.createdAt', { branchName: 'branches.name' }, { authorName: 'users.name' }, { authorId: 'users.id' }, { authorAvatar: 'users.avatar' } ] ) + .columns( [ { id: 'commits.id' }, 'message', 'referencedObject', 'sourceApplication', 'totalChildrenCount', 'parents', 'commits.createdAt', { branchName: 'branches.name' }, { authorName: 'users.name' }, { authorId: 'users.id' }, { authorAvatar: 'users.avatar' } ] ) .select( ) .join( 'commits', 'commits.id', 'stream_commits.commitId' ) .join( 'users', 'commits.author', 'users.id' ) @@ -161,7 +152,7 @@ module.exports = { let query = Commits( ) - .columns( [ { id: 'commits.id' }, 'message', 'referencedObject', 'sourceApplication', 'totalChildrenCount', 'commits.createdAt', { branchName: 'branches.name' }, { streamId: 'stream_commits.streamId' }, { streamName: 'streams.name' } ] ) + .columns( [ { id: 'commits.id' }, 'message', 'referencedObject', 'sourceApplication', 'totalChildrenCount', 'parents', 'commits.createdAt', { branchName: 'branches.name' }, { streamId: 'stream_commits.streamId' }, { streamName: 'streams.name' } ] ) .select( ) .join( 'stream_commits', 'commits.id', 'stream_commits.commitId' ) .join( 'streams', 'stream_commits.streamId', 'streams.id' ) diff --git a/modules/core/services/tokens.js b/modules/core/services/tokens.js index 26ef6347e..8fb6acad5 100644 --- a/modules/core/services/tokens.js +++ b/modules/core/services/tokens.js @@ -129,7 +129,7 @@ module.exports = { token_scopes JOIN api_tokens ON "api_tokens"."id" = "token_scopes"."tokenId" GROUP BY - token_scopes. "tokenId") ts USING (id) + token_scopes. "tokenId" ) ts USING (id) WHERE t.id IN( SELECT diff --git a/modules/core/tests/branches.spec.js b/modules/core/tests/branches.spec.js index efb21fb49..e7a502f2b 100644 --- a/modules/core/tests/branches.spec.js +++ b/modules/core/tests/branches.spec.js @@ -22,7 +22,7 @@ const { deleteBranchById } = require( '../services/branches' ) -describe( 'Branches', ( ) => { +describe( 'Branches @core-branches', ( ) => { let user = { name: 'Dimitrie Stefanescu', diff --git a/modules/core/tests/commits.spec.js b/modules/core/tests/commits.spec.js index 4d4ffc646..b940792b4 100644 --- a/modules/core/tests/commits.spec.js +++ b/modules/core/tests/commits.spec.js @@ -81,10 +81,10 @@ describe( 'Commits @core-commits', ( ) => { } ) it( 'Should create a commit with a previous commit id', async ( ) => { - commitId2 = await createCommitByBranchName( { streamId: stream.id, branchName: 'main', message: 'second commit', sourceApplication: 'tests', objectId: testObject2.id, authorId: user.id, previousCommitIds: [ commitId1 ] } ) + commitId2 = await createCommitByBranchName( { streamId: stream.id, branchName: 'main', message: 'second commit', sourceApplication: 'tests', objectId: testObject2.id, authorId: user.id, parents: [ commitId1 ] } ) expect( commitId2 ).to.be.a.string - commitId3 = await createCommitByBranchName( { streamId: stream.id, branchName: 'main', message: 'third commit', sourceApplication: 'tests', objectId: testObject3.id, authorId: user.id, previousCommitIds: [ commitId1, commitId2 ] } ) + commitId3 = await createCommitByBranchName( { streamId: stream.id, branchName: 'main', message: 'third commit', sourceApplication: 'tests', objectId: testObject3.id, authorId: user.id, parents: [ commitId1, commitId2 ] } ) expect( commitId3 ).to.be.a.string } ) @@ -130,6 +130,8 @@ describe( 'Commits @core-commits', ( ) => { it( 'Should get the commits from a stream', async ( ) => { await createBranch( { name: 'dim/dev', streamId: stream.id, authorId: user.id } ) + + let prevId for ( let i = 0; i < 10; i++ ) { let t = { thud: i } t.id = await createObject( t ) @@ -170,7 +172,7 @@ describe( 'Commits @core-commits', ( ) => { expect( c ).to.equal( 24 ) } ) - it( 'Commits should have source, total count, branch name and ancestor fields', async() => { + it( 'Commits should have source, total count, branch name and parents fields', async() => { let { commits: userCommits } = await getCommitsByUserId( { userId: user.id, limit: 1000 } ) let userCommit = userCommits[0] @@ -180,22 +182,32 @@ describe( 'Commits @core-commits', ( ) => { let { commits: branchCommits } = await getCommitsByBranchName( { streamId: stream.id, branchName: 'main', limit: 2 } ) let branchCommit = branchCommits[0] - let idCommit = await getCommitById( {id: streamCommits[4].id} ) + let idCommit = await getCommitById( {id: commitId3 } ) - console.log( userCommit, serverCommit, branchCommit, idCommit ) + for ( let commit of [ userCommit, serverCommit, branchCommit, idCommit ] ) { + expect( commit ).to.have.property( 'sourceApplication' ) + expect( commit.sourceApplication ).to.be.a( 'string' ) - expect( userCommit ).to.have.property( 'sourceApplication' ) - expect( userCommit.sourceApplication ).to.be.a( 'string' ) + expect( commit ).to.have.property( 'totalChildrenCount' ) + expect( commit.totalChildrenCount ).to.be.a( 'number' ) - expect( userCommit ).to.have.property( 'totalChildrenCount' ) - expect( userCommit.totalChildrenCount ).to.be.a( 'number' ) + expect( commit ).to.have.property( 'branchName' ) + expect( commit.branchName ).to.be.a( 'string' ) - expect( userCommit ).to.have.property( 'branchName' ) - expect( userCommit.branchName ).to.be.a( 'string' ) + expect( commit ).to.have.property( 'parents' ) + } - expect( userCommit ).to.have.property( 'parents' ) - expect( userCommit.branchName ).to.be.a( 'array' ) + expect( idCommit.parents ).to.be.a( 'array' ) + expect( idCommit.parents.length ).to.equal( 2 ) } ) + it( 'Should have an array of parents', async() => { + let commits = [ await getCommitById( {id: commitId3 } ), await await getCommitById( {id: commitId2 } ) ] + for ( let commit of commits ) { + expect( commit ).to.have.property( 'parents' ) + expect( commit.parents ).to.be.a( 'array' ) + expect( commit.parents.length ).to.greaterThan( 0 ) + } + } ) } )