From c7887bb213318e08048b588f6abba4a3ac8967b8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Oct 2023 12:07:06 +0300 Subject: [PATCH 01/10] chore(deps): update all non-major dependencies (#2449) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 24 +- website/package.json | 4 +- yarn.lock | 601 +++++++++++++++++++++++-------------------- 3 files changed, 342 insertions(+), 287 deletions(-) diff --git a/package.json b/package.json index 04f96ba282f..cbf76041aa4 100644 --- a/package.json +++ b/package.json @@ -25,23 +25,23 @@ }, "devDependencies": { "@apollo/federation": "0.38.1", - "@babel/core": "7.23.0", - "@babel/preset-env": "7.22.20", - "@babel/preset-typescript": "7.23.0", - "@babel/plugin-proposal-decorators": "7.23.0", + "@babel/core": "7.23.2", + "@babel/preset-env": "7.23.2", + "@babel/preset-typescript": "7.23.2", + "@babel/plugin-proposal-decorators": "7.23.2", "@babel/plugin-proposal-class-properties": "7.18.6", "@changesets/cli": "2.26.2", "@changesets/changelog-github": "0.4.8", "@envelop/graphql-modules": "5.0.3", "@graphql-tools/merge": "9.0.0", "@graphql-yoga/node": "3.9.1", - "@types/benchmark": "2.1.3", - "@types/express": "4.17.19", + "@types/benchmark": "2.1.4", + "@types/express": "4.17.20", "@types/jest": "27.5.2", - "@types/node": "18.18.4", - "@types/ramda": "0.29.6", - "@typescript-eslint/eslint-plugin": "6.7.5", - "@typescript-eslint/parser": "6.7.5", + "@types/node": "18.18.7", + "@types/ramda": "0.29.7", + "@typescript-eslint/eslint-plugin": "6.9.0", + "@typescript-eslint/parser": "6.9.0", "apollo-server": "3.12.1", "apollo-server-express": "3.12.1", "apollo-datasource-rest": "3.7.0", @@ -53,13 +53,13 @@ "bob-the-bundler": "1.7.3", "chalk": "4.1.2", "dataloader": "2.2.2", - "eslint": "8.51.0", + "eslint": "8.52.0", "express": "4.18.2", "express-graphql": "0.12.0", "globby": "11.1.0", "graphql": "16.8.1", "graphql-subscriptions": "2.0.0", - "graphql-ws": "5.14.1", + "graphql-ws": "5.14.2", "husky": "8.0.3", "jest": "27.5.1", "lint-staged": "14.0.1", diff --git a/website/package.json b/website/package.json index 73bc4aa4688..b1f488924e1 100644 --- a/website/package.json +++ b/website/package.json @@ -32,8 +32,8 @@ "devDependencies": { "@theguild/algolia": "1.1.9", "@theguild/tailwind-config": "0.3.0", - "@types/node": "18.18.4", - "@types/react": "18.2.28", + "@types/node": "18.18.7", + "@types/react": "18.2.33", "cross-env": "7.0.3", "typescript": "5.2.2" } diff --git a/yarn.lock b/yarn.lock index 89fa96b9679..5913de87556 100644 --- a/yarn.lock +++ b/yarn.lock @@ -314,25 +314,25 @@ "@babel/highlight" "^7.22.13" chalk "^2.4.2" -"@babel/compat-data@^7.22.20", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" - integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.2": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.2.tgz#6a12ced93455827037bfb5ed8492820d60fc32cc" + integrity sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ== -"@babel/core@7.23.0", "@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.0.tgz#f8259ae0e52a123eb40f552551e647b506a94d83" - integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== +"@babel/core@7.23.2", "@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.2.tgz#ed10df0d580fff67c5f3ee70fd22e2e4c90a9f94" + integrity sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.22.13" "@babel/generator" "^7.23.0" "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.0" + "@babel/helpers" "^7.23.2" "@babel/parser" "^7.23.0" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" + "@babel/traverse" "^7.23.2" "@babel/types" "^7.23.0" convert-source-map "^2.0.0" debug "^4.1.0" @@ -399,10 +399,10 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" - integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== +"@babel/helper-define-polyfill-provider@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz#a71c10f7146d809f4a256c373f462d9bba8cf6ba" + integrity sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -467,7 +467,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": +"@babel/helper-remap-async-to-generator@^7.22.20", "@babel/helper-remap-async-to-generator@^7.22.5": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== @@ -530,13 +530,13 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.23.0": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15" - integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA== +"@babel/helpers@^7.23.2": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767" + integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" + "@babel/traverse" "^7.23.2" "@babel/types" "^7.23.0" "@babel/highlight@^7.22.13": @@ -577,10 +577,10 @@ "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-decorators@7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.0.tgz#66d9014173b3267a9ced3e69935138bc64ffb5c8" - integrity sha512-kYsT+f5ARWF6AdFmqoEEp+hpqxEB8vGmRWfw2aj78M2vTwS2uHW91EF58iFm1Z9U8Y/RrLu2XKJn46P9ca1b0w== +"@babel/plugin-proposal-decorators@7.23.2": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.2.tgz#0b345a5754f48309fa50b7cd99075ef0295b12c8" + integrity sha512-eR0gJQc830fJVGz37oKLvt9W9uUIQSAovUl0e9sJ3YeO09dlcoBVYD3CLrjCj4qHdXmfiyTyFt8yeQYSN5fxLg== dependencies: "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" @@ -755,14 +755,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz#3b153af4a6b779f340d5b80d3f634f55820aefa3" - integrity sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w== +"@babel/plugin-transform-async-generator-functions@^7.23.2": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz#054afe290d64c6f576f371ccc321772c8ea87ebb" + integrity sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ== dependencies: - "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.9" + "@babel/helper-remap-async-to-generator" "^7.22.20" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-transform-async-to-generator@^7.22.5": @@ -781,7 +781,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.22.15": +"@babel/plugin-transform-block-scoping@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz#8744d02c6c264d82e1a4bc5d2d501fd8aff6f022" integrity sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g== @@ -828,7 +828,7 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/template" "^7.22.5" -"@babel/plugin-transform-destructuring@^7.22.15": +"@babel/plugin-transform-destructuring@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz#6447aa686be48b32eaf65a73e0e2c0bd010a266c" integrity sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg== @@ -920,7 +920,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-amd@^7.22.5": +"@babel/plugin-transform-modules-amd@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz#05b2bc43373faa6d30ca89214731f76f966f3b88" integrity sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw== @@ -928,7 +928,7 @@ "@babel/helper-module-transforms" "^7.23.0" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.22.15", "@babel/plugin-transform-modules-commonjs@^7.23.0": +"@babel/plugin-transform-modules-commonjs@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz#b3dba4757133b2762c00f4f94590cf6d52602481" integrity sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ== @@ -937,7 +937,7 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.22.11": +"@babel/plugin-transform-modules-systemjs@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz#77591e126f3ff4132a40595a6cccd00a6b60d160" integrity sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg== @@ -1013,7 +1013,7 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.22.15": +"@babel/plugin-transform-optional-chaining@^7.22.15", "@babel/plugin-transform-optional-chaining@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz#73ff5fc1cf98f542f09f29c0631647d8ad0be158" integrity sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g== @@ -1146,12 +1146,12 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/preset-env@7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.20.tgz#de9e9b57e1127ce0a2f580831717f7fb677ceedb" - integrity sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg== +"@babel/preset-env@7.23.2": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.2.tgz#1f22be0ff0e121113260337dbc3e58fafce8d059" + integrity sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ== dependencies: - "@babel/compat-data" "^7.22.20" + "@babel/compat-data" "^7.23.2" "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-option" "^7.22.15" @@ -1177,15 +1177,15 @@ "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.15" + "@babel/plugin-transform-async-generator-functions" "^7.23.2" "@babel/plugin-transform-async-to-generator" "^7.22.5" "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.15" + "@babel/plugin-transform-block-scoping" "^7.23.0" "@babel/plugin-transform-class-properties" "^7.22.5" "@babel/plugin-transform-class-static-block" "^7.22.11" "@babel/plugin-transform-classes" "^7.22.15" "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.15" + "@babel/plugin-transform-destructuring" "^7.23.0" "@babel/plugin-transform-dotall-regex" "^7.22.5" "@babel/plugin-transform-duplicate-keys" "^7.22.5" "@babel/plugin-transform-dynamic-import" "^7.22.11" @@ -1197,9 +1197,9 @@ "@babel/plugin-transform-literals" "^7.22.5" "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.15" - "@babel/plugin-transform-modules-systemjs" "^7.22.11" + "@babel/plugin-transform-modules-amd" "^7.23.0" + "@babel/plugin-transform-modules-commonjs" "^7.23.0" + "@babel/plugin-transform-modules-systemjs" "^7.23.0" "@babel/plugin-transform-modules-umd" "^7.22.5" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" "@babel/plugin-transform-new-target" "^7.22.5" @@ -1208,7 +1208,7 @@ "@babel/plugin-transform-object-rest-spread" "^7.22.15" "@babel/plugin-transform-object-super" "^7.22.5" "@babel/plugin-transform-optional-catch-binding" "^7.22.11" - "@babel/plugin-transform-optional-chaining" "^7.22.15" + "@babel/plugin-transform-optional-chaining" "^7.23.0" "@babel/plugin-transform-parameters" "^7.22.15" "@babel/plugin-transform-private-methods" "^7.22.5" "@babel/plugin-transform-private-property-in-object" "^7.22.11" @@ -1225,10 +1225,10 @@ "@babel/plugin-transform-unicode-regex" "^7.22.5" "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.22.19" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" + "@babel/types" "^7.23.0" + babel-plugin-polyfill-corejs2 "^0.4.6" + babel-plugin-polyfill-corejs3 "^0.8.5" + babel-plugin-polyfill-regenerator "^0.5.3" core-js-compat "^3.31.0" semver "^6.3.1" @@ -1241,10 +1241,10 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-typescript@7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.23.0.tgz#cc6602d13e7e5b2087c811912b87cf937a9129d9" - integrity sha512-6P6VVa/NM/VlAYj5s2Aq/gdVg8FSENCg3wlZ6Qau9AcPaoF5LbN1nyGlR9DTRIw9PpxI94e+ReydsJHcjwAweg== +"@babel/preset-typescript@7.23.2": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.23.2.tgz#c8de488130b7081f7e1482936ad3de5b018beef4" + integrity sha512-u4UJc1XsS1GhIGteM8rnGiIvf9rJpiVgMEeCnwlLA7WJPC+jcXWJAGxYmeqs5hOZD8BbAfnV5ezBOxQbb4OUxA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-option" "^7.22.15" @@ -1273,10 +1273,10 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.23.0", "@babel/traverse@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53" - integrity sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw== +"@babel/traverse@^7.23.2", "@babel/traverse@^7.7.2": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" + integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== dependencies: "@babel/code-frame" "^7.22.13" "@babel/generator" "^7.23.0" @@ -1600,10 +1600,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.51.0": - version "8.51.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.51.0.tgz#6d419c240cfb2b66da37df230f7e7eef801c32fa" - integrity sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg== +"@eslint/js@8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.52.0.tgz#78fe5f117840f69dc4a353adf9b9cd926353378c" + integrity sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA== "@giscus/react@2.3.0": version "2.3.0" @@ -1800,12 +1800,12 @@ dependencies: client-only "^0.0.1" -"@humanwhocodes/config-array@^0.11.11": - version "0.11.11" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" - integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== +"@humanwhocodes/config-array@^0.11.13": + version "0.11.13" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" + integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" + "@humanwhocodes/object-schema" "^2.0.1" debug "^4.1.1" minimatch "^3.0.5" @@ -1814,10 +1814,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" + integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -2233,55 +2233,55 @@ dependencies: webpack-bundle-analyzer "4.7.0" -"@next/env@13.5.4", "@next/env@^13.4.3": - version "13.5.4" - resolved "https://registry.yarnpkg.com/@next/env/-/env-13.5.4.tgz#777c3af16de2cf2f611b6c8126910062d13d222c" - integrity sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ== - -"@next/swc-darwin-arm64@13.5.4": - version "13.5.4" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.4.tgz#241957774fef3f876dc714cfc0ca6f00f561737e" - integrity sha512-Df8SHuXgF1p+aonBMcDPEsaahNo2TCwuie7VXED4FVyECvdXfRT9unapm54NssV9tF3OQFKBFOdlje4T43VO0w== - -"@next/swc-darwin-x64@13.5.4": - version "13.5.4" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.4.tgz#fa11bb97bf06cd45cbd554354b46bf93e22c025b" - integrity sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw== - -"@next/swc-linux-arm64-gnu@13.5.4": - version "13.5.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.4.tgz#dd3a482cd6871ed23b049066a0f3c4c2f955dc88" - integrity sha512-l/k/fvRP/zmB2jkFMfefmFkyZbDkYW0mRM/LB+tH5u9pB98WsHXC0WvDHlGCYp3CH/jlkJPL7gN8nkTQVrQ/2w== - -"@next/swc-linux-arm64-musl@13.5.4": - version "13.5.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.4.tgz#ed6d7abaf5712cff2752ce5300d6bacc6aff1b18" - integrity sha512-YYGb7SlLkI+XqfQa8VPErljb7k9nUnhhRrVaOdfJNCaQnHBcvbT7cx/UjDQLdleJcfyg1Hkn5YSSIeVfjgmkTg== - -"@next/swc-linux-x64-gnu@13.5.4": - version "13.5.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.4.tgz#977a040388e8a685a3a85e0dbdff90a4ee2a7189" - integrity sha512-uE61vyUSClnCH18YHjA8tE1prr/PBFlBFhxBZis4XBRJoR+txAky5d7gGNUIbQ8sZZ7LVkSVgm/5Fc7mwXmRAg== - -"@next/swc-linux-x64-musl@13.5.4": - version "13.5.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.4.tgz#3e29a0ad8efc016196c3a120da04397eea328b2a" - integrity sha512-qVEKFYML/GvJSy9CfYqAdUexA6M5AklYcQCW+8JECmkQHGoPxCf04iMh7CPR7wkHyWWK+XLt4Ja7hhsPJtSnhg== - -"@next/swc-win32-arm64-msvc@13.5.4": - version "13.5.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.4.tgz#18a236c3fe5a48d24b56d939e6a05488bb682b7e" - integrity sha512-mDSQfqxAlfpeZOLPxLymZkX0hYF3juN57W6vFHTvwKlnHfmh12Pt7hPIRLYIShk8uYRsKPtMTth/EzpwRI+u8w== - -"@next/swc-win32-ia32-msvc@13.5.4": - version "13.5.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.4.tgz#255132243ab6fb20d3c7c92a585e2c4fa50368fe" - integrity sha512-aoqAT2XIekIWoriwzOmGFAvTtVY5O7JjV21giozBTP5c6uZhpvTWRbmHXbmsjZqY4HnEZQRXWkSAppsIBweKqw== - -"@next/swc-win32-x64-msvc@13.5.4": - version "13.5.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.4.tgz#cc542907b55247c5634d9a8298e1c143a1847e25" - integrity sha512-cyRvlAxwlddlqeB9xtPSfNSCRy8BOa4wtMo0IuI9P7Y0XT2qpDrpFKRyZ7kUngZis59mPVla5k8X1oOJ8RxDYg== +"@next/env@13.5.6", "@next/env@^13.4.3": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.5.6.tgz#c1148e2e1aa166614f05161ee8f77ded467062bc" + integrity sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw== + +"@next/swc-darwin-arm64@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.6.tgz#b15d139d8971360fca29be3bdd703c108c9a45fb" + integrity sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA== + +"@next/swc-darwin-x64@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.6.tgz#9c72ee31cc356cb65ce6860b658d807ff39f1578" + integrity sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA== + +"@next/swc-linux-arm64-gnu@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.6.tgz#59f5f66155e85380ffa26ee3d95b687a770cfeab" + integrity sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg== + +"@next/swc-linux-arm64-musl@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.6.tgz#f012518228017052736a87d69bae73e587c76ce2" + integrity sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q== + +"@next/swc-linux-x64-gnu@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.6.tgz#339b867a7e9e7ee727a700b496b269033d820df4" + integrity sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw== + +"@next/swc-linux-x64-musl@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.6.tgz#ae0ae84d058df758675830bcf70ca1846f1028f2" + integrity sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ== + +"@next/swc-win32-arm64-msvc@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.6.tgz#a5cc0c16920485a929a17495064671374fdbc661" + integrity sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg== + +"@next/swc-win32-ia32-msvc@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.6.tgz#6a2409b84a2cbf34bf92fe714896455efb4191e4" + integrity sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg== + +"@next/swc-win32-x64-msvc@13.5.6": + version "13.5.6" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.6.tgz#4a3e2a206251abc729339ba85f60bc0433c2865d" + integrity sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -2628,9 +2628,9 @@ remove-markdown "^0.5.0" "@theguild/components@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@theguild/components/-/components-6.0.1.tgz#c53a1c6793af14204eef6c00caa0ee6fbf8d2d06" - integrity sha512-0IEilGNtkF77K6hWU5SB73mbpIwzZAgUz2iCg8O+7HXw+VzmYB+eCWYjEAOdVt9syyt69Zq7weEQO9IG6rS2fw== + version "6.0.3" + resolved "https://registry.yarnpkg.com/@theguild/components/-/components-6.0.3.tgz#245fc5ac76b1ae863786ede663e87d9fde227dab" + integrity sha512-nKwSYBc1ThSOEjCTz9zykyzNRTMg09xnojP+zXzlBVwr5QCOVejxT3MitA812ubcVDDMJQnlJiqa3/YyN61Bvw== dependencies: "@algolia/autocomplete-js" "1.11.1" "@algolia/autocomplete-plugin-algolia-insights" "1.11.1" @@ -2643,12 +2643,12 @@ clsx "2.0.0" fuzzy "^0.1.3" next-videos "1.5.0" - nextra "3.0.0-alpha.5" - nextra-theme-docs "3.0.0-alpha.5" + nextra "3.0.0-alpha.10" + nextra-theme-docs "3.0.0-alpha.10" react-paginate "8.2.0" react-player "2.13.0" remark-mdx-disable-explicit-jsx "0.1.0" - search-insights "2.8.3" + search-insights "2.9.0" semver "^7.3.8" "@theguild/remark-mermaid@^0.0.5": @@ -2755,10 +2755,10 @@ dependencies: "@babel/types" "^7.20.7" -"@types/benchmark@2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@types/benchmark/-/benchmark-2.1.3.tgz#7f62084640c509d5619ad33f4d4a29be044ecbe2" - integrity sha512-psuUawgwIy/hSjO4AUDiPBJhJx72e3cBL+YzmVK/5ofRJC02R0NmvrSenGRuSmJc++0j95y2T01xKKNz50FGZw== +"@types/benchmark@2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@types/benchmark/-/benchmark-2.1.4.tgz#74f331a07ca5a07a14409ccae7e8072775974361" + integrity sha512-rVCCileCU5NhP9Ix1e03sIn4gd0mpjh7VNULVQAxzF+9vddk6A5QAHzp2h5kXH8pkv1Ow45fUf3QP3wOEiISvA== "@types/body-parser@*", "@types/body-parser@1.19.2": version "1.19.2" @@ -2860,10 +2860,10 @@ "@types/qs" "*" "@types/serve-static" "*" -"@types/express@4.17.19": - version "4.17.19" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.19.tgz#6ff9b4851fda132c5d3dcd2f89fdb6a7a0031ced" - integrity sha512-UtOfBtzN9OvpZPPbnnYunfjM7XCI4jyk1NvnFhTVz5krYAnW4o5DCoIekvms+8ApqhB4+9wSge1kBijdfTSmfg== +"@types/express@4.17.20": + version "4.17.20" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.20.tgz#e7c9b40276d29e38a4e3564d7a3d65911e2aa433" + integrity sha512-rOaqlkgEvOW495xErXMsmyX3WKBInbhG5eqojXYi3cGUaLoRDlXa5d52fkfWZT963AZ3v2eZ4MbKE6WpDAGVsw== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.33" @@ -2991,10 +2991,12 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.32.tgz#f6cd08939ae3ad886fcc92ef7f0109dacddf61ab" integrity sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g== -"@types/node@*", "@types/node@18.18.4": - version "18.18.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.4.tgz#519fef47a13cf869be290c20fc6ae9b7fe887aa7" - integrity sha512-t3rNFBgJRugIhackit2mVcLfF6IRc0JE4oeizPQL8Zrm8n2WY/0wOdpOPhdtG0V9Q2TlW/axbF1MJ6z+Yj/kKQ== +"@types/node@*", "@types/node@18.18.7": + version "18.18.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.7.tgz#bb3a7068dc4ba421b6968f2a259298b3a4e129e8" + integrity sha512-bw+lEsxis6eqJYW8Ql6+yTqkE6RuFtsQPSe5JxXbqYRFQEER5aJA9a5UH9igqDWm3X4iLHIKOHlnAXLM4mi7uQ== + dependencies: + undici-types "~5.26.4" "@types/node@^10.1.0": version "10.17.60" @@ -3031,10 +3033,10 @@ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45" integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== -"@types/ramda@0.29.6": - version "0.29.6" - resolved "https://registry.yarnpkg.com/@types/ramda/-/ramda-0.29.6.tgz#67af9b362da5d18316c8181fc13a0f3eeb17db55" - integrity sha512-4XQ9hYQhCwOxfkoTsIPvDVXc75fY5+MLQHUpExX6ByvU1q+0vOYRLSjWAt1IydkE1hOuhwMH6KvV/9rhzgrvRw== +"@types/ramda@0.29.7": + version "0.29.7" + resolved "https://registry.yarnpkg.com/@types/ramda/-/ramda-0.29.7.tgz#e78747e4d6b498b335b841200b5fa03287a9c60c" + integrity sha512-IUl6U95qwlQtVvZkSX4ODj08oJVtPyWMFRtPVNqhxc2rt+Bh7lCzTrGMYMZ7dmRKcAjtot3xrPnYGwsjdt8gzQ== dependencies: types-ramda "^0.29.5" @@ -3043,10 +3045,10 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.5.tgz#38bd1733ae299620771bd414837ade2e57757498" integrity sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA== -"@types/react@18.2.28", "@types/react@>=16": - version "18.2.28" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.28.tgz#86877465c0fcf751659a36c769ecedfcfacee332" - integrity sha512-ad4aa/RaaJS3hyGz0BGegdnSRXQBkd1CCYDCdNjBPg90UUpLgo+WlJqb9fMYUxtehmzF3PJaTWqRZjko6BRzBg== +"@types/react@18.2.33", "@types/react@>=16": + version "18.2.33" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.33.tgz#055356243dc4350a9ee6c6a2c07c5cae12e38877" + integrity sha512-v+I7S+hu3PIBoVkKGpSYYpiBT1ijqEzWpzQD62/jm4K74hPpSP7FF9BnKG6+fg2+62weJYkkBWDJlZt5JO/9hg== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -3132,16 +3134,16 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@6.7.5": - version "6.7.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.5.tgz#f4024b9f63593d0c2b5bd6e4ca027e6f30934d4f" - integrity sha512-JhtAwTRhOUcP96D0Y6KYnwig/MRQbOoLGXTON2+LlyB/N35SP9j1boai2zzwXb7ypKELXMx3DVk9UTaEq1vHEw== +"@typescript-eslint/eslint-plugin@6.9.0": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.9.0.tgz#fdb6f3821c0167e3356e9d89c80e8230b2e401f4" + integrity sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA== dependencies: "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.7.5" - "@typescript-eslint/type-utils" "6.7.5" - "@typescript-eslint/utils" "6.7.5" - "@typescript-eslint/visitor-keys" "6.7.5" + "@typescript-eslint/scope-manager" "6.9.0" + "@typescript-eslint/type-utils" "6.9.0" + "@typescript-eslint/utils" "6.9.0" + "@typescript-eslint/visitor-keys" "6.9.0" debug "^4.3.4" graphemer "^1.4.0" ignore "^5.2.4" @@ -3149,75 +3151,75 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/parser@6.7.5": - version "6.7.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.7.5.tgz#8d7ca3d1fbd9d5a58cc4d30b2aa797a760137886" - integrity sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw== +"@typescript-eslint/parser@6.9.0": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.9.0.tgz#2b402cadeadd3f211c25820e5433413347b27391" + integrity sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw== dependencies: - "@typescript-eslint/scope-manager" "6.7.5" - "@typescript-eslint/types" "6.7.5" - "@typescript-eslint/typescript-estree" "6.7.5" - "@typescript-eslint/visitor-keys" "6.7.5" + "@typescript-eslint/scope-manager" "6.9.0" + "@typescript-eslint/types" "6.9.0" + "@typescript-eslint/typescript-estree" "6.9.0" + "@typescript-eslint/visitor-keys" "6.9.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.7.5": - version "6.7.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.7.5.tgz#1cf33b991043886cd67f4f3600b8e122fc14e711" - integrity sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A== +"@typescript-eslint/scope-manager@6.9.0": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.9.0.tgz#2626e9a7fe0e004c3e25f3b986c75f584431134e" + integrity sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw== dependencies: - "@typescript-eslint/types" "6.7.5" - "@typescript-eslint/visitor-keys" "6.7.5" + "@typescript-eslint/types" "6.9.0" + "@typescript-eslint/visitor-keys" "6.9.0" -"@typescript-eslint/type-utils@6.7.5": - version "6.7.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.7.5.tgz#0a65949ec16588d8956f6d967f7d9c84ddb2d72a" - integrity sha512-Gs0qos5wqxnQrvpYv+pf3XfcRXW6jiAn9zE/K+DlmYf6FcpxeNYN0AIETaPR7rHO4K2UY+D0CIbDP9Ut0U4m1g== +"@typescript-eslint/type-utils@6.9.0": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.9.0.tgz#23923c8c9677c2ad41457cf8e10a5f2946be1b04" + integrity sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ== dependencies: - "@typescript-eslint/typescript-estree" "6.7.5" - "@typescript-eslint/utils" "6.7.5" + "@typescript-eslint/typescript-estree" "6.9.0" + "@typescript-eslint/utils" "6.9.0" debug "^4.3.4" ts-api-utils "^1.0.1" -"@typescript-eslint/types@6.7.5": - version "6.7.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.7.5.tgz#4571320fb9cf669de9a95d9849f922c3af809790" - integrity sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ== +"@typescript-eslint/types@6.9.0": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.9.0.tgz#86a0cbe7ac46c0761429f928467ff3d92f841098" + integrity sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw== -"@typescript-eslint/typescript-estree@6.7.5": - version "6.7.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.5.tgz#4578de1a26e9f24950f029a4f00d1bfe41f15a39" - integrity sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg== +"@typescript-eslint/typescript-estree@6.9.0": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.0.tgz#d0601b245be873d8fe49f3737f93f8662c8693d4" + integrity sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ== dependencies: - "@typescript-eslint/types" "6.7.5" - "@typescript-eslint/visitor-keys" "6.7.5" + "@typescript-eslint/types" "6.9.0" + "@typescript-eslint/visitor-keys" "6.9.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@6.7.5": - version "6.7.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.7.5.tgz#ab847b53d6b65e029314b8247c2336843dba81ab" - integrity sha512-pfRRrH20thJbzPPlPc4j0UNGvH1PjPlhlCMq4Yx7EGjV7lvEeGX0U6MJYe8+SyFutWgSHsdbJ3BXzZccYggezA== +"@typescript-eslint/utils@6.9.0": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.9.0.tgz#5bdac8604fca4823f090e4268e681c84d3597c9f" + integrity sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" "@types/json-schema" "^7.0.12" "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.7.5" - "@typescript-eslint/types" "6.7.5" - "@typescript-eslint/typescript-estree" "6.7.5" + "@typescript-eslint/scope-manager" "6.9.0" + "@typescript-eslint/types" "6.9.0" + "@typescript-eslint/typescript-estree" "6.9.0" semver "^7.5.4" -"@typescript-eslint/visitor-keys@6.7.5": - version "6.7.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.5.tgz#84c68d6ceb5b12d5246b918b84f2b79affd6c2f1" - integrity sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg== +"@typescript-eslint/visitor-keys@6.9.0": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.0.tgz#cc69421c10c4ac997ed34f453027245988164e80" + integrity sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg== dependencies: - "@typescript-eslint/types" "6.7.5" + "@typescript-eslint/types" "6.9.0" eslint-visitor-keys "^3.4.1" -"@ungap/structured-clone@^1.0.0": +"@ungap/structured-clone@^1.0.0", "@ungap/structured-clone@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== @@ -3851,29 +3853,29 @@ babel-plugin-parameter-decorator@1.0.16: resolved "https://registry.yarnpkg.com/babel-plugin-parameter-decorator/-/babel-plugin-parameter-decorator-1.0.16.tgz#1c889c3a1f3bbf03801fcbc2e95b8bae7468df3f" integrity sha512-yUT2WPTUg1JaPmRGRSF557m1HJ9vdFQInRWOkiOyO5a9HhqlXffJu+fQ2xd5+qU/35ICMrrk9eWKsHCairKA9w== -babel-plugin-polyfill-corejs2@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" - integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== +babel-plugin-polyfill-corejs2@^0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz#b2df0251d8e99f229a8e60fc4efa9a68b41c8313" + integrity sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/helper-define-polyfill-provider" "^0.4.3" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.3: - version "0.8.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.4.tgz#1fac2b1dcef6274e72b3c72977ed8325cb330591" - integrity sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg== +babel-plugin-polyfill-corejs3@^0.8.5: + version "0.8.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz#25c2d20002da91fe328ff89095c85a391d6856cf" + integrity sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" - core-js-compat "^3.32.2" + "@babel/helper-define-polyfill-provider" "^0.4.3" + core-js-compat "^3.33.1" -babel-plugin-polyfill-regenerator@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" - integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== +babel-plugin-polyfill-regenerator@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz#d4c49e4b44614607c13fb769bcd85c72bb26a4a5" + integrity sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/helper-define-polyfill-provider" "^0.4.3" babel-plugin-transform-typescript-metadata@0.3.2: version "0.3.2" @@ -3951,6 +3953,13 @@ better-path-resolve@1.0.0: dependencies: is-windows "^1.0.0" +better-react-mathjax@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/better-react-mathjax/-/better-react-mathjax-2.0.3.tgz#202dc6fe5c7263278f2491516f43f70ba188122f" + integrity sha512-wfifT8GFOKb1TWm2+E50I6DJpLZ5kLbch283Lu043EJtwSv0XvZDjr4YfR4d2MjAhqP6SH4VjjrKgbX8R00oCQ== + dependencies: + mathjax-full "^3.2.2" + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -4505,6 +4514,11 @@ commander@7, commander@^7.2.0: resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== +commander@9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.2.0.tgz#6e21014b2ed90d8b7c9647230d8b7a94a4a419a9" + integrity sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w== + commander@^2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -4604,10 +4618,10 @@ cookie@0.5.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== -core-js-compat@^3.31.0, core-js-compat@^3.32.2: - version "3.33.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.0.tgz#24aa230b228406450b2277b7c8bfebae932df966" - integrity sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw== +core-js-compat@^3.31.0, core-js-compat@^3.33.1: + version "3.33.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.1.tgz#debe80464107d75419e00c2ee29f35982118ff84" + integrity sha512-6pYKNOgD/j/bkC5xS5IIg6bncid3rfrI42oBH1SQJbsmYPKF7rhzcFzYCcxYMmNQQ0rCEB8WqpW7QHndOggaeQ== dependencies: browserslist "^4.22.1" @@ -5833,18 +5847,19 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@8.51.0: - version "8.51.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.51.0.tgz#4a82dae60d209ac89a5cff1604fea978ba4950f3" - integrity sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA== +eslint@8.52.0: + version "8.52.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.52.0.tgz#d0cd4a1fac06427a61ef9242b9353f36ea7062fc" + integrity sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.51.0" - "@humanwhocodes/config-array" "^0.11.11" + "@eslint/js" "8.52.0" + "@humanwhocodes/config-array" "^0.11.13" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -5876,6 +5891,11 @@ eslint@8.51.0: strip-ansi "^6.0.1" text-table "^0.2.0" +esm@^3.2.25: + version "3.2.25" + resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" + integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== + espree@^9.6.0, espree@^9.6.1: version "9.6.1" resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" @@ -6670,10 +6690,10 @@ graphql-tag@^2.11.0: dependencies: tslib "^2.1.0" -graphql-ws@5.14.1: - version "5.14.1" - resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.14.1.tgz#d05dba9c2cbf1582c990a2dfec4b8f6a55d99da4" - integrity sha512-aqkls1espsygP1PfkAuuLIV96IbztQ6EaADse97pw8wRIMT3+AL/OYfS8V2iCRkc0gzckitoDRGCQEdnySggiA== +graphql-ws@5.14.2: + version "5.14.2" + resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.14.2.tgz#7db6f6138717a544d9480f0213f65f2841ed1c52" + integrity sha512-LycmCwhZ+Op2GlHz4BZDsUYHKRiiUz+3r9wbhBATMETNlORQJAaFlAgTFoeRh6xQoQegwYwIylVD1Qns9/DA3w== graphql-yoga@3.9.1: version "3.9.1" @@ -8621,6 +8641,16 @@ markdown-table@^3.0.0: resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.3.tgz#e6331d30e493127e031dd385488b5bd326e4a6bd" integrity sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw== +mathjax-full@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/mathjax-full/-/mathjax-full-3.2.2.tgz#43f02e55219db393030985d2b6537ceae82f1fa7" + integrity sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w== + dependencies: + esm "^3.2.25" + mhchemparser "^4.1.0" + mj-context-menu "^0.6.1" + speech-rule-engine "^4.0.6" + md5@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" @@ -9028,6 +9058,11 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== +mhchemparser@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/mhchemparser/-/mhchemparser-4.2.1.tgz#d73982e66bc06170a85b1985600ee9dabe157cb0" + integrity sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ== + micromark-core-commonmark@^1.0.0, micromark-core-commonmark@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz#1386628df59946b2d39fb2edfd10f3e8e0a75bb8" @@ -9700,6 +9735,11 @@ mixme@^0.5.1: resolved "https://registry.yarnpkg.com/mixme/-/mixme-0.5.9.tgz#a5a58e17354632179ff3ce5b0fc130899c8ba81c" integrity sha512-VC5fg6ySUscaWUpI4gxCBTQMH2RdUpNrk+MsbpCYtIvf9SBJdiUey4qE7BXviJsJR4nDQxCZ+3yaYNW3guz/Pw== +mj-context-menu@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/mj-context-menu/-/mj-context-menu-0.6.1.tgz#a043c5282bf7e1cf3821de07b13525ca6f85aa69" + integrity sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA== + mkdirp@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" @@ -9792,11 +9832,11 @@ next-videos@1.5.0: file-loader "^4.2.0" next@^13.5.4: - version "13.5.4" - resolved "https://registry.yarnpkg.com/next/-/next-13.5.4.tgz#7e6a93c9c2b9a2c78bf6906a6c5cc73ae02d5b4d" - integrity sha512-+93un5S779gho8y9ASQhb/bTkQF17FNQOtXLKAj3lsNgltEcF0C5PMLLncDmH+8X1EnJH1kbqAERa29nRXqhjA== + version "13.5.6" + resolved "https://registry.yarnpkg.com/next/-/next-13.5.6.tgz#e964b5853272236c37ce0dd2c68302973cf010b1" + integrity sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw== dependencies: - "@next/env" "13.5.4" + "@next/env" "13.5.6" "@swc/helpers" "0.5.2" busboy "1.6.0" caniuse-lite "^1.0.30001406" @@ -9804,20 +9844,20 @@ next@^13.5.4: styled-jsx "5.1.1" watchpack "2.4.0" optionalDependencies: - "@next/swc-darwin-arm64" "13.5.4" - "@next/swc-darwin-x64" "13.5.4" - "@next/swc-linux-arm64-gnu" "13.5.4" - "@next/swc-linux-arm64-musl" "13.5.4" - "@next/swc-linux-x64-gnu" "13.5.4" - "@next/swc-linux-x64-musl" "13.5.4" - "@next/swc-win32-arm64-msvc" "13.5.4" - "@next/swc-win32-ia32-msvc" "13.5.4" - "@next/swc-win32-x64-msvc" "13.5.4" - -nextra-theme-docs@3.0.0-alpha.5: - version "3.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/nextra-theme-docs/-/nextra-theme-docs-3.0.0-alpha.5.tgz#a4a01aea28922d51333074b30f9592546da7bb76" - integrity sha512-wEw3Rmh0urh1qEaaG7cTuSgYyXN6qBuVF61TaGe9jl+b62hIGpxR2r2l6vJCH8LO1O8FI4R9reBdqgqL/Dcu0g== + "@next/swc-darwin-arm64" "13.5.6" + "@next/swc-darwin-x64" "13.5.6" + "@next/swc-linux-arm64-gnu" "13.5.6" + "@next/swc-linux-arm64-musl" "13.5.6" + "@next/swc-linux-x64-gnu" "13.5.6" + "@next/swc-linux-x64-musl" "13.5.6" + "@next/swc-win32-arm64-msvc" "13.5.6" + "@next/swc-win32-ia32-msvc" "13.5.6" + "@next/swc-win32-x64-msvc" "13.5.6" + +nextra-theme-docs@3.0.0-alpha.10: + version "3.0.0-alpha.10" + resolved "https://registry.yarnpkg.com/nextra-theme-docs/-/nextra-theme-docs-3.0.0-alpha.10.tgz#23bfcd53cff8d3556b933084fced18957cc82640" + integrity sha512-1qOZGgrJUa2qS9opbSeBSQaiSMImxX3Sw1BeSceLlxB1mgiCbfeRD7CyZ7haa5A6rozklLsp3q4qtJydwzJB7Q== dependencies: "@headlessui/react" "^1.7.17" "@popperjs/core" "^2.11.8" @@ -9830,10 +9870,10 @@ nextra-theme-docs@3.0.0-alpha.5: scroll-into-view-if-needed "^3.1.0" zod "^3.22.3" -nextra@3.0.0-alpha.5: - version "3.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/nextra/-/nextra-3.0.0-alpha.5.tgz#573f25e05e59cbf0e6693dcb5aa241778a1c04be" - integrity sha512-ttga+SX5Ulwf2hcMvrXbTqseaz6OnodOknyaNOpuobN5bbCypKq3mkB1URFKs/n3XuuioQLGBYIVLjKh2x3TdQ== +nextra@3.0.0-alpha.10: + version "3.0.0-alpha.10" + resolved "https://registry.yarnpkg.com/nextra/-/nextra-3.0.0-alpha.10.tgz#8f52a586d96903fee91912c890821cd7ca7fcacf" + integrity sha512-UikEZpT73QyG8POilTZOYAUxLwzBD+PyiQTPoTVFdSA1dpJSVzTdXd6GvHuQf1twWCgfcXumJbu/yGskjgmXNQ== dependencies: "@headlessui/react" "^1.7.17" "@mdx-js/mdx" "^2.3.0" @@ -9841,6 +9881,7 @@ nextra@3.0.0-alpha.5: "@napi-rs/simple-git" "^0.1.9" "@theguild/remark-mermaid" "^0.0.5" "@theguild/remark-npm2yarn" "0.3.0" + better-react-mathjax "^2.0.3" clsx "^2.0.0" estree-util-to-js "^2.0.0" estree-util-value-to-estree "^3.0.1" @@ -9857,7 +9898,7 @@ nextra@3.0.0-alpha.5: remark-gfm "^3.0.1" remark-math "^6.0.0" remark-reading-time "^2.0.1" - shiki "npm:shikiji@0.6.8" + shiki "npm:shikiji@0.6.10" slash "^5.1.0" title "^3.5.3" unist-util-remove "^4.0.0" @@ -10806,7 +10847,7 @@ range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.1: +raw-body@2.5.1, raw-body@^2.4.1: version "2.5.1" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== @@ -10816,16 +10857,6 @@ raw-body@2.5.1: iconv-lite "0.4.24" unpipe "1.0.0" -raw-body@^2.4.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - rc@^1.0.1, rc@^1.1.6: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -11355,10 +11386,10 @@ scroll-into-view-if-needed@^3.1.0: dependencies: compute-scroll-into-view "^3.0.2" -search-insights@2.8.3: - version "2.8.3" - resolved "https://registry.yarnpkg.com/search-insights/-/search-insights-2.8.3.tgz#651703c8de53a67dd7483c606d2d617d8feb8d7c" - integrity sha512-W9rZfQ9XEfF0O6ntgQOTI7Txc8nkZrO4eJ/pTHK0Br6wWND2sPGPoWg+yGhdIW7wMbLqk8dc23IyEtLlNGpeNw== +search-insights@2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/search-insights/-/search-insights-2.9.0.tgz#06797bc29b2d0edf54a3dffab0ef2220c02fafad" + integrity sha512-bkWW9nIHOFkLwjQ1xqVaMbjjO5vhP26ERsH9Y3pKr8imthofEFIxlnOabkmGcw6ksRj9jWidcI65vvjJH/nTGg== section-matter@^1.0.0: version "1.0.0" @@ -11472,10 +11503,10 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -"shiki@npm:shikiji@0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/shikiji/-/shikiji-0.6.8.tgz#27d8d25ecfe823450167825e620dfb84ae983837" - integrity sha512-K0axxNAdB9KvLUflU7QoLC7p6i2p1R2MFG0eP+iclbjtuEZqng99jHcg3VJL0GWRO67yozTICnykjo1HjOzdkg== +"shiki@npm:shikiji@0.6.10": + version "0.6.10" + resolved "https://registry.yarnpkg.com/shikiji/-/shikiji-0.6.10.tgz#0dc34a5bebbafd9425a69e9b429ee39b4726dff1" + integrity sha512-WE+A5Y2ntM5hL3iJQujk97qr5Uj7PSIRXpQfrZ6h+JWPXZ8KBEDhFXc4lqNriaRq1WGOVPUT83XMOzmHiH3W8A== dependencies: hast-util-to-html "^9.0.0" @@ -11656,6 +11687,15 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== +speech-rule-engine@^4.0.6: + version "4.0.7" + resolved "https://registry.yarnpkg.com/speech-rule-engine/-/speech-rule-engine-4.0.7.tgz#b655dacbad3dae04acc0f7665e26ef258397dd09" + integrity sha512-sJrL3/wHzNwJRLBdf6CjJWIlxC04iYKkyXvYSVsWVOiC2DSkHmxsqOhEeMsBA9XK+CHuNcsdkbFDnoUfAsmp9g== + dependencies: + commander "9.2.0" + wicked-good-xpath "1.3.0" + xmldom-sre "0.1.31" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -12406,6 +12446,11 @@ underscore@1.12.1: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -12985,6 +13030,11 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +wicked-good-xpath@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/wicked-good-xpath/-/wicked-good-xpath-1.3.0.tgz#81b0e95e8650e49c94b22298fff8686b5553cf6c" + integrity sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw== + widest-line@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" @@ -13109,6 +13159,11 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== +xmldom-sre@0.1.31: + version "0.1.31" + resolved "https://registry.yarnpkg.com/xmldom-sre/-/xmldom-sre-0.1.31.tgz#10860d5bab2c603144597d04bf2c4980e98067f4" + integrity sha512-f9s+fUkX04BxQf+7mMWAp5zk61pciie+fFLC9hX9UVvCeJQfNHRHXpeo5MPcR0EUf57PYLdt+ZO4f3Ipk2oZUw== + xmlhttprequest-ssl@~1.6.2: version "1.6.3" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz#03b713873b01659dfa2c1c5d056065b27ddc2de6" @@ -13147,7 +13202,7 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@2.3.1, yaml@^2.1.1, yaml@^2.2.2: +yaml@2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== @@ -13157,7 +13212,7 @@ yaml@^1.10.2, yaml@^1.7.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yaml@^2.3.2: +yaml@^2.1.1, yaml@^2.2.2, yaml@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.2.tgz#f522db4313c671a0ca963a75670f1c12ea909144" integrity sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg== From c6bc090598b61eb313a2fbcc66b7fdcbedbbc16a Mon Sep 17 00:00:00 2001 From: Kamil Kisiela Date: Thu, 2 Nov 2023 14:50:19 +0100 Subject: [PATCH 02/10] Test Execution Context in context of parallel GraphQL requests (#2462) --- .../tests/execution-context.spec.ts | 136 ++++++++++++++++++ 1 file changed, 136 insertions(+) diff --git a/packages/graphql-modules/tests/execution-context.spec.ts b/packages/graphql-modules/tests/execution-context.spec.ts index 5804d22db11..32fd6d38c37 100644 --- a/packages/graphql-modules/tests/execution-context.spec.ts +++ b/packages/graphql-modules/tests/execution-context.spec.ts @@ -8,6 +8,8 @@ import { gql, InjectionToken, testkit, + CONTEXT, + Inject, } from '../src'; import { @@ -510,3 +512,137 @@ test('accessing a singleton provider with execution context in another singleton getDependencyName: expectedName, }); }); + +test('accessing a singleton provider with execution context in another singleton provider (parallel requests)', async () => { + const spies = { + foo: jest.fn(), + bar: jest.fn(), + baz: jest.fn(), + }; + + const Name = new InjectionToken>('name'); + + @Injectable({ + scope: Scope.Singleton, + }) + class Foo { + @ExecutionContext() + public context!: ExecutionContext; + + constructor() { + spies.foo(); + } + + async getName() { + return this.context.injector.get(Name); + } + } + + @Injectable({ + scope: Scope.Singleton, + }) + class Bar { + constructor(private foo: Foo) { + spies.bar(); + } + + async getName() { + return this.foo.getName(); + } + } + + @Injectable({ + scope: Scope.Operation, + }) + class Baz { + constructor( + @Inject(Name) + private name: Promise + ) { + spies.baz(); + } + + async getName() { + return this.name; + } + } + + const mod = createModule({ + id: 'mod', + providers: [Foo, Bar, Baz], + typeDefs: gql` + type Query { + getName: String + getDependencyName: String + getNameFromContext: String + } + `, + resolvers: { + Query: { + getName: async (_a: {}, _b: {}, { injector }: GraphQLModules.Context) => + injector.get(Foo).getName(), + getDependencyName: async ( + _a: {}, + _b: {}, + { injector }: GraphQLModules.Context + ) => injector.get(Bar).getName(), + getNameFromContext: async ( + _a: {}, + _b: {}, + { injector }: GraphQLModules.Context + ) => injector.get(Baz).getName(), + }, + }, + }); + + const app = createApplication({ + modules: [mod], + providers: [ + { + provide: Name, + scope: Scope.Operation, + useFactory(ctx) { + return new Promise((resolve) => { + setTimeout(() => { + resolve(`request-${ctx.requestId}`); + }, Math.random() * 200); + }); + }, + deps: [CONTEXT], + }, + ], + }); + + const requests = new Array({ length: 5 }).map((_, i) => i); + + const results = await Promise.all( + requests.map((i) => + testkit.execute(app, { + contextValue: { + requestId: i, + }, + document: gql` + { + getName + getDependencyName + getNameFromContext + } + `, + }) + ) + ); + + expect(spies.bar).toHaveBeenCalledTimes(results.length); + expect(spies.foo).toHaveBeenCalledTimes(results.length); + + for (let i = 0; i < results.length; i++) { + const result = results[i]; + const expectedName = `request-${i}`; + expect(result.errors).not.toBeDefined(); + expect(result.data).toEqual({ + getName: expectedName, + getDependencyName: expectedName, + getNameFromContext: expectedName, + }); + } +}); From 472733b1b3b2f2b89ccc34f3e5093b16d082f13d Mon Sep 17 00:00:00 2001 From: Denis Badurina Date: Thu, 2 Nov 2023 15:18:19 +0100 Subject: [PATCH 03/10] Execution context getters using closures (#2461) * no async hooks lol * changeset * Update docs #2461 --------- Co-authored-by: Kamil Kisiela --- .changeset/stupid-otters-march.md | 5 ++ .../src/application/context.ts | 22 +----- .../execution-context-async-local-storage.ts | 29 ------- .../application/execution-context-hooks.ts | 79 ------------------- .../execution-context.interface.ts | 4 - .../src/application/execution-context.ts | 19 ----- packages/graphql-modules/src/di/decorators.ts | 2 - .../tests/execution-context.spec.ts | 12 --- .../pages/docs/advanced/execution-context.mdx | 9 --- website/src/pages/docs/recipes/migration.mdx | 2 - 10 files changed, 9 insertions(+), 174 deletions(-) create mode 100644 .changeset/stupid-otters-march.md delete mode 100644 packages/graphql-modules/src/application/execution-context-async-local-storage.ts delete mode 100644 packages/graphql-modules/src/application/execution-context-hooks.ts delete mode 100644 packages/graphql-modules/src/application/execution-context.interface.ts delete mode 100644 packages/graphql-modules/src/application/execution-context.ts diff --git a/.changeset/stupid-otters-march.md b/.changeset/stupid-otters-march.md new file mode 100644 index 00000000000..3ba581afdd2 --- /dev/null +++ b/.changeset/stupid-otters-march.md @@ -0,0 +1,5 @@ +--- +'graphql-modules': patch +--- + +Execution context getters using closures diff --git a/packages/graphql-modules/src/application/context.ts b/packages/graphql-modules/src/application/context.ts index fc596667a27..69ab7c258b8 100644 --- a/packages/graphql-modules/src/application/context.ts +++ b/packages/graphql-modules/src/application/context.ts @@ -5,7 +5,6 @@ import { once, merge } from '../shared/utils'; import type { InternalAppContext, ModulesMap } from './application'; import { attachGlobalProvidersMap } from './di'; import { CONTEXT } from './tokens'; -import { executionContext, ExecutionContextPicker } from './execution-context'; export type ExecutionContextBuilder< TContext extends { @@ -67,13 +66,13 @@ export function createContextBuilder({ }, }); - appInjector.setExecutionContextGetter( - executionContext.getApplicationContext as any - ); + appInjector.setExecutionContextGetter(function executionContextGetter() { + return appContext; + } as any); function createModuleExecutionContextGetter(moduleId: string) { return function moduleExecutionContextGetter() { - return executionContext.getModuleContext(moduleId); + return getModuleContext(moduleId, context); }; } @@ -83,18 +82,6 @@ export function createContextBuilder({ ); }); - const executionContextPicker: ExecutionContextPicker = { - getApplicationContext() { - return appContext; - }, - getModuleContext(moduleId) { - return getModuleContext(moduleId, context); - }, - }; - const destroyExecutionContext = executionContext.create( - executionContextPicker - ); - // As the name of the Injector says, it's an Operation scoped Injector // Application level // Operation scoped - means it's created and destroyed on every GraphQL Operation @@ -186,7 +173,6 @@ export function createContextBuilder({ injector._getObjByKeyId(keyId).onDestroy(); } }); - destroyExecutionContext(); contextCache = {}; }), ɵinjector: operationAppInjector, diff --git a/packages/graphql-modules/src/application/execution-context-async-local-storage.ts b/packages/graphql-modules/src/application/execution-context-async-local-storage.ts deleted file mode 100644 index 077a9aedc1c..00000000000 --- a/packages/graphql-modules/src/application/execution-context-async-local-storage.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { AsyncLocalStorage } from 'async_hooks'; -import { type ExecutionContextPicker } from './execution-context.interface'; - -const executionContextStore = AsyncLocalStorage - ? new AsyncLocalStorage() - : undefined; - -export const executionContext: { - create(picker: ExecutionContextPicker): () => void; - getModuleContext: ExecutionContextPicker['getModuleContext']; - getApplicationContext: ExecutionContextPicker['getApplicationContext']; -} = { - create(picker) { - executionContextStore!.enterWith(picker); - return function destroyContext() {}; - }, - getModuleContext(moduleId) { - return executionContextStore!.getStore()!.getModuleContext(moduleId); - }, - getApplicationContext() { - return executionContextStore!.getStore()!.getApplicationContext(); - }, -}; - -export function enableExecutionContext() {} - -export function getExecutionContextStore() { - return executionContextStore; -} diff --git a/packages/graphql-modules/src/application/execution-context-hooks.ts b/packages/graphql-modules/src/application/execution-context-hooks.ts deleted file mode 100644 index c6db1061aff..00000000000 --- a/packages/graphql-modules/src/application/execution-context-hooks.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { createHook, executionAsyncId } from 'async_hooks'; -import { type ExecutionContextPicker } from './execution-context.interface'; - -const executionContextStore = new Map(); -const executionContextDependencyStore = new Map>(); - -const executionContextHook = createHook({ - init(asyncId, _, triggerAsyncId) { - // Store same context data for child async resources - const ctx = executionContextStore.get(triggerAsyncId); - if (ctx) { - const dependencies = - executionContextDependencyStore.get(triggerAsyncId) ?? - executionContextDependencyStore - .set(triggerAsyncId, new Set()) - .get(triggerAsyncId)!; - dependencies.add(asyncId); - executionContextStore.set(asyncId, ctx); - } - }, - destroy(asyncId) { - if (executionContextStore.has(asyncId)) { - executionContextStore.delete(asyncId); - } - }, -}); - -function destroyContextAndItsChildren(id: number) { - if (executionContextStore.has(id)) { - executionContextStore.delete(id); - } - - const deps = executionContextDependencyStore.get(id); - - if (deps) { - for (const dep of deps) { - destroyContextAndItsChildren(dep); - } - executionContextDependencyStore.delete(id); - } -} - -export const executionContext: { - create(picker: ExecutionContextPicker): () => void; - getModuleContext: ExecutionContextPicker['getModuleContext']; - getApplicationContext: ExecutionContextPicker['getApplicationContext']; -} = { - create(picker) { - const id = executionAsyncId(); - executionContextStore.set(id, picker); - return function destroyContext() { - destroyContextAndItsChildren(id); - }; - }, - getModuleContext(moduleId) { - const picker = executionContextStore.get(executionAsyncId())!; - return picker.getModuleContext(moduleId); - }, - getApplicationContext() { - const picker = executionContextStore.get(executionAsyncId())!; - return picker.getApplicationContext(); - }, -}; - -let executionContextEnabled = false; - -export function enableExecutionContext() { - if (!executionContextEnabled) { - executionContextHook.enable(); - } -} - -export function getExecutionContextStore() { - return executionContextStore; -} - -export function getExecutionContextDependencyStore() { - return executionContextDependencyStore; -} diff --git a/packages/graphql-modules/src/application/execution-context.interface.ts b/packages/graphql-modules/src/application/execution-context.interface.ts deleted file mode 100644 index d6cfb3d84e7..00000000000 --- a/packages/graphql-modules/src/application/execution-context.interface.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface ExecutionContextPicker { - getModuleContext(moduleId: string): GraphQLModules.ModuleContext; - getApplicationContext(): GraphQLModules.AppContext; -} diff --git a/packages/graphql-modules/src/application/execution-context.ts b/packages/graphql-modules/src/application/execution-context.ts deleted file mode 100644 index 4ec7851064c..00000000000 --- a/packages/graphql-modules/src/application/execution-context.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { AsyncLocalStorage } from 'async_hooks'; - -/* - Use AsyncLocalStorage if available (available sync Node 14). - Otherwise, fall back to using async_hooks.createHook -*/ - -import * as Hooks from './execution-context-hooks'; -import * as Async from './execution-context-async-local-storage'; - -export type { ExecutionContextPicker } from './execution-context.interface'; - -export const executionContext = AsyncLocalStorage - ? Async.executionContext - : Hooks.executionContext; - -export const enableExecutionContext = AsyncLocalStorage - ? () => undefined - : Hooks.enableExecutionContext; diff --git a/packages/graphql-modules/src/di/decorators.ts b/packages/graphql-modules/src/di/decorators.ts index 7ef56aa6714..5d251dc5a8f 100644 --- a/packages/graphql-modules/src/di/decorators.ts +++ b/packages/graphql-modules/src/di/decorators.ts @@ -6,7 +6,6 @@ import { ensureInjectableMetadata, } from './metadata'; import { Injector } from './injector'; -import { enableExecutionContext } from '../application/execution-context'; function ensureReflect() { if (!(Reflect && Reflect.getOwnMetadata)) { @@ -17,7 +16,6 @@ function ensureReflect() { export function Injectable(options?: ProviderOptions): ClassDecorator { return (target) => { ensureReflect(); - enableExecutionContext(); const params: Type[] = ( Reflect.getMetadata('design:paramtypes', target) || [] diff --git a/packages/graphql-modules/tests/execution-context.spec.ts b/packages/graphql-modules/tests/execution-context.spec.ts index 32fd6d38c37..7bf4e9fef50 100644 --- a/packages/graphql-modules/tests/execution-context.spec.ts +++ b/packages/graphql-modules/tests/execution-context.spec.ts @@ -12,20 +12,8 @@ import { Inject, } from '../src'; -import { - getExecutionContextDependencyStore, - getExecutionContextStore, -} from '../src/application/execution-context-hooks'; - const posts = ['Foo', 'Bar']; -afterEach(() => { - // There should be no execution context left after each test - expect( - getExecutionContextDependencyStore().size + getExecutionContextStore().size - ).toBe(0); -}); - test('ExecutionContext on module level provider', async () => { const spies = { posts: jest.fn(), diff --git a/website/src/pages/docs/advanced/execution-context.mdx b/website/src/pages/docs/advanced/execution-context.mdx index ec0bb10bf3b..036847b9d13 100644 --- a/website/src/pages/docs/advanced/execution-context.mdx +++ b/website/src/pages/docs/advanced/execution-context.mdx @@ -38,12 +38,3 @@ The next lines show the usage of `@ExecutionContext` decorator. It's a property This way the Singleton `Data` service runs within the execution context of a GraphQL Operation and can access Operation scoped Injector and the GraphQL Context object. It also means you gain a lot in terms of performance because the `Data` class is instantiated only once and used in many operations. - - - `@ExecutionContext` impacts the performance, depending on your Node version - (execution context uses `async_hooks` module). - -GraphQL Modules is smart enough to enable `async_hooks` only when -`@ExecutionContext` is used. - - diff --git a/website/src/pages/docs/recipes/migration.mdx b/website/src/pages/docs/recipes/migration.mdx index 4b4f9cabe88..11e55c70a04 100644 --- a/website/src/pages/docs/recipes/migration.mdx +++ b/website/src/pages/docs/recipes/migration.mdx @@ -317,8 +317,6 @@ export class MyProvider { In v0, we had a concept of Session to manage the execution of each operation. In v1, we dropped it, in favor of a simpler solution. -Internally, we are using Node's `async_hooks` to manage a context of an execution, which allow us to share Injectables between Singleton and Operation scope. - ## Context In v0, you could create a `context` per each module. In v1, `context` is external for GraphQL-Modules and it's not directly in use. You can do whatever you want with that, and just access it in GraphQL-Modules if you need, but we no longer require you to do specific things with your `context`. From 243c0c7bffbed538943126c0f40f12a949f1e103 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 2 Nov 2023 15:19:36 +0100 Subject: [PATCH 04/10] chore(release): update monorepo packages versions (#2464) Co-authored-by: github-actions[bot] --- .changeset/stupid-otters-march.md | 5 ----- packages/graphql-modules/CHANGELOG.md | 6 ++++++ packages/graphql-modules/package.json | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 .changeset/stupid-otters-march.md diff --git a/.changeset/stupid-otters-march.md b/.changeset/stupid-otters-march.md deleted file mode 100644 index 3ba581afdd2..00000000000 --- a/.changeset/stupid-otters-march.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'graphql-modules': patch ---- - -Execution context getters using closures diff --git a/packages/graphql-modules/CHANGELOG.md b/packages/graphql-modules/CHANGELOG.md index 75b266588ba..4ad603c7db8 100644 --- a/packages/graphql-modules/CHANGELOG.md +++ b/packages/graphql-modules/CHANGELOG.md @@ -1,5 +1,11 @@ # graphql-modules +## 2.2.1 + +### Patch Changes + +- [#2461](https://github.com/Urigo/graphql-modules/pull/2461) [`472733b1`](https://github.com/Urigo/graphql-modules/commit/472733b1b3b2f2b89ccc34f3e5093b16d082f13d) Thanks [@enisdenjo](https://github.com/enisdenjo)! - Execution context getters using closures + ## 2.2.0 ### Minor Changes diff --git a/packages/graphql-modules/package.json b/packages/graphql-modules/package.json index 22a65b533de..0250890ed1b 100644 --- a/packages/graphql-modules/package.json +++ b/packages/graphql-modules/package.json @@ -8,7 +8,7 @@ "typescript", "the-guild" ], - "version": "2.2.0", + "version": "2.2.1", "author": "Kamil Kisiela", "license": "MIT", "sideEffects": false, From 724034855db747d456110156758cb4b8cad26cc1 Mon Sep 17 00:00:00 2001 From: Kamil Kisiela Date: Fri, 3 Nov 2023 08:51:41 +0100 Subject: [PATCH 05/10] Support graphql-jit (#2465) --- .changeset/tidy-masks-reply.md | 5 + package.json | 1 + .../graphql-modules/src/module/resolvers.ts | 6 +- .../tests/execution-context.spec.ts | 164 ++++++++++++++++++ yarn.lock | 92 +++++++++- 5 files changed, 264 insertions(+), 4 deletions(-) create mode 100644 .changeset/tidy-masks-reply.md diff --git a/.changeset/tidy-masks-reply.md b/.changeset/tidy-masks-reply.md new file mode 100644 index 00000000000..74fc9e01c9f --- /dev/null +++ b/.changeset/tidy-masks-reply.md @@ -0,0 +1,5 @@ +--- +'graphql-modules': minor +--- + +Support graphql-jit diff --git a/package.json b/package.json index cbf76041aa4..1fd561e5899 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "@graphql-tools/merge": "9.0.0", "@graphql-yoga/node": "3.9.1", "@types/benchmark": "2.1.4", + "graphql-jit": "0.8.4", "@types/express": "4.17.20", "@types/jest": "27.5.2", "@types/node": "18.18.7", diff --git a/packages/graphql-modules/src/module/resolvers.ts b/packages/graphql-modules/src/module/resolvers.ts index cd9cc218f55..f74bebcc99d 100644 --- a/packages/graphql-modules/src/module/resolvers.ts +++ b/packages/graphql-modules/src/module/resolvers.ts @@ -142,7 +142,11 @@ function wrapResolver({ ) => { const ctx = { root, - context: context.ɵgetModuleContext(config.id, context), + context: isReferenceResolver + ? context.ɵgetModuleContext(config.id, context) + : // We mark the context object as possibly undefined, + // because graphql-jit for some reason doesn't pass it for isTypeOf or resolveType methods + context?.ɵgetModuleContext(config.id, context), info, }; diff --git a/packages/graphql-modules/tests/execution-context.spec.ts b/packages/graphql-modules/tests/execution-context.spec.ts index 7bf4e9fef50..a41ac30bb8e 100644 --- a/packages/graphql-modules/tests/execution-context.spec.ts +++ b/packages/graphql-modules/tests/execution-context.spec.ts @@ -11,6 +11,7 @@ import { CONTEXT, Inject, } from '../src'; +import { compileQuery, isCompiledQuery } from 'graphql-jit'; const posts = ['Foo', 'Bar']; @@ -634,3 +635,166 @@ test('accessing a singleton provider with execution context in another singleton }); } }); + +test('accessing a singleton provider with execution context in another singleton provider (parallel requests and graphql-jit)', async () => { + const spies = { + foo: jest.fn(), + bar: jest.fn(), + baz: jest.fn(), + }; + + const Name = new InjectionToken>('name'); + + @Injectable({ + scope: Scope.Singleton, + }) + class Foo { + @ExecutionContext() + public context!: ExecutionContext; + + constructor() { + spies.foo(); + } + + async getName() { + return this.context.injector.get(Name); + } + } + + @Injectable({ + scope: Scope.Singleton, + }) + class Bar { + constructor(private foo: Foo) { + spies.bar(); + } + + async getName() { + return this.foo.getName(); + } + } + + @Injectable({ + scope: Scope.Operation, + }) + class Baz { + constructor( + @Inject(Name) + private name: Promise + ) { + spies.baz(); + } + + async getName() { + return this.name; + } + } + + const mod = createModule({ + id: 'mod', + providers: [Foo, Bar, Baz], + typeDefs: gql` + type Query { + name: Name + } + + type Name { + getName: String + getDependencyName: String + getNameFromContext: String + } + `, + resolvers: { + Query: { + name: () => ({}), + }, + Name: { + // make sure that __isTypeOf works with JIT + __isTypeOf: () => true, + getName: async (_a: {}, _b: {}, { injector }: GraphQLModules.Context) => + injector.get(Foo).getName(), + getDependencyName: async ( + _a: {}, + _b: {}, + { injector }: GraphQLModules.Context + ) => injector.get(Bar).getName(), + getNameFromContext: async ( + _a: {}, + _b: {}, + { injector }: GraphQLModules.Context + ) => injector.get(Baz).getName(), + }, + }, + }); + + const app = createApplication({ + modules: [mod], + providers: [ + { + provide: Name, + scope: Scope.Operation, + useFactory(ctx) { + return new Promise((resolve) => { + setTimeout(() => { + resolve(`request-${ctx.requestId}`); + }, Math.random() * 200); + }); + }, + deps: [CONTEXT], + }, + ], + }); + + const requests = new Array({ length: 5 }).map((_, i) => i); + + const query = gql` + { + name { + getName + getDependencyName + getNameFromContext + } + } + `; + const compiledQuery = compileQuery(app.schema, query, undefined); + + if (!isCompiledQuery(compiledQuery)) { + throw new Error('Failed to to compile a query'); + } + + const results = await Promise.all( + requests.map(async (i) => { + const controller = app.createOperationController({ + context: { + requestId: i, + }, + autoDestroy: false, + }); + return Promise.resolve( + compiledQuery.query( + {}, // root + controller.context, // context + {} // variables + ) + ).finally(() => { + controller.destroy(); + }); + }) + ); + + expect(spies.bar).toHaveBeenCalledTimes(results.length); + expect(spies.foo).toHaveBeenCalledTimes(results.length); + + for (let i = 0; i < results.length; i++) { + const result = results[i]; + const expectedName = `request-${i}`; + expect(result.errors).not.toBeDefined(); + expect(result.data).toEqual({ + name: { + getName: expectedName, + getDependencyName: expectedName, + getNameFromContext: expectedName, + }, + }); + } +}); diff --git a/yarn.lock b/yarn.lock index 5913de87556..776370b0436 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1605,6 +1605,11 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.52.0.tgz#78fe5f117840f69dc4a353adf9b9cd926353378c" integrity sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA== +"@fastify/deepmerge@^1.0.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@fastify/deepmerge/-/deepmerge-1.3.0.tgz#8116858108f0c7d9fd460d05a7d637a13fe3239a" + integrity sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A== + "@giscus/react@2.3.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@giscus/react/-/react-2.3.0.tgz#1c13f2f96bb67684d4f5288dc1ed3155ff307ce4" @@ -1755,7 +1760,7 @@ tslib "^2.4.0" value-or-promise "^1.0.12" -"@graphql-typed-document-node/core@3.2.0", "@graphql-typed-document-node/core@^3.1.0", "@graphql-typed-document-node/core@^3.1.1": +"@graphql-typed-document-node/core@3.2.0", "@graphql-typed-document-node/core@^3.1.0", "@graphql-typed-document-node/core@^3.1.1", "@graphql-typed-document-node/core@^3.2.0": version "3.2.0" resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861" integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== @@ -3339,6 +3344,13 @@ agentkeepalive@^4.1.4: dependencies: humanize-ms "^1.2.1" +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" @@ -3354,6 +3366,16 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^8.0.0, ajv@^8.10.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + algoliasearch@4.19.1, algoliasearch@^4.14.3: version "4.19.1" resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.19.1.tgz#18111fb422eaf841737adb92d5ab12133d244218" @@ -6210,6 +6232,19 @@ fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-sta resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== +fast-json-stringify@^5.7.0: + version "5.9.0" + resolved "https://registry.yarnpkg.com/fast-json-stringify/-/fast-json-stringify-5.9.0.tgz#fdf029f72e2548a55aca87ed8b238364a8619f59" + integrity sha512-hXu5mchOrV7r1wzY2na0VEJZbb2gUAv5Mrlnq1QvdhZHt8k3pYnwZ6YEVbasbvPc1Ki+FyeTRJW8yDN9jN40yQ== + dependencies: + "@fastify/deepmerge" "^1.0.0" + ajv "^8.10.0" + ajv-formats "^2.1.1" + fast-deep-equal "^3.1.3" + fast-uri "^2.1.0" + json-schema-ref-resolver "^1.0.1" + rfdc "^1.2.0" + fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" @@ -6222,6 +6257,11 @@ fast-querystring@^1.1.1: dependencies: fast-decode-uri-component "^1.0.1" +fast-uri@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-2.3.0.tgz#bdae493942483d299e7285dcb4627767d42e2793" + integrity sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw== + fast-url-parser@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" @@ -6472,6 +6512,13 @@ fuzzy@^0.1.3: resolved "https://registry.yarnpkg.com/fuzzy/-/fuzzy-0.1.3.tgz#4c76ec2ff0ac1a36a9dccf9a00df8623078d4ed8" integrity sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w== +generate-function@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" + integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== + dependencies: + is-property "^1.0.2" + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -6676,6 +6723,18 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +graphql-jit@0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/graphql-jit/-/graphql-jit-0.8.4.tgz#53c2e43b90ec98ea0942f4062516de910fbff709" + integrity sha512-4KRrJ1ROy3Usgbl3eAoUMfdfZCRjkcw9cCGT7QwTUIHm9dPGaSaldxzGUttyjErU0rsYEb6WWyb6mMh5r6lEoQ== + dependencies: + "@graphql-typed-document-node/core" "^3.2.0" + fast-json-stringify "^5.7.0" + generate-function "^2.3.1" + lodash.memoize "^4.1.2" + lodash.merge "4.6.2" + lodash.mergewith "4.6.2" + graphql-subscriptions@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-2.0.0.tgz#11ec181d475852d8aec879183e8e1eb94f2eb79a" @@ -7464,6 +7523,11 @@ is-potential-custom-element-name@^1.0.1: resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== +is-property@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g== + is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" @@ -8184,11 +8248,23 @@ json-parse-even-better-errors@^2.3.0: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +json-schema-ref-resolver@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz#6586f483b76254784fc1d2120f717bdc9f0a99bf" + integrity sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw== + dependencies: + fast-deep-equal "^3.1.3" + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" @@ -8453,11 +8529,16 @@ lodash.memoize@4.x, lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== -lodash.merge@^4.6.2: +lodash.merge@4.6.2, lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.mergewith@4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" + integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -11165,6 +11246,11 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -11251,7 +11337,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rfdc@^1.3.0: +rfdc@^1.2.0, rfdc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== From d708976735acc9ac14143585ea537a45dc366377 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 3 Nov 2023 09:00:22 +0100 Subject: [PATCH 06/10] chore(release): update monorepo packages versions (#2466) Co-authored-by: github-actions[bot] --- .changeset/tidy-masks-reply.md | 5 ----- packages/graphql-modules/CHANGELOG.md | 6 ++++++ packages/graphql-modules/package.json | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 .changeset/tidy-masks-reply.md diff --git a/.changeset/tidy-masks-reply.md b/.changeset/tidy-masks-reply.md deleted file mode 100644 index 74fc9e01c9f..00000000000 --- a/.changeset/tidy-masks-reply.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'graphql-modules': minor ---- - -Support graphql-jit diff --git a/packages/graphql-modules/CHANGELOG.md b/packages/graphql-modules/CHANGELOG.md index 4ad603c7db8..3fefda6e0e5 100644 --- a/packages/graphql-modules/CHANGELOG.md +++ b/packages/graphql-modules/CHANGELOG.md @@ -1,5 +1,11 @@ # graphql-modules +## 2.3.0 + +### Minor Changes + +- [#2465](https://github.com/Urigo/graphql-modules/pull/2465) [`72403485`](https://github.com/Urigo/graphql-modules/commit/724034855db747d456110156758cb4b8cad26cc1) Thanks [@kamilkisiela](https://github.com/kamilkisiela)! - Support graphql-jit + ## 2.2.1 ### Patch Changes diff --git a/packages/graphql-modules/package.json b/packages/graphql-modules/package.json index 0250890ed1b..ec90c38c915 100644 --- a/packages/graphql-modules/package.json +++ b/packages/graphql-modules/package.json @@ -8,7 +8,7 @@ "typescript", "the-guild" ], - "version": "2.2.1", + "version": "2.3.0", "author": "Kamil Kisiela", "license": "MIT", "sideEffects": false, From 3744cedfd7fdf97a6505909eacdc2758ed65ec19 Mon Sep 17 00:00:00 2001 From: Arda TANRIKULU Date: Tue, 10 Oct 2023 18:26:52 +0300 Subject: [PATCH 07/10] Introduce Apollo v4 support & Drop Apollo v2/v3 and Node 16 support --- .changeset/dull-camels-grow.md | 5 + .changeset/heavy-owls-look.md | 17 + .github/workflows/tests.yml | 4 +- benchmark/basic.case.ts | 50 +- .../apollo-subscriptions/src/app/index.ts | 7 +- examples/apollo-subscriptions/src/index.ts | 39 +- .../src/index.ts | 33 +- examples/basic/src/index.ts | 32 +- examples/graphql-yoga/src/app/post/pubsub.ts | 4 +- examples/graphql-yoga/src/index.ts | 9 +- package.json | 9 +- packages/graphql-modules/package.json | 1 - .../graphql-modules/src/application/apollo.ts | 157 ++--- .../src/application/application.ts | 12 +- .../graphql-modules/src/application/types.ts | 13 +- .../src/testing/test-application.ts | 7 +- .../tests/di-providers.spec.ts | 96 --- .../graphql-modules/tests/federation.spec.ts | 2 +- .../tests/third-parties.spec.ts | 35 +- .../src/pages/docs/advanced/subscriptions.mdx | 166 +++-- website/src/pages/docs/api.mdx | 2 +- website/src/pages/docs/get-started.mdx | 84 ++- yarn.lock | 565 +++++++++--------- 23 files changed, 619 insertions(+), 730 deletions(-) create mode 100644 .changeset/dull-camels-grow.md create mode 100644 .changeset/heavy-owls-look.md diff --git a/.changeset/dull-camels-grow.md b/.changeset/dull-camels-grow.md new file mode 100644 index 00000000000..7ea1bf3040b --- /dev/null +++ b/.changeset/dull-camels-grow.md @@ -0,0 +1,5 @@ +--- +'graphql-modules': minor +--- + +Introduce `createApolloGateway` for Apollo Server v4 diff --git a/.changeset/heavy-owls-look.md b/.changeset/heavy-owls-look.md new file mode 100644 index 00000000000..a9ebe532a27 --- /dev/null +++ b/.changeset/heavy-owls-look.md @@ -0,0 +1,17 @@ +--- +'graphql-modules': major +--- + +Drop Node 16 and Apollo v2 and v3 support + +`createApolloExecutor` and `createSchemaForApollo` have been removed in favor of `createApolloGateway`. + +You can create `gateway` instance for Apollo Server v4 like this, and pass it directly to `ApolloServer` constructor. You don't need to pass `schema` or `executor` anymore. + +```ts +const gateway = application.createApolloGateway() + +const apolloServer = new ApolloServer({ + gateway +}) +``` diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index c195154ad3f..69fe76b0a7b 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -39,7 +39,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] # remove windows to speed up the tests - node-version: [12, 16, 18] + node-version: [18, 20] graphql_version: - 15 - 16 @@ -49,7 +49,7 @@ jobs: - name: Setup env uses: the-guild-org/shared-config/setup@main with: - nodeVersion: 18 + nodeVersion: 20 - name: Use GraphQL v${{matrix.graphql_version}} run: node ./scripts/match-graphql.js ${{matrix.graphql_version}} - name: Cache Jest diff --git a/benchmark/basic.case.ts b/benchmark/basic.case.ts index 8cc1ad09aa9..9b1527c76da 100644 --- a/benchmark/basic.case.ts +++ b/benchmark/basic.case.ts @@ -96,30 +96,36 @@ let showedError = false; const executeAppWithDI = appWithDI.createExecution(); const executeApp = app.createExecution(); -const apolloWithDIExecutor = appWithDI.createApolloExecutor(); +const apolloGWWithDI = appWithDI.createApolloGateway(); +const apolloGWWithDILoadResult$ = apolloGWWithDI.load(); const executeApolloWithDI = (args: ExecutionArgs) => { - return apolloWithDIExecutor({ - schema: args.schema, - document: args.document, - operationName: args.operationName, - context: args.contextValue, - request: { - variables: args.variableValues, - }, - }); + return apolloGWWithDILoadResult$.then(({ executor }) => + executor({ + schema: args.schema, + document: args.document, + operationName: args.operationName, + context: args.contextValue, + request: { + variables: args.variableValues, + }, + }) + ); }; -const apolloExecutor = app.createApolloExecutor(); +const apolloGW = app.createApolloGateway(); +const apolloGWLoadResult$ = apolloGW.load(); const executeApollo = (args: ExecutionArgs) => { - return apolloExecutor({ - schema: args.schema, - document: args.document, - operationName: args.operationName, - context: args.contextValue, - request: { - variables: args.variableValues, - }, - }); + return apolloGWLoadResult$.then(({ executor }) => + executor({ + schema: args.schema, + document: args.document, + operationName: args.operationName, + context: args.contextValue, + request: { + variables: args.variableValues, + }, + }) + ); }; const query = parse(/* GraphQL */ ` @@ -162,11 +168,11 @@ const suites: Record = { }, 'apollo-with-id': { name: 'ApolloServer (DI)', - runner: () => graphql(appWithDI.schema, executeApolloWithDI as any), + runner: () => graphql(appWithDI.schema, executeApolloWithDI), }, apollo: { name: 'ApolloServer', - runner: () => graphql(app.schema, executeApollo as any), + runner: () => graphql(app.schema, executeApollo), }, }; diff --git a/examples/apollo-subscriptions/src/app/index.ts b/examples/apollo-subscriptions/src/app/index.ts index 24d9ed5a3a9..d221147a878 100644 --- a/examples/apollo-subscriptions/src/app/index.ts +++ b/examples/apollo-subscriptions/src/app/index.ts @@ -4,5 +4,10 @@ import { PostModule } from './post/post.module'; export const graphqlApplication = createApplication({ modules: [PostModule], - providers: [PubSub], + providers: [ + { + provide: PubSub, + useValue: new PubSub(), + }, + ], }); diff --git a/examples/apollo-subscriptions/src/index.ts b/examples/apollo-subscriptions/src/index.ts index 0f7da36016e..a94614e3318 100644 --- a/examples/apollo-subscriptions/src/index.ts +++ b/examples/apollo-subscriptions/src/index.ts @@ -1,24 +1,26 @@ import 'reflect-metadata'; import express from 'express'; import { createServer } from 'http'; -import { ApolloServer } from 'apollo-server-express'; -import { ApolloServerPluginDrainHttpServer } from 'apollo-server-core'; +import { ApolloServer } from '@apollo/server'; +import { expressMiddleware } from '@apollo/server/express4'; +import { ApolloServerPluginDrainHttpServer } from '@apollo/server/plugin/drainHttpServer'; import { graphqlApplication } from './app'; import { WebSocketServer } from 'ws'; import { useServer } from 'graphql-ws/lib/use/ws'; +import bodyParser from 'body-parser'; +import cors from 'cors'; -const { schema, createExecution, createSubscription, createApolloExecutor } = +const { schema, createExecution, createSubscription, createApolloGateway } = graphqlApplication; -const executor = createApolloExecutor(); +const gateway = createApolloGateway(); const app = express(); const httpServer = createServer(app); // Creating the WebSocket subscription server const server = new ApolloServer({ - schema, - executor, + gateway, plugins: [ // Proper shutdown for the HTTP server. ApolloServerPluginDrainHttpServer({ httpServer }), @@ -35,11 +37,9 @@ const server = new ApolloServer({ ], }); -server.applyMiddleware({ app }); - const wsServer = new WebSocketServer({ server: httpServer, - path: server.graphqlPath, + path: '/graphql', }); const execute = createExecution(); @@ -49,7 +49,24 @@ const subscribe = createSubscription(); // telling the WebSocketServer to start listening const serverCleanup = useServer({ schema, execute, subscribe }, wsServer); -httpServer.listen({ port: 4000 }, () => { +async function main() { + await server.start(); + + app.use( + '/graphql', + cors(), + bodyParser.json(), + expressMiddleware(server) + ); + + httpServer.listen({ port: 4000 }, () => { + // tslint:disable-next-line: no-console + console.info(`🚀 Server ready at http://localhost:4000/graphql`); + }); +} + +main().catch((error) => { // tslint:disable-next-line: no-console - console.info(`🚀 Server ready at http://localhost:4000${server.graphqlPath}`); + console.error(error); + process.exit(1); }); diff --git a/examples/basic-with-dependency-injection/src/index.ts b/examples/basic-with-dependency-injection/src/index.ts index 6ebd024b965..98b98af9b32 100644 --- a/examples/basic-with-dependency-injection/src/index.ts +++ b/examples/basic-with-dependency-injection/src/index.ts @@ -2,26 +2,27 @@ import 'reflect-metadata'; import { createApplication } from 'graphql-modules'; import { BlogModule } from './modules/blog'; import { UserModule } from './modules/user'; -import express from 'express'; -import { graphqlHTTP } from 'express-graphql'; +import http from 'http'; +import { createHandler } from 'graphql-http/lib/use/http'; const app = createApplication({ modules: [BlogModule, UserModule], }); -const server = express(); - -const execute = app.createExecution(); - -server.use( - '/graphql', - graphqlHTTP({ - schema: app.schema, - customExecuteFn: execute as any, - graphiql: true, - }) -); +// Create the GraphQL over HTTP Node request handler +const handler = createHandler({ + schema: app.schema, + execute: app.createExecution(), +}); -server.listen(4000, () => { - console.log('Live http://localhost:4000/graphql'); +// Create a HTTP server using the listener on `/graphql` +const server = http.createServer((req, res) => { + if (req.url?.startsWith('/graphql')) { + handler(req, res); + } else { + res.writeHead(404).end(); + } }); + +server.listen(4000); +console.log('Listening to port 4000'); diff --git a/examples/basic/src/index.ts b/examples/basic/src/index.ts index 002e1a38c53..7c7f647e1f1 100644 --- a/examples/basic/src/index.ts +++ b/examples/basic/src/index.ts @@ -8,28 +8,30 @@ declare global { import 'reflect-metadata'; import { createApplication } from 'graphql-modules'; -import express from 'express'; -import { graphqlHTTP } from 'express-graphql'; +import http from 'http'; +import { createHandler } from 'graphql-http/lib/use/http'; import { UserModule } from './app/user/user.module'; import { AuthModule } from './app/auth/auth.module'; import { SocialNetworkModule } from './app/social-network/social-network.module'; -const server = express(); const app = createApplication({ modules: [UserModule, AuthModule, SocialNetworkModule], }); -const execute = app.createExecution(); -server.use( - '/graphql', - graphqlHTTP((request: any) => ({ - schema: app.schema, - graphiql: true, - customExecuteFn: execute as any, - context: { request }, - })) -); +// Create the GraphQL over HTTP Node request handler +const handler = createHandler({ + schema: app.schema, + execute: app.createExecution(), +}); -server.listen(4000, () => { - console.log('Live http://localhost:4000/graphql'); +// Create a HTTP server using the listener on `/graphql` +const server = http.createServer((req, res) => { + if (req.url?.startsWith('/graphql')) { + handler(req, res); + } else { + res.writeHead(404).end(); + } }); + +server.listen(4000); +console.log('Listening to port 4000'); diff --git a/examples/graphql-yoga/src/app/post/pubsub.ts b/examples/graphql-yoga/src/app/post/pubsub.ts index 2af0e2d3f58..7432235f8ce 100644 --- a/examples/graphql-yoga/src/app/post/pubsub.ts +++ b/examples/graphql-yoga/src/app/post/pubsub.ts @@ -1,12 +1,12 @@ import { InjectionToken, FactoryProvider, Scope } from 'graphql-modules'; -import { createPubSub, PubSub as TPubSub } from '@graphql-yoga/node'; +import { createPubSub, PubSub as TPubSub } from 'graphql-yoga'; import { Post } from './types'; type PubSub = TPubSub<{ POST_ADDED: [ { postAdded: Post; - } + }, ]; }>; diff --git a/examples/graphql-yoga/src/index.ts b/examples/graphql-yoga/src/index.ts index 7430dbe225b..ed89a0567c4 100644 --- a/examples/graphql-yoga/src/index.ts +++ b/examples/graphql-yoga/src/index.ts @@ -1,13 +1,16 @@ import 'reflect-metadata'; -import { createServer } from '@graphql-yoga/node'; +import { createServer } from 'http'; +import { createYoga } from 'graphql-yoga'; import { useGraphQLModules } from '@envelop/graphql-modules'; import { app } from './app'; -const server = createServer({ +const yoga = createYoga({ plugins: [useGraphQLModules(app)], }); -server.start().then(() => { +const server = createServer(yoga); + +server.listen(4000, () => { // tslint:disable-next-line: no-console console.info(`🚀 Server ready at http://localhost:4000/graphql`); }); diff --git a/package.json b/package.json index 1fd561e5899..213c73c29e7 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,8 @@ "deploy-website": "cd website && yarn && yarn build && mkdir graphql-modules && mv build/* graphql-modules && mv graphql-modules build" }, "devDependencies": { - "@apollo/federation": "0.38.1", + "@apollo/subgraph": "2.5.5", + "@apollo/server": "4.9.4", "@babel/core": "7.23.2", "@babel/preset-env": "7.23.2", "@babel/preset-typescript": "7.23.2", @@ -34,10 +35,10 @@ "@changesets/changelog-github": "0.4.8", "@envelop/graphql-modules": "5.0.3", "@graphql-tools/merge": "9.0.0", - "@graphql-yoga/node": "3.9.1", "@types/benchmark": "2.1.4", "graphql-jit": "0.8.4", "@types/express": "4.17.20", + "@types/cors": "2.8.14", "@types/jest": "27.5.2", "@types/node": "18.18.7", "@types/ramda": "0.29.7", @@ -53,14 +54,16 @@ "babel-jest": "29.7.0", "bob-the-bundler": "1.7.3", "chalk": "4.1.2", + "cors": "2.8.5", "dataloader": "2.2.2", "eslint": "8.52.0", "express": "4.18.2", - "express-graphql": "0.12.0", + "graphql-http": "1.22.0", "globby": "11.1.0", "graphql": "16.8.1", "graphql-subscriptions": "2.0.0", "graphql-ws": "5.14.2", + "graphql-yoga": "4.0.5", "husky": "8.0.3", "jest": "27.5.1", "lint-staged": "14.0.1", diff --git a/packages/graphql-modules/package.json b/packages/graphql-modules/package.json index ec90c38c915..bc5ace6341a 100644 --- a/packages/graphql-modules/package.json +++ b/packages/graphql-modules/package.json @@ -38,7 +38,6 @@ }, "dependencies": { "@graphql-tools/schema": "^10.0.0", - "@graphql-tools/wrap": "^10.0.0", "@graphql-typed-document-node/core": "^3.1.0", "ramda": "^0.29.0" }, diff --git a/packages/graphql-modules/src/application/apollo.ts b/packages/graphql-modules/src/application/apollo.ts index 6f51654dfa1..cb5cd6bad65 100644 --- a/packages/graphql-modules/src/application/apollo.ts +++ b/packages/graphql-modules/src/application/apollo.ts @@ -1,12 +1,12 @@ -import { wrapSchema } from '@graphql-tools/wrap'; -import { DocumentNode, execute, GraphQLSchema } from 'graphql'; -import { uniqueId } from '../shared/utils'; -import { InternalAppContext } from './application'; -import { ExecutionContextBuilder } from './context'; +import { + DocumentNode, + ExecutionResult, + GraphQLSchema, + concatAST, + print, +} from 'graphql'; import { Application } from './types'; -const CONTEXT_ID = Symbol.for('context-id'); - export interface ApolloRequestContext { document: DocumentNode; operationName?: string | null; @@ -17,109 +17,58 @@ export interface ApolloRequestContext { }; } -export function apolloExecutorCreator({ - createExecution, -}: { - createExecution: Application['createExecution']; -}): Application['createApolloExecutor'] { - return function createApolloExecutor(options) { - const executor = createExecution(options); - return async function executorAdapter( - requestContext: ApolloRequestContext - ) { - return executor({ - schema: requestContext.schema, - document: requestContext.document, - operationName: requestContext.operationName, - variableValues: requestContext.request.variables, - contextValue: requestContext.context, - }); - }; - }; +export interface ApolloGatewayLoadResult { + executor: ApolloExecutor; } -export function apolloSchemaCreator({ - createSubscription, - contextBuilder, - schema, -}: { - createSubscription: Application['createSubscription']; - contextBuilder: ExecutionContextBuilder; - schema: GraphQLSchema; -}) { - const createApolloSchema = () => { - const sessions: Record< - string, - { - count: number; - session: { - destroy(): void; - context: InternalAppContext; - }; - } - > = {}; - const subscription = createSubscription(); +export type ApolloExecutor = ( + requestContext: ApolloRequestContext +) => Promise; - function getSession(ctx: any) { - if (!ctx[CONTEXT_ID]) { - ctx[CONTEXT_ID] = uniqueId((id) => !sessions[id]); - const { context, ɵdestroy: destroy } = contextBuilder(ctx); +export interface ApolloGatewayInterface { + onSchemaLoadOrUpdate( + callback: (schemaContext: { + apiSchema: GraphQLSchema; + coreSupergraphSdl: string; + }) => void + ): () => void; + load(): Promise; + stop(): Promise; +} - sessions[ctx[CONTEXT_ID]] = { - count: 0, - session: { - context, - destroy() { - if (--sessions[ctx[CONTEXT_ID]].count === 0) { - destroy(); - delete sessions[ctx[CONTEXT_ID]]; - delete ctx[CONTEXT_ID]; - } - }, +export function apolloGatewayCreator({ + schema, + typeDefs, + createExecution, +}: { + schema: Application['schema']; + typeDefs: Application['typeDefs']; + createExecution: Application['createExecution']; +}): Application['createApolloGateway'] { + return function createApolloGateway(options) { + const executor = createExecution(options); + return { + onSchemaLoadOrUpdate(callback) { + callback({ + apiSchema: schema, + coreSupergraphSdl: print(concatAST(typeDefs)), + }); + return () => {}; + }, + async load() { + return { + async executor(requestContext: ApolloRequestContext) { + return executor({ + schema: requestContext.schema, + document: requestContext.document, + operationName: requestContext.operationName, + variableValues: requestContext.request.variables, + contextValue: requestContext.context, + }); }, }; - } - - sessions[ctx[CONTEXT_ID]].count++; - - return sessions[ctx[CONTEXT_ID]].session; - } - - return wrapSchema({ - schema, - batch: true, - executor(input) { - if (input.operationType === 'subscription') { - return subscription({ - schema, - document: input.document, - variableValues: input.variables as any, - contextValue: input.context, - rootValue: input.rootValue, - operationName: input.operationName, - }); - } - // Create an execution context - const { context, destroy } = getSession(input.context!); - - // It's important to wrap the executeFn within a promise - // so we can easily control the end of execution (with finally) - return Promise.resolve() - .then( - () => - execute({ - schema, - document: input.document, - contextValue: context, - variableValues: input.variables as any, - rootValue: input.rootValue, - operationName: input.operationName, - }) as any - ) - .finally(destroy); }, - }); + async stop() {}, + }; }; - - return createApolloSchema; } diff --git a/packages/graphql-modules/src/application/application.ts b/packages/graphql-modules/src/application/application.ts index f5d7fb25be4..4b55204a5fa 100644 --- a/packages/graphql-modules/src/application/application.ts +++ b/packages/graphql-modules/src/application/application.ts @@ -21,7 +21,7 @@ import { import { createContextBuilder } from './context'; import { executionCreator } from './execution'; import { subscriptionCreator } from './subscription'; -import { apolloSchemaCreator, apolloExecutorCreator } from './apollo'; +import { apolloGatewayCreator } from './apollo'; import { operationControllerCreator } from './operation-controller'; import { Module } from '../module/types'; @@ -132,12 +132,9 @@ export function createApplication( }); const createSubscription = subscriptionCreator({ contextBuilder }); const createExecution = executionCreator({ contextBuilder }); - const createSchemaForApollo = apolloSchemaCreator({ - createSubscription, - contextBuilder, + const createApolloGateway = apolloGatewayCreator({ schema, - }); - const createApolloExecutor = apolloExecutorCreator({ + typeDefs, createExecution, }); @@ -154,8 +151,7 @@ export function createApplication( createOperationController, createSubscription, createExecution, - createSchemaForApollo, - createApolloExecutor, + createApolloGateway, ɵfactory: applicationFactory, ɵconfig: config, }; diff --git a/packages/graphql-modules/src/application/types.ts b/packages/graphql-modules/src/application/types.ts index 18191b42d52..4e00fb0919c 100644 --- a/packages/graphql-modules/src/application/types.ts +++ b/packages/graphql-modules/src/application/types.ts @@ -8,7 +8,7 @@ import { import type { Provider, Injector } from '../di'; import type { Resolvers, Module, MockedModule } from '../module/types'; import type { MiddlewareMap } from '../shared/middleware'; -import type { ApolloRequestContext } from './apollo'; +import type { ApolloGatewayInterface, ApolloRequestContext } from './apollo'; import type { Single } from '../shared/types'; import type { InternalAppContext } from './application'; @@ -67,16 +67,9 @@ export interface Application { execute?: typeof execute; controller?: OperationController; }): Execution; - /** - * @deprecated Use `createApolloExecutor`, `createExecution` and `createSubscription` methods instead. - */ - createSchemaForApollo(): GraphQLSchema; - /** - * Experimental - */ - createApolloExecutor(options?: { + createApolloGateway(options?: { controller?: OperationController; - }): ApolloExecutor; + }): ApolloGatewayInterface; /** * @internal */ diff --git a/packages/graphql-modules/src/testing/test-application.ts b/packages/graphql-modules/src/testing/test-application.ts index 2face6b984d..4d832498a08 100644 --- a/packages/graphql-modules/src/testing/test-application.ts +++ b/packages/graphql-modules/src/testing/test-application.ts @@ -33,11 +33,8 @@ export function mockApplication(app: Application): MockedApplication { createExecution(options) { return sharedFactory().createExecution(options); }, - createSchemaForApollo() { - return sharedFactory().createSchemaForApollo(); - }, - createApolloExecutor() { - return sharedFactory().createApolloExecutor(); + createApolloGateway() { + return sharedFactory().createApolloGateway(); }, get ɵfactory() { return sharedFactory().ɵfactory; diff --git a/packages/graphql-modules/tests/di-providers.spec.ts b/packages/graphql-modules/tests/di-providers.spec.ts index a9942ab3b6b..feb91d2f9ef 100644 --- a/packages/graphql-modules/tests/di-providers.spec.ts +++ b/packages/graphql-modules/tests/di-providers.spec.ts @@ -11,7 +11,6 @@ import { gql, testkit, } from '../src'; -import { execute } from 'graphql'; import { ExecutionContext } from '../src/di'; const Test = new InjectionToken('test'); @@ -542,101 +541,6 @@ test('Operation scoped provider should be created once per GraphQL Operation', a expect(loadSpy).toHaveBeenCalledWith(1); }); -test('Operation scoped provider should be created once per GraphQL Operation (Apollo Server)', async () => { - const constructorSpy = jest.fn(); - const loadSpy = jest.fn(); - - @Injectable({ - scope: Scope.Operation, - }) - class Dataloader { - constructor(@Inject(CONTEXT) context: GraphQLModulesGlobalContext) { - constructorSpy(context); - } - - load(id: number) { - loadSpy(id); - return { - id, - title: 'Sample Title', - }; - } - } - - const postsModule = createModule({ - id: 'posts', - providers: [Dataloader], - typeDefs: gql` - type Post { - id: Int! - title: String! - } - - type Query { - post(id: Int!): Post! - } - `, - resolvers: { - Query: { - post( - _parent: {}, - args: { id: number }, - { injector }: GraphQLModulesModuleContext - ) { - return injector.get(Dataloader).load(args.id); - }, - }, - }, - }); - - const app = createApplication({ - modules: [postsModule], - }); - - const schema = app.createSchemaForApollo(); - - const contextValue = { request: {}, response: {} }; - const document = gql` - { - foo: post(id: 1) { - id - title - } - bar: post(id: 1) { - id - title - } - } - `; - - const result = await execute({ - schema, - contextValue, - document, - }); - - // Should resolve data correctly - expect(result.errors).toBeUndefined(); - expect(result.data).toEqual({ - foo: { - id: 1, - title: 'Sample Title', - }, - bar: { - id: 1, - title: 'Sample Title', - }, - }); - - expect(constructorSpy).toHaveBeenCalledTimes(1); - expect(constructorSpy).toHaveBeenCalledWith( - expect.objectContaining(contextValue) - ); - - expect(loadSpy).toHaveBeenCalledTimes(2); - expect(loadSpy).toHaveBeenCalledWith(1); -}); - test('Singleton scoped provider should be created once', async () => { const constructorSpy = jest.fn(); diff --git a/packages/graphql-modules/tests/federation.spec.ts b/packages/graphql-modules/tests/federation.spec.ts index f3b937ca2b7..d2100f65ac6 100644 --- a/packages/graphql-modules/tests/federation.spec.ts +++ b/packages/graphql-modules/tests/federation.spec.ts @@ -14,7 +14,7 @@ describe('federation', () => { const { buildSubgraphSchema, - }: typeof import('@apollo/federation') = require('@apollo/federation'); + }: typeof import('@apollo/subgraph') = require('@apollo/subgraph'); test('allow __resolveReference', async () => { const mod = createModule({ diff --git a/packages/graphql-modules/tests/third-parties.spec.ts b/packages/graphql-modules/tests/third-parties.spec.ts index a2921413277..8db88f9960c 100644 --- a/packages/graphql-modules/tests/third-parties.spec.ts +++ b/packages/graphql-modules/tests/third-parties.spec.ts @@ -6,7 +6,7 @@ import { Injectable, Scope, } from '../src'; -import { ApolloServer } from 'apollo-server-express'; +import { ApolloServer } from '@apollo/server'; describe('Apollo Server', () => { test('cacheControl available in info object', async () => { @@ -31,9 +31,7 @@ describe('Apollo Server', () => { modules: [mod], }); const apollo = new ApolloServer({ - typeDefs: app.typeDefs, - resolvers: app.resolvers, - executor: app.createApolloExecutor(), + gateway: app.createApolloGateway(), }); const response = await apollo.executeOperation({ @@ -45,8 +43,10 @@ describe('Apollo Server', () => { operationName: 'foo', }); - expect(response.errors).toBeUndefined(); - expect(response.data?.foo).toBe(true); + assertResponseType(response.body, 'single'); + + expect(response.body.singleResult.errors).toBeUndefined(); + expect(response.body.singleResult.data?.foo).toBe(true); expect(spy).toHaveBeenCalledWith( expect.objectContaining({ setCacheHint: expect.any(Function), @@ -54,7 +54,7 @@ describe('Apollo Server', () => { ); }); - test('createApolloExecutor should instantiate operation-scoped provider once per many fields', async () => { + test('createApolloGateway should instantiate operation-scoped provider once per many fields', async () => { const constructor = jest.fn(); const log = jest.fn(); @@ -115,12 +115,10 @@ describe('Apollo Server', () => { }); const apollo = new ApolloServer({ - typeDefs: app.typeDefs, - resolvers: app.resolvers, - executor: app.createApolloExecutor(), + gateway: app.createApolloGateway(), }); - const result = await apollo.executeOperation({ + const response = await apollo.executeOperation({ query: /* GraphQL */ ` mutation m { m1 @@ -130,8 +128,10 @@ describe('Apollo Server', () => { operationName: 'm', }); - expect(result.errors).toBeUndefined(); - expect(result.data).toEqual({ + assertResponseType(response.body, 'single'); + + expect(response.body.singleResult.errors).toBeUndefined(); + expect(response.body.singleResult.data).toEqual({ m1: 'm1', m2: 'm2', }); @@ -140,3 +140,12 @@ describe('Apollo Server', () => { expect(log).toBeCalledTimes(2); }); }); + +export function assertResponseType( + received: { kind: string }, + kind: T +): asserts received is { kind: T } { + if (received.kind !== kind) { + throw new Error(`Expected ${received.kind} to be ${kind}`); + } +} diff --git a/website/src/pages/docs/advanced/subscriptions.mdx b/website/src/pages/docs/advanced/subscriptions.mdx index aec9d4e903b..aaec54d0d09 100644 --- a/website/src/pages/docs/advanced/subscriptions.mdx +++ b/website/src/pages/docs/advanced/subscriptions.mdx @@ -133,20 +133,23 @@ export const myModule = createModule({ Here are reference implementations of using GraphQL Subscriptions with WebSockets in both, Apollo Server and Express GraphQL. - - + + ```ts filename="server.ts" import 'reflect-metadata' -import { createServer } from '@graphql-yoga/node' +import { createServer } from 'http' +import { createYoga } from 'graphql-yoga' import { useGraphQLModules } from '@envelop/graphql-modules' import { application } from './application' -const server = createServer({ +const yoga = createYoga({ plugins: [useGraphQLModules(application)] }) -server.start().then(() => { - console.log(`🚀 Server ready`) +const server = createServer(yoga) + +server.listen(4000, () => { + console.log(`🚀 Server ready at http://localhost:4000/graphql`) }) ``` @@ -160,107 +163,74 @@ server.start().then(() => { ```ts filename="server.ts" -import 'reflect-metadata' -import express from 'express' -import { createServer } from 'node:http' -import { SubscriptionServer } from 'subscriptions-transport-ws' -import { ApolloServer } from 'apollo-server-express' -import { application } from './application' - -const schema = application.createSchemaForApollo() - -const { schema, createExecution, createSubscription, createApolloExecutor } = - application -const execute = createExecution() -const subscribe = createSubscription() - -;(async function () { - const app = express() - - const httpServer = createServer(app) - - let subscriptionServer - const server = new ApolloServer({ - schema, - executor: createApolloExecutor(), - plugins: [ - { - serverWillStart() { - return { - drainServer() { - subscriptionServer.close() - } - } - } - } - ] - }) - - subscriptionServer = SubscriptionServer.create( +import 'reflect-metadata'; +import express from 'express'; +import { createServer } from 'http'; +import { ApolloServer } from '@apollo/server'; +import { expressMiddleware } from '@apollo/server/express4'; +import { ApolloServerPluginDrainHttpServer } from '@apollo/server/plugin/drainHttpServer'; +import { graphqlApplication } from './app'; +import { WebSocketServer } from 'ws'; +import { useServer } from 'graphql-ws/lib/use/ws'; +import bodyParser from 'body-parser'; +import cors from 'cors'; + +const { schema, createExecution, createSubscription, createApolloGateway } = + graphqlApplication; + +const gateway = createApolloGateway(); + +const app = express(); +const httpServer = createServer(app); +// Creating the WebSocket subscription server + +const server = new ApolloServer({ + gateway, + plugins: [ + // Proper shutdown for the HTTP server. + ApolloServerPluginDrainHttpServer({ httpServer }), + // Proper shutdown for the WebSocket server. { - schema, - execute, - subscribe + async serverWillStart() { + return { + async drainServer() { + await serverCleanup.dispose(); + }, + }; + }, }, - { - server: httpServer, - path: server.graphqlPath - } - ) + ], +}); - await server.start() - server.applyMiddleware({ app }) - - const PORT = 4000 - httpServer.listen(PORT, () => - console.log(`Server is now running on http://localhost:${PORT}/graphql`) - ) -})() -``` - +const wsServer = new WebSocketServer({ + server: httpServer, + path: '/graphql', +}); - -```ts filename="server.ts" -import 'reflect-metadata' -import express from 'express' -import graphqlHTTP from 'express-graphql' -import { createServer } from 'node:http' -import { SubscriptionServer } from 'subscriptions-transport-ws' -import { application } from './application' +const execute = createExecution(); +const subscribe = createSubscription(); -const execute = application.createExecution() -const subscribe = application.createSubscription() -const { schema } = application +// Passing in an instance of a GraphQLSchema and +// telling the WebSocketServer to start listening +const serverCleanup = useServer({ schema, execute, subscribe }, wsServer); -const server = express() +async function main() { + await server.start(); -server.use( - '/', - graphqlHTTP({ - schema, - customExecuteFn: execute, - graphiql: true - }) -) + app.use('/graphql', cors(), bodyParser.json(), expressMiddleware(server)); -const webServer = createServer(app) -webServer.listen(4000, () => { - console.log('🚀 Server ready at http://localhost:4000') + httpServer.listen({ port: 4000 }, () => { + // tslint:disable-next-line: no-console + console.info(`🚀 Server ready at http://localhost:4000/graphql`); + }); +} - new SubscriptionServer( - { - execute, - subscribe, - schema - }, - { - server: webServer, - path: '/' - } - ) -}) +main().catch((error) => { + // tslint:disable-next-line: no-console + console.error(error); + process.exit(1); +}); ``` - - + diff --git a/website/src/pages/docs/api.mdx b/website/src/pages/docs/api.mdx index 38695630613..29abe8f3b09 100644 --- a/website/src/pages/docs/api.mdx +++ b/website/src/pages/docs/api.mdx @@ -47,7 +47,7 @@ A return type of `createApplication` function. Important when using GraphQL Subscriptions. - `createExecution` - Creates a `execute` function that runs the execution phase of GraphQL. Important when using GraphQL Queries and Mutations. -- `createApolloExecutor` - Creates an `executor` for `ApolloServer` +- `createApolloGateway` - Creates a `gateway` for `ApolloServer` ## `ApplicationConfig` diff --git a/website/src/pages/docs/get-started.mdx b/website/src/pages/docs/get-started.mdx index fe2e0ee4826..02fe75fb401 100644 --- a/website/src/pages/docs/get-started.mdx +++ b/website/src/pages/docs/get-started.mdx @@ -91,76 +91,68 @@ GraphQL-Modules allow you to do much more, like managing the lifecycle of your e Your GraphQL `Application` exposes `createExecution` and `createSubscription` methods, which are just plug-and-play replacements for the default functions from `graphql-js`. - - + + If you are using [GraphQL Yoga](https://the-guild.dev/graphql/yoga-server), you can use [`useGraphQLModules`](https://envelop.dev/plugins/use-graphql-modules) plugin from Envelop. ```ts -import { createServer } from '@graphql-yoga/node' +import { createServer } from 'http' +import { createYoga } from 'graphql-yoga' import { useGraphQLModules } from '@envelop/graphql-modules' import { application } from './application' -const server = createServer({ +const yoga = createYoga({ plugins: [useGraphQLModules(application)] }) -server.start().then(() => { - console.log(`🚀 Server ready`) +const server = createServer(yoga) + +server.listen(4000, () => { + console.log(`🚀 Server ready at http://localhost:4000/`) }) ``` - - - -If you are using [Apollo-Server](https://github.com/apollographql/apollo-server), you can use `createApolloExecutor` to get an executor that is adapted for this server, and integrates with it perfectly. + +If you are using [Apollo-Server](https://github.com/apollographql/apollo-server), you can use `createApolloGateway` to get an executor that is adapted for this server, and integrates with it perfectly. ```ts -import { ApolloServer } from 'apollo-server' +import { ApolloServer } from '@apollo/server' import { application } from './application' -const executor = application.createApolloExecutor() -const schema = application.schema +const gateway = application.createApolloGateway() -const server = new ApolloServer({ schema, executor }) - -server.listen().then(({ url }) => { - console.log(`🚀 Server ready at ${url}`) -}) +const server = new ApolloServer({ gateway }) ``` - - - - -If you are using [Express-GraphQL](https://github.com/graphql/express-graphql), here's how you do it: + + +If you are using [GraphQL HTTP](https://github.com/graphql/graphql-http), here's how you do it: ```ts -import express from 'express' -import graphqlHTTP from 'express-graphql' -import { application } from './application' - -const execute = application.createExecution() -const schema = application.schema - -const server = express() - -server.use( - '/', - graphqlHTTP({ - schema, - customExecuteFn: execute, - graphiql: true - }) -) - -server.listen(4000, () => { - console.log(`🚀 Server ready at http://localhost:4000/`) +import http from 'http'; +import { createHandler } from 'graphql-http/lib/use/http'; +import { application } from './application'; + +// Create the GraphQL over HTTP Node request handler +const handler = createHandler({ + schema: application.schema, + execute: application.createExecution(), }) -``` - +// Create a HTTP server using the listener on `/graphql` +const server = http.createServer((req, res) => { + if (req.url.startsWith('/graphql')) { + handler(req, res); + } else { + res.writeHead(404).end(); + } +}); - +server.listen(4000); +console.log('Listening to port 4000'); +``` + + If you are using [GraphQL-Helix](https://github.com/contrawork/graphql-helix), here's how you do it: diff --git a/yarn.lock b/yarn.lock index 776370b0436..9f2ff910f4d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -177,19 +177,20 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@apollo/cache-control-types@^1.0.2": +"@apollo/cache-control-types@^1.0.2", "@apollo/cache-control-types@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@apollo/cache-control-types/-/cache-control-types-1.0.3.tgz#5da62cf64c3b4419dabfef4536b57a40c8ff0b47" integrity sha512-F17/vCp7QVwom9eG7ToauIKdAxpSoadsJnqIfyryLFSkLSOEqu+eC5Z3N8OXcUVStuOMcNHlyraRsA6rRICu4g== -"@apollo/federation@0.38.1": - version "0.38.1" - resolved "https://registry.yarnpkg.com/@apollo/federation/-/federation-0.38.1.tgz#0b8a9b4cbf5ebfa3106c20c47ec1f33cf92102a0" - integrity sha512-miifyAEsFgiYKeM3lUHFH6+vKa2vm9dXKSyWVpX6oeJiPblFLe2/iByN3psZQO2sRdVqO1OKYrGXdgKc74XDKw== +"@apollo/federation-internals@2.5.5": + version "2.5.5" + resolved "https://registry.yarnpkg.com/@apollo/federation-internals/-/federation-internals-2.5.5.tgz#4e70e602d87bdaceacdb2de75a85463988063b58" + integrity sha512-6Ywx10Jweuoq9p913HwtIUuJt+uI+hAw5g/Tv/yIA04FNwdPETkLe6Jbz7mnXdGV0b30YcPME2NnKnIu7s/5AA== dependencies: - "@apollo/subgraph" "^0.6.1" - apollo-server-types "^3.0.2" - lodash.xorby "^4.7.0" + "@types/uuid" "^9.0.0" + chalk "^4.1.0" + js-levenshtein "^1.1.6" + uuid "^9.0.0" "@apollo/protobufjs@1.2.6": version "1.2.6" @@ -228,25 +229,91 @@ "@types/long" "^4.0.0" long "^4.0.0" -"@apollo/subgraph@^0.6.1": - version "0.6.1" - resolved "https://registry.yarnpkg.com/@apollo/subgraph/-/subgraph-0.6.1.tgz#18f496f496ecf42d0eb372ab1d2d457d30e5a76e" - integrity sha512-w/6FoubSxuzXSx8uvLE1wEuHZVHRXFyfHPKdM76wX5U/xw82zlUKseVO7wTuVODTcnUzEA30udYeCApUoC3/Xw== +"@apollo/server-gateway-interface@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@apollo/server-gateway-interface/-/server-gateway-interface-1.1.1.tgz#a79632aa921edefcd532589943f6b97c96fa4d3c" + integrity sha512-pGwCl/po6+rxRmDMFgozKQo2pbsSwE91TpsDBAOgf74CRDPXHHtM88wbwjab0wMMZh95QfR45GGyDIdhY24bkQ== + dependencies: + "@apollo/usage-reporting-protobuf" "^4.1.1" + "@apollo/utils.fetcher" "^2.0.0" + "@apollo/utils.keyvaluecache" "^2.1.0" + "@apollo/utils.logger" "^2.0.0" + +"@apollo/server@4.9.4": + version "4.9.4" + resolved "https://registry.yarnpkg.com/@apollo/server/-/server-4.9.4.tgz#fde57e984beef1b2962354a492d3bca072c1067c" + integrity sha512-lopNDM3sZerTcYH/P85QX5HqSNV4HoVbtX3zOrf0ak7eplhPDiGVyF0jQWRbL64znG6KXW+nMuLDTyFTMQnvgA== + dependencies: + "@apollo/cache-control-types" "^1.0.3" + "@apollo/server-gateway-interface" "^1.1.1" + "@apollo/usage-reporting-protobuf" "^4.1.1" + "@apollo/utils.createhash" "^2.0.0" + "@apollo/utils.fetcher" "^2.0.0" + "@apollo/utils.isnodelike" "^2.0.0" + "@apollo/utils.keyvaluecache" "^2.1.0" + "@apollo/utils.logger" "^2.0.0" + "@apollo/utils.usagereporting" "^2.1.0" + "@apollo/utils.withrequired" "^2.0.0" + "@graphql-tools/schema" "^9.0.0" + "@josephg/resolvable" "^1.0.0" + "@types/express" "^4.17.13" + "@types/express-serve-static-core" "^4.17.30" + "@types/node-fetch" "^2.6.1" + async-retry "^1.2.1" + body-parser "^1.20.0" + cors "^2.8.5" + express "^4.17.1" + loglevel "^1.6.8" + lru-cache "^7.10.1" + negotiator "^0.6.3" + node-abort-controller "^3.1.1" + node-fetch "^2.6.7" + uuid "^9.0.0" + whatwg-mimetype "^3.0.0" + +"@apollo/subgraph@2.5.5": + version "2.5.5" + resolved "https://registry.yarnpkg.com/@apollo/subgraph/-/subgraph-2.5.5.tgz#b7bb0363c0eafacd052a8453d9e0877d78a7977b" + integrity sha512-r1r0qMzR6gHK6EoKFpIwcSNID+A78zbqLmCynMV+GYnWt3BvyydtPaw4DgQFo+oMSnEBvk4nI7P3v+xZg4FdSQ== dependencies: "@apollo/cache-control-types" "^1.0.2" + "@apollo/federation-internals" "2.5.5" -"@apollo/usage-reporting-protobuf@^4.0.0": +"@apollo/usage-reporting-protobuf@^4.0.0", "@apollo/usage-reporting-protobuf@^4.1.0", "@apollo/usage-reporting-protobuf@^4.1.1": version "4.1.1" resolved "https://registry.yarnpkg.com/@apollo/usage-reporting-protobuf/-/usage-reporting-protobuf-4.1.1.tgz#407c3d18c7fbed7a264f3b9a3812620b93499de1" integrity sha512-u40dIUePHaSKVshcedO7Wp+mPiZsaU6xjv9J+VyxpoU/zL6Jle+9zWeG98tr/+SZ0nZ4OXhrbb8SNr0rAPpIDA== dependencies: "@apollo/protobufjs" "1.2.7" +"@apollo/utils.createhash@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@apollo/utils.createhash/-/utils.createhash-2.0.1.tgz#9d982a166833ce08265ff70f8ef781d65109bdaa" + integrity sha512-fQO4/ZOP8LcXWvMNhKiee+2KuKyqIcfHrICA+M4lj/h/Lh1H10ICcUtk6N/chnEo5HXu0yejg64wshdaiFitJg== + dependencies: + "@apollo/utils.isnodelike" "^2.0.1" + sha.js "^2.4.11" + "@apollo/utils.dropunuseddefinitions@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@apollo/utils.dropunuseddefinitions/-/utils.dropunuseddefinitions-1.1.0.tgz#02b04006442eaf037f4c4624146b12775d70d929" integrity sha512-jU1XjMr6ec9pPoL+BFWzEPW7VHHulVdGKMkPAMiCigpVIT11VmCbnij0bWob8uS3ODJ65tZLYKAh/55vLw2rbg== +"@apollo/utils.dropunuseddefinitions@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@apollo/utils.dropunuseddefinitions/-/utils.dropunuseddefinitions-2.0.1.tgz#916cd912cbd88769d3b0eab2d24f4674eeda8124" + integrity sha512-EsPIBqsSt2BwDsv8Wu76LK5R1KtsVkNoO4b0M5aK0hx+dGg9xJXuqlr7Fo34Dl+y83jmzn+UvEW+t1/GP2melA== + +"@apollo/utils.fetcher@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@apollo/utils.fetcher/-/utils.fetcher-2.0.1.tgz#2f6e3edc8ce79fbe916110d9baaddad7e13d955f" + integrity sha512-jvvon885hEyWXd4H6zpWeN3tl88QcWnHp5gWF5OPF34uhvoR+DFqcNxs9vrRaBBSY3qda3Qe0bdud7tz2zGx1A== + +"@apollo/utils.isnodelike@^2.0.0", "@apollo/utils.isnodelike@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@apollo/utils.isnodelike/-/utils.isnodelike-2.0.1.tgz#08a7e50f08d2031122efa25af089d1c6ee609f31" + integrity sha512-w41XyepR+jBEuVpoRM715N2ZD0xMD413UiJx8w5xnAZD2ZkSJnMJBoIzauK83kJpSgNuR6ywbV29jG9NmxjK0Q== + "@apollo/utils.keyvaluecache@^1.0.1": version "1.0.2" resolved "https://registry.yarnpkg.com/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-1.0.2.tgz#2bfe358c4d82f3a0950518451996758c52613f57" @@ -255,21 +322,44 @@ "@apollo/utils.logger" "^1.0.0" lru-cache "7.10.1 - 7.13.1" +"@apollo/utils.keyvaluecache@^2.1.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-2.1.1.tgz#f3f79a2f00520c6ab7a77a680a4e1fec4d19e1a6" + integrity sha512-qVo5PvUUMD8oB9oYvq4ViCjYAMWnZ5zZwEjNF37L2m1u528x5mueMlU+Cr1UinupCgdB78g+egA1G98rbJ03Vw== + dependencies: + "@apollo/utils.logger" "^2.0.1" + lru-cache "^7.14.1" + "@apollo/utils.logger@^1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/@apollo/utils.logger/-/utils.logger-1.0.1.tgz#aea0d1bb7ceb237f506c6bbf38f10a555b99a695" integrity sha512-XdlzoY7fYNK4OIcvMD2G94RoFZbzTQaNP0jozmqqMudmaGo2I/2Jx71xlDJ801mWA/mbYRihyaw6KJii7k5RVA== +"@apollo/utils.logger@^2.0.0", "@apollo/utils.logger@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@apollo/utils.logger/-/utils.logger-2.0.1.tgz#74faeb97d7ad9f22282dfb465bcb2e6873b8a625" + integrity sha512-YuplwLHaHf1oviidB7MxnCXAdHp3IqYV8n0momZ3JfLniae92eYqMIx+j5qJFX6WKJPs6q7bczmV4lXIsTu5Pg== + "@apollo/utils.printwithreducedwhitespace@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@apollo/utils.printwithreducedwhitespace/-/utils.printwithreducedwhitespace-1.1.0.tgz#c466299a4766eef8577a2a64c8f27712e8bd7e30" integrity sha512-GfFSkAv3n1toDZ4V6u2d7L4xMwLA+lv+6hqXicMN9KELSJ9yy9RzuEXaX73c/Ry+GzRsBy/fdSUGayGqdHfT2Q== +"@apollo/utils.printwithreducedwhitespace@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@apollo/utils.printwithreducedwhitespace/-/utils.printwithreducedwhitespace-2.0.1.tgz#f4fadea0ae849af2c19c339cc5420d1ddfaa905e" + integrity sha512-9M4LUXV/fQBh8vZWlLvb/HyyhjJ77/I5ZKu+NBWV/BmYGyRmoEP9EVAy7LCVoY3t8BDcyCAGfxJaLFCSuQkPUg== + "@apollo/utils.removealiases@1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@apollo/utils.removealiases/-/utils.removealiases-1.0.0.tgz#75f6d83098af1fcae2d3beb4f515ad4a8452a8c1" integrity sha512-6cM8sEOJW2LaGjL/0vHV0GtRaSekrPQR4DiywaApQlL9EdROASZU5PsQibe2MWeZCOhNrPRuHh4wDMwPsWTn8A== +"@apollo/utils.removealiases@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@apollo/utils.removealiases/-/utils.removealiases-2.0.1.tgz#2873c93d72d086c60fc0d77e23d0f75e66a2598f" + integrity sha512-0joRc2HBO4u594Op1nev+mUF6yRnxoUH64xw8x3bX7n8QBDYdeYgY4tF0vJReTy+zdn2xv6fMsquATSgC722FA== + "@apollo/utils.sortast@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@apollo/utils.sortast/-/utils.sortast-1.1.0.tgz#93218c7008daf3e2a0725196085a33f5aab5ad07" @@ -277,11 +367,23 @@ dependencies: lodash.sortby "^4.7.0" +"@apollo/utils.sortast@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@apollo/utils.sortast/-/utils.sortast-2.0.1.tgz#58c90bb8bd24726346b61fa51ba7fcf06e922ef7" + integrity sha512-eciIavsWpJ09za1pn37wpsCGrQNXUhM0TktnZmHwO+Zy9O4fu/WdB4+5BvVhFiZYOXvfjzJUcc+hsIV8RUOtMw== + dependencies: + lodash.sortby "^4.7.0" + "@apollo/utils.stripsensitiveliterals@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@apollo/utils.stripsensitiveliterals/-/utils.stripsensitiveliterals-1.2.0.tgz#4920651f36beee8e260e12031a0c5863ad0c7b28" integrity sha512-E41rDUzkz/cdikM5147d8nfCFVKovXxKBcjvLEQ7bjZm/cg9zEcXvS6vFY8ugTubI3fn6zoqo0CyU8zT+BGP9w== +"@apollo/utils.stripsensitiveliterals@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@apollo/utils.stripsensitiveliterals/-/utils.stripsensitiveliterals-2.0.1.tgz#2f3350483be376a98229f90185eaf19888323132" + integrity sha512-QJs7HtzXS/JIPMKWimFnUMK7VjkGQTzqD9bKD1h3iuPAqLsxd0mUNVbkYOPTsDhUKgcvUOfOqOJWYohAKMvcSA== + "@apollo/utils.usagereporting@^1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/@apollo/utils.usagereporting/-/utils.usagereporting-1.0.1.tgz#3c70b49e554771659576fe35381c7a4b321d27fd" @@ -294,6 +396,23 @@ "@apollo/utils.sortast" "^1.1.0" "@apollo/utils.stripsensitiveliterals" "^1.2.0" +"@apollo/utils.usagereporting@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@apollo/utils.usagereporting/-/utils.usagereporting-2.1.0.tgz#11bca6a61fcbc6e6d812004503b38916e74313f4" + integrity sha512-LPSlBrn+S17oBy5eWkrRSGb98sWmnEzo3DPTZgp8IQc8sJe0prDgDuppGq4NeQlpoqEHz0hQeYHAOA0Z3aQsxQ== + dependencies: + "@apollo/usage-reporting-protobuf" "^4.1.0" + "@apollo/utils.dropunuseddefinitions" "^2.0.1" + "@apollo/utils.printwithreducedwhitespace" "^2.0.1" + "@apollo/utils.removealiases" "2.0.1" + "@apollo/utils.sortast" "^2.0.1" + "@apollo/utils.stripsensitiveliterals" "^2.0.1" + +"@apollo/utils.withrequired@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@apollo/utils.withrequired/-/utils.withrequired-2.0.1.tgz#e72bc512582a6f26af150439f7eb7473b46ba874" + integrity sha512-YBDiuAX9i1lLc6GeTy1m7DGLFn/gMnvXqlalOIMjM7DeOgIacEjjfwPqb0M1CQ2v11HhR15d1NmxJoRCfrNqcA== + "@apollographql/apollo-tools@^0.5.3": version "0.5.4" resolved "https://registry.yarnpkg.com/@apollographql/apollo-tools/-/apollo-tools-0.5.4.tgz#cb3998c6cf12e494b90c733f44dd9935e2d8196c" @@ -1537,12 +1656,12 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@envelop/core@^3.0.4": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@envelop/core/-/core-3.0.6.tgz#e55c3564d05d648b0356a1c465aa90b0c51f485d" - integrity sha512-06t1xCPXq6QFN7W1JUEf68aCwYN0OUDNAIoJe7bAqhaoa2vn7NCcuX1VHkJ/OWpmElUgCsRO6RiBbIru1in0Ig== +"@envelop/core@^4.0.0": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@envelop/core/-/core-4.0.3.tgz#6bc3e1ed3b31aa41d81106eb5071a9b8eec188d0" + integrity sha512-O0Vz8E0TObT6ijAob8jYFVJavcGywKThM3UAsxUIBBVPYZTMiqI9lo2gmAnbMUnrDcAYkUTZEW9FDYPRdF5l6g== dependencies: - "@envelop/types" "3.0.2" + "@envelop/types" "4.0.1" tslib "^2.5.0" "@envelop/graphql-modules@5.0.3": @@ -1552,20 +1671,11 @@ dependencies: tslib "^2.5.0" -"@envelop/types@3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@envelop/types/-/types-3.0.2.tgz#a4b29375b7fcee39bb5830f87f66bbc815cf305e" - integrity sha512-pOFea9ha0EkURWxJ/35axoH9fDGP5S2cUu/5Mmo9pb8zUf+TaEot8vB670XXihFEn/92759BMjLJNWBKmNhyng== - dependencies: - tslib "^2.5.0" - -"@envelop/validation-cache@^5.1.2": - version "5.1.3" - resolved "https://registry.yarnpkg.com/@envelop/validation-cache/-/validation-cache-5.1.3.tgz#8348453183af348147e2b690a431b6ca81d2a6bc" - integrity sha512-MkzcScQHJJQ/9YCAPdWShEi3xZv4F4neTs+NszzSrZOdlU8z/THuRt7gZ0sO0y2be+sx+SKjHQP8Gq3VXXcTTg== +"@envelop/types@4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@envelop/types/-/types-4.0.1.tgz#145690d8266a003cdb06dd58fa1236e3c80050a9" + integrity sha512-ULo27/doEsP7uUhm2iTnElx13qTO6I5FKvmLoX41cpfuw8x6e0NUFknoqhEsLzAbgz8xVS5mjwcxGCXh4lDYzg== dependencies: - hash-it "^6.0.0" - lru-cache "^6.0.0" tslib "^2.5.0" "@esbuild/linux-loong64@0.14.54": @@ -1617,39 +1727,6 @@ dependencies: giscus "^1.3.0" -"@graphql-tools/batch-execute@^9.0.1": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-9.0.2.tgz#5ac3257501e7941fad40661bb5e1110d6312f58b" - integrity sha512-Y2uwdZI6ZnatopD/SYfZ1eGuQFI7OU2KGZ2/B/7G9ISmgMl5K+ZZWz/PfIEXeiHirIDhyk54s4uka5rj2xwKqQ== - dependencies: - "@graphql-tools/utils" "^10.0.5" - dataloader "^2.2.2" - tslib "^2.4.0" - value-or-promise "^1.0.12" - -"@graphql-tools/delegate@^10.0.3": - version "10.0.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-10.0.3.tgz#2d0e133da94ca92c24e0c7360414e5592321cf2d" - integrity sha512-Jor9oazZ07zuWkykD3OOhT/2XD74Zm6Ar0ENZMk75MDD51wB2UWUIMljtHxbJhV5A6UBC2v8x6iY0xdCGiIlyw== - dependencies: - "@graphql-tools/batch-execute" "^9.0.1" - "@graphql-tools/executor" "^1.0.0" - "@graphql-tools/schema" "^10.0.0" - "@graphql-tools/utils" "^10.0.5" - dataloader "^2.2.2" - tslib "^2.5.0" - -"@graphql-tools/executor@^0.0.18": - version "0.0.18" - resolved "https://registry.yarnpkg.com/@graphql-tools/executor/-/executor-0.0.18.tgz#5b9f881d59484ea55278de3b4743ece8d68bc6e7" - integrity sha512-xZC0C+/npXoSHBB5bsJdwxDLgtl1Gu4fL9J2TPQmXoZC3L2N506KJoppf9LgWdHU/xK04luJrhP6WjhfkIN0pQ== - dependencies: - "@graphql-tools/utils" "^9.2.1" - "@graphql-typed-document-node/core" "3.2.0" - "@repeaterjs/repeater" "3.0.4" - tslib "^2.4.0" - value-or-promise "1.0.12" - "@graphql-tools/executor@^1.0.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@graphql-tools/executor/-/executor-1.2.0.tgz#6c45f4add765769d9820c4c4405b76957ba39c79" @@ -1715,7 +1792,7 @@ tslib "^2.4.0" value-or-promise "1.0.11" -"@graphql-tools/schema@^9.0.18": +"@graphql-tools/schema@^9.0.0", "@graphql-tools/schema@^9.0.18": version "9.0.19" resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-9.0.19.tgz#c4ad373b5e1b8a0cf365163435b7d236ebdd06e7" integrity sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w== @@ -1732,7 +1809,7 @@ dependencies: tslib "^2.4.0" -"@graphql-tools/utils@^10.0.0", "@graphql-tools/utils@^10.0.5": +"@graphql-tools/utils@^10.0.0": version "10.0.7" resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-10.0.7.tgz#ed88968b5ce53dabacbdd185df967aaab35f8549" integrity sha512-KOdeMj6Hd/MENDaqPbws3YJl3wVy0DeYnL7PyUms5Skyf7uzI9INynDwPMhLXfSb0/ph6BXTwMd5zBtWbF8tBQ== @@ -1749,54 +1826,35 @@ "@graphql-typed-document-node/core" "^3.1.1" tslib "^2.4.0" -"@graphql-tools/wrap@^10.0.0": - version "10.0.1" - resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-10.0.1.tgz#9e3d27d2723962c26c4377d5d7ab0d3038bf728c" - integrity sha512-Cw6hVrKGM2OKBXeuAGltgy4tzuqQE0Nt7t/uAqnuokSXZhMHXJUb124Bnvxc2gPZn5chfJSDafDe4Cp8ZAVJgg== - dependencies: - "@graphql-tools/delegate" "^10.0.3" - "@graphql-tools/schema" "^10.0.0" - "@graphql-tools/utils" "^10.0.0" - tslib "^2.4.0" - value-or-promise "^1.0.12" - "@graphql-typed-document-node/core@3.2.0", "@graphql-typed-document-node/core@^3.1.0", "@graphql-typed-document-node/core@^3.1.1", "@graphql-typed-document-node/core@^3.2.0": version "3.2.0" resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861" integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== -"@graphql-yoga/logger@^0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@graphql-yoga/logger/-/logger-0.0.1.tgz#48504fa6ecaee487d9df00fd44c28e356635a324" - integrity sha512-6npFz7eZz33mXgSm1waBLMjUNG0D5hTc/p5Hcs1mojkT3KsLpCOFokzTEKboNsBhKevYcaVa/xeA7WBj4UYMLg== - dependencies: - tslib "^2.3.1" - -"@graphql-yoga/node@3.9.1": - version "3.9.1" - resolved "https://registry.yarnpkg.com/@graphql-yoga/node/-/node-3.9.1.tgz#95f19dc340e0b484b49a3101703378ba483a9238" - integrity sha512-+VIvnVipFo1iDFtayng/AANT1XrdixdScpaMxN/aokGPW3N3NMlpOjClxjQSQhlMlvdCWdtafjbAdstYcyY1sA== +"@graphql-yoga/logger@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@graphql-yoga/logger/-/logger-1.0.0.tgz#0fba12edd8c4b0b9c0f0a74b0d101f1646c3780e" + integrity sha512-JYoxwnPggH2BfO+dWlWZkDeFhyFZqaTRGLvFhy+Pjp2UxitEW6nDrw+pEDw/K9tJwMjIFMmTT9VfTqrnESmBHg== dependencies: - graphql-yoga "3.9.1" - tslib "^2.3.1" + tslib "^2.5.2" -"@graphql-yoga/subscription@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@graphql-yoga/subscription/-/subscription-3.1.0.tgz#4a0bb0b9db2602d02c68f9828603e1e40329140b" - integrity sha512-Vc9lh8KzIHyS3n4jBlCbz7zCjcbtQnOBpsymcRvHhFr2cuH+knmRn0EmzimMQ58jQ8kxoRXXC3KJS3RIxSdPIg== +"@graphql-yoga/subscription@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@graphql-yoga/subscription/-/subscription-4.0.0.tgz#2bf5844ce8aeff46332650ad642218250201dcc5" + integrity sha512-0qsN/BPPZNMoC2CZ8i+P6PgiJyHh1H35aKDt37qARBDaIOKDQuvEOq7+4txUKElcmXi7DYFo109FkhSQoEajrg== dependencies: - "@graphql-yoga/typed-event-target" "^1.0.0" + "@graphql-yoga/typed-event-target" "^2.0.0" "@repeaterjs/repeater" "^3.0.4" - "@whatwg-node/events" "0.0.2" - tslib "^2.3.1" + "@whatwg-node/events" "^0.1.0" + tslib "^2.5.2" -"@graphql-yoga/typed-event-target@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@graphql-yoga/typed-event-target/-/typed-event-target-1.0.0.tgz#dae3c0146f08a4dc30b5b890f8bab706c2b62199" - integrity sha512-Mqni6AEvl3VbpMtKw+TIjc9qS9a8hKhiAjFtqX488yq5oJtj9TkNlFTIacAVS3vnPiswNsmDiQqvwUOcJgi1DA== +"@graphql-yoga/typed-event-target@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@graphql-yoga/typed-event-target/-/typed-event-target-2.0.0.tgz#41809fc8c101c27c61a5427d74e0d0ce824044db" + integrity sha512-oA/VGxGmaSDym1glOHrltw43qZsFwLLjBwvh57B79UKX/vo3+UQcRgOyE44c5RP7DCYjkrC2tuArZmb6jCzysw== dependencies: "@repeaterjs/repeater" "^3.0.4" - tslib "^2.3.1" + tslib "^2.5.2" "@headlessui/react@^1.7.17": version "1.7.17" @@ -2309,33 +2367,6 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@peculiar/asn1-schema@^2.3.6": - version "2.3.6" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.3.6.tgz#3dd3c2ade7f702a9a94dfb395c192f5fa5d6b922" - integrity sha512-izNRxPoaeJeg/AyH8hER6s+H7p4itk+03QCa4sbxI3lNdseQYCuxzgsuNK8bTXChtLTjpJz6NmXKA73qLa3rCA== - dependencies: - asn1js "^3.0.5" - pvtsutils "^1.3.2" - tslib "^2.4.0" - -"@peculiar/json-schema@^1.1.12": - version "1.1.12" - resolved "https://registry.yarnpkg.com/@peculiar/json-schema/-/json-schema-1.1.12.tgz#fe61e85259e3b5ba5ad566cb62ca75b3d3cd5339" - integrity sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w== - dependencies: - tslib "^2.0.0" - -"@peculiar/webcrypto@^1.4.0": - version "1.4.3" - resolved "https://registry.yarnpkg.com/@peculiar/webcrypto/-/webcrypto-1.4.3.tgz#078b3e8f598e847b78683dc3ba65feb5029b93a7" - integrity sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A== - dependencies: - "@peculiar/asn1-schema" "^2.3.6" - "@peculiar/json-schema" "^1.1.12" - pvtsutils "^1.3.2" - tslib "^2.5.0" - webcrypto-core "^1.7.7" - "@polka/url@^1.0.0-next.20": version "1.0.0-next.23" resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.23.tgz#498e41218ab3b6a1419c735e5c6ae2c5ed609b6c" @@ -2549,7 +2580,7 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-primitive" "1.0.3" -"@repeaterjs/repeater@3.0.4", "@repeaterjs/repeater@^3.0.4": +"@repeaterjs/repeater@^3.0.4": version "3.0.4" resolved "https://registry.yarnpkg.com/@repeaterjs/repeater/-/repeater-3.0.4.tgz#a04d63f4d1bf5540a41b01a921c9a7fddc3bd1ca" integrity sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA== @@ -2795,6 +2826,13 @@ resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== +"@types/cors@2.8.14": + version "2.8.14" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.14.tgz#94eeb1c95eda6a8ab54870a3bf88854512f43a92" + integrity sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ== + dependencies: + "@types/node" "*" + "@types/d3-scale-chromatic@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz#103124777e8cdec85b20b51fd3397c682ee1e954" @@ -2855,6 +2893,16 @@ "@types/range-parser" "*" "@types/send" "*" +"@types/express-serve-static-core@^4.17.30": + version "4.17.39" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz#2107afc0a4b035e6cb00accac3bdf2d76ae408c8" + integrity sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + "@types/express@4.17.14": version "4.17.14" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.14.tgz#143ea0557249bc1b3b54f15db4c81c3d4eb3569c" @@ -2865,7 +2913,7 @@ "@types/qs" "*" "@types/serve-static" "*" -"@types/express@4.17.20": +"@types/express@4.17.20", "@types/express@^4.17.13": version "4.17.20" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.20.tgz#e7c9b40276d29e38a4e3564d7a3d65911e2aa433" integrity sha512-rOaqlkgEvOW495xErXMsmyX3WKBInbhG5eqojXYi3cGUaLoRDlXa5d52fkfWZT963AZ3v2eZ4MbKE6WpDAGVsw== @@ -2996,6 +3044,14 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.32.tgz#f6cd08939ae3ad886fcc92ef7f0109dacddf61ab" integrity sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g== +"@types/node-fetch@^2.6.1": + version "2.6.8" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.8.tgz#9a2993583975849c2e1f360b6ca2f11755b2c504" + integrity sha512-nnH5lV9QCMPsbEVdTb5Y+F3GQxLSw1xQgIydrb2gSfEavRPs50FnMr+KUaa+LoPSqibm2N+ZZxH7lavZlAT4GA== + dependencies: + "@types/node" "*" + form-data "^4.0.0" + "@types/node@*", "@types/node@18.18.7": version "18.18.7" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.7.tgz#bb3a7068dc4ba421b6968f2a259298b3a4e129e8" @@ -3120,6 +3176,11 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.0.tgz#988ae8af1e5239e89f9fbb1ade4c935f4eeedf9a" integrity sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w== +"@types/uuid@^9.0.0": + version "9.0.6" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.6.tgz#c91ae743d8344a54b2b0c691195f5ff5265f6dfb" + integrity sha512-BT2Krtx4xaO6iwzwMFUYvWBWkV2pr37zD68Vmp1CDV196MzczBRxuEpD6Pr395HAgebC/co7hOphs53r8V7jew== + "@types/yargs-parser@*": version "21.0.1" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.1.tgz#07773d7160494d56aa882d7531aac7319ea67c3b" @@ -3234,44 +3295,36 @@ resolved "https://registry.yarnpkg.com/@vercel/ncc/-/ncc-0.31.1.tgz#9346c7e59326f5eeac75c0286e47df94c2d6d8f7" integrity sha512-g0FAxwdViI6UzsiVz5HssIHqjcPa1EHL6h+2dcJD893SoCJaGdqqgUF09xnMW6goWnnhbLvgiKlgJWrJa+7qYA== -"@whatwg-node/events@0.0.2": - version "0.0.2" - resolved "https://registry.yarnpkg.com/@whatwg-node/events/-/events-0.0.2.tgz#7b7107268d2982fc7b7aff5ee6803c64018f84dd" - integrity sha512-WKj/lI4QjnLuPrim0cfO7i+HsDSXHxNv1y0CrJhdntuO3hxWZmnXCwNDnwOvry11OjRin6cgWNF+j/9Pn8TN4w== - -"@whatwg-node/events@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@whatwg-node/events/-/events-0.0.3.tgz#13a65dd4f5893f55280f766e29ae48074927acad" - integrity sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA== +"@whatwg-node/events@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@whatwg-node/events/-/events-0.1.1.tgz#0ca718508249419587e130da26d40e29d99b5356" + integrity sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w== -"@whatwg-node/fetch@^0.8.3", "@whatwg-node/fetch@^0.8.4": - version "0.8.8" - resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.8.8.tgz#48c6ad0c6b7951a73e812f09dd22d75e9fa18cae" - integrity sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg== +"@whatwg-node/fetch@^0.9.10", "@whatwg-node/fetch@^0.9.7": + version "0.9.14" + resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.9.14.tgz#262039fd8aea52a9c8aac2ec20f316382eae1a3c" + integrity sha512-wurZC82zzZwXRDSW0OS9l141DynaJQh7Yt0FD1xZ8niX7/Et/7RoiLiltbVU1fSF1RR9z6ndEaTUQBAmddTm1w== dependencies: - "@peculiar/webcrypto" "^1.4.0" - "@whatwg-node/node-fetch" "^0.3.6" - busboy "^1.6.0" - urlpattern-polyfill "^8.0.0" - web-streams-polyfill "^3.2.1" + "@whatwg-node/node-fetch" "^0.5.0" + urlpattern-polyfill "^9.0.0" -"@whatwg-node/node-fetch@^0.3.6": - version "0.3.6" - resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.3.6.tgz#e28816955f359916e2d830b68a64493124faa6d0" - integrity sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA== +"@whatwg-node/node-fetch@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.5.0.tgz#f423d048819957ce74f2ec894d235f1c27596014" + integrity sha512-q76lDAafvHNGWedNAVHrz/EyYTS8qwRLcwne8SJQdRN5P3HydxU6XROFvJfTML6KZXQX2FDdGY4/SnaNyd7M0Q== dependencies: - "@whatwg-node/events" "^0.0.3" + "@whatwg-node/events" "^0.1.0" busboy "^1.6.0" fast-querystring "^1.1.1" fast-url-parser "^1.1.3" tslib "^2.3.1" -"@whatwg-node/server@^0.7.3": - version "0.7.7" - resolved "https://registry.yarnpkg.com/@whatwg-node/server/-/server-0.7.7.tgz#daaae73999cf8ea4d4f7e617276dcb8e84a6e49e" - integrity sha512-aHURgNDFm/48WVV3vhTMfnEKCYwYgdaRdRhZsQZx4UVFjGGkGay7Ys0+AYu9QT/jpoImv2oONkstoTMUprDofg== +"@whatwg-node/server@^0.9.1": + version "0.9.16" + resolved "https://registry.yarnpkg.com/@whatwg-node/server/-/server-0.9.16.tgz#96789f68d3214a50c437480a4d237e91ab81ea34" + integrity sha512-gktQkRyONEw2EGpx7UZaC6zNlUm21CGlqAHQXU3QC6W0zlLM5ZQNDCeD66q/nsPHDV08X2NTHlABsuAEk5rh/w== dependencies: - "@whatwg-node/fetch" "^0.8.3" + "@whatwg-node/fetch" "^0.9.10" tslib "^2.3.1" "@yarnpkg/lockfile@^1.1.0": @@ -3284,7 +3337,7 @@ abab@^2.0.3, abab@^2.0.5: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== -accepts@^1.3.5, accepts@^1.3.7, accepts@~1.3.8: +accepts@^1.3.5, accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== @@ -3575,7 +3628,7 @@ apollo-server-plugin-base@^3.7.2: dependencies: apollo-server-types "^3.8.0" -apollo-server-types@^3.0.2, apollo-server-types@^3.8.0: +apollo-server-types@^3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/apollo-server-types/-/apollo-server-types-3.8.0.tgz#d976b6967878681f715fe2b9e4dad9ba86b1346f" integrity sha512-ZI/8rTE4ww8BHktsVpb91Sdq7Cb71rdSkXELSwdSR0eXu600/sY+1UXhTWdiJvk+Eq5ljqoHLwLbY2+Clq2b9A== @@ -3739,15 +3792,6 @@ artillery@1.7.9: uuid "^2.0.3" ws "^5.1.1" -asn1js@^3.0.1, asn1js@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.5.tgz#5ea36820443dbefb51cc7f88a2ebb5b462114f38" - integrity sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ== - dependencies: - pvtsutils "^1.3.2" - pvutils "^1.1.3" - tslib "^2.4.0" - astring@^1.8.0: version "1.8.6" resolved "https://registry.yarnpkg.com/astring/-/astring-1.8.6.tgz#2c9c157cf1739d67561c56ba896e6948f6b93731" @@ -4042,6 +4086,24 @@ body-parser@1.20.1, body-parser@^1.19.0: type-is "~1.6.18" unpipe "1.0.0" +body-parser@^1.20.0: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -4615,7 +4677,7 @@ content-disposition@0.5.4: dependencies: safe-buffer "5.2.1" -content-type@^1.0.4, content-type@~1.0.4: +content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== @@ -4647,7 +4709,7 @@ core-js-compat@^3.31.0, core-js-compat@^3.33.1: dependencies: browserslist "^4.22.1" -cors@^2.8.5: +cors@2.8.5, cors@^2.8.5: version "2.8.5" resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== @@ -5187,7 +5249,7 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -dataloader@2.2.2, dataloader@^2.2.2: +dataloader@2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.2.2.tgz#216dc509b5abe39d43a9b9d97e6e5e473dfbe3e0" integrity sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g== @@ -5341,11 +5403,6 @@ depd@2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - dependency-graph@0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27" @@ -6133,16 +6190,6 @@ expect@^27.5.1: jest-matcher-utils "^27.5.1" jest-message-util "^27.5.1" -express-graphql@0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/express-graphql/-/express-graphql-0.12.0.tgz#58deabc309909ca2c9fe2f83f5fbe94429aa23df" - integrity sha512-DwYaJQy0amdy3pgNtiTDuGGM2BLdj+YO2SgbKoLliCfuHv3VVTt7vNG/ZqK2hRYjtYHE2t2KB705EU94mE64zg== - dependencies: - accepts "^1.3.7" - content-type "^1.0.4" - http-errors "1.8.0" - raw-body "^2.4.1" - express@4.18.2, express@^4.17.1: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" @@ -6424,6 +6471,15 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + format@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" @@ -6723,6 +6779,11 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +graphql-http@1.22.0: + version "1.22.0" + resolved "https://registry.yarnpkg.com/graphql-http/-/graphql-http-1.22.0.tgz#967bad279747ba5e1c9dd85b644c6b4f3dfa88f2" + integrity sha512-9RBUlGJWBFqz9LwfpmAbjJL/8j/HCNkZwPBU5+Bfmwez+1Ay43DocMNQYpIWsWqH0Ftv6PTNAh2aRnnMCBJgLw== + graphql-jit@0.8.4: version "0.8.4" resolved "https://registry.yarnpkg.com/graphql-jit/-/graphql-jit-0.8.4.tgz#53c2e43b90ec98ea0942f4062516de910fbff709" @@ -6754,23 +6815,22 @@ graphql-ws@5.14.2: resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.14.2.tgz#7db6f6138717a544d9480f0213f65f2841ed1c52" integrity sha512-LycmCwhZ+Op2GlHz4BZDsUYHKRiiUz+3r9wbhBATMETNlORQJAaFlAgTFoeRh6xQoQegwYwIylVD1Qns9/DA3w== -graphql-yoga@3.9.1: - version "3.9.1" - resolved "https://registry.yarnpkg.com/graphql-yoga/-/graphql-yoga-3.9.1.tgz#e35c959fac5c1d81e2244a0665b5da6357d4e637" - integrity sha512-BB6EkN64VBTXWmf9Kym2OsVZFzBC0mAsQNo9eNB5xIr3t+x7qepQ34xW5A353NWol3Js3xpzxwIKFVF6l9VsPg== +graphql-yoga@4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/graphql-yoga/-/graphql-yoga-4.0.5.tgz#7545f430d2e83998d22427b63fd511976dba47c4" + integrity sha512-vIbJU9QX5RP4PoxbMCHcfOlt/3EsC/0uLdAOlKaiUvlwJDTFCaIHo2X10vL4i/27Gw8g90ECIwm2YbmeLDwcqg== dependencies: - "@envelop/core" "^3.0.4" - "@envelop/validation-cache" "^5.1.2" - "@graphql-tools/executor" "^0.0.18" - "@graphql-tools/schema" "^9.0.18" - "@graphql-tools/utils" "^9.2.1" - "@graphql-yoga/logger" "^0.0.1" - "@graphql-yoga/subscription" "^3.1.0" - "@whatwg-node/fetch" "^0.8.4" - "@whatwg-node/server" "^0.7.3" + "@envelop/core" "^4.0.0" + "@graphql-tools/executor" "^1.0.0" + "@graphql-tools/schema" "^10.0.0" + "@graphql-tools/utils" "^10.0.0" + "@graphql-yoga/logger" "^1.0.0" + "@graphql-yoga/subscription" "^4.0.0" + "@whatwg-node/fetch" "^0.9.7" + "@whatwg-node/server" "^0.9.1" dset "^3.1.1" - lru-cache "^7.14.1" - tslib "^2.3.1" + lru-cache "^10.0.0" + tslib "^2.5.2" graphql@16.8.1: version "16.8.1" @@ -6867,11 +6927,6 @@ has@^1.0.3: resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== -hash-it@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/hash-it/-/hash-it-6.0.0.tgz#188df5a8ca2f8e036690e35f2ef88bd9417ff334" - integrity sha512-KHzmSFx1KwyMPw0kXeeUD752q/Kfbzhy6dAZrjXV9kAIXGqzGvv8vhkUqj+2MGZldTo0IBpw6v7iWE7uxsvH0w== - hash-obj@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/hash-obj/-/hash-obj-4.0.0.tgz#3fafeb0b5f17994441dbe04efbdee82e26b74c8c" @@ -7118,17 +7173,6 @@ http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== -http-errors@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.0.tgz#75d1bbe497e1044f51e4ee9e704a62f28d336507" - integrity sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - http-errors@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" @@ -8170,6 +8214,11 @@ joycon@^3.0.1: resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== +js-levenshtein@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -8554,11 +8603,6 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash.xorby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.xorby/-/lodash.xorby-4.7.0.tgz#9c19a6f9f063a6eb53dd03c1b6871799801463d7" - integrity sha512-gYiD6nvuQy0AEkMoUju+t4f4Rn18fjsLB/7x7YZFqtFT9kmegRLrj/uGEQVyVDy7otTmSrIMXNOk2wwuLcfHCQ== - lodash@^4.17.11, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -8626,6 +8670,11 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.13.1.tgz#267a81fbd0881327c46a81c5922606a2cfe336c4" integrity sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ== +lru-cache@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" + integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== + lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -8648,7 +8697,7 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lru-cache@^7.14.1: +lru-cache@^7.10.1, lru-cache@^7.14.1: version "7.18.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== @@ -9885,7 +9934,7 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -negotiator@0.6.3: +negotiator@0.6.3, negotiator@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== @@ -9996,7 +10045,7 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-abort-controller@^3.0.1: +node-abort-controller@^3.0.1, node-abort-controller@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== @@ -10879,18 +10928,6 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== -pvtsutils@^1.3.2: - version "1.3.5" - resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.5.tgz#b8705b437b7b134cd7fd858f025a23456f1ce910" - integrity sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA== - dependencies: - tslib "^2.6.1" - -pvutils@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.3.tgz#f35fc1d27e7cd3dfbd39c0826d173e806a03f5a3" - integrity sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ== - qs@6.11.0: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" @@ -10928,7 +10965,7 @@ range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.1, raw-body@^2.4.1: +raw-body@2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== @@ -10938,6 +10975,16 @@ raw-body@2.5.1, raw-body@^2.4.1: iconv-lite "0.4.24" unpipe "1.0.0" +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + rc@^1.0.1, rc@^1.1.6: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -11818,11 +11865,6 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -"statuses@>= 1.5.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - stream-transform@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/stream-transform/-/stream-transform-2.1.3.tgz#a1c3ecd72ddbf500aa8d342b0b9df38f5aa598e3" @@ -12224,11 +12266,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - toidentifier@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" @@ -12359,7 +12396,7 @@ tslib@1.11.1, tslib@^1.11.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.1: +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.5.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -12807,10 +12844,10 @@ url-parse@^1.5.3: querystringify "^2.1.1" requires-port "^1.0.0" -urlpattern-polyfill@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz#99f096e35eff8bf4b5a2aa7d58a1523d6ebc7ce5" - integrity sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ== +urlpattern-polyfill@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz#bc7e386bb12fd7898b58d1509df21d3c29ab3460" + integrity sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g== util-deprecate@^1.0.2: version "1.0.2" @@ -12874,7 +12911,7 @@ value-or-promise@1.0.11: resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.11.tgz#3e90299af31dd014fe843fe309cefa7c1d94b140" integrity sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg== -value-or-promise@1.0.12, value-or-promise@^1.0.12: +value-or-promise@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.12.tgz#0e5abfeec70148c78460a849f6b003ea7986f15c" integrity sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q== @@ -12968,27 +13005,11 @@ web-namespaces@^2.0.0: resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== -web-streams-polyfill@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" - integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== - web-worker@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/web-worker/-/web-worker-1.2.0.tgz#5d85a04a7fbc1e7db58f66595d7a3ac7c9c180da" integrity sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA== -webcrypto-core@^1.7.7: - version "1.7.7" - resolved "https://registry.yarnpkg.com/webcrypto-core/-/webcrypto-core-1.7.7.tgz#06f24b3498463e570fed64d7cab149e5437b162c" - integrity sha512-7FjigXNsBfopEj+5DV2nhNpfic2vumtjjgPmeDKk45z+MJwXKKfhPB7118Pfzrmh4jqOMST6Ch37iPAHoImg5g== - dependencies: - "@peculiar/asn1-schema" "^2.3.6" - "@peculiar/json-schema" "^1.1.12" - asn1js "^3.0.1" - pvtsutils "^1.3.2" - tslib "^2.4.0" - webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" From 55c1460826ddd4c0ee8590ea14977a37af47f16e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 10 Oct 2023 15:28:23 +0000 Subject: [PATCH 08/10] chore(dependencies): updated changesets for modified dependencies --- .changeset/graphql-modules-2444-dependencies.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/graphql-modules-2444-dependencies.md diff --git a/.changeset/graphql-modules-2444-dependencies.md b/.changeset/graphql-modules-2444-dependencies.md new file mode 100644 index 00000000000..248878bb9dd --- /dev/null +++ b/.changeset/graphql-modules-2444-dependencies.md @@ -0,0 +1,5 @@ +--- +'graphql-modules': patch +--- +dependencies updates: + - Removed dependency [`@graphql-tools/wrap@^10.0.0` ↗︎](https://www.npmjs.com/package/@graphql-tools/wrap/v/10.0.0) (from `dependencies`) From ca9c4aef904b4aea25f521adb545c500e4a7e374 Mon Sep 17 00:00:00 2001 From: Arda TANRIKULU Date: Tue, 10 Oct 2023 23:26:09 +0300 Subject: [PATCH 09/10] Update benchmark.yml --- .github/workflows/benchmark.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index c2735c06bb7..aa8aa187766 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -8,4 +8,4 @@ jobs: uses: the-guild-org/shared-config/.github/workflows/ci-node-matrix.yml@main with: script: 'yarn build && yarn benchmark:basic' - nodeVersions: '[16,18]' + nodeVersions: '[18,20]' From 36a45d1793d3ee27a38955d2411fefc4810dbefd Mon Sep 17 00:00:00 2001 From: Arda TANRIKULU Date: Wed, 18 Oct 2023 11:34:40 -0500 Subject: [PATCH 10/10] Add Apollo Server test back --- .../tests/di-providers.spec.ts | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/packages/graphql-modules/tests/di-providers.spec.ts b/packages/graphql-modules/tests/di-providers.spec.ts index feb91d2f9ef..b77556ba6ef 100644 --- a/packages/graphql-modules/tests/di-providers.spec.ts +++ b/packages/graphql-modules/tests/di-providers.spec.ts @@ -12,6 +12,7 @@ import { testkit, } from '../src'; import { ExecutionContext } from '../src/di'; +import { ApolloServer } from '@apollo/server'; const Test = new InjectionToken('test'); @@ -541,6 +542,100 @@ test('Operation scoped provider should be created once per GraphQL Operation', a expect(loadSpy).toHaveBeenCalledWith(1); }); +test('Operation scoped provider should be created once per GraphQL Operation (Apollo Server)', async () => { + const constructorSpy = jest.fn(); + const loadSpy = jest.fn(); + + @Injectable({ + scope: Scope.Operation, + }) + class Dataloader { + constructor(@Inject(CONTEXT) context: GraphQLModulesGlobalContext) { + constructorSpy(context); + } + + load(id: number) { + loadSpy(id); + return { + id, + title: 'Sample Title', + }; + } + } + + const postsModule = createModule({ + id: 'posts', + providers: [Dataloader], + typeDefs: gql` + type Post { + id: Int! + title: String! + } + type Query { + post(id: Int!): Post! + } + `, + resolvers: { + Query: { + post( + _parent: {}, + args: { id: number }, + { injector }: GraphQLModulesModuleContext + ) { + return injector.get(Dataloader).load(args.id); + }, + }, + }, + }); + + const app = createApplication({ + modules: [postsModule], + }); + + const apolloServer = new ApolloServer({ + gateway: app.createApolloGateway(), + }); + + const query = gql` + { + foo: post(id: 1) { + id + title + } + bar: post(id: 1) { + id + title + } + } + `; + + const result = await apolloServer.executeOperation({ + query, + }); + + if (result.body.kind === 'incremental') { + throw new Error('Expected non-incremental response'); + } + + // Should resolve data correctly + expect(result.body.singleResult.errors).toBeUndefined(); + expect(result.body.singleResult.data).toEqual({ + foo: { + id: 1, + title: 'Sample Title', + }, + bar: { + id: 1, + title: 'Sample Title', + }, + }); + + expect(constructorSpy).toHaveBeenCalledTimes(1); + + expect(loadSpy).toHaveBeenCalledTimes(2); + expect(loadSpy).toHaveBeenCalledWith(1); +}); + test('Singleton scoped provider should be created once', async () => { const constructorSpy = jest.fn();