diff --git a/web/Dockerfile b/web/Dockerfile index 41d1018ef..a862ab486 100644 --- a/web/Dockerfile +++ b/web/Dockerfile @@ -1,104 +1,77 @@ -ARG ARG_DYNATRACE_IMAGE='node:lts-alpine' -FROM ${ARG_DYNATRACE_IMAGE} AS dynatrace +ARG ARG_DYNATRACE_IMAGE='node:16-alpine' -FROM node:lts-alpine AS builder +FROM ${ARG_DYNATRACE_IMAGE} AS dynatrace -RUN npm install -g pnpm@^7.2.1 +FROM node:16-alpine AS deps +# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. +RUN apk add --no-cache libc6-compat +WORKDIR /app -WORKDIR /opt/app +COPY package.json pnpm-lock.yaml ./ +COPY web/package.json web/pnpm-lock.yaml web/ -# Should consider using pnpm fetch -COPY ./package.json ./ -COPY ./pnpm-lock.yaml ./ -COPY ./tsconfig.base.json ./ -COPY ./satellitesConfig.js ./ -COPY ./FeatureFlags.js ./ -COPY ./pnpm-workspace.yaml ./ -COPY ./.npmrc ./ -COPY ./web ./web +RUN \ + if [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm m i --frozen-lockfile;\ + else echo "Lockfile not found." && exit 1; \ + fi -# Replace workspace:* with the actual versions | Load css from public folder atm -# RUN version=$(jq --raw-output .version ./legacy/css/package.json); \ -# jq --arg legacy_css "$version" '.dependencies["@equinor/energyvision-legacy-css"] = $legacy_css' \ -# ./web/package.json | sponge ./web/package.json +FROM node:16-alpine AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY --from=deps /app/web/node_modules ./web/node_modules +COPY . . -ARG ARG_SANITY_PROJECT_ID ARG ARG_SANITY_DATASET -ARG ARG_ALGOLIA_APP_ID -ARG ARG_ALGOLIA_SEARCH_API_KEY - -ENV NEXT_PUBLIC_SANITY_PROJECT_ID ${ARG_SANITY_PROJECT_ID} ENV NEXT_PUBLIC_SANITY_DATASET ${ARG_SANITY_DATASET} -ENV NEXT_PUBLIC_ALGOLIA_APP_ID ${ARG_ALGOLIA_APP_ID} -ENV NEXT_PUBLIC_ALGOLIA_SEARCH_API_KEY ${ARG_ALGOLIA_SEARCH_API_KEY} +ARG ARG_SANITY_PROJECT_ID +ENV NEXT_PUBLIC_SANITY_PROJECT_ID ${ARG_SANITY_PROJECT_ID} -#RUN pnpm install --recursive --frozen-lockfile -RUN pnpm web install --frozen-lockfile -RUN pnpm web build +ENV NEXT_TELEMETRY_DISABLED 1 -FROM node:lts-alpine as runner +RUN cd web && yarn build -RUN npm install -g pnpm@^7.2.1 -WORKDIR /opt/app +# Production image, copy all the files and run next +FROM node:16-alpine AS runner +WORKDIR /app ENV NODE_ENV production -ENV PORT 3000 -ENV USER nextjs -ENV UID 12345 -ENV GID 23456 - -RUN addgroup -S "$USER" && \ - adduser -S \ - --disabled-password \ - --gecos "" \ - --home "/opt/app" \ - --ingroup "$USER" \ - --no-create-home \ - --uid "$UID" \ - "$USER" - -COPY --from=builder /opt/app/web/.next ./web/.next -COPY --from=builder /opt/app/web/next.config.mjs ./web -COPY --from=builder /opt/app/web/securityHeaders.mjs ./web -COPY --from=builder /opt/app/web/package.json ./web -COPY --from=builder /opt/app/web/node_modules ./web/node_modules -COPY --from=builder /opt/app/web/pnpm-lock.yaml ./web -COPY --from=builder /opt/app/web/languages.js ./web -COPY --from=builder /opt/app/pnpm-lock.yaml ./ -COPY --from=builder /opt/app/web/public ./web/public -COPY --from=builder /opt/app/package.json ./ -COPY --from=builder /opt/app/satellitesConfig.js ./ -COPY --from=builder /opt/app/pnpm-workspace.yaml ./ -COPY --from=builder /opt/app/.npmrc ./ - -RUN chown -R "$USER":"$USER" . -USER "$UID" -ARG ARG_SANITY_PROJECT_ID +ARG ARG_ENV +ENV ENV ${ARG_ENV} ARG ARG_SANITY_DATASET -ENV NEXT_PUBLIC_SANITY_PROJECT_ID ${ARG_SANITY_PROJECT_ID} ENV NEXT_PUBLIC_SANITY_DATASET ${ARG_SANITY_DATASET} - -ARG ARG_SANITY_API_TOKEN -ARG ARG_SANITY_PREVIEW_SECRET - -ENV SANITY_API_TOKEN ${ARG_SANITY_API_TOKEN} -ENV SANITY_PREVIEW_SECRET ${ARG_SANITY_PREVIEW_SECRET} - +ARG ARG_SANITY_PROJECT_ID +ENV NEXT_PUBLIC_SANITY_PROJECT_ID ${ARG_SANITY_PROJECT_ID} ARG ARG_ALGOLIA_APP_ID -ARG ARG_ALGOLIA_SEARCH_API_KEY -ARG ARG_ALGOLIA_SEARCH_API_SERVER_KEY ENV NEXT_PUBLIC_ALGOLIA_APP_ID ${ARG_ALGOLIA_APP_ID} +ARG ARG_ALGOLIA_SEARCH_API_KEY ENV NEXT_PUBLIC_ALGOLIA_SEARCH_API_KEY ${ARG_ALGOLIA_SEARCH_API_KEY} +ARG ARG_ALGOLIA_SEARCH_API_SERVER_KEY ENV ALGOLIA_SEARCH_API_SERVER_KEY ${ARG_ALGOLIA_SEARCH_API_SERVER_KEY} -ARG ARG_ENV -ENV ENV ${ARG_ENV} +ENV PORT 3000 +ENV USER nextjs +ENV UID 12345 +# https://nextjs.org/telemetry +ENV NEXT_TELEMETRY_DISABLED 1 + +RUN addgroup -S "$USER" +RUN adduser -S --uid "$UID" "$USER" + +COPY --from=builder /app/web/public ./public +# https://nextjs.org/docs/advanced-features/output-file-tracing +COPY --from=builder --chown="$USER":"$USER" /app/web/.next/standalone . +COPY --from=builder --chown="$USER":"$USER" /app/web/.next/static ./.next/static +USER "$UID" + +# Copy dynatrace or "empty" COPY --from=dynatrace / / ENV LD_PRELOAD /opt/dynatrace/oneagent/agent/lib64/liboneagentproc.so ENV DT_TAGS=EQUINORCOM\ ENVIRONMENT=${ARG_ENV}\ DT_PROCESS_GROUP=${ARG_SANITY_DATASET} EXPOSE "$PORT" -CMD ["pnpm", "web", "start"] + +CMD ["node", "server.js"] + diff --git a/web/pages/_middleware.ts b/web/_middleware.ts similarity index 89% rename from web/pages/_middleware.ts rename to web/_middleware.ts index 07a5919f3..fc68d09a5 100644 --- a/web/pages/_middleware.ts +++ b/web/_middleware.ts @@ -1,10 +1,10 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */ -import { getRedirectUrl, getDnsRedirect, getExternalRedirectUrl } from '../common/helpers/redirects' +import { getRedirectUrl, getDnsRedirect, getExternalRedirectUrl } from './common/helpers/redirects' import { NextRequest, NextResponse } from 'next/server' -import { getLocaleFromName } from '../lib/localization' -import { Flags } from '../common/helpers/datasetHelpers' -import { getDocumentBySlug } from '../common/helpers/getPaths' -import archivedNews from '../lib/archive/archivedNewsPaths.json' +import { getLocaleFromName } from './lib/localization' +import { Flags } from './common/helpers/datasetHelpers' +import { getDocumentBySlug } from './common/helpers/getPaths' +import archivedNews from './lib/archive/archivedNewsPaths.json' const PERMANENT_REDIRECT = 301 // const TEMPORARY_REDIRECT = 302 @@ -18,7 +18,7 @@ const pathExistsInSanity = async (pathname: string, isPreview = false): Promise< } // Check if preview mode is enabled in Sanity -const isPreviewEnabled = (request: NextRequest): boolean => { +const isPreviewEnabled = (request: any): boolean => { const { searchParams } = request.nextUrl const previewCookie = request.cookies['__next_preview_data'] const previewParam = searchParams.get('preview') @@ -67,9 +67,7 @@ export async function middleware(request: NextRequest) { } // Check if an internal redirect exists in sanity - const redirect = await getRedirectUrl(pathname.replace(DOT_HTML, ''), request.nextUrl.locale) - if (redirect) { const locale = getLocaleFromName(redirect.lang) return NextResponse.redirect(`${origin}/${locale}${redirect.to !== '/' ? redirect.to : ''}`, PERMANENT_REDIRECT) diff --git a/web/next.config.mjs b/web/next.config.mjs index 9d5f8307a..eea9d6c4c 100644 --- a/web/next.config.mjs +++ b/web/next.config.mjs @@ -34,10 +34,7 @@ const pageExtensions = getPageExtensions(dataset) export default withTM( withBundle({ - experimental: { - // https://nextjs.org/docs/basic-features/data-fetching/incremental-static-regeneration#self-hosting-isr - isrMemoryCacheSize: 0, - }, + output: 'standalone', pageExtensions: pageExtensions, reactStrictMode: true, eslint: { diff --git a/web/package.json b/web/package.json index f692596b4..237121355 100644 --- a/web/package.json +++ b/web/package.json @@ -48,7 +48,7 @@ "html-entities": "^2.3.2", "ics": "^2.35.0", "instantsearch.js": "^4.47.0", - "next": "^12.1.0", + "next": "^12.3.1", "next-sanity": "^0.8.4", "next-sanity-image": "^3.2.1", "next-seo": "^5.1.0", diff --git a/web/pages/api/revalidate.js b/web/pages/api/revalidate.js index 6aa1bf068..255b37cc0 100644 --- a/web/pages/api/revalidate.js +++ b/web/pages/api/revalidate.js @@ -23,21 +23,25 @@ export default async function handler(req, res) { } const data = JSON.parse(body) try { - // @TODO Remove 'unstable' after upgrading next to ^12.2.0 if (['page', 'landingPage', 'event'].includes(data._type)) { const routes = await sanityClient.fetch( groq`*[_type match "route_*" && content._ref == $id]{"slug": slug.current}`, { id: data._id }, ) + // Revalidade every path that points to the modified document routes.map(async (route) => { //console.log('Revalidated: ', route.slug) - if (route.slug) await res.unstable_revalidate(route.slug) + if (route.slug) { + console.log(new Date(), 'Revalidating: ', route.slug) + await res.revalidate(route.slug) + } }) return res.json({ revalidated: true, slug: routes }) } else { // console.log('Revalidated: ', data.slug) - if (data.slug) await res.unstable_revalidate(data.slug) + console.log(new Date(), 'Revalidating: ', data?.slug) + if (data.slug) await res.revalidate(data.slug) return res.json({ revalidated: true, slug: data.slug }) } } catch (err) { diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index 32982b337..b48d47395 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -51,7 +51,7 @@ specifiers: jest: ^28.1.0 jest-environment-jsdom: ^28.1.0 jest-styled-components: ^7.0.8 - next: ^12.1.0 + next: ^12.3.1 next-sanity: ^0.8.4 next-sanity-image: ^3.2.1 next-seo: ^5.1.0 @@ -110,10 +110,10 @@ dependencies: html-entities: 2.3.3 ics: 2.35.0 instantsearch.js: 4.47.0_algoliasearch@4.13.0 - next: 12.1.5_aandee56mam3mbdnvxoybr464e + next: 12.3.1_aandee56mam3mbdnvxoybr464e next-sanity: 0.8.4_react@18.1.0 - next-sanity-image: 3.2.1_phsaitihabgo6obm25p365gjsi - next-seo: 5.4.0_iw2ijl5yq2m4rs4sgxacncq4yu + next-sanity-image: 3.2.1_4zrq3xi24vutw7czs75t6d5mra + next-seo: 5.4.0_y3vnqhrq6kacn7e7j5j4tjxiry next-transpile-modules: 9.0.0 only-allow: 1.1.1 query-string: 7.1.1 @@ -3514,8 +3514,8 @@ packages: - utf-8-validate dev: false - /@next/env/12.1.5: - resolution: {integrity: sha512-+34yUJslfJi7Lyx6ELuN8nWcOzi27izfYnZIC1Dqv7kmmfiBVxgzR3BXhlvEMTKC2IRJhXVs2FkMY+buQe3k7Q==} + /@next/env/12.3.1: + resolution: {integrity: sha512-9P9THmRFVKGKt9DYqeC2aKIxm8rlvkK38V1P1sRE7qyoPBIs8l9oo79QoSdPtOWfzkbDAVUqvbQGgTMsb8BtJg==} dev: false /@next/eslint-plugin-next/12.1.5: @@ -3524,8 +3524,8 @@ packages: glob: 7.1.7 dev: true - /@next/swc-android-arm-eabi/12.1.5: - resolution: {integrity: sha512-SKnGTdYcoN04Y2DvE0/Y7/MjkA+ltsmbuH/y/hR7Ob7tsj+8ZdOYuk+YvW1B8dY20nDPHP58XgDTSm2nA8BzzA==} + /@next/swc-android-arm-eabi/12.3.1: + resolution: {integrity: sha512-i+BvKA8tB//srVPPQxIQN5lvfROcfv4OB23/L1nXznP+N/TyKL8lql3l7oo2LNhnH66zWhfoemg3Q4VJZSruzQ==} engines: {node: '>= 10'} cpu: [arm] os: [android] @@ -3533,8 +3533,8 @@ packages: dev: false optional: true - /@next/swc-android-arm64/12.1.5: - resolution: {integrity: sha512-YXiqgQ/9Rxg1dXp6brXbeQM1JDx9SwUY/36JiE+36FXqYEmDYbxld9qkX6GEzkc5rbwJ+RCitargnzEtwGW0mw==} + /@next/swc-android-arm64/12.3.1: + resolution: {integrity: sha512-CmgU2ZNyBP0rkugOOqLnjl3+eRpXBzB/I2sjwcGZ7/Z6RcUJXK5Evz+N0ucOxqE4cZ3gkTeXtSzRrMK2mGYV8Q==} engines: {node: '>= 10'} cpu: [arm64] os: [android] @@ -3542,8 +3542,8 @@ packages: dev: false optional: true - /@next/swc-darwin-arm64/12.1.5: - resolution: {integrity: sha512-y8mhldb/WFZ6lFeowkGfi0cO/lBdiBqDk4T4LZLvCpoQp4Or/NzUN6P5NzBQZ5/b4oUHM/wQICEM+1wKA4qIVw==} + /@next/swc-darwin-arm64/12.3.1: + resolution: {integrity: sha512-hT/EBGNcu0ITiuWDYU9ur57Oa4LybD5DOQp4f22T6zLfpoBMfBibPtR8XktXmOyFHrL/6FC2p9ojdLZhWhvBHg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -3551,8 +3551,8 @@ packages: dev: false optional: true - /@next/swc-darwin-x64/12.1.5: - resolution: {integrity: sha512-wqJ3X7WQdTwSGi0kIDEmzw34QHISRIQ5uvC+VXmsIlCPFcMA+zM5723uh8NfuKGquDMiEMS31a83QgkuHMYbwQ==} + /@next/swc-darwin-x64/12.3.1: + resolution: {integrity: sha512-9S6EVueCVCyGf2vuiLiGEHZCJcPAxglyckTZcEwLdJwozLqN0gtS0Eq0bQlGS3dH49Py/rQYpZ3KVWZ9BUf/WA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -3560,8 +3560,17 @@ packages: dev: false optional: true - /@next/swc-linux-arm-gnueabihf/12.1.5: - resolution: {integrity: sha512-WnhdM5duONMvt2CncAl+9pim0wBxDS2lHoo7ub/o/i1bRbs11UTzosKzEXVaTDCUkCX2c32lIDi1WcN2ZPkcdw==} + /@next/swc-freebsd-x64/12.3.1: + resolution: {integrity: sha512-qcuUQkaBZWqzM0F1N4AkAh88lLzzpfE6ImOcI1P6YeyJSsBmpBIV8o70zV+Wxpc26yV9vpzb+e5gCyxNjKJg5Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm-gnueabihf/12.3.1: + resolution: {integrity: sha512-diL9MSYrEI5nY2wc/h/DBewEDUzr/DqBjIgHJ3RUNtETAOB3spMNHvJk2XKUDjnQuluLmFMloet9tpEqU2TT9w==} engines: {node: '>= 10'} cpu: [arm] os: [linux] @@ -3569,8 +3578,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-gnu/12.1.5: - resolution: {integrity: sha512-Jq2H68yQ4bLUhR/XQnbw3LDW0GMQn355qx6rU36BthDLeGue7YV7MqNPa8GKvrpPocEMW77nWx/1yI6w6J07gw==} + /@next/swc-linux-arm64-gnu/12.3.1: + resolution: {integrity: sha512-o/xB2nztoaC7jnXU3Q36vGgOolJpsGG8ETNjxM1VAPxRwM7FyGCPHOMk1XavG88QZSQf+1r+POBW0tLxQOJ9DQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -3578,8 +3587,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-musl/12.1.5: - resolution: {integrity: sha512-KgPjwdbhDqXI7ghNN8V/WAiLquc9Ebe8KBrNNEL0NQr+yd9CyKJ6KqjayVkmX+hbHzbyvbui/5wh/p3CZQ9xcQ==} + /@next/swc-linux-arm64-musl/12.3.1: + resolution: {integrity: sha512-2WEasRxJzgAmP43glFNhADpe8zB7kJofhEAVNbDJZANp+H4+wq+/cW1CdDi8DqjkShPEA6/ejJw+xnEyDID2jg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -3587,8 +3596,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-gnu/12.1.5: - resolution: {integrity: sha512-O2ErUTvCJ6DkNTSr9pbu1n3tcqykqE/ebty1rwClzIYdOgpB3T2MfEPP+K7GhUR87wmN/hlihO9ch7qpVFDGKw==} + /@next/swc-linux-x64-gnu/12.3.1: + resolution: {integrity: sha512-JWEaMyvNrXuM3dyy9Pp5cFPuSSvG82+yABqsWugjWlvfmnlnx9HOQZY23bFq3cNghy5V/t0iPb6cffzRWylgsA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -3596,8 +3605,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-musl/12.1.5: - resolution: {integrity: sha512-1eIlZmlO/VRjxxzUBcVosf54AFU3ltAzHi+BJA+9U/lPxCYIsT+R4uO3QksRzRjKWhVQMRjEnlXyyq5SKJm7BA==} + /@next/swc-linux-x64-musl/12.3.1: + resolution: {integrity: sha512-xoEWQQ71waWc4BZcOjmatuvPUXKTv6MbIFzpm4LFeCHsg2iwai0ILmNXf81rJR+L1Wb9ifEke2sQpZSPNz1Iyg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -3605,8 +3614,8 @@ packages: dev: false optional: true - /@next/swc-win32-arm64-msvc/12.1.5: - resolution: {integrity: sha512-oromsfokbEuVb0CBLLE7R9qX3KGXucZpsojLpzUh1QJjuy1QkrPJncwr8xmWQnwgtQ6ecMWXgXPB+qtvizT9Tw==} + /@next/swc-win32-arm64-msvc/12.3.1: + resolution: {integrity: sha512-hswVFYQYIeGHE2JYaBVtvqmBQ1CppplQbZJS/JgrVI3x2CurNhEkmds/yqvDONfwfbttTtH4+q9Dzf/WVl3Opw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -3614,8 +3623,8 @@ packages: dev: false optional: true - /@next/swc-win32-ia32-msvc/12.1.5: - resolution: {integrity: sha512-a/51L5KzBpeZSW9LbekMo3I3Cwul+V+QKwbEIMA+Qwb2qrlcn1L9h3lt8cHqNTFt2y72ce6aTwDTw1lyi5oIRA==} + /@next/swc-win32-ia32-msvc/12.3.1: + resolution: {integrity: sha512-Kny5JBehkTbKPmqulr5i+iKntO5YMP+bVM8Hf8UAmjSMVo3wehyLVc9IZkNmcbxi+vwETnQvJaT5ynYBkJ9dWA==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -3623,8 +3632,8 @@ packages: dev: false optional: true - /@next/swc-win32-x64-msvc/12.1.5: - resolution: {integrity: sha512-/SoXW1Ntpmpw3AXAzfDRaQidnd8kbZ2oSni8u5z0yw6t4RwJvmdZy1eOaAADRThWKV+2oU90++LSnXJIwBRWYQ==} + /@next/swc-win32-x64-msvc/12.3.1: + resolution: {integrity: sha512-W1ijvzzg+kPEX6LAc+50EYYSEo0FVu7dmTE+t+DM4iOLqgGHoW9uYSz9wCVdkXOEEMP9xhXfGpcSxsfDucyPkA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -5220,6 +5229,12 @@ packages: resolve-from: 5.0.0 dev: true + /@swc/helpers/0.4.11: + resolution: {integrity: sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==} + dependencies: + tslib: 2.4.0 + dev: false + /@testing-library/dom/8.13.0: resolution: {integrity: sha512-9VHgfIatKNXQNaZTtLnalIy0jNZzY35a4S3oi08YAt9Hv1VsfZ/DfA45lM8D/UhtHBGJ4/lGwp0PZkVndRkoOQ==} engines: {node: '>=12'} @@ -6199,7 +6214,7 @@ packages: hasBin: true dependencies: browserslist: 4.21.1 - caniuse-lite: 1.0.30001363 + caniuse-lite: 1.0.30001418 normalize-range: 0.1.2 num2fraction: 1.2.2 picocolors: 0.2.1 @@ -6706,7 +6721,7 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001363 + caniuse-lite: 1.0.30001418 electron-to-chromium: 1.4.182 escalade: 3.1.1 node-releases: 2.0.5 @@ -6717,7 +6732,7 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001363 + caniuse-lite: 1.0.30001418 electron-to-chromium: 1.4.182 node-releases: 2.0.5 update-browserslist-db: 1.0.4_browserslist@4.21.1 @@ -6893,12 +6908,8 @@ packages: /camelize/1.0.0: resolution: {integrity: sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=} - /caniuse-lite/1.0.30001331: - resolution: {integrity: sha512-Y1xk6paHpUXKP/P6YjQv1xqyTbgAP05ycHBcRdQjTcyXlWol868sJJPlmk5ylOekw2BrucWes5jk+LvVd7WZ5Q==} - dev: false - - /caniuse-lite/1.0.30001363: - resolution: {integrity: sha512-HpQhpzTGGPVMnCjIomjt+jvyUu8vNFo3TaDiZ/RcoTrlOq/5+tC8zHdsbgFB6MxmaY+jCpsH09aD80Bb4Ow3Sg==} + /caniuse-lite/1.0.30001418: + resolution: {integrity: sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg==} /capture-exit/2.0.0: resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} @@ -11182,7 +11193,7 @@ packages: resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} dev: true - /next-sanity-image/3.2.1_phsaitihabgo6obm25p365gjsi: + /next-sanity-image/3.2.1_4zrq3xi24vutw7czs75t6d5mra: resolution: {integrity: sha512-lnynR/h7kD5ueVxQoam8ElKXb+bGWuU1cP+PCwx1NzIiBUHM2wBMnvmpt+emubGocMaIURT/iwPU46VnmB9rsQ==} peerDependencies: '@sanity/client': ^2.11.0 @@ -11191,7 +11202,7 @@ packages: dependencies: '@sanity/client': 3.3.0 '@sanity/image-url': 0.140.22 - next: 12.1.5_aandee56mam3mbdnvxoybr464e + next: 12.3.1_aandee56mam3mbdnvxoybr464e react: 18.1.0 dev: false @@ -11209,14 +11220,14 @@ packages: - supports-color dev: false - /next-seo/5.4.0_iw2ijl5yq2m4rs4sgxacncq4yu: + /next-seo/5.4.0_y3vnqhrq6kacn7e7j5j4tjxiry: resolution: {integrity: sha512-R9DhajPwJnR/lsF2hZ8cN8uqr5CVITsRrCG1AF5+ufcaybKYOvnH8sH9MaH4/hpkps3PQ9H71S7J7SPYixAYzQ==} peerDependencies: next: ^8.1.1-canary.54 || >=9.0.0 react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - next: 12.1.5_aandee56mam3mbdnvxoybr464e + next: 12.3.1_aandee56mam3mbdnvxoybr464e react: 18.1.0 react-dom: 18.1.0_react@18.1.0 dev: false @@ -11228,8 +11239,8 @@ packages: escalade: 3.1.1 dev: false - /next/12.1.5_aandee56mam3mbdnvxoybr464e: - resolution: {integrity: sha512-YGHDpyfgCfnT5GZObsKepmRnne7Kzp7nGrac07dikhutWQug7hHg85/+sPJ4ZW5Q2pDkb+n0FnmLkmd44htIJQ==} + /next/12.3.1_aandee56mam3mbdnvxoybr464e: + resolution: {integrity: sha512-l7bvmSeIwX5lp07WtIiP9u2ytZMv7jIeB8iacR28PuUEFG5j0HGAPnMqyG5kbZNBG2H7tRsrQ4HCjuMOPnANZw==} engines: {node: '>=12.22.0'} hasBin: true peerDependencies: @@ -11246,25 +11257,28 @@ packages: sass: optional: true dependencies: - '@next/env': 12.1.5 - caniuse-lite: 1.0.30001331 - postcss: 8.4.5 + '@next/env': 12.3.1 + '@swc/helpers': 0.4.11 + caniuse-lite: 1.0.30001418 + postcss: 8.4.14 react: 18.1.0 react-dom: 18.1.0_react@18.1.0 - styled-jsx: 5.0.1_z3ugptwz6jsc4ljrvw5kqrjwse + styled-jsx: 5.0.7_z3ugptwz6jsc4ljrvw5kqrjwse + use-sync-external-store: 1.2.0_react@18.1.0 optionalDependencies: - '@next/swc-android-arm-eabi': 12.1.5 - '@next/swc-android-arm64': 12.1.5 - '@next/swc-darwin-arm64': 12.1.5 - '@next/swc-darwin-x64': 12.1.5 - '@next/swc-linux-arm-gnueabihf': 12.1.5 - '@next/swc-linux-arm64-gnu': 12.1.5 - '@next/swc-linux-arm64-musl': 12.1.5 - '@next/swc-linux-x64-gnu': 12.1.5 - '@next/swc-linux-x64-musl': 12.1.5 - '@next/swc-win32-arm64-msvc': 12.1.5 - '@next/swc-win32-ia32-msvc': 12.1.5 - '@next/swc-win32-x64-msvc': 12.1.5 + '@next/swc-android-arm-eabi': 12.3.1 + '@next/swc-android-arm64': 12.3.1 + '@next/swc-darwin-arm64': 12.3.1 + '@next/swc-darwin-x64': 12.3.1 + '@next/swc-freebsd-x64': 12.3.1 + '@next/swc-linux-arm-gnueabihf': 12.3.1 + '@next/swc-linux-arm64-gnu': 12.3.1 + '@next/swc-linux-arm64-musl': 12.3.1 + '@next/swc-linux-x64-gnu': 12.3.1 + '@next/swc-linux-x64-musl': 12.3.1 + '@next/swc-win32-arm64-msvc': 12.3.1 + '@next/swc-win32-ia32-msvc': 12.3.1 + '@next/swc-win32-x64-msvc': 12.3.1 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -12008,8 +12022,8 @@ packages: source-map: 0.6.1 dev: true - /postcss/8.4.5: - resolution: {integrity: sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==} + /postcss/8.4.14: + resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.4 @@ -13675,8 +13689,8 @@ packages: shallowequal: 1.1.0 supports-color: 5.5.0 - /styled-jsx/5.0.1_z3ugptwz6jsc4ljrvw5kqrjwse: - resolution: {integrity: sha512-+PIZ/6Uk40mphiQJJI1202b+/dYeTVd9ZnMPR80pgiWbjIwvN2zIp4r9et0BgqBuShh48I0gttPlAXA7WVvBxw==} + /styled-jsx/5.0.7_z3ugptwz6jsc4ljrvw5kqrjwse: + resolution: {integrity: sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==} engines: {node: '>= 12.0.0'} peerDependencies: '@babel/core': '*'