From 3588b7886f5d59f5e73409dea0c4203c591822fa Mon Sep 17 00:00:00 2001 From: ekkoko Date: Fri, 31 Mar 2023 16:04:46 +0300 Subject: [PATCH 1/3] added docker + README --- .dockerignore | 18 ++ .nvmrc | 2 +- README.md | 33 +++ apps/nextjs/Dockerfile | 52 +++++ apps/nextjs/next.config.mjs | 4 +- apps/nextjs/package.json | 11 +- docker-compose.yml | 15 ++ package.json | 3 +- packages/db/package.json | 2 +- pnpm-lock.yaml | 433 ++++++++++++++++++++++++++++++++---- 10 files changed, 517 insertions(+), 56 deletions(-) create mode 100644 .dockerignore create mode 100644 apps/nextjs/Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..cc31d7726 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,18 @@ +.env + +Dockerfile +./**/*/Dockerfile + +.dockerignore + +node_modules +./**/*/node_modules + +pnpm-debug.log +./**/*/pnpm-debug.log + + +README.md +.next +.git + diff --git a/.nvmrc b/.nvmrc index 25bf17fc5..1e24c0215 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -18 \ No newline at end of file +18.15.0 \ No newline at end of file diff --git a/README.md b/README.md index 68082dd30..b2253e666 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,39 @@ No, it does not. The `api` package should only be a production dependency in the If you need to share runtime code between the client and server, such as input validation schemas, you can create a separate `shared` package for this and import on both sides. +## Docker + +To get it running with docker, follow the steps below: + +Option 1: + +1. Build and run the images with: + + ```bash + docker compose up --build + # You can specify a specific service: docker compose up nextjs --build + ``` + +2. Visit `http://localhost:3000` to see your app. + +Option 2: + +1. Build the images + + ```bash + docker compose build + # You can specify a specific service: docker compose build nextjs + ``` + +2. Run the images + + ```bash + docker compose up + # You can specify a specific service: docker compose up nextjs + ``` + +3. Visit `http://localhost:3000` to see your app. + ## Quick Start To get it running, follow the steps below: diff --git a/apps/nextjs/Dockerfile b/apps/nextjs/Dockerfile new file mode 100644 index 000000000..e4e914ee0 --- /dev/null +++ b/apps/nextjs/Dockerfile @@ -0,0 +1,52 @@ +##### DEPENDENCIES + +FROM --platform=linux/amd64 node:18-alpine AS builder +RUN apk add --no-cache libc6-compat openssl1.1-compat && apk update +WORKDIR /app +RUN yarn global add turbo +COPY . . +RUN turbo prune --scope=@acme/nextjs --docker + +FROM --platform=linux/amd64 node:18-alpine AS installer +RUN apk add --no-cache libc6-compat openssl1.1-compat && apk update +WORKDIR /app + +ENV NODE_ENV production +ENV CI true +ENV SKIP_ENV_VALIDATION true + +COPY .gitignore .gitignore +COPY --from=builder /app/tsconfig.json ./tsconfig.json +COPY --from=builder /app/out/json . +COPY --from=builder /app/out/pnpm-lock.yaml\* ./ + +RUN yarn global add pnpm && pnpm install --frozen-lockfile + +COPY --from=builder /app/out/full . + +RUN pnpm turbo build --filter=nextjs + +FROM --platform=linux/amd64 node:18-alpine AS runner +RUN apk add --no-cache libc6-compat openssl1.1-compat && apk update +WORKDIR /app + +# Don't run production as root +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs +USER nextjs +EXPOSE 3000 +ENV PORT 3000 + +ENV NODE_ENV production + +# ENV NEXT_TELEMETRY_DISABLED 1 Optional + +COPY --from=installer /app/apps/nextjs/next.config.mjs ./ +COPY --from=installer /app/apps/nextjs/package.json ./ + +COPY --from=installer --chown=nextjs:nodejs /app/apps/nextjs/.next/standalone ./ +COPY --from=installer --chown=nextjs:nodejs /app/apps/nextjs/.next/static ./apps/nextjs/.next/static +COPY --from=installer --chown=nextjs:nodejs /app/apps/nextjs/public ./apps/nextjs/public + + +CMD node apps/nextjs/server.js diff --git a/apps/nextjs/next.config.mjs b/apps/nextjs/next.config.mjs index 773975b17..c8d585c31 100644 --- a/apps/nextjs/next.config.mjs +++ b/apps/nextjs/next.config.mjs @@ -2,10 +2,12 @@ * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. * This is especially useful for Docker builds and Linting. */ -// !process.env.SKIP_ENV_VALIDATION && (await import("./src/env.mjs")); +!process.env.SKIP_ENV_VALIDATION && (await import("./src/env.mjs")); /** @type {import("next").NextConfig} */ const config = { + /** For docker build, more information: https://nextjs.org/docs/advanced-features/output-file-tracing */ + output: "standalone", reactStrictMode: true, /** Enables hot reloading for local packages without a build step */ transpilePackages: ["@acme/api", "@acme/auth", "@acme/db"], diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index 2fdd0addb..ad2dcf648 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -27,18 +27,17 @@ "react": "18.2.0", "react-dom": "18.2.0", "superjson": "1.9.1", + "@types/node": "^18.15.11", + "@types/react": "^18.0.31", + "tailwindcss": "^3.3.1", + "postcss": "^8.4.21", + "autoprefixer": "^10.4.14", "zod": "^3.21.4" }, "devDependencies": { "@acme/eslint-config": "*", - "@types/node": "^18.15.11", - "@types/react": "^18.0.31", "@types/react-dom": "^18.0.11", - "autoprefixer": "^10.4.14", - "dotenv-cli": "^7.1.0", "eslint": "^8.37.0", - "postcss": "^8.4.21", - "tailwindcss": "^3.3.1", "typescript": "^5.0.3" } } diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..d958304a3 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,15 @@ +version: "3.7" + +services: + nextjs: + ports: + - "3000:3000" + build: + context: . + dockerfile: ./apps/nextjs/Dockerfile + environment: + - DATABASE_URL=${DATABASE_URL} + - NEXTAUTH_URL=${NEXTAUTH_URL} + - NEXTAUTH_SECRET=${NEXTAUTH_SECRET} + - DISCORD_CLIENT_ID=${DISCORD_CLIENT_ID} + - DISCORD_CLIENT_SECRET=${DISCORD_CLIENT_SECRET} diff --git a/package.json b/package.json index 08a8f961c..5196ba9a3 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "prettier": "^2.8.7", "prettier-plugin-tailwindcss": "^0.2.6", "turbo": "^1.8.8", - "typescript": "^5.0.3" + "typescript": "^5.0.3", + "dotenv-cli": "^7.1.0" } } diff --git a/packages/db/package.json b/packages/db/package.json index 70619a92b..4bf75a552 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -12,11 +12,11 @@ "with-env": "dotenv -e ../../.env --" }, "dependencies": { + "prisma": "^4.12.0", "@prisma/client": "^4.12.0" }, "devDependencies": { "dotenv-cli": "^7.1.0", - "prisma": "^4.12.0", "typescript": "^5.0.3" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 092088174..c9e60b40d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,6 +16,9 @@ importers: '@types/prettier': specifier: ^2.7.2 version: 2.7.2 + dotenv-cli: + specifier: ^7.1.0 + version: 7.1.0 eslint: specifier: ^8.37.0 version: 8.37.0 @@ -63,10 +66,10 @@ importers: version: 4.0.1(expo@48.0.9) expo-router: specifier: ^1.4.3 - version: 1.4.3(expo-constants@14.2.1)(expo-linking@4.0.1)(expo-status-bar@1.4.4)(expo@48.0.9)(react-dom@18.2.0)(react-native-safe-area-context@4.5.0)(react-native-screens@3.20.0)(react-native@0.71.4)(react@18.2.0) + version: 1.4.3(expo-constants@14.2.1)(expo-linking@4.0.1)(expo-modules-autolinking@1.1.2)(expo-status-bar@1.4.4)(expo@48.0.9)(metro@0.76.0)(react-dom@18.2.0)(react-native-gesture-handler@2.9.0)(react-native-safe-area-context@4.5.0)(react-native-screens@3.20.0)(react-native@0.71.4)(react@18.2.0) expo-splash-screen: specifier: ~0.18.1 - version: 0.18.1(expo@48.0.9) + version: 0.18.1(expo-modules-autolinking@1.1.2)(expo@48.0.9) expo-status-bar: specifier: ~1.4.4 version: 1.4.4 @@ -161,12 +164,24 @@ importers: '@trpc/server': specifier: ^10.18.0 version: 10.18.0 + '@types/node': + specifier: ^18.15.11 + version: 18.15.11 + '@types/react': + specifier: ^18.0.31 + version: 18.0.31 + autoprefixer: + specifier: ^10.4.14 + version: 10.4.14(postcss@8.4.21) next: specifier: ^13.2.4 - version: 13.2.4(react-dom@18.2.0)(react@18.2.0) + version: 13.2.4(@babel/core@7.21.3)(react-dom@18.2.0)(react@18.2.0) next-auth: specifier: ^4.20.1 version: 4.20.1(next@13.2.4)(react-dom@18.2.0)(react@18.2.0) + postcss: + specifier: ^8.4.21 + version: 8.4.21 react: specifier: 18.2.0 version: 18.2.0 @@ -176,6 +191,9 @@ importers: superjson: specifier: 1.9.1 version: 1.9.1 + tailwindcss: + specifier: ^3.3.1 + version: 3.3.1(postcss@8.4.21) zod: specifier: ^3.21.4 version: 3.21.4 @@ -183,30 +201,12 @@ importers: '@acme/eslint-config': specifier: '*' version: link:../../packages/config/eslint - '@types/node': - specifier: ^18.15.11 - version: 18.15.11 - '@types/react': - specifier: ^18.0.31 - version: 18.0.31 '@types/react-dom': specifier: ^18.0.11 version: 18.0.11 - autoprefixer: - specifier: ^10.4.14 - version: 10.4.14(postcss@8.4.21) - dotenv-cli: - specifier: ^7.1.0 - version: 7.1.0 eslint: specifier: ^8.37.0 version: 8.37.0 - postcss: - specifier: ^8.4.21 - version: 8.4.21 - tailwindcss: - specifier: ^3.3.1 - version: 3.3.1(postcss@8.4.21) typescript: specifier: ^5.0.3 version: 5.0.3 @@ -249,10 +249,10 @@ importers: version: link:../db '@next-auth/prisma-adapter': specifier: ^1.0.5 - version: 1.0.5(next-auth@4.20.1) + version: 1.0.5(@prisma/client@4.12.0)(next-auth@4.20.1) next: specifier: ^13.2.4 - version: 13.2.4(react-dom@18.2.0)(react@18.2.0) + version: 13.2.4(@babel/core@7.21.3)(react-dom@18.2.0)(react@18.2.0) next-auth: specifier: ^4.20.1 version: 4.20.1(next@13.2.4)(react-dom@18.2.0)(react@18.2.0) @@ -321,13 +321,13 @@ importers: '@prisma/client': specifier: ^4.12.0 version: 4.12.0(prisma@4.12.0) + prisma: + specifier: ^4.12.0 + version: 4.12.0 devDependencies: dotenv-cli: specifier: ^7.1.0 version: 7.1.0 - prisma: - specifier: ^4.12.0 - version: 4.12.0 typescript: specifier: ^5.0.3 version: 5.0.3 @@ -1610,6 +1610,13 @@ packages: react-native: 0.71.4(@babel/core@7.21.3)(@babel/preset-env@7.20.2)(react@18.2.0) dev: false + /@egjs/hammerjs@2.0.17: + resolution: {integrity: sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==} + engines: {node: '>=0.8.0'} + dependencies: + '@types/hammerjs': 2.0.41 + dev: false + /@eslint-community/eslint-utils@4.4.0(eslint@8.37.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2195,12 +2202,13 @@ packages: read-yaml-file: 1.1.0 dev: false - /@next-auth/prisma-adapter@1.0.5(next-auth@4.20.1): + /@next-auth/prisma-adapter@1.0.5(@prisma/client@4.12.0)(next-auth@4.20.1): resolution: {integrity: sha512-VqMS11IxPXrPGXw6Oul6jcyS/n8GLOWzRMrPr3EMdtD6eOalM6zz05j08PcNiis8QzkfuYnCv49OvufTuaEwYQ==} peerDependencies: '@prisma/client': '>=2.26.0 || >=3' next-auth: ^4 dependencies: + '@prisma/client': 4.12.0(prisma@4.12.0) next-auth: 4.20.1(next@13.2.4)(react-dom@18.2.0)(react@18.2.0) dev: false @@ -2402,6 +2410,7 @@ packages: /@prisma/engines@4.12.0: resolution: {integrity: sha512-0alKtnxhNB5hYU+ymESBlGI4b9XrGGSdv7Ud+8TE/fBNOEhIud0XQsAR+TrvUZgS4na5czubiMsODw0TUrgkIA==} requiresBuild: true + dev: false /@radix-ui/react-compose-refs@1.0.0(react@18.2.0): resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==} @@ -2835,7 +2844,7 @@ packages: '@trpc/client': 10.18.0(@trpc/server@10.18.0) '@trpc/react-query': 10.18.0(@tanstack/react-query@4.28.0)(@trpc/client@10.18.0)(@trpc/server@10.18.0)(react-dom@18.2.0)(react@18.2.0) '@trpc/server': 10.18.0 - next: 13.2.4(react-dom@18.2.0)(react@18.2.0) + next: 13.2.4(@babel/core@7.21.3)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-ssr-prepass: 1.5.0(react@18.2.0) @@ -2872,6 +2881,10 @@ packages: resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} dev: false + /@types/hammerjs@2.0.41: + resolution: {integrity: sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==} + dev: false + /@types/istanbul-lib-coverage@2.0.4: resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} dev: false @@ -2908,6 +2921,7 @@ packages: /@types/node@18.15.11: resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} + dev: false /@types/prettier@2.7.2: resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} @@ -2915,7 +2929,6 @@ packages: /@types/prop-types@15.7.5: resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} - dev: true /@types/qs@6.9.7: resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} @@ -2933,7 +2946,6 @@ packages: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.3 csstype: 3.1.1 - dev: true /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} @@ -2943,7 +2955,6 @@ packages: /@types/scheduler@0.16.3: resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} - dev: true /@types/semver@6.2.3: resolution: {integrity: sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A==} @@ -3411,7 +3422,6 @@ packages: picocolors: 1.0.0 postcss: 8.4.21 postcss-value-parser: 4.2.0 - dev: true /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} @@ -3489,6 +3499,14 @@ packages: resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} dev: false + /babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.21.3): + resolution: {integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==} + dependencies: + '@babel/plugin-syntax-flow': 7.18.6(@babel/core@7.21.3) + transitivePeerDependencies: + - '@babel/core' + dev: false + /babel-preset-expo@9.3.1(@babel/core@7.21.3): resolution: {integrity: sha512-1JL4T7q3uXu9FeJhLXDAKhFbWs75Qj2pixA60eR2ROzE9LnrKxm2g42OfcArS4vJcPj2NzcOdPpMI9/ZgF8i8Q==} dependencies: @@ -3819,7 +3837,6 @@ packages: /caniuse-lite@1.0.30001469: resolution: {integrity: sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g==} - dev: true /caniuse-lite@1.0.30001470: resolution: {integrity: sha512-065uNwY6QtHCBOExzbV6m236DDhYCCtPmQUCoQtwkVqzud8v5QPidoMr6CoMkC2nfp6nksjttqWQRRh75LqUmA==} @@ -4203,7 +4220,6 @@ packages: /csstype@3.1.1: resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} - dev: true /dag-map@1.0.2: resolution: {integrity: sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==} @@ -4435,17 +4451,14 @@ packages: dotenv: 16.0.3 dotenv-expand: 10.0.0 minimist: 1.2.8 - dev: true /dotenv-expand@10.0.0: resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} engines: {node: '>=12'} - dev: true /dotenv@16.0.3: resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} engines: {node: '>=12'} - dev: true /duplexer3@0.1.5: resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} @@ -5059,7 +5072,7 @@ packages: invariant: 2.2.4 dev: false - /expo-router@1.4.3(expo-constants@14.2.1)(expo-linking@4.0.1)(expo-status-bar@1.4.4)(expo@48.0.9)(react-dom@18.2.0)(react-native-safe-area-context@4.5.0)(react-native-screens@3.20.0)(react-native@0.71.4)(react@18.2.0): + /expo-router@1.4.3(expo-constants@14.2.1)(expo-linking@4.0.1)(expo-modules-autolinking@1.1.2)(expo-status-bar@1.4.4)(expo@48.0.9)(metro@0.76.0)(react-dom@18.2.0)(react-native-gesture-handler@2.9.0)(react-native-safe-area-context@4.5.0)(react-native-screens@3.20.0)(react-native@0.71.4)(react@18.2.0): resolution: {integrity: sha512-mNjvzEsZfDAZYKAhg2co9WbHCq26pa6SOK0mYxRqtbUdl2wMxdE5IJzZupd56zw6q+M6l///7OCLDhBG5nCB7g==} peerDependencies: '@react-navigation/drawer': ^6.5.8 @@ -5087,10 +5100,12 @@ packages: expo: 48.0.9(@babel/core@7.21.3) expo-constants: 14.2.1(expo@48.0.9) expo-linking: 4.0.1(expo@48.0.9) - expo-splash-screen: 0.18.1(expo@48.0.9) + expo-splash-screen: 0.18.1(expo-modules-autolinking@1.1.2)(expo@48.0.9) expo-status-bar: 1.4.4 + metro: 0.76.0 query-string: 7.1.3 react-helmet-async: 1.3.0(react-dom@18.2.0)(react@18.2.0) + react-native-gesture-handler: 2.9.0(react-native@0.71.4)(react@18.2.0) react-native-safe-area-context: 4.5.0(react-native@0.71.4)(react@18.2.0) react-native-screens: 3.20.0(react-native@0.71.4)(react@18.2.0) url: 0.11.0 @@ -5103,7 +5118,7 @@ packages: - supports-color dev: false - /expo-splash-screen@0.18.1(expo@48.0.9): + /expo-splash-screen@0.18.1(expo-modules-autolinking@1.1.2)(expo@48.0.9): resolution: {integrity: sha512-1di1kuh14likGUs3fyVZWAqEMxhmdAjpmf9T8Qk5OzUa5oPEMEDYB2e2VprddWnJNBVVe/ojBDSCY8w56/LS0Q==} peerDependencies: expo: '*' @@ -5384,7 +5399,6 @@ packages: /fraction.js@4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} - dev: true /fragment-cache@0.2.1: resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} @@ -5764,6 +5778,12 @@ packages: source-map: 0.7.4 dev: false + /hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + dependencies: + react-is: 16.13.1 + dev: false + /hosted-git-info@3.0.8: resolution: {integrity: sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==} engines: {node: '>=10'} @@ -6774,10 +6794,27 @@ packages: - supports-color dev: false + /metro-babel-transformer@0.76.0: + resolution: {integrity: sha512-yBF8eJluya2iofhu8nZDXr9It/7bUcgXiKpFPrkiOWcMFY/jqzEbcavQ8uK3lFeXNRyvj0iaKaFs7Qo+2QJfow==} + engines: {node: '>=16'} + dependencies: + '@babel/core': 7.21.3 + hermes-parser: 0.8.0 + metro-source-map: 0.76.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + dev: false + /metro-cache-key@0.73.9: resolution: {integrity: sha512-uJg+6Al7UoGIuGfoxqPBy6y1Ewq7Y8/YapGYIDh6sohInwt/kYKnPZgLDYHIPvY2deORnQ/2CYo4tOeBTnhCXQ==} dev: false + /metro-cache-key@0.76.0: + resolution: {integrity: sha512-Oyz+Yo/CG56kMXsDuioLf80MHwUqRzhOjaFsDvam3+gpc9rIGhnFL4ODhc6Qlum5auPRMT9XsksScErouft2tA==} + engines: {node: '>=16'} + dev: false + /metro-cache@0.73.9: resolution: {integrity: sha512-upiRxY8rrQkUWj7ieACD6tna7xXuXdu2ZqrheksT79ePI0aN/t0memf6WcyUtJUMHZetke3j+ppELNvlmp3tOw==} dependencies: @@ -6785,6 +6822,14 @@ packages: rimraf: 3.0.2 dev: false + /metro-cache@0.76.0: + resolution: {integrity: sha512-J+OkOcIWrJisoXw6fXwWzeR1q4IuysMIKG8v/DWmKUOy8VI2c0gKXUW0mBfEWq6y3w0Czl94/xh1x7X0YLsTNg==} + engines: {node: '>=16'} + dependencies: + metro-core: 0.76.0 + rimraf: 3.0.2 + dev: false + /metro-config@0.73.9: resolution: {integrity: sha512-NiWl1nkYtjqecDmw77tbRbXnzIAwdO6DXGZTuKSkH+H/c1NKq1eizO8Fe+NQyFtwR9YLqn8Q0WN1nmkwM1j8CA==} dependencies: @@ -6801,6 +6846,23 @@ packages: - utf-8-validate dev: false + /metro-config@0.76.0: + resolution: {integrity: sha512-5bfOtovHM7qjSobGBGRWXGh9+wMJlXHgot1LhjL3YTaNLUY42umbzdNC7dPcrGNLHH3MXTlG4cyNeCWZxtm6Hg==} + engines: {node: '>=16'} + dependencies: + cosmiconfig: 5.2.1 + jest-validate: 26.6.2 + metro: 0.76.0 + metro-cache: 0.76.0 + metro-core: 0.76.0 + metro-runtime: 0.76.0 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + /metro-core@0.73.9: resolution: {integrity: sha512-1NTs0IErlKcFTfYyRT3ljdgrISWpl1nys+gaHkXapzTSpvtX9F1NQNn5cgAuE+XIuTJhbsCdfIJiM2JXbrJQaQ==} dependencies: @@ -6808,6 +6870,14 @@ packages: metro-resolver: 0.73.9 dev: false + /metro-core@0.76.0: + resolution: {integrity: sha512-LRNWBpvHWcMeK+LZ74VZRo6QfU8izh6BmmqeW57HnZec69JQ1uODV6e7gQig6PWH89aMzhq8QKQr0dPDUGDYIg==} + engines: {node: '>=16'} + dependencies: + lodash.throttle: 4.1.1 + metro-resolver: 0.76.0 + dev: false + /metro-file-map@0.73.9: resolution: {integrity: sha512-R/Wg3HYeQhYY3ehWtfedw8V0ne4lpufG7a21L3GWer8tafnC9pmjoCKEbJz9XZkVj9i1FtxE7UTbrtZNeIILxQ==} dependencies: @@ -6830,10 +6900,38 @@ packages: - supports-color dev: false + /metro-file-map@0.76.0: + resolution: {integrity: sha512-ifhMf75SlkSR8QcRBK1ecDwt9APZNEMWG7U8RIhtoDAtBYKuTbjjHNJiAwAU8UPE78m/Aryz6A+5cwpuAvSGrA==} + engines: {node: '>=16'} + dependencies: + abort-controller: 3.0.0 + anymatch: 3.1.3 + debug: 2.6.9 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + invariant: 2.2.4 + jest-regex-util: 27.5.1 + jest-serializer: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + micromatch: 4.0.5 + nullthrows: 1.1.1 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.2 + transitivePeerDependencies: + - supports-color + dev: false + /metro-hermes-compiler@0.73.9: resolution: {integrity: sha512-5B3vXIwQkZMSh3DQQY23XpTCpX9kPLqZbA3rDuAcbGW0tzC3f8dCenkyBb0GcCzyTDncJeot/A7oVCVK6zapwg==} dev: false + /metro-hermes-compiler@0.76.0: + resolution: {integrity: sha512-ZW1jHtErMp327aPEkhHP69dLmtbzGj7ajsNFEwayoz/tZtyrTXT+f/8j6QVynIBMMpnAJkSIlinNo9fgIbE08w==} + engines: {node: '>=16'} + dev: false + /metro-inspector-proxy@0.73.9: resolution: {integrity: sha512-B3WrWZnlYhtTrv0IaX3aUAhi2qVILPAZQzb5paO1e+xrz4YZHk9c7dXv7qe7B/IQ132e3w46y3AL7rFo90qVjA==} hasBin: true @@ -6848,18 +6946,49 @@ packages: - utf-8-validate dev: false + /metro-inspector-proxy@0.76.0: + resolution: {integrity: sha512-1RCMmXzcvDsFvJyfRqzUl2B3r0FTgxW37WlH2c2tMhqVtGxobDGHn5cFySeaCLvKSHps0NELeB+1SF7MB9scxA==} + engines: {node: '>=16'} + hasBin: true + dependencies: + connect: 3.7.0 + debug: 2.6.9 + node-fetch: 2.6.9 + ws: 7.5.9 + yargs: 17.7.1 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + /metro-minify-terser@0.73.9: resolution: {integrity: sha512-MTGPu2qV5qtzPJ2SqH6s58awHDtZ4jd7lmmLR+7TXDwtZDjIBA0YVfI0Zak2Haby2SqoNKrhhUns/b4dPAQAVg==} dependencies: terser: 5.16.8 dev: false + /metro-minify-terser@0.76.0: + resolution: {integrity: sha512-dxaE/pvFDFEvXoNHuiXbA2Tw/jT1MD3B4a9AM+aYPWJBh3PdT9XM1HdzumyJldtZpCn5yka4maYSrtuebKgOyw==} + engines: {node: '>=16'} + dependencies: + terser: 5.16.8 + dev: false + /metro-minify-uglify@0.73.9: resolution: {integrity: sha512-gzxD/7WjYcnCNGiFJaA26z34rjOp+c/Ft++194Wg91lYep3TeWQ0CnH8t2HRS7AYDHU81SGWgvD3U7WV0g4LGA==} dependencies: uglify-es: 3.3.9 dev: false + /metro-minify-uglify@0.76.0: + resolution: {integrity: sha512-Fuoxr5wLw/2/BUmhJqmIsfNZK+x8BK/DDXID5CZvHmZj5PdN4MN2WGWkM/F4EOw2t1YxbJ1hFSXM8skfSZ7jkw==} + engines: {node: '>=16'} + dependencies: + uglify-es: 3.3.9 + dev: false + /metro-react-native-babel-preset@0.73.8(@babel/core@7.21.3): resolution: {integrity: sha512-spNrcQJTbQntEIqJnCA6yL4S+dzV9fXCk7U+Rm7yJasZ4o4Frn7jP23isu7FlZIp1Azx1+6SbP7SgQM+IP5JgQ==} peerDependencies: @@ -6954,6 +7083,55 @@ packages: - supports-color dev: false + /metro-react-native-babel-preset@0.76.0(@babel/core@7.21.3): + resolution: {integrity: sha512-2sM6dy9uAbuQlg7l/VOdiudUUMFRkABJ1YLkZU6Fpqi/rJCXn4fbF0pO+TwCFbBYNIQBY50clv9RPvD2n64hXg==} + engines: {node: '>=16'} + peerDependencies: + '@babel/core': '*' + dependencies: + '@babel/core': 7.21.3 + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-proposal-export-default-from': 7.18.10(@babel/core@7.21.3) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-export-default-from': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-syntax-flow': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.3) + '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.3) + '@babel/plugin-transform-flow-strip-types': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.3) + '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.3) + '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.3) + '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.3) + '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3) + '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-react-jsx': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-transform-react-jsx-self': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.21.3) + '@babel/plugin-transform-runtime': 7.21.0(@babel/core@7.21.3) + '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.3) + '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.3) + '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.21.3) + '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.3) + '@babel/template': 7.20.7 + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.21.3) + react-refresh: 0.4.3 + transitivePeerDependencies: + - supports-color + dev: false + /metro-react-native-babel-transformer@0.73.8(@babel/core@7.21.3): resolution: {integrity: sha512-oH/LCCJPauteAE28c0KJAiSrkV+1VJbU0PwA9UwaWnle+qevs/clpKQ8LrIr33YbBj4CiI1kFoVRuNRt5h4NFg==} peerDependencies: @@ -6992,6 +7170,11 @@ packages: absolute-path: 0.0.0 dev: false + /metro-resolver@0.76.0: + resolution: {integrity: sha512-bU6HvKzPJOHGoe9na+tUa0g3pZqMUaSGE+noFx2qeSMtoIgOYkDzmuU9ZOAGcUOz0qJJtGs+QmgM+nBqfSS/pQ==} + engines: {node: '>=16'} + dev: false + /metro-runtime@0.73.8: resolution: {integrity: sha512-M+Bg9M4EN5AEpJ8NkiUsawD75ifYvYfHi05w6QzHXaqOrsTeaRbbeLuOGCYxU2f/tPg17wQV97/rqUQzs9qEtA==} dependencies: @@ -7006,6 +7189,14 @@ packages: react-refresh: 0.4.3 dev: false + /metro-runtime@0.76.0: + resolution: {integrity: sha512-mEt1uWCYVwyvHYhCfsRXp7mqIBgOAYkocgousH5jwi07MwSAAvaDCvyRBUgtFohDQpL4j4N/QxNYExDDqUuuQw==} + engines: {node: '>=16'} + dependencies: + '@babel/runtime': 7.21.0 + react-refresh: 0.4.3 + dev: false + /metro-source-map@0.73.8: resolution: {integrity: sha512-wozFXuBYMAy7b8BCYwC+qoXsvayVJBHWtSTlSLva99t+CoUSG9JO9kg1umzbOz28YYPxKmvb/wbnLMkHdas2cA==} dependencies: @@ -7036,6 +7227,22 @@ packages: - supports-color dev: false + /metro-source-map@0.76.0: + resolution: {integrity: sha512-tAXlHI6EOtRTkhXynZbe/as7pBDBxDaHftq/7pV3QCGyLeSaTNy6wzXI5ewr3kTuZxtBXktQH/Zl0rhKO8DGMA==} + engines: {node: '>=16'} + dependencies: + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 + invariant: 2.2.4 + metro-symbolicate: 0.76.0 + nullthrows: 1.1.1 + ob1: 0.76.0 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: false + /metro-symbolicate@0.73.8: resolution: {integrity: sha512-xkBAcceYYp0GGdCCuMzkCF1ejHsd0lYlbKBkjSRgM0Nlj80VapPaSwumYoAvSaDxcbkvS7/sCjURGp5DsSFgRQ==} engines: {node: '>=8.3'} @@ -7066,6 +7273,21 @@ packages: - supports-color dev: false + /metro-symbolicate@0.76.0: + resolution: {integrity: sha512-duq4RbeHDUzYQu4nzU2zWfBdG1YEXpaMqpLSvsXn5WJF3KK+v+BbtBvmo0zrEvzeA7kczNMxtZ97Yev9rqeYrw==} + engines: {node: '>=16'} + hasBin: true + dependencies: + invariant: 2.2.4 + metro-source-map: 0.76.0 + nullthrows: 1.1.1 + source-map: 0.5.7 + through2: 2.0.5 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: false + /metro-transform-plugins@0.73.9: resolution: {integrity: sha512-r9NeiqMngmooX2VOKLJVQrMuV7PAydbqst5bFhdVBPcFpZkxxqyzjzo+kzrszGy2UpSQBZr2P1L6OMjLHwQwfQ==} dependencies: @@ -7078,6 +7300,19 @@ packages: - supports-color dev: false + /metro-transform-plugins@0.76.0: + resolution: {integrity: sha512-Pl84l7LZAI+RXVP3+Hv+vLQwv4I3dHE91lM+Lw1EVFSep6jvraVVbER5+5/lnb5j1OTEW4EtHXmFus3nnTckeg==} + engines: {node: '>=16'} + dependencies: + '@babel/core': 7.21.3 + '@babel/generator': 7.21.3 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.3 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + dev: false + /metro-transform-worker@0.73.9: resolution: {integrity: sha512-Rq4b489sIaTUENA+WCvtu9yvlT/C6zFMWhU4sq+97W29Zj0mPBjdk+qGT5n1ZBgtBIJzZWt1KxeYuc17f4aYtQ==} dependencies: @@ -7101,6 +7336,30 @@ packages: - utf-8-validate dev: false + /metro-transform-worker@0.76.0: + resolution: {integrity: sha512-diV1gXL+/5R/LFPH3UwuU+dNlzT59c0qCHZm2iFqJYaVHuXUgAjyw48gVfOGDbytXLLcswQQD6C594Sc0QNnPA==} + engines: {node: '>=16'} + dependencies: + '@babel/core': 7.21.3 + '@babel/generator': 7.21.3 + '@babel/parser': 7.21.3 + '@babel/types': 7.21.3 + babel-preset-fbjs: 3.4.0(@babel/core@7.21.3) + metro: 0.76.0 + metro-babel-transformer: 0.76.0 + metro-cache: 0.76.0 + metro-cache-key: 0.76.0 + metro-hermes-compiler: 0.76.0 + metro-source-map: 0.76.0 + metro-transform-plugins: 0.76.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + /metro@0.73.9: resolution: {integrity: sha512-BlYbPmTF60hpetyNdKhdvi57dSqutb+/oK0u3ni4emIh78PiI0axGo7RfdsZ/mn3saASXc94tDbpC5yn7+NpEg==} hasBin: true @@ -7162,6 +7421,67 @@ packages: - utf-8-validate dev: false + /metro@0.76.0: + resolution: {integrity: sha512-Pm9eMGyNQKnAaDOCmG+26YnodCh34gyl9ZD4UMKSBZA0ent2uUIZWGfZ5Bznljx1WH7JvPvn48VuZVJhctAhLQ==} + engines: {node: '>=16'} + hasBin: true + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/core': 7.21.3 + '@babel/generator': 7.21.3 + '@babel/parser': 7.21.3 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.3 + '@babel/types': 7.21.3 + accepts: 1.3.8 + async: 3.2.4 + chalk: 4.1.2 + ci-info: 2.0.0 + connect: 3.7.0 + debug: 2.6.9 + denodeify: 1.2.1 + error-stack-parser: 2.1.4 + graceful-fs: 4.2.11 + hermes-parser: 0.8.0 + image-size: 0.6.3 + invariant: 2.2.4 + jest-worker: 27.5.1 + lodash.throttle: 4.1.1 + metro-babel-transformer: 0.76.0 + metro-cache: 0.76.0 + metro-cache-key: 0.76.0 + metro-config: 0.76.0 + metro-core: 0.76.0 + metro-file-map: 0.76.0 + metro-hermes-compiler: 0.76.0 + metro-inspector-proxy: 0.76.0 + metro-minify-terser: 0.76.0 + metro-minify-uglify: 0.76.0 + metro-react-native-babel-preset: 0.76.0(@babel/core@7.21.3) + metro-resolver: 0.76.0 + metro-runtime: 0.76.0 + metro-source-map: 0.76.0 + metro-symbolicate: 0.76.0 + metro-transform-plugins: 0.76.0 + metro-transform-worker: 0.76.0 + mime-types: 2.1.35 + node-fetch: 2.6.9 + nullthrows: 1.1.1 + rimraf: 3.0.2 + serialize-error: 2.1.0 + source-map: 0.5.7 + strip-ansi: 6.0.1 + temp: 0.8.3 + throat: 5.0.0 + ws: 7.5.9 + yargs: 17.7.1 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + /micromatch@3.1.10: resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} engines: {node: '>=0.10.0'} @@ -7423,7 +7743,7 @@ packages: '@panva/hkdf': 1.0.2 cookie: 0.5.0 jose: 4.13.1 - next: 13.2.4(react-dom@18.2.0)(react@18.2.0) + next: 13.2.4(@babel/core@7.21.3)(react-dom@18.2.0)(react@18.2.0) oauth: 0.9.15 openid-client: 5.4.0 preact: 10.11.3 @@ -7433,7 +7753,7 @@ packages: uuid: 8.3.2 dev: false - /next@13.2.4(react-dom@18.2.0)(react@18.2.0): + /next@13.2.4(@babel/core@7.21.3)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-g1I30317cThkEpvzfXujf0O4wtaQHtDCLhlivwlTJ885Ld+eOgcz7r3TGQzeU+cSRoNHtD8tsJgzxVdYojFssw==} engines: {node: '>=14.6.0'} hasBin: true @@ -7460,7 +7780,7 @@ packages: postcss: 8.4.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.21.3)(react@18.2.0) optionalDependencies: '@next/swc-android-arm-eabi': 13.2.4 '@next/swc-android-arm64': 13.2.4 @@ -7544,7 +7864,6 @@ packages: /normalize-range@0.1.2: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} - dev: true /normalize-url@4.5.1: resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} @@ -7583,6 +7902,11 @@ packages: resolution: {integrity: sha512-kHOzCOFXmAM26fy7V/YuXNKne2TyRiXbFAvPBIbuedJCZZWQZHLdPzMeXJI4Egt6IcfDttRzN3jQ90wOwq1iNw==} dev: false + /ob1@0.76.0: + resolution: {integrity: sha512-ZLPDN2wCuFRAno0S2BSitMse+l0ipfjQQCDlYZMjZn9YnOGsRneifMlvN+3mWgTA8TOHsoAMYQdciBylgsfAmA==} + engines: {node: '>=16'} + dev: false + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -8243,6 +8567,7 @@ packages: requiresBuild: true dependencies: '@prisma/engines': 4.12.0 + dev: false /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -8452,6 +8777,21 @@ packages: - supports-color dev: false + /react-native-gesture-handler@2.9.0(react-native@0.71.4)(react@18.2.0): + resolution: {integrity: sha512-a0BcH3Qb1tgVqUutc6d3VuWQkI1AM3+fJx8dkxzZs9t06qA27QgURYFoklpabuWpsUTzuKRpxleykp25E8m7tg==} + peerDependencies: + react: '*' + react-native: '*' + dependencies: + '@egjs/hammerjs': 2.0.17 + hoist-non-react-statics: 3.3.2 + invariant: 2.2.4 + lodash: 4.17.21 + prop-types: 15.8.1 + react: 18.2.0 + react-native: 0.71.4(@babel/core@7.21.3)(@babel/preset-env@7.20.2)(react@18.2.0) + dev: false + /react-native-gradle-plugin@0.71.17: resolution: {integrity: sha512-OXXYgpISEqERwjSlaCiaQY6cTY5CH6j73gdkWpK0hedxtiWMWgH+i5TOi4hIGYitm9kQBeyDu+wim9fA8ROFJA==} dev: false @@ -9325,7 +9665,7 @@ packages: resolution: {integrity: sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==} dev: false - /styled-jsx@5.1.1(react@18.2.0): + /styled-jsx@5.1.1(@babel/core@7.21.3)(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -9338,6 +9678,7 @@ packages: babel-plugin-macros: optional: true dependencies: + '@babel/core': 7.21.3 client-only: 0.0.1 react: 18.2.0 dev: false From 03967d010de485f08e5be23804b0ba3d6130f514 Mon Sep 17 00:00:00 2001 From: ekkoko Date: Fri, 7 Apr 2023 19:49:15 +0300 Subject: [PATCH 2/3] moved output: standalone to readme --- README.md | 6 ++++++ apps/nextjs/next.config.mjs | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b2253e666..428d03b05 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,12 @@ If you need to share runtime code between the client and server, such as input v To get it running with docker, follow the steps below: +Inside `next.config.mjs` set, you can read more about why we need to set this here: https://nextjs.org/docs/advanced-features/output-file-tracing + +```diff +output: "standalone", +``` + Option 1: 1. Build and run the images with: diff --git a/apps/nextjs/next.config.mjs b/apps/nextjs/next.config.mjs index c8d585c31..a36f30cee 100644 --- a/apps/nextjs/next.config.mjs +++ b/apps/nextjs/next.config.mjs @@ -7,7 +7,7 @@ /** @type {import("next").NextConfig} */ const config = { /** For docker build, more information: https://nextjs.org/docs/advanced-features/output-file-tracing */ - output: "standalone", + // output: "standalone", reactStrictMode: true, /** Enables hot reloading for local packages without a build step */ transpilePackages: ["@acme/api", "@acme/auth", "@acme/db"], From 15ab27654044cc5ee04103a911250e7a0165165a Mon Sep 17 00:00:00 2001 From: ekkoko Date: Fri, 7 Apr 2023 19:55:29 +0300 Subject: [PATCH 3/3] updated Dockerfile to use pnpm best practice --- apps/nextjs/Dockerfile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/nextjs/Dockerfile b/apps/nextjs/Dockerfile index e4e914ee0..083088c6f 100644 --- a/apps/nextjs/Dockerfile +++ b/apps/nextjs/Dockerfile @@ -20,10 +20,13 @@ COPY --from=builder /app/tsconfig.json ./tsconfig.json COPY --from=builder /app/out/json . COPY --from=builder /app/out/pnpm-lock.yaml\* ./ -RUN yarn global add pnpm && pnpm install --frozen-lockfile +RUN yarn global add pnpm && pnpm fetch --prod && pnpm install -r --offline --prod + COPY --from=builder /app/out/full . + + RUN pnpm turbo build --filter=nextjs FROM --platform=linux/amd64 node:18-alpine AS runner