├── .github └── dependabot.yml ├── .gitignore ├── .vscode └── settings.json ├── @types └── graphql.d.ts ├── README.md ├── apollo └── index.ts ├── hooks └── useApollo.ts ├── next-env.d.ts ├── next.config.js ├── package-lock.json ├── package.json ├── pages ├── _app.tsx ├── api │ └── hello.ts ├── index.tsx └── queryCountries.graphql ├── public ├── favicon.ico └── vercel.svg ├── styles ├── Home.module.css └── globals.css └── tsconfig.json /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "npm" 4 | directory: "/" 5 | schedule: 6 | interval: "monthly" 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env.local 29 | .env.development.local 30 | .env.test.local 31 | .env.production.local 32 | 33 | # vercel 34 | .vercel 35 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "eslint.validate": [ 3 | "javascript", 4 | "javascriptreact", 5 | "typescript", 6 | "typescriptreact" 7 | ], 8 | "[typescriptreact]": { 9 | "editor.defaultFormatter": "esbenp.prettier-vscode" 10 | }, 11 | "[typescript]": { 12 | "editor.defaultFormatter": "esbenp.prettier-vscode" 13 | }, 14 | "[json]": { 15 | "editor.defaultFormatter": "esbenp.prettier-vscode" 16 | }, 17 | "[jsonc]": { 18 | "editor.defaultFormatter": "esbenp.prettier-vscode" 19 | }, 20 | "editor.formatOnSave": true, 21 | "editor.formatOnPaste": true, 22 | "typescript.tsdk": "node_modules/typescript/lib", 23 | "gitlens.codeLens.includeSingleLineSymbols": true, 24 | "typescript.preferences.quoteStyle": "single", 25 | "javascript.preferences.quoteStyle": "single", 26 | "prettier.jsxSingleQuote": true, 27 | "prettier.singleQuote": true 28 | } 29 | -------------------------------------------------------------------------------- /@types/graphql.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.graphql' { 2 | import { DocumentNode } from 'graphql'; 3 | const Schema: DocumentNode; 4 | 5 | export = Schema; 6 | } 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Next js + GraphQL + TypeScript Setup 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | npm run dev 9 | # or 10 | yarn dev 11 | ``` 12 | 13 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 14 | 15 | ## Learn to create this template [here](https://dev.to/ivanms1/take-your-next-js-graphql-typescript-setup-to-the-next-level-5b0i) 16 | -------------------------------------------------------------------------------- /apollo/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ApolloClient, 3 | InMemoryCache, 4 | type NormalizedCacheObject, 5 | } from '@apollo/client'; 6 | import merge from 'deepmerge'; 7 | import isEqual from 'lodash-es/isEqual'; 8 | 9 | const COUNTRIES_API = 'https://countries.trevorblades.com'; 10 | 11 | export const APOLLO_STATE_PROP_NAME = '__APOLLO_STATE__'; 12 | 13 | let apolloClient: ApolloClient | null; 14 | 15 | function createApolloClient() { 16 | return new ApolloClient({ 17 | ssrMode: typeof window === 'undefined', 18 | uri: COUNTRIES_API, 19 | cache: new InMemoryCache(), 20 | }); 21 | } 22 | 23 | export function initializeApollo(initialState?: any) { 24 | const _apolloClient = apolloClient ?? createApolloClient(); 25 | 26 | if (initialState) { 27 | const existingCache = _apolloClient.cache.extract(); 28 | 29 | const data = merge(initialState, existingCache, { 30 | arrayMerge: (destinationArray, sourceArray) => [ 31 | ...sourceArray, 32 | ...destinationArray.filter((d) => 33 | sourceArray.every((s) => !isEqual(d, s)) 34 | ), 35 | ], 36 | }); 37 | _apolloClient.cache.restore(data); 38 | } 39 | 40 | if (typeof window === 'undefined') { 41 | return _apolloClient; 42 | } 43 | 44 | if (!apolloClient) { 45 | apolloClient = _apolloClient; 46 | } 47 | 48 | return _apolloClient; 49 | } 50 | 51 | export function addApolloState( 52 | client: ApolloClient, 53 | pageProps: any 54 | ) { 55 | if (pageProps?.props) { 56 | pageProps.props[APOLLO_STATE_PROP_NAME] = client.cache.extract(); 57 | } 58 | 59 | return pageProps; 60 | } 61 | -------------------------------------------------------------------------------- /hooks/useApollo.ts: -------------------------------------------------------------------------------- 1 | import { useMemo } from 'react'; 2 | 3 | import { APOLLO_STATE_PROP_NAME, initializeApollo } from '../apollo'; 4 | 5 | function useApollo(pageProps: any) { 6 | const state = pageProps[APOLLO_STATE_PROP_NAME]; 7 | const client = useMemo(() => initializeApollo(state), [state]); 8 | 9 | return client; 10 | } 11 | 12 | export default useApollo; 13 | -------------------------------------------------------------------------------- /next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | webpack: (config) => { 3 | config.module.rules.push({ 4 | test: /\.(graphql|gql)$/, 5 | exclude: /node_modules/, 6 | loader: 'graphql-tag/loader', 7 | }); 8 | return config; 9 | }, 10 | }; 11 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "next-graphql-app", 3 | "version": "0.1.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "next-graphql-app", 9 | "version": "0.1.0", 10 | "dependencies": { 11 | "@apollo/client": "^3.7.13", 12 | "deepmerge": "^4.3.0", 13 | "graphql": "^16.6.0", 14 | "lodash-es": "^4.17.21", 15 | "next": "12.3.1", 16 | "react": "18.1.0", 17 | "react-dom": "18.1.0" 18 | }, 19 | "devDependencies": { 20 | "@types/lodash-es": "^4.17.7", 21 | "@types/node": "^18.11.11", 22 | "@types/react": "^18.0.12", 23 | "typescript": "^5.0.4" 24 | } 25 | }, 26 | "node_modules/@apollo/client": { 27 | "version": "3.7.13", 28 | "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.7.13.tgz", 29 | "integrity": "sha512-wi63WnO2mhb6uHGB/8x1qIOL4ZtZocrxdHS0VBQ9KwBDkwoP/TdVVgZ29J2WkiAPmJ0SK07ju4R2AjHor1gPxQ==", 30 | "dependencies": { 31 | "@graphql-typed-document-node/core": "^3.1.1", 32 | "@wry/context": "^0.7.0", 33 | "@wry/equality": "^0.5.0", 34 | "@wry/trie": "^0.3.0", 35 | "graphql-tag": "^2.12.6", 36 | "hoist-non-react-statics": "^3.3.2", 37 | "optimism": "^0.16.2", 38 | "prop-types": "^15.7.2", 39 | "response-iterator": "^0.2.6", 40 | "symbol-observable": "^4.0.0", 41 | "ts-invariant": "^0.10.3", 42 | "tslib": "^2.3.0", 43 | "zen-observable-ts": "^1.2.5" 44 | }, 45 | "peerDependencies": { 46 | "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0", 47 | "graphql-ws": "^5.5.5", 48 | "react": "^16.8.0 || ^17.0.0 || ^18.0.0", 49 | "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", 50 | "subscriptions-transport-ws": "^0.9.0 || ^0.11.0" 51 | }, 52 | "peerDependenciesMeta": { 53 | "graphql-ws": { 54 | "optional": true 55 | }, 56 | "react": { 57 | "optional": true 58 | }, 59 | "react-dom": { 60 | "optional": true 61 | }, 62 | "subscriptions-transport-ws": { 63 | "optional": true 64 | } 65 | } 66 | }, 67 | "node_modules/@graphql-typed-document-node/core": { 68 | "version": "3.1.1", 69 | "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.1.1.tgz", 70 | "integrity": "sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg==", 71 | "peerDependencies": { 72 | "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" 73 | } 74 | }, 75 | "node_modules/@next/env": { 76 | "version": "12.3.1", 77 | "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.1.tgz", 78 | "integrity": "sha512-9P9THmRFVKGKt9DYqeC2aKIxm8rlvkK38V1P1sRE7qyoPBIs8l9oo79QoSdPtOWfzkbDAVUqvbQGgTMsb8BtJg==" 79 | }, 80 | "node_modules/@next/swc-android-arm-eabi": { 81 | "version": "12.3.1", 82 | "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.1.tgz", 83 | "integrity": "sha512-i+BvKA8tB//srVPPQxIQN5lvfROcfv4OB23/L1nXznP+N/TyKL8lql3l7oo2LNhnH66zWhfoemg3Q4VJZSruzQ==", 84 | "cpu": [ 85 | "arm" 86 | ], 87 | "optional": true, 88 | "os": [ 89 | "android" 90 | ], 91 | "engines": { 92 | "node": ">= 10" 93 | } 94 | }, 95 | "node_modules/@next/swc-android-arm64": { 96 | "version": "12.3.1", 97 | "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.1.tgz", 98 | "integrity": "sha512-CmgU2ZNyBP0rkugOOqLnjl3+eRpXBzB/I2sjwcGZ7/Z6RcUJXK5Evz+N0ucOxqE4cZ3gkTeXtSzRrMK2mGYV8Q==", 99 | "cpu": [ 100 | "arm64" 101 | ], 102 | "optional": true, 103 | "os": [ 104 | "android" 105 | ], 106 | "engines": { 107 | "node": ">= 10" 108 | } 109 | }, 110 | "node_modules/@next/swc-darwin-arm64": { 111 | "version": "12.3.1", 112 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.1.tgz", 113 | "integrity": "sha512-hT/EBGNcu0ITiuWDYU9ur57Oa4LybD5DOQp4f22T6zLfpoBMfBibPtR8XktXmOyFHrL/6FC2p9ojdLZhWhvBHg==", 114 | "cpu": [ 115 | "arm64" 116 | ], 117 | "optional": true, 118 | "os": [ 119 | "darwin" 120 | ], 121 | "engines": { 122 | "node": ">= 10" 123 | } 124 | }, 125 | "node_modules/@next/swc-darwin-x64": { 126 | "version": "12.3.1", 127 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.1.tgz", 128 | "integrity": "sha512-9S6EVueCVCyGf2vuiLiGEHZCJcPAxglyckTZcEwLdJwozLqN0gtS0Eq0bQlGS3dH49Py/rQYpZ3KVWZ9BUf/WA==", 129 | "cpu": [ 130 | "x64" 131 | ], 132 | "optional": true, 133 | "os": [ 134 | "darwin" 135 | ], 136 | "engines": { 137 | "node": ">= 10" 138 | } 139 | }, 140 | "node_modules/@next/swc-freebsd-x64": { 141 | "version": "12.3.1", 142 | "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.1.tgz", 143 | "integrity": "sha512-qcuUQkaBZWqzM0F1N4AkAh88lLzzpfE6ImOcI1P6YeyJSsBmpBIV8o70zV+Wxpc26yV9vpzb+e5gCyxNjKJg5Q==", 144 | "cpu": [ 145 | "x64" 146 | ], 147 | "optional": true, 148 | "os": [ 149 | "freebsd" 150 | ], 151 | "engines": { 152 | "node": ">= 10" 153 | } 154 | }, 155 | "node_modules/@next/swc-linux-arm-gnueabihf": { 156 | "version": "12.3.1", 157 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.1.tgz", 158 | "integrity": "sha512-diL9MSYrEI5nY2wc/h/DBewEDUzr/DqBjIgHJ3RUNtETAOB3spMNHvJk2XKUDjnQuluLmFMloet9tpEqU2TT9w==", 159 | "cpu": [ 160 | "arm" 161 | ], 162 | "optional": true, 163 | "os": [ 164 | "linux" 165 | ], 166 | "engines": { 167 | "node": ">= 10" 168 | } 169 | }, 170 | "node_modules/@next/swc-linux-arm64-gnu": { 171 | "version": "12.3.1", 172 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.1.tgz", 173 | "integrity": "sha512-o/xB2nztoaC7jnXU3Q36vGgOolJpsGG8ETNjxM1VAPxRwM7FyGCPHOMk1XavG88QZSQf+1r+POBW0tLxQOJ9DQ==", 174 | "cpu": [ 175 | "arm64" 176 | ], 177 | "optional": true, 178 | "os": [ 179 | "linux" 180 | ], 181 | "engines": { 182 | "node": ">= 10" 183 | } 184 | }, 185 | "node_modules/@next/swc-linux-arm64-musl": { 186 | "version": "12.3.1", 187 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.1.tgz", 188 | "integrity": "sha512-2WEasRxJzgAmP43glFNhADpe8zB7kJofhEAVNbDJZANp+H4+wq+/cW1CdDi8DqjkShPEA6/ejJw+xnEyDID2jg==", 189 | "cpu": [ 190 | "arm64" 191 | ], 192 | "optional": true, 193 | "os": [ 194 | "linux" 195 | ], 196 | "engines": { 197 | "node": ">= 10" 198 | } 199 | }, 200 | "node_modules/@next/swc-linux-x64-gnu": { 201 | "version": "12.3.1", 202 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.1.tgz", 203 | "integrity": "sha512-JWEaMyvNrXuM3dyy9Pp5cFPuSSvG82+yABqsWugjWlvfmnlnx9HOQZY23bFq3cNghy5V/t0iPb6cffzRWylgsA==", 204 | "cpu": [ 205 | "x64" 206 | ], 207 | "optional": true, 208 | "os": [ 209 | "linux" 210 | ], 211 | "engines": { 212 | "node": ">= 10" 213 | } 214 | }, 215 | "node_modules/@next/swc-linux-x64-musl": { 216 | "version": "12.3.1", 217 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.1.tgz", 218 | "integrity": "sha512-xoEWQQ71waWc4BZcOjmatuvPUXKTv6MbIFzpm4LFeCHsg2iwai0ILmNXf81rJR+L1Wb9ifEke2sQpZSPNz1Iyg==", 219 | "cpu": [ 220 | "x64" 221 | ], 222 | "optional": true, 223 | "os": [ 224 | "linux" 225 | ], 226 | "engines": { 227 | "node": ">= 10" 228 | } 229 | }, 230 | "node_modules/@next/swc-win32-arm64-msvc": { 231 | "version": "12.3.1", 232 | "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.1.tgz", 233 | "integrity": "sha512-hswVFYQYIeGHE2JYaBVtvqmBQ1CppplQbZJS/JgrVI3x2CurNhEkmds/yqvDONfwfbttTtH4+q9Dzf/WVl3Opw==", 234 | "cpu": [ 235 | "arm64" 236 | ], 237 | "optional": true, 238 | "os": [ 239 | "win32" 240 | ], 241 | "engines": { 242 | "node": ">= 10" 243 | } 244 | }, 245 | "node_modules/@next/swc-win32-ia32-msvc": { 246 | "version": "12.3.1", 247 | "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.1.tgz", 248 | "integrity": "sha512-Kny5JBehkTbKPmqulr5i+iKntO5YMP+bVM8Hf8UAmjSMVo3wehyLVc9IZkNmcbxi+vwETnQvJaT5ynYBkJ9dWA==", 249 | "cpu": [ 250 | "ia32" 251 | ], 252 | "optional": true, 253 | "os": [ 254 | "win32" 255 | ], 256 | "engines": { 257 | "node": ">= 10" 258 | } 259 | }, 260 | "node_modules/@next/swc-win32-x64-msvc": { 261 | "version": "12.3.1", 262 | "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.1.tgz", 263 | "integrity": "sha512-W1ijvzzg+kPEX6LAc+50EYYSEo0FVu7dmTE+t+DM4iOLqgGHoW9uYSz9wCVdkXOEEMP9xhXfGpcSxsfDucyPkA==", 264 | "cpu": [ 265 | "x64" 266 | ], 267 | "optional": true, 268 | "os": [ 269 | "win32" 270 | ], 271 | "engines": { 272 | "node": ">= 10" 273 | } 274 | }, 275 | "node_modules/@swc/helpers": { 276 | "version": "0.4.11", 277 | "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", 278 | "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", 279 | "dependencies": { 280 | "tslib": "^2.4.0" 281 | } 282 | }, 283 | "node_modules/@types/lodash": { 284 | "version": "4.14.191", 285 | "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", 286 | "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", 287 | "dev": true 288 | }, 289 | "node_modules/@types/lodash-es": { 290 | "version": "4.17.7", 291 | "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.7.tgz", 292 | "integrity": "sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ==", 293 | "dev": true, 294 | "dependencies": { 295 | "@types/lodash": "*" 296 | } 297 | }, 298 | "node_modules/@types/node": { 299 | "version": "18.11.11", 300 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.11.tgz", 301 | "integrity": "sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g==", 302 | "dev": true 303 | }, 304 | "node_modules/@types/prop-types": { 305 | "version": "15.7.3", 306 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", 307 | "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", 308 | "dev": true 309 | }, 310 | "node_modules/@types/react": { 311 | "version": "18.0.12", 312 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.12.tgz", 313 | "integrity": "sha512-duF1OTASSBQtcigUvhuiTB1Ya3OvSy+xORCiEf20H0P0lzx+/KeVsA99U5UjLXSbyo1DRJDlLKqTeM1ngosqtg==", 314 | "dev": true, 315 | "dependencies": { 316 | "@types/prop-types": "*", 317 | "@types/scheduler": "*", 318 | "csstype": "^3.0.2" 319 | } 320 | }, 321 | "node_modules/@types/scheduler": { 322 | "version": "0.16.1", 323 | "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", 324 | "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==", 325 | "dev": true 326 | }, 327 | "node_modules/@wry/context": { 328 | "version": "0.7.0", 329 | "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.7.0.tgz", 330 | "integrity": "sha512-LcDAiYWRtwAoSOArfk7cuYvFXytxfVrdX7yxoUmK7pPITLk5jYh2F8knCwS7LjgYL8u1eidPlKKV6Ikqq0ODqQ==", 331 | "dependencies": { 332 | "tslib": "^2.3.0" 333 | }, 334 | "engines": { 335 | "node": ">=8" 336 | } 337 | }, 338 | "node_modules/@wry/equality": { 339 | "version": "0.5.1", 340 | "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.5.1.tgz", 341 | "integrity": "sha512-FZKbdpbcVcbDxQrKcaBClNsQaMg9nof1RKM7mReJe5DKUzM5u8S7T+PqwNqvib5O2j2xxF1R4p5O3+b6baTrbw==", 342 | "dependencies": { 343 | "tslib": "^2.1.0" 344 | }, 345 | "engines": { 346 | "node": ">=8" 347 | } 348 | }, 349 | "node_modules/@wry/trie": { 350 | "version": "0.3.2", 351 | "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.3.2.tgz", 352 | "integrity": "sha512-yRTyhWSls2OY/pYLfwff867r8ekooZ4UI+/gxot5Wj8EFwSf2rG+n+Mo/6LoLQm1TKA4GRj2+LCpbfS937dClQ==", 353 | "dependencies": { 354 | "tslib": "^2.3.0" 355 | }, 356 | "engines": { 357 | "node": ">=8" 358 | } 359 | }, 360 | "node_modules/caniuse-lite": { 361 | "version": "1.0.30001414", 362 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001414.tgz", 363 | "integrity": "sha512-t55jfSaWjCdocnFdKQoO+d2ct9C59UZg4dY3OnUlSZ447r8pUtIKdp0hpAzrGFultmTC+Us+KpKi4GZl/LXlFg==", 364 | "funding": [ 365 | { 366 | "type": "opencollective", 367 | "url": "https://opencollective.com/browserslist" 368 | }, 369 | { 370 | "type": "tidelift", 371 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 372 | } 373 | ] 374 | }, 375 | "node_modules/csstype": { 376 | "version": "3.0.8", 377 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", 378 | "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==", 379 | "dev": true 380 | }, 381 | "node_modules/deepmerge": { 382 | "version": "4.3.0", 383 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", 384 | "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", 385 | "engines": { 386 | "node": ">=0.10.0" 387 | } 388 | }, 389 | "node_modules/graphql": { 390 | "version": "16.6.0", 391 | "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.6.0.tgz", 392 | "integrity": "sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==", 393 | "engines": { 394 | "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" 395 | } 396 | }, 397 | "node_modules/graphql-tag": { 398 | "version": "2.12.6", 399 | "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", 400 | "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", 401 | "dependencies": { 402 | "tslib": "^2.1.0" 403 | }, 404 | "engines": { 405 | "node": ">=10" 406 | }, 407 | "peerDependencies": { 408 | "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" 409 | } 410 | }, 411 | "node_modules/hoist-non-react-statics": { 412 | "version": "3.3.2", 413 | "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", 414 | "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", 415 | "dependencies": { 416 | "react-is": "^16.7.0" 417 | } 418 | }, 419 | "node_modules/js-tokens": { 420 | "version": "4.0.0", 421 | "license": "MIT" 422 | }, 423 | "node_modules/lodash-es": { 424 | "version": "4.17.21", 425 | "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", 426 | "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" 427 | }, 428 | "node_modules/loose-envify": { 429 | "version": "1.4.0", 430 | "license": "MIT", 431 | "dependencies": { 432 | "js-tokens": "^3.0.0 || ^4.0.0" 433 | }, 434 | "bin": { 435 | "loose-envify": "cli.js" 436 | } 437 | }, 438 | "node_modules/nanoid": { 439 | "version": "3.3.4", 440 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 441 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 442 | "bin": { 443 | "nanoid": "bin/nanoid.cjs" 444 | }, 445 | "engines": { 446 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 447 | } 448 | }, 449 | "node_modules/next": { 450 | "version": "12.3.1", 451 | "resolved": "https://registry.npmjs.org/next/-/next-12.3.1.tgz", 452 | "integrity": "sha512-l7bvmSeIwX5lp07WtIiP9u2ytZMv7jIeB8iacR28PuUEFG5j0HGAPnMqyG5kbZNBG2H7tRsrQ4HCjuMOPnANZw==", 453 | "dependencies": { 454 | "@next/env": "12.3.1", 455 | "@swc/helpers": "0.4.11", 456 | "caniuse-lite": "^1.0.30001406", 457 | "postcss": "8.4.14", 458 | "styled-jsx": "5.0.7", 459 | "use-sync-external-store": "1.2.0" 460 | }, 461 | "bin": { 462 | "next": "dist/bin/next" 463 | }, 464 | "engines": { 465 | "node": ">=12.22.0" 466 | }, 467 | "optionalDependencies": { 468 | "@next/swc-android-arm-eabi": "12.3.1", 469 | "@next/swc-android-arm64": "12.3.1", 470 | "@next/swc-darwin-arm64": "12.3.1", 471 | "@next/swc-darwin-x64": "12.3.1", 472 | "@next/swc-freebsd-x64": "12.3.1", 473 | "@next/swc-linux-arm-gnueabihf": "12.3.1", 474 | "@next/swc-linux-arm64-gnu": "12.3.1", 475 | "@next/swc-linux-arm64-musl": "12.3.1", 476 | "@next/swc-linux-x64-gnu": "12.3.1", 477 | "@next/swc-linux-x64-musl": "12.3.1", 478 | "@next/swc-win32-arm64-msvc": "12.3.1", 479 | "@next/swc-win32-ia32-msvc": "12.3.1", 480 | "@next/swc-win32-x64-msvc": "12.3.1" 481 | }, 482 | "peerDependencies": { 483 | "fibers": ">= 3.1.0", 484 | "node-sass": "^6.0.0 || ^7.0.0", 485 | "react": "^17.0.2 || ^18.0.0-0", 486 | "react-dom": "^17.0.2 || ^18.0.0-0", 487 | "sass": "^1.3.0" 488 | }, 489 | "peerDependenciesMeta": { 490 | "fibers": { 491 | "optional": true 492 | }, 493 | "node-sass": { 494 | "optional": true 495 | }, 496 | "sass": { 497 | "optional": true 498 | } 499 | } 500 | }, 501 | "node_modules/object-assign": { 502 | "version": "4.1.1", 503 | "license": "MIT", 504 | "engines": { 505 | "node": ">=0.10.0" 506 | } 507 | }, 508 | "node_modules/optimism": { 509 | "version": "0.16.2", 510 | "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.16.2.tgz", 511 | "integrity": "sha512-zWNbgWj+3vLEjZNIh/okkY2EUfX+vB9TJopzIZwT1xxaMqC5hRLLraePod4c5n4He08xuXNH+zhKFFCu390wiQ==", 512 | "dependencies": { 513 | "@wry/context": "^0.7.0", 514 | "@wry/trie": "^0.3.0" 515 | } 516 | }, 517 | "node_modules/picocolors": { 518 | "version": "1.0.0", 519 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 520 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 521 | }, 522 | "node_modules/postcss": { 523 | "version": "8.4.14", 524 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", 525 | "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", 526 | "funding": [ 527 | { 528 | "type": "opencollective", 529 | "url": "https://opencollective.com/postcss/" 530 | }, 531 | { 532 | "type": "tidelift", 533 | "url": "https://tidelift.com/funding/github/npm/postcss" 534 | } 535 | ], 536 | "dependencies": { 537 | "nanoid": "^3.3.4", 538 | "picocolors": "^1.0.0", 539 | "source-map-js": "^1.0.2" 540 | }, 541 | "engines": { 542 | "node": "^10 || ^12 || >=14" 543 | } 544 | }, 545 | "node_modules/prop-types": { 546 | "version": "15.7.2", 547 | "license": "MIT", 548 | "dependencies": { 549 | "loose-envify": "^1.4.0", 550 | "object-assign": "^4.1.1", 551 | "react-is": "^16.8.1" 552 | } 553 | }, 554 | "node_modules/react": { 555 | "version": "18.1.0", 556 | "resolved": "https://registry.npmjs.org/react/-/react-18.1.0.tgz", 557 | "integrity": "sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==", 558 | "dependencies": { 559 | "loose-envify": "^1.1.0" 560 | }, 561 | "engines": { 562 | "node": ">=0.10.0" 563 | } 564 | }, 565 | "node_modules/react-dom": { 566 | "version": "18.1.0", 567 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.1.0.tgz", 568 | "integrity": "sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==", 569 | "dependencies": { 570 | "loose-envify": "^1.1.0", 571 | "scheduler": "^0.22.0" 572 | }, 573 | "peerDependencies": { 574 | "react": "18.1.0" 575 | } 576 | }, 577 | "node_modules/react-is": { 578 | "version": "16.13.1", 579 | "license": "MIT" 580 | }, 581 | "node_modules/response-iterator": { 582 | "version": "0.2.6", 583 | "resolved": "https://registry.npmjs.org/response-iterator/-/response-iterator-0.2.6.tgz", 584 | "integrity": "sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==", 585 | "engines": { 586 | "node": ">=0.8" 587 | } 588 | }, 589 | "node_modules/scheduler": { 590 | "version": "0.22.0", 591 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.22.0.tgz", 592 | "integrity": "sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==", 593 | "dependencies": { 594 | "loose-envify": "^1.1.0" 595 | } 596 | }, 597 | "node_modules/source-map-js": { 598 | "version": "1.0.2", 599 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 600 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 601 | "engines": { 602 | "node": ">=0.10.0" 603 | } 604 | }, 605 | "node_modules/styled-jsx": { 606 | "version": "5.0.7", 607 | "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz", 608 | "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==", 609 | "engines": { 610 | "node": ">= 12.0.0" 611 | }, 612 | "peerDependencies": { 613 | "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" 614 | }, 615 | "peerDependenciesMeta": { 616 | "@babel/core": { 617 | "optional": true 618 | }, 619 | "babel-plugin-macros": { 620 | "optional": true 621 | } 622 | } 623 | }, 624 | "node_modules/symbol-observable": { 625 | "version": "4.0.0", 626 | "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", 627 | "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", 628 | "engines": { 629 | "node": ">=0.10" 630 | } 631 | }, 632 | "node_modules/ts-invariant": { 633 | "version": "0.10.3", 634 | "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.10.3.tgz", 635 | "integrity": "sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==", 636 | "dependencies": { 637 | "tslib": "^2.1.0" 638 | }, 639 | "engines": { 640 | "node": ">=8" 641 | } 642 | }, 643 | "node_modules/tslib": { 644 | "version": "2.4.0", 645 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", 646 | "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" 647 | }, 648 | "node_modules/typescript": { 649 | "version": "5.0.4", 650 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", 651 | "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", 652 | "dev": true, 653 | "bin": { 654 | "tsc": "bin/tsc", 655 | "tsserver": "bin/tsserver" 656 | }, 657 | "engines": { 658 | "node": ">=12.20" 659 | } 660 | }, 661 | "node_modules/use-sync-external-store": { 662 | "version": "1.2.0", 663 | "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", 664 | "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", 665 | "peerDependencies": { 666 | "react": "^16.8.0 || ^17.0.0 || ^18.0.0" 667 | } 668 | }, 669 | "node_modules/zen-observable": { 670 | "version": "0.8.15", 671 | "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", 672 | "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==" 673 | }, 674 | "node_modules/zen-observable-ts": { 675 | "version": "1.2.5", 676 | "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz", 677 | "integrity": "sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==", 678 | "dependencies": { 679 | "zen-observable": "0.8.15" 680 | } 681 | } 682 | }, 683 | "dependencies": { 684 | "@apollo/client": { 685 | "version": "3.7.13", 686 | "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.7.13.tgz", 687 | "integrity": "sha512-wi63WnO2mhb6uHGB/8x1qIOL4ZtZocrxdHS0VBQ9KwBDkwoP/TdVVgZ29J2WkiAPmJ0SK07ju4R2AjHor1gPxQ==", 688 | "requires": { 689 | "@graphql-typed-document-node/core": "^3.1.1", 690 | "@wry/context": "^0.7.0", 691 | "@wry/equality": "^0.5.0", 692 | "@wry/trie": "^0.3.0", 693 | "graphql-tag": "^2.12.6", 694 | "hoist-non-react-statics": "^3.3.2", 695 | "optimism": "^0.16.2", 696 | "prop-types": "^15.7.2", 697 | "response-iterator": "^0.2.6", 698 | "symbol-observable": "^4.0.0", 699 | "ts-invariant": "^0.10.3", 700 | "tslib": "^2.3.0", 701 | "zen-observable-ts": "^1.2.5" 702 | } 703 | }, 704 | "@graphql-typed-document-node/core": { 705 | "version": "3.1.1", 706 | "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.1.1.tgz", 707 | "integrity": "sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg==", 708 | "requires": {} 709 | }, 710 | "@next/env": { 711 | "version": "12.3.1", 712 | "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.1.tgz", 713 | "integrity": "sha512-9P9THmRFVKGKt9DYqeC2aKIxm8rlvkK38V1P1sRE7qyoPBIs8l9oo79QoSdPtOWfzkbDAVUqvbQGgTMsb8BtJg==" 714 | }, 715 | "@next/swc-android-arm-eabi": { 716 | "version": "12.3.1", 717 | "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.1.tgz", 718 | "integrity": "sha512-i+BvKA8tB//srVPPQxIQN5lvfROcfv4OB23/L1nXznP+N/TyKL8lql3l7oo2LNhnH66zWhfoemg3Q4VJZSruzQ==", 719 | "optional": true 720 | }, 721 | "@next/swc-android-arm64": { 722 | "version": "12.3.1", 723 | "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.1.tgz", 724 | "integrity": "sha512-CmgU2ZNyBP0rkugOOqLnjl3+eRpXBzB/I2sjwcGZ7/Z6RcUJXK5Evz+N0ucOxqE4cZ3gkTeXtSzRrMK2mGYV8Q==", 725 | "optional": true 726 | }, 727 | "@next/swc-darwin-arm64": { 728 | "version": "12.3.1", 729 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.1.tgz", 730 | "integrity": "sha512-hT/EBGNcu0ITiuWDYU9ur57Oa4LybD5DOQp4f22T6zLfpoBMfBibPtR8XktXmOyFHrL/6FC2p9ojdLZhWhvBHg==", 731 | "optional": true 732 | }, 733 | "@next/swc-darwin-x64": { 734 | "version": "12.3.1", 735 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.1.tgz", 736 | "integrity": "sha512-9S6EVueCVCyGf2vuiLiGEHZCJcPAxglyckTZcEwLdJwozLqN0gtS0Eq0bQlGS3dH49Py/rQYpZ3KVWZ9BUf/WA==", 737 | "optional": true 738 | }, 739 | "@next/swc-freebsd-x64": { 740 | "version": "12.3.1", 741 | "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.1.tgz", 742 | "integrity": "sha512-qcuUQkaBZWqzM0F1N4AkAh88lLzzpfE6ImOcI1P6YeyJSsBmpBIV8o70zV+Wxpc26yV9vpzb+e5gCyxNjKJg5Q==", 743 | "optional": true 744 | }, 745 | "@next/swc-linux-arm-gnueabihf": { 746 | "version": "12.3.1", 747 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.1.tgz", 748 | "integrity": "sha512-diL9MSYrEI5nY2wc/h/DBewEDUzr/DqBjIgHJ3RUNtETAOB3spMNHvJk2XKUDjnQuluLmFMloet9tpEqU2TT9w==", 749 | "optional": true 750 | }, 751 | "@next/swc-linux-arm64-gnu": { 752 | "version": "12.3.1", 753 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.1.tgz", 754 | "integrity": "sha512-o/xB2nztoaC7jnXU3Q36vGgOolJpsGG8ETNjxM1VAPxRwM7FyGCPHOMk1XavG88QZSQf+1r+POBW0tLxQOJ9DQ==", 755 | "optional": true 756 | }, 757 | "@next/swc-linux-arm64-musl": { 758 | "version": "12.3.1", 759 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.1.tgz", 760 | "integrity": "sha512-2WEasRxJzgAmP43glFNhADpe8zB7kJofhEAVNbDJZANp+H4+wq+/cW1CdDi8DqjkShPEA6/ejJw+xnEyDID2jg==", 761 | "optional": true 762 | }, 763 | "@next/swc-linux-x64-gnu": { 764 | "version": "12.3.1", 765 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.1.tgz", 766 | "integrity": "sha512-JWEaMyvNrXuM3dyy9Pp5cFPuSSvG82+yABqsWugjWlvfmnlnx9HOQZY23bFq3cNghy5V/t0iPb6cffzRWylgsA==", 767 | "optional": true 768 | }, 769 | "@next/swc-linux-x64-musl": { 770 | "version": "12.3.1", 771 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.1.tgz", 772 | "integrity": "sha512-xoEWQQ71waWc4BZcOjmatuvPUXKTv6MbIFzpm4LFeCHsg2iwai0ILmNXf81rJR+L1Wb9ifEke2sQpZSPNz1Iyg==", 773 | "optional": true 774 | }, 775 | "@next/swc-win32-arm64-msvc": { 776 | "version": "12.3.1", 777 | "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.1.tgz", 778 | "integrity": "sha512-hswVFYQYIeGHE2JYaBVtvqmBQ1CppplQbZJS/JgrVI3x2CurNhEkmds/yqvDONfwfbttTtH4+q9Dzf/WVl3Opw==", 779 | "optional": true 780 | }, 781 | "@next/swc-win32-ia32-msvc": { 782 | "version": "12.3.1", 783 | "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.1.tgz", 784 | "integrity": "sha512-Kny5JBehkTbKPmqulr5i+iKntO5YMP+bVM8Hf8UAmjSMVo3wehyLVc9IZkNmcbxi+vwETnQvJaT5ynYBkJ9dWA==", 785 | "optional": true 786 | }, 787 | "@next/swc-win32-x64-msvc": { 788 | "version": "12.3.1", 789 | "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.1.tgz", 790 | "integrity": "sha512-W1ijvzzg+kPEX6LAc+50EYYSEo0FVu7dmTE+t+DM4iOLqgGHoW9uYSz9wCVdkXOEEMP9xhXfGpcSxsfDucyPkA==", 791 | "optional": true 792 | }, 793 | "@swc/helpers": { 794 | "version": "0.4.11", 795 | "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", 796 | "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", 797 | "requires": { 798 | "tslib": "^2.4.0" 799 | } 800 | }, 801 | "@types/lodash": { 802 | "version": "4.14.191", 803 | "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", 804 | "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", 805 | "dev": true 806 | }, 807 | "@types/lodash-es": { 808 | "version": "4.17.7", 809 | "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.7.tgz", 810 | "integrity": "sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ==", 811 | "dev": true, 812 | "requires": { 813 | "@types/lodash": "*" 814 | } 815 | }, 816 | "@types/node": { 817 | "version": "18.11.11", 818 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.11.tgz", 819 | "integrity": "sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g==", 820 | "dev": true 821 | }, 822 | "@types/prop-types": { 823 | "version": "15.7.3", 824 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", 825 | "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", 826 | "dev": true 827 | }, 828 | "@types/react": { 829 | "version": "18.0.12", 830 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.12.tgz", 831 | "integrity": "sha512-duF1OTASSBQtcigUvhuiTB1Ya3OvSy+xORCiEf20H0P0lzx+/KeVsA99U5UjLXSbyo1DRJDlLKqTeM1ngosqtg==", 832 | "dev": true, 833 | "requires": { 834 | "@types/prop-types": "*", 835 | "@types/scheduler": "*", 836 | "csstype": "^3.0.2" 837 | } 838 | }, 839 | "@types/scheduler": { 840 | "version": "0.16.1", 841 | "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", 842 | "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==", 843 | "dev": true 844 | }, 845 | "@wry/context": { 846 | "version": "0.7.0", 847 | "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.7.0.tgz", 848 | "integrity": "sha512-LcDAiYWRtwAoSOArfk7cuYvFXytxfVrdX7yxoUmK7pPITLk5jYh2F8knCwS7LjgYL8u1eidPlKKV6Ikqq0ODqQ==", 849 | "requires": { 850 | "tslib": "^2.3.0" 851 | } 852 | }, 853 | "@wry/equality": { 854 | "version": "0.5.1", 855 | "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.5.1.tgz", 856 | "integrity": "sha512-FZKbdpbcVcbDxQrKcaBClNsQaMg9nof1RKM7mReJe5DKUzM5u8S7T+PqwNqvib5O2j2xxF1R4p5O3+b6baTrbw==", 857 | "requires": { 858 | "tslib": "^2.1.0" 859 | } 860 | }, 861 | "@wry/trie": { 862 | "version": "0.3.2", 863 | "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.3.2.tgz", 864 | "integrity": "sha512-yRTyhWSls2OY/pYLfwff867r8ekooZ4UI+/gxot5Wj8EFwSf2rG+n+Mo/6LoLQm1TKA4GRj2+LCpbfS937dClQ==", 865 | "requires": { 866 | "tslib": "^2.3.0" 867 | } 868 | }, 869 | "caniuse-lite": { 870 | "version": "1.0.30001414", 871 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001414.tgz", 872 | "integrity": "sha512-t55jfSaWjCdocnFdKQoO+d2ct9C59UZg4dY3OnUlSZ447r8pUtIKdp0hpAzrGFultmTC+Us+KpKi4GZl/LXlFg==" 873 | }, 874 | "csstype": { 875 | "version": "3.0.8", 876 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", 877 | "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==", 878 | "dev": true 879 | }, 880 | "deepmerge": { 881 | "version": "4.3.0", 882 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", 883 | "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==" 884 | }, 885 | "graphql": { 886 | "version": "16.6.0", 887 | "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.6.0.tgz", 888 | "integrity": "sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==" 889 | }, 890 | "graphql-tag": { 891 | "version": "2.12.6", 892 | "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", 893 | "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", 894 | "requires": { 895 | "tslib": "^2.1.0" 896 | } 897 | }, 898 | "hoist-non-react-statics": { 899 | "version": "3.3.2", 900 | "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", 901 | "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", 902 | "requires": { 903 | "react-is": "^16.7.0" 904 | } 905 | }, 906 | "js-tokens": { 907 | "version": "4.0.0" 908 | }, 909 | "lodash-es": { 910 | "version": "4.17.21", 911 | "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", 912 | "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" 913 | }, 914 | "loose-envify": { 915 | "version": "1.4.0", 916 | "requires": { 917 | "js-tokens": "^3.0.0 || ^4.0.0" 918 | } 919 | }, 920 | "nanoid": { 921 | "version": "3.3.4", 922 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 923 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" 924 | }, 925 | "next": { 926 | "version": "12.3.1", 927 | "resolved": "https://registry.npmjs.org/next/-/next-12.3.1.tgz", 928 | "integrity": "sha512-l7bvmSeIwX5lp07WtIiP9u2ytZMv7jIeB8iacR28PuUEFG5j0HGAPnMqyG5kbZNBG2H7tRsrQ4HCjuMOPnANZw==", 929 | "requires": { 930 | "@next/env": "12.3.1", 931 | "@next/swc-android-arm-eabi": "12.3.1", 932 | "@next/swc-android-arm64": "12.3.1", 933 | "@next/swc-darwin-arm64": "12.3.1", 934 | "@next/swc-darwin-x64": "12.3.1", 935 | "@next/swc-freebsd-x64": "12.3.1", 936 | "@next/swc-linux-arm-gnueabihf": "12.3.1", 937 | "@next/swc-linux-arm64-gnu": "12.3.1", 938 | "@next/swc-linux-arm64-musl": "12.3.1", 939 | "@next/swc-linux-x64-gnu": "12.3.1", 940 | "@next/swc-linux-x64-musl": "12.3.1", 941 | "@next/swc-win32-arm64-msvc": "12.3.1", 942 | "@next/swc-win32-ia32-msvc": "12.3.1", 943 | "@next/swc-win32-x64-msvc": "12.3.1", 944 | "@swc/helpers": "0.4.11", 945 | "caniuse-lite": "^1.0.30001406", 946 | "postcss": "8.4.14", 947 | "styled-jsx": "5.0.7", 948 | "use-sync-external-store": "1.2.0" 949 | } 950 | }, 951 | "object-assign": { 952 | "version": "4.1.1" 953 | }, 954 | "optimism": { 955 | "version": "0.16.2", 956 | "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.16.2.tgz", 957 | "integrity": "sha512-zWNbgWj+3vLEjZNIh/okkY2EUfX+vB9TJopzIZwT1xxaMqC5hRLLraePod4c5n4He08xuXNH+zhKFFCu390wiQ==", 958 | "requires": { 959 | "@wry/context": "^0.7.0", 960 | "@wry/trie": "^0.3.0" 961 | } 962 | }, 963 | "picocolors": { 964 | "version": "1.0.0", 965 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 966 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 967 | }, 968 | "postcss": { 969 | "version": "8.4.14", 970 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", 971 | "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", 972 | "requires": { 973 | "nanoid": "^3.3.4", 974 | "picocolors": "^1.0.0", 975 | "source-map-js": "^1.0.2" 976 | } 977 | }, 978 | "prop-types": { 979 | "version": "15.7.2", 980 | "requires": { 981 | "loose-envify": "^1.4.0", 982 | "object-assign": "^4.1.1", 983 | "react-is": "^16.8.1" 984 | } 985 | }, 986 | "react": { 987 | "version": "18.1.0", 988 | "resolved": "https://registry.npmjs.org/react/-/react-18.1.0.tgz", 989 | "integrity": "sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==", 990 | "requires": { 991 | "loose-envify": "^1.1.0" 992 | } 993 | }, 994 | "react-dom": { 995 | "version": "18.1.0", 996 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.1.0.tgz", 997 | "integrity": "sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==", 998 | "requires": { 999 | "loose-envify": "^1.1.0", 1000 | "scheduler": "^0.22.0" 1001 | } 1002 | }, 1003 | "react-is": { 1004 | "version": "16.13.1" 1005 | }, 1006 | "response-iterator": { 1007 | "version": "0.2.6", 1008 | "resolved": "https://registry.npmjs.org/response-iterator/-/response-iterator-0.2.6.tgz", 1009 | "integrity": "sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==" 1010 | }, 1011 | "scheduler": { 1012 | "version": "0.22.0", 1013 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.22.0.tgz", 1014 | "integrity": "sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==", 1015 | "requires": { 1016 | "loose-envify": "^1.1.0" 1017 | } 1018 | }, 1019 | "source-map-js": { 1020 | "version": "1.0.2", 1021 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1022 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" 1023 | }, 1024 | "styled-jsx": { 1025 | "version": "5.0.7", 1026 | "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz", 1027 | "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==", 1028 | "requires": {} 1029 | }, 1030 | "symbol-observable": { 1031 | "version": "4.0.0", 1032 | "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", 1033 | "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==" 1034 | }, 1035 | "ts-invariant": { 1036 | "version": "0.10.3", 1037 | "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.10.3.tgz", 1038 | "integrity": "sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==", 1039 | "requires": { 1040 | "tslib": "^2.1.0" 1041 | } 1042 | }, 1043 | "tslib": { 1044 | "version": "2.4.0", 1045 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", 1046 | "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" 1047 | }, 1048 | "typescript": { 1049 | "version": "5.0.4", 1050 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", 1051 | "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", 1052 | "dev": true 1053 | }, 1054 | "use-sync-external-store": { 1055 | "version": "1.2.0", 1056 | "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", 1057 | "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", 1058 | "requires": {} 1059 | }, 1060 | "zen-observable": { 1061 | "version": "0.8.15", 1062 | "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", 1063 | "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==" 1064 | }, 1065 | "zen-observable-ts": { 1066 | "version": "1.2.5", 1067 | "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz", 1068 | "integrity": "sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==", 1069 | "requires": { 1070 | "zen-observable": "0.8.15" 1071 | } 1072 | } 1073 | } 1074 | } 1075 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "next-graphql-app", 3 | "version": "0.1.0", 4 | "scripts": { 5 | "dev": "next dev", 6 | "build": "next build", 7 | "start": "next start" 8 | }, 9 | "dependencies": { 10 | "@apollo/client": "^3.7.13", 11 | "deepmerge": "^4.3.0", 12 | "graphql": "^16.6.0", 13 | "lodash-es": "^4.17.21", 14 | "next": "12.3.1", 15 | "react": "18.1.0", 16 | "react-dom": "18.1.0" 17 | }, 18 | "devDependencies": { 19 | "@types/lodash-es": "^4.17.7", 20 | "@types/node": "^18.11.11", 21 | "@types/react": "^18.0.12", 22 | "typescript": "^5.0.4" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import type { AppProps } from 'next/app'; 2 | import { ApolloProvider } from '@apollo/client'; 3 | 4 | import useApollo from '../hooks/useApollo'; 5 | 6 | import '../styles/globals.css'; 7 | 8 | function MyApp({ Component, pageProps }: AppProps) { 9 | const client = useApollo(pageProps); 10 | return ( 11 | 12 | 13 | 14 | ); 15 | } 16 | 17 | export default MyApp; 18 | -------------------------------------------------------------------------------- /pages/api/hello.ts: -------------------------------------------------------------------------------- 1 | // Next.js API route support: https://nextjs.org/docs/api-routes/introduction 2 | 3 | export default (req, res) => { 4 | res.statusCode = 200 5 | res.json({ name: 'John Doe' }) 6 | } 7 | -------------------------------------------------------------------------------- /pages/index.tsx: -------------------------------------------------------------------------------- 1 | import Head from 'next/head'; 2 | import { useQuery } from '@apollo/client'; 3 | import type { GetStaticProps } from 'next'; 4 | 5 | import QUERY_COUNTRIES from './queryCountries.graphql'; 6 | 7 | import { addApolloState, initializeApollo } from '../apollo'; 8 | 9 | import styles from '../styles/Home.module.css'; 10 | 11 | export default function Home() { 12 | const { data, loading, error } = useQuery(QUERY_COUNTRIES); 13 | 14 | // check for errors 15 | if (error) { 16 | return

:( an error happened

; 17 | } 18 | 19 | // if all good return data 20 | return ( 21 |
22 | 23 | Countries GraphQL 24 | 25 | 26 |

Countries

27 | {/* let the user know we are fetching the countries */} 28 | {loading &&

loading...

} 29 |
30 | {data?.countries?.map((country) => ( 31 |
{country.name}
32 | ))} 33 |
34 |
35 | ); 36 | } 37 | 38 | export const getStaticProps: GetStaticProps = async (ctx) => { 39 | const client = initializeApollo(); 40 | 41 | await client.query({ 42 | query: QUERY_COUNTRIES, 43 | }); 44 | 45 | return addApolloState(client, { 46 | props: {}, 47 | }); 48 | }; 49 | -------------------------------------------------------------------------------- /pages/queryCountries.graphql: -------------------------------------------------------------------------------- 1 | query { 2 | countries { 3 | code 4 | name 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ivanms1/nextjs-apollo-ssr/ea0120bfea84300b5f739e9e4529194913da8f13/public/favicon.ico -------------------------------------------------------------------------------- /public/vercel.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /styles/Home.module.css: -------------------------------------------------------------------------------- 1 | /* This is all we need */ 2 | .container { 3 | min-height: 100vh; 4 | padding: 0 0.5rem; 5 | display: flex; 6 | flex-direction: column; 7 | justify-content: center; 8 | align-items: center; 9 | } 10 | -------------------------------------------------------------------------------- /styles/globals.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | padding: 0; 4 | margin: 0; 5 | font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, 6 | Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; 7 | } 8 | 9 | a { 10 | color: inherit; 11 | text-decoration: none; 12 | } 13 | 14 | * { 15 | box-sizing: border-box; 16 | } 17 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "strict": false, 12 | "forceConsistentCasingInFileNames": true, 13 | "noEmit": true, 14 | "esModuleInterop": true, 15 | "module": "esnext", 16 | "moduleResolution": "node", 17 | "resolveJsonModule": true, 18 | "isolatedModules": true, 19 | "jsx": "preserve", 20 | "incremental": true 21 | }, 22 | "include": [ 23 | "next-env.d.ts", 24 | "**/*.ts", 25 | "**/*.tsx" 26 | ], 27 | "exclude": [ 28 | "node_modules" 29 | ] 30 | } 31 | --------------------------------------------------------------------------------