diff --git a/package.json b/package.json
index 019ab72308b514..e648d75e6027cb 100644
--- a/package.json
+++ b/package.json
@@ -135,6 +135,7 @@
     "eslint-plugin-react-hooks": "4.5.0",
     "event-stream": "4.0.1",
     "execa": "2.0.3",
+    "expect-type": "0.14.2",
     "express": "4.17.0",
     "faker": "5.5.3",
     "faunadb": "2.6.1",
diff --git a/packages/next/types/index.d.ts b/packages/next/types/index.d.ts
index 0fb19548967310..80beebdef8aeee 100644
--- a/packages/next/types/index.d.ts
+++ b/packages/next/types/index.d.ts
@@ -175,10 +175,9 @@ export type GetServerSideProps<
   context: GetServerSidePropsContext<Q, D>
 ) => Promise<GetServerSidePropsResult<P>>
 
-export type InferGetServerSidePropsType<T extends (args: any) => any> = Extract<
-  Awaited<ReturnType<T>>,
-  { props: any }
->['props']
+export type InferGetServerSidePropsType<T extends (args: any) => any> = Awaited<
+  Extract<Awaited<ReturnType<T>>, { props: any }>['props']
+>
 
 declare global {
   interface Crypto {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 08b7b467097dcc..53b42905b68cd0 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -96,6 +96,7 @@ importers:
       eslint-plugin-react-hooks: 4.5.0
       event-stream: 4.0.1
       execa: 2.0.3
+      expect-type: 0.14.2
       express: 4.17.0
       faker: 5.5.3
       faunadb: 2.6.1
@@ -251,6 +252,7 @@ importers:
       eslint-plugin-react-hooks: 4.5.0_eslint@7.24.0
       event-stream: 4.0.1
       execa: 2.0.3
+      expect-type: 0.14.2
       express: 4.17.0
       faker: 5.5.3
       faunadb: 2.6.1
@@ -368,22 +370,27 @@ importers:
       '@next/eslint-plugin-next': 12.3.1-canary.3
       '@rushstack/eslint-patch': ^1.1.3
       '@typescript-eslint/parser': ^5.21.0
+      eslint: ^7.23.0 || ^8.0.0
       eslint-import-resolver-node: ^0.3.6
       eslint-import-resolver-typescript: ^2.7.1
       eslint-plugin-import: ^2.26.0
       eslint-plugin-jsx-a11y: ^6.5.1
       eslint-plugin-react: ^7.31.7
       eslint-plugin-react-hooks: ^4.5.0
+      typescript: '>=3.3.1'
     dependencies:
       '@next/eslint-plugin-next': link:../eslint-plugin-next
       '@rushstack/eslint-patch': 1.1.3
       '@typescript-eslint/parser': 5.21.0_td6yqss6ra3qoebludh4ctrhym
+      eslint: 7.32.0
       eslint-import-resolver-node: 0.3.6
       eslint-import-resolver-typescript: 2.7.1_hpmu7kn6tcn2vnxpfzvv33bxmy
       eslint-plugin-import: 2.26.0_asoxhzjlkaozogjqriaz4fv5ly
       eslint-plugin-jsx-a11y: 6.5.1_eslint@7.32.0
       eslint-plugin-react: 7.31.8_eslint@7.32.0
       eslint-plugin-react-hooks: 4.5.0_eslint@7.32.0
+    devDependencies:
+      typescript: 4.8.2
 
   packages/eslint-plugin-next:
     specifiers:
@@ -500,6 +507,7 @@ importers:
       domain-browser: 4.19.0
       edge-runtime: 1.1.0-beta.31
       events: 3.3.0
+      fibers: '>= 3.1.0'
       find-cache-dir: 3.3.1
       find-up: 4.1.0
       fresh: 0.5.2
@@ -527,6 +535,7 @@ importers:
       neo-async: 2.6.1
       node-fetch: 2.6.7
       node-html-parser: 5.3.3
+      node-sass: ^6.0.0 || ^7.0.0
       ora: 4.0.4
       os-browserify: 0.3.0
       p-limit: 3.1.0
@@ -546,10 +555,13 @@ importers:
       punycode: 2.1.1
       querystring-es3: 0.2.1
       raw-body: 2.4.1
+      react: ^17.0.2 || ^18.0.0-0
+      react-dom: ^17.0.2 || ^18.0.0-0
       react-is: 17.0.2
       react-refresh: 0.12.0
       react-server-dom-webpack: 0.0.0-experimental-975b64464-20220914
       regenerator-runtime: 0.13.4
+      sass: ^1.3.0
       sass-loader: 12.4.0
       schema-utils2: npm:schema-utils@2.7.1
       schema-utils3: npm:schema-utils@3.0.0
@@ -585,9 +597,11 @@ importers:
       '@next/env': link:../next-env
       '@swc/helpers': 0.4.11
       caniuse-lite: 1.0.30001332
+      fibers: 5.0.3
+      node-sass: 7.0.3
       postcss: 8.4.14
-      styled-jsx: 5.0.7_@babel+core@7.18.0
-      use-sync-external-store: 1.2.0
+      styled-jsx: 5.0.7_uuaxwgga6hqycsez5ok7v2wg4i
+      use-sync-external-store: 1.2.0_react@18.2.0
     devDependencies:
       '@ampproject/toolbox-optimizer': 2.8.3
       '@babel/code-frame': 7.12.11
@@ -735,11 +749,14 @@ importers:
       punycode: 2.1.1
       querystring-es3: 0.2.1
       raw-body: 2.4.1
+      react: 18.2.0
+      react-dom: 18.2.0_react@18.2.0
       react-is: 17.0.2
       react-refresh: 0.12.0
-      react-server-dom-webpack: 0.0.0-experimental-975b64464-20220914_webpack@5.74.0
+      react-server-dom-webpack: 0.0.0-experimental-975b64464-20220914_zbur65pq5ttfo7ncb2n2vp2s3m
       regenerator-runtime: 0.13.4
-      sass-loader: 12.4.0_webpack@5.74.0
+      sass: 1.54.0
+      sass-loader: 12.4.0_y7k4qxzyfvxio3t476zhrzlwf4
       schema-utils2: /schema-utils/2.7.1
       schema-utils3: /schema-utils/3.0.0
       semver: 7.3.2
@@ -758,7 +775,7 @@ importers:
       timers-browserify: 2.0.12
       tty-browserify: 0.0.1
       ua-parser-js: 0.7.28
-      unistore: 3.4.1
+      unistore: 3.4.1_react@18.2.0
       util: 0.12.4
       uuid: 8.3.2
       vm-browserify: 1.1.2
@@ -811,10 +828,19 @@ importers:
       rimraf: 3.0.2
 
   packages/next-mdx:
-    specifiers: {}
+    specifiers:
+      '@mdx-js/loader': '>=0.15.0'
+      '@mdx-js/react': '*'
+    dependencies:
+      '@mdx-js/react': 2.1.3_react@18.2.0
+    devDependencies:
+      '@mdx-js/loader': 0.18.0_react@18.2.0
 
   packages/next-plugin-storybook:
-    specifiers: {}
+    specifiers:
+      next: '*'
+    dependencies:
+      next: link:../next
 
   packages/next-polyfill-module:
     specifiers:
@@ -849,10 +875,13 @@ importers:
       css.escape: 1.5.1
       data-uri-to-buffer: 3.0.1
       platform: 1.3.6
+      react: ^17.0.2
+      react-dom: ^17.0.2
       shell-quote: 1.7.3
       source-map: 0.8.0-beta.0
       stacktrace-parser: 0.1.10
       strip-ansi: 6.0.1
+      webpack: ^4 || ^5
     dependencies:
       '@babel/code-frame': 7.12.11
       '@types/babel__code-frame': 7.0.2
@@ -865,6 +894,10 @@ importers:
       source-map: 0.8.0-beta.0
       stacktrace-parser: 0.1.10
       strip-ansi: 6.0.1
+    devDependencies:
+      react: 17.0.2
+      react-dom: 17.0.2_react@17.0.2
+      webpack: 5.74.0
 
   packages/react-refresh-utils:
     specifiers:
@@ -1102,6 +1135,21 @@ packages:
       semver: 6.3.0
     dev: true
 
+  /@babel/helper-compilation-targets/7.18.2:
+    resolution:
+      {
+        integrity: sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==,
+      }
+    engines: { node: '>=6.9.0' }
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/compat-data': 7.17.10
+      '@babel/helper-validator-option': 7.16.7
+      browserslist: 4.20.2
+      semver: 6.3.0
+    dev: true
+
   /@babel/helper-compilation-targets/7.18.2_@babel+core@7.18.0:
     resolution:
       {
@@ -1845,6 +1893,22 @@ packages:
       '@babel/plugin-transform-parameters': 7.14.5_@babel+core@7.18.0
     dev: true
 
+  /@babel/plugin-proposal-object-rest-spread/7.18.0:
+    resolution:
+      {
+        integrity: sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==,
+      }
+    engines: { node: '>=6.9.0' }
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/compat-data': 7.17.10
+      '@babel/helper-compilation-targets': 7.18.2
+      '@babel/helper-plugin-utils': 7.17.12
+      '@babel/plugin-syntax-object-rest-spread': 7.8.3
+      '@babel/plugin-transform-parameters': 7.17.12
+    dev: true
+
   /@babel/plugin-proposal-object-rest-spread/7.18.0_@babel+core@7.18.0:
     resolution:
       {
@@ -2137,6 +2201,18 @@ packages:
       '@babel/core': 7.18.0
       '@babel/helper-plugin-utils': 7.16.7
 
+  /@babel/plugin-syntax-jsx/7.14.5:
+    resolution:
+      {
+        integrity: sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==,
+      }
+    engines: { node: '>=6.9.0' }
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/helper-plugin-utils': 7.17.12
+    dev: true
+
   /@babel/plugin-syntax-jsx/7.14.5_@babel+core@7.18.0:
     resolution:
       {
@@ -2183,6 +2259,17 @@ packages:
       '@babel/core': 7.18.0
       '@babel/helper-plugin-utils': 7.16.7
 
+  /@babel/plugin-syntax-object-rest-spread/7.8.3:
+    resolution:
+      {
+        integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==,
+      }
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/helper-plugin-utils': 7.17.12
+    dev: true
+
   /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.18.0:
     resolution:
       {
@@ -2890,6 +2977,18 @@ packages:
       '@babel/helper-plugin-utils': 7.16.7
     dev: true
 
+  /@babel/plugin-transform-parameters/7.17.12:
+    resolution:
+      {
+        integrity: sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==,
+      }
+    engines: { node: '>=6.9.0' }
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/helper-plugin-utils': 7.17.12
+    dev: true
+
   /@babel/plugin-transform-parameters/7.17.12_@babel+core@7.18.0:
     resolution:
       {
@@ -4306,6 +4405,12 @@ packages:
       purgecss: 1.4.2
     dev: true
 
+  /@gar/promisify/1.1.3:
+    resolution:
+      {
+        integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==,
+      }
+
   /@grpc/grpc-js/0.8.1:
     resolution:
       {
@@ -5627,6 +5732,20 @@ packages:
       - supports-color
     dev: true
 
+  /@mdx-js/loader/0.18.0_react@18.2.0:
+    resolution:
+      {
+        integrity: sha512-eRgtB14JwyIiZZPXjrpYhSHHQ5+GtZ5cbG744EV2DZVKjxxg4OT/EtKc4JoxWHRK2HVU6W7cf8IXjQpqDviRuQ==,
+      }
+    dependencies:
+      '@mdx-js/mdx': 0.18.2
+      '@mdx-js/tag': 0.18.0_react@18.2.0
+      loader-utils: 1.4.0
+    transitivePeerDependencies:
+      - '@babel/core'
+      - react
+    dev: true
+
   /@mdx-js/loader/0.18.0_uuaxwgga6hqycsez5ok7v2wg4i:
     resolution:
       {
@@ -5641,6 +5760,27 @@ packages:
       - react
     dev: true
 
+  /@mdx-js/mdx/0.18.2:
+    resolution:
+      {
+        integrity: sha512-7DqNBOGPV+36qpH8YZmKI5uvuXhrGZFhJ4C9+9uaQSpH2hQg9xAfdzjSSEO8FQhAlu6wJtUgb72J5/eWdc1HFw==,
+      }
+    dependencies:
+      '@babel/plugin-proposal-object-rest-spread': 7.18.0
+      '@babel/plugin-syntax-jsx': 7.14.5
+      change-case: 3.1.0
+      detab: 2.0.4
+      mdast-util-to-hast: 4.0.0
+      remark-parse: 6.0.3
+      remark-squeeze-paragraphs: 3.0.4
+      to-style: 1.3.3
+      unified: 7.1.0
+      unist-builder: 1.0.4
+      unist-util-visit: 1.4.1
+    transitivePeerDependencies:
+      - '@babel/core'
+    dev: true
+
   /@mdx-js/mdx/0.18.2_@babel+core@7.18.0:
     resolution:
       {
@@ -5662,6 +5802,19 @@ packages:
       - '@babel/core'
     dev: true
 
+  /@mdx-js/react/2.1.3_react@18.2.0:
+    resolution:
+      {
+        integrity: sha512-11n4lTvvRyxq3OYbWJwEYM+7q6PE0GxKbk0AwYIIQmrRkxDeljIsjDQkKOgdr/orgRRbYy5zi+iERdnwe01CHQ==,
+      }
+    peerDependencies:
+      react: '>=16'
+    dependencies:
+      '@types/mdx': 2.0.2
+      '@types/react': 16.9.17
+      react: 18.2.0
+    dev: false
+
   /@mdx-js/tag/0.18.0_react@18.2.0:
     resolution:
       {
@@ -5742,6 +5895,15 @@ packages:
       }
     dev: true
 
+  /@npmcli/fs/1.1.1:
+    resolution:
+      {
+        integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==,
+      }
+    dependencies:
+      '@gar/promisify': 1.1.3
+      semver: 7.3.7
+
   /@npmcli/git/2.0.4:
     resolution:
       {
@@ -5781,7 +5943,6 @@ packages:
     engines: { node: '>=10' }
     dependencies:
       mkdirp: 1.0.4
-    dev: true
 
   /@npmcli/node-gyp/1.0.2:
     resolution:
@@ -6729,7 +6890,6 @@ packages:
         integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==,
       }
     engines: { node: '>= 6' }
-    dev: true
 
   /@types/amphtml-validator/1.0.0:
     resolution:
@@ -7220,6 +7380,13 @@ packages:
       }
     dev: true
 
+  /@types/mdx/2.0.2:
+    resolution:
+      {
+        integrity: sha512-mJGfgj4aWpiKb8C0nnJJchs1sHBHn0HugkVfqqyQi7Wn6mBRksLeQsPOFvih/Pu8L1vlDzfe/LidhVHBeUk3aQ==,
+      }
+    dev: false
+
   /@types/micromatch/4.0.2:
     resolution:
       {
@@ -7354,7 +7521,6 @@ packages:
       {
         integrity: sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==,
       }
-    dev: true
 
   /@types/q/1.5.2:
     resolution:
@@ -7405,7 +7571,6 @@ packages:
     dependencies:
       '@types/prop-types': 15.7.3
       csstype: 2.6.8
-    dev: true
 
   /@types/relay-runtime/13.0.0:
     resolution:
@@ -8146,7 +8311,6 @@ packages:
       {
         integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==,
       }
-    dev: true
 
   /abort-controller/3.0.0:
     resolution:
@@ -8303,7 +8467,6 @@ packages:
       debug: 4.3.4
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
   /agentkeepalive/3.4.1:
     resolution:
@@ -8327,7 +8490,6 @@ packages:
       humanize-ms: 1.2.1
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
   /aggregate-error/3.0.1:
     resolution:
@@ -8338,7 +8500,6 @@ packages:
     dependencies:
       clean-stack: 2.2.0
       indent-string: 4.0.0
-    dev: true
 
   /ajv-keywords/3.5.2_ajv@6.12.6:
     resolution:
@@ -8475,7 +8636,6 @@ packages:
         integrity: sha512-wFUFA5bg5dviipbQQ32yOQhl6gcJaJXiHE7dvR8VYPG97+J/GNC5FKGepKdEDUFeXRzDxPF1X/Btc8L+v7oqIQ==,
       }
     engines: { node: '>=4' }
-    dev: true
 
   /ansi-regex/4.1.0:
     resolution:
@@ -8592,7 +8752,6 @@ packages:
       {
         integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==,
       }
-    dev: true
 
   /are-we-there-yet/1.1.5:
     resolution:
@@ -8604,6 +8763,26 @@ packages:
       readable-stream: 2.3.7
     dev: true
 
+  /are-we-there-yet/2.0.0:
+    resolution:
+      {
+        integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==,
+      }
+    engines: { node: '>=10' }
+    dependencies:
+      delegates: 1.0.0
+      readable-stream: 3.6.0
+
+  /are-we-there-yet/3.0.1:
+    resolution:
+      {
+        integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==,
+      }
+    engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 }
+    dependencies:
+      delegates: 1.0.0
+      readable-stream: 3.6.0
+
   /arg/4.1.0:
     resolution:
       {
@@ -8895,7 +9074,6 @@ packages:
       }
     dependencies:
       safer-buffer: 2.1.2
-    dev: true
 
   /assert-plus/1.0.0:
     resolution:
@@ -8903,7 +9081,6 @@ packages:
         integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==,
       }
     engines: { node: '>=0.8' }
-    dev: true
 
   /assert/2.0.0:
     resolution:
@@ -8955,6 +9132,12 @@ packages:
       }
     dev: true
 
+  /async-foreach/0.1.3:
+    resolution:
+      {
+        integrity: sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==,
+      }
+
   /async-retry/1.2.1:
     resolution:
       {
@@ -9015,7 +9198,6 @@ packages:
       {
         integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==,
       }
-    dev: true
 
   /asyncro/3.0.0:
     resolution:
@@ -9110,14 +9292,12 @@ packages:
       {
         integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==,
       }
-    dev: true
 
   /aws4/1.9.0:
     resolution:
       {
         integrity: sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==,
       }
-    dev: true
 
   /axe-core/4.3.5:
     resolution:
@@ -9442,7 +9622,6 @@ packages:
       }
     dependencies:
       tweetnacl: 0.14.5
-    dev: true
 
   /before-after-hook/1.4.0:
     resolution:
@@ -9941,6 +10120,34 @@ packages:
       - bluebird
     dev: true
 
+  /cacache/15.3.0:
+    resolution:
+      {
+        integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==,
+      }
+    engines: { node: '>= 10' }
+    dependencies:
+      '@npmcli/fs': 1.1.1
+      '@npmcli/move-file': 1.0.1
+      chownr: 2.0.0
+      fs-minipass: 2.1.0
+      glob: 7.2.0
+      infer-owner: 1.0.4
+      lru-cache: 6.0.0
+      minipass: 3.1.3
+      minipass-collect: 1.0.2
+      minipass-flush: 1.0.5
+      minipass-pipeline: 1.2.4
+      mkdirp: 1.0.4
+      p-map: 4.0.0
+      promise-inflight: 1.0.1
+      rimraf: 3.0.2
+      ssri: 8.0.1
+      tar: 6.1.11
+      unique-filename: 1.1.1
+    transitivePeerDependencies:
+      - bluebird
+
   /cache-base/1.0.1:
     resolution:
       {
@@ -10181,7 +10388,6 @@ packages:
       {
         integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==,
       }
-    dev: true
 
   /ccount/1.1.0:
     resolution:
@@ -10503,7 +10709,6 @@ packages:
         integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==,
       }
     engines: { node: '>=10' }
-    dev: true
 
   /chrome-trace-event/1.0.2:
     resolution:
@@ -10565,7 +10770,6 @@ packages:
         integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==,
       }
     engines: { node: '>=6' }
-    dev: true
 
   /cli-boxes/2.2.1:
     resolution:
@@ -10674,7 +10878,6 @@ packages:
       string-width: 4.2.3
       strip-ansi: 6.0.1
       wrap-ansi: 7.0.0
-    dev: true
 
   /clone-deep/4.0.1:
     resolution:
@@ -10830,6 +11033,13 @@ packages:
       simple-swizzle: 0.2.2
     dev: true
 
+  /color-support/1.1.3:
+    resolution:
+      {
+        integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==,
+      }
+    hasBin: true
+
   /color/3.1.3:
     resolution:
       {
@@ -10873,7 +11083,6 @@ packages:
     engines: { node: '>= 0.8' }
     dependencies:
       delayed-stream: 1.0.0
-    dev: true
 
   /comma-separated-tokens/1.0.8:
     resolution:
@@ -11084,7 +11293,6 @@ packages:
       {
         integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==,
       }
-    dev: true
 
   /constant-case/2.0.0:
     resolution:
@@ -11341,7 +11549,6 @@ packages:
       {
         integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==,
       }
-    dev: true
 
   /cors/2.8.5:
     resolution:
@@ -12023,7 +12230,6 @@ packages:
       {
         integrity: sha512-msVS9qTuMT5zwAGCVm4mxfrZ18BNc6Csd0oJAtiFMZ1FAx1CCvy2+5MDmYoix63LM/6NDbNtodCiGYGmFgO0dA==,
       }
-    dev: true
 
   /csstype/3.0.10:
     resolution:
@@ -12092,7 +12298,6 @@ packages:
     engines: { node: '>=0.10' }
     dependencies:
       assert-plus: 1.0.0
-    dev: true
 
   /data-uri-to-buffer/3.0.1:
     resolution:
@@ -12463,14 +12668,12 @@ packages:
         integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==,
       }
     engines: { node: '>=0.4.0' }
-    dev: true
 
   /delegates/1.0.0:
     resolution:
       {
         integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==,
       }
-    dev: true
 
   /depd/1.1.2:
     resolution:
@@ -12478,7 +12681,6 @@ packages:
         integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==,
       }
     engines: { node: '>= 0.6' }
-    dev: true
 
   /deprecation/2.3.1:
     resolution:
@@ -12544,7 +12746,6 @@ packages:
       }
     engines: { node: '>=0.10' }
     hasBin: true
-    dev: true
 
   /detect-newline/3.1.0:
     resolution:
@@ -12952,7 +13153,6 @@ packages:
     dependencies:
       jsbn: 0.1.1
       safer-buffer: 2.1.2
-    dev: true
 
   /ecdsa-sig-formatter/1.0.11:
     resolution:
@@ -13080,7 +13280,6 @@ packages:
       }
     dependencies:
       iconv-lite: 0.6.2
-    dev: true
 
   /end-of-stream/1.4.4:
     resolution:
@@ -13129,7 +13328,6 @@ packages:
         integrity: sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==,
       }
     engines: { node: '>=6' }
-    dev: true
 
   /envinfo/7.7.4:
     resolution:
@@ -13149,7 +13347,6 @@ packages:
       {
         integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==,
       }
-    dev: true
 
   /error-ex/1.3.2:
     resolution:
@@ -14088,6 +14285,13 @@ packages:
       homedir-polyfill: 1.0.3
     dev: true
 
+  /expect-type/0.14.2:
+    resolution:
+      {
+        integrity: sha512-ed3+tr5ujbIYXZ8Pl/VgIphwJQ0q5tBLGGdn7Zvwt1WyPBRX83xjT5pT77P/GkuQbctx0K2ZNSSan7eruJqTCQ==,
+      }
+    dev: true
+
   /expect/26.6.2:
     resolution:
       {
@@ -14192,7 +14396,6 @@ packages:
       {
         integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==,
       }
-    dev: true
 
   /external-editor/2.2.0:
     resolution:
@@ -14251,7 +14454,6 @@ packages:
         integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==,
       }
     engines: { '0': node >=0.6.0 }
-    dev: true
 
   /extsprintf/1.4.0:
     resolution:
@@ -14259,7 +14461,6 @@ packages:
         integrity: sha512-6NW8DZ8pWBc5NbGYUiqqccj9dXnuSzilZYqprdKJBZsQodGH9IyUoFOGxIWVDcBzHMb8ET24aqx9p66tZEWZkA==,
       }
     engines: { '0': node >=0.6.0 }
-    dev: true
 
   /faker/5.5.3:
     resolution:
@@ -14391,6 +14592,16 @@ packages:
       ua-parser-js: 0.7.31
     dev: true
 
+  /fibers/5.0.3:
+    resolution:
+      {
+        integrity: sha512-/qYTSoZydQkM21qZpGLDLuCq8c+B8KhuCQ1kLPvnRNhxhVbvrpmH9l2+Lblf5neDuEsY4bfT7LeO553TXQDvJw==,
+      }
+    engines: { node: '>=10.0.0' }
+    requiresBuild: true
+    dependencies:
+      detect-libc: 1.0.3
+
   /figgy-pudding/3.5.1:
     resolution:
       {
@@ -14749,7 +14960,6 @@ packages:
       {
         integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==,
       }
-    dev: true
 
   /form-data/2.3.3:
     resolution:
@@ -14761,7 +14971,6 @@ packages:
       asynckit: 0.4.0
       combined-stream: 1.0.8
       mime-types: 2.1.30
-    dev: true
 
   /form-data/2.5.1:
     resolution:
@@ -14907,7 +15116,6 @@ packages:
     engines: { node: '>= 8' }
     dependencies:
       minipass: 3.1.3
-    dev: true
 
   /fs.realpath/1.0.0:
     resolution:
@@ -15001,6 +15209,48 @@ packages:
       wide-align: 1.1.3
     dev: true
 
+  /gauge/3.0.2:
+    resolution:
+      {
+        integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==,
+      }
+    engines: { node: '>=10' }
+    dependencies:
+      aproba: 2.0.0
+      color-support: 1.1.3
+      console-control-strings: 1.1.0
+      has-unicode: 2.0.1
+      object-assign: 4.1.1
+      signal-exit: 3.0.3
+      string-width: 4.2.3
+      strip-ansi: 6.0.1
+      wide-align: 1.1.3
+
+  /gauge/4.0.4:
+    resolution:
+      {
+        integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==,
+      }
+    engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 }
+    dependencies:
+      aproba: 2.0.0
+      color-support: 1.1.3
+      console-control-strings: 1.1.0
+      has-unicode: 2.0.1
+      signal-exit: 3.0.7
+      string-width: 4.2.3
+      strip-ansi: 6.0.1
+      wide-align: 1.1.5
+
+  /gaze/1.1.3:
+    resolution:
+      {
+        integrity: sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==,
+      }
+    engines: { node: '>= 4.0.0' }
+    dependencies:
+      globule: 1.3.4
+
   /generic-names/2.0.1:
     resolution:
       {
@@ -15023,7 +15273,6 @@ packages:
         integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==,
       }
     engines: { node: 6.* || 8.* || >= 10.* }
-    dev: true
 
   /get-intrinsic/1.1.1:
     resolution:
@@ -15088,7 +15337,6 @@ packages:
         integrity: sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==,
       }
     engines: { node: '>=0.10.0' }
-    dev: true
 
   /get-stream/3.0.0:
     resolution:
@@ -15150,7 +15398,6 @@ packages:
       }
     dependencies:
       assert-plus: 1.0.0
-    dev: true
 
   /gh-got/6.0.0:
     resolution:
@@ -15558,6 +15805,17 @@ packages:
       }
     dev: true
 
+  /globule/1.3.4:
+    resolution:
+      {
+        integrity: sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==,
+      }
+    engines: { node: '>= 0.10' }
+    dependencies:
+      glob: 7.1.7
+      lodash: 4.17.21
+      minimatch: 3.0.4
+
   /got/10.7.0:
     resolution:
       {
@@ -15636,7 +15894,6 @@ packages:
       {
         integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==,
       }
-    dev: true
 
   /graceful-fs/4.2.9:
     resolution:
@@ -15715,7 +15972,6 @@ packages:
         integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==,
       }
     engines: { node: '>=4' }
-    dev: true
 
   /har-validator/5.1.3:
     resolution:
@@ -15727,7 +15983,6 @@ packages:
     dependencies:
       ajv: 6.12.6
       har-schema: 2.0.0
-    dev: true
 
   /hard-rejection/2.1.0:
     resolution:
@@ -15838,7 +16093,6 @@ packages:
       {
         integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==,
       }
-    dev: true
 
   /has-value/0.3.1:
     resolution:
@@ -16107,7 +16361,6 @@ packages:
     engines: { node: '>=10' }
     dependencies:
       lru-cache: 6.0.0
-    dev: true
 
   /hsl-regex/1.0.0:
     resolution:
@@ -16228,7 +16481,6 @@ packages:
       {
         integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==,
       }
-    dev: true
 
   /http-errors/1.7.2:
     resolution:
@@ -16287,7 +16539,6 @@ packages:
       debug: 4.3.4
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
   /http-proxy/1.18.1:
     resolution:
@@ -16313,7 +16564,6 @@ packages:
       assert-plus: 1.0.0
       jsprim: 1.4.1
       sshpk: 1.16.1
-    dev: true
 
   /http-status/1.5.2:
     resolution:
@@ -16351,7 +16601,6 @@ packages:
       debug: 4.3.4
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
   /human-signals/1.1.1:
     resolution:
@@ -16375,7 +16624,6 @@ packages:
       }
     dependencies:
       ms: 2.1.2
-    dev: true
 
   /husky/8.0.0:
     resolution:
@@ -16403,7 +16651,6 @@ packages:
     engines: { node: '>=0.10.0' }
     dependencies:
       safer-buffer: 2.1.2
-    dev: true
 
   /icss-replace-symbols/1.1.0:
     resolution:
@@ -16615,7 +16862,6 @@ packages:
       {
         integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==,
       }
-    dev: true
 
   /inflight/1.0.6:
     resolution:
@@ -16777,7 +17023,6 @@ packages:
       {
         integrity: sha512-rBtCAQAJm8A110nbwn6YdveUnuZH3WrC36IwkRXxDnq53JvXA2NVQvB7IHyKomxK1MJ4VDNw3UtFDdXQ+AvLYA==,
       }
-    dev: true
 
   /ipaddr.js/1.9.0:
     resolution:
@@ -17118,7 +17363,6 @@ packages:
         integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==,
       }
     engines: { node: '>=4' }
-    dev: true
 
   /is-fullwidth-code-point/3.0.0:
     resolution:
@@ -17221,7 +17465,6 @@ packages:
       {
         integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==,
       }
-    dev: true
 
   /is-lower-case/1.1.3:
     resolution:
@@ -17552,7 +17795,6 @@ packages:
       {
         integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==,
       }
-    dev: true
 
   /is-unc-path/1.0.0:
     resolution:
@@ -17730,7 +17972,6 @@ packages:
       {
         integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==,
       }
-    dev: true
 
   /istanbul-lib-coverage/3.0.0:
     resolution:
@@ -18556,7 +18797,6 @@ packages:
       {
         integrity: sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==,
       }
-    dev: true
 
   /js-tokens/4.0.0:
     resolution:
@@ -18579,7 +18819,6 @@ packages:
       {
         integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==,
       }
-    dev: true
 
   /jscodeshift/0.13.1_@babel+preset-env@7.18.0:
     resolution:
@@ -18731,7 +18970,6 @@ packages:
       {
         integrity: sha512-a3xHnILGMtk+hDOqNwHzF6e2fNbiMrXZvxKQiEv2MlgQP+pjIOzqAmKYD2mDpXYE/44M7g+n9p2bKkYWDUcXCQ==,
       }
-    dev: true
 
   /json-stable-stringify-without-jsonify/1.0.1:
     resolution:
@@ -18744,7 +18982,6 @@ packages:
       {
         integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==,
       }
-    dev: true
 
   /json-to-ast/2.1.0:
     resolution:
@@ -18837,7 +19074,6 @@ packages:
       extsprintf: 1.3.0
       json-schema: 0.2.3
       verror: 1.10.0
-    dev: true
 
   /jsx-ast-utils/3.2.1:
     resolution:
@@ -19800,6 +20036,33 @@ packages:
       - supports-color
     dev: true
 
+  /make-fetch-happen/9.1.0:
+    resolution:
+      {
+        integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==,
+      }
+    engines: { node: '>= 10' }
+    dependencies:
+      agentkeepalive: 4.1.4
+      cacache: 15.3.0
+      http-cache-semantics: 4.1.0
+      http-proxy-agent: 4.0.1
+      https-proxy-agent: 5.0.0
+      is-lambda: 1.0.1
+      lru-cache: 6.0.0
+      minipass: 3.1.3
+      minipass-collect: 1.0.2
+      minipass-fetch: 1.3.3
+      minipass-flush: 1.0.5
+      minipass-pipeline: 1.2.4
+      negotiator: 0.6.2
+      promise-retry: 2.0.1
+      socks-proxy-agent: 6.2.1
+      ssri: 8.0.1
+    transitivePeerDependencies:
+      - bluebird
+      - supports-color
+
   /make-iterator/1.0.1:
     resolution:
       {
@@ -20117,6 +20380,26 @@ packages:
       yargs-parser: 20.2.4
     dev: true
 
+  /meow/9.0.0:
+    resolution:
+      {
+        integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==,
+      }
+    engines: { node: '>=10' }
+    dependencies:
+      '@types/minimist': 1.2.0
+      camelcase-keys: 6.2.2
+      decamelize: 1.2.0
+      decamelize-keys: 1.1.0
+      hard-rejection: 2.1.0
+      minimist-options: 4.1.0
+      normalize-package-data: 3.0.0
+      read-pkg-up: 7.0.1
+      redent: 3.0.0
+      trim-newlines: 3.0.0
+      type-fest: 0.18.1
+      yargs-parser: 20.2.4
+
   /merge-descriptors/1.0.1:
     resolution: { integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= }
     dev: true
@@ -20354,7 +20637,6 @@ packages:
         integrity: sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==,
       }
     engines: { node: '>= 0.6' }
-    dev: true
 
   /mime-types/2.1.30:
     resolution:
@@ -20364,7 +20646,6 @@ packages:
     engines: { node: '>= 0.6' }
     dependencies:
       mime-db: 1.47.0
-    dev: true
 
   /mime/1.6.0:
     resolution:
@@ -20452,7 +20733,6 @@ packages:
       }
     dependencies:
       brace-expansion: 1.1.11
-    dev: true
 
   /minimatch/3.1.2:
     resolution:
@@ -20497,7 +20777,6 @@ packages:
     engines: { node: '>= 8' }
     dependencies:
       minipass: 3.1.3
-    dev: true
 
   /minipass-fetch/1.3.3:
     resolution:
@@ -20511,7 +20790,6 @@ packages:
       minizlib: 2.1.2
     optionalDependencies:
       encoding: 0.1.13
-    dev: true
 
   /minipass-flush/1.0.5:
     resolution:
@@ -20521,7 +20799,6 @@ packages:
     engines: { node: '>= 8' }
     dependencies:
       minipass: 3.1.3
-    dev: true
 
   /minipass-json-stream/1.0.1:
     resolution:
@@ -20541,7 +20818,6 @@ packages:
     engines: { node: '>=8' }
     dependencies:
       minipass: 3.1.3
-    dev: true
 
   /minipass-sized/1.0.3:
     resolution:
@@ -20551,7 +20827,6 @@ packages:
     engines: { node: '>=8' }
     dependencies:
       minipass: 3.1.3
-    dev: true
 
   /minipass/2.9.0:
     resolution:
@@ -20571,7 +20846,6 @@ packages:
     engines: { node: '>=8' }
     dependencies:
       yallist: 4.0.0
-    dev: true
 
   /minizlib/1.3.3:
     resolution:
@@ -20591,7 +20865,6 @@ packages:
     dependencies:
       minipass: 3.1.3
       yallist: 4.0.0
-    dev: true
 
   /mixin-deep/1.3.2:
     resolution:
@@ -20638,7 +20911,6 @@ packages:
       }
     engines: { node: '>=10' }
     hasBin: true
-    dev: true
 
   /modify-values/1.0.1:
     resolution:
@@ -20761,7 +21033,6 @@ packages:
       {
         integrity: sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==,
       }
-    dev: true
 
   /nanoid/3.1.30:
     resolution:
@@ -20831,7 +21102,6 @@ packages:
         integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==,
       }
     engines: { node: '>= 0.6' }
-    dev: true
 
   /neo-async/2.6.1:
     resolution:
@@ -21025,6 +21295,28 @@ packages:
       which: 2.0.2
     dev: true
 
+  /node-gyp/8.4.1:
+    resolution:
+      {
+        integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==,
+      }
+    engines: { node: '>= 10.12.0' }
+    hasBin: true
+    dependencies:
+      env-paths: 2.2.0
+      glob: 7.2.0
+      graceful-fs: 4.2.10
+      make-fetch-happen: 9.1.0
+      nopt: 5.0.0
+      npmlog: 6.0.2
+      rimraf: 3.0.2
+      semver: 7.3.7
+      tar: 6.1.11
+      which: 2.0.2
+    transitivePeerDependencies:
+      - bluebird
+      - supports-color
+
   /node-html-parser/5.3.3:
     resolution:
       {
@@ -21081,6 +21373,34 @@ packages:
         integrity: sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==,
       }
 
+  /node-sass/7.0.3:
+    resolution:
+      {
+        integrity: sha512-8MIlsY/4dXUkJDYht9pIWBhMil3uHmE8b/AdJPjmFn1nBx9X9BASzfzmsCy0uCCb8eqI3SYYzVPDswWqSx7gjw==,
+      }
+    engines: { node: '>=12' }
+    hasBin: true
+    requiresBuild: true
+    dependencies:
+      async-foreach: 0.1.3
+      chalk: 4.1.2
+      cross-spawn: 7.0.3
+      gaze: 1.1.3
+      get-stdin: 4.0.1
+      glob: 7.2.0
+      lodash: 4.17.21
+      meow: 9.0.0
+      nan: 2.15.0
+      node-gyp: 8.4.1
+      npmlog: 5.0.1
+      request: 2.88.2
+      sass-graph: 4.0.1
+      stdout-stream: 1.4.1
+      true-case-path: 1.0.3
+    transitivePeerDependencies:
+      - bluebird
+      - supports-color
+
   /node-version/1.1.3:
     resolution:
       {
@@ -21117,7 +21437,6 @@ packages:
     hasBin: true
     dependencies:
       abbrev: 1.1.1
-    dev: true
 
   /normalize-html-whitespace/1.0.0:
     resolution:
@@ -21149,7 +21468,6 @@ packages:
       resolve: 1.22.0
       semver: 7.3.7
       validate-npm-package-license: 3.0.4
-    dev: true
 
   /normalize-path/2.1.1:
     resolution:
@@ -21353,6 +21671,29 @@ packages:
       set-blocking: 2.0.0
     dev: true
 
+  /npmlog/5.0.1:
+    resolution:
+      {
+        integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==,
+      }
+    dependencies:
+      are-we-there-yet: 2.0.0
+      console-control-strings: 1.1.0
+      gauge: 3.0.2
+      set-blocking: 2.0.0
+
+  /npmlog/6.0.2:
+    resolution:
+      {
+        integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==,
+      }
+    engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 }
+    dependencies:
+      are-we-there-yet: 3.0.1
+      console-control-strings: 1.1.0
+      gauge: 4.0.4
+      set-blocking: 2.0.0
+
   /nprogress/0.2.0:
     resolution: { integrity: sha1-y480xTIT2JVyP8urkH6UIq28r7E= }
     dev: true
@@ -21408,7 +21749,6 @@ packages:
       {
         integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==,
       }
-    dev: true
 
   /object-assign/4.1.1:
     resolution:
@@ -21935,7 +22275,6 @@ packages:
     engines: { node: '>=10' }
     dependencies:
       aggregate-error: 3.0.1
-    dev: true
 
   /p-pipe/3.1.0:
     resolution:
@@ -22489,7 +22828,6 @@ packages:
       {
         integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==,
       }
-    dev: true
 
   /picocolors/1.0.0:
     resolution:
@@ -23934,7 +24272,6 @@ packages:
       {
         integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==,
       }
-    dev: true
 
   /process/0.11.10:
     resolution: { integrity: sha1-czIwDoQBYb2j5podHZGn1LwW8YI= }
@@ -23958,7 +24295,6 @@ packages:
     peerDependenciesMeta:
       bluebird:
         optional: true
-    dev: true
 
   /promise-polyfill/6.1.0:
     resolution:
@@ -23991,7 +24327,6 @@ packages:
     dependencies:
       err-code: 2.0.3
       retry: 0.12.0
-    dev: true
 
   /promise.series/0.2.0:
     resolution:
@@ -24119,7 +24454,6 @@ packages:
       {
         integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==,
       }
-    dev: true
 
   /public-encrypt/4.0.3:
     resolution:
@@ -24212,7 +24546,6 @@ packages:
         integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==,
       }
     engines: { node: '>=0.6' }
-    dev: true
 
   /qs/6.7.0:
     resolution:
@@ -24382,6 +24715,20 @@ packages:
       scheduler: 0.0.0-experimental-e6a062bd2-20220913
     dev: true
 
+  /react-dom/17.0.2_react@17.0.2:
+    resolution:
+      {
+        integrity: sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==,
+      }
+    peerDependencies:
+      react: 17.0.2
+    dependencies:
+      loose-envify: 1.4.0
+      object-assign: 4.1.1
+      react: 17.0.2
+      scheduler: 0.20.2
+    dev: true
+
   /react-dom/17.0.2_react@18.2.0:
     resolution:
       {
@@ -24444,7 +24791,7 @@ packages:
     engines: { node: '>=0.10.0' }
     dev: true
 
-  /react-server-dom-webpack/0.0.0-experimental-975b64464-20220914_webpack@5.74.0:
+  /react-server-dom-webpack/0.0.0-experimental-975b64464-20220914_zbur65pq5ttfo7ncb2n2vp2s3m:
     resolution:
       {
         integrity: sha512-RU8yWstn6EpbprfOEnpCpp4fzSTgRLIjvWjJYZq2AiVrXXaAl54stVC1LlZ5Ox4hNXBc6K/FAuQqF4nopXx5Aw==,
@@ -24457,6 +24804,7 @@ packages:
       acorn: 6.4.2
       loose-envify: 1.4.0
       neo-async: 2.6.2
+      react: 18.2.0
       webpack: 5.74.0
     dev: true
 
@@ -24522,7 +24870,6 @@ packages:
     engines: { node: '>=0.10.0' }
     dependencies:
       loose-envify: 1.4.0
-    dev: true
 
   /read-cmd-shim/2.0.0:
     resolution:
@@ -24710,7 +25057,6 @@ packages:
       safe-buffer: 5.1.2
       string_decoder: 1.1.1
       util-deprecate: 1.0.2
-    dev: true
 
   /readable-stream/3.6.0:
     resolution:
@@ -24722,7 +25068,6 @@ packages:
       inherits: 2.0.4
       string_decoder: 1.3.0
       util-deprecate: 1.0.2
-    dev: true
 
   /readdir-scoped-modules/1.1.0:
     resolution:
@@ -25298,12 +25643,10 @@ packages:
       tough-cookie: 2.5.0
       tunnel-agent: 0.6.0
       uuid: 3.3.3
-    dev: true
 
   /require-directory/2.1.1:
     resolution: { integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I= }
     engines: { node: '>=0.10.0' }
-    dev: true
 
   /require-from-string/1.2.1:
     resolution: { integrity: sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg= }
@@ -25523,7 +25866,6 @@ packages:
   /retry/0.12.0:
     resolution: { integrity: sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= }
     engines: { node: '>= 4' }
-    dev: true
 
   /reusify/1.0.4:
     resolution:
@@ -25760,7 +26102,6 @@ packages:
       {
         integrity: sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==,
       }
-    dev: true
 
   /safe-identifier/0.4.2:
     resolution:
@@ -25784,7 +26125,20 @@ packages:
         integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==,
       }
 
-  /sass-loader/12.4.0_webpack@5.74.0:
+  /sass-graph/4.0.1:
+    resolution:
+      {
+        integrity: sha512-5YCfmGBmxoIRYHnKK2AKzrAkCoQ8ozO+iumT8K4tXJXRVCPf+7s1/9KxTSW3Rbvf+7Y7b4FR3mWyLnQr3PHocA==,
+      }
+    engines: { node: '>=12' }
+    hasBin: true
+    dependencies:
+      glob: 7.2.0
+      lodash: 4.17.21
+      scss-tokenizer: 0.4.3
+      yargs: 17.5.1
+
+  /sass-loader/12.4.0_y7k4qxzyfvxio3t476zhrzlwf4:
     resolution:
       {
         integrity: sha512-7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg==,
@@ -25803,8 +26157,11 @@ packages:
       sass:
         optional: true
     dependencies:
+      fibers: 5.0.3
       klona: 2.0.4
       neo-async: 2.6.2
+      node-sass: 7.0.3
+      sass: 1.54.0
       webpack: 5.74.0
     dev: true
 
@@ -25902,6 +26259,15 @@ packages:
       ajv-keywords: 3.5.2_ajv@6.12.6
     dev: true
 
+  /scss-tokenizer/0.4.3:
+    resolution:
+      {
+        integrity: sha512-raKLgf1LI5QMQnG+RxHz6oK0sL3x3I4FN2UDLqgLOGO8hodECNnNh5BXn7fAyBxrA8zVzdQizQ6XjNJQ+uBwMw==,
+      }
+    dependencies:
+      js-base64: 2.5.1
+      source-map: 0.7.3
+
   /seedrandom/3.0.5:
     resolution:
       {
@@ -26070,7 +26436,6 @@ packages:
       {
         integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==,
       }
-    dev: true
 
   /set-immediate-shim/1.0.1:
     resolution: { integrity: sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= }
@@ -26198,6 +26563,12 @@ packages:
         integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==,
       }
 
+  /signal-exit/3.0.7:
+    resolution:
+      {
+        integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==,
+      }
+
   /simple-swizzle/0.2.2:
     resolution:
       {
@@ -26278,7 +26649,6 @@ packages:
         integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==,
       }
     engines: { node: '>= 6.0.0', npm: '>= 3.0.0' }
-    dev: true
 
   /snake-case/2.1.0:
     resolution:
@@ -26353,6 +26723,19 @@ packages:
       - supports-color
     dev: true
 
+  /socks-proxy-agent/6.2.1:
+    resolution:
+      {
+        integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==,
+      }
+    engines: { node: '>= 10' }
+    dependencies:
+      agent-base: 6.0.2
+      debug: 4.3.4
+      socks: 2.6.2
+    transitivePeerDependencies:
+      - supports-color
+
   /socks/2.6.2:
     resolution:
       {
@@ -26362,7 +26745,6 @@ packages:
     dependencies:
       ip: 1.1.5
       smart-buffer: 4.2.0
-    dev: true
 
   /sort-keys/2.0.0:
     resolution: { integrity: sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= }
@@ -26457,7 +26839,6 @@ packages:
         integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==,
       }
     engines: { node: '>= 8' }
-    dev: true
 
   /source-map/0.8.0-beta.0:
     resolution:
@@ -26601,7 +26982,6 @@ packages:
       jsbn: 0.1.1
       safer-buffer: 2.1.2
       tweetnacl: 0.14.5
-    dev: true
 
   /ssri/8.0.1:
     resolution:
@@ -26611,7 +26991,6 @@ packages:
     engines: { node: '>= 8' }
     dependencies:
       minipass: 3.1.3
-    dev: true
 
   /stable/0.1.8:
     resolution:
@@ -26663,6 +27042,14 @@ packages:
     engines: { node: '>= 0.6' }
     dev: true
 
+  /stdout-stream/1.4.1:
+    resolution:
+      {
+        integrity: sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==,
+      }
+    dependencies:
+      readable-stream: 2.3.7
+
   /stream-browserify/3.0.0:
     resolution:
       {
@@ -26761,7 +27148,6 @@ packages:
     dependencies:
       is-fullwidth-code-point: 2.0.0
       strip-ansi: 4.0.0
-    dev: true
 
   /string-width/3.1.0:
     resolution:
@@ -26881,7 +27267,6 @@ packages:
       }
     dependencies:
       safe-buffer: 5.1.2
-    dev: true
 
   /string_decoder/1.3.0:
     resolution:
@@ -26890,7 +27275,6 @@ packages:
       }
     dependencies:
       safe-buffer: 5.2.0
-    dev: true
 
   /stringify-entities/3.1.0:
     resolution:
@@ -26933,7 +27317,6 @@ packages:
     engines: { node: '>=4' }
     dependencies:
       ansi-regex: 3.0.0
-    dev: true
 
   /strip-ansi/5.2.0:
     resolution:
@@ -27093,7 +27476,7 @@ packages:
       postcss-load-plugins: 2.3.0
     dev: true
 
-  /styled-jsx/5.0.7_@babel+core@7.18.0:
+  /styled-jsx/5.0.7_uuaxwgga6hqycsez5ok7v2wg4i:
     resolution:
       {
         integrity: sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==,
@@ -27110,6 +27493,7 @@ packages:
         optional: true
     dependencies:
       '@babel/core': 7.18.0
+      react: 18.2.0
     dev: false
 
   /stylehacks/4.0.3:
@@ -27384,7 +27768,6 @@ packages:
       minizlib: 2.1.2
       mkdirp: 1.0.4
       yallist: 4.0.0
-    dev: true
 
   /taskr/1.1.0:
     resolution: { integrity: sha1-TynQrOJvTerppHjqv5qgQy6IRDg= }
@@ -27819,7 +28202,6 @@ packages:
     dependencies:
       psl: 1.8.0
       punycode: 2.1.1
-    dev: true
 
   /tough-cookie/4.0.0:
     resolution:
@@ -27910,6 +28292,14 @@ packages:
       }
     dev: true
 
+  /true-case-path/1.0.3:
+    resolution:
+      {
+        integrity: sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==,
+      }
+    dependencies:
+      glob: 7.2.0
+
   /tsconfig-paths/3.14.1:
     resolution:
       {
@@ -27988,7 +28378,6 @@ packages:
       }
     dependencies:
       safe-buffer: 5.2.0
-    dev: true
 
   /turbo-android-arm64/1.3.2-canary.1:
     resolution:
@@ -28173,7 +28562,6 @@ packages:
       {
         integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==,
       }
-    dev: true
 
   /type-check/0.3.2:
     resolution: { integrity: sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= }
@@ -28220,7 +28608,6 @@ packages:
         integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==,
       }
     engines: { node: '>=10' }
-    dev: true
 
   /type-fest/0.20.2:
     resolution:
@@ -28574,7 +28961,6 @@ packages:
       }
     dependencies:
       unique-slug: 2.0.2
-    dev: true
 
   /unique-slug/2.0.2:
     resolution:
@@ -28583,7 +28969,6 @@ packages:
       }
     dependencies:
       imurmurhash: 0.1.4
-    dev: true
 
   /unique-string/1.0.0:
     resolution:
@@ -28767,7 +29152,7 @@ packages:
       unist-util-visit-parents: 3.1.1
     dev: true
 
-  /unistore/3.4.1:
+  /unistore/3.4.1_react@18.2.0:
     resolution:
       {
         integrity: sha512-p2Ej8qqrqcD10Ah0ZUKUU/mhRB8pM4q6gzjxq9kZpgxa8dks7oHT8jDP4CqLhoRof3RXOZLKB9EBV1DTzHiJRw==,
@@ -28780,6 +29165,8 @@ packages:
         optional: true
       react:
         optional: true
+    dependencies:
+      react: 18.2.0
     dev: true
 
   /universal-user-agent/6.0.0:
@@ -28965,13 +29352,15 @@ packages:
     engines: { node: '>= 4' }
     dev: true
 
-  /use-sync-external-store/1.2.0:
+  /use-sync-external-store/1.2.0_react@18.2.0:
     resolution:
       {
         integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==,
       }
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0
+    dependencies:
+      react: 18.2.0
     dev: false
 
   /use/3.1.1:
@@ -28987,7 +29376,6 @@ packages:
       {
         integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==,
       }
-    dev: true
 
   /util-promisify/2.1.0:
     resolution: { integrity: sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= }
@@ -29031,7 +29419,6 @@ packages:
       }
     deprecated: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
     hasBin: true
-    dev: true
 
   /uuid/8.3.2:
     resolution:
@@ -29108,7 +29495,6 @@ packages:
       assert-plus: 1.0.0
       core-util-is: 1.0.2
       extsprintf: 1.4.0
-    dev: true
 
   /vfile-find-up/5.0.1:
     resolution:
@@ -29581,7 +29967,14 @@ packages:
       }
     dependencies:
       string-width: 2.1.1
-    dev: true
+
+  /wide-align/1.1.5:
+    resolution:
+      {
+        integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==,
+      }
+    dependencies:
+      string-width: 4.2.3
 
   /widest-line/3.1.0:
     resolution:
@@ -29634,7 +30027,6 @@ packages:
       ansi-styles: 4.3.0
       string-width: 4.2.3
       strip-ansi: 6.0.1
-    dev: true
 
   /wrappy/1.0.2:
     resolution:
@@ -29810,7 +30202,6 @@ packages:
         integrity: sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==,
       }
     engines: { node: '>=10' }
-    dev: true
 
   /yallist/2.1.2:
     resolution: { integrity: sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= }
@@ -29862,7 +30253,6 @@ packages:
         integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==,
       }
     engines: { node: '>=10' }
-    dev: true
 
   /yargs-parser/21.0.1:
     resolution:
@@ -29870,7 +30260,6 @@ packages:
         integrity: sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==,
       }
     engines: { node: '>=12' }
-    dev: true
 
   /yargs/14.2.2:
     resolution:
@@ -29921,7 +30310,6 @@ packages:
       string-width: 4.2.3
       y18n: 5.0.5
       yargs-parser: 21.0.1
-    dev: true
 
   /yocto-queue/0.1.0:
     resolution:
diff --git a/test/unit/infer-get-server-side-props-type.test.ts b/test/unit/infer-get-server-side-props-type.test.ts
new file mode 100644
index 00000000000000..abe3c195ce2d5c
--- /dev/null
+++ b/test/unit/infer-get-server-side-props-type.test.ts
@@ -0,0 +1,69 @@
+import type {
+  InferGetServerSidePropsType,
+  GetServerSidePropsContext,
+} from 'next'
+import { expectTypeOf } from 'expect-type'
+
+describe('InferGetServerSidePropsType', () => {
+  it('should work with sync functions', async () => {
+    function getServerSideProps(context: GetServerSidePropsContext) {
+      if (context.params?.notFound) {
+        return {
+          notFound: true,
+        }
+      }
+
+      return {
+        props: {
+          foo: 'bar',
+        },
+      }
+    }
+
+    type PageProps = InferGetServerSidePropsType<typeof getServerSideProps>
+
+    expectTypeOf<PageProps>().toEqualTypeOf<{ foo: string }>()
+  })
+
+  it('should work with async functions', async () => {
+    async function getServerSideProps(context: GetServerSidePropsContext) {
+      if (context.params?.notFound) {
+        return {
+          notFound: true,
+        }
+      }
+
+      if (context.params?.redirect) {
+        return {
+          redirect: {
+            destination: '/',
+          },
+        }
+      }
+
+      return {
+        props: {
+          foo: 'bar',
+        },
+      }
+    }
+
+    type PageProps = InferGetServerSidePropsType<typeof getServerSideProps>
+
+    expectTypeOf<PageProps>().toEqualTypeOf<{ foo: string }>()
+  })
+
+  it('should work with promised props', async () => {
+    async function getServerSideProps() {
+      return {
+        props: Promise.resolve({
+          foo: 'bar',
+        }),
+      }
+    }
+
+    type PageProps = InferGetServerSidePropsType<typeof getServerSideProps>
+
+    expectTypeOf<PageProps>().toEqualTypeOf<{ foo: string }>()
+  })
+})
diff --git a/test/unit/infer-get-static-props.test.ts b/test/unit/infer-get-static-props.test.ts
new file mode 100644
index 00000000000000..3cef48a1cc5301
--- /dev/null
+++ b/test/unit/infer-get-static-props.test.ts
@@ -0,0 +1,52 @@
+import type { InferGetStaticPropsType, GetStaticPropsContext } from 'next'
+import { expectTypeOf } from 'expect-type'
+
+describe('InferGetServerSidePropsType', () => {
+  it('should work with sync functions', async () => {
+    function getStaticProps(context: GetStaticPropsContext) {
+      if (context.params?.notFound) {
+        return {
+          notFound: true,
+        }
+      }
+
+      return {
+        props: {
+          foo: 'bar',
+        },
+      }
+    }
+
+    type PageProps = InferGetStaticPropsType<typeof getStaticProps>
+
+    expectTypeOf<PageProps>().toEqualTypeOf<{ foo: string }>()
+  })
+
+  it('should work with async functions', async () => {
+    async function getStaticProps(context: GetStaticPropsContext) {
+      if (context.params?.notFound) {
+        return {
+          notFound: true,
+        }
+      }
+
+      if (context.params?.redirect) {
+        return {
+          redirect: {
+            destination: '/',
+          },
+        }
+      }
+
+      return {
+        props: {
+          foo: 'bar',
+        },
+      }
+    }
+
+    type PageProps = InferGetStaticPropsType<typeof getStaticProps>
+
+    expectTypeOf<PageProps>().toEqualTypeOf<{ foo: string }>()
+  })
+})