From 521417d58b781fa36a5b2fc848b533cb18c916c6 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 24 Nov 2022 18:16:36 +0100 Subject: [PATCH 001/312] Next.js 13 `app` folder example --- packages/example-next-13/.eslintrc.js | 10 + packages/example-next-13/.gitignore | 4 + .../example-next-13/.vscode/settings.json | 4 + packages/example-next-13/README.md | 3 + packages/example-next-13/messages/de.json | 12 + packages/example-next-13/messages/en.json | 12 + packages/example-next-13/next-env.d.ts | 5 + packages/example-next-13/next.config.js | 3 + packages/example-next-13/package.json | 30 + packages/example-next-13/public/favicon.ico | Bin 0 -> 15086 bytes .../src/app/[locale]/layout.tsx | 19 + .../example-next-13/src/app/[locale]/page.tsx | 16 + packages/example-next-13/src/app/layout.tsx | 20 + .../src/components/LocaleSwitcher.tsx | 15 + .../src/components/PageLayout.tsx | 32 + packages/example-next-13/src/i18n.tsx | 8 + packages/example-next-13/src/middleware.tsx | 4 + .../src/next-intl/I18nConfig.tsx | 7 + .../src/next-intl/NextIntlProvider.tsx | 17 + .../example-next-13/src/next-intl/README.md | 1 + .../src/next-intl/server/NextIntlCookie.tsx | 32 + .../src/next-intl/server/middleware.tsx | 28 + .../src/next-intl/server/resolveLocale.tsx | 56 + packages/example-next-13/src/pages/.gitkeep | 4 + packages/example-next-13/tsconfig.json | 36 + packages/example-next-13/yarn.lock | 2419 +++++++++++++++++ packages/example/.vscode/settings.json | 4 + 27 files changed, 2801 insertions(+) create mode 100644 packages/example-next-13/.eslintrc.js create mode 100644 packages/example-next-13/.gitignore create mode 100644 packages/example-next-13/.vscode/settings.json create mode 100644 packages/example-next-13/README.md create mode 100644 packages/example-next-13/messages/de.json create mode 100644 packages/example-next-13/messages/en.json create mode 100644 packages/example-next-13/next-env.d.ts create mode 100644 packages/example-next-13/next.config.js create mode 100644 packages/example-next-13/package.json create mode 100644 packages/example-next-13/public/favicon.ico create mode 100644 packages/example-next-13/src/app/[locale]/layout.tsx create mode 100644 packages/example-next-13/src/app/[locale]/page.tsx create mode 100644 packages/example-next-13/src/app/layout.tsx create mode 100644 packages/example-next-13/src/components/LocaleSwitcher.tsx create mode 100644 packages/example-next-13/src/components/PageLayout.tsx create mode 100644 packages/example-next-13/src/i18n.tsx create mode 100644 packages/example-next-13/src/middleware.tsx create mode 100644 packages/example-next-13/src/next-intl/I18nConfig.tsx create mode 100644 packages/example-next-13/src/next-intl/NextIntlProvider.tsx create mode 100644 packages/example-next-13/src/next-intl/README.md create mode 100644 packages/example-next-13/src/next-intl/server/NextIntlCookie.tsx create mode 100644 packages/example-next-13/src/next-intl/server/middleware.tsx create mode 100644 packages/example-next-13/src/next-intl/server/resolveLocale.tsx create mode 100644 packages/example-next-13/src/pages/.gitkeep create mode 100644 packages/example-next-13/tsconfig.json create mode 100644 packages/example-next-13/yarn.lock create mode 100644 packages/example/.vscode/settings.json diff --git a/packages/example-next-13/.eslintrc.js b/packages/example-next-13/.eslintrc.js new file mode 100644 index 000000000..f113ec889 --- /dev/null +++ b/packages/example-next-13/.eslintrc.js @@ -0,0 +1,10 @@ +require('eslint-config-molindo/setupPlugins'); + +module.exports = { + extends: ['molindo/typescript', 'molindo/react', 'plugin:@next/next/recommended'], + rules: { + 'react/react-in-jsx-scope': 'off', + 'jsx-a11y/anchor-is-valid': 'off', + 'react/display-name': 'off' + } +} diff --git a/packages/example-next-13/.gitignore b/packages/example-next-13/.gitignore new file mode 100644 index 000000000..04239e7d0 --- /dev/null +++ b/packages/example-next-13/.gitignore @@ -0,0 +1,4 @@ +/node_modules +/.next/ +.DS_Store +tsconfig.tsbuildinfo diff --git a/packages/example-next-13/.vscode/settings.json b/packages/example-next-13/.vscode/settings.json new file mode 100644 index 000000000..d0679104b --- /dev/null +++ b/packages/example-next-13/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "typescript.tsdk": "node_modules/typescript/lib", + "typescript.enablePromptUseWorkspaceTsdk": true +} \ No newline at end of file diff --git a/packages/example-next-13/README.md b/packages/example-next-13/README.md new file mode 100644 index 000000000..f8de937db --- /dev/null +++ b/packages/example-next-13/README.md @@ -0,0 +1,3 @@ +# example-next-13 + +An example that showcases usage of `next-intl` in the `app` folder of Next.js 13. diff --git a/packages/example-next-13/messages/de.json b/packages/example-next-13/messages/de.json new file mode 100644 index 000000000..2392d6c11 --- /dev/null +++ b/packages/example-next-13/messages/de.json @@ -0,0 +1,12 @@ +{ + "Index": { + "title": "Start", + "description": "Das ist die Startseite." + }, + "LocaleSwitcher": { + "switchLocale": "Zu {locale, select, de {Deutsch} en {Englisch} other {Unbekannt}} wechseln" + }, + "PageLayout": { + "pageTitle": "next-intl" + } +} diff --git a/packages/example-next-13/messages/en.json b/packages/example-next-13/messages/en.json new file mode 100644 index 000000000..fe746b9b1 --- /dev/null +++ b/packages/example-next-13/messages/en.json @@ -0,0 +1,12 @@ +{ + "Index": { + "title": "Home", + "description": "This is the home page." + }, + "LocaleSwitcher": { + "switchLocale": "Switch to {locale, select, de {German} en {English} other {Unknown}}" + }, + "PageLayout": { + "pageTitle": "next-intl" + } +} diff --git a/packages/example-next-13/next-env.d.ts b/packages/example-next-13/next-env.d.ts new file mode 100644 index 000000000..4f11a03dc --- /dev/null +++ b/packages/example-next-13/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/packages/example-next-13/next.config.js b/packages/example-next-13/next.config.js new file mode 100644 index 000000000..3a4751bf7 --- /dev/null +++ b/packages/example-next-13/next.config.js @@ -0,0 +1,3 @@ +module.exports = { + experimental: {appDir: true} +}; diff --git a/packages/example-next-13/package.json b/packages/example-next-13/package.json new file mode 100644 index 000000000..93c0498b4 --- /dev/null +++ b/packages/example-next-13/package.json @@ -0,0 +1,30 @@ +{ + "name": "example-next-13", + "version": "2.9.1", + "private": true, + "scripts": { + "dev": "next dev", + "lint": "eslint src && tsc", + "test": "echo 'No tests yet'", + "build": "next build", + "start": "next start" + }, + "dependencies": { + "accept-language-parser": "1.5.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "next": "^13.0.4", + "next-intl": "^2.9.1", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "typescript": "^4.6.3" + }, + "devDependencies": { + "@types/lodash": "^4.14.176", + "@types/node": "^17.0.23", + "@types/react": "^18.0.23", + "eslint": "^8.12.0", + "eslint-config-molindo": "^6.0.0", + "eslint-config-next": "^13.0.0" + } +} diff --git a/packages/example-next-13/public/favicon.ico b/packages/example-next-13/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4ddd8fff7086c240ed21438ca7d96f1b8dae0bc0 GIT binary patch literal 15086 zcmdU$O=uNY6vrnYO%#n9m0G$<)C8)FRuGb41&a%z2%-zOrYkKQ7LVcV8tZ8{r_I(J}2Xwd3WZ$*OwePxifd}IsgB? z@7{AiX5x7@UY)mPi>I{JyV~w~9iHd4w)*$0Jnt9fty0SKPwPGJD;0Q8Wn|)gA|*d3 zZJyV>ZcgVi%JR2KUOJ_pNiRu%l#WaPk^bu|*W~exGL*#z+iFOiKxv{cq~A-QNoSnvZWVz$%y2 z$kB(=jC597D#v2>V1NZC*rkY~fpzbN^>mc9}aM-le$W`3Rbh-!*zlSeaS_(t57xidzf?h9!_wJ6XMpeG;F(2?%@^} zTZz5QCkusdm&t8;0X=2;v z=4NyA=FO7%Pfbmky?gg2#`ihHeJl-sYxshdXBjsq7mY z8_mUw7gO^e8yhp7ot>$$ea>(%X}z;`>sB*5I-05ur%#_Y#Iv;R=W{QKf7*DOB3>4% zC)`u_AKPw8<7vuxS%^Q}Q;%QEpEOB4Eg@cp>j3vu@iWMsYu9*MV!RCVhdXmXI6u|B zOFS(xUWR$WJ@NV>s=meIX&K^WkiT6&bc&Dj`YnpP&5w(xWr&wS{&xM=By8vPv*j6; zM#a-I#mgXnIKv%r-oL19&_}`Ra6BzzybR*m{R{jzNz1x_B%V%BPv_?4GR8~GAFgn= z!d{p?v3*{0N<1AJ8Zs|lyeMUT8O4LM2F@IU!kI)_e}g@H_L#xJL9=w}(kLEj^5Mu? zPa!Gm`4#bW_3G7WI7ZpTonKL(#c+POu291V^0w=Gv7X=BY8=qTLOVb2w&WaA-W4pg z_ZPfVNg|8+{gJIFb*3*>V?2NfcG7m2$vk0h`@i3x4*QtFGv;}uQrr+*nI9_oTi_dv zxOXgioLZQ(?e_y}6iZ{#ZwxL^&=9>|`hvL_vv zayCHQqFj^5GrQ-*#;)IWnNEy;<($6sycVvrp4Uj4(FrcKN zvwpkUcIKIsPTVT}NSgmnYgOv+w20N4r9IMbr9Vq2rL(?rO&-rELs@J}6~-g|aZs9- zPD^QmIHgQhiVe2-NF(pcs9(zWSaEo9&#=V@zLH3X3Xe$n+2j1XJi`aR@aZBuRp=+F zi|-_5@QLp@fnz1GEl+$$wFAG=4^msUQYjeW{!ptt`bniQ!+ya6(@K{v%63*JUtzrP zJy>8OjL&bR;WD}Vy1F`(R_p8QS z3)aiW1e0>+L40 z-*@!(_U7itD4r4d!TA^bRO^q1h6b~2*|K1rT(A3mOt7s~bNyvGRCE1lIqcL$qL`%e zF71v_e7gwkz@DKR`wz>H{y;x@CUvP_p)%OwBfQ>LmXi=0*h5xh{~07$vHiE{t1C-pXV!RjLzkh$YPT0;{WAHuhnKNhJu)lWgTA}x{_V=CVx2>(su;#M@ zA9w|M`q$Xc<8RBbW@GJ!#C#`=ZNB}iEh&4Pk&zMe=+Pt7-riman>=juzhBUvYv%ET z2M + {children} + + ); +} diff --git a/packages/example-next-13/src/app/[locale]/page.tsx b/packages/example-next-13/src/app/[locale]/page.tsx new file mode 100644 index 000000000..482a6ba48 --- /dev/null +++ b/packages/example-next-13/src/app/[locale]/page.tsx @@ -0,0 +1,16 @@ +'use client'; + +import {useTranslations} from 'next-intl'; +// import LocaleSwitcher from 'components/LocaleSwitcher'; +import PageLayout from 'components/PageLayout'; + +export default function Index() { + const t = useTranslations('Index'); + + return ( + +

{t('description')}

+ {/* */} +
+ ); +} diff --git a/packages/example-next-13/src/app/layout.tsx b/packages/example-next-13/src/app/layout.tsx new file mode 100644 index 000000000..d8618f217 --- /dev/null +++ b/packages/example-next-13/src/app/layout.tsx @@ -0,0 +1,20 @@ +import {ReactNode} from 'react'; +import i18n from 'i18n'; +import resolveLocale from 'next-intl/server/resolveLocale'; + +type Props = { + children: ReactNode; +}; + +export default function RootLayout({children}: Props) { + // TODO: Here's a problem: When there's no cookie yet, we can't use the locale + // from the URL. Something like `require('next/navigation').usePathname()` + // would be great, but that uses non-server context currently, so not an + // option in server components. `params` is also not an option, since they are + // only available from matched segments downwards. + return ( + + {children} + + ); +} diff --git a/packages/example-next-13/src/components/LocaleSwitcher.tsx b/packages/example-next-13/src/components/LocaleSwitcher.tsx new file mode 100644 index 000000000..9df1f0f3c --- /dev/null +++ b/packages/example-next-13/src/components/LocaleSwitcher.tsx @@ -0,0 +1,15 @@ +import {useLocale, useTranslations} from 'next-intl'; +import Link from 'next/link'; +import i18n from 'i18n'; + +export default function LocaleSwitcher() { + const t = useTranslations('LocaleSwitcher'); + const locale = useLocale(); + const otherLocale = i18n.locales.find((cur) => cur !== locale); + + return ( + + {t('switchLocale', {locale: otherLocale})} + + ); +} diff --git a/packages/example-next-13/src/components/PageLayout.tsx b/packages/example-next-13/src/components/PageLayout.tsx new file mode 100644 index 000000000..5f266b623 --- /dev/null +++ b/packages/example-next-13/src/components/PageLayout.tsx @@ -0,0 +1,32 @@ +import {useTranslations} from 'next-intl'; +import Head from 'next/head'; +import {ReactNode} from 'react'; + +type Props = { + children?: ReactNode; + title: string; +}; + +export default function PageLayout({children, title}: Props) { + const t = useTranslations('PageLayout'); + + return ( + <> + + {[title, t('pageTitle')].join(' - ')} + +
+
+

{title}

+ {children} +
+
+ + ); +} diff --git a/packages/example-next-13/src/i18n.tsx b/packages/example-next-13/src/i18n.tsx new file mode 100644 index 000000000..645c57143 --- /dev/null +++ b/packages/example-next-13/src/i18n.tsx @@ -0,0 +1,8 @@ +import NextI18nConfig from 'next-intl/I18nConfig'; + +const i18n: NextI18nConfig = { + locales: ['en', 'de'], + defaultLocale: 'en' +}; + +export default i18n; diff --git a/packages/example-next-13/src/middleware.tsx b/packages/example-next-13/src/middleware.tsx new file mode 100644 index 000000000..9d8762325 --- /dev/null +++ b/packages/example-next-13/src/middleware.tsx @@ -0,0 +1,4 @@ +import middleware from 'next-intl/server/middleware'; +import i18n from './i18n'; + +export default middleware(i18n); diff --git a/packages/example-next-13/src/next-intl/I18nConfig.tsx b/packages/example-next-13/src/next-intl/I18nConfig.tsx new file mode 100644 index 000000000..80028acac --- /dev/null +++ b/packages/example-next-13/src/next-intl/I18nConfig.tsx @@ -0,0 +1,7 @@ +type NextI18nConfig = { + locales: Array; + defaultLocale: string; + // TODO: `domains` +}; + +export default NextI18nConfig; diff --git a/packages/example-next-13/src/next-intl/NextIntlProvider.tsx b/packages/example-next-13/src/next-intl/NextIntlProvider.tsx new file mode 100644 index 000000000..8aa6edea5 --- /dev/null +++ b/packages/example-next-13/src/next-intl/NextIntlProvider.tsx @@ -0,0 +1,17 @@ +import {useRouter} from 'next/router'; +import React, {ComponentProps} from 'react'; +import {IntlProvider} from 'use-intl'; + +type Props = ComponentProps; + +export default function NextIntlProvider({locale, ...rest}: Props) { + let router; + try { + // eslint-disable-next-line react-hooks/rules-of-hooks + router = useRouter(); + } catch (error) { + // Throws that the router was not mounted in the app folder. + } + + return ; +} diff --git a/packages/example-next-13/src/next-intl/README.md b/packages/example-next-13/src/next-intl/README.md new file mode 100644 index 000000000..e0cc6723d --- /dev/null +++ b/packages/example-next-13/src/next-intl/README.md @@ -0,0 +1 @@ +This folder contains a draft of APIs that will be moved to `next-intl`. diff --git a/packages/example-next-13/src/next-intl/server/NextIntlCookie.tsx b/packages/example-next-13/src/next-intl/server/NextIntlCookie.tsx new file mode 100644 index 000000000..1313ba2d2 --- /dev/null +++ b/packages/example-next-13/src/next-intl/server/NextIntlCookie.tsx @@ -0,0 +1,32 @@ +import {ReadonlyRequestCookies} from 'next/dist/server/app-render'; +import { + RequestCookies, + ResponseCookies +} from 'next/dist/server/web/spec-extension/cookies'; + +// Reuse the legacy cookie name +// https://nextjs.org/docs/advanced-features/i18n-routing#leveraging-the-next_locale-cookie +const COOKIE_NAME = 'NEXT_LOCALE'; + +type Cookies = ReadonlyRequestCookies | ResponseCookies | RequestCookies; + +export default class NextIntlCookie { + private requestCookies: Cookies; + + constructor(requestCookies: Cookies) { + this.requestCookies = requestCookies; + } + + public hasLocale() { + return 'has' in this.requestCookies && this.requestCookies.has(COOKIE_NAME); + } + + public getLocale() { + return this.requestCookies.get(COOKIE_NAME)?.value; + } + + public setLocale(locale: string) { + // TODO: Waiting for https://beta.nextjs.org/docs/api-reference/cookies#thread-id=6YOM0 + this.requestCookies.set(COOKIE_NAME, locale); + } +} diff --git a/packages/example-next-13/src/next-intl/server/middleware.tsx b/packages/example-next-13/src/next-intl/server/middleware.tsx new file mode 100644 index 000000000..e086942fc --- /dev/null +++ b/packages/example-next-13/src/next-intl/server/middleware.tsx @@ -0,0 +1,28 @@ +import {NextRequest, NextResponse} from 'next/server'; +import NextI18nConfig from '../I18nConfig'; +import NextIntlCookie from './NextIntlCookie'; +import resolveLocale from './resolveLocale'; + +export default function createMiddleware(i18n: NextI18nConfig) { + return function middleware(request: NextRequest) { + const locale = resolveLocale( + i18n, + request.headers, + request.cookies, + request.nextUrl.pathname + ); + + // Ideally we could use the `headers()` and `cookies()` API here as well. + + let response; + if (request.nextUrl.pathname === '/') { + response = NextResponse.redirect(new URL('/' + locale, request.url)); + } else { + response = NextResponse.next(); + } + + new NextIntlCookie(response.cookies).setLocale(locale); + + return response; + }; +} diff --git a/packages/example-next-13/src/next-intl/server/resolveLocale.tsx b/packages/example-next-13/src/next-intl/server/resolveLocale.tsx new file mode 100644 index 000000000..db5747cf7 --- /dev/null +++ b/packages/example-next-13/src/next-intl/server/resolveLocale.tsx @@ -0,0 +1,56 @@ +import acceptLanguageParser from 'accept-language-parser'; +import {ReadonlyRequestCookies} from 'next/dist/server/app-render'; +import { + RequestCookies, + ResponseCookies +} from 'next/dist/server/web/spec-extension/cookies'; +import NextI18nConfig from '../I18nConfig'; +import NextIntlCookie from './NextIntlCookie'; + +export default function resolveLocale( + i18n: NextI18nConfig, + requestHeaders?: Headers, + requestCookies?: ReadonlyRequestCookies | ResponseCookies | RequestCookies, + pathname?: string +) { + if (!requestHeaders) requestHeaders = require('next/headers').headers(); + if (!requestCookies) requestCookies = require('next/headers').cookies(); + + let locale; + + // Prio 1: Use route prefix + if (pathname) { + const segments = pathname.split('/'); + if (segments.length > 1) { + const segment = segments[1]; + if (i18n.locales.includes(segment)) { + locale = segment; + } + } + } + + // Prio 2: Use existing cookie + if (!locale && requestCookies) { + const nextIntlCookie = new NextIntlCookie(requestCookies); + + if (nextIntlCookie.hasLocale()) { + locale = nextIntlCookie.getLocale(); + } + } + + // Prio 3: Use accept-language header + if (!locale && requestHeaders) { + locale = + acceptLanguageParser.pick( + i18n.locales, + requestHeaders.get('accept-language') || i18n.defaultLocale + ) || i18n.defaultLocale; + } + + // Prio 5: Use default locale + if (!locale) { + locale = i18n.defaultLocale; + } + + return locale; +} diff --git a/packages/example-next-13/src/pages/.gitkeep b/packages/example-next-13/src/pages/.gitkeep new file mode 100644 index 000000000..6aa6f5929 --- /dev/null +++ b/packages/example-next-13/src/pages/.gitkeep @@ -0,0 +1,4 @@ +Next.js currently has a bug, where the `pages` folder must exist for middleware to run. +But maybe we'll be able to remove the middleware anyway once there is a new setter API for cookies. + +See https://github.com/vercel/next.js/pull/43205 diff --git a/packages/example-next-13/tsconfig.json b/packages/example-next-13/tsconfig.json new file mode 100644 index 000000000..2cf8821cc --- /dev/null +++ b/packages/example-next-13/tsconfig.json @@ -0,0 +1,36 @@ +{ + "extends": "eslint-config-molindo/tsconfig.json", + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "baseUrl": "src", + "allowJs": true, + "skipLibCheck": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ] + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/packages/example-next-13/yarn.lock b/packages/example-next-13/yarn.lock new file mode 100644 index 000000000..564f0ca7e --- /dev/null +++ b/packages/example-next-13/yarn.lock @@ -0,0 +1,2419 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/helper-validator-identifier@^7.15.7", "@babel/helper-validator-identifier@^7.18.6": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/runtime-corejs3@^7.10.2": + version "7.20.1" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz#d0775a49bb5fba77e42cbb7276c9955c7b05af8d" + integrity sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg== + dependencies: + core-js-pure "^3.25.1" + regenerator-runtime "^0.13.10" + +"@babel/runtime@^7.10.2", "@babel/runtime@^7.18.9": + version "7.20.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.1.tgz#1148bb33ab252b165a06698fde7576092a78b4a9" + integrity sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg== + dependencies: + regenerator-runtime "^0.13.10" + +"@eslint/eslintrc@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" + integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@formatjs/ecma402-abstract@1.11.4": + version "1.11.4" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz#b962dfc4ae84361f9f08fbce411b4e4340930eda" + integrity sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw== + dependencies: + "@formatjs/intl-localematcher" "0.2.25" + tslib "^2.1.0" + +"@formatjs/ecma402-abstract@^1.11.4": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.13.0.tgz#df6db3cbee0182bbd2fd6217103781c802aee819" + integrity sha512-CQ8Ykd51jYD1n05dtoX6ns6B9n/+6ZAxnWUAonvHC4kkuAemROYBhHkEB4tm1uVrRlE7gLDqXkAnY51Y0pRCWQ== + dependencies: + "@formatjs/intl-localematcher" "0.2.31" + tslib "2.4.0" + +"@formatjs/fast-memoize@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz#e6f5aee2e4fd0ca5edba6eba7668e2d855e0fc21" + integrity sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg== + dependencies: + tslib "^2.1.0" + +"@formatjs/icu-messageformat-parser@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz#a54293dd7f098d6a6f6a084ab08b6d54a3e8c12d" + integrity sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + "@formatjs/icu-skeleton-parser" "1.3.6" + tslib "^2.1.0" + +"@formatjs/icu-skeleton-parser@1.3.6": + version "1.3.6" + resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz#4ce8c0737d6f07b735288177049e97acbf2e8964" + integrity sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + tslib "^2.1.0" + +"@formatjs/intl-localematcher@0.2.25": + version "0.2.25" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz#60892fe1b271ec35ba07a2eb018a2dd7bca6ea3a" + integrity sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA== + dependencies: + tslib "^2.1.0" + +"@formatjs/intl-localematcher@0.2.31": + version "0.2.31" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.2.31.tgz#aada2b1e58211460cedba56889e3c489117eb6eb" + integrity sha512-9QTjdSBpQ7wHShZgsNzNig5qT3rCPvmZogS/wXZzKotns5skbXgs0I7J8cuN0PPqXyynvNVuN+iOKhNS2eb+ZA== + dependencies: + tslib "2.4.0" + +"@humanwhocodes/config-array@^0.11.6": + version "0.11.7" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.7.tgz#38aec044c6c828f6ed51d5d7ae3d9b9faf6dbb0f" + integrity sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@next/env@13.0.4": + version "13.0.4" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.0.4.tgz#249a21be88fa61e1a712939db00b9d02764831f4" + integrity sha512-N5Z3bdxBzoxrC5bwykDFITzdWuwDteOdZ+7nxixY+I1XpRX8/iQYbw2wuXMdqdfBGm2NNUpAqg8YF2e4oAC2UQ== + +"@next/eslint-plugin-next@13.0.4": + version "13.0.4" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-13.0.4.tgz#46800f48d9f81e8bb460319a15a00bf2f4016e91" + integrity sha512-jZ4urKT+aO9QHm3ttihrIQscQISDSKK8isAom750+EySn9o3LCSkTdPGBtvBqY7Yku+NqhfQempR5J58DqTaVg== + dependencies: + glob "7.1.7" + +"@next/swc-android-arm-eabi@13.0.4": + version "13.0.4" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.4.tgz#684fe26ff2a05b9dd8c4fb84bc87ba807e3bddc0" + integrity sha512-SD9H+/zuV3L0oHIhsDdFkDqFtg6pIHtqRUPlsrNdOsmWXgMlSzxBmwt2ta4kyrazS62BQu7XRUG++ZyODS7AWg== + +"@next/swc-android-arm64@13.0.4": + version "13.0.4" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.0.4.tgz#6bc985b78978fc42eaf723bbd21d3b27f673a1fe" + integrity sha512-F8W5WcBbdn/zBoy32/mQiefs9DNsT12CTSSVCsO8GvQR7GjJU+uduQ4drKcSDoDLuAFULc2jDN06Circq4vuQg== + +"@next/swc-darwin-arm64@13.0.4": + version "13.0.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.4.tgz#2a471486bd0d5737104f62807b23cb9743e3cb08" + integrity sha512-/lajev+9GSie+rRTl5z8skW9RJwZ+TwMKLzzM24TbDk8lUjqPTyJZ/cU0NDj8J7VQAZ6EehACSh9rcJeBRtLuA== + +"@next/swc-darwin-x64@13.0.4": + version "13.0.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.4.tgz#f921ea5d09df6bb4fcace3639b9a2e4587212c0e" + integrity sha512-HK4b2rFiju8d40GTL/jH9U6OQ7BYA2MeEHs7Dm7Rp7kwQtLzP3z6osdQS8er20tIFHDE4b+oVBy03ZUQkHf0Pg== + +"@next/swc-freebsd-x64@13.0.4": + version "13.0.4" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.4.tgz#04f04f83aaa287fc8c429f688b431c39ce05ede3" + integrity sha512-xBvIGLaGzZtgJfRRJ2DBN82DQCJ/O7jkXyBp8X/vHefPWyVXVqF6C68Rv8ADp11thPpf8WpjkvDDLb9AuWHQUA== + +"@next/swc-linux-arm-gnueabihf@13.0.4": + version "13.0.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.4.tgz#45b9f02bf722d212611819fe847fb58355c1dd4b" + integrity sha512-s13pxNp9deKmmxEGTp1MoL1e4nf4wbEymEaHgFxUlhoR1OD9tK8oTNrQphQePJgVjzcWmRGH/dX7O9mVkHbU/g== + +"@next/swc-linux-arm64-gnu@13.0.4": + version "13.0.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.4.tgz#940c756543264a098ecfae1aa92129a5ff5540dd" + integrity sha512-Lklo65usNzoYwjX51CpDKOepWVZBdwO49/Jz3djxiYUr2lRtpDVnlfwCvzN+47j3BMVMWtC2ndIi8Q4s3J0v4g== + +"@next/swc-linux-arm64-musl@13.0.4": + version "13.0.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.4.tgz#1a0c16a648973475214786472cafe4e03f2a07a7" + integrity sha512-+3BXtXBwjVhd5lahDe5nKZ7EwD6hE/oLFQkITCvgxymU5qYHGlLFyF52/lyw8qhyxoCr7mMVsUFhlCzVwCfNjg== + +"@next/swc-linux-x64-gnu@13.0.4": + version "13.0.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.4.tgz#5d6a92ebfb2226bd4c34be8edfc132283fd4b055" + integrity sha512-QB8qoZrvHhZsz62nUrTKlp5IiZ8I7KZsaa6437H/W/NOZHLGJjCxROnhUjLvKVe/T5P86pjya2SUOUqWAjz4Pg== + +"@next/swc-linux-x64-musl@13.0.4": + version "13.0.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.4.tgz#060797dc921c4af73521fde2a4198855f9e3bb34" + integrity sha512-WaahF6DYUQRg1QqIMcuOu2ZsFhS3aC5iWeQyeptMHklP9wb4FfTNmBArKHknX/GXD8P9gI38WTAHJ25cc0zVwg== + +"@next/swc-win32-arm64-msvc@13.0.4": + version "13.0.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.4.tgz#27629e72200cd479ad5231ae79e95291c476771d" + integrity sha512-FD+k1j2jeY0aKcqcpzFKfTsv55PPmIZ5GKDyPjjV5AO6XvQ4nALwWl4JwizjH2426TfLXObb+C3MH0bl9Ok1Kw== + +"@next/swc-win32-ia32-msvc@13.0.4": + version "13.0.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.4.tgz#d7c89406b2a484f448c7b5af667b5eb537483695" + integrity sha512-+Q/Q8Ydvz3X3U84CyZdNv1HC7fE43k+xB8C6b3IFmWGa5Tu2tfskQ2FsUNBrYreZjhFC/894J3rVQ6Vj6Auugg== + +"@next/swc-win32-x64-msvc@13.0.4": + version "13.0.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.4.tgz#2c3ede793e90d632e1dbdb0e4851f6f32132fba8" + integrity sha512-vXtbo9N1FdtZZRcv4BliU28tTYrkb1EnVpUiiFFe88I6kS9aZVTMY9Z/OtDR52rl1JF1hgs9sL/59D/TQqSATQ== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@pkgr/utils@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.3.1.tgz#0a9b06ffddee364d6642b3cd562ca76f55b34a03" + integrity sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw== + dependencies: + cross-spawn "^7.0.3" + is-glob "^4.0.3" + open "^8.4.0" + picocolors "^1.0.0" + tiny-glob "^0.2.9" + tslib "^2.4.0" + +"@rushstack/eslint-patch@^1.1.1", "@rushstack/eslint-patch@^1.1.3": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" + integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg== + +"@swc/helpers@0.4.11": + version "0.4.11" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.11.tgz#db23a376761b3d31c26502122f349a21b592c8de" + integrity sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw== + dependencies: + tslib "^2.4.0" + +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/lodash@^4.14.176": + version "4.14.189" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.189.tgz#975ff8c38da5ae58b751127b19ad5e44b5b7f6d2" + integrity sha512-kb9/98N6X8gyME9Cf7YaqIMvYGnBSWqEci6tiettE6iJWH1XdJz/PO8LB0GtLCG7x8dU3KWhZT+lA1a35127tA== + +"@types/node@^17.0.23": + version "17.0.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + +"@types/normalize-package-data@^2.4.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + +"@types/prop-types@*": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/react@^18.0.23": + version "18.0.25" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.25.tgz#8b1dcd7e56fe7315535a4af25435e0bb55c8ae44" + integrity sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/scheduler@*": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + +"@typescript-eslint/eslint-plugin@^5.0.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.44.0.tgz#105788f299050c917eb85c4d9fd04b089e3740de" + integrity sha512-j5ULd7FmmekcyWeArx+i8x7sdRHzAtXTkmDPthE4amxZOWKFK7bomoJ4r7PJ8K7PoMzD16U8MmuZFAonr1ERvw== + dependencies: + "@typescript-eslint/scope-manager" "5.44.0" + "@typescript-eslint/type-utils" "5.44.0" + "@typescript-eslint/utils" "5.44.0" + debug "^4.3.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.42.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.44.0.tgz#99e2c710a2252191e7a79113264f438338b846ad" + integrity sha512-H7LCqbZnKqkkgQHaKLGC6KUjt3pjJDx8ETDqmwncyb6PuoigYajyAwBGz08VU/l86dZWZgI4zm5k2VaKqayYyA== + dependencies: + "@typescript-eslint/scope-manager" "5.44.0" + "@typescript-eslint/types" "5.44.0" + "@typescript-eslint/typescript-estree" "5.44.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.44.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.44.0.tgz#988c3f34b45b3474eb9ff0674c18309dedfc3e04" + integrity sha512-2pKml57KusI0LAhgLKae9kwWeITZ7IsZs77YxyNyIVOwQ1kToyXRaJLl+uDEXzMN5hnobKUOo2gKntK9H1YL8g== + dependencies: + "@typescript-eslint/types" "5.44.0" + "@typescript-eslint/visitor-keys" "5.44.0" + +"@typescript-eslint/type-utils@5.44.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.44.0.tgz#bc5a6e8a0269850714a870c9268c038150dfb3c7" + integrity sha512-A1u0Yo5wZxkXPQ7/noGkRhV4J9opcymcr31XQtOzcc5nO/IHN2E2TPMECKWYpM3e6olWEM63fq/BaL1wEYnt/w== + dependencies: + "@typescript-eslint/typescript-estree" "5.44.0" + "@typescript-eslint/utils" "5.44.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.44.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.44.0.tgz#f3f0b89aaff78f097a2927fe5688c07e786a0241" + integrity sha512-Tp+zDnHmGk4qKR1l+Y1rBvpjpm5tGXX339eAlRBDg+kgZkz9Bw+pqi4dyseOZMsGuSH69fYfPJCBKBrbPCxYFQ== + +"@typescript-eslint/typescript-estree@5.44.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.44.0.tgz#0461b386203e8d383bb1268b1ed1da9bc905b045" + integrity sha512-M6Jr+RM7M5zeRj2maSfsZK2660HKAJawv4Ud0xT+yauyvgrsHu276VtXlKDFnEmhG+nVEd0fYZNXGoAgxwDWJw== + dependencies: + "@typescript-eslint/types" "5.44.0" + "@typescript-eslint/visitor-keys" "5.44.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.44.0", "@typescript-eslint/utils@^5.10.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.44.0.tgz#d733da4d79d6c30f1a68b531cdda1e0c1f00d52d" + integrity sha512-fMzA8LLQ189gaBjS0MZszw5HBdZgVwxVFShCO3QN+ws3GlPkcy9YuS3U4wkT6su0w+Byjq3mS3uamy9HE4Yfjw== + dependencies: + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.44.0" + "@typescript-eslint/types" "5.44.0" + "@typescript-eslint/typescript-estree" "5.44.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.44.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.44.0.tgz#10740dc28902bb903d12ee3a005cc3a70207d433" + integrity sha512-a48tLG8/4m62gPFbJ27FxwCOqPKxsb8KC3HkmYoq2As/4YyjQl1jDbRr1s63+g4FS/iIehjmN3L5UjmKva1HzQ== + dependencies: + "@typescript-eslint/types" "5.44.0" + eslint-visitor-keys "^3.3.0" + +accept-language-parser@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/accept-language-parser/-/accept-language-parser-1.5.0.tgz#8877c54040a8dcb59e0a07d9c1fde42298334791" + integrity sha512-QhyTbMLYo0BBGg1aWbeMG4ekWtds/31BrEU+DONOg/7ax23vxpL03Pb7/zBmha2v7vdD3AyzZVWBVGEZxKOXWw== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.8.0: + version "8.8.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + dependencies: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + +array-includes@^3.1.4, array-includes@^3.1.5, array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.flat@^1.2.5: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.tosorted@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" + integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.1.3" + +ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== + +axe-core@^4.4.3: + version "4.5.2" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.5.2.tgz#823fdf491ff717ac3c58a52631d4206930c1d9f7" + integrity sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA== + +axobject-query@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +caniuse-lite@^1.0.30001406: + version "1.0.30001434" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz#ec1ec1cfb0a93a34a0600d37903853030520a4e5" + integrity sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +ci-info@^3.3.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.6.2.tgz#362ea15378f1c39378ba786affbc1c9ef015ecfd" + integrity sha512-lVZdhvbEudris15CLytp2u6Y0p5EKfztae9Fqa189MfNmln9F33XuH69v5fvNfiRN5/0eAUz2yJL3mo+nhaRKg== + +clean-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clean-regexp/-/clean-regexp-1.0.0.tgz#8df7c7aae51fd36874e8f8d05b9180bc11a3fed7" + integrity sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw== + dependencies: + escape-string-regexp "^1.0.5" + +client-only@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" + integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +confusing-browser-globals@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== + +core-js-pure@^3.25.1: + version "3.26.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.26.1.tgz#653f4d7130c427820dcecd3168b594e8bb095a33" + integrity sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ== + +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +csstype@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" + integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== + +damerau-levenshtein@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + +date-fns@^2.16.1: + version "2.29.3" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8" + integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== + +debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +enhanced-resolve@^5.10.0: + version "5.11.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.11.0.tgz#543cf6c847a85adba0c4a5e2170bded4d493919a" + integrity sha512-0Gcraf7gAJSQoPg+bTSXNhuzAYtXqLc4C011vb8S3B8XUSEkGYNBk20c68X9291VF4vvsCD8SPkr6Mza+DwU+g== + dependencies: + graceful-fs "^4.2.9" + tapable "^2.2.0" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.20.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" + integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.2" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-molindo@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-molindo/-/eslint-config-molindo-6.0.0.tgz#2a5ac0acd5e43f3428c60fb0b51881bc5ba42ae4" + integrity sha512-kZ/SZBJIejZY45HVn9q0WSkF1mhvem+7FmxDF7mNfCepGEGrjID2mNlOuWAShBTidzpukMQ7qKhkjV5JVmO91w== + dependencies: + "@rushstack/eslint-patch" "^1.1.1" + "@typescript-eslint/eslint-plugin" "^5.0.0" + "@typescript-eslint/parser" "^5.0.0" + confusing-browser-globals "^1.0.11" + eslint-plugin-css-modules "^2.11.0" + eslint-plugin-import "^2.25.4" + eslint-plugin-jest "^26.1.3" + eslint-plugin-jsx-a11y "^6.5.1" + eslint-plugin-prettier "^4.0.0" + eslint-plugin-react "^7.29.4" + eslint-plugin-react-hooks "^4.3.0" + eslint-plugin-sort-destructure-keys "^1.4.0" + eslint-plugin-unicorn "^41.0.1" + prettier "^2.6.1" + typescript "^4.0.0" + +eslint-config-next@^13.0.0: + version "13.0.4" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-13.0.4.tgz#78954caf26b3aa718bed077bce90c1f505db0005" + integrity sha512-moEC7BW2TK7JKq3QfnaauqRjWzVcEf71gp5DbClpFPHM6QXE0u0uVvSTiHlmOgtCe1vyWAO+AhF87ZITd8mIDw== + dependencies: + "@next/eslint-plugin-next" "13.0.4" + "@rushstack/eslint-patch" "^1.1.3" + "@typescript-eslint/parser" "^5.42.0" + eslint-import-resolver-node "^0.3.6" + eslint-import-resolver-typescript "^3.5.2" + eslint-plugin-import "^2.26.0" + eslint-plugin-jsx-a11y "^6.5.1" + eslint-plugin-react "^7.31.7" + eslint-plugin-react-hooks "^4.5.0" + +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== + dependencies: + debug "^3.2.7" + resolve "^1.20.0" + +eslint-import-resolver-typescript@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.2.tgz#9431acded7d898fd94591a08ea9eec3514c7de91" + integrity sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ== + dependencies: + debug "^4.3.4" + enhanced-resolve "^5.10.0" + get-tsconfig "^4.2.0" + globby "^13.1.2" + is-core-module "^2.10.0" + is-glob "^4.0.3" + synckit "^0.8.4" + +eslint-module-utils@^2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== + dependencies: + debug "^3.2.7" + +eslint-plugin-css-modules@^2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-css-modules/-/eslint-plugin-css-modules-2.11.0.tgz#8de4d01d523a2d51c03043fa8004aab6b6cf3b1a" + integrity sha512-CLvQvJOMlCywZzaI4HVu7QH/ltgNXvCg7giJGiE+sA9wh5zQ+AqTgftAzrERV22wHe1p688wrU/Zwxt1Ry922w== + dependencies: + gonzales-pe "^4.0.3" + lodash "^4.17.2" + +eslint-plugin-import@^2.25.4, eslint-plugin-import@^2.26.0: + version "2.26.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" + integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== + dependencies: + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.3" + has "^1.0.3" + is-core-module "^2.8.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.5" + resolve "^1.22.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-jest@^26.1.3: + version "26.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.9.0.tgz#7931c31000b1c19e57dbfb71bbf71b817d1bf949" + integrity sha512-TWJxWGp1J628gxh2KhaH1H1paEdgE2J61BBF1I59c6xWeL5+D1BzMxGDN/nXAfX+aSkR5u80K+XhskK6Gwq9ng== + dependencies: + "@typescript-eslint/utils" "^5.10.0" + +eslint-plugin-jsx-a11y@^6.5.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz#93736fc91b83fdc38cc8d115deedfc3091aef1ff" + integrity sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q== + dependencies: + "@babel/runtime" "^7.18.9" + aria-query "^4.2.2" + array-includes "^3.1.5" + ast-types-flow "^0.0.7" + axe-core "^4.4.3" + axobject-query "^2.2.0" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" + has "^1.0.3" + jsx-ast-utils "^3.3.2" + language-tags "^1.0.5" + minimatch "^3.1.2" + semver "^6.3.0" + +eslint-plugin-prettier@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-react-hooks@^4.3.0, eslint-plugin-react-hooks@^4.5.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== + +eslint-plugin-react@^7.29.4, eslint-plugin-react@^7.31.7: + version "7.31.11" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz#011521d2b16dcf95795df688a4770b4eaab364c8" + integrity sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw== + dependencies: + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + array.prototype.tosorted "^1.1.1" + doctrine "^2.1.0" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + object.hasown "^1.1.2" + object.values "^1.1.6" + prop-types "^15.8.1" + resolve "^2.0.0-next.3" + semver "^6.3.0" + string.prototype.matchall "^4.0.8" + +eslint-plugin-sort-destructure-keys@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-sort-destructure-keys/-/eslint-plugin-sort-destructure-keys-1.4.0.tgz#45924521e556692002522468a75b6a9fbac11316" + integrity sha512-txU9l22mblz7YpyjJNYFy4wb5PVXiRMbc9lqFPPhvY4wKyBBYQvb31TIcduf7iRb4Bv01aiXcJiuCkOOrVY48Q== + dependencies: + natural-compare-lite "^1.4.0" + +eslint-plugin-unicorn@^41.0.1: + version "41.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-41.0.1.tgz#b49205b38e71e227d21fb5776f8d078a1dc637ca" + integrity sha512-gF5vo2dIj0YdNMQ/IMegiBkQdQ22GBFFVpdkJP+0og3w7XD4ypea0xQVRv6iofkLVR2w0phAdikcnU01ybd4Ow== + dependencies: + "@babel/helper-validator-identifier" "^7.15.7" + ci-info "^3.3.0" + clean-regexp "^1.0.0" + eslint-utils "^3.0.0" + esquery "^1.4.0" + indent-string "^4.0.0" + is-builtin-module "^3.1.0" + lodash "^4.17.21" + pluralize "^8.0.0" + read-pkg-up "^7.0.1" + regexp-tree "^0.1.24" + safe-regex "^2.1.1" + semver "^7.3.5" + strip-indent "^3.0.0" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.12.0: + version "8.28.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.28.0.tgz#81a680732634677cc890134bcdd9fdfea8e63d6e" + integrity sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ== + dependencies: + "@eslint/eslintrc" "^1.3.3" + "@humanwhocodes/config-array" "^0.11.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.15.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.4.0: + version "9.4.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@^3.2.11, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-tsconfig@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.2.0.tgz#ff368dd7104dab47bf923404eb93838245c66543" + integrity sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg== + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@7.1.7: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.15.0: + version "13.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.18.0.tgz#fb224daeeb2bb7d254cd2c640f003528b8d0c1dc" + integrity sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A== + dependencies: + type-fest "^0.20.2" + +globalyzer@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" + integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515" + integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + +globrex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" + integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== + +gonzales-pe@^4.0.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3" + integrity sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ== + dependencies: + minimist "^1.2.5" + +graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +intl-messageformat@^9.3.18: + version "9.13.0" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-9.13.0.tgz#97360b73bd82212e4f6005c712a4a16053165468" + integrity sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + "@formatjs/fast-memoize" "1.2.1" + "@formatjs/icu-messageformat-parser" "2.1.0" + tslib "^2.1.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-builtin-module@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.0.tgz#bb0310dfe881f144ca83f30100ceb10cf58835e0" + integrity sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw== + dependencies: + builtin-modules "^3.3.0" + +is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.10.0, is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +js-sdsl@^4.1.4: + version "4.2.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" + integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" + integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== + dependencies: + array-includes "^3.1.5" + object.assign "^4.1.3" + +language-subtag-registry@~0.3.2: + version "0.3.22" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" + integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== + +language-tags@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== + dependencies: + language-subtag-registry "~0.3.2" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.2, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +next-intl@^2.9.1: + version "2.9.1" + resolved "https://registry.yarnpkg.com/next-intl/-/next-intl-2.9.1.tgz#da90ee45079203806c000c66c21bdf51c830db9a" + integrity sha512-/OPaH5T+jOHXEZJfCzfl+ZkmjcNQOvb7DNR0SHSbtzYk/9IqjLFSLlxJvj4JPbW9xivzZbPCdgT5+yGzI2Uk0w== + dependencies: + use-intl "^2.9.1" + +next@^13.0.4: + version "13.0.4" + resolved "https://registry.yarnpkg.com/next/-/next-13.0.4.tgz#52fc9d72df4642ed28e66f42f85137a624a98062" + integrity sha512-4P0MvbjPCI1E/UPL1GrTXtYlgFnbBbY3JQ+AMY8jYE2SwyvCWctEJySoRjveznAHjrl6TIjuAJeB8u1c2StYUQ== + dependencies: + "@next/env" "13.0.4" + "@swc/helpers" "0.4.11" + caniuse-lite "^1.0.30001406" + postcss "8.4.14" + styled-jsx "5.1.0" + use-sync-external-store "1.2.0" + optionalDependencies: + "@next/swc-android-arm-eabi" "13.0.4" + "@next/swc-android-arm64" "13.0.4" + "@next/swc-darwin-arm64" "13.0.4" + "@next/swc-darwin-x64" "13.0.4" + "@next/swc-freebsd-x64" "13.0.4" + "@next/swc-linux-arm-gnueabihf" "13.0.4" + "@next/swc-linux-arm64-gnu" "13.0.4" + "@next/swc-linux-arm64-musl" "13.0.4" + "@next/swc-linux-x64-gnu" "13.0.4" + "@next/swc-linux-x64-musl" "13.0.4" + "@next/swc-win32-arm64-msvc" "13.0.4" + "@next/swc-win32-ia32-msvc" "13.0.4" + "@next/swc-win32-x64-msvc" "13.0.4" + +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.12.2, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.3, object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" + integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.fromentries@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.hasown@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" + integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== + dependencies: + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.values@^1.1.5, object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +open@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + +postcss@8.4.14: + version "8.4.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.6.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + +prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +react-is@^16.13.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +regenerator-runtime@^0.13.10: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regexp-tree@^0.1.24, regexp-tree@~0.1.1: + version "0.1.24" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.24.tgz#3d6fa238450a4d66e5bc9c4c14bb720e2196829d" + integrity sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw== + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^2.0.0-next.3: + version "2.0.0-next.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +safe-regex@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-2.1.1.tgz#f7128f00d056e2fe5c11e81a1324dd974aadced2" + integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A== + dependencies: + regexp-tree "~0.1.1" + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + +"semver@2 || 3 || 4 || 5": + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.5, semver@^7.3.7: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.12" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" + integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== + +string.prototype.matchall@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" + integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.4.3" + side-channel "^1.0.4" + +string.prototype.trimend@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +styled-jsx@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.0.tgz#4a5622ab9714bd3fcfaeec292aa555871f057563" + integrity sha512-/iHaRJt9U7T+5tp6TRelLnqBqiaIT0HsO0+vgyj8hK2KUk7aejFqRrumqPUlAqDwAj8IbS/1hk3IhBAAK/FCUQ== + dependencies: + client-only "0.0.1" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +synckit@^0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.4.tgz#0e6b392b73fafdafcde56692e3352500261d64ec" + integrity sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw== + dependencies: + "@pkgr/utils" "^2.3.1" + tslib "^2.4.0" + +tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +tiny-glob@^0.2.9: + version "0.2.9" + resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" + integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== + dependencies: + globalyzer "0.1.0" + globrex "^0.1.2" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tsconfig-paths@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0, tslib@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" + integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +typescript@^4.0.0, typescript@^4.6.3: + version "4.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db" + integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +use-intl@^2.9.1: + version "2.9.1" + resolved "https://registry.yarnpkg.com/use-intl/-/use-intl-2.9.1.tgz#af303d61bd6f855a1fa118c4d41c8092250c8930" + integrity sha512-eAveKBEbFjzzS4BWx8ET3/reyvCN/fBQbFgYYd51fnIb2SlmfDA1B6c9DZPthnyvjzZLfSAXShn0+dN4cQAeIg== + dependencies: + "@formatjs/ecma402-abstract" "^1.11.4" + intl-messageformat "^9.3.18" + +use-sync-external-store@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/packages/example/.vscode/settings.json b/packages/example/.vscode/settings.json new file mode 100644 index 000000000..d3fdae9a6 --- /dev/null +++ b/packages/example/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "typescript.tsdk": "../../node_modules/typescript/lib", + "typescript.enablePromptUseWorkspaceTsdk": true +} \ No newline at end of file From 3e3c1790343c7853b253b0207bd3a400aa114cd7 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 30 Nov 2022 22:06:57 +0100 Subject: [PATCH 002/312] Basic support --- package.json | 1 + .../example-next-13/.vscode/settings.json | 2 +- packages/example-next-13/package.json | 2 +- .../src/app/[locale]/layout.tsx | 2 +- .../example-next-13/src/app/[locale]/page.tsx | 6 +- packages/example-next-13/src/app/layout.tsx | 6 +- .../src/components/LocaleSwitcher.tsx | 2 +- packages/example-next-13/src/i18n.tsx | 2 +- packages/example-next-13/src/middleware.tsx | 4 +- .../src/next-intl/NextIntlProvider.tsx | 17 -- ...iddleware.tsx => createIntlMiddleware.tsx} | 6 +- packages/example-next-13/src/pages/.gitkeep | 4 - packages/example-next-13/tsconfig.json | 1 - packages/example-next-13/yarn.lock | 190 +++++++++--------- packages/next-intl/.eslintrc.js | 2 +- packages/next-intl/src/NextIntlProvider.tsx | 15 +- yarn.lock | 102 ++++++++++ 17 files changed, 223 insertions(+), 141 deletions(-) delete mode 100644 packages/example-next-13/src/next-intl/NextIntlProvider.tsx rename packages/example-next-13/src/next-intl/server/{middleware.tsx => createIntlMiddleware.tsx} (83%) delete mode 100644 packages/example-next-13/src/pages/.gitkeep diff --git a/package.json b/package.json index ed87e9bbb..18533c619 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "packages/use-intl", "packages/next-intl", "packages/example", + "packages/example-next-13", "packages/example-advanced", "packages/website" ], diff --git a/packages/example-next-13/.vscode/settings.json b/packages/example-next-13/.vscode/settings.json index d0679104b..d3fdae9a6 100644 --- a/packages/example-next-13/.vscode/settings.json +++ b/packages/example-next-13/.vscode/settings.json @@ -1,4 +1,4 @@ { - "typescript.tsdk": "node_modules/typescript/lib", + "typescript.tsdk": "../../node_modules/typescript/lib", "typescript.enablePromptUseWorkspaceTsdk": true } \ No newline at end of file diff --git a/packages/example-next-13/package.json b/packages/example-next-13/package.json index 93c0498b4..a67e00590 100644 --- a/packages/example-next-13/package.json +++ b/packages/example-next-13/package.json @@ -13,8 +13,8 @@ "accept-language-parser": "1.5.0", "date-fns": "^2.16.1", "lodash": "^4.17.21", - "next": "^13.0.4", "next-intl": "^2.9.1", + "next": "^13.0.5", "react": "^18.2.0", "react-dom": "^18.2.0", "typescript": "^4.6.3" diff --git a/packages/example-next-13/src/app/[locale]/layout.tsx b/packages/example-next-13/src/app/[locale]/layout.tsx index bddfa85c7..9daf29970 100644 --- a/packages/example-next-13/src/app/[locale]/layout.tsx +++ b/packages/example-next-13/src/app/[locale]/layout.tsx @@ -1,7 +1,7 @@ 'use client'; +import {NextIntlProvider} from 'next-intl'; import {use, ReactNode} from 'react'; -import NextIntlProvider from 'next-intl/NextIntlProvider'; type Props = { children: ReactNode; diff --git a/packages/example-next-13/src/app/[locale]/page.tsx b/packages/example-next-13/src/app/[locale]/page.tsx index 482a6ba48..1bd1df54b 100644 --- a/packages/example-next-13/src/app/[locale]/page.tsx +++ b/packages/example-next-13/src/app/[locale]/page.tsx @@ -1,8 +1,8 @@ 'use client'; import {useTranslations} from 'next-intl'; -// import LocaleSwitcher from 'components/LocaleSwitcher'; -import PageLayout from 'components/PageLayout'; +import LocaleSwitcher from '../../components/LocaleSwitcher'; +import PageLayout from '../../components/PageLayout'; export default function Index() { const t = useTranslations('Index'); @@ -10,7 +10,7 @@ export default function Index() { return (

{t('description')}

- {/* */} +
); } diff --git a/packages/example-next-13/src/app/layout.tsx b/packages/example-next-13/src/app/layout.tsx index d8618f217..2fd952d97 100644 --- a/packages/example-next-13/src/app/layout.tsx +++ b/packages/example-next-13/src/app/layout.tsx @@ -1,6 +1,4 @@ import {ReactNode} from 'react'; -import i18n from 'i18n'; -import resolveLocale from 'next-intl/server/resolveLocale'; type Props = { children: ReactNode; @@ -12,8 +10,10 @@ export default function RootLayout({children}: Props) { // would be great, but that uses non-server context currently, so not an // option in server components. `params` is also not an option, since they are // only available from matched segments downwards. + const lang = undefined; + return ( - + {children} ); diff --git a/packages/example-next-13/src/components/LocaleSwitcher.tsx b/packages/example-next-13/src/components/LocaleSwitcher.tsx index 9df1f0f3c..65bf7981d 100644 --- a/packages/example-next-13/src/components/LocaleSwitcher.tsx +++ b/packages/example-next-13/src/components/LocaleSwitcher.tsx @@ -1,6 +1,6 @@ import {useLocale, useTranslations} from 'next-intl'; import Link from 'next/link'; -import i18n from 'i18n'; +import i18n from '../i18n'; export default function LocaleSwitcher() { const t = useTranslations('LocaleSwitcher'); diff --git a/packages/example-next-13/src/i18n.tsx b/packages/example-next-13/src/i18n.tsx index 645c57143..dce937c8a 100644 --- a/packages/example-next-13/src/i18n.tsx +++ b/packages/example-next-13/src/i18n.tsx @@ -1,4 +1,4 @@ -import NextI18nConfig from 'next-intl/I18nConfig'; +import NextI18nConfig from './next-intl/I18nConfig'; const i18n: NextI18nConfig = { locales: ['en', 'de'], diff --git a/packages/example-next-13/src/middleware.tsx b/packages/example-next-13/src/middleware.tsx index 9d8762325..e1b44593c 100644 --- a/packages/example-next-13/src/middleware.tsx +++ b/packages/example-next-13/src/middleware.tsx @@ -1,4 +1,4 @@ -import middleware from 'next-intl/server/middleware'; import i18n from './i18n'; +import createIntlMiddleware from './next-intl/server/createIntlMiddleware'; -export default middleware(i18n); +export default createIntlMiddleware(i18n); diff --git a/packages/example-next-13/src/next-intl/NextIntlProvider.tsx b/packages/example-next-13/src/next-intl/NextIntlProvider.tsx deleted file mode 100644 index 8aa6edea5..000000000 --- a/packages/example-next-13/src/next-intl/NextIntlProvider.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import {useRouter} from 'next/router'; -import React, {ComponentProps} from 'react'; -import {IntlProvider} from 'use-intl'; - -type Props = ComponentProps; - -export default function NextIntlProvider({locale, ...rest}: Props) { - let router; - try { - // eslint-disable-next-line react-hooks/rules-of-hooks - router = useRouter(); - } catch (error) { - // Throws that the router was not mounted in the app folder. - } - - return ; -} diff --git a/packages/example-next-13/src/next-intl/server/middleware.tsx b/packages/example-next-13/src/next-intl/server/createIntlMiddleware.tsx similarity index 83% rename from packages/example-next-13/src/next-intl/server/middleware.tsx rename to packages/example-next-13/src/next-intl/server/createIntlMiddleware.tsx index e086942fc..fa77d1da7 100644 --- a/packages/example-next-13/src/next-intl/server/middleware.tsx +++ b/packages/example-next-13/src/next-intl/server/createIntlMiddleware.tsx @@ -3,8 +3,10 @@ import NextI18nConfig from '../I18nConfig'; import NextIntlCookie from './NextIntlCookie'; import resolveLocale from './resolveLocale'; -export default function createMiddleware(i18n: NextI18nConfig) { +export default function createIntlMiddleware(i18n: NextI18nConfig) { return function middleware(request: NextRequest) { + // Ideally we could use the `headers()` and `cookies()` API here + // as well, but they are currently not available in middleware. const locale = resolveLocale( i18n, request.headers, @@ -12,8 +14,6 @@ export default function createMiddleware(i18n: NextI18nConfig) { request.nextUrl.pathname ); - // Ideally we could use the `headers()` and `cookies()` API here as well. - let response; if (request.nextUrl.pathname === '/') { response = NextResponse.redirect(new URL('/' + locale, request.url)); diff --git a/packages/example-next-13/src/pages/.gitkeep b/packages/example-next-13/src/pages/.gitkeep deleted file mode 100644 index 6aa6f5929..000000000 --- a/packages/example-next-13/src/pages/.gitkeep +++ /dev/null @@ -1,4 +0,0 @@ -Next.js currently has a bug, where the `pages` folder must exist for middleware to run. -But maybe we'll be able to remove the middleware anyway once there is a new setter API for cookies. - -See https://github.com/vercel/next.js/pull/43205 diff --git a/packages/example-next-13/tsconfig.json b/packages/example-next-13/tsconfig.json index 2cf8821cc..1c6c979ae 100644 --- a/packages/example-next-13/tsconfig.json +++ b/packages/example-next-13/tsconfig.json @@ -7,7 +7,6 @@ "dom.iterable", "esnext" ], - "baseUrl": "src", "allowJs": true, "skipLibCheck": true, "noEmit": true, diff --git a/packages/example-next-13/yarn.lock b/packages/example-next-13/yarn.lock index 564f0ca7e..4c8be66de 100644 --- a/packages/example-next-13/yarn.lock +++ b/packages/example-next-13/yarn.lock @@ -126,10 +126,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@next/env@13.0.4": - version "13.0.4" - resolved "https://registry.yarnpkg.com/@next/env/-/env-13.0.4.tgz#249a21be88fa61e1a712939db00b9d02764831f4" - integrity sha512-N5Z3bdxBzoxrC5bwykDFITzdWuwDteOdZ+7nxixY+I1XpRX8/iQYbw2wuXMdqdfBGm2NNUpAqg8YF2e4oAC2UQ== +"@next/env@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.0.5.tgz#f2fafaa42c6693260e00f443853b549509715ad1" + integrity sha512-F3KLtiDrUslAZhTYTh8Zk5ZaavbYwLUn3NYPBnOjAXU8hWm0QVGVzKIOuURQ098ofRU4e9oglf3Sj9pFx5nI5w== "@next/eslint-plugin-next@13.0.4": version "13.0.4" @@ -138,70 +138,70 @@ dependencies: glob "7.1.7" -"@next/swc-android-arm-eabi@13.0.4": - version "13.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.4.tgz#684fe26ff2a05b9dd8c4fb84bc87ba807e3bddc0" - integrity sha512-SD9H+/zuV3L0oHIhsDdFkDqFtg6pIHtqRUPlsrNdOsmWXgMlSzxBmwt2ta4kyrazS62BQu7XRUG++ZyODS7AWg== - -"@next/swc-android-arm64@13.0.4": - version "13.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.0.4.tgz#6bc985b78978fc42eaf723bbd21d3b27f673a1fe" - integrity sha512-F8W5WcBbdn/zBoy32/mQiefs9DNsT12CTSSVCsO8GvQR7GjJU+uduQ4drKcSDoDLuAFULc2jDN06Circq4vuQg== - -"@next/swc-darwin-arm64@13.0.4": - version "13.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.4.tgz#2a471486bd0d5737104f62807b23cb9743e3cb08" - integrity sha512-/lajev+9GSie+rRTl5z8skW9RJwZ+TwMKLzzM24TbDk8lUjqPTyJZ/cU0NDj8J7VQAZ6EehACSh9rcJeBRtLuA== - -"@next/swc-darwin-x64@13.0.4": - version "13.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.4.tgz#f921ea5d09df6bb4fcace3639b9a2e4587212c0e" - integrity sha512-HK4b2rFiju8d40GTL/jH9U6OQ7BYA2MeEHs7Dm7Rp7kwQtLzP3z6osdQS8er20tIFHDE4b+oVBy03ZUQkHf0Pg== - -"@next/swc-freebsd-x64@13.0.4": - version "13.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.4.tgz#04f04f83aaa287fc8c429f688b431c39ce05ede3" - integrity sha512-xBvIGLaGzZtgJfRRJ2DBN82DQCJ/O7jkXyBp8X/vHefPWyVXVqF6C68Rv8ADp11thPpf8WpjkvDDLb9AuWHQUA== - -"@next/swc-linux-arm-gnueabihf@13.0.4": - version "13.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.4.tgz#45b9f02bf722d212611819fe847fb58355c1dd4b" - integrity sha512-s13pxNp9deKmmxEGTp1MoL1e4nf4wbEymEaHgFxUlhoR1OD9tK8oTNrQphQePJgVjzcWmRGH/dX7O9mVkHbU/g== - -"@next/swc-linux-arm64-gnu@13.0.4": - version "13.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.4.tgz#940c756543264a098ecfae1aa92129a5ff5540dd" - integrity sha512-Lklo65usNzoYwjX51CpDKOepWVZBdwO49/Jz3djxiYUr2lRtpDVnlfwCvzN+47j3BMVMWtC2ndIi8Q4s3J0v4g== - -"@next/swc-linux-arm64-musl@13.0.4": - version "13.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.4.tgz#1a0c16a648973475214786472cafe4e03f2a07a7" - integrity sha512-+3BXtXBwjVhd5lahDe5nKZ7EwD6hE/oLFQkITCvgxymU5qYHGlLFyF52/lyw8qhyxoCr7mMVsUFhlCzVwCfNjg== - -"@next/swc-linux-x64-gnu@13.0.4": - version "13.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.4.tgz#5d6a92ebfb2226bd4c34be8edfc132283fd4b055" - integrity sha512-QB8qoZrvHhZsz62nUrTKlp5IiZ8I7KZsaa6437H/W/NOZHLGJjCxROnhUjLvKVe/T5P86pjya2SUOUqWAjz4Pg== - -"@next/swc-linux-x64-musl@13.0.4": - version "13.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.4.tgz#060797dc921c4af73521fde2a4198855f9e3bb34" - integrity sha512-WaahF6DYUQRg1QqIMcuOu2ZsFhS3aC5iWeQyeptMHklP9wb4FfTNmBArKHknX/GXD8P9gI38WTAHJ25cc0zVwg== - -"@next/swc-win32-arm64-msvc@13.0.4": - version "13.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.4.tgz#27629e72200cd479ad5231ae79e95291c476771d" - integrity sha512-FD+k1j2jeY0aKcqcpzFKfTsv55PPmIZ5GKDyPjjV5AO6XvQ4nALwWl4JwizjH2426TfLXObb+C3MH0bl9Ok1Kw== - -"@next/swc-win32-ia32-msvc@13.0.4": - version "13.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.4.tgz#d7c89406b2a484f448c7b5af667b5eb537483695" - integrity sha512-+Q/Q8Ydvz3X3U84CyZdNv1HC7fE43k+xB8C6b3IFmWGa5Tu2tfskQ2FsUNBrYreZjhFC/894J3rVQ6Vj6Auugg== - -"@next/swc-win32-x64-msvc@13.0.4": - version "13.0.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.4.tgz#2c3ede793e90d632e1dbdb0e4851f6f32132fba8" - integrity sha512-vXtbo9N1FdtZZRcv4BliU28tTYrkb1EnVpUiiFFe88I6kS9aZVTMY9Z/OtDR52rl1JF1hgs9sL/59D/TQqSATQ== +"@next/swc-android-arm-eabi@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.5.tgz#bb83f8a8bea5d3d813059a28624e9ff3c0c22bac" + integrity sha512-YO691dxHlviy6H0eghgwqn+5kU9J3iQnKERHTDSppqjjGDBl6ab4wz9XfI5AhljjkaTg3TknHoIEWFDoZ4Ve8g== + +"@next/swc-android-arm64@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.0.5.tgz#6082f7e4a7b07c5e1a1284ef0cb3b741b49f03de" + integrity sha512-ugbwffkUmp8cd2afehDC8LtQeFUxElRUBBngfB5UYSWBx18HW4OgzkPFIY8jUBH16zifvGZWXbICXJWDHrOLtw== + +"@next/swc-darwin-arm64@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.5.tgz#764f85446590b8f2894c9aca0c96e039cd1ca5e0" + integrity sha512-mshlh8QOtOalfZbc17uNAftWgqHTKnrv6QUwBe+mpGz04eqsSUzVz1JGZEdIkmuDxOz00cK2NPoc+VHDXh99IQ== + +"@next/swc-darwin-x64@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.5.tgz#f0e4855639279f85f4e0d2bc3d10e5b6c3dff33d" + integrity sha512-SfigOKW4Z2UB3ruUPyvrlDIkcJq1hiw1wvYApWugD+tQsAkYZKEoz+/8emCmeYZ6Gwgi1WHV+z52Oj8u7bEHPg== + +"@next/swc-freebsd-x64@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.5.tgz#1ccc56db2fd6c1a8e10d3952b7cc5fb98c1eed71" + integrity sha512-0NJg8HZr4yG8ynmMGFXQf+Mahvq4ZgBmUwSlLXXymgxEQgH17erH/LoR69uITtW+KTsALgk9axEt5AAabM4ucg== + +"@next/swc-linux-arm-gnueabihf@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.5.tgz#1dd70f03a33d0ea84a5cae03141437ff1e1b5642" + integrity sha512-Cye+h3oDT3NDWjACMlRaolL8fokpKie34FlPj9nfoW7bYKmoMBY1d4IO/GgBF+5xEl7HkH0Ny/qex63vQ0pN+A== + +"@next/swc-linux-arm64-gnu@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.5.tgz#053d8379a509d005128763013e7be8b92abb0304" + integrity sha512-5BfDS/VoRDR5QUGG9oedOCEZGmV2zxUVFYLUJVPMSMeIgqkjxWQBiG2BUHZI6/LGk9yvHmjx7BTvtBCLtRg6IQ== + +"@next/swc-linux-arm64-musl@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.5.tgz#4a260c6e2f8003b01668c9f2ecfefc102f307d04" + integrity sha512-xenvqlXz+KxVKAB1YR723gnVNszpsCvKZkiFFaAYqDGJ502YuqU2fwLsaSm/ASRizNcBYeo9HPLTyc3r/9cdMQ== + +"@next/swc-linux-x64-gnu@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.5.tgz#d886be84865c4b3d720add8b0c1f7e71221972c2" + integrity sha512-9Ahi1bbdXwhrWQmOyoTod23/hhK05da/FzodiNqd6drrMl1y7+RujoEcU8Dtw3H1mGWB+yuTlWo8B4Iba8hqiQ== + +"@next/swc-linux-x64-musl@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.5.tgz#2d4245512761d90f7e5086df6d6042f078b8e395" + integrity sha512-V+1mnh49qmS9fOZxVRbzjhBEz9IUGJ7AQ80JPWAYQM5LI4TxfdiF4APLPvJ52rOmNeTqnVz1bbKtVOso+7EZ4w== + +"@next/swc-win32-arm64-msvc@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.5.tgz#19df9e548b3fe1a2aa8491dd7c01ca950977ac9e" + integrity sha512-wRE9rkp7I+/3Jf2T9PFIJOKq3adMWYEFkPOA7XAkUfYbQHlDJm/U5cVCWUsKByyQq5RThwufI91sgd19MfxRxg== + +"@next/swc-win32-ia32-msvc@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.5.tgz#a4de6f9d2556b48869f20b1c0f61c5a88a213319" + integrity sha512-Q1XQSLEhFuFhkKFdJIGt7cYQ4T3u6P5wrtUNreg5M+7P+fjSiC8+X+Vjcw+oebaacsdl0pWZlK+oACGafush1w== + +"@next/swc-win32-x64-msvc@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.5.tgz#f95f882900fe8bf84e049b720f18e851a7187cfe" + integrity sha512-t5gRblrwwiNZP6cT7NkxlgxrFgHWtv9ei5vUraCLgBqzvIsa7X+PnarZUeQCXqz6Jg9JSGGT9j8lvzD97UqeJQ== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -241,10 +241,10 @@ resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg== -"@swc/helpers@0.4.11": - version "0.4.11" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.11.tgz#db23a376761b3d31c26502122f349a21b592c8de" - integrity sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw== +"@swc/helpers@0.4.14": + version "0.4.14" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" + integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== dependencies: tslib "^2.4.0" @@ -1695,38 +1695,37 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -next-intl@^2.9.1: +next-intl@*: version "2.9.1" resolved "https://registry.yarnpkg.com/next-intl/-/next-intl-2.9.1.tgz#da90ee45079203806c000c66c21bdf51c830db9a" integrity sha512-/OPaH5T+jOHXEZJfCzfl+ZkmjcNQOvb7DNR0SHSbtzYk/9IqjLFSLlxJvj4JPbW9xivzZbPCdgT5+yGzI2Uk0w== dependencies: use-intl "^2.9.1" -next@^13.0.4: - version "13.0.4" - resolved "https://registry.yarnpkg.com/next/-/next-13.0.4.tgz#52fc9d72df4642ed28e66f42f85137a624a98062" - integrity sha512-4P0MvbjPCI1E/UPL1GrTXtYlgFnbBbY3JQ+AMY8jYE2SwyvCWctEJySoRjveznAHjrl6TIjuAJeB8u1c2StYUQ== +next@^13.0.5: + version "13.0.5" + resolved "https://registry.yarnpkg.com/next/-/next-13.0.5.tgz#cddfd6804f84a21721da370e4425980876670173" + integrity sha512-awpc3DkphyKydwCotcBnuKwh6hMqkT5xdiBK4OatJtOZurDPBYLP62jtM2be/4OunpmwIbsS0Eyv+ZGU97ciEg== dependencies: - "@next/env" "13.0.4" - "@swc/helpers" "0.4.11" + "@next/env" "13.0.5" + "@swc/helpers" "0.4.14" caniuse-lite "^1.0.30001406" postcss "8.4.14" styled-jsx "5.1.0" - use-sync-external-store "1.2.0" optionalDependencies: - "@next/swc-android-arm-eabi" "13.0.4" - "@next/swc-android-arm64" "13.0.4" - "@next/swc-darwin-arm64" "13.0.4" - "@next/swc-darwin-x64" "13.0.4" - "@next/swc-freebsd-x64" "13.0.4" - "@next/swc-linux-arm-gnueabihf" "13.0.4" - "@next/swc-linux-arm64-gnu" "13.0.4" - "@next/swc-linux-arm64-musl" "13.0.4" - "@next/swc-linux-x64-gnu" "13.0.4" - "@next/swc-linux-x64-musl" "13.0.4" - "@next/swc-win32-arm64-msvc" "13.0.4" - "@next/swc-win32-ia32-msvc" "13.0.4" - "@next/swc-win32-x64-msvc" "13.0.4" + "@next/swc-android-arm-eabi" "13.0.5" + "@next/swc-android-arm64" "13.0.5" + "@next/swc-darwin-arm64" "13.0.5" + "@next/swc-darwin-x64" "13.0.5" + "@next/swc-freebsd-x64" "13.0.5" + "@next/swc-linux-arm-gnueabihf" "13.0.5" + "@next/swc-linux-arm64-gnu" "13.0.5" + "@next/swc-linux-arm64-musl" "13.0.5" + "@next/swc-linux-x64-gnu" "13.0.5" + "@next/swc-linux-x64-musl" "13.0.5" + "@next/swc-win32-arm64-msvc" "13.0.5" + "@next/swc-win32-ia32-msvc" "13.0.5" + "@next/swc-win32-x64-msvc" "13.0.5" normalize-package-data@^2.5.0: version "2.5.0" @@ -2367,11 +2366,6 @@ use-intl@^2.9.1: "@formatjs/ecma402-abstract" "^1.11.4" intl-messageformat "^9.3.18" -use-sync-external-store@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== - validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" diff --git a/packages/next-intl/.eslintrc.js b/packages/next-intl/.eslintrc.js index 06f0167c8..05fd65010 100644 --- a/packages/next-intl/.eslintrc.js +++ b/packages/next-intl/.eslintrc.js @@ -2,4 +2,4 @@ require('eslint-config-molindo/setupPlugins'); module.exports = { extends: ['molindo/typescript', 'molindo/react'] -} +}; diff --git a/packages/next-intl/src/NextIntlProvider.tsx b/packages/next-intl/src/NextIntlProvider.tsx index c62cc022e..e387576c5 100644 --- a/packages/next-intl/src/NextIntlProvider.tsx +++ b/packages/next-intl/src/NextIntlProvider.tsx @@ -7,12 +7,19 @@ type Props = Omit, 'locale'> & { }; export default function NextIntlProvider({locale, ...rest}: Props) { + let router; + try { + // Reading from context is practically ok to do conditionally + // eslint-disable-next-line react-hooks/rules-of-hooks + router = useRouter(); + } catch (error) { + // Calling `useRouter` is not supported in the app folder + } + // The router can be undefined if used in a context outside // of Next.js (e.g. unit tests, Storybook, ...) - const nextLocale = useRouter()?.locale; - - if (!locale && nextLocale) { - locale = nextLocale; + if (!locale && router) { + locale = router.locale; } if (!locale) { diff --git a/yarn.lock b/yarn.lock index 408505c3c..f51062358 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2301,6 +2301,11 @@ resolved "https://registry.yarnpkg.com/@next/env/-/env-13.0.0.tgz#38527956680693c90b4522ab4ab9a2fbe3a17f67" integrity sha512-65v9BVuah2Mplohm4+efsKEnoEuhmlGm8B2w6vD1geeEP2wXtlSJCvR/cCRJ3fD8wzCQBV41VcMBQeYET6MRkg== +"@next/env@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.0.5.tgz#f2fafaa42c6693260e00f443853b549509715ad1" + integrity sha512-F3KLtiDrUslAZhTYTh8Zk5ZaavbYwLUn3NYPBnOjAXU8hWm0QVGVzKIOuURQ098ofRU4e9oglf3Sj9pFx5nI5w== + "@next/eslint-plugin-next@12.0.1": version "12.0.1" resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.0.1.tgz#6e1c39143bdc79252e5601b4e5abfbd2cc8c26ad" @@ -2325,6 +2330,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.0.tgz#15cd89d19d3c00d123fdfe367bab38c362f6c515" integrity sha512-+DUQkYF93gxFjWY+CYWE1QDX6gTgnUiWf+W4UqZjM1Jcef8U97fS6xYh+i+8rH4MM0AXHm7OSakvfOMzmjU6VA== +"@next/swc-android-arm-eabi@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.5.tgz#bb83f8a8bea5d3d813059a28624e9ff3c0c22bac" + integrity sha512-YO691dxHlviy6H0eghgwqn+5kU9J3iQnKERHTDSppqjjGDBl6ab4wz9XfI5AhljjkaTg3TknHoIEWFDoZ4Ve8g== + "@next/swc-android-arm64@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.1.4.tgz#f320d60639e19ecffa1f9034829f2d95502a9a51" @@ -2335,6 +2345,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.0.0.tgz#9410365bb07097268d4773a46b02cfe6b3fe3ab7" integrity sha512-RW9Uy3bMSc0zVGCa11klFuwfP/jdcdkhdruqnrJ7v+7XHm6OFKkSRzX6ee7yGR1rdDZvTnP4GZSRSpzjLv/N0g== +"@next/swc-android-arm64@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.0.5.tgz#6082f7e4a7b07c5e1a1284ef0cb3b741b49f03de" + integrity sha512-ugbwffkUmp8cd2afehDC8LtQeFUxElRUBBngfB5UYSWBx18HW4OgzkPFIY8jUBH16zifvGZWXbICXJWDHrOLtw== + "@next/swc-darwin-arm64@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.4.tgz#fd578278312613eddcf3aee26910100509941b63" @@ -2345,6 +2360,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.0.tgz#caf262fb5cb8bb335f6f344fd67a44dc8bf6a084" integrity sha512-APA26nps1j4qyhOIzkclW/OmgotVHj1jBxebSpMCPw2rXfiNvKNY9FA0TcuwPmUCNqaTnm703h6oW4dvp73A4Q== +"@next/swc-darwin-arm64@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.5.tgz#764f85446590b8f2894c9aca0c96e039cd1ca5e0" + integrity sha512-mshlh8QOtOalfZbc17uNAftWgqHTKnrv6QUwBe+mpGz04eqsSUzVz1JGZEdIkmuDxOz00cK2NPoc+VHDXh99IQ== + "@next/swc-darwin-x64@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.4.tgz#ace5f80d8c8348efe194f6d7074c6213c52b3944" @@ -2355,11 +2375,21 @@ resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.0.tgz#6b214753410e1d8512a1491045acea1e188df7d6" integrity sha512-qsUhUdoFuRJiaJ7LnvTQ6GZv1QnMDcRXCIjxaN0FNVXwrjkq++U7KjBUaxXkRzLV4C7u0NHLNOp0iZwNNE7ypw== +"@next/swc-darwin-x64@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.5.tgz#f0e4855639279f85f4e0d2bc3d10e5b6c3dff33d" + integrity sha512-SfigOKW4Z2UB3ruUPyvrlDIkcJq1hiw1wvYApWugD+tQsAkYZKEoz+/8emCmeYZ6Gwgi1WHV+z52Oj8u7bEHPg== + "@next/swc-freebsd-x64@13.0.0": version "13.0.0" resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.0.tgz#eeb176bdb585f48882bdac1d04271b918ca87590" integrity sha512-sCdyCbboS7CwdnevKH9J6hkJI76LUw1jVWt4eV7kISuLiPba3JmehZSWm80oa4ADChRVAwzhLAo2zJaYRrInbg== +"@next/swc-freebsd-x64@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.5.tgz#1ccc56db2fd6c1a8e10d3952b7cc5fb98c1eed71" + integrity sha512-0NJg8HZr4yG8ynmMGFXQf+Mahvq4ZgBmUwSlLXXymgxEQgH17erH/LoR69uITtW+KTsALgk9axEt5AAabM4ucg== + "@next/swc-linux-arm-gnueabihf@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.4.tgz#2bf2c83863635f19c71c226a2df936e001cce29c" @@ -2370,6 +2400,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.0.tgz#2c2a9622c93f87a8baca94e068f674da4cae6018" integrity sha512-/X/VxfFA41C9jrEv+sUsPLQ5vbDPVIgG0CJrzKvrcc+b+4zIgPgtfsaWq9ockjHFQi3ycvlZK4TALOXO8ovQ6Q== +"@next/swc-linux-arm-gnueabihf@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.5.tgz#1dd70f03a33d0ea84a5cae03141437ff1e1b5642" + integrity sha512-Cye+h3oDT3NDWjACMlRaolL8fokpKie34FlPj9nfoW7bYKmoMBY1d4IO/GgBF+5xEl7HkH0Ny/qex63vQ0pN+A== + "@next/swc-linux-arm64-gnu@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.4.tgz#d577190f641c9b4b463719dd6b8953b6ba9be8d9" @@ -2380,6 +2415,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.0.tgz#69505827e2928fb18034150fd4d754d54c4a1c4b" integrity sha512-x6Oxr1GIi0ZtNiT6jbw+JVcbEi3UQgF7mMmkrgfL4mfchOwXtWSHKTSSPnwoJWJfXYa0Vy1n8NElWNTGAqoWFw== +"@next/swc-linux-arm64-gnu@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.5.tgz#053d8379a509d005128763013e7be8b92abb0304" + integrity sha512-5BfDS/VoRDR5QUGG9oedOCEZGmV2zxUVFYLUJVPMSMeIgqkjxWQBiG2BUHZI6/LGk9yvHmjx7BTvtBCLtRg6IQ== + "@next/swc-linux-arm64-musl@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.4.tgz#e70ffe70393d8f9242deecdb282ce5a8fd588b14" @@ -2390,6 +2430,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.0.tgz#487a88f2583a046e882328fe0665b37eca4fd0f6" integrity sha512-SnMH9ngI+ipGh3kqQ8+mDtWunirwmhQnQeZkEq9e/9Xsgjf04OetqrqRHKM1HmJtG2qMUJbyXFJ0F81TPuT+3g== +"@next/swc-linux-arm64-musl@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.5.tgz#4a260c6e2f8003b01668c9f2ecfefc102f307d04" + integrity sha512-xenvqlXz+KxVKAB1YR723gnVNszpsCvKZkiFFaAYqDGJ502YuqU2fwLsaSm/ASRizNcBYeo9HPLTyc3r/9cdMQ== + "@next/swc-linux-x64-gnu@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.4.tgz#91498a130387fb1961902f2bee55863f8e910cff" @@ -2400,6 +2445,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.0.tgz#29e89c7e4fd2e2b16ad059076f6261998aee53df" integrity sha512-VSQwTX9EmdbotArtA1J67X8964oQfe0xHb32x4tu+JqTR+wOHyG6wGzPMdXH2oKAp6rdd7BzqxUXXf0J+ypHlw== +"@next/swc-linux-x64-gnu@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.5.tgz#d886be84865c4b3d720add8b0c1f7e71221972c2" + integrity sha512-9Ahi1bbdXwhrWQmOyoTod23/hhK05da/FzodiNqd6drrMl1y7+RujoEcU8Dtw3H1mGWB+yuTlWo8B4Iba8hqiQ== + "@next/swc-linux-x64-musl@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.4.tgz#78057b03c148c121553d41521ad38f6c732762ff" @@ -2410,6 +2460,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.0.tgz#2f63aae922d2b2829aec21bf8f9adda8b6c16365" integrity sha512-xBCP0nnpO0q4tsytXkvIwWFINtbFRyVY5gxa1zB0vlFtqYR9lNhrOwH3CBrks3kkeaePOXd611+8sjdUtrLnXA== +"@next/swc-linux-x64-musl@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.5.tgz#2d4245512761d90f7e5086df6d6042f078b8e395" + integrity sha512-V+1mnh49qmS9fOZxVRbzjhBEz9IUGJ7AQ80JPWAYQM5LI4TxfdiF4APLPvJ52rOmNeTqnVz1bbKtVOso+7EZ4w== + "@next/swc-win32-arm64-msvc@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.4.tgz#05bbaabacac23b8edf6caa99eb86b17550a09051" @@ -2420,6 +2475,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.0.tgz#4117bad96c2a6775f70294fba45c63951a8a21ac" integrity sha512-NutwDafqhGxqPj/eiUixJq9ImS/0sgx6gqlD7jRndCvQ2Q8AvDdu1+xKcGWGNnhcDsNM/n1avf1e62OG1GaqJg== +"@next/swc-win32-arm64-msvc@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.5.tgz#19df9e548b3fe1a2aa8491dd7c01ca950977ac9e" + integrity sha512-wRE9rkp7I+/3Jf2T9PFIJOKq3adMWYEFkPOA7XAkUfYbQHlDJm/U5cVCWUsKByyQq5RThwufI91sgd19MfxRxg== + "@next/swc-win32-ia32-msvc@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.4.tgz#8fd2fb48f04a2802e51fc320878bf6b411c1c866" @@ -2430,6 +2490,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.0.tgz#5914eb86f9ea92a00d76cb094dd9734b3bf2012c" integrity sha512-zNaxaO+Kl/xNz02E9QlcVz0pT4MjkXGDLb25qxtAzyJL15aU0+VjjbIZAYWctG59dvggNIUNDWgoBeVTKB9xLg== +"@next/swc-win32-ia32-msvc@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.5.tgz#a4de6f9d2556b48869f20b1c0f61c5a88a213319" + integrity sha512-Q1XQSLEhFuFhkKFdJIGt7cYQ4T3u6P5wrtUNreg5M+7P+fjSiC8+X+Vjcw+oebaacsdl0pWZlK+oACGafush1w== + "@next/swc-win32-x64-msvc@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.4.tgz#a72ed44c9b1f850986a30fe36c59e01f8a79b5f3" @@ -2440,6 +2505,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.0.tgz#c54a5a739dee04b20338d305226a2acdf701f67f" integrity sha512-FFOGGWwTCRMu9W7MF496Urefxtuo2lttxF1vwS+1rIRsKvuLrWhVaVTj3T8sf2EBL6gtJbmh4TYlizS+obnGKA== +"@next/swc-win32-x64-msvc@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.5.tgz#f95f882900fe8bf84e049b720f18e851a7187cfe" + integrity sha512-t5gRblrwwiNZP6cT7NkxlgxrFgHWtv9ei5vUraCLgBqzvIsa7X+PnarZUeQCXqz6Jg9JSGGT9j8lvzD97UqeJQ== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -2755,6 +2825,13 @@ dependencies: tslib "^2.4.0" +"@swc/helpers@0.4.14": + version "0.4.14" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" + integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== + dependencies: + tslib "^2.4.0" + "@testing-library/dom@^8.5.0": version "8.13.0" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.13.0.tgz#bc00bdd64c7d8b40841e27a70211399ad3af46f5" @@ -9150,6 +9227,31 @@ next@^13.0.0: "@next/swc-win32-ia32-msvc" "13.0.0" "@next/swc-win32-x64-msvc" "13.0.0" +next@^13.0.5: + version "13.0.5" + resolved "https://registry.yarnpkg.com/next/-/next-13.0.5.tgz#cddfd6804f84a21721da370e4425980876670173" + integrity sha512-awpc3DkphyKydwCotcBnuKwh6hMqkT5xdiBK4OatJtOZurDPBYLP62jtM2be/4OunpmwIbsS0Eyv+ZGU97ciEg== + dependencies: + "@next/env" "13.0.5" + "@swc/helpers" "0.4.14" + caniuse-lite "^1.0.30001406" + postcss "8.4.14" + styled-jsx "5.1.0" + optionalDependencies: + "@next/swc-android-arm-eabi" "13.0.5" + "@next/swc-android-arm64" "13.0.5" + "@next/swc-darwin-arm64" "13.0.5" + "@next/swc-darwin-x64" "13.0.5" + "@next/swc-freebsd-x64" "13.0.5" + "@next/swc-linux-arm-gnueabihf" "13.0.5" + "@next/swc-linux-arm64-gnu" "13.0.5" + "@next/swc-linux-arm64-musl" "13.0.5" + "@next/swc-linux-x64-gnu" "13.0.5" + "@next/swc-linux-x64-musl" "13.0.5" + "@next/swc-win32-arm64-msvc" "13.0.5" + "@next/swc-win32-ia32-msvc" "13.0.5" + "@next/swc-win32-x64-msvc" "13.0.5" + nextra-theme-docs@2.0.0-alpha.44: version "2.0.0-alpha.44" resolved "https://registry.yarnpkg.com/nextra-theme-docs/-/nextra-theme-docs-2.0.0-alpha.44.tgz#ec26828a536521c2353c77fbeeff33ea4d591e89" From e645a52f19d0326a7187e0d5774eb63e214cc1df Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 30 Nov 2022 22:09:07 +0100 Subject: [PATCH 003/312] Build Next 13 example --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c26a1d580..cd6a3c3d5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -19,3 +19,4 @@ jobs: - run: yarn workspaces run test --ci --maxWorkers=2 - run: yarn workspace example run build - run: yarn workspace example-advanced run build + - run: yarn workspace example-next-13 run build From fd36ad62dcb66eb86a4131e19f61ecdbaa5da9df Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 30 Nov 2022 22:16:07 +0100 Subject: [PATCH 004/312] Update Node version --- .github/workflows/main.yml | 2 +- .github/workflows/publish.yml | 2 +- packages/example/.vscode/settings.json | 4 ---- 3 files changed, 2 insertions(+), 6 deletions(-) delete mode 100644 packages/example/.vscode/settings.json diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cd6a3c3d5..8e1bf6824 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -10,7 +10,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 with: - node-version: 14.x + node-version: 16.x # The Remix example unfortunately doesn't seem to support yarn workspaces - uses: bahmutov/npm-install@v1 - run: yarn workspace use-intl run build diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index f0c2dd3a3..cfac9669c 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -12,7 +12,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: - node-version: 14.x + node-version: 16.x registry-url: 'https://registry.npmjs.org' - uses: bahmutov/npm-install@v1 # Seems like after squash & merge the author is unknown to lerna diff --git a/packages/example/.vscode/settings.json b/packages/example/.vscode/settings.json deleted file mode 100644 index d3fdae9a6..000000000 --- a/packages/example/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "typescript.tsdk": "../../node_modules/typescript/lib", - "typescript.enablePromptUseWorkspaceTsdk": true -} \ No newline at end of file From 39fc8120293fd95d9ae480d23caecfaa9301db2e Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 30 Nov 2022 22:28:45 +0100 Subject: [PATCH 005/312] Fix test for new Node version --- packages/use-intl/test/react/useIntl.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/use-intl/test/react/useIntl.test.tsx b/packages/use-intl/test/react/useIntl.test.tsx index 270a72406..699f650e7 100644 --- a/packages/use-intl/test/react/useIntl.test.tsx +++ b/packages/use-intl/test/react/useIntl.test.tsx @@ -272,7 +272,7 @@ describe('formatNumber', () => { const error: IntlError = onError.mock.calls[0][0]; expect(error.message).toBe( - 'FORMATTING_ERROR: Invalid currency codes : unknown' + 'FORMATTING_ERROR: Invalid currency code : unknown' ); expect(error.code).toBe(IntlErrorCode.FORMATTING_ERROR); expect(container.textContent).toBe('10000'); From b928a376ac654acd3a74df8efbd314d1bbd16b58 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 7 Dec 2022 16:07:01 +0100 Subject: [PATCH 006/312] Use tsc for building next-intl, include use client directive, improve example --- packages/example-next-13/src/app/[locale]/layout.tsx | 11 ++++++----- packages/next-intl/package.json | 11 +++++------ packages/next-intl/src/NextIntlProvider.tsx | 4 +++- packages/next-intl/test/NextIntlProvider.test.tsx | 2 -- packages/next-intl/tsconfig.json | 6 ++++-- 5 files changed, 18 insertions(+), 16 deletions(-) diff --git a/packages/example-next-13/src/app/[locale]/layout.tsx b/packages/example-next-13/src/app/[locale]/layout.tsx index 9daf29970..56b69dd16 100644 --- a/packages/example-next-13/src/app/[locale]/layout.tsx +++ b/packages/example-next-13/src/app/[locale]/layout.tsx @@ -1,15 +1,16 @@ -'use client'; - import {NextIntlProvider} from 'next-intl'; -import {use, ReactNode} from 'react'; +import {ReactNode} from 'react'; type Props = { children: ReactNode; params: {locale: string}; }; -export default function LocaleLayout({children, params: {locale}}: Props) { - const messages = use(import(`../../../messages/${locale}.json`)); +export default async function LocaleLayout({ + children, + params: {locale} +}: Props) { + const messages = (await import(`../../../messages/${locale}.json`)).default; return ( diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 9da3611a5..8c0a6e6e1 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -12,15 +12,15 @@ }, "scripts": { "start": "dts watch", - "build": "dts build", - "test": "TZ=Europe/Berlin dts test", + "build": "rm -rf dist && tsc && rm -rf dist/test", + "test": "TZ=Europe/Berlin dts test test", "lint": "eslint src test && tsc", "prepublishOnly": "yarn test && yarn lint && yarn build && cp ../../README.md . && git checkout .", "postpublish": "rm ./README.md" }, - "main": "dist/index.js", - "module": "dist/next-intl.esm.js", - "typings": "dist/index.d.ts", + "main": "dist/src/index.js", + "module": "dist/src/next-intl.esm.js", + "typings": "dist/src/index.d.ts", "files": [ "dist", "src" @@ -57,7 +57,6 @@ "next": "^13.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "tslib": "^2.3.1", "typescript": "^4.4.4" }, "engines": { diff --git a/packages/next-intl/src/NextIntlProvider.tsx b/packages/next-intl/src/NextIntlProvider.tsx index e387576c5..ed387d795 100644 --- a/packages/next-intl/src/NextIntlProvider.tsx +++ b/packages/next-intl/src/NextIntlProvider.tsx @@ -1,3 +1,5 @@ +'use client'; + import {useRouter} from 'next/router'; import React, {ComponentProps} from 'react'; import {IntlProvider} from 'use-intl'; @@ -24,7 +26,7 @@ export default function NextIntlProvider({locale, ...rest}: Props) { if (!locale) { throw new Error( - __DEV__ + process.env.NODE_ENV !== 'production' ? "Couldn't determine locale. Please make sure you use internationalized routing or alternatively pass an explicit locale to `NextIntlProvider`." : undefined ); diff --git a/packages/next-intl/test/NextIntlProvider.test.tsx b/packages/next-intl/test/NextIntlProvider.test.tsx index d1b854924..b79882c13 100644 --- a/packages/next-intl/test/NextIntlProvider.test.tsx +++ b/packages/next-intl/test/NextIntlProvider.test.tsx @@ -2,8 +2,6 @@ import {render, screen} from '@testing-library/react'; import React from 'react'; import {NextIntlProvider, useTranslations} from '../src'; -(global as any).__DEV__ = true; - jest.mock('next/router', () => ({ useRouter: () => ({locale: 'en'}) })); diff --git a/packages/next-intl/tsconfig.json b/packages/next-intl/tsconfig.json index 044a0c3f1..218e76ddf 100644 --- a/packages/next-intl/tsconfig.json +++ b/packages/next-intl/tsconfig.json @@ -3,7 +3,8 @@ "compilerOptions": { "module": "esnext", "lib": ["dom", "esnext"], - "importHelpers": true, + "target": "ES2020", + "importHelpers": false, "declaration": true, "sourceMap": true, "rootDir": ".", @@ -17,6 +18,7 @@ "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - "noEmit": true + "noEmit": false, + "outDir": "dist" } } From 454b70d29799ae0954e01e3b6732d7905ee5e046 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 7 Dec 2022 16:49:38 +0100 Subject: [PATCH 007/312] POC move middleware to lib --- packages/example-next-13/messages/de.json | 3 --- packages/example-next-13/messages/en.json | 3 --- packages/example-next-13/src/app/layout.tsx | 3 +++ .../example-next-13/src/components/LocaleSwitcher.tsx | 3 +-- .../example-next-13/src/components/PageLayout.tsx | 7 ------- packages/example-next-13/src/i18n.tsx | 8 -------- packages/example-next-13/src/middleware.tsx | 8 +++++--- packages/example-next-13/src/next-intl/README.md | 1 - packages/next-intl/package.json | 6 ++++-- packages/next-intl/server.d.ts | 1 + packages/next-intl/server.js | 1 + .../src/server/NextI18nConfig.tsx} | 0 .../src}/server/NextIntlCookie.tsx | 1 + .../src}/server/createIntlMiddleware.tsx | 11 ++++++++--- packages/next-intl/src/server/index.tsx | 1 + .../src}/server/resolveLocale.tsx | 2 +- yarn.lock | 2 +- 17 files changed, 27 insertions(+), 34 deletions(-) delete mode 100644 packages/example-next-13/src/i18n.tsx delete mode 100644 packages/example-next-13/src/next-intl/README.md create mode 100644 packages/next-intl/server.d.ts create mode 100644 packages/next-intl/server.js rename packages/{example-next-13/src/next-intl/I18nConfig.tsx => next-intl/src/server/NextI18nConfig.tsx} (100%) rename packages/{example-next-13/src/next-intl => next-intl/src}/server/NextIntlCookie.tsx (91%) rename packages/{example-next-13/src/next-intl => next-intl/src}/server/createIntlMiddleware.tsx (69%) create mode 100644 packages/next-intl/src/server/index.tsx rename packages/{example-next-13/src/next-intl => next-intl/src}/server/resolveLocale.tsx (96%) diff --git a/packages/example-next-13/messages/de.json b/packages/example-next-13/messages/de.json index 2392d6c11..5a94eb059 100644 --- a/packages/example-next-13/messages/de.json +++ b/packages/example-next-13/messages/de.json @@ -5,8 +5,5 @@ }, "LocaleSwitcher": { "switchLocale": "Zu {locale, select, de {Deutsch} en {Englisch} other {Unbekannt}} wechseln" - }, - "PageLayout": { - "pageTitle": "next-intl" } } diff --git a/packages/example-next-13/messages/en.json b/packages/example-next-13/messages/en.json index fe746b9b1..f712b9bdb 100644 --- a/packages/example-next-13/messages/en.json +++ b/packages/example-next-13/messages/en.json @@ -5,8 +5,5 @@ }, "LocaleSwitcher": { "switchLocale": "Switch to {locale, select, de {German} en {English} other {Unknown}}" - }, - "PageLayout": { - "pageTitle": "next-intl" } } diff --git a/packages/example-next-13/src/app/layout.tsx b/packages/example-next-13/src/app/layout.tsx index 2fd952d97..3eba3456e 100644 --- a/packages/example-next-13/src/app/layout.tsx +++ b/packages/example-next-13/src/app/layout.tsx @@ -14,6 +14,9 @@ export default function RootLayout({children}: Props) { return ( + + next-intl example + {children} ); diff --git a/packages/example-next-13/src/components/LocaleSwitcher.tsx b/packages/example-next-13/src/components/LocaleSwitcher.tsx index 65bf7981d..cbca03de7 100644 --- a/packages/example-next-13/src/components/LocaleSwitcher.tsx +++ b/packages/example-next-13/src/components/LocaleSwitcher.tsx @@ -1,11 +1,10 @@ import {useLocale, useTranslations} from 'next-intl'; import Link from 'next/link'; -import i18n from '../i18n'; export default function LocaleSwitcher() { const t = useTranslations('LocaleSwitcher'); const locale = useLocale(); - const otherLocale = i18n.locales.find((cur) => cur !== locale); + const otherLocale = locale === 'en' ? 'de' : 'en'; return ( diff --git a/packages/example-next-13/src/components/PageLayout.tsx b/packages/example-next-13/src/components/PageLayout.tsx index 5f266b623..bc840a0cb 100644 --- a/packages/example-next-13/src/components/PageLayout.tsx +++ b/packages/example-next-13/src/components/PageLayout.tsx @@ -1,5 +1,3 @@ -import {useTranslations} from 'next-intl'; -import Head from 'next/head'; import {ReactNode} from 'react'; type Props = { @@ -8,13 +6,8 @@ type Props = { }; export default function PageLayout({children, title}: Props) { - const t = useTranslations('PageLayout'); - return ( <> - - {[title, t('pageTitle')].join(' - ')} -
Date: Wed, 7 Dec 2022 17:01:14 +0100 Subject: [PATCH 008/312] Another attempt to fix the tests --- packages/next-intl/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 2bb02bf28..711f3e829 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -13,7 +13,7 @@ "scripts": { "start": "dts watch", "build": "rm -rf dist && tsc && rm -rf dist/test", - "test": "TZ=Europe/Berlin dts test test", + "test": "TZ=Europe/Berlin dts test --testPathIgnorePatterns=dist", "lint": "eslint src test && tsc", "prepublishOnly": "yarn test && yarn lint && yarn build && cp ../../README.md . && git checkout .", "postpublish": "rm ./README.md" From c0698e7e34a498b2435f68a9ec2436bfcc38a8af Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 7 Dec 2022 17:18:36 +0100 Subject: [PATCH 009/312] Fix exports --- packages/next-intl/package.json | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 711f3e829..27f25e5fa 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -12,15 +12,27 @@ }, "scripts": { "start": "dts watch", - "build": "rm -rf dist && tsc && rm -rf dist/test", + "build": "yarn build:default && yarn build:rsc", + "build:default": "rm -rf dist && dts build", + "build:rsc": "tsc && rm -rf dist/test", "test": "TZ=Europe/Berlin dts test --testPathIgnorePatterns=dist", - "lint": "eslint src test && tsc", + "lint": "eslint src test && tsc --noEmit", "prepublishOnly": "yarn test && yarn lint && yarn build && cp ../../README.md . && git checkout .", "postpublish": "rm ./README.md" }, "main": "dist/src/index.js", "module": "dist/src/next-intl.esm.js", "typings": "dist/src/index.d.ts", + "exports": { + ".": { + "react-server": "./dist/src/index.js", + "default": "./dist/next-intl.esm.js" + }, + "./server": { + "react-server": "./dist/src/index.js", + "default": "./dist/src/server/index.js" + } + }, "files": [ "dist", "src", From 2bd13164707758587385bb2f3749777039ebcfe2 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 7 Dec 2022 17:24:25 +0100 Subject: [PATCH 010/312] Another attempt --- packages/next-intl/package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 27f25e5fa..0a06a9392 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -20,13 +20,13 @@ "prepublishOnly": "yarn test && yarn lint && yarn build && cp ../../README.md . && git checkout .", "postpublish": "rm ./README.md" }, - "main": "dist/src/index.js", - "module": "dist/src/next-intl.esm.js", + "main": "dist/index.js", + "module": "dist/src/index.esm.js", "typings": "dist/src/index.d.ts", "exports": { ".": { "react-server": "./dist/src/index.js", - "default": "./dist/next-intl.esm.js" + "default": "./dist/index.js" }, "./server": { "react-server": "./dist/src/index.js", From a04b58af0b19d682fc1baf1d2be0c8869fd11396 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 8 Dec 2022 08:40:10 +0100 Subject: [PATCH 011/312] Include server.d.ts in package --- packages/next-intl/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 0a06a9392..08ee7b9d2 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -36,7 +36,8 @@ "files": [ "dist", "src", - "./server.js" + "./server.js", + "./server.d.ts" ], "keywords": [ "react", From 8cd78ef243216521874082925d29d0ff30a61c55 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 8 Dec 2022 08:53:25 +0100 Subject: [PATCH 012/312] Anoher attempt --- packages/next-intl/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 08ee7b9d2..abdf8fccd 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -36,8 +36,8 @@ "files": [ "dist", "src", - "./server.js", - "./server.d.ts" + "server.js", + "server.d.ts" ], "keywords": [ "react", From 6d7092922fdeba4d4cf42908d7ea050d61a3f051 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 8 Dec 2022 10:07:43 +0100 Subject: [PATCH 013/312] Handle 404 --- packages/example-next-13/src/app/[locale]/layout.tsx | 8 +++++++- packages/next-intl/package.json | 5 ++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/example-next-13/src/app/[locale]/layout.tsx b/packages/example-next-13/src/app/[locale]/layout.tsx index 56b69dd16..c0139bb27 100644 --- a/packages/example-next-13/src/app/[locale]/layout.tsx +++ b/packages/example-next-13/src/app/[locale]/layout.tsx @@ -1,4 +1,5 @@ import {NextIntlProvider} from 'next-intl'; +import {notFound} from 'next/navigation'; import {ReactNode} from 'react'; type Props = { @@ -10,7 +11,12 @@ export default async function LocaleLayout({ children, params: {locale} }: Props) { - const messages = (await import(`../../../messages/${locale}.json`)).default; + let messages; + try { + messages = (await import(`../../../messages/${locale}.json`)).default; + } catch (error) { + notFound(); + } return ( diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index abdf8fccd..b5a5e21f1 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -11,14 +11,13 @@ "url": "https://github.com/amannn/next-intl" }, "scripts": { - "start": "dts watch", "build": "yarn build:default && yarn build:rsc", "build:default": "rm -rf dist && dts build", "build:rsc": "tsc && rm -rf dist/test", "test": "TZ=Europe/Berlin dts test --testPathIgnorePatterns=dist", "lint": "eslint src test && tsc --noEmit", - "prepublishOnly": "yarn test && yarn lint && yarn build && cp ../../README.md . && git checkout .", - "postpublish": "rm ./README.md" + "prepublishOnly": "yarn test && yarn lint && yarn build && cp ../../README.md .", + "postpublish": "git checkout . && rm ./README.md" }, "main": "dist/index.js", "module": "dist/src/index.esm.js", From b6db9532dbeccaf37ccfa15a6c23f0522380b2b4 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 8 Dec 2022 11:20:16 +0100 Subject: [PATCH 014/312] Fix path --- packages/next-intl/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index b5a5e21f1..e56786d1a 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -28,7 +28,7 @@ "default": "./dist/index.js" }, "./server": { - "react-server": "./dist/src/index.js", + "react-server": "./dist/src/server/index.js", "default": "./dist/src/server/index.js" } }, From 3cd3819ebfc5dfa875b5f239885f7ef490bc6bac Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 8 Dec 2022 11:52:31 +0100 Subject: [PATCH 015/312] Look ma', no use client! --- .../src/app/[locale]/layout.tsx | 6 +-- .../example-next-13/src/app/[locale]/page.tsx | 4 +- .../src/components/LocaleSwitcher.tsx | 2 +- packages/next-intl/package.json | 1 + .../src/server/NextIntlRequestStorage.tsx | 45 +++++++++++++++++++ .../src/server/NextIntlServerProvider.tsx | 23 ++++++++++ .../src/server/NextRequestStorage.tsx | 35 +++++++++++++++ packages/next-intl/src/server/index.tsx | 3 ++ packages/next-intl/src/server/useLocale.tsx | 6 +++ .../next-intl/src/server/useTranslations.tsx | 10 +++++ packages/use-intl/package.json | 6 ++- packages/use-intl/tsconfig.json | 8 ++-- yarn.lock | 5 +++ 13 files changed, 142 insertions(+), 12 deletions(-) create mode 100644 packages/next-intl/src/server/NextIntlRequestStorage.tsx create mode 100644 packages/next-intl/src/server/NextIntlServerProvider.tsx create mode 100644 packages/next-intl/src/server/NextRequestStorage.tsx create mode 100644 packages/next-intl/src/server/useLocale.tsx create mode 100644 packages/next-intl/src/server/useTranslations.tsx diff --git a/packages/example-next-13/src/app/[locale]/layout.tsx b/packages/example-next-13/src/app/[locale]/layout.tsx index c0139bb27..016fb441a 100644 --- a/packages/example-next-13/src/app/[locale]/layout.tsx +++ b/packages/example-next-13/src/app/[locale]/layout.tsx @@ -1,4 +1,4 @@ -import {NextIntlProvider} from 'next-intl'; +import {NextIntlServerProvider} from 'next-intl/server'; import {notFound} from 'next/navigation'; import {ReactNode} from 'react'; @@ -19,8 +19,8 @@ export default async function LocaleLayout({ } return ( - + {children} - + ); } diff --git a/packages/example-next-13/src/app/[locale]/page.tsx b/packages/example-next-13/src/app/[locale]/page.tsx index 1bd1df54b..f4d16fc85 100644 --- a/packages/example-next-13/src/app/[locale]/page.tsx +++ b/packages/example-next-13/src/app/[locale]/page.tsx @@ -1,6 +1,4 @@ -'use client'; - -import {useTranslations} from 'next-intl'; +import {useTranslations} from 'next-intl/server'; import LocaleSwitcher from '../../components/LocaleSwitcher'; import PageLayout from '../../components/PageLayout'; diff --git a/packages/example-next-13/src/components/LocaleSwitcher.tsx b/packages/example-next-13/src/components/LocaleSwitcher.tsx index cbca03de7..dc2aa14a9 100644 --- a/packages/example-next-13/src/components/LocaleSwitcher.tsx +++ b/packages/example-next-13/src/components/LocaleSwitcher.tsx @@ -1,4 +1,4 @@ -import {useLocale, useTranslations} from 'next-intl'; +import {useLocale, useTranslations} from 'next-intl/server'; import Link from 'next/link'; export default function LocaleSwitcher() { diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index e56786d1a..fa535bf56 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -56,6 +56,7 @@ }, "dependencies": { "accept-language-parser": "^1.5.0", + "server-only": "0.0.1", "use-intl": "^2.9.1" }, "peerDependencies": { diff --git a/packages/next-intl/src/server/NextIntlRequestStorage.tsx b/packages/next-intl/src/server/NextIntlRequestStorage.tsx new file mode 100644 index 000000000..5eb0efd35 --- /dev/null +++ b/packages/next-intl/src/server/NextIntlRequestStorage.tsx @@ -0,0 +1,45 @@ +import {createTranslator} from 'use-intl/dist/src/core'; +import NextRequestStorage from './NextRequestStorage'; + +class NextIntlRequestStorage { + private key = '__next-intl'; + + private storage: NextRequestStorage<{ + translator: any; // TODO: Use a better type + locale: string; + }>; + + constructor() { + this.storage = new NextRequestStorage(this.key); + } + + public initRequest(...args: Parameters) { + const translator = createTranslator(...args); + this.storage.set({translator, locale: args[0].locale}); + } + + public isInitialized() { + return this.storage.get() != null; + } + + public getLocale() { + return this.getInitializedStorage().locale; + } + + public getTranslator() { + return this.getInitializedStorage().translator; + } + + private getInitializedStorage() { + if (!this.isInitialized()) { + throw new Error('Locale not set'); + } + + return this.storage.get()!; + } +} + +// Provide a singleton-instance of the storage. +const instance = new NextIntlRequestStorage(); + +export default instance; diff --git a/packages/next-intl/src/server/NextIntlServerProvider.tsx b/packages/next-intl/src/server/NextIntlServerProvider.tsx new file mode 100644 index 000000000..080aedfc5 --- /dev/null +++ b/packages/next-intl/src/server/NextIntlServerProvider.tsx @@ -0,0 +1,23 @@ +import 'server-only'; +import React, {ComponentProps, ReactNode} from 'react'; +import NextIntlProvider from '../NextIntlProvider'; +import NextIntlRequestStorage from './NextIntlRequestStorage'; + +export default function NextIntlServerProvider({ + children, + locale, + messages +}: { + children: ReactNode; + messages: ComponentProps['messages']; + locale: string; +}) { + // This provider must only be rendered a single time per request. + if (NextIntlRequestStorage.isInitialized()) { + console.error(`\`NextIntlServerProvider\` was already initialized.`); + } + + NextIntlRequestStorage.initRequest({locale, messages}); + + return <>{children}; +} diff --git a/packages/next-intl/src/server/NextRequestStorage.tsx b/packages/next-intl/src/server/NextRequestStorage.tsx new file mode 100644 index 000000000..51d1859c7 --- /dev/null +++ b/packages/next-intl/src/server/NextRequestStorage.tsx @@ -0,0 +1,35 @@ +import {requestAsyncStorage} from 'next/dist/client/components/request-async-storage'; + +/** + * Returns the request-level storage of Next.js where typically headers + * and cookies are stored. This is recreated for every request. + * + * This uses internal APIs of Next.js and may break in + * the future, so we should really move away from this. + */ +export default class NextRequestStorage { + private key: string; + + constructor(key: string) { + this.key = key; + } + + public set(value: Data) { + const storage = this.getStorage(); + (storage as any)[this.key] = value; + } + + public get(): Data | undefined { + const storage = this.getStorage(); + return (storage as any)[this.key]; + } + + private getStorage() { + const requestStore = + requestAsyncStorage && 'getStore' in requestAsyncStorage + ? requestAsyncStorage.getStore() + : requestAsyncStorage; + + return requestStore; + } +} diff --git a/packages/next-intl/src/server/index.tsx b/packages/next-intl/src/server/index.tsx index 1a077a786..fb0b6c0b7 100644 --- a/packages/next-intl/src/server/index.tsx +++ b/packages/next-intl/src/server/index.tsx @@ -1 +1,4 @@ export {default as createIntlMiddleware} from './createIntlMiddleware'; +export {default as NextIntlServerProvider} from './NextIntlServerProvider'; +export {default as useTranslations} from './useTranslations'; +export {default as useLocale} from './useLocale'; diff --git a/packages/next-intl/src/server/useLocale.tsx b/packages/next-intl/src/server/useLocale.tsx new file mode 100644 index 000000000..447526a32 --- /dev/null +++ b/packages/next-intl/src/server/useLocale.tsx @@ -0,0 +1,6 @@ +import 'server-only'; +import NextIntlRequestStorage from './NextIntlRequestStorage'; + +export default function useLocale() { + return NextIntlRequestStorage.getLocale(); +} diff --git a/packages/next-intl/src/server/useTranslations.tsx b/packages/next-intl/src/server/useTranslations.tsx new file mode 100644 index 000000000..e371a6c58 --- /dev/null +++ b/packages/next-intl/src/server/useTranslations.tsx @@ -0,0 +1,10 @@ +import 'server-only'; +import NextIntlRequestStorage from './NextIntlRequestStorage'; + +export default function useTranslations(namespace: string) { + const translator = NextIntlRequestStorage.getTranslator(); + return function translate(key: string, ...rest: any) { + key = [namespace, key].filter(Boolean).join('.'); + return translator(key, ...rest); + }; +} diff --git a/packages/use-intl/package.json b/packages/use-intl/package.json index e9670a671..2904c182a 100644 --- a/packages/use-intl/package.json +++ b/packages/use-intl/package.json @@ -12,9 +12,11 @@ }, "scripts": { "start": "dts watch", - "build": "dts build", + "build": "yarn build:default && yarn build:rsc", + "build:default": "rm -rf dist && dts build", + "build:rsc": "tsc && rm -rf dist/test", "test": "TZ=Europe/Berlin dts test", - "lint": "eslint src test && tsc", + "lint": "eslint src test && tsc --noEmit", "prepublishOnly": "yarn test && yarn lint && yarn build" }, "main": "dist/index.js", diff --git a/packages/use-intl/tsconfig.json b/packages/use-intl/tsconfig.json index cb91f60a7..218e76ddf 100644 --- a/packages/use-intl/tsconfig.json +++ b/packages/use-intl/tsconfig.json @@ -3,12 +3,13 @@ "compilerOptions": { "module": "esnext", "lib": ["dom", "esnext"], - "importHelpers": true, + "target": "ES2020", + "importHelpers": false, "declaration": true, "sourceMap": true, "rootDir": ".", "strict": true, - "noImplicitReturns": false, + "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, "noUnusedLocals": true, "noUnusedParameters": true, @@ -17,6 +18,7 @@ "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - "noEmit": true + "noEmit": false, + "outDir": "dist" } } diff --git a/yarn.lock b/yarn.lock index cfb1dba7f..97cefc8d4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11056,6 +11056,11 @@ serialize-javascript@^4.0.0: dependencies: randombytes "^2.1.0" +server-only@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/server-only/-/server-only-0.0.1.tgz#0f366bb6afb618c37c9255a314535dc412cd1c9e" + integrity sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA== + set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" From 51970c34286a596e1fb5932de1a87b8698846039 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 8 Dec 2022 12:12:49 +0100 Subject: [PATCH 016/312] =?UTF-8?q?This=20=F0=9F=92=A9=20is=20=F0=9F=8D=8C?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/example-next-13/src/app/[locale]/page.tsx | 2 +- packages/example-next-13/src/components/LocaleSwitcher.tsx | 2 +- packages/next-intl/package.json | 7 ++----- packages/next-intl/src/react-server/index.tsx | 5 +++++ .../next-intl/src/{server => react-server}/useLocale.tsx | 2 +- .../src/{server => react-server}/useTranslations.tsx | 2 +- packages/next-intl/src/server/index.tsx | 2 -- 7 files changed, 11 insertions(+), 11 deletions(-) create mode 100644 packages/next-intl/src/react-server/index.tsx rename packages/next-intl/src/{server => react-server}/useLocale.tsx (60%) rename packages/next-intl/src/{server => react-server}/useTranslations.tsx (80%) diff --git a/packages/example-next-13/src/app/[locale]/page.tsx b/packages/example-next-13/src/app/[locale]/page.tsx index f4d16fc85..0c30f14a5 100644 --- a/packages/example-next-13/src/app/[locale]/page.tsx +++ b/packages/example-next-13/src/app/[locale]/page.tsx @@ -1,4 +1,4 @@ -import {useTranslations} from 'next-intl/server'; +import {useTranslations} from 'next-intl'; import LocaleSwitcher from '../../components/LocaleSwitcher'; import PageLayout from '../../components/PageLayout'; diff --git a/packages/example-next-13/src/components/LocaleSwitcher.tsx b/packages/example-next-13/src/components/LocaleSwitcher.tsx index dc2aa14a9..cbca03de7 100644 --- a/packages/example-next-13/src/components/LocaleSwitcher.tsx +++ b/packages/example-next-13/src/components/LocaleSwitcher.tsx @@ -1,4 +1,4 @@ -import {useLocale, useTranslations} from 'next-intl/server'; +import {useLocale, useTranslations} from 'next-intl'; import Link from 'next/link'; export default function LocaleSwitcher() { diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index fa535bf56..423ec41e1 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -24,13 +24,10 @@ "typings": "dist/src/index.d.ts", "exports": { ".": { - "react-server": "./dist/src/index.js", + "react-server": "./dist/src/react-server/index.js", "default": "./dist/index.js" }, - "./server": { - "react-server": "./dist/src/server/index.js", - "default": "./dist/src/server/index.js" - } + "./server": "./dist/src/server/index.js" }, "files": [ "dist", diff --git a/packages/next-intl/src/react-server/index.tsx b/packages/next-intl/src/react-server/index.tsx new file mode 100644 index 000000000..487436630 --- /dev/null +++ b/packages/next-intl/src/react-server/index.tsx @@ -0,0 +1,5 @@ +// This is the main entry file when the 'react-server' +// environment imports from 'next-intl'. + +export {default as useLocale} from './useLocale'; +export {default as useTranslations} from './useTranslations'; diff --git a/packages/next-intl/src/server/useLocale.tsx b/packages/next-intl/src/react-server/useLocale.tsx similarity index 60% rename from packages/next-intl/src/server/useLocale.tsx rename to packages/next-intl/src/react-server/useLocale.tsx index 447526a32..b00f73bd8 100644 --- a/packages/next-intl/src/server/useLocale.tsx +++ b/packages/next-intl/src/react-server/useLocale.tsx @@ -1,5 +1,5 @@ import 'server-only'; -import NextIntlRequestStorage from './NextIntlRequestStorage'; +import NextIntlRequestStorage from '../server/NextIntlRequestStorage'; export default function useLocale() { return NextIntlRequestStorage.getLocale(); diff --git a/packages/next-intl/src/server/useTranslations.tsx b/packages/next-intl/src/react-server/useTranslations.tsx similarity index 80% rename from packages/next-intl/src/server/useTranslations.tsx rename to packages/next-intl/src/react-server/useTranslations.tsx index e371a6c58..78c73486f 100644 --- a/packages/next-intl/src/server/useTranslations.tsx +++ b/packages/next-intl/src/react-server/useTranslations.tsx @@ -1,5 +1,5 @@ import 'server-only'; -import NextIntlRequestStorage from './NextIntlRequestStorage'; +import NextIntlRequestStorage from '../server/NextIntlRequestStorage'; export default function useTranslations(namespace: string) { const translator = NextIntlRequestStorage.getTranslator(); diff --git a/packages/next-intl/src/server/index.tsx b/packages/next-intl/src/server/index.tsx index fb0b6c0b7..84aad5c7c 100644 --- a/packages/next-intl/src/server/index.tsx +++ b/packages/next-intl/src/server/index.tsx @@ -1,4 +1,2 @@ export {default as createIntlMiddleware} from './createIntlMiddleware'; export {default as NextIntlServerProvider} from './NextIntlServerProvider'; -export {default as useTranslations} from './useTranslations'; -export {default as useLocale} from './useLocale'; From 10cb44a82b312b5825dcd88af02fb86c3265c434 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 8 Dec 2022 12:13:17 +0100 Subject: [PATCH 017/312] Simplify --- packages/next-intl/package.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index e56786d1a..b8a243c72 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -27,10 +27,7 @@ "react-server": "./dist/src/index.js", "default": "./dist/index.js" }, - "./server": { - "react-server": "./dist/src/server/index.js", - "default": "./dist/src/server/index.js" - } + "./server": "./dist/src/server/index.js" }, "files": [ "dist", From 4a705b5e74fd8766fc66849d6f8f52e6bb271e4c Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 8 Dec 2022 14:09:37 +0100 Subject: [PATCH 018/312] More APIs --- .../src/app/[locale]/layout.tsx | 16 ++++++- .../example-next-13/src/app/[locale]/page.tsx | 2 + .../src/components/CurrentTime.tsx | 13 ++++++ packages/next-intl/src/react-server/index.tsx | 11 ++++- .../next-intl/src/react-server/useIntl.tsx | 5 +++ .../next-intl/src/react-server/useNow.tsx | 5 +++ .../src/react-server/useTimeZone.tsx | 5 +++ .../src/react-server/useTranslations.tsx | 9 ++-- .../src/server/NextIntlRequestStorage.tsx | 40 +++++++++++++---- .../src/server/NextIntlServerProvider.tsx | 20 +++------ packages/use-intl/src/core/index.tsx | 1 + packages/use-intl/src/react/IntlContext.tsx | 22 +-------- .../use-intl/src/react/IntlContextValue.tsx | 21 +++++++++ packages/use-intl/src/react/IntlProvider.tsx | 45 +++---------------- .../use-intl/src/react/IntlProviderProps.tsx | 17 +++++++ .../src/react/getIntlProviderProps.tsx | 32 +++++++++++++ 16 files changed, 176 insertions(+), 88 deletions(-) create mode 100644 packages/example-next-13/src/components/CurrentTime.tsx create mode 100644 packages/next-intl/src/react-server/useIntl.tsx create mode 100644 packages/next-intl/src/react-server/useNow.tsx create mode 100644 packages/next-intl/src/react-server/useTimeZone.tsx create mode 100644 packages/use-intl/src/react/IntlContextValue.tsx create mode 100644 packages/use-intl/src/react/IntlProviderProps.tsx create mode 100644 packages/use-intl/src/react/getIntlProviderProps.tsx diff --git a/packages/example-next-13/src/app/[locale]/layout.tsx b/packages/example-next-13/src/app/[locale]/layout.tsx index 016fb441a..e008f8804 100644 --- a/packages/example-next-13/src/app/[locale]/layout.tsx +++ b/packages/example-next-13/src/app/[locale]/layout.tsx @@ -19,7 +19,21 @@ export default async function LocaleLayout({ } return ( - + {children} ); diff --git a/packages/example-next-13/src/app/[locale]/page.tsx b/packages/example-next-13/src/app/[locale]/page.tsx index 0c30f14a5..1123f6339 100644 --- a/packages/example-next-13/src/app/[locale]/page.tsx +++ b/packages/example-next-13/src/app/[locale]/page.tsx @@ -1,4 +1,5 @@ import {useTranslations} from 'next-intl'; +import CurrentTime from '../../components/CurrentTime'; import LocaleSwitcher from '../../components/LocaleSwitcher'; import PageLayout from '../../components/PageLayout'; @@ -8,6 +9,7 @@ export default function Index() { return (

{t('description')}

+
); diff --git a/packages/example-next-13/src/components/CurrentTime.tsx b/packages/example-next-13/src/components/CurrentTime.tsx new file mode 100644 index 000000000..e3f175b56 --- /dev/null +++ b/packages/example-next-13/src/components/CurrentTime.tsx @@ -0,0 +1,13 @@ +import {useIntl, useNow, useTimeZone} from 'next-intl'; + +export default function CurrentTime() { + const intl = useIntl(); + const now = useNow(); + const timeZone = useTimeZone(); + + return ( +

+ {intl.formatDateTime(now, 'medium')} ({timeZone}) +

+ ); +} diff --git a/packages/next-intl/src/react-server/index.tsx b/packages/next-intl/src/react-server/index.tsx index 487436630..eb465ca63 100644 --- a/packages/next-intl/src/react-server/index.tsx +++ b/packages/next-intl/src/react-server/index.tsx @@ -1,5 +1,12 @@ -// This is the main entry file when the 'react-server' -// environment imports from 'next-intl'. +// This is the main entry file when the 'react-server' environment imports +// from 'next-intl'. Make sure this mirrors the API from the main entry. +// Replaced exports from the `react` package export {default as useLocale} from './useLocale'; export {default as useTranslations} from './useTranslations'; +export {default as useIntl} from './useIntl'; +export {default as useNow} from './useNow'; +export {default as useTimeZone} from './useTimeZone'; + +// Everything from `core` +export * from 'use-intl/dist/src/core'; diff --git a/packages/next-intl/src/react-server/useIntl.tsx b/packages/next-intl/src/react-server/useIntl.tsx new file mode 100644 index 000000000..c40d13b59 --- /dev/null +++ b/packages/next-intl/src/react-server/useIntl.tsx @@ -0,0 +1,5 @@ +import NextIntlRequestStorage from '../server/NextIntlRequestStorage'; + +export default function useIntl() { + return NextIntlRequestStorage.getIntl(); +} diff --git a/packages/next-intl/src/react-server/useNow.tsx b/packages/next-intl/src/react-server/useNow.tsx new file mode 100644 index 000000000..6ec11b51f --- /dev/null +++ b/packages/next-intl/src/react-server/useNow.tsx @@ -0,0 +1,5 @@ +import NextIntlRequestStorage from '../server/NextIntlRequestStorage'; + +export default function useNow() { + return NextIntlRequestStorage.getNow(); +} diff --git a/packages/next-intl/src/react-server/useTimeZone.tsx b/packages/next-intl/src/react-server/useTimeZone.tsx new file mode 100644 index 000000000..27ec4778a --- /dev/null +++ b/packages/next-intl/src/react-server/useTimeZone.tsx @@ -0,0 +1,5 @@ +import NextIntlRequestStorage from '../server/NextIntlRequestStorage'; + +export default function useTimeZone() { + return NextIntlRequestStorage.getTimeZone(); +} diff --git a/packages/next-intl/src/react-server/useTranslations.tsx b/packages/next-intl/src/react-server/useTranslations.tsx index 78c73486f..bb49f657a 100644 --- a/packages/next-intl/src/react-server/useTranslations.tsx +++ b/packages/next-intl/src/react-server/useTranslations.tsx @@ -1,10 +1,13 @@ import 'server-only'; import NextIntlRequestStorage from '../server/NextIntlRequestStorage'; -export default function useTranslations(namespace: string) { +export default function useTranslations(namespace?: string) { const translator = NextIntlRequestStorage.getTranslator(); + return function translate(key: string, ...rest: any) { - key = [namespace, key].filter(Boolean).join('.'); - return translator(key, ...rest); + const path = [namespace, key].filter((part) => part != null).join('.'); + + // @ts-expect-error We're using the types from the real `useTranslations` anyway + return translator(path, ...rest); }; } diff --git a/packages/next-intl/src/server/NextIntlRequestStorage.tsx b/packages/next-intl/src/server/NextIntlRequestStorage.tsx index 5eb0efd35..713772ed4 100644 --- a/packages/next-intl/src/server/NextIntlRequestStorage.tsx +++ b/packages/next-intl/src/server/NextIntlRequestStorage.tsx @@ -1,21 +1,31 @@ -import {createTranslator} from 'use-intl/dist/src/core'; +import {createTranslator, createIntl} from 'use-intl/dist/src/core'; +// eslint-disable-next-line import/default -- False positive +import IntlContextValue from 'use-intl/dist/src/react/IntlContextValue'; import NextRequestStorage from './NextRequestStorage'; class NextIntlRequestStorage { private key = '__next-intl'; - private storage: NextRequestStorage<{ - translator: any; // TODO: Use a better type - locale: string; - }>; + private storage: NextRequestStorage< + IntlContextValue & { + translator: ReturnType; + intl: ReturnType; + } + >; constructor() { this.storage = new NextRequestStorage(this.key); } - public initRequest(...args: Parameters) { - const translator = createTranslator(...args); - this.storage.set({translator, locale: args[0].locale}); + public initRequest(opts: IntlContextValue) { + const translator = createTranslator({ + ...opts, + messages: opts.messages + }); + const intl = createIntl(opts); + const now = opts.now || new Date(); + + this.storage.set({...opts, translator, intl, now}); } public isInitialized() { @@ -30,9 +40,21 @@ class NextIntlRequestStorage { return this.getInitializedStorage().translator; } + public getIntl() { + return this.getInitializedStorage().intl; + } + + public getNow() { + return this.getInitializedStorage().now; + } + + public getTimeZone() { + return this.getInitializedStorage().timeZone; + } + private getInitializedStorage() { if (!this.isInitialized()) { - throw new Error('Locale not set'); + throw new Error('`NextIntlServerProvider` was not initialized.'); } return this.storage.get()!; diff --git a/packages/next-intl/src/server/NextIntlServerProvider.tsx b/packages/next-intl/src/server/NextIntlServerProvider.tsx index 080aedfc5..16e99520c 100644 --- a/packages/next-intl/src/server/NextIntlServerProvider.tsx +++ b/packages/next-intl/src/server/NextIntlServerProvider.tsx @@ -1,23 +1,17 @@ import 'server-only'; -import React, {ComponentProps, ReactNode} from 'react'; -import NextIntlProvider from '../NextIntlProvider'; +import React from 'react'; +// eslint-disable-next-line import/default -- False positive +import IntlProviderProps from 'use-intl/dist/src/react/IntlProviderProps'; +import getIntlProviderProps from 'use-intl/dist/src/react/getIntlProviderProps'; import NextIntlRequestStorage from './NextIntlRequestStorage'; -export default function NextIntlServerProvider({ - children, - locale, - messages -}: { - children: ReactNode; - messages: ComponentProps['messages']; - locale: string; -}) { +export default function NextIntlServerProvider(props: IntlProviderProps) { // This provider must only be rendered a single time per request. if (NextIntlRequestStorage.isInitialized()) { console.error(`\`NextIntlServerProvider\` was already initialized.`); } - NextIntlRequestStorage.initRequest({locale, messages}); + NextIntlRequestStorage.initRequest(getIntlProviderProps(props)); - return <>{children}; + return <>{props.children}; } diff --git a/packages/use-intl/src/core/index.tsx b/packages/use-intl/src/core/index.tsx index b86994312..f51dd9893 100644 --- a/packages/use-intl/src/core/index.tsx +++ b/packages/use-intl/src/core/index.tsx @@ -9,3 +9,4 @@ export {default as NumberFormatOptions} from './NumberFormatOptions'; export {default as IntlError, IntlErrorCode} from './IntlError'; export {default as createTranslator} from './createTranslator'; export {default as createIntl} from './createIntl'; +export {default as IntlConfiguration} from './IntlConfiguration'; diff --git a/packages/use-intl/src/react/IntlContext.tsx b/packages/use-intl/src/react/IntlContext.tsx index 32a14fa38..ea6fa20d1 100644 --- a/packages/use-intl/src/react/IntlContext.tsx +++ b/packages/use-intl/src/react/IntlContext.tsx @@ -1,24 +1,6 @@ import {createContext} from 'react'; -import AbstractIntlMessages from '../core/AbstractIntlMessages'; -import Formats from '../core/Formats'; -import IntlError from '../core/IntlError'; -import {RichTranslationValues} from '../core/TranslationValues'; +import IntlContextValue from './IntlContextValue'; -export type IntlContextShape = { - messages?: AbstractIntlMessages; - locale: string; - formats?: Partial; - timeZone?: string; - onError(error: IntlError): void; - getMessageFallback(info: { - error: IntlError; - key: string; - namespace?: string; - }): string; - now?: Date; - defaultTranslationValues?: RichTranslationValues; -}; - -const IntlContext = createContext(undefined); +const IntlContext = createContext(undefined); export default IntlContext; diff --git a/packages/use-intl/src/react/IntlContextValue.tsx b/packages/use-intl/src/react/IntlContextValue.tsx new file mode 100644 index 000000000..e7f757f9d --- /dev/null +++ b/packages/use-intl/src/react/IntlContextValue.tsx @@ -0,0 +1,21 @@ +import AbstractIntlMessages from '../core/AbstractIntlMessages'; +import Formats from '../core/Formats'; +import IntlError from '../core/IntlError'; +import {RichTranslationValues} from '../core/TranslationValues'; + +type IntlContextValue = { + messages?: AbstractIntlMessages; + locale: string; + formats?: Partial; + timeZone?: string; + onError(error: IntlError): void; + getMessageFallback(info: { + error: IntlError; + key: string; + namespace?: string; + }): string; + now?: Date; + defaultTranslationValues?: RichTranslationValues; +}; + +export default IntlContextValue; diff --git a/packages/use-intl/src/react/IntlProvider.tsx b/packages/use-intl/src/react/IntlProvider.tsx index 0c4e30f96..ebfc15e6c 100644 --- a/packages/use-intl/src/react/IntlProvider.tsx +++ b/packages/use-intl/src/react/IntlProvider.tsx @@ -1,43 +1,8 @@ -import React, {ReactNode, useEffect} from 'react'; -import {AbstractIntlMessages} from '../core'; -import IntlConfiguration from '../core/IntlConfiguration'; -import {RichTranslationValues} from '../core/TranslationValues'; -import {defaultGetMessageFallback, defaultOnError} from '../core/defaults'; -import validateMessages from '../core/validateMessages'; +import React from 'react'; import IntlContext from './IntlContext'; +import IntlProviderProps from './IntlProviderProps'; +import getIntlProviderProps from './getIntlProviderProps'; -type Props = IntlConfiguration & { - /** All components that use the provided hooks should be within this tree. */ - children: ReactNode; - /** Global default values for translation values and rich text elements. - * Can be used for consistent usage or styling of rich text elements. - * Defaults will be overidden by locally provided values. */ - defaultTranslationValues?: RichTranslationValues; - /** All messages that will be available in your components. */ - messages?: AbstractIntlMessages; -}; - -export default function IntlProvider({ - children, - onError = defaultOnError, - getMessageFallback = defaultGetMessageFallback, - messages, - ...contextValues -}: Props) { - if (__DEV__) { - // eslint-disable-next-line react-hooks/rules-of-hooks - useEffect(() => { - if (messages) { - validateMessages(messages, onError); - } - }, [messages, onError]); - } - - return ( - - {children} - - ); +export default function IntlProvider(props: IntlProviderProps) { + return ; } diff --git a/packages/use-intl/src/react/IntlProviderProps.tsx b/packages/use-intl/src/react/IntlProviderProps.tsx new file mode 100644 index 000000000..e11b0a9aa --- /dev/null +++ b/packages/use-intl/src/react/IntlProviderProps.tsx @@ -0,0 +1,17 @@ +import {ReactNode} from 'react'; +import {AbstractIntlMessages} from '../core'; +import IntlConfiguration from '../core/IntlConfiguration'; +import {RichTranslationValues} from '../core/TranslationValues'; + +type IntlProviderProps = IntlConfiguration & { + /** All components that use the provided hooks should be within this tree. */ + children: ReactNode; + /** Global default values for translation values and rich text elements. + * Can be used for consistent usage or styling of rich text elements. + * Defaults will be overidden by locally provided values. */ + defaultTranslationValues?: RichTranslationValues; + /** All messages that will be available in your components. */ + messages?: AbstractIntlMessages; +}; + +export default IntlProviderProps; diff --git a/packages/use-intl/src/react/getIntlProviderProps.tsx b/packages/use-intl/src/react/getIntlProviderProps.tsx new file mode 100644 index 000000000..1e110356b --- /dev/null +++ b/packages/use-intl/src/react/getIntlProviderProps.tsx @@ -0,0 +1,32 @@ +import {defaultGetMessageFallback, defaultOnError} from '../core/defaults'; +import validateMessages from '../core/validateMessages'; +import IntlProviderProps from './IntlProviderProps'; + +/** + * Enhances the incoming props with defaults. + */ +export default function getIntlProviderProps({ + getMessageFallback, + messages, + onError, + ...rest +}: IntlProviderProps) { + const finalOnError = onError || defaultOnError; + const finalGetMessageFallback = + getMessageFallback || defaultGetMessageFallback; + + // Ideally we'd use `__DEV__`, but when building + // with tsc, this is not defined. + if (process.env.NODE_ENV !== 'production') { + if (messages) { + validateMessages(messages, finalOnError); + } + } + + return { + ...rest, + messages, + onError: finalOnError, + getMessageFallback: finalGetMessageFallback + }; +} From 60a08d8050879d3a35b891d0478fa32d5478919d Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 8 Dec 2022 14:28:55 +0100 Subject: [PATCH 019/312] Fix tests --- .../next-intl/src/server/NextIntlServerProvider.tsx | 4 ++-- packages/use-intl/src/core/index.tsx | 1 - packages/use-intl/src/react/IntlProvider.tsx | 10 +++++++--- ...etIntlProviderProps.tsx => getIntlContextValue.tsx} | 4 ++-- 4 files changed, 11 insertions(+), 8 deletions(-) rename packages/use-intl/src/react/{getIntlProviderProps.tsx => getIntlContextValue.tsx} (89%) diff --git a/packages/next-intl/src/server/NextIntlServerProvider.tsx b/packages/next-intl/src/server/NextIntlServerProvider.tsx index 16e99520c..5df719608 100644 --- a/packages/next-intl/src/server/NextIntlServerProvider.tsx +++ b/packages/next-intl/src/server/NextIntlServerProvider.tsx @@ -2,7 +2,7 @@ import 'server-only'; import React from 'react'; // eslint-disable-next-line import/default -- False positive import IntlProviderProps from 'use-intl/dist/src/react/IntlProviderProps'; -import getIntlProviderProps from 'use-intl/dist/src/react/getIntlProviderProps'; +import getIntlProviderValue from 'use-intl/dist/src/react/getIntlProviderValue'; import NextIntlRequestStorage from './NextIntlRequestStorage'; export default function NextIntlServerProvider(props: IntlProviderProps) { @@ -11,7 +11,7 @@ export default function NextIntlServerProvider(props: IntlProviderProps) { console.error(`\`NextIntlServerProvider\` was already initialized.`); } - NextIntlRequestStorage.initRequest(getIntlProviderProps(props)); + NextIntlRequestStorage.initRequest(getIntlProviderValue(props)); return <>{props.children}; } diff --git a/packages/use-intl/src/core/index.tsx b/packages/use-intl/src/core/index.tsx index f51dd9893..b86994312 100644 --- a/packages/use-intl/src/core/index.tsx +++ b/packages/use-intl/src/core/index.tsx @@ -9,4 +9,3 @@ export {default as NumberFormatOptions} from './NumberFormatOptions'; export {default as IntlError, IntlErrorCode} from './IntlError'; export {default as createTranslator} from './createTranslator'; export {default as createIntl} from './createIntl'; -export {default as IntlConfiguration} from './IntlConfiguration'; diff --git a/packages/use-intl/src/react/IntlProvider.tsx b/packages/use-intl/src/react/IntlProvider.tsx index ebfc15e6c..a0d20395b 100644 --- a/packages/use-intl/src/react/IntlProvider.tsx +++ b/packages/use-intl/src/react/IntlProvider.tsx @@ -1,8 +1,12 @@ import React from 'react'; import IntlContext from './IntlContext'; import IntlProviderProps from './IntlProviderProps'; -import getIntlProviderProps from './getIntlProviderProps'; +import getIntlContextValue from './getIntlContextValue'; -export default function IntlProvider(props: IntlProviderProps) { - return ; +export default function IntlProvider({children, ...props}: IntlProviderProps) { + return ( + + {children} + + ); } diff --git a/packages/use-intl/src/react/getIntlProviderProps.tsx b/packages/use-intl/src/react/getIntlContextValue.tsx similarity index 89% rename from packages/use-intl/src/react/getIntlProviderProps.tsx rename to packages/use-intl/src/react/getIntlContextValue.tsx index 1e110356b..930e7fa50 100644 --- a/packages/use-intl/src/react/getIntlProviderProps.tsx +++ b/packages/use-intl/src/react/getIntlContextValue.tsx @@ -5,12 +5,12 @@ import IntlProviderProps from './IntlProviderProps'; /** * Enhances the incoming props with defaults. */ -export default function getIntlProviderProps({ +export default function getIntlContextValue({ getMessageFallback, messages, onError, ...rest -}: IntlProviderProps) { +}: Omit) { const finalOnError = onError || defaultOnError; const finalGetMessageFallback = getMessageFallback || defaultGetMessageFallback; From e8e631c73ef7a1bf99892738a3990e61b9d007fb Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 8 Dec 2022 14:37:58 +0100 Subject: [PATCH 020/312] Get rid of __DEV__ --- .../src/server/NextIntlServerProvider.tsx | 4 ++-- .../use-intl/src/core/createBaseTranslator.tsx | 18 +++++++++++------- packages/use-intl/src/core/createIntl.tsx | 4 ++-- .../use-intl/src/core/createTranslatorImpl.tsx | 2 +- .../use-intl/src/react/getIntlContextValue.tsx | 2 -- packages/use-intl/src/react/useIntlContext.tsx | 2 +- .../use-intl/test/core/createIntl.test.tsx | 2 -- .../test/core/createTranslator.test.tsx | 2 -- packages/use-intl/test/react/useIntl.test.tsx | 2 -- .../use-intl/test/react/useLocale.test.tsx | 2 -- packages/use-intl/test/react/useNow.test.tsx | 2 -- .../use-intl/test/react/useTimeZone.test.tsx | 2 -- .../test/react/useTranslations.test.tsx | 2 -- 13 files changed, 17 insertions(+), 29 deletions(-) diff --git a/packages/next-intl/src/server/NextIntlServerProvider.tsx b/packages/next-intl/src/server/NextIntlServerProvider.tsx index 5df719608..67a8c4575 100644 --- a/packages/next-intl/src/server/NextIntlServerProvider.tsx +++ b/packages/next-intl/src/server/NextIntlServerProvider.tsx @@ -2,7 +2,7 @@ import 'server-only'; import React from 'react'; // eslint-disable-next-line import/default -- False positive import IntlProviderProps from 'use-intl/dist/src/react/IntlProviderProps'; -import getIntlProviderValue from 'use-intl/dist/src/react/getIntlProviderValue'; +import getIntlContextValue from 'use-intl/dist/src/react/getIntlContextValue'; import NextIntlRequestStorage from './NextIntlRequestStorage'; export default function NextIntlServerProvider(props: IntlProviderProps) { @@ -11,7 +11,7 @@ export default function NextIntlServerProvider(props: IntlProviderProps) { console.error(`\`NextIntlServerProvider\` was already initialized.`); } - NextIntlRequestStorage.initRequest(getIntlProviderValue(props)); + NextIntlRequestStorage.initRequest(getIntlContextValue(props)); return <>{props.children}; } diff --git a/packages/use-intl/src/core/createBaseTranslator.tsx b/packages/use-intl/src/core/createBaseTranslator.tsx index a6a2e3b76..2686f6095 100644 --- a/packages/use-intl/src/core/createBaseTranslator.tsx +++ b/packages/use-intl/src/core/createBaseTranslator.tsx @@ -24,7 +24,9 @@ function resolvePath( ) { if (!messages) { throw new Error( - __DEV__ ? `No messages available at \`${namespace}\`.` : undefined + process.env.NODE_ENV !== 'production' + ? `No messages available at \`${namespace}\`.` + : undefined ); } @@ -35,7 +37,7 @@ function resolvePath( if (part == null || next == null) { throw new Error( - __DEV__ + process.env.NODE_ENV !== 'production' ? `Could not resolve \`${key}\` in ${ namespace ? `\`${namespace}\`` : 'messages' }.` @@ -89,7 +91,9 @@ export function getMessagesOrError({ try { if (!messages) { throw new Error( - __DEV__ ? `No messages were configured on the provider.` : undefined + process.env.NODE_ENV !== 'production' + ? `No messages were configured on the provider.` + : undefined ); } @@ -99,7 +103,7 @@ export function getMessagesOrError({ if (!retrievedMessages) { throw new Error( - __DEV__ + process.env.NODE_ENV !== 'production' ? `No messages for namespace \`${namespace}\` found.` : undefined ); @@ -187,7 +191,7 @@ export default function createBaseTranslator< return getFallbackFromErrorAndNotify( key, IntlErrorCode.INSUFFICIENT_PATH, - __DEV__ + process.env.NODE_ENV !== 'production' ? `Insufficient path specified for \`${key}\` in \`${ namespace ? `\`${namespace}\`` : 'messages' }\`.` @@ -231,7 +235,7 @@ export default function createBaseTranslator< if (formattedMessage == null) { throw new Error( - __DEV__ + process.env.NODE_ENV !== 'production' ? `Unable to format \`${key}\` in ${ namespace ? `namespace \`${namespace}\`` : 'messages' }` @@ -274,7 +278,7 @@ export default function createBaseTranslator< return getFallbackFromErrorAndNotify( key, IntlErrorCode.INVALID_MESSAGE, - __DEV__ + process.env.NODE_ENV !== 'production' ? `The message \`${key}\` in ${ namespace ? `namespace \`${namespace}\`` : 'messages' } didn't resolve to a string. If you want to format rich text, use \`t.rich\` instead.` diff --git a/packages/use-intl/src/core/createIntl.tsx b/packages/use-intl/src/core/createIntl.tsx index d5edc8b4c..74c023cbd 100644 --- a/packages/use-intl/src/core/createIntl.tsx +++ b/packages/use-intl/src/core/createIntl.tsx @@ -71,7 +71,7 @@ export default function createIntl({ if (!options) { const error = new IntlError( IntlErrorCode.MISSING_FORMAT, - __DEV__ + process.env.NODE_ENV !== 'production' ? `Format \`${formatName}\` is not available. You can configure it on the provider or provide custom options.` : undefined ); @@ -153,7 +153,7 @@ export default function createIntl({ now = globalNow; } else { throw new Error( - __DEV__ + process.env.NODE_ENV !== 'production' ? `The \`now\` parameter wasn't provided to \`formatRelativeTime\` and there was no global fallback configured on the provider.` : undefined ); diff --git a/packages/use-intl/src/core/createTranslatorImpl.tsx b/packages/use-intl/src/core/createTranslatorImpl.tsx index 5d20c213a..db897b2a0 100644 --- a/packages/use-intl/src/core/createTranslatorImpl.tsx +++ b/packages/use-intl/src/core/createTranslatorImpl.tsx @@ -67,7 +67,7 @@ export default function createTranslatorImpl< if (typeof result !== 'string') { const error = new IntlError( IntlErrorCode.FORMATTING_ERROR, - __DEV__ + process.env.NODE_ENV !== 'production' ? "`createTranslator` only accepts functions for rich text formatting that receive and return strings.\n\nE.g. t.rich('rich', {b: (chunks) => `${chunks}`})" : undefined ); diff --git a/packages/use-intl/src/react/getIntlContextValue.tsx b/packages/use-intl/src/react/getIntlContextValue.tsx index 930e7fa50..476a40b59 100644 --- a/packages/use-intl/src/react/getIntlContextValue.tsx +++ b/packages/use-intl/src/react/getIntlContextValue.tsx @@ -15,8 +15,6 @@ export default function getIntlContextValue({ const finalGetMessageFallback = getMessageFallback || defaultGetMessageFallback; - // Ideally we'd use `__DEV__`, but when building - // with tsc, this is not defined. if (process.env.NODE_ENV !== 'production') { if (messages) { validateMessages(messages, finalOnError); diff --git a/packages/use-intl/src/react/useIntlContext.tsx b/packages/use-intl/src/react/useIntlContext.tsx index af4880a32..c35987e4f 100644 --- a/packages/use-intl/src/react/useIntlContext.tsx +++ b/packages/use-intl/src/react/useIntlContext.tsx @@ -6,7 +6,7 @@ export default function useIntlContext() { if (!context) { throw new Error( - __DEV__ + process.env.NODE_ENV !== 'production' ? 'No intl context found. Have you configured the provider?' : undefined ); diff --git a/packages/use-intl/test/core/createIntl.test.tsx b/packages/use-intl/test/core/createIntl.test.tsx index 354abc8fe..3c347eebd 100644 --- a/packages/use-intl/test/core/createIntl.test.tsx +++ b/packages/use-intl/test/core/createIntl.test.tsx @@ -1,8 +1,6 @@ import {parseISO} from 'date-fns'; import {createIntl} from '../../src'; -(global as any).__DEV__ = true; - const intl = createIntl({locale: 'en'}); it('formats a date and time', () => { diff --git a/packages/use-intl/test/core/createTranslator.test.tsx b/packages/use-intl/test/core/createTranslator.test.tsx index 0716df6a2..9c0751f80 100644 --- a/packages/use-intl/test/core/createTranslator.test.tsx +++ b/packages/use-intl/test/core/createTranslator.test.tsx @@ -1,8 +1,6 @@ import React from 'react'; import {createTranslator, IntlError, IntlErrorCode} from '../../src'; -(global as any).__DEV__ = true; - const messages = { Home: { title: 'Hello world!', diff --git a/packages/use-intl/test/react/useIntl.test.tsx b/packages/use-intl/test/react/useIntl.test.tsx index 699f650e7..b5e2389d8 100644 --- a/packages/use-intl/test/react/useIntl.test.tsx +++ b/packages/use-intl/test/react/useIntl.test.tsx @@ -10,8 +10,6 @@ import { useIntl } from '../../src'; -(global as any).__DEV__ = true; - function MockProvider( props: Partial> & {children: ReactNode} ) { diff --git a/packages/use-intl/test/react/useLocale.test.tsx b/packages/use-intl/test/react/useLocale.test.tsx index 09e77d472..8781e41ef 100644 --- a/packages/use-intl/test/react/useLocale.test.tsx +++ b/packages/use-intl/test/react/useLocale.test.tsx @@ -2,8 +2,6 @@ import {render, screen} from '@testing-library/react'; import React from 'react'; import {IntlProvider, useLocale} from '../../src'; -(global as any).__DEV__ = true; - it('returns the current locale', () => { function Component() { return <>{useLocale()}; diff --git a/packages/use-intl/test/react/useNow.test.tsx b/packages/use-intl/test/react/useNow.test.tsx index c68b281ed..2921d9249 100644 --- a/packages/use-intl/test/react/useNow.test.tsx +++ b/packages/use-intl/test/react/useNow.test.tsx @@ -3,8 +3,6 @@ import {parseISO} from 'date-fns'; import React from 'react'; import {IntlProvider, useNow} from '../../src'; -(global as any).__DEV__ = true; - it('returns the current time', () => { function Component() { return

{useNow().toISOString()}

; diff --git a/packages/use-intl/test/react/useTimeZone.test.tsx b/packages/use-intl/test/react/useTimeZone.test.tsx index 4b94db063..77d83791a 100644 --- a/packages/use-intl/test/react/useTimeZone.test.tsx +++ b/packages/use-intl/test/react/useTimeZone.test.tsx @@ -2,8 +2,6 @@ import {render, screen} from '@testing-library/react'; import React from 'react'; import {IntlProvider, useTimeZone} from '../../src'; -(global as any).__DEV__ = true; - it('returns the time zone when it is configured', () => { function Component() { return <>{useTimeZone()}; diff --git a/packages/use-intl/test/react/useTranslations.test.tsx b/packages/use-intl/test/react/useTranslations.test.tsx index a84a9e91a..d8a4f38b5 100644 --- a/packages/use-intl/test/react/useTranslations.test.tsx +++ b/packages/use-intl/test/react/useTranslations.test.tsx @@ -12,8 +12,6 @@ import { useTranslations } from '../../src'; -(global as any).__DEV__ = true; - // Wrap the library to include a counter for parse // invocations for the cache test below. jest.mock('intl-messageformat', () => { From b7f775c407f6b6fa4732a70ac8fa7cb0c17205be Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 8 Dec 2022 14:49:26 +0100 Subject: [PATCH 021/312] v2.10.0-alpha.3 --- packages/use-intl/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/use-intl/package.json b/packages/use-intl/package.json index 2904c182a..5e554b0bf 100644 --- a/packages/use-intl/package.json +++ b/packages/use-intl/package.json @@ -1,6 +1,6 @@ { "name": "use-intl", - "version": "2.9.1", + "version": "2.10.0-alpha.3", "sideEffects": false, "author": "Jan Amann ", "description": "Minimal, but complete solution for managing internationalization in React apps.", From b638e5594f7306cd73128ef645ab25dae2a5fe7e Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 8 Dec 2022 15:39:34 +0100 Subject: [PATCH 022/312] Simplify example --- .github/workflows/main.yml | 1 + lerna.json | 2 + .../example-next-13-advanced/.eslintrc.js | 10 + packages/example-next-13-advanced/.gitignore | 4 + .../.vscode/settings.json | 4 + packages/example-next-13-advanced/README.md | 3 + .../example-next-13-advanced/messages/de.json | 9 + .../example-next-13-advanced/messages/en.json | 9 + .../example-next-13-advanced/next-env.d.ts | 5 + .../example-next-13-advanced/next.config.js | 3 + .../example-next-13-advanced/package.json | 30 + .../public/favicon.ico | Bin 0 -> 15086 bytes .../src/app/[locale]/layout.tsx | 40 + .../src/app/[locale]/page.tsx | 16 + .../src/app/layout.tsx | 23 + .../src/components/CurrentTime.tsx | 0 .../src/components/LocaleSwitcher.tsx | 14 + .../src/components/PageLayout.tsx | 25 + .../src/middleware.tsx | 6 + .../example-next-13-advanced/tsconfig.json | 35 + packages/example-next-13-advanced/yarn.lock | 2413 +++++++++++++++++ .../src/app/[locale]/layout.tsx | 16 +- .../example-next-13/src/app/[locale]/page.tsx | 2 - 23 files changed, 2653 insertions(+), 17 deletions(-) create mode 100644 packages/example-next-13-advanced/.eslintrc.js create mode 100644 packages/example-next-13-advanced/.gitignore create mode 100644 packages/example-next-13-advanced/.vscode/settings.json create mode 100644 packages/example-next-13-advanced/README.md create mode 100644 packages/example-next-13-advanced/messages/de.json create mode 100644 packages/example-next-13-advanced/messages/en.json create mode 100644 packages/example-next-13-advanced/next-env.d.ts create mode 100644 packages/example-next-13-advanced/next.config.js create mode 100644 packages/example-next-13-advanced/package.json create mode 100644 packages/example-next-13-advanced/public/favicon.ico create mode 100644 packages/example-next-13-advanced/src/app/[locale]/layout.tsx create mode 100644 packages/example-next-13-advanced/src/app/[locale]/page.tsx create mode 100644 packages/example-next-13-advanced/src/app/layout.tsx rename packages/{example-next-13 => example-next-13-advanced}/src/components/CurrentTime.tsx (100%) create mode 100644 packages/example-next-13-advanced/src/components/LocaleSwitcher.tsx create mode 100644 packages/example-next-13-advanced/src/components/PageLayout.tsx create mode 100644 packages/example-next-13-advanced/src/middleware.tsx create mode 100644 packages/example-next-13-advanced/tsconfig.json create mode 100644 packages/example-next-13-advanced/yarn.lock diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8e1bf6824..7592e28cd 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -20,3 +20,4 @@ jobs: - run: yarn workspace example run build - run: yarn workspace example-advanced run build - run: yarn workspace example-next-13 run build + - run: yarn workspace example-next-13-advanced run build diff --git a/lerna.json b/lerna.json index 4c2890627..111e51859 100644 --- a/lerna.json +++ b/lerna.json @@ -5,6 +5,8 @@ "packages/next-intl", "packages/example", "packages/example-advanced", + "packages/example-next-13", + "packages/example-next-13-advanced", "packages/website" ], "useWorkspaces": true, diff --git a/packages/example-next-13-advanced/.eslintrc.js b/packages/example-next-13-advanced/.eslintrc.js new file mode 100644 index 000000000..f113ec889 --- /dev/null +++ b/packages/example-next-13-advanced/.eslintrc.js @@ -0,0 +1,10 @@ +require('eslint-config-molindo/setupPlugins'); + +module.exports = { + extends: ['molindo/typescript', 'molindo/react', 'plugin:@next/next/recommended'], + rules: { + 'react/react-in-jsx-scope': 'off', + 'jsx-a11y/anchor-is-valid': 'off', + 'react/display-name': 'off' + } +} diff --git a/packages/example-next-13-advanced/.gitignore b/packages/example-next-13-advanced/.gitignore new file mode 100644 index 000000000..04239e7d0 --- /dev/null +++ b/packages/example-next-13-advanced/.gitignore @@ -0,0 +1,4 @@ +/node_modules +/.next/ +.DS_Store +tsconfig.tsbuildinfo diff --git a/packages/example-next-13-advanced/.vscode/settings.json b/packages/example-next-13-advanced/.vscode/settings.json new file mode 100644 index 000000000..d3fdae9a6 --- /dev/null +++ b/packages/example-next-13-advanced/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "typescript.tsdk": "../../node_modules/typescript/lib", + "typescript.enablePromptUseWorkspaceTsdk": true +} \ No newline at end of file diff --git a/packages/example-next-13-advanced/README.md b/packages/example-next-13-advanced/README.md new file mode 100644 index 000000000..f8de937db --- /dev/null +++ b/packages/example-next-13-advanced/README.md @@ -0,0 +1,3 @@ +# example-next-13 + +An example that showcases usage of `next-intl` in the `app` folder of Next.js 13. diff --git a/packages/example-next-13-advanced/messages/de.json b/packages/example-next-13-advanced/messages/de.json new file mode 100644 index 000000000..5a94eb059 --- /dev/null +++ b/packages/example-next-13-advanced/messages/de.json @@ -0,0 +1,9 @@ +{ + "Index": { + "title": "Start", + "description": "Das ist die Startseite." + }, + "LocaleSwitcher": { + "switchLocale": "Zu {locale, select, de {Deutsch} en {Englisch} other {Unbekannt}} wechseln" + } +} diff --git a/packages/example-next-13-advanced/messages/en.json b/packages/example-next-13-advanced/messages/en.json new file mode 100644 index 000000000..f712b9bdb --- /dev/null +++ b/packages/example-next-13-advanced/messages/en.json @@ -0,0 +1,9 @@ +{ + "Index": { + "title": "Home", + "description": "This is the home page." + }, + "LocaleSwitcher": { + "switchLocale": "Switch to {locale, select, de {German} en {English} other {Unknown}}" + } +} diff --git a/packages/example-next-13-advanced/next-env.d.ts b/packages/example-next-13-advanced/next-env.d.ts new file mode 100644 index 000000000..4f11a03dc --- /dev/null +++ b/packages/example-next-13-advanced/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/packages/example-next-13-advanced/next.config.js b/packages/example-next-13-advanced/next.config.js new file mode 100644 index 000000000..3a4751bf7 --- /dev/null +++ b/packages/example-next-13-advanced/next.config.js @@ -0,0 +1,3 @@ +module.exports = { + experimental: {appDir: true} +}; diff --git a/packages/example-next-13-advanced/package.json b/packages/example-next-13-advanced/package.json new file mode 100644 index 000000000..a67e00590 --- /dev/null +++ b/packages/example-next-13-advanced/package.json @@ -0,0 +1,30 @@ +{ + "name": "example-next-13", + "version": "2.9.1", + "private": true, + "scripts": { + "dev": "next dev", + "lint": "eslint src && tsc", + "test": "echo 'No tests yet'", + "build": "next build", + "start": "next start" + }, + "dependencies": { + "accept-language-parser": "1.5.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "next-intl": "^2.9.1", + "next": "^13.0.5", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "typescript": "^4.6.3" + }, + "devDependencies": { + "@types/lodash": "^4.14.176", + "@types/node": "^17.0.23", + "@types/react": "^18.0.23", + "eslint": "^8.12.0", + "eslint-config-molindo": "^6.0.0", + "eslint-config-next": "^13.0.0" + } +} diff --git a/packages/example-next-13-advanced/public/favicon.ico b/packages/example-next-13-advanced/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4ddd8fff7086c240ed21438ca7d96f1b8dae0bc0 GIT binary patch literal 15086 zcmdU$O=uNY6vrnYO%#n9m0G$<)C8)FRuGb41&a%z2%-zOrYkKQ7LVcV8tZ8{r_I(J}2Xwd3WZ$*OwePxifd}IsgB? z@7{AiX5x7@UY)mPi>I{JyV~w~9iHd4w)*$0Jnt9fty0SKPwPGJD;0Q8Wn|)gA|*d3 zZJyV>ZcgVi%JR2KUOJ_pNiRu%l#WaPk^bu|*W~exGL*#z+iFOiKxv{cq~A-QNoSnvZWVz$%y2 z$kB(=jC597D#v2>V1NZC*rkY~fpzbN^>mc9}aM-le$W`3Rbh-!*zlSeaS_(t57xidzf?h9!_wJ6XMpeG;F(2?%@^} zTZz5QCkusdm&t8;0X=2;v z=4NyA=FO7%Pfbmky?gg2#`ihHeJl-sYxshdXBjsq7mY z8_mUw7gO^e8yhp7ot>$$ea>(%X}z;`>sB*5I-05ur%#_Y#Iv;R=W{QKf7*DOB3>4% zC)`u_AKPw8<7vuxS%^Q}Q;%QEpEOB4Eg@cp>j3vu@iWMsYu9*MV!RCVhdXmXI6u|B zOFS(xUWR$WJ@NV>s=meIX&K^WkiT6&bc&Dj`YnpP&5w(xWr&wS{&xM=By8vPv*j6; zM#a-I#mgXnIKv%r-oL19&_}`Ra6BzzybR*m{R{jzNz1x_B%V%BPv_?4GR8~GAFgn= z!d{p?v3*{0N<1AJ8Zs|lyeMUT8O4LM2F@IU!kI)_e}g@H_L#xJL9=w}(kLEj^5Mu? zPa!Gm`4#bW_3G7WI7ZpTonKL(#c+POu291V^0w=Gv7X=BY8=qTLOVb2w&WaA-W4pg z_ZPfVNg|8+{gJIFb*3*>V?2NfcG7m2$vk0h`@i3x4*QtFGv;}uQrr+*nI9_oTi_dv zxOXgioLZQ(?e_y}6iZ{#ZwxL^&=9>|`hvL_vv zayCHQqFj^5GrQ-*#;)IWnNEy;<($6sycVvrp4Uj4(FrcKN zvwpkUcIKIsPTVT}NSgmnYgOv+w20N4r9IMbr9Vq2rL(?rO&-rELs@J}6~-g|aZs9- zPD^QmIHgQhiVe2-NF(pcs9(zWSaEo9&#=V@zLH3X3Xe$n+2j1XJi`aR@aZBuRp=+F zi|-_5@QLp@fnz1GEl+$$wFAG=4^msUQYjeW{!ptt`bniQ!+ya6(@K{v%63*JUtzrP zJy>8OjL&bR;WD}Vy1F`(R_p8QS z3)aiW1e0>+L40 z-*@!(_U7itD4r4d!TA^bRO^q1h6b~2*|K1rT(A3mOt7s~bNyvGRCE1lIqcL$qL`%e zF71v_e7gwkz@DKR`wz>H{y;x@CUvP_p)%OwBfQ>LmXi=0*h5xh{~07$vHiE{t1C-pXV!RjLzkh$YPT0;{WAHuhnKNhJu)lWgTA}x{_V=CVx2>(su;#M@ zA9w|M`q$Xc<8RBbW@GJ!#C#`=ZNB}iEh&4Pk&zMe=+Pt7-riman>=juzhBUvYv%ET z2M + {children} +
+ ); +} diff --git a/packages/example-next-13-advanced/src/app/[locale]/page.tsx b/packages/example-next-13-advanced/src/app/[locale]/page.tsx new file mode 100644 index 000000000..1123f6339 --- /dev/null +++ b/packages/example-next-13-advanced/src/app/[locale]/page.tsx @@ -0,0 +1,16 @@ +import {useTranslations} from 'next-intl'; +import CurrentTime from '../../components/CurrentTime'; +import LocaleSwitcher from '../../components/LocaleSwitcher'; +import PageLayout from '../../components/PageLayout'; + +export default function Index() { + const t = useTranslations('Index'); + + return ( + +

{t('description')}

+ + +
+ ); +} diff --git a/packages/example-next-13-advanced/src/app/layout.tsx b/packages/example-next-13-advanced/src/app/layout.tsx new file mode 100644 index 000000000..3eba3456e --- /dev/null +++ b/packages/example-next-13-advanced/src/app/layout.tsx @@ -0,0 +1,23 @@ +import {ReactNode} from 'react'; + +type Props = { + children: ReactNode; +}; + +export default function RootLayout({children}: Props) { + // TODO: Here's a problem: When there's no cookie yet, we can't use the locale + // from the URL. Something like `require('next/navigation').usePathname()` + // would be great, but that uses non-server context currently, so not an + // option in server components. `params` is also not an option, since they are + // only available from matched segments downwards. + const lang = undefined; + + return ( + + + next-intl example + + {children} + + ); +} diff --git a/packages/example-next-13/src/components/CurrentTime.tsx b/packages/example-next-13-advanced/src/components/CurrentTime.tsx similarity index 100% rename from packages/example-next-13/src/components/CurrentTime.tsx rename to packages/example-next-13-advanced/src/components/CurrentTime.tsx diff --git a/packages/example-next-13-advanced/src/components/LocaleSwitcher.tsx b/packages/example-next-13-advanced/src/components/LocaleSwitcher.tsx new file mode 100644 index 000000000..cbca03de7 --- /dev/null +++ b/packages/example-next-13-advanced/src/components/LocaleSwitcher.tsx @@ -0,0 +1,14 @@ +import {useLocale, useTranslations} from 'next-intl'; +import Link from 'next/link'; + +export default function LocaleSwitcher() { + const t = useTranslations('LocaleSwitcher'); + const locale = useLocale(); + const otherLocale = locale === 'en' ? 'de' : 'en'; + + return ( + + {t('switchLocale', {locale: otherLocale})} + + ); +} diff --git a/packages/example-next-13-advanced/src/components/PageLayout.tsx b/packages/example-next-13-advanced/src/components/PageLayout.tsx new file mode 100644 index 000000000..bc840a0cb --- /dev/null +++ b/packages/example-next-13-advanced/src/components/PageLayout.tsx @@ -0,0 +1,25 @@ +import {ReactNode} from 'react'; + +type Props = { + children?: ReactNode; + title: string; +}; + +export default function PageLayout({children, title}: Props) { + return ( + <> +
+
+

{title}

+ {children} +
+
+ + ); +} diff --git a/packages/example-next-13-advanced/src/middleware.tsx b/packages/example-next-13-advanced/src/middleware.tsx new file mode 100644 index 000000000..d5b257e3d --- /dev/null +++ b/packages/example-next-13-advanced/src/middleware.tsx @@ -0,0 +1,6 @@ +import {createIntlMiddleware} from 'next-intl/server'; + +export default createIntlMiddleware({ + locales: ['en', 'de'], + defaultLocale: 'en' +}); diff --git a/packages/example-next-13-advanced/tsconfig.json b/packages/example-next-13-advanced/tsconfig.json new file mode 100644 index 000000000..1c6c979ae --- /dev/null +++ b/packages/example-next-13-advanced/tsconfig.json @@ -0,0 +1,35 @@ +{ + "extends": "eslint-config-molindo/tsconfig.json", + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ] + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/packages/example-next-13-advanced/yarn.lock b/packages/example-next-13-advanced/yarn.lock new file mode 100644 index 000000000..4c8be66de --- /dev/null +++ b/packages/example-next-13-advanced/yarn.lock @@ -0,0 +1,2413 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/helper-validator-identifier@^7.15.7", "@babel/helper-validator-identifier@^7.18.6": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/runtime-corejs3@^7.10.2": + version "7.20.1" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz#d0775a49bb5fba77e42cbb7276c9955c7b05af8d" + integrity sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg== + dependencies: + core-js-pure "^3.25.1" + regenerator-runtime "^0.13.10" + +"@babel/runtime@^7.10.2", "@babel/runtime@^7.18.9": + version "7.20.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.1.tgz#1148bb33ab252b165a06698fde7576092a78b4a9" + integrity sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg== + dependencies: + regenerator-runtime "^0.13.10" + +"@eslint/eslintrc@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" + integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@formatjs/ecma402-abstract@1.11.4": + version "1.11.4" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz#b962dfc4ae84361f9f08fbce411b4e4340930eda" + integrity sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw== + dependencies: + "@formatjs/intl-localematcher" "0.2.25" + tslib "^2.1.0" + +"@formatjs/ecma402-abstract@^1.11.4": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.13.0.tgz#df6db3cbee0182bbd2fd6217103781c802aee819" + integrity sha512-CQ8Ykd51jYD1n05dtoX6ns6B9n/+6ZAxnWUAonvHC4kkuAemROYBhHkEB4tm1uVrRlE7gLDqXkAnY51Y0pRCWQ== + dependencies: + "@formatjs/intl-localematcher" "0.2.31" + tslib "2.4.0" + +"@formatjs/fast-memoize@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz#e6f5aee2e4fd0ca5edba6eba7668e2d855e0fc21" + integrity sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg== + dependencies: + tslib "^2.1.0" + +"@formatjs/icu-messageformat-parser@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz#a54293dd7f098d6a6f6a084ab08b6d54a3e8c12d" + integrity sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + "@formatjs/icu-skeleton-parser" "1.3.6" + tslib "^2.1.0" + +"@formatjs/icu-skeleton-parser@1.3.6": + version "1.3.6" + resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz#4ce8c0737d6f07b735288177049e97acbf2e8964" + integrity sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + tslib "^2.1.0" + +"@formatjs/intl-localematcher@0.2.25": + version "0.2.25" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz#60892fe1b271ec35ba07a2eb018a2dd7bca6ea3a" + integrity sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA== + dependencies: + tslib "^2.1.0" + +"@formatjs/intl-localematcher@0.2.31": + version "0.2.31" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.2.31.tgz#aada2b1e58211460cedba56889e3c489117eb6eb" + integrity sha512-9QTjdSBpQ7wHShZgsNzNig5qT3rCPvmZogS/wXZzKotns5skbXgs0I7J8cuN0PPqXyynvNVuN+iOKhNS2eb+ZA== + dependencies: + tslib "2.4.0" + +"@humanwhocodes/config-array@^0.11.6": + version "0.11.7" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.7.tgz#38aec044c6c828f6ed51d5d7ae3d9b9faf6dbb0f" + integrity sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@next/env@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.0.5.tgz#f2fafaa42c6693260e00f443853b549509715ad1" + integrity sha512-F3KLtiDrUslAZhTYTh8Zk5ZaavbYwLUn3NYPBnOjAXU8hWm0QVGVzKIOuURQ098ofRU4e9oglf3Sj9pFx5nI5w== + +"@next/eslint-plugin-next@13.0.4": + version "13.0.4" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-13.0.4.tgz#46800f48d9f81e8bb460319a15a00bf2f4016e91" + integrity sha512-jZ4urKT+aO9QHm3ttihrIQscQISDSKK8isAom750+EySn9o3LCSkTdPGBtvBqY7Yku+NqhfQempR5J58DqTaVg== + dependencies: + glob "7.1.7" + +"@next/swc-android-arm-eabi@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.5.tgz#bb83f8a8bea5d3d813059a28624e9ff3c0c22bac" + integrity sha512-YO691dxHlviy6H0eghgwqn+5kU9J3iQnKERHTDSppqjjGDBl6ab4wz9XfI5AhljjkaTg3TknHoIEWFDoZ4Ve8g== + +"@next/swc-android-arm64@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.0.5.tgz#6082f7e4a7b07c5e1a1284ef0cb3b741b49f03de" + integrity sha512-ugbwffkUmp8cd2afehDC8LtQeFUxElRUBBngfB5UYSWBx18HW4OgzkPFIY8jUBH16zifvGZWXbICXJWDHrOLtw== + +"@next/swc-darwin-arm64@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.5.tgz#764f85446590b8f2894c9aca0c96e039cd1ca5e0" + integrity sha512-mshlh8QOtOalfZbc17uNAftWgqHTKnrv6QUwBe+mpGz04eqsSUzVz1JGZEdIkmuDxOz00cK2NPoc+VHDXh99IQ== + +"@next/swc-darwin-x64@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.5.tgz#f0e4855639279f85f4e0d2bc3d10e5b6c3dff33d" + integrity sha512-SfigOKW4Z2UB3ruUPyvrlDIkcJq1hiw1wvYApWugD+tQsAkYZKEoz+/8emCmeYZ6Gwgi1WHV+z52Oj8u7bEHPg== + +"@next/swc-freebsd-x64@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.5.tgz#1ccc56db2fd6c1a8e10d3952b7cc5fb98c1eed71" + integrity sha512-0NJg8HZr4yG8ynmMGFXQf+Mahvq4ZgBmUwSlLXXymgxEQgH17erH/LoR69uITtW+KTsALgk9axEt5AAabM4ucg== + +"@next/swc-linux-arm-gnueabihf@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.5.tgz#1dd70f03a33d0ea84a5cae03141437ff1e1b5642" + integrity sha512-Cye+h3oDT3NDWjACMlRaolL8fokpKie34FlPj9nfoW7bYKmoMBY1d4IO/GgBF+5xEl7HkH0Ny/qex63vQ0pN+A== + +"@next/swc-linux-arm64-gnu@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.5.tgz#053d8379a509d005128763013e7be8b92abb0304" + integrity sha512-5BfDS/VoRDR5QUGG9oedOCEZGmV2zxUVFYLUJVPMSMeIgqkjxWQBiG2BUHZI6/LGk9yvHmjx7BTvtBCLtRg6IQ== + +"@next/swc-linux-arm64-musl@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.5.tgz#4a260c6e2f8003b01668c9f2ecfefc102f307d04" + integrity sha512-xenvqlXz+KxVKAB1YR723gnVNszpsCvKZkiFFaAYqDGJ502YuqU2fwLsaSm/ASRizNcBYeo9HPLTyc3r/9cdMQ== + +"@next/swc-linux-x64-gnu@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.5.tgz#d886be84865c4b3d720add8b0c1f7e71221972c2" + integrity sha512-9Ahi1bbdXwhrWQmOyoTod23/hhK05da/FzodiNqd6drrMl1y7+RujoEcU8Dtw3H1mGWB+yuTlWo8B4Iba8hqiQ== + +"@next/swc-linux-x64-musl@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.5.tgz#2d4245512761d90f7e5086df6d6042f078b8e395" + integrity sha512-V+1mnh49qmS9fOZxVRbzjhBEz9IUGJ7AQ80JPWAYQM5LI4TxfdiF4APLPvJ52rOmNeTqnVz1bbKtVOso+7EZ4w== + +"@next/swc-win32-arm64-msvc@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.5.tgz#19df9e548b3fe1a2aa8491dd7c01ca950977ac9e" + integrity sha512-wRE9rkp7I+/3Jf2T9PFIJOKq3adMWYEFkPOA7XAkUfYbQHlDJm/U5cVCWUsKByyQq5RThwufI91sgd19MfxRxg== + +"@next/swc-win32-ia32-msvc@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.5.tgz#a4de6f9d2556b48869f20b1c0f61c5a88a213319" + integrity sha512-Q1XQSLEhFuFhkKFdJIGt7cYQ4T3u6P5wrtUNreg5M+7P+fjSiC8+X+Vjcw+oebaacsdl0pWZlK+oACGafush1w== + +"@next/swc-win32-x64-msvc@13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.5.tgz#f95f882900fe8bf84e049b720f18e851a7187cfe" + integrity sha512-t5gRblrwwiNZP6cT7NkxlgxrFgHWtv9ei5vUraCLgBqzvIsa7X+PnarZUeQCXqz6Jg9JSGGT9j8lvzD97UqeJQ== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@pkgr/utils@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.3.1.tgz#0a9b06ffddee364d6642b3cd562ca76f55b34a03" + integrity sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw== + dependencies: + cross-spawn "^7.0.3" + is-glob "^4.0.3" + open "^8.4.0" + picocolors "^1.0.0" + tiny-glob "^0.2.9" + tslib "^2.4.0" + +"@rushstack/eslint-patch@^1.1.1", "@rushstack/eslint-patch@^1.1.3": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" + integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg== + +"@swc/helpers@0.4.14": + version "0.4.14" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" + integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== + dependencies: + tslib "^2.4.0" + +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/lodash@^4.14.176": + version "4.14.189" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.189.tgz#975ff8c38da5ae58b751127b19ad5e44b5b7f6d2" + integrity sha512-kb9/98N6X8gyME9Cf7YaqIMvYGnBSWqEci6tiettE6iJWH1XdJz/PO8LB0GtLCG7x8dU3KWhZT+lA1a35127tA== + +"@types/node@^17.0.23": + version "17.0.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + +"@types/normalize-package-data@^2.4.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + +"@types/prop-types@*": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/react@^18.0.23": + version "18.0.25" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.25.tgz#8b1dcd7e56fe7315535a4af25435e0bb55c8ae44" + integrity sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/scheduler@*": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + +"@typescript-eslint/eslint-plugin@^5.0.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.44.0.tgz#105788f299050c917eb85c4d9fd04b089e3740de" + integrity sha512-j5ULd7FmmekcyWeArx+i8x7sdRHzAtXTkmDPthE4amxZOWKFK7bomoJ4r7PJ8K7PoMzD16U8MmuZFAonr1ERvw== + dependencies: + "@typescript-eslint/scope-manager" "5.44.0" + "@typescript-eslint/type-utils" "5.44.0" + "@typescript-eslint/utils" "5.44.0" + debug "^4.3.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.42.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.44.0.tgz#99e2c710a2252191e7a79113264f438338b846ad" + integrity sha512-H7LCqbZnKqkkgQHaKLGC6KUjt3pjJDx8ETDqmwncyb6PuoigYajyAwBGz08VU/l86dZWZgI4zm5k2VaKqayYyA== + dependencies: + "@typescript-eslint/scope-manager" "5.44.0" + "@typescript-eslint/types" "5.44.0" + "@typescript-eslint/typescript-estree" "5.44.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.44.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.44.0.tgz#988c3f34b45b3474eb9ff0674c18309dedfc3e04" + integrity sha512-2pKml57KusI0LAhgLKae9kwWeITZ7IsZs77YxyNyIVOwQ1kToyXRaJLl+uDEXzMN5hnobKUOo2gKntK9H1YL8g== + dependencies: + "@typescript-eslint/types" "5.44.0" + "@typescript-eslint/visitor-keys" "5.44.0" + +"@typescript-eslint/type-utils@5.44.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.44.0.tgz#bc5a6e8a0269850714a870c9268c038150dfb3c7" + integrity sha512-A1u0Yo5wZxkXPQ7/noGkRhV4J9opcymcr31XQtOzcc5nO/IHN2E2TPMECKWYpM3e6olWEM63fq/BaL1wEYnt/w== + dependencies: + "@typescript-eslint/typescript-estree" "5.44.0" + "@typescript-eslint/utils" "5.44.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.44.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.44.0.tgz#f3f0b89aaff78f097a2927fe5688c07e786a0241" + integrity sha512-Tp+zDnHmGk4qKR1l+Y1rBvpjpm5tGXX339eAlRBDg+kgZkz9Bw+pqi4dyseOZMsGuSH69fYfPJCBKBrbPCxYFQ== + +"@typescript-eslint/typescript-estree@5.44.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.44.0.tgz#0461b386203e8d383bb1268b1ed1da9bc905b045" + integrity sha512-M6Jr+RM7M5zeRj2maSfsZK2660HKAJawv4Ud0xT+yauyvgrsHu276VtXlKDFnEmhG+nVEd0fYZNXGoAgxwDWJw== + dependencies: + "@typescript-eslint/types" "5.44.0" + "@typescript-eslint/visitor-keys" "5.44.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.44.0", "@typescript-eslint/utils@^5.10.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.44.0.tgz#d733da4d79d6c30f1a68b531cdda1e0c1f00d52d" + integrity sha512-fMzA8LLQ189gaBjS0MZszw5HBdZgVwxVFShCO3QN+ws3GlPkcy9YuS3U4wkT6su0w+Byjq3mS3uamy9HE4Yfjw== + dependencies: + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.44.0" + "@typescript-eslint/types" "5.44.0" + "@typescript-eslint/typescript-estree" "5.44.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.44.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.44.0.tgz#10740dc28902bb903d12ee3a005cc3a70207d433" + integrity sha512-a48tLG8/4m62gPFbJ27FxwCOqPKxsb8KC3HkmYoq2As/4YyjQl1jDbRr1s63+g4FS/iIehjmN3L5UjmKva1HzQ== + dependencies: + "@typescript-eslint/types" "5.44.0" + eslint-visitor-keys "^3.3.0" + +accept-language-parser@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/accept-language-parser/-/accept-language-parser-1.5.0.tgz#8877c54040a8dcb59e0a07d9c1fde42298334791" + integrity sha512-QhyTbMLYo0BBGg1aWbeMG4ekWtds/31BrEU+DONOg/7ax23vxpL03Pb7/zBmha2v7vdD3AyzZVWBVGEZxKOXWw== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.8.0: + version "8.8.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + dependencies: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + +array-includes@^3.1.4, array-includes@^3.1.5, array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.flat@^1.2.5: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.tosorted@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" + integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.1.3" + +ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== + +axe-core@^4.4.3: + version "4.5.2" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.5.2.tgz#823fdf491ff717ac3c58a52631d4206930c1d9f7" + integrity sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA== + +axobject-query@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +caniuse-lite@^1.0.30001406: + version "1.0.30001434" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz#ec1ec1cfb0a93a34a0600d37903853030520a4e5" + integrity sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +ci-info@^3.3.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.6.2.tgz#362ea15378f1c39378ba786affbc1c9ef015ecfd" + integrity sha512-lVZdhvbEudris15CLytp2u6Y0p5EKfztae9Fqa189MfNmln9F33XuH69v5fvNfiRN5/0eAUz2yJL3mo+nhaRKg== + +clean-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clean-regexp/-/clean-regexp-1.0.0.tgz#8df7c7aae51fd36874e8f8d05b9180bc11a3fed7" + integrity sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw== + dependencies: + escape-string-regexp "^1.0.5" + +client-only@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" + integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +confusing-browser-globals@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== + +core-js-pure@^3.25.1: + version "3.26.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.26.1.tgz#653f4d7130c427820dcecd3168b594e8bb095a33" + integrity sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ== + +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +csstype@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" + integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== + +damerau-levenshtein@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + +date-fns@^2.16.1: + version "2.29.3" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8" + integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== + +debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +enhanced-resolve@^5.10.0: + version "5.11.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.11.0.tgz#543cf6c847a85adba0c4a5e2170bded4d493919a" + integrity sha512-0Gcraf7gAJSQoPg+bTSXNhuzAYtXqLc4C011vb8S3B8XUSEkGYNBk20c68X9291VF4vvsCD8SPkr6Mza+DwU+g== + dependencies: + graceful-fs "^4.2.9" + tapable "^2.2.0" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.20.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" + integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.2" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-molindo@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-molindo/-/eslint-config-molindo-6.0.0.tgz#2a5ac0acd5e43f3428c60fb0b51881bc5ba42ae4" + integrity sha512-kZ/SZBJIejZY45HVn9q0WSkF1mhvem+7FmxDF7mNfCepGEGrjID2mNlOuWAShBTidzpukMQ7qKhkjV5JVmO91w== + dependencies: + "@rushstack/eslint-patch" "^1.1.1" + "@typescript-eslint/eslint-plugin" "^5.0.0" + "@typescript-eslint/parser" "^5.0.0" + confusing-browser-globals "^1.0.11" + eslint-plugin-css-modules "^2.11.0" + eslint-plugin-import "^2.25.4" + eslint-plugin-jest "^26.1.3" + eslint-plugin-jsx-a11y "^6.5.1" + eslint-plugin-prettier "^4.0.0" + eslint-plugin-react "^7.29.4" + eslint-plugin-react-hooks "^4.3.0" + eslint-plugin-sort-destructure-keys "^1.4.0" + eslint-plugin-unicorn "^41.0.1" + prettier "^2.6.1" + typescript "^4.0.0" + +eslint-config-next@^13.0.0: + version "13.0.4" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-13.0.4.tgz#78954caf26b3aa718bed077bce90c1f505db0005" + integrity sha512-moEC7BW2TK7JKq3QfnaauqRjWzVcEf71gp5DbClpFPHM6QXE0u0uVvSTiHlmOgtCe1vyWAO+AhF87ZITd8mIDw== + dependencies: + "@next/eslint-plugin-next" "13.0.4" + "@rushstack/eslint-patch" "^1.1.3" + "@typescript-eslint/parser" "^5.42.0" + eslint-import-resolver-node "^0.3.6" + eslint-import-resolver-typescript "^3.5.2" + eslint-plugin-import "^2.26.0" + eslint-plugin-jsx-a11y "^6.5.1" + eslint-plugin-react "^7.31.7" + eslint-plugin-react-hooks "^4.5.0" + +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== + dependencies: + debug "^3.2.7" + resolve "^1.20.0" + +eslint-import-resolver-typescript@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.2.tgz#9431acded7d898fd94591a08ea9eec3514c7de91" + integrity sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ== + dependencies: + debug "^4.3.4" + enhanced-resolve "^5.10.0" + get-tsconfig "^4.2.0" + globby "^13.1.2" + is-core-module "^2.10.0" + is-glob "^4.0.3" + synckit "^0.8.4" + +eslint-module-utils@^2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== + dependencies: + debug "^3.2.7" + +eslint-plugin-css-modules@^2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-css-modules/-/eslint-plugin-css-modules-2.11.0.tgz#8de4d01d523a2d51c03043fa8004aab6b6cf3b1a" + integrity sha512-CLvQvJOMlCywZzaI4HVu7QH/ltgNXvCg7giJGiE+sA9wh5zQ+AqTgftAzrERV22wHe1p688wrU/Zwxt1Ry922w== + dependencies: + gonzales-pe "^4.0.3" + lodash "^4.17.2" + +eslint-plugin-import@^2.25.4, eslint-plugin-import@^2.26.0: + version "2.26.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" + integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== + dependencies: + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.3" + has "^1.0.3" + is-core-module "^2.8.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.5" + resolve "^1.22.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-jest@^26.1.3: + version "26.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.9.0.tgz#7931c31000b1c19e57dbfb71bbf71b817d1bf949" + integrity sha512-TWJxWGp1J628gxh2KhaH1H1paEdgE2J61BBF1I59c6xWeL5+D1BzMxGDN/nXAfX+aSkR5u80K+XhskK6Gwq9ng== + dependencies: + "@typescript-eslint/utils" "^5.10.0" + +eslint-plugin-jsx-a11y@^6.5.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz#93736fc91b83fdc38cc8d115deedfc3091aef1ff" + integrity sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q== + dependencies: + "@babel/runtime" "^7.18.9" + aria-query "^4.2.2" + array-includes "^3.1.5" + ast-types-flow "^0.0.7" + axe-core "^4.4.3" + axobject-query "^2.2.0" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" + has "^1.0.3" + jsx-ast-utils "^3.3.2" + language-tags "^1.0.5" + minimatch "^3.1.2" + semver "^6.3.0" + +eslint-plugin-prettier@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-react-hooks@^4.3.0, eslint-plugin-react-hooks@^4.5.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== + +eslint-plugin-react@^7.29.4, eslint-plugin-react@^7.31.7: + version "7.31.11" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz#011521d2b16dcf95795df688a4770b4eaab364c8" + integrity sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw== + dependencies: + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + array.prototype.tosorted "^1.1.1" + doctrine "^2.1.0" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + object.hasown "^1.1.2" + object.values "^1.1.6" + prop-types "^15.8.1" + resolve "^2.0.0-next.3" + semver "^6.3.0" + string.prototype.matchall "^4.0.8" + +eslint-plugin-sort-destructure-keys@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-sort-destructure-keys/-/eslint-plugin-sort-destructure-keys-1.4.0.tgz#45924521e556692002522468a75b6a9fbac11316" + integrity sha512-txU9l22mblz7YpyjJNYFy4wb5PVXiRMbc9lqFPPhvY4wKyBBYQvb31TIcduf7iRb4Bv01aiXcJiuCkOOrVY48Q== + dependencies: + natural-compare-lite "^1.4.0" + +eslint-plugin-unicorn@^41.0.1: + version "41.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-41.0.1.tgz#b49205b38e71e227d21fb5776f8d078a1dc637ca" + integrity sha512-gF5vo2dIj0YdNMQ/IMegiBkQdQ22GBFFVpdkJP+0og3w7XD4ypea0xQVRv6iofkLVR2w0phAdikcnU01ybd4Ow== + dependencies: + "@babel/helper-validator-identifier" "^7.15.7" + ci-info "^3.3.0" + clean-regexp "^1.0.0" + eslint-utils "^3.0.0" + esquery "^1.4.0" + indent-string "^4.0.0" + is-builtin-module "^3.1.0" + lodash "^4.17.21" + pluralize "^8.0.0" + read-pkg-up "^7.0.1" + regexp-tree "^0.1.24" + safe-regex "^2.1.1" + semver "^7.3.5" + strip-indent "^3.0.0" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.12.0: + version "8.28.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.28.0.tgz#81a680732634677cc890134bcdd9fdfea8e63d6e" + integrity sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ== + dependencies: + "@eslint/eslintrc" "^1.3.3" + "@humanwhocodes/config-array" "^0.11.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.15.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.4.0: + version "9.4.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@^3.2.11, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-tsconfig@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.2.0.tgz#ff368dd7104dab47bf923404eb93838245c66543" + integrity sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg== + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@7.1.7: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.15.0: + version "13.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.18.0.tgz#fb224daeeb2bb7d254cd2c640f003528b8d0c1dc" + integrity sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A== + dependencies: + type-fest "^0.20.2" + +globalyzer@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" + integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515" + integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + +globrex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" + integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== + +gonzales-pe@^4.0.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3" + integrity sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ== + dependencies: + minimist "^1.2.5" + +graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +intl-messageformat@^9.3.18: + version "9.13.0" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-9.13.0.tgz#97360b73bd82212e4f6005c712a4a16053165468" + integrity sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + "@formatjs/fast-memoize" "1.2.1" + "@formatjs/icu-messageformat-parser" "2.1.0" + tslib "^2.1.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-builtin-module@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.0.tgz#bb0310dfe881f144ca83f30100ceb10cf58835e0" + integrity sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw== + dependencies: + builtin-modules "^3.3.0" + +is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.10.0, is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +js-sdsl@^4.1.4: + version "4.2.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" + integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" + integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== + dependencies: + array-includes "^3.1.5" + object.assign "^4.1.3" + +language-subtag-registry@~0.3.2: + version "0.3.22" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" + integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== + +language-tags@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== + dependencies: + language-subtag-registry "~0.3.2" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.2, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +next-intl@*: + version "2.9.1" + resolved "https://registry.yarnpkg.com/next-intl/-/next-intl-2.9.1.tgz#da90ee45079203806c000c66c21bdf51c830db9a" + integrity sha512-/OPaH5T+jOHXEZJfCzfl+ZkmjcNQOvb7DNR0SHSbtzYk/9IqjLFSLlxJvj4JPbW9xivzZbPCdgT5+yGzI2Uk0w== + dependencies: + use-intl "^2.9.1" + +next@^13.0.5: + version "13.0.5" + resolved "https://registry.yarnpkg.com/next/-/next-13.0.5.tgz#cddfd6804f84a21721da370e4425980876670173" + integrity sha512-awpc3DkphyKydwCotcBnuKwh6hMqkT5xdiBK4OatJtOZurDPBYLP62jtM2be/4OunpmwIbsS0Eyv+ZGU97ciEg== + dependencies: + "@next/env" "13.0.5" + "@swc/helpers" "0.4.14" + caniuse-lite "^1.0.30001406" + postcss "8.4.14" + styled-jsx "5.1.0" + optionalDependencies: + "@next/swc-android-arm-eabi" "13.0.5" + "@next/swc-android-arm64" "13.0.5" + "@next/swc-darwin-arm64" "13.0.5" + "@next/swc-darwin-x64" "13.0.5" + "@next/swc-freebsd-x64" "13.0.5" + "@next/swc-linux-arm-gnueabihf" "13.0.5" + "@next/swc-linux-arm64-gnu" "13.0.5" + "@next/swc-linux-arm64-musl" "13.0.5" + "@next/swc-linux-x64-gnu" "13.0.5" + "@next/swc-linux-x64-musl" "13.0.5" + "@next/swc-win32-arm64-msvc" "13.0.5" + "@next/swc-win32-ia32-msvc" "13.0.5" + "@next/swc-win32-x64-msvc" "13.0.5" + +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.12.2, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.3, object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" + integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.fromentries@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.hasown@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" + integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== + dependencies: + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.values@^1.1.5, object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +open@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + +postcss@8.4.14: + version "8.4.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.6.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + +prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +react-is@^16.13.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +regenerator-runtime@^0.13.10: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regexp-tree@^0.1.24, regexp-tree@~0.1.1: + version "0.1.24" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.24.tgz#3d6fa238450a4d66e5bc9c4c14bb720e2196829d" + integrity sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw== + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^2.0.0-next.3: + version "2.0.0-next.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +safe-regex@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-2.1.1.tgz#f7128f00d056e2fe5c11e81a1324dd974aadced2" + integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A== + dependencies: + regexp-tree "~0.1.1" + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + +"semver@2 || 3 || 4 || 5": + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.5, semver@^7.3.7: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.12" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" + integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== + +string.prototype.matchall@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" + integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.4.3" + side-channel "^1.0.4" + +string.prototype.trimend@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +styled-jsx@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.0.tgz#4a5622ab9714bd3fcfaeec292aa555871f057563" + integrity sha512-/iHaRJt9U7T+5tp6TRelLnqBqiaIT0HsO0+vgyj8hK2KUk7aejFqRrumqPUlAqDwAj8IbS/1hk3IhBAAK/FCUQ== + dependencies: + client-only "0.0.1" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +synckit@^0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.4.tgz#0e6b392b73fafdafcde56692e3352500261d64ec" + integrity sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw== + dependencies: + "@pkgr/utils" "^2.3.1" + tslib "^2.4.0" + +tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +tiny-glob@^0.2.9: + version "0.2.9" + resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" + integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== + dependencies: + globalyzer "0.1.0" + globrex "^0.1.2" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tsconfig-paths@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0, tslib@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" + integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +typescript@^4.0.0, typescript@^4.6.3: + version "4.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db" + integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +use-intl@^2.9.1: + version "2.9.1" + resolved "https://registry.yarnpkg.com/use-intl/-/use-intl-2.9.1.tgz#af303d61bd6f855a1fa118c4d41c8092250c8930" + integrity sha512-eAveKBEbFjzzS4BWx8ET3/reyvCN/fBQbFgYYd51fnIb2SlmfDA1B6c9DZPthnyvjzZLfSAXShn0+dN4cQAeIg== + dependencies: + "@formatjs/ecma402-abstract" "^1.11.4" + intl-messageformat "^9.3.18" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/packages/example-next-13/src/app/[locale]/layout.tsx b/packages/example-next-13/src/app/[locale]/layout.tsx index e008f8804..016fb441a 100644 --- a/packages/example-next-13/src/app/[locale]/layout.tsx +++ b/packages/example-next-13/src/app/[locale]/layout.tsx @@ -19,21 +19,7 @@ export default async function LocaleLayout({ } return ( - + {children} ); diff --git a/packages/example-next-13/src/app/[locale]/page.tsx b/packages/example-next-13/src/app/[locale]/page.tsx index 1123f6339..0c30f14a5 100644 --- a/packages/example-next-13/src/app/[locale]/page.tsx +++ b/packages/example-next-13/src/app/[locale]/page.tsx @@ -1,5 +1,4 @@ import {useTranslations} from 'next-intl'; -import CurrentTime from '../../components/CurrentTime'; import LocaleSwitcher from '../../components/LocaleSwitcher'; import PageLayout from '../../components/PageLayout'; @@ -9,7 +8,6 @@ export default function Index() { return (

{t('description')}

-
); From 1d243d5adc394562fc83cce9a4d2138c0f2113b9 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 8 Dec 2022 15:49:49 +0100 Subject: [PATCH 023/312] Fix install --- .../example-next-13-advanced/package.json | 4 +-- packages/example-next-13-advanced/yarn.lock | 27 ++++++++++++------- packages/example-next-13/package.json | 2 +- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/packages/example-next-13-advanced/package.json b/packages/example-next-13-advanced/package.json index a67e00590..7f636472e 100644 --- a/packages/example-next-13-advanced/package.json +++ b/packages/example-next-13-advanced/package.json @@ -1,5 +1,5 @@ { - "name": "example-next-13", + "name": "example-next-13-advanced", "version": "2.9.1", "private": true, "scripts": { @@ -13,7 +13,7 @@ "accept-language-parser": "1.5.0", "date-fns": "^2.16.1", "lodash": "^4.17.21", - "next-intl": "^2.9.1", + "next-intl": "2.10.0-alpha.4", "next": "^13.0.5", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/example-next-13-advanced/yarn.lock b/packages/example-next-13-advanced/yarn.lock index 4c8be66de..f4b936f37 100644 --- a/packages/example-next-13-advanced/yarn.lock +++ b/packages/example-next-13-advanced/yarn.lock @@ -380,7 +380,7 @@ "@typescript-eslint/types" "5.44.0" eslint-visitor-keys "^3.3.0" -accept-language-parser@1.5.0: +accept-language-parser@1.5.0, accept-language-parser@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/accept-language-parser/-/accept-language-parser-1.5.0.tgz#8877c54040a8dcb59e0a07d9c1fde42298334791" integrity sha512-QhyTbMLYo0BBGg1aWbeMG4ekWtds/31BrEU+DONOg/7ax23vxpL03Pb7/zBmha2v7vdD3AyzZVWBVGEZxKOXWw== @@ -1695,12 +1695,14 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -next-intl@*: - version "2.9.1" - resolved "https://registry.yarnpkg.com/next-intl/-/next-intl-2.9.1.tgz#da90ee45079203806c000c66c21bdf51c830db9a" - integrity sha512-/OPaH5T+jOHXEZJfCzfl+ZkmjcNQOvb7DNR0SHSbtzYk/9IqjLFSLlxJvj4JPbW9xivzZbPCdgT5+yGzI2Uk0w== +next-intl@2.10.0-alpha.4: + version "2.10.0-alpha.4" + resolved "https://registry.yarnpkg.com/next-intl/-/next-intl-2.10.0-alpha.4.tgz#f4c8df38ce30508d9f54da4051014266b8699a6c" + integrity sha512-TIedxhlWEakohUoSHla7UhX+megaOcuUf3Xvaa4NkdjaWBk5GClV7DtYGfw5ujqciHq4Xo3i7/u9KgxxpC+M/w== dependencies: - use-intl "^2.9.1" + accept-language-parser "^1.5.0" + server-only "0.0.1" + use-intl "2.10.0-alpha.3" next@^13.0.5: version "13.0.5" @@ -2105,6 +2107,11 @@ semver@^7.3.5, semver@^7.3.7: dependencies: lru-cache "^6.0.0" +server-only@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/server-only/-/server-only-0.0.1.tgz#0f366bb6afb618c37c9255a314535dc412cd1c9e" + integrity sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA== + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -2358,10 +2365,10 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -use-intl@^2.9.1: - version "2.9.1" - resolved "https://registry.yarnpkg.com/use-intl/-/use-intl-2.9.1.tgz#af303d61bd6f855a1fa118c4d41c8092250c8930" - integrity sha512-eAveKBEbFjzzS4BWx8ET3/reyvCN/fBQbFgYYd51fnIb2SlmfDA1B6c9DZPthnyvjzZLfSAXShn0+dN4cQAeIg== +use-intl@2.10.0-alpha.3: + version "2.10.0-alpha.3" + resolved "https://registry.yarnpkg.com/use-intl/-/use-intl-2.10.0-alpha.3.tgz#53b14be7d4af0a827c9359a34d53bf0f935823aa" + integrity sha512-3q3B53UMd9wbdbyXsfyIzZs++uRGnl2DELQ+y51/+/E0izj0GStlh20vnHnblotd8elvu1FIAduOT7F1B2CgdQ== dependencies: "@formatjs/ecma402-abstract" "^1.11.4" intl-messageformat "^9.3.18" diff --git a/packages/example-next-13/package.json b/packages/example-next-13/package.json index a67e00590..7817c0e17 100644 --- a/packages/example-next-13/package.json +++ b/packages/example-next-13/package.json @@ -13,7 +13,7 @@ "accept-language-parser": "1.5.0", "date-fns": "^2.16.1", "lodash": "^4.17.21", - "next-intl": "^2.9.1", + "next-intl": "2.10.0-alpha.4", "next": "^13.0.5", "react": "^18.2.0", "react-dom": "^18.2.0", From 7d2e38912707163b3b5e5a8e845933d0cd22ff90 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 8 Dec 2022 15:57:50 +0100 Subject: [PATCH 024/312] Fix install --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 18533c619..4ceb4bab6 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "packages/next-intl", "packages/example", "packages/example-next-13", + "packages/example-next-13-advanced", "packages/example-advanced", "packages/website" ], From 8638c88140be3c7af44988201ce4377eaec2cf4c Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 8 Dec 2022 17:31:36 +0100 Subject: [PATCH 025/312] import {NextIntlClientProvider} from 'next-intl/client'; --- .../example-next-13-advanced/messages/en.json | 8 +++++ .../example-next-13-advanced/package.json | 2 +- .../src/app/[locale]/page.tsx | 4 +++ .../ClientCounter.tsx | 29 +++++++++++++++++++ .../01-MessagesAsPropsCounter/Counter.tsx | 15 ++++++++++ .../01-MessagesAsPropsCounter/index.tsx | 1 + .../ClientCounter.tsx | 22 ++++++++++++++ .../02-MessagesOnClientCounter/Counter.tsx | 15 ++++++++++ .../02-MessagesOnClientCounter/index.tsx | 1 + packages/example-next-13/README.md | 2 ++ packages/example-next-13/package.json | 2 +- packages/next-intl/client.d.ts | 1 + packages/next-intl/client.js | 1 + packages/next-intl/package.json | 7 +++-- .../NextIntlClientProvider.tsx} | 0 packages/next-intl/src/client/index.tsx | 1 + packages/next-intl/src/index.tsx | 1 - .../NextIntlClientProvider.test.tsx} | 11 +++---- yarn.lock | 8 +++++ 19 files changed, 121 insertions(+), 10 deletions(-) create mode 100644 packages/example-next-13-advanced/src/components/client/01-MessagesAsPropsCounter/ClientCounter.tsx create mode 100644 packages/example-next-13-advanced/src/components/client/01-MessagesAsPropsCounter/Counter.tsx create mode 100644 packages/example-next-13-advanced/src/components/client/01-MessagesAsPropsCounter/index.tsx create mode 100644 packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/ClientCounter.tsx create mode 100644 packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx create mode 100644 packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/index.tsx create mode 100644 packages/next-intl/client.d.ts create mode 100644 packages/next-intl/client.js rename packages/next-intl/src/{NextIntlProvider.tsx => client/NextIntlClientProvider.tsx} (100%) create mode 100644 packages/next-intl/src/client/index.tsx rename packages/next-intl/test/{NextIntlProvider.test.tsx => client/NextIntlClientProvider.test.tsx} (73%) diff --git a/packages/example-next-13-advanced/messages/en.json b/packages/example-next-13-advanced/messages/en.json index f712b9bdb..380a82d41 100644 --- a/packages/example-next-13-advanced/messages/en.json +++ b/packages/example-next-13-advanced/messages/en.json @@ -5,5 +5,13 @@ }, "LocaleSwitcher": { "switchLocale": "Switch to {locale, select, de {German} en {English} other {Unknown}}" + }, + "Counter": { + "count": "Current count:", + "increment": "Increment" + }, + "ClientCounter": { + "count": "Current count: {count}", + "increment": "Increment" } } diff --git a/packages/example-next-13-advanced/package.json b/packages/example-next-13-advanced/package.json index 7f636472e..145903b42 100644 --- a/packages/example-next-13-advanced/package.json +++ b/packages/example-next-13-advanced/package.json @@ -13,7 +13,7 @@ "accept-language-parser": "1.5.0", "date-fns": "^2.16.1", "lodash": "^4.17.21", - "next-intl": "2.10.0-alpha.4", + "next-intl": "*", "next": "^13.0.5", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/example-next-13-advanced/src/app/[locale]/page.tsx b/packages/example-next-13-advanced/src/app/[locale]/page.tsx index 1123f6339..73584a632 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/page.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/page.tsx @@ -2,6 +2,8 @@ import {useTranslations} from 'next-intl'; import CurrentTime from '../../components/CurrentTime'; import LocaleSwitcher from '../../components/LocaleSwitcher'; import PageLayout from '../../components/PageLayout'; +import MessagesAsPropsCounter from '../../components/client/01-MessagesAsPropsCounter'; +import MessagesOnClientCounter from '../../components/client/02-MessagesOnClientCounter'; export default function Index() { const t = useTranslations('Index'); @@ -11,6 +13,8 @@ export default function Index() {

{t('description')}

+ + ); } diff --git a/packages/example-next-13-advanced/src/components/client/01-MessagesAsPropsCounter/ClientCounter.tsx b/packages/example-next-13-advanced/src/components/client/01-MessagesAsPropsCounter/ClientCounter.tsx new file mode 100644 index 000000000..cd6a6cf48 --- /dev/null +++ b/packages/example-next-13-advanced/src/components/client/01-MessagesAsPropsCounter/ClientCounter.tsx @@ -0,0 +1,29 @@ +'use client'; + +import {useState} from 'react'; + +type Props = { + messages: { + count: string; + increment: string; + }; +}; + +export default function ClientCounter({messages}: Props) { + const [count, setCount] = useState(0); + + function onIncrement() { + setCount(count + 1); + } + + return ( +
+

+ {messages.count} {count} +

+ +
+ ); +} diff --git a/packages/example-next-13-advanced/src/components/client/01-MessagesAsPropsCounter/Counter.tsx b/packages/example-next-13-advanced/src/components/client/01-MessagesAsPropsCounter/Counter.tsx new file mode 100644 index 000000000..d23128f42 --- /dev/null +++ b/packages/example-next-13-advanced/src/components/client/01-MessagesAsPropsCounter/Counter.tsx @@ -0,0 +1,15 @@ +import {useTranslations} from 'next-intl'; +import ClientCounter from './ClientCounter'; + +export default function Counter() { + const t = useTranslations('Counter'); + + return ( + + ); +} diff --git a/packages/example-next-13-advanced/src/components/client/01-MessagesAsPropsCounter/index.tsx b/packages/example-next-13-advanced/src/components/client/01-MessagesAsPropsCounter/index.tsx new file mode 100644 index 000000000..b0723d674 --- /dev/null +++ b/packages/example-next-13-advanced/src/components/client/01-MessagesAsPropsCounter/index.tsx @@ -0,0 +1 @@ +export {default} from './Counter'; diff --git a/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/ClientCounter.tsx b/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/ClientCounter.tsx new file mode 100644 index 000000000..8a434ce5d --- /dev/null +++ b/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/ClientCounter.tsx @@ -0,0 +1,22 @@ +'use client'; + +import {useTranslations} from 'next-intl'; +import {useState} from 'react'; + +export default function ClientCounter() { + const t = useTranslations('ClientCounter'); + const [count, setCount] = useState(0); + + function onIncrement() { + setCount(count + 1); + } + + return ( +
+

{t('count', {count})}

+ +
+ ); +} diff --git a/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx b/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx new file mode 100644 index 000000000..160030667 --- /dev/null +++ b/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx @@ -0,0 +1,15 @@ +import {useLocale} from 'next-intl'; +import {NextIntlClientProvider} from 'next-intl/client'; +import ClientCounter from './ClientCounter'; + +export default async function Counter() { + const locale = useLocale(); + const messages = (await import(`../../../../messages/${locale}.json`)) + .default; + + return ( + + + + ); +} diff --git a/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/index.tsx b/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/index.tsx new file mode 100644 index 000000000..b0723d674 --- /dev/null +++ b/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/index.tsx @@ -0,0 +1 @@ +export {default} from './Counter'; diff --git a/packages/example-next-13/README.md b/packages/example-next-13/README.md index f8de937db..f7ad22c31 100644 --- a/packages/example-next-13/README.md +++ b/packages/example-next-13/README.md @@ -1,3 +1,5 @@ # example-next-13 An example that showcases usage of `next-intl` in the `app` folder of Next.js 13. + +[Demo](https://csb-k2ien9-7ytkomg4x-amann.vercel.app/en) diff --git a/packages/example-next-13/package.json b/packages/example-next-13/package.json index 7817c0e17..f9eb939d7 100644 --- a/packages/example-next-13/package.json +++ b/packages/example-next-13/package.json @@ -13,7 +13,7 @@ "accept-language-parser": "1.5.0", "date-fns": "^2.16.1", "lodash": "^4.17.21", - "next-intl": "2.10.0-alpha.4", + "next-intl": "*", "next": "^13.0.5", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/next-intl/client.d.ts b/packages/next-intl/client.d.ts new file mode 100644 index 000000000..5d664cbda --- /dev/null +++ b/packages/next-intl/client.d.ts @@ -0,0 +1 @@ +export * from './dist/src/client'; diff --git a/packages/next-intl/client.js b/packages/next-intl/client.js new file mode 100644 index 000000000..5d664cbda --- /dev/null +++ b/packages/next-intl/client.js @@ -0,0 +1 @@ +export * from './dist/src/client'; diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 423ec41e1..9420ec1b8 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -27,13 +27,16 @@ "react-server": "./dist/src/react-server/index.js", "default": "./dist/index.js" }, - "./server": "./dist/src/server/index.js" + "./server": "./dist/src/server/index.js", + "./client": "./dist/src/client/index.js" }, "files": [ "dist", "src", "server.js", - "server.d.ts" + "server.d.ts", + "client.js", + "client.d.ts" ], "keywords": [ "react", diff --git a/packages/next-intl/src/NextIntlProvider.tsx b/packages/next-intl/src/client/NextIntlClientProvider.tsx similarity index 100% rename from packages/next-intl/src/NextIntlProvider.tsx rename to packages/next-intl/src/client/NextIntlClientProvider.tsx diff --git a/packages/next-intl/src/client/index.tsx b/packages/next-intl/src/client/index.tsx new file mode 100644 index 000000000..e5aba945a --- /dev/null +++ b/packages/next-intl/src/client/index.tsx @@ -0,0 +1 @@ +export {default as NextIntlClientProvider} from './NextIntlClientProvider'; diff --git a/packages/next-intl/src/index.tsx b/packages/next-intl/src/index.tsx index ba6d5dffd..0f0470288 100644 --- a/packages/next-intl/src/index.tsx +++ b/packages/next-intl/src/index.tsx @@ -1,2 +1 @@ -export {default as NextIntlProvider} from './NextIntlProvider'; export * from 'use-intl'; diff --git a/packages/next-intl/test/NextIntlProvider.test.tsx b/packages/next-intl/test/client/NextIntlClientProvider.test.tsx similarity index 73% rename from packages/next-intl/test/NextIntlProvider.test.tsx rename to packages/next-intl/test/client/NextIntlClientProvider.test.tsx index b79882c13..df301000c 100644 --- a/packages/next-intl/test/NextIntlProvider.test.tsx +++ b/packages/next-intl/test/client/NextIntlClientProvider.test.tsx @@ -1,6 +1,7 @@ import {render, screen} from '@testing-library/react'; import React from 'react'; -import {NextIntlProvider, useTranslations} from '../src'; +import {useTranslations} from '../../src'; +import {NextIntlClientProvider} from '../../src/client'; jest.mock('next/router', () => ({ useRouter: () => ({locale: 'en'}) @@ -13,9 +14,9 @@ it('can use messages from the provider', () => { } render( - + - + ); screen.getByText('Hello'); @@ -28,12 +29,12 @@ it('can override the locale from Next.js', () => { } render( - - + ); screen.getByText('29.000,50 €'); diff --git a/yarn.lock b/yarn.lock index 97cefc8d4..fcd536f12 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12232,6 +12232,14 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +use-intl@^2.9.1: + version "2.9.1" + resolved "https://registry.yarnpkg.com/use-intl/-/use-intl-2.9.1.tgz#af303d61bd6f855a1fa118c4d41c8092250c8930" + integrity sha512-eAveKBEbFjzzS4BWx8ET3/reyvCN/fBQbFgYYd51fnIb2SlmfDA1B6c9DZPthnyvjzZLfSAXShn0+dN4cQAeIg== + dependencies: + "@formatjs/ecma402-abstract" "^1.11.4" + intl-messageformat "^9.3.18" + use-sync-external-store@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" From 4e5c8770ce83313834e8bbe8cf4e3f2d759f07db Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 8 Dec 2022 17:43:29 +0100 Subject: [PATCH 026/312] Provide legacy export --- packages/next-intl/src/client/NextIntlClientProvider.tsx | 2 +- packages/next-intl/src/index.tsx | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/next-intl/src/client/NextIntlClientProvider.tsx b/packages/next-intl/src/client/NextIntlClientProvider.tsx index ed387d795..4f587d71d 100644 --- a/packages/next-intl/src/client/NextIntlClientProvider.tsx +++ b/packages/next-intl/src/client/NextIntlClientProvider.tsx @@ -27,7 +27,7 @@ export default function NextIntlProvider({locale, ...rest}: Props) { if (!locale) { throw new Error( process.env.NODE_ENV !== 'production' - ? "Couldn't determine locale. Please make sure you use internationalized routing or alternatively pass an explicit locale to `NextIntlProvider`." + ? "Couldn't determine locale. Please pass an explicit `locale` prop the provider, or if you're using the `pages` folder, use internationalized routing (https://nextjs.org/docs/advanced-features/i18n-routing)." : undefined ); } diff --git a/packages/next-intl/src/index.tsx b/packages/next-intl/src/index.tsx index 0f0470288..9488da536 100644 --- a/packages/next-intl/src/index.tsx +++ b/packages/next-intl/src/index.tsx @@ -1 +1,4 @@ export * from 'use-intl'; + +// Legacy export for compatibility +export {NextIntlClientProvider as NextIntlProvider} from './client'; From febfde917920b9cdb11e8a77bf4abc5ea9ec9a50 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 8 Dec 2022 18:00:48 +0100 Subject: [PATCH 027/312] Only provide minimum of messages --- .../client/02-MessagesOnClientCounter/Counter.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx b/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx index 160030667..327199849 100644 --- a/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx +++ b/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx @@ -1,3 +1,4 @@ +import pick from 'lodash/pick'; import {useLocale} from 'next-intl'; import {NextIntlClientProvider} from 'next-intl/client'; import ClientCounter from './ClientCounter'; @@ -8,7 +9,13 @@ export default async function Counter() { .default; return ( - + ); From a3c6eb377cd308a876159684d3cc77bd7bb6798f Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 8 Dec 2022 18:07:38 +0100 Subject: [PATCH 028/312] Fix TS --- packages/example-next-13-advanced/src/app/[locale]/page.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/example-next-13-advanced/src/app/[locale]/page.tsx b/packages/example-next-13-advanced/src/app/[locale]/page.tsx index 73584a632..41c598781 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/page.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/page.tsx @@ -14,6 +14,7 @@ export default function Index() { + {/* @ts-expect-error Server Component */} ); From 50b13f744a3448f4bbdee6eaa23f09ce27ca6f32 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 9 Dec 2022 00:07:52 +0100 Subject: [PATCH 029/312] Update docs --- packages/website/pages/docs/meta.json | 2 +- packages/website/pages/docs/next-13.mdx | 178 ------------------ .../pages/docs/next-13/client-components.mdx | 94 +++++++++ packages/website/pages/docs/next-13/index.mdx | 12 ++ packages/website/pages/docs/next-13/meta.json | 5 + .../pages/docs/next-13/server-components.mdx | 97 ++++++++++ 6 files changed, 209 insertions(+), 179 deletions(-) delete mode 100644 packages/website/pages/docs/next-13.mdx create mode 100644 packages/website/pages/docs/next-13/client-components.mdx create mode 100644 packages/website/pages/docs/next-13/index.mdx create mode 100644 packages/website/pages/docs/next-13/meta.json create mode 100644 packages/website/pages/docs/next-13/server-components.mdx diff --git a/packages/website/pages/docs/meta.json b/packages/website/pages/docs/meta.json index 98589147c..488f988a8 100644 --- a/packages/website/pages/docs/meta.json +++ b/packages/website/pages/docs/meta.json @@ -2,5 +2,5 @@ "getting-started": "Getting started", "usage": "Usage guide", "faq": "FAQ", - "next-13": "Next.js 13 (preview)" + "next-13": "Next.js 13" } \ No newline at end of file diff --git a/packages/website/pages/docs/next-13.mdx b/packages/website/pages/docs/next-13.mdx deleted file mode 100644 index eea726726..000000000 --- a/packages/website/pages/docs/next-13.mdx +++ /dev/null @@ -1,178 +0,0 @@ -import Callout from 'nextra-theme-docs/callout'; - -# Next.js 13 (preview) - -Next.js 13 introduces the `app` directory, which includes support for [React Server Components](https://beta.nextjs.org/docs/rendering/server-and-client-components). `next-intl` is adopting the new capabilities and is currently offering a preview to early adopters, who are already building apps with the `app` directory. - - - The `app` directory is currently in beta, patterns are still emerging and APIs - may change. Please **use this at your own risk**, knowing that you might have - to face a migration effort when the `app` directory becomes stable. - `next-intl` tries to stay up to date with the latest developments on the - Next.js side, but during this period there can be unexpected issues. - - -**Current pre-release:** - -``` -npm install next-intl@2.10.0-alpha.5 -``` - -This pre-release was tested with `next@13.0.6`. - -## Getting started - -[Create a Next.js 13 app that uses the `app` directory](https://beta.nextjs.org/docs/installation) if you haven't done so already. The goal is to prefix all routes with the `locale`, so we can retrieve it as a [dynamic segment](https://beta.nextjs.org/docs/routing/defining-routes#dynamic-segments) and use it to configure `next-intl`. - -1. Create the following file structure: - -``` -├── messages (1) -│ ├── en.json -│ └── ... -├── app -│ ├── [locale] -│ │ ├── layout.tsx (2) -│ │ └── page.tsx (3) -│ └── ... -└── middleware.tsx (4) -``` - -2. Set up messages for a language, e.g. in `messages/en.json` (1): - -```json -{ - "Index": { - "title": "Hello world!" - } -} -``` - -3. Configure `NextIntlServerProvider` in `app/[locale]/layout.tsx` (2): - -```tsx -import {NextIntlServerProvider} from 'next-intl/server'; -import {notFound} from 'next/navigation'; - -export default async function LocaleLayout({children, params: {locale}}) { - let messages; - try { - messages = (await import(`../../messages/${locale}.json`)).default; - } catch (error) { - notFound(); - } - - return ( - - {children} - - ); -} -``` - -4. Use your messages in `app/[locale]/page.tsx` (3): - -```tsx -import {useTranslations} from 'next-intl'; - -export default function Index() { - const t = useTranslations('Index'); - return

{t('title')}

; -} -``` - -5. Create a [middleware](https://nextjs.org/docs/advanced-features/middleware) that handles redirects: - -```tsx -import {createIntlMiddleware} from 'next-intl/server'; - -// This middleware intercepts requests to `/` and will redirect -// to one of the configured locales instead (e.g. `/en`). A cookie -// is set in the background, so if the user switches to a new -// language, this language will take precedence from now on. -export default createIntlMiddleware({ - locales: ['en', 'de'], - defaultLocale: 'en' -}); -``` - -That's all you need to do to start using translations in Server Components! - -If you've encountered an issue, you can [explore the code for a working example](https://github.com/amannn/next-intl/tree/feat/next-13-rsc/packages/example-next-13) ([demo](https://csb-k2ien9-7ytkomg4x-amann.vercel.app/en)). - -## Using translations in Client Components - -If you need to use translations in Client Components, the best approach is to pass the generated labels as props. - -```tsx -// app/[locale]/page.tsx -import {useTranslations} from 'next-intl'; -import InteractiveClientComponent from './InteractiveClientComponent'; - -export default function Index() { - const t = useTranslations('Index'); - return ; -} -``` - -```tsx -// app/[locale]/InteractiveClientComponent.tsx -'use client'; - -import {useEffect} from 'react'; - -function InteractiveClientComponent({title}) { - useEffect(() => alert(title), []); - return

{title}

; -} -``` - -This way your messages never leave the server and the client only needs to load the code that is necessary for initializing your interactive components. - -If you absolutely need to use functionality from `next-intl` on the client side, you can wrap the respective components with `NextIntlClientProvider` ([example code](https://github.com/amannn/next-intl/blob/feat/next-13-rsc/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx)). Note however that this will increase your client bundle size. - -## Migrating from the `pages` folder - -If you have existing code from the `pages` folder that you want to migrate, you can use `NextIntlClientProvider` (instead of `NextIntlServerProvider`) in `app/[locale]/layout.tsx`: - -```tsx -import {NextIntlClientProvider} from 'next-intl/client'; -import {notFound} from 'next/navigation'; - -export default async function LocaleLayout({children, params: {locale}}) { - let messages; - try { - messages = (await import(`../../../messages/${locale}.json`)).default; - } catch (error) { - notFound(); - } - - return ( - - {children} - - ); -} -``` - -By doing this, the messages become available for all Client Components that are rendered in your app. Note that you have to make use of `'use client';` in all components that use features from `next-intl` if you use this approach. - -```tsx -// app/[locale]/page.tsx -'use client'; - -import {useTranslations} from 'next-intl'; - -export default function Index() { - const t = useTranslations('Index'); - return

{t('title')}

; -} -``` - -If you're transitioning your components to the `app` directory, you can use both providers to have messages available in Server as well as Client Components. - -Also note that [internationalized routing](https://nextjs.org/docs/advanced-features/i18n-routing) is no longer supported natively by Next.js, therefore you should use the middleware mentioned above. - -## Providing feedback - -If you have feedback about using `next-intl` in the `app` dir, I'd be happy to hear from you! Feel free to leave feedback in [the PR which implements](https://github.com/amannn/next-intl/pull/149) the new features. diff --git a/packages/website/pages/docs/next-13/client-components.mdx b/packages/website/pages/docs/next-13/client-components.mdx new file mode 100644 index 000000000..1c88ffc6e --- /dev/null +++ b/packages/website/pages/docs/next-13/client-components.mdx @@ -0,0 +1,94 @@ +import Callout from 'nextra-theme-docs/callout'; + +# Usage in Client Components + +`next-intl` is available in the `app` directory from version `2.10` onwards. + +## Getting started + +[Create a Next.js 13 app that uses the `app` directory](https://beta.nextjs.org/docs/installation) if you haven't done so already. The goal is to prefix all routes with the `locale`, so we can retrieve it as a [dynamic segment](https://beta.nextjs.org/docs/routing/defining-routes#dynamic-segments) and use it to configure `next-intl`. + +1. Create the following file structure: + +``` +├── messages (1) +│ ├── en.json +│ └── ... +├── app +│ ├── [locale] +│ │ ├── layout.tsx (2) +│ │ └── page.tsx (3) +│ └── ... +└── middleware.tsx (4) +``` + +2. Set up messages for a language, e.g. in `messages/en.json` (1): + +```json +{ + "Index": { + "title": "Hello world!" + } +} +``` + +3. Configure `NextIntlClientProvider` in `app/[locale]/layout.tsx` (2): + +```tsx +import {NextIntlClientProvider} from 'next-intl/client'; +import {notFound} from 'next/navigation'; + +export default async function LocaleLayout({children, params: {locale}}) { + let messages; + try { + messages = (await import(`../../messages/${locale}.json`)).default; + } catch (error) { + notFound(); + } + + return ( + + {children} + + ); +} +``` + +4. Turn your component in `app/[locale]/page.tsx` into a Client Component to be able to use translations (3): + +```tsx +'use client'; + +import {useTranslations} from 'next-intl'; + +export default function Index() { + const t = useTranslations('Index'); + return

{t('title')}

; +} +``` + +5. Create a [middleware](https://nextjs.org/docs/advanced-features/middleware) that handles redirects: + +```tsx +import {createIntlMiddleware} from 'next-intl/server'; + +// This middleware intercepts requests to `/` and will redirect +// to one of the configured locales instead (e.g. `/en`). A cookie +// is set in the background, so if the user switches to a new +// language, this language will take precedence from now on. +export default createIntlMiddleware({ + locales: ['en', 'de'], + defaultLocale: 'en' +}); +``` + +That's all you need to do to start using translations in the app directory! + +If you've encountered an issue, you can [explore the code for a working example](https://github.com/amannn/next-intl/tree/main/packages/example-next-13) ([demo](https://csb-k2ien9-7ytkomg4x-amann.vercel.app/en)). + + + Note that you have to make use of `'use client';` in all components that use + features from `next-intl` if you use this approach. Support for `next-intl` + APIs in Server Components is [available in a preview + version](/docs/next-13/server-components). + diff --git a/packages/website/pages/docs/next-13/index.mdx b/packages/website/pages/docs/next-13/index.mdx new file mode 100644 index 000000000..1b8d6120c --- /dev/null +++ b/packages/website/pages/docs/next-13/index.mdx @@ -0,0 +1,12 @@ +import Callout from 'nextra-theme-docs/callout'; + +# Next.js 13 + +With the introduction of the `app` directory, Next.js 13 provides a new level of flexibility for React apps. With this step, Next.js is removing their built-in [internationalized routing](https://nextjs.org/docs/advanced-features/i18n-routing), leaving the implementation of this up to the user. + +To fill in the gap, `next-intl` provides a drop-in replacement for the routing layer, handling the locale negotiation, redirects and cookies. + +There are currently two ways how you can set your app up with `next-intl` in the `app` directory: + +1. [Deferring the usage of `next-intl` to Client Components](/docs/next-13/client-components) (stable, recommended when you migrate) +2. [Using `next-intl` in Server Components](/docs/next-13/server-components) (preview) diff --git a/packages/website/pages/docs/next-13/meta.json b/packages/website/pages/docs/next-13/meta.json new file mode 100644 index 000000000..e51fa36d6 --- /dev/null +++ b/packages/website/pages/docs/next-13/meta.json @@ -0,0 +1,5 @@ +{ + "index": "Getting started", + "client-components": "Client Components", + "server-components": "Server Components (preview)" +} diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx new file mode 100644 index 000000000..9deab7df1 --- /dev/null +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -0,0 +1,97 @@ +import Callout from 'nextra-theme-docs/callout'; + +# Usage in Server Components (preview) + +Next.js 13 introduces support for [React Server Components](https://beta.nextjs.org/docs/rendering/server-and-client-components) in the `app` directory. `next-intl` is adopting the new capabilities and is currently offering a preview to early adopters, who are already building apps with the `app` directory. + + + The `app` directory is currently in beta, patterns are still emerging and APIs + may change. Please **use this at your own risk**, knowing that you might have + to face a migration effort when the `app` directory becomes stable. + `next-intl` tries to stay up to date with the latest developments on the + Next.js side, but during this period there can be unexpected issues. + + +## Current preview version + +``` +npm install next-intl@2.10.0-alpha.5 +``` + +This preview version was tested with `next@13.0.6`. + +## Getting started + +The setup is generally [the same as for Client Components](/docs/next-13/client-components), but you're able to make two adjustments now: + +1. Replace the usage of `NextIntlClientProvider` with `NextIntlServerProvider` in your layout: + +```tsx +// app/[locale]/layout.tsx +import {NextIntlServerProvider} from 'next-intl/server'; +import {notFound} from 'next/navigation'; + +export default async function LocaleLayout({children, params: {locale}}) { + let messages; + try { + messages = (await import(`../../../messages/${locale}.json`)).default; + } catch (error) { + notFound(); + } + + return ( + + {children} + + ); +} +``` + +2. Remove the `'use client';` directive from your page component: + +```tsx +// app/[locale]/page.tsx +import {useTranslations} from 'next-intl'; + +export default function Index() { + const t = useTranslations('Index'); + return

{t('title')}

; +} +``` + +If you're in a transitioning phase, either from the `pages` directory to the `app` directory, or from client-only components the the Server Components preview, you can apply both providers at the same time. + +## Switching to Client Components + +If you need to use translations in Client Components, the best approach is to pass the generated labels as props. + +```tsx +// app/[locale]/page.tsx +import {useTranslations} from 'next-intl'; +import InteractiveClientComponent from './InteractiveClientComponent'; + +export default function Index() { + const t = useTranslations('Index'); + return ; +} +``` + +```tsx +// app/[locale]/InteractiveClientComponent.tsx +'use client'; + +import {useEffect} from 'react'; + +function InteractiveClientComponent({title}) { + useEffect(() => alert(title), [title]); + return

{title}

; +} +``` + +This way your messages never leave the server and the client only needs to load the code that is necessary for initializing your interactive components. + +If you absolutely need to use functionality from `next-intl` on the client side, you can wrap the respective components with `NextIntlClientProvider` ([example code](https://github.com/amannn/next-intl/blob/feat/next-13-rsc/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx)). Note however that this will increase your client bundle size. + +## Providing feedback + +If you have feedback about using `next-intl` in the `app` directory, feel free to leave feedback in [the PR which implements the React Server Components support](https://github.com/amannn/next-intl/pull/149). From c946d97b628959f4b1462c38e209ad13a5be7b82 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 9 Dec 2022 00:17:08 +0100 Subject: [PATCH 030/312] Add client namespace --- packages/example-next-13/src/app/[locale]/layout.tsx | 6 +++--- packages/next-intl/client.d.ts | 1 + packages/next-intl/client.js | 1 + packages/next-intl/package.json | 7 +++++-- .../NextIntlClientProvider.tsx} | 2 +- packages/next-intl/src/client/index.tsx | 1 + packages/next-intl/src/index.tsx | 4 +++- .../NextIntlClientProvider.test.tsx} | 11 ++++++----- packages/next-intl/types/index.d.ts | 2 -- 9 files changed, 21 insertions(+), 14 deletions(-) create mode 100644 packages/next-intl/client.d.ts create mode 100644 packages/next-intl/client.js rename packages/next-intl/src/{NextIntlProvider.tsx => client/NextIntlClientProvider.tsx} (80%) create mode 100644 packages/next-intl/src/client/index.tsx rename packages/next-intl/test/{NextIntlProvider.test.tsx => client/NextIntlClientProvider.test.tsx} (73%) diff --git a/packages/example-next-13/src/app/[locale]/layout.tsx b/packages/example-next-13/src/app/[locale]/layout.tsx index c0139bb27..0ff934152 100644 --- a/packages/example-next-13/src/app/[locale]/layout.tsx +++ b/packages/example-next-13/src/app/[locale]/layout.tsx @@ -1,4 +1,4 @@ -import {NextIntlProvider} from 'next-intl'; +import {NextIntlClientProvider} from 'next-intl/client'; import {notFound} from 'next/navigation'; import {ReactNode} from 'react'; @@ -19,8 +19,8 @@ export default async function LocaleLayout({ } return ( - + {children} - +
); } diff --git a/packages/next-intl/client.d.ts b/packages/next-intl/client.d.ts new file mode 100644 index 000000000..5d664cbda --- /dev/null +++ b/packages/next-intl/client.d.ts @@ -0,0 +1 @@ +export * from './dist/src/client'; diff --git a/packages/next-intl/client.js b/packages/next-intl/client.js new file mode 100644 index 000000000..5d664cbda --- /dev/null +++ b/packages/next-intl/client.js @@ -0,0 +1 @@ +export * from './dist/src/client'; diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 3e6a5df02..ee606b47f 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -27,13 +27,16 @@ "react-server": "./dist/src/index.js", "default": "./dist/index.js" }, - "./server": "./dist/src/server/index.js" + "./server": "./dist/src/server/index.js", + "./client": "./dist/src/client/index.js" }, "files": [ "dist", "src", "server.js", - "server.d.ts" + "server.d.ts", + "client.js", + "client.d.ts" ], "keywords": [ "react", diff --git a/packages/next-intl/src/NextIntlProvider.tsx b/packages/next-intl/src/client/NextIntlClientProvider.tsx similarity index 80% rename from packages/next-intl/src/NextIntlProvider.tsx rename to packages/next-intl/src/client/NextIntlClientProvider.tsx index ed387d795..4f587d71d 100644 --- a/packages/next-intl/src/NextIntlProvider.tsx +++ b/packages/next-intl/src/client/NextIntlClientProvider.tsx @@ -27,7 +27,7 @@ export default function NextIntlProvider({locale, ...rest}: Props) { if (!locale) { throw new Error( process.env.NODE_ENV !== 'production' - ? "Couldn't determine locale. Please make sure you use internationalized routing or alternatively pass an explicit locale to `NextIntlProvider`." + ? "Couldn't determine locale. Please pass an explicit `locale` prop the provider, or if you're using the `pages` folder, use internationalized routing (https://nextjs.org/docs/advanced-features/i18n-routing)." : undefined ); } diff --git a/packages/next-intl/src/client/index.tsx b/packages/next-intl/src/client/index.tsx new file mode 100644 index 000000000..e5aba945a --- /dev/null +++ b/packages/next-intl/src/client/index.tsx @@ -0,0 +1 @@ +export {default as NextIntlClientProvider} from './NextIntlClientProvider'; diff --git a/packages/next-intl/src/index.tsx b/packages/next-intl/src/index.tsx index ba6d5dffd..9488da536 100644 --- a/packages/next-intl/src/index.tsx +++ b/packages/next-intl/src/index.tsx @@ -1,2 +1,4 @@ -export {default as NextIntlProvider} from './NextIntlProvider'; export * from 'use-intl'; + +// Legacy export for compatibility +export {NextIntlClientProvider as NextIntlProvider} from './client'; diff --git a/packages/next-intl/test/NextIntlProvider.test.tsx b/packages/next-intl/test/client/NextIntlClientProvider.test.tsx similarity index 73% rename from packages/next-intl/test/NextIntlProvider.test.tsx rename to packages/next-intl/test/client/NextIntlClientProvider.test.tsx index b79882c13..df301000c 100644 --- a/packages/next-intl/test/NextIntlProvider.test.tsx +++ b/packages/next-intl/test/client/NextIntlClientProvider.test.tsx @@ -1,6 +1,7 @@ import {render, screen} from '@testing-library/react'; import React from 'react'; -import {NextIntlProvider, useTranslations} from '../src'; +import {useTranslations} from '../../src'; +import {NextIntlClientProvider} from '../../src/client'; jest.mock('next/router', () => ({ useRouter: () => ({locale: 'en'}) @@ -13,9 +14,9 @@ it('can use messages from the provider', () => { } render( - + - + ); screen.getByText('Hello'); @@ -28,12 +29,12 @@ it('can override the locale from Next.js', () => { } render( - - + ); screen.getByText('29.000,50 €'); diff --git a/packages/next-intl/types/index.d.ts b/packages/next-intl/types/index.d.ts index e4dcb3ba3..81a4ebae8 100644 --- a/packages/next-intl/types/index.d.ts +++ b/packages/next-intl/types/index.d.ts @@ -1,5 +1,3 @@ -declare const __DEV__: boolean; - // Temporarly copied here until the "es2020.intl" lib is published. declare namespace Intl { From 8ae025028f76edc1c7c39740dc77db4a4feff708 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 9 Dec 2022 17:27:07 +0100 Subject: [PATCH 031/312] Add meta --- .../example-next-13-advanced/messages/de.json | 12 ++++++ .../example-next-13-advanced/messages/en.json | 4 ++ .../src/app/[locale]/Meta.tsx | 11 ++++++ .../src/app/[locale]/NextIntlProvider.tsx | 37 +++++++++++++++++++ .../src/app/[locale]/head.tsx | 17 +++++++++ .../src/app/[locale]/layout.tsx | 31 ++-------------- .../src/app/layout.tsx | 3 -- .../src/server/NextIntlServerProvider.tsx | 12 +++--- 8 files changed, 91 insertions(+), 36 deletions(-) create mode 100644 packages/example-next-13-advanced/src/app/[locale]/Meta.tsx create mode 100644 packages/example-next-13-advanced/src/app/[locale]/NextIntlProvider.tsx create mode 100644 packages/example-next-13-advanced/src/app/[locale]/head.tsx diff --git a/packages/example-next-13-advanced/messages/de.json b/packages/example-next-13-advanced/messages/de.json index 5a94eb059..5b116969e 100644 --- a/packages/example-next-13-advanced/messages/de.json +++ b/packages/example-next-13-advanced/messages/de.json @@ -1,9 +1,21 @@ { + "Meta": { + "title": "next-intl example", + "description": "Das ist ein Beispiel, wie next-intl im `app`-Verzeichnis verwendet werden kann." + }, "Index": { "title": "Start", "description": "Das ist die Startseite." }, "LocaleSwitcher": { "switchLocale": "Zu {locale, select, de {Deutsch} en {Englisch} other {Unbekannt}} wechseln" + }, + "Counter": { + "count": "Aktuell:", + "increment": "Erhöhen" + }, + "ClientCounter": { + "count": "Aktuell: {count}", + "increment": "Erhöhen" } } diff --git a/packages/example-next-13-advanced/messages/en.json b/packages/example-next-13-advanced/messages/en.json index 380a82d41..d8277d2b6 100644 --- a/packages/example-next-13-advanced/messages/en.json +++ b/packages/example-next-13-advanced/messages/en.json @@ -1,4 +1,8 @@ { + "Meta": { + "title": "next-intl example", + "description": "This is an example of using next-intl in the `app` directory." + }, "Index": { "title": "Home", "description": "This is the home page." diff --git a/packages/example-next-13-advanced/src/app/[locale]/Meta.tsx b/packages/example-next-13-advanced/src/app/[locale]/Meta.tsx new file mode 100644 index 000000000..13e6ab2a1 --- /dev/null +++ b/packages/example-next-13-advanced/src/app/[locale]/Meta.tsx @@ -0,0 +1,11 @@ +import {useTranslations} from 'next-intl'; + +export default function Meta() { + const t = useTranslations('Meta'); + return ( + <> + {t('title')} + + + ); +} diff --git a/packages/example-next-13-advanced/src/app/[locale]/NextIntlProvider.tsx b/packages/example-next-13-advanced/src/app/[locale]/NextIntlProvider.tsx new file mode 100644 index 000000000..81bcb89c8 --- /dev/null +++ b/packages/example-next-13-advanced/src/app/[locale]/NextIntlProvider.tsx @@ -0,0 +1,37 @@ +import {NextIntlServerProvider} from 'next-intl/server'; +import {notFound} from 'next/navigation'; +import {ReactNode} from 'react'; + +type Props = { + children: ReactNode; + locale: string; +}; + +export default async function NextIntlProvider({children, locale}: Props) { + let messages; + try { + messages = (await import(`../../../messages/${locale}.json`)).default; + } catch (error) { + notFound(); + } + + return ( + + {children} + + ); +} diff --git a/packages/example-next-13-advanced/src/app/[locale]/head.tsx b/packages/example-next-13-advanced/src/app/[locale]/head.tsx new file mode 100644 index 000000000..2c09d8cd0 --- /dev/null +++ b/packages/example-next-13-advanced/src/app/[locale]/head.tsx @@ -0,0 +1,17 @@ +import Meta from './Meta'; +import NextIntlProvider from './NextIntlProvider'; + +type Props = { + params: { + locale: string; + }; +}; + +export default function Head({params: {locale}}: Props) { + return ( + // @ts-expect-error Waiting for TypeScript to support server components + + + + ); +} diff --git a/packages/example-next-13-advanced/src/app/[locale]/layout.tsx b/packages/example-next-13-advanced/src/app/[locale]/layout.tsx index e008f8804..0ec7259b4 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/layout.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/layout.tsx @@ -1,6 +1,5 @@ -import {NextIntlServerProvider} from 'next-intl/server'; -import {notFound} from 'next/navigation'; import {ReactNode} from 'react'; +import NextIntlProvider from './NextIntlProvider'; type Props = { children: ReactNode; @@ -11,30 +10,6 @@ export default async function LocaleLayout({ children, params: {locale} }: Props) { - let messages; - try { - messages = (await import(`../../../messages/${locale}.json`)).default; - } catch (error) { - notFound(); - } - - return ( - - {children} - - ); + // @ts-expect-error Waiting for TypeScript to support Server Components + return {children}; } diff --git a/packages/example-next-13-advanced/src/app/layout.tsx b/packages/example-next-13-advanced/src/app/layout.tsx index 3eba3456e..2fd952d97 100644 --- a/packages/example-next-13-advanced/src/app/layout.tsx +++ b/packages/example-next-13-advanced/src/app/layout.tsx @@ -14,9 +14,6 @@ export default function RootLayout({children}: Props) { return ( - - next-intl example - {children} ); diff --git a/packages/next-intl/src/server/NextIntlServerProvider.tsx b/packages/next-intl/src/server/NextIntlServerProvider.tsx index 67a8c4575..6df5261d8 100644 --- a/packages/next-intl/src/server/NextIntlServerProvider.tsx +++ b/packages/next-intl/src/server/NextIntlServerProvider.tsx @@ -6,11 +6,13 @@ import getIntlContextValue from 'use-intl/dist/src/react/getIntlContextValue'; import NextIntlRequestStorage from './NextIntlRequestStorage'; export default function NextIntlServerProvider(props: IntlProviderProps) { - // This provider must only be rendered a single time per request. - if (NextIntlRequestStorage.isInitialized()) { - console.error(`\`NextIntlServerProvider\` was already initialized.`); - } - + // Typically this component renders only once in `layout`. It can however be + // the case that when next-intl features are necessary in the ``, this + // provider will be used twice. + // + // Maybe we're doing us a disfavour by using an API that looks like it's + // scoped to a part of the tree. The big advantage is that the API is the + // same for both server and client. NextIntlRequestStorage.initRequest(getIntlContextValue(props)); return <>{props.children}; From 2b8346f0bd153dd563ae6947ced12aa96721db4d Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 9 Dec 2022 17:55:25 +0100 Subject: [PATCH 032/312] Allow non-React APIs in RSC --- packages/example-next-13/messages/de.json | 3 ++ packages/example-next-13/messages/en.json | 3 ++ .../example-next-13/src/app/[locale]/head.tsx | 29 +++++++++++++++++++ packages/example-next-13/src/app/layout.tsx | 3 -- packages/next-intl/package.json | 2 +- packages/next-intl/src/react-server/index.tsx | 15 ++++++++++ 6 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 packages/example-next-13/src/app/[locale]/head.tsx create mode 100644 packages/next-intl/src/react-server/index.tsx diff --git a/packages/example-next-13/messages/de.json b/packages/example-next-13/messages/de.json index 5a94eb059..0843a4c3a 100644 --- a/packages/example-next-13/messages/de.json +++ b/packages/example-next-13/messages/de.json @@ -1,4 +1,7 @@ { + "Head": { + "title": "next-intl Beispiel" + }, "Index": { "title": "Start", "description": "Das ist die Startseite." diff --git a/packages/example-next-13/messages/en.json b/packages/example-next-13/messages/en.json index f712b9bdb..f148045ae 100644 --- a/packages/example-next-13/messages/en.json +++ b/packages/example-next-13/messages/en.json @@ -1,4 +1,7 @@ { + "Head": { + "title": "next-intl example" + }, "Index": { "title": "Home", "description": "This is the home page." diff --git a/packages/example-next-13/src/app/[locale]/head.tsx b/packages/example-next-13/src/app/[locale]/head.tsx new file mode 100644 index 000000000..2420d8d63 --- /dev/null +++ b/packages/example-next-13/src/app/[locale]/head.tsx @@ -0,0 +1,29 @@ +import {createTranslator} from 'next-intl'; +import {notFound} from 'next/navigation'; + +type Props = { + params: { + locale: string; + }; +}; + +export default async function Head({params: {locale}}: Props) { + let messages; + try { + messages = (await import(`../../../messages/${locale}.json`)).default; + } catch (error) { + notFound(); + } + + // Currently you can use the core (non-React) APIs when you + // have to use next-intl in a Server Component like `Head`. + // In the future you'll be able to use the React APIs here as + // well (see https://next-intl-docs.vercel.app/docs/next-13). + const t = createTranslator({locale, messages}); + + return ( + <> + {t('Head.title')} + + ); +} diff --git a/packages/example-next-13/src/app/layout.tsx b/packages/example-next-13/src/app/layout.tsx index 3eba3456e..2fd952d97 100644 --- a/packages/example-next-13/src/app/layout.tsx +++ b/packages/example-next-13/src/app/layout.tsx @@ -14,9 +14,6 @@ export default function RootLayout({children}: Props) { return ( - - next-intl example - {children} ); diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index ee606b47f..858a8325d 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -24,7 +24,7 @@ "typings": "dist/src/index.d.ts", "exports": { ".": { - "react-server": "./dist/src/index.js", + "react-server": "./dist/src/react-server/index.js", "default": "./dist/index.js" }, "./server": "./dist/src/server/index.js", diff --git a/packages/next-intl/src/react-server/index.tsx b/packages/next-intl/src/react-server/index.tsx new file mode 100644 index 000000000..4d52978a3 --- /dev/null +++ b/packages/next-intl/src/react-server/index.tsx @@ -0,0 +1,15 @@ +// Everything from core, React APIs stubbed-out for now (since they don't work without context) +export * from 'use-intl/dist/src/core'; + +function notSupported() { + throw new Error( + 'The React APIs of next-intl are currently not available in Server Components (see https://next-intl-docs.vercel.app/docs/next-13). As a stopgap solution, you can use the core library for these use cases (see https://next-intl-docs.vercel.app/docs/usage/core-library).' + ); +} + +export const IntlProvider = notSupported; +export const useTranslations = notSupported; +export const useIntl = notSupported; +export const useLocale = notSupported; +export const useNow = notSupported; +export const useTimeZone = notSupported; From 1c0f068381e8d6cda0619c9dbcd8deb003975cd9 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 9 Dec 2022 18:08:33 +0100 Subject: [PATCH 033/312] Build use-intl with tsc --- packages/use-intl/package.json | 8 +++++--- packages/use-intl/tsconfig.json | 6 ++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/use-intl/package.json b/packages/use-intl/package.json index 506a0787a..6c952051d 100644 --- a/packages/use-intl/package.json +++ b/packages/use-intl/package.json @@ -12,9 +12,11 @@ }, "scripts": { "start": "dts watch", - "build": "dts build", - "test": "TZ=Europe/Berlin dts test", - "lint": "eslint src test && tsc", + "build": "yarn build:default && yarn build:rsc", + "build:default": "rm -rf dist && dts build", + "build:rsc": "tsc && rm -rf dist/test", + "test": "TZ=Europe/Berlin dts test --testPathIgnorePatterns=dist", + "lint": "eslint src test && tsc --noEmit", "prepublishOnly": "yarn test && yarn lint && yarn build" }, "main": "dist/index.js", diff --git a/packages/use-intl/tsconfig.json b/packages/use-intl/tsconfig.json index cb91f60a7..f7c10f42e 100644 --- a/packages/use-intl/tsconfig.json +++ b/packages/use-intl/tsconfig.json @@ -3,7 +3,8 @@ "compilerOptions": { "module": "esnext", "lib": ["dom", "esnext"], - "importHelpers": true, + "target": "ES2020", + "importHelpers": false, "declaration": true, "sourceMap": true, "rootDir": ".", @@ -17,6 +18,7 @@ "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - "noEmit": true + "noEmit": false, + "outDir": "dist" } } From 17c952df15c8a46165b80c10f76731b38f298520 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 9 Dec 2022 18:29:32 +0100 Subject: [PATCH 034/312] Add e2e test --- .github/workflows/main.yml | 12 ++++++++ packages/example-next-13/.gitignore | 3 ++ packages/example-next-13/package.json | 5 ++-- packages/example-next-13/playwright.config.ts | 19 ++++++++++++ packages/example-next-13/tests/main.spec.ts | 29 +++++++++++++++++++ yarn.lock | 13 +++++++++ 6 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 packages/example-next-13/playwright.config.ts create mode 100644 packages/example-next-13/tests/main.spec.ts diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8e1bf6824..4e5233e24 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,10 +13,22 @@ jobs: node-version: 16.x # The Remix example unfortunately doesn't seem to support yarn workspaces - uses: bahmutov/npm-install@v1 + - run: yarn workspace use-intl run build - run: yarn workspace next-intl run build + - run: yarn workspaces run lint - run: yarn workspaces run test --ci --maxWorkers=2 + - run: yarn workspace example run build - run: yarn workspace example-advanced run build - run: yarn workspace example-next-13 run build + + - run: yarn playwright install --with-deps + - run: yarn workspace example-next-13 run test + - uses: actions/upload-artifact@v3 + if: failure() + with: + name: example-next-13-playwright-report + path: packages/example-next-13/playwright-report + retention-days: 7 diff --git a/packages/example-next-13/.gitignore b/packages/example-next-13/.gitignore index 04239e7d0..ee91e9ab6 100644 --- a/packages/example-next-13/.gitignore +++ b/packages/example-next-13/.gitignore @@ -2,3 +2,6 @@ /.next/ .DS_Store tsconfig.tsbuildinfo +/test-results/ +/playwright-report/ +/playwright/.cache/ diff --git a/packages/example-next-13/package.json b/packages/example-next-13/package.json index a67e00590..f24670492 100644 --- a/packages/example-next-13/package.json +++ b/packages/example-next-13/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "next dev", "lint": "eslint src && tsc", - "test": "echo 'No tests yet'", + "test": "playwright test", "build": "next build", "start": "next start" }, @@ -13,13 +13,14 @@ "accept-language-parser": "1.5.0", "date-fns": "^2.16.1", "lodash": "^4.17.21", - "next-intl": "^2.9.1", "next": "^13.0.5", + "next-intl": "^2.9.1", "react": "^18.2.0", "react-dom": "^18.2.0", "typescript": "^4.6.3" }, "devDependencies": { + "@playwright/test": "1.28.1", "@types/lodash": "^4.14.176", "@types/node": "^17.0.23", "@types/react": "^18.0.23", diff --git a/packages/example-next-13/playwright.config.ts b/packages/example-next-13/playwright.config.ts new file mode 100644 index 000000000..9c763895a --- /dev/null +++ b/packages/example-next-13/playwright.config.ts @@ -0,0 +1,19 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import type {PlaywrightTestConfig} from '@playwright/test'; +import {devices} from '@playwright/test'; + +const config: PlaywrightTestConfig = { + testDir: './tests', + projects: [ + { + name: 'chromium', + use: devices['Desktop Chrome'] + } + ], + webServer: { + command: 'yarn start', + port: 3000 + } +}; + +export default config; diff --git a/packages/example-next-13/tests/main.spec.ts b/packages/example-next-13/tests/main.spec.ts new file mode 100644 index 000000000..eff1d474d --- /dev/null +++ b/packages/example-next-13/tests/main.spec.ts @@ -0,0 +1,29 @@ +import {test as it, expect} from '@playwright/test'; + +it('handles i18n routing', async ({page}) => { + await page.goto('/'); + await expect(page).toHaveURL(/\/en/); + + // A cookie remembers the last locale + await page.goto('/de'); + await page.goto('/'); + await expect(page).toHaveURL(/\/de/); + + await page.goto('/unknown'); +}); + +it('can be used in the head', async ({page}) => { + await page.goto('/en'); + await expect(page).toHaveTitle('next-intl example'); + + await page.goto('/de'); + await expect(page).toHaveTitle('next-intl Beispiel'); +}); + +it('can be used to localize the page', async ({page}) => { + await page.goto('/en'); + page.locator('text=This is the home page.'); + + await page.goto('/de'); + page.locator('text=Das ist die Startseite.'); +}); diff --git a/yarn.lock b/yarn.lock index cfb1dba7f..5aa577592 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2708,6 +2708,14 @@ dependencies: "@octokit/openapi-types" "^7.3.3" +"@playwright/test@1.28.1": + version "1.28.1" + resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.28.1.tgz#e5be297e024a3256610cac2baaa9347fd57c7860" + integrity sha512-xN6spdqrNlwSn9KabIhqfZR7IWjPpFK1835tFNgjrlysaSezuX8PYUwaz38V/yI8TJLG9PkAMEXoHRXYXlpTPQ== + dependencies: + "@types/node" "*" + playwright-core "1.28.1" + "@reach/skip-nav@^0.16.0": version "0.16.0" resolved "https://registry.yarnpkg.com/@reach/skip-nav/-/skip-nav-0.16.0.tgz#dec34f3a40a1e804e05647646aacab0ffd73b24d" @@ -10137,6 +10145,11 @@ pkg-up@^2.0.0: dependencies: find-up "^2.1.0" +playwright-core@1.28.1: + version "1.28.1" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.28.1.tgz#8400be9f4a8d1c0489abdb9e75a4cc0ffc3c00cb" + integrity sha512-3PixLnGPno0E8rSBJjtwqTwJe3Yw72QwBBBxNoukIj3lEeBNXwbNiKrNuB1oyQgTBw5QHUhNO3SteEtHaMK6ag== + pluralize@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" From 3bb906c41e89f4092e4bfd64ba9c636a40aa761e Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 9 Dec 2022 18:44:19 +0100 Subject: [PATCH 035/312] Another try --- .github/workflows/main.yml | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4e5233e24..11a7dc6a5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,22 +13,14 @@ jobs: node-version: 16.x # The Remix example unfortunately doesn't seem to support yarn workspaces - uses: bahmutov/npm-install@v1 + - run: yarn playwright install --with-deps + # The order matters here - run: yarn workspace use-intl run build - run: yarn workspace next-intl run build - - - run: yarn workspaces run lint - - run: yarn workspaces run test --ci --maxWorkers=2 - - run: yarn workspace example run build - run: yarn workspace example-advanced run build - run: yarn workspace example-next-13 run build - - run: yarn playwright install --with-deps - - run: yarn workspace example-next-13 run test - - uses: actions/upload-artifact@v3 - if: failure() - with: - name: example-next-13-playwright-report - path: packages/example-next-13/playwright-report - retention-days: 7 + - run: yarn workspaces run lint + - run: yarn workspaces run test From 91858500e1f1ca2441893fdb16d1ecd3a3139794 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 9 Dec 2022 19:46:09 +0100 Subject: [PATCH 036/312] Docs wording --- .../pages/docs/next-13/client-components.mdx | 40 +++++++++++++++++++ packages/website/pages/docs/next-13/index.mdx | 6 ++- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/packages/website/pages/docs/next-13/client-components.mdx b/packages/website/pages/docs/next-13/client-components.mdx index 1c88ffc6e..cf97f4ca2 100644 --- a/packages/website/pages/docs/next-13/client-components.mdx +++ b/packages/website/pages/docs/next-13/client-components.mdx @@ -92,3 +92,43 @@ If you've encountered an issue, you can [explore the code for a working example] APIs in Server Components is [available in a preview version](/docs/next-13/server-components). + +## Usage in `head.js` + +This is the one component that Next.js doesn't allow to be marked with `'use client;'`. + +[Support for Server Components in `next-intl`](/docs/next-13/server-components) will allow you to use the same APIs as in other components. For the meantime, as a stopgap solution, you can use the [core library](/docs/usage/core-library) from `next-intl`. + +```tsx +// app/[locale]/head.tsx + +import {createTranslator} from 'next-intl'; +import {notFound} from 'next/navigation'; + +type Props = { + params: { + locale: string; + }; +}; + +export default async function Head({params: {locale}}: Props) { + let messages; + try { + messages = (await import(`../../messages/${locale}.json`)).default; + } catch (error) { + notFound(); + } + + // Currently you can use the core (non-React) APIs when you + // have to use next-intl in a Server Component like `Head`. + // In the future you'll be able to use the React APIs here as + // well (see https://next-intl-docs.vercel.app/docs/next-13). + const t = createTranslator({locale, messages}); + + return ( + <> + {t('Head.title')} + + ); +} +``` diff --git a/packages/website/pages/docs/next-13/index.mdx b/packages/website/pages/docs/next-13/index.mdx index 1b8d6120c..eab7e7455 100644 --- a/packages/website/pages/docs/next-13/index.mdx +++ b/packages/website/pages/docs/next-13/index.mdx @@ -2,9 +2,11 @@ import Callout from 'nextra-theme-docs/callout'; # Next.js 13 -With the introduction of the `app` directory, Next.js 13 provides a new level of flexibility for React apps. With this step, Next.js is removing their built-in [internationalized routing](https://nextjs.org/docs/advanced-features/i18n-routing), leaving the implementation of this up to the user. +With the introduction of the `app` directory, Next.js 13 provides a new level of flexibility for React apps. -To fill in the gap, `next-intl` provides a drop-in replacement for the routing layer, handling the locale negotiation, redirects and cookies. +Next.js is removing their built-in [internationalized routing](https://nextjs.org/docs/advanced-features/i18n-routing), leaving the implementation of this up to the user. To fill in the gap, `next-intl` provides a **drop-in replacement for the i18n routing**, handling the locale negotiation, redirects and cookies. + +The other major change for `next-intl` is the support for **React Server Components**. There are currently two ways how you can set your app up with `next-intl` in the `app` directory: From f158146a51c6e424da93da949cd4f957de054467 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 9 Dec 2022 20:00:20 +0100 Subject: [PATCH 037/312] Cleanup --- .gitignore | 1 + lerna.json | 1 + packages/example-advanced/.eslintrc.js | 4 +--- packages/example-next-13/.eslintrc.js | 12 +++++++----- packages/example/.eslintrc.js | 12 +++++++----- packages/next-intl/package.json | 4 ++-- packages/next-intl/src/server/resolveLocale.tsx | 2 +- 7 files changed, 20 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 4c9d7c35a..816279957 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ .DS_Store node_modules dist +.vscode diff --git a/lerna.json b/lerna.json index 3bdb3a000..36101b03a 100644 --- a/lerna.json +++ b/lerna.json @@ -5,6 +5,7 @@ "packages/next-intl", "packages/example", "packages/example-advanced", + "packages/example-next-13", "packages/website" ], "useWorkspaces": true, diff --git a/packages/example-advanced/.eslintrc.js b/packages/example-advanced/.eslintrc.js index b783dbc4a..5916d74c9 100644 --- a/packages/example-advanced/.eslintrc.js +++ b/packages/example-advanced/.eslintrc.js @@ -10,8 +10,6 @@ module.exports = { node: true }, rules: { - 'react/react-in-jsx-scope': 'off', - 'jsx-a11y/anchor-is-valid': 'off', - 'react/display-name': 'off' + 'react/react-in-jsx-scope': 'off' } }; diff --git a/packages/example-next-13/.eslintrc.js b/packages/example-next-13/.eslintrc.js index f113ec889..b5d86dcc2 100644 --- a/packages/example-next-13/.eslintrc.js +++ b/packages/example-next-13/.eslintrc.js @@ -1,10 +1,12 @@ require('eslint-config-molindo/setupPlugins'); module.exports = { - extends: ['molindo/typescript', 'molindo/react', 'plugin:@next/next/recommended'], + extends: [ + 'molindo/typescript', + 'molindo/react', + 'plugin:@next/next/recommended' + ], rules: { - 'react/react-in-jsx-scope': 'off', - 'jsx-a11y/anchor-is-valid': 'off', - 'react/display-name': 'off' + 'react/react-in-jsx-scope': 'off' } -} +}; diff --git a/packages/example/.eslintrc.js b/packages/example/.eslintrc.js index f113ec889..b5d86dcc2 100644 --- a/packages/example/.eslintrc.js +++ b/packages/example/.eslintrc.js @@ -1,10 +1,12 @@ require('eslint-config-molindo/setupPlugins'); module.exports = { - extends: ['molindo/typescript', 'molindo/react', 'plugin:@next/next/recommended'], + extends: [ + 'molindo/typescript', + 'molindo/react', + 'plugin:@next/next/recommended' + ], rules: { - 'react/react-in-jsx-scope': 'off', - 'jsx-a11y/anchor-is-valid': 'off', - 'react/display-name': 'off' + 'react/react-in-jsx-scope': 'off' } -} +}; diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 858a8325d..993fc7a80 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -20,8 +20,8 @@ "postpublish": "git checkout . && rm ./README.md" }, "main": "dist/index.js", - "module": "dist/src/index.esm.js", - "typings": "dist/src/index.d.ts", + "module": "dist/next-intl.esm.js", + "typings": "dist/index.d.ts", "exports": { ".": { "react-server": "./dist/src/react-server/index.js", diff --git a/packages/next-intl/src/server/resolveLocale.tsx b/packages/next-intl/src/server/resolveLocale.tsx index df81fe01d..fe9748458 100644 --- a/packages/next-intl/src/server/resolveLocale.tsx +++ b/packages/next-intl/src/server/resolveLocale.tsx @@ -47,7 +47,7 @@ export default function resolveLocale( ) || i18n.defaultLocale; } - // Prio 5: Use default locale + // Prio 4: Use default locale if (!locale) { locale = i18n.defaultLocale; } From 4c7e75b6c662ed06350112548daa6f89426bb106 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 9 Dec 2022 20:03:19 +0100 Subject: [PATCH 038/312] v2.10.0-alpha.4 --- packages/use-intl/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/use-intl/package.json b/packages/use-intl/package.json index 6c952051d..ea2118ccf 100644 --- a/packages/use-intl/package.json +++ b/packages/use-intl/package.json @@ -1,6 +1,6 @@ { "name": "use-intl", - "version": "2.9.2", + "version": "2.10.0-alpha.4", "sideEffects": false, "author": "Jan Amann ", "description": "Minimal, but complete solution for managing internationalization in React apps.", From fb1c80d01d2e7ac66bfc833d65bffe61ac134d79 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 9 Dec 2022 20:30:15 +0100 Subject: [PATCH 039/312] Wording --- .../website/pages/docs/next-13/client-components.mdx | 10 +++++----- packages/website/pages/docs/next-13/index.mdx | 5 +++-- .../website/pages/docs/next-13/server-components.mdx | 8 +++++--- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/website/pages/docs/next-13/client-components.mdx b/packages/website/pages/docs/next-13/client-components.mdx index cf97f4ca2..96efa1b9d 100644 --- a/packages/website/pages/docs/next-13/client-components.mdx +++ b/packages/website/pages/docs/next-13/client-components.mdx @@ -2,11 +2,11 @@ import Callout from 'nextra-theme-docs/callout'; # Usage in Client Components -`next-intl` is available in the `app` directory from version `2.10` onwards. +`next-intl` is available in the `app` directory from version `2.10.0` onwards. ## Getting started -[Create a Next.js 13 app that uses the `app` directory](https://beta.nextjs.org/docs/installation) if you haven't done so already. The goal is to prefix all routes with the `locale`, so we can retrieve it as a [dynamic segment](https://beta.nextjs.org/docs/routing/defining-routes#dynamic-segments) and use it to configure `next-intl`. +If you haven't done so already, [create a Next.js 13 app that uses the `app` directory](https://beta.nextjs.org/docs/installation). The goal is to prefix all routes with the `locale`, so we can retrieve it as a [dynamic segment](https://beta.nextjs.org/docs/routing/defining-routes#dynamic-segments) and use it to configure `next-intl`. 1. Create the following file structure: @@ -38,7 +38,7 @@ import Callout from 'nextra-theme-docs/callout'; import {NextIntlClientProvider} from 'next-intl/client'; import {notFound} from 'next/navigation'; -export default async function LocaleLayout({children, params: {locale}}) { +export default async function Layout({children, params: {locale}}) { let messages; try { messages = (await import(`../../messages/${locale}.json`)).default; @@ -82,7 +82,7 @@ export default createIntlMiddleware({ }); ``` -That's all you need to do to start using translations in the app directory! +That's all you need to do to start using translations in the `app` directory! If you've encountered an issue, you can [explore the code for a working example](https://github.com/amannn/next-intl/tree/main/packages/example-next-13) ([demo](https://csb-k2ien9-7ytkomg4x-amann.vercel.app/en)). @@ -97,7 +97,7 @@ If you've encountered an issue, you can [explore the code for a working example] This is the one component that Next.js doesn't allow to be marked with `'use client;'`. -[Support for Server Components in `next-intl`](/docs/next-13/server-components) will allow you to use the same APIs as in other components. For the meantime, as a stopgap solution, you can use the [core library](/docs/usage/core-library) from `next-intl`. +[Support for Server Components in `next-intl`](/docs/next-13/server-components) will allow you to use the same APIs that you already use in other components to handle i18n in `head.js`. In the meantime, as a stopgap solution, you can use the [core library](/docs/usage/core-library) from `next-intl` for this use case. ```tsx // app/[locale]/head.tsx diff --git a/packages/website/pages/docs/next-13/index.mdx b/packages/website/pages/docs/next-13/index.mdx index eab7e7455..86614be29 100644 --- a/packages/website/pages/docs/next-13/index.mdx +++ b/packages/website/pages/docs/next-13/index.mdx @@ -4,9 +4,10 @@ import Callout from 'nextra-theme-docs/callout'; With the introduction of the `app` directory, Next.js 13 provides a new level of flexibility for React apps. -Next.js is removing their built-in [internationalized routing](https://nextjs.org/docs/advanced-features/i18n-routing), leaving the implementation of this up to the user. To fill in the gap, `next-intl` provides a **drop-in replacement for the i18n routing**, handling the locale negotiation, redirects and cookies. +There are two major changes that affect `next-intl`: -The other major change for `next-intl` is the support for **React Server Components**. +1. Next.js is removing their built-in [internationalized routing](https://nextjs.org/docs/advanced-features/i18n-routing), leaving the implementation of this up to the user. To fill in the gap, `next-intl` provides a **drop-in replacement for i18n routing**, handling the locale negotiation, redirects and cookies. +2. Next.js now supports **React Server Components**. There are currently two ways how you can set your app up with `next-intl` in the `app` directory: diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 9deab7df1..0bd17a83c 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -22,7 +22,7 @@ This preview version was tested with `next@13.0.6`. ## Getting started -The setup is generally [the same as for Client Components](/docs/next-13/client-components), but you're able to make two adjustments now: +The setup is [the same as for Client Components](/docs/next-13/client-components), but you're able to make two adjustments now: 1. Replace the usage of `NextIntlClientProvider` with `NextIntlServerProvider` in your layout: @@ -31,7 +31,7 @@ The setup is generally [the same as for Client Components](/docs/next-13/client- import {NextIntlServerProvider} from 'next-intl/server'; import {notFound} from 'next/navigation'; -export default async function LocaleLayout({children, params: {locale}}) { +export default async function Layout({children, params: {locale}}) { let messages; try { messages = (await import(`../../../messages/${locale}.json`)).default; @@ -59,7 +59,9 @@ export default function Index() { } ``` -If you're in a transitioning phase, either from the `pages` directory to the `app` directory, or from client-only components the the Server Components preview, you can apply both providers at the same time. +That's all it takes! Now you can internationalize your apps without adding i18n features to your client bundle. + +If you're in a transitioning phase, either from the `pages` directory to the `app` directory, or from Client Components the the Server Components preview, you can apply both providers at the same time. ## Switching to Client Components From 88e8faebb771e8015f6dd6ce321c0ffafa5c3779 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 9 Dec 2022 20:33:17 +0100 Subject: [PATCH 040/312] Wording again [skip ci] --- packages/website/pages/docs/next-13/client-components.mdx | 2 +- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/website/pages/docs/next-13/client-components.mdx b/packages/website/pages/docs/next-13/client-components.mdx index 96efa1b9d..8883fb135 100644 --- a/packages/website/pages/docs/next-13/client-components.mdx +++ b/packages/website/pages/docs/next-13/client-components.mdx @@ -38,7 +38,7 @@ If you haven't done so already, [create a Next.js 13 app that uses the `app` dir import {NextIntlClientProvider} from 'next-intl/client'; import {notFound} from 'next/navigation'; -export default async function Layout({children, params: {locale}}) { +export default async function LocaleLayout({children, params: {locale}}) { let messages; try { messages = (await import(`../../messages/${locale}.json`)).default; diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 0bd17a83c..54349bcd3 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -31,7 +31,7 @@ The setup is [the same as for Client Components](/docs/next-13/client-components import {NextIntlServerProvider} from 'next-intl/server'; import {notFound} from 'next/navigation'; -export default async function Layout({children, params: {locale}}) { +export default async function LocaleLayout({children, params: {locale}}) { let messages; try { messages = (await import(`../../../messages/${locale}.json`)).default; From adef5ce3561426ccc899cc971fab0a007953a689 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 9 Dec 2022 20:57:09 +0100 Subject: [PATCH 041/312] Fix test --- packages/example-next-13-advanced/messages/de.json | 2 +- .../src/app/[locale]/Meta.tsx | 11 ----------- .../src/app/[locale]/head.tsx | 12 +++++++++++- packages/example-next-13/messages/de.json | 3 --- packages/example-next-13/messages/en.json | 3 --- yarn.lock | 8 ++++---- 6 files changed, 16 insertions(+), 23 deletions(-) delete mode 100644 packages/example-next-13-advanced/src/app/[locale]/Meta.tsx diff --git a/packages/example-next-13-advanced/messages/de.json b/packages/example-next-13-advanced/messages/de.json index 5b116969e..a13b949a8 100644 --- a/packages/example-next-13-advanced/messages/de.json +++ b/packages/example-next-13-advanced/messages/de.json @@ -1,6 +1,6 @@ { "Meta": { - "title": "next-intl example", + "title": "next-intl Beispiel", "description": "Das ist ein Beispiel, wie next-intl im `app`-Verzeichnis verwendet werden kann." }, "Index": { diff --git a/packages/example-next-13-advanced/src/app/[locale]/Meta.tsx b/packages/example-next-13-advanced/src/app/[locale]/Meta.tsx deleted file mode 100644 index 13e6ab2a1..000000000 --- a/packages/example-next-13-advanced/src/app/[locale]/Meta.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import {useTranslations} from 'next-intl'; - -export default function Meta() { - const t = useTranslations('Meta'); - return ( - <> - {t('title')} - - - ); -} diff --git a/packages/example-next-13-advanced/src/app/[locale]/head.tsx b/packages/example-next-13-advanced/src/app/[locale]/head.tsx index 2c09d8cd0..3d424d0a1 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/head.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/head.tsx @@ -1,4 +1,4 @@ -import Meta from './Meta'; +import {useTranslations} from 'next-intl'; import NextIntlProvider from './NextIntlProvider'; type Props = { @@ -15,3 +15,13 @@ export default function Head({params: {locale}}: Props) {
); } + +function Meta() { + const t = useTranslations('Meta'); + return ( + <> + {t('title')} + + + ); +} diff --git a/packages/example-next-13/messages/de.json b/packages/example-next-13/messages/de.json index 0843a4c3a..5a94eb059 100644 --- a/packages/example-next-13/messages/de.json +++ b/packages/example-next-13/messages/de.json @@ -1,7 +1,4 @@ { - "Head": { - "title": "next-intl Beispiel" - }, "Index": { "title": "Start", "description": "Das ist die Startseite." diff --git a/packages/example-next-13/messages/en.json b/packages/example-next-13/messages/en.json index f148045ae..f712b9bdb 100644 --- a/packages/example-next-13/messages/en.json +++ b/packages/example-next-13/messages/en.json @@ -1,7 +1,4 @@ { - "Head": { - "title": "next-intl example" - }, "Index": { "title": "Home", "description": "This is the home page." diff --git a/yarn.lock b/yarn.lock index 350c9fd6d..5a709c421 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12245,10 +12245,10 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -use-intl@^2.9.1: - version "2.9.1" - resolved "https://registry.yarnpkg.com/use-intl/-/use-intl-2.9.1.tgz#af303d61bd6f855a1fa118c4d41c8092250c8930" - integrity sha512-eAveKBEbFjzzS4BWx8ET3/reyvCN/fBQbFgYYd51fnIb2SlmfDA1B6c9DZPthnyvjzZLfSAXShn0+dN4cQAeIg== +use-intl@^2.9.2: + version "2.10.0" + resolved "https://registry.yarnpkg.com/use-intl/-/use-intl-2.10.0.tgz#e27d7de1762afc91d302aa29e50e672823a1005f" + integrity sha512-zvpEuK7yPDTxXOFWrq7Ln1AWMY8yqqfD2POgMO+yBnXm6y1f/66Hfk/NB6ogUsgfKecBArLoZMdnUyquFWbW6Q== dependencies: "@formatjs/ecma402-abstract" "^1.11.4" intl-messageformat "^9.3.18" From 0bae67a91e0360ebdf043eb8c47da15a1242061c Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 9 Dec 2022 21:13:26 +0100 Subject: [PATCH 042/312] v2.11.0-alpha.1 --- packages/use-intl/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/use-intl/package.json b/packages/use-intl/package.json index b0e1c8e72..225572849 100644 --- a/packages/use-intl/package.json +++ b/packages/use-intl/package.json @@ -1,6 +1,6 @@ { "name": "use-intl", - "version": "2.10.1", + "version": "2.11.0-alpha.1", "sideEffects": false, "author": "Jan Amann ", "description": "Minimal, but complete solution for managing internationalization in React apps.", From 646ce5a253e1b1ce6b60ef142b459a6d2ad1a840 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 9 Dec 2022 21:35:19 +0100 Subject: [PATCH 043/312] Add interactivity tests --- .../playwright.config.ts | 1 + .../ClientCounter.tsx | 2 +- .../ClientCounter.tsx | 2 +- .../tests/main.spec.ts | 18 ++++++++++++++++++ 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/example-next-13-advanced/playwright.config.ts b/packages/example-next-13-advanced/playwright.config.ts index 9c763895a..88d081ee1 100644 --- a/packages/example-next-13-advanced/playwright.config.ts +++ b/packages/example-next-13-advanced/playwright.config.ts @@ -11,6 +11,7 @@ const config: PlaywrightTestConfig = { } ], webServer: { + reuseExistingServer: true, command: 'yarn start', port: 3000 } diff --git a/packages/example-next-13-advanced/src/components/client/01-MessagesAsPropsCounter/ClientCounter.tsx b/packages/example-next-13-advanced/src/components/client/01-MessagesAsPropsCounter/ClientCounter.tsx index cd6a6cf48..28c2a9bd5 100644 --- a/packages/example-next-13-advanced/src/components/client/01-MessagesAsPropsCounter/ClientCounter.tsx +++ b/packages/example-next-13-advanced/src/components/client/01-MessagesAsPropsCounter/ClientCounter.tsx @@ -17,7 +17,7 @@ export default function ClientCounter({messages}: Props) { } return ( -
+

{messages.count} {count}

diff --git a/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/ClientCounter.tsx b/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/ClientCounter.tsx index 8a434ce5d..e7a013de6 100644 --- a/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/ClientCounter.tsx +++ b/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/ClientCounter.tsx @@ -12,7 +12,7 @@ export default function ClientCounter() { } return ( -
+

{t('count', {count})}

+

+ ); } ``` diff --git a/packages/website/pages/index.mdx b/packages/website/pages/index.mdx index dbf9358ac..c68a835ee 100644 --- a/packages/website/pages/index.mdx +++ b/packages/website/pages/index.mdx @@ -27,9 +27,8 @@ import Callout from 'nextra-theme-docs/callout'; > ✨ New ✨: `next-intl` is adding support for - Next.js 13 and the [`app` directory](https://beta.nextjs.org/docs/routing/fundamentals). - A preview version with support for React Server Components is [now available](/docs/next-13) - for early adopters. + Next.js 13 and the `app` directory. A preview version with support for React + Server Components is [now available](/docs/next-13) for early adopters.
## Features diff --git a/packages/website/public/og-image.png b/packages/website/public/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..4c83678679a3ed0300b17cccedadd61612ef6444 GIT binary patch literal 34659 zcmeEug-!T9*EPd1GkdSK*Lvc<@8{Wss=k(eghPsR@7}#f@^Vt@_wJ!p+`EVBhJ^~e z)BbY%0q_gOSzT7*UfJOD4d4$c(>L;F%F6ecfY(^}P=YP*q5b{}@E`>q_wL=#Lb-Pz z_>J=Wy)4wfKSis^y8riURJY$>+_&%sp2hCTONnc|N7DEe#mlo5e(PZ-t*7u9c1?>MB5BfoZq>5F$p9UCMpl%LHq-%)1R3^t`VugH%=BQpnoZ#)RMXO${6L9@Cw33z&(jsQ)J%C_^|Swa3;6J7#XXc4XDFyx zRQ~t=etHW=L6t~#6GF)R_wi_0SPhu}d&*QCJiM9e6-%DKkNoQ#Vq(3*e@^!M)s%+6 z|8PFJN)`V9%m`It_kSnTo{x$a$g}ev8u`y$ejkp9=Y;!T(*xe(A)=zHw(J?T`Ez-| zD}VnOum71bUPaM8lx$_e3^VHgnGjmw-2MN)V1IvQbSx~}nFDUJ|CtaK)h~+wnK7CT zlbD#rXjH-U{~Z2%3IAutRR1pFe|F~IB}Dtz3jg+ve;xVXSolvo{WqPU{F_exPRsvh zBEz ziLi#Yb43naU5<Onfl6jTGMVTEn|T64%hj1I}XgNtz4WJ*wtlSd? z+!HkSSV|Wlnm!ddjg_lw7DK~sc>*~)J+d__5tfKnP(nE0?*T5y;I{Y{Ce z{QV{T{Z&yq-d$mDmltXqs@9ZMSV@ZKMWA3%P`!L9@v>u~C`!aKDuXeqp5a4ByE`iF z%fC_6DFGmZX!(uK$e?;8)NJ7}(>~TSe3PK1J-Tj#=NB0fvYz&2R1h&jKRzPdh2Qb( z2bCL!^gmL_#BUMBZt(}_Cx4|IJzdqBU#g!TVo)%YYktAW?il%uKObv+ncqW^Nlvdq z5u}PJ#QA3l#F8K2;RShMs{7cZ{jzK?$Bp;%%F4-N3dFcCY#%VdxbvC7S-t<

V*D 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[)bg;(92SZiZue7cqsm=%qT|Z;qs~>fWW1 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%0D&PinLv}$6Pwn%h2DqrBkF5 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 literal 0 HcmV?d00001 diff --git a/packages/website/theme.config.js b/packages/website/theme.config.js index 9d06ca07b..5bd3655e5 100644 --- a/packages/website/theme.config.js +++ b/packages/website/theme.config.js @@ -50,12 +50,12 @@ export default { Date: Mon, 19 Dec 2022 19:24:24 +0100 Subject: [PATCH 051/312] WIP --- packages/example-next-13/src/middleware.tsx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/example-next-13/src/middleware.tsx b/packages/example-next-13/src/middleware.tsx index 4237b5636..caf5bf70a 100644 --- a/packages/example-next-13/src/middleware.tsx +++ b/packages/example-next-13/src/middleware.tsx @@ -1,3 +1,11 @@ import {createIntlMiddleware} from 'next-intl/server'; export default createIntlMiddleware(); + +// TODO: As soon as Next.js allows to write cookies via +// `cookies().set(name, value)`, we can add this. +// https://beta.nextjs.org/docs/api-reference/cookies +// +// export const config = { +// matcher: '/' +// }; From f2c72c9c77f06c709b9de1ac208728098af9ffaa Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 22 Dec 2022 14:10:17 +0100 Subject: [PATCH 052/312] Fix typo --- packages/website/pages/docs/next-13/server-components.mdx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 14d1095e1..7314ee783 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -64,8 +64,7 @@ export default config; module.exports = { experimental: {appDir: true}, webpack(config) { - config.resolve.alias['next-intl/config'] = - require.resolve('./src/i18n.tsx'); + config.resolve.alias['next-intl/config'] = require.resolve('./i18n.tsx'); return config; } }; From d99c259f06a4e51467cdac9be48da7f9b6e16a2e Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 22 Dec 2022 20:04:41 +0100 Subject: [PATCH 053/312] Upgrade to Next.js 13.1 --- .../example-next-13-advanced/package.json | 2 +- packages/example-next-13/package.json | 2 +- packages/next-intl/package.json | 2 +- yarn.lock | 157 +++++++++--------- 4 files changed, 85 insertions(+), 78 deletions(-) diff --git a/packages/example-next-13-advanced/package.json b/packages/example-next-13-advanced/package.json index 84fc654fd..184765491 100644 --- a/packages/example-next-13-advanced/package.json +++ b/packages/example-next-13-advanced/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "lodash": "^4.17.21", - "next": "^13.0.5", + "next": "^13.1.0", "next-intl": "*", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/example-next-13/package.json b/packages/example-next-13/package.json index a532d6c59..e74a39b6d 100644 --- a/packages/example-next-13/package.json +++ b/packages/example-next-13/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "lodash": "^4.17.21", - "next": "^13.0.5", + "next": "^13.1.0", "next-intl": "^2.10.2", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index a46419fa3..99b7f3860 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -71,7 +71,7 @@ "dts-cli": "1.4.0", "eslint": "8.12.0", "eslint-config-molindo": "6.0.0", - "next": "^13.0.5", + "next": "^13.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", "typescript": "^4.4.4" diff --git a/yarn.lock b/yarn.lock index 59d89346a..64e8aa095 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2301,10 +2301,10 @@ resolved "https://registry.yarnpkg.com/@next/env/-/env-13.0.0.tgz#38527956680693c90b4522ab4ab9a2fbe3a17f67" integrity sha512-65v9BVuah2Mplohm4+efsKEnoEuhmlGm8B2w6vD1geeEP2wXtlSJCvR/cCRJ3fD8wzCQBV41VcMBQeYET6MRkg== -"@next/env@13.0.5": - version "13.0.5" - resolved "https://registry.yarnpkg.com/@next/env/-/env-13.0.5.tgz#f2fafaa42c6693260e00f443853b549509715ad1" - integrity sha512-F3KLtiDrUslAZhTYTh8Zk5ZaavbYwLUn3NYPBnOjAXU8hWm0QVGVzKIOuURQ098ofRU4e9oglf3Sj9pFx5nI5w== +"@next/env@13.1.0": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.0.tgz#fdb4d4711c6bd544dd80f0afd9846af2699b8c1c" + integrity sha512-6iNixFzCndH+Bl4FetQzOMjxCJqg8fs0LAlZviig1K6mIjOWH2m2oPcHcOg1Ta5VCe7Bx5KG1Hs+NrWDUkBt9A== "@next/eslint-plugin-next@12.0.1": version "12.0.1" @@ -2330,10 +2330,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.0.tgz#15cd89d19d3c00d123fdfe367bab38c362f6c515" integrity sha512-+DUQkYF93gxFjWY+CYWE1QDX6gTgnUiWf+W4UqZjM1Jcef8U97fS6xYh+i+8rH4MM0AXHm7OSakvfOMzmjU6VA== -"@next/swc-android-arm-eabi@13.0.5": - version "13.0.5" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.5.tgz#bb83f8a8bea5d3d813059a28624e9ff3c0c22bac" - integrity sha512-YO691dxHlviy6H0eghgwqn+5kU9J3iQnKERHTDSppqjjGDBl6ab4wz9XfI5AhljjkaTg3TknHoIEWFDoZ4Ve8g== +"@next/swc-android-arm-eabi@13.1.0": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.0.tgz#b754f03c1af5572e950993b00cbc189d063e7642" + integrity sha512-ANBZZRjZBV+Sii11ZVxbxSvfIi6dZwu4w+XnJBDmz+0/wtAigpjYWyMkuWZ/RCD7INdusOlU4EgJ99WzWGIDjA== "@next/swc-android-arm64@12.1.4": version "12.1.4" @@ -2345,10 +2345,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.0.0.tgz#9410365bb07097268d4773a46b02cfe6b3fe3ab7" integrity sha512-RW9Uy3bMSc0zVGCa11klFuwfP/jdcdkhdruqnrJ7v+7XHm6OFKkSRzX6ee7yGR1rdDZvTnP4GZSRSpzjLv/N0g== -"@next/swc-android-arm64@13.0.5": - version "13.0.5" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.0.5.tgz#6082f7e4a7b07c5e1a1284ef0cb3b741b49f03de" - integrity sha512-ugbwffkUmp8cd2afehDC8LtQeFUxElRUBBngfB5UYSWBx18HW4OgzkPFIY8jUBH16zifvGZWXbICXJWDHrOLtw== +"@next/swc-android-arm64@13.1.0": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.0.tgz#8794b4c1680ed8825b9a0e9ae5b3d14cd0ad9f07" + integrity sha512-nPwbkS3aZjCIe61wztgjXjIeylijOP8uGtDGjjJVUF3B/5GLVx3ngZu6tjPTMEgaLM0u//HuGK+aZolWUQWE4g== "@next/swc-darwin-arm64@12.1.4": version "12.1.4" @@ -2360,10 +2360,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.0.tgz#caf262fb5cb8bb335f6f344fd67a44dc8bf6a084" integrity sha512-APA26nps1j4qyhOIzkclW/OmgotVHj1jBxebSpMCPw2rXfiNvKNY9FA0TcuwPmUCNqaTnm703h6oW4dvp73A4Q== -"@next/swc-darwin-arm64@13.0.5": - version "13.0.5" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.5.tgz#764f85446590b8f2894c9aca0c96e039cd1ca5e0" - integrity sha512-mshlh8QOtOalfZbc17uNAftWgqHTKnrv6QUwBe+mpGz04eqsSUzVz1JGZEdIkmuDxOz00cK2NPoc+VHDXh99IQ== +"@next/swc-darwin-arm64@13.1.0": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.0.tgz#c7aeb19e53ee06f333b3af1a192a9a5b5b583755" + integrity sha512-0hUydiAW18jK2uGPnZRdnRQtdB/3ZoPo84A6zH7MJHxAWw9lzVsv3kMg9kgVBBlrivzqdNN8rdgA+eYNxzXU9w== "@next/swc-darwin-x64@12.1.4": version "12.1.4" @@ -2375,20 +2375,20 @@ resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.0.tgz#6b214753410e1d8512a1491045acea1e188df7d6" integrity sha512-qsUhUdoFuRJiaJ7LnvTQ6GZv1QnMDcRXCIjxaN0FNVXwrjkq++U7KjBUaxXkRzLV4C7u0NHLNOp0iZwNNE7ypw== -"@next/swc-darwin-x64@13.0.5": - version "13.0.5" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.5.tgz#f0e4855639279f85f4e0d2bc3d10e5b6c3dff33d" - integrity sha512-SfigOKW4Z2UB3ruUPyvrlDIkcJq1hiw1wvYApWugD+tQsAkYZKEoz+/8emCmeYZ6Gwgi1WHV+z52Oj8u7bEHPg== +"@next/swc-darwin-x64@13.1.0": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.0.tgz#2efe163863cf8a72d71b9f72b31b6c1c94f7213a" + integrity sha512-3S3iQqJIysklj0Q9gnanuYMzF8H9p+fUVhvSHxVVLcKH4HsE8EGddNkXsaOyznL1kC6vGKw7h6uz1ojaXEafCA== "@next/swc-freebsd-x64@13.0.0": version "13.0.0" resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.0.tgz#eeb176bdb585f48882bdac1d04271b918ca87590" integrity sha512-sCdyCbboS7CwdnevKH9J6hkJI76LUw1jVWt4eV7kISuLiPba3JmehZSWm80oa4ADChRVAwzhLAo2zJaYRrInbg== -"@next/swc-freebsd-x64@13.0.5": - version "13.0.5" - resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.5.tgz#1ccc56db2fd6c1a8e10d3952b7cc5fb98c1eed71" - integrity sha512-0NJg8HZr4yG8ynmMGFXQf+Mahvq4ZgBmUwSlLXXymgxEQgH17erH/LoR69uITtW+KTsALgk9axEt5AAabM4ucg== +"@next/swc-freebsd-x64@13.1.0": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.0.tgz#bf80e44d0aae021104a4c80f1056d0b13f1b7ba7" + integrity sha512-wAgzwm/em48GIuWq3OYr0BpncMy7c+UA3hsyX+xKh/vb/sOIpQly7JTa+GNdk17s7kprhMfsgzPG3da36NLpkA== "@next/swc-linux-arm-gnueabihf@12.1.4": version "12.1.4" @@ -2400,10 +2400,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.0.tgz#2c2a9622c93f87a8baca94e068f674da4cae6018" integrity sha512-/X/VxfFA41C9jrEv+sUsPLQ5vbDPVIgG0CJrzKvrcc+b+4zIgPgtfsaWq9ockjHFQi3ycvlZK4TALOXO8ovQ6Q== -"@next/swc-linux-arm-gnueabihf@13.0.5": - version "13.0.5" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.5.tgz#1dd70f03a33d0ea84a5cae03141437ff1e1b5642" - integrity sha512-Cye+h3oDT3NDWjACMlRaolL8fokpKie34FlPj9nfoW7bYKmoMBY1d4IO/GgBF+5xEl7HkH0Ny/qex63vQ0pN+A== +"@next/swc-linux-arm-gnueabihf@13.1.0": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.0.tgz#71ecac0482bfc7ad4bbe15ae7609cc8119772a0c" + integrity sha512-Cr2hzL7ad+4nj9KrR1Cz1RDcsWa61X6I7gc6PToRYIY4gL480Sijq19xo7dlXQPnr1viVzbNiNnNXZASHv7uvw== "@next/swc-linux-arm64-gnu@12.1.4": version "12.1.4" @@ -2415,10 +2415,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.0.tgz#69505827e2928fb18034150fd4d754d54c4a1c4b" integrity sha512-x6Oxr1GIi0ZtNiT6jbw+JVcbEi3UQgF7mMmkrgfL4mfchOwXtWSHKTSSPnwoJWJfXYa0Vy1n8NElWNTGAqoWFw== -"@next/swc-linux-arm64-gnu@13.0.5": - version "13.0.5" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.5.tgz#053d8379a509d005128763013e7be8b92abb0304" - integrity sha512-5BfDS/VoRDR5QUGG9oedOCEZGmV2zxUVFYLUJVPMSMeIgqkjxWQBiG2BUHZI6/LGk9yvHmjx7BTvtBCLtRg6IQ== +"@next/swc-linux-arm64-gnu@13.1.0": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.0.tgz#212c2e3f092c8de9a97bbb13a2754271ec38ad90" + integrity sha512-EjCIKfeZB9h72evL2yGNwBvE5Im96Zn7o2zxImlvCiUYb/xXDqn4hzhck035BSP3g3sGDLfijFTE1wKRyXIk4w== "@next/swc-linux-arm64-musl@12.1.4": version "12.1.4" @@ -2430,10 +2430,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.0.tgz#487a88f2583a046e882328fe0665b37eca4fd0f6" integrity sha512-SnMH9ngI+ipGh3kqQ8+mDtWunirwmhQnQeZkEq9e/9Xsgjf04OetqrqRHKM1HmJtG2qMUJbyXFJ0F81TPuT+3g== -"@next/swc-linux-arm64-musl@13.0.5": - version "13.0.5" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.5.tgz#4a260c6e2f8003b01668c9f2ecfefc102f307d04" - integrity sha512-xenvqlXz+KxVKAB1YR723gnVNszpsCvKZkiFFaAYqDGJ502YuqU2fwLsaSm/ASRizNcBYeo9HPLTyc3r/9cdMQ== +"@next/swc-linux-arm64-musl@13.1.0": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.0.tgz#950c757b929b84aa359f3f9c3a5d90704d5c8f45" + integrity sha512-WAsZtCtPXlz/7/bnW9ryw856xEun+c6xSwZwbcvrMxtcSiW3z0LD91Nsj3AkexsjRtBjeEpNeVtDExqF2VKKSA== "@next/swc-linux-x64-gnu@12.1.4": version "12.1.4" @@ -2445,10 +2445,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.0.tgz#29e89c7e4fd2e2b16ad059076f6261998aee53df" integrity sha512-VSQwTX9EmdbotArtA1J67X8964oQfe0xHb32x4tu+JqTR+wOHyG6wGzPMdXH2oKAp6rdd7BzqxUXXf0J+ypHlw== -"@next/swc-linux-x64-gnu@13.0.5": - version "13.0.5" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.5.tgz#d886be84865c4b3d720add8b0c1f7e71221972c2" - integrity sha512-9Ahi1bbdXwhrWQmOyoTod23/hhK05da/FzodiNqd6drrMl1y7+RujoEcU8Dtw3H1mGWB+yuTlWo8B4Iba8hqiQ== +"@next/swc-linux-x64-gnu@13.1.0": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.0.tgz#f60582199b2d2ba763deb3355e205733bf408c20" + integrity sha512-Tjd5gieI3X9vPce5yF+GsQxOl0jwUkyOrTR1g5PQr+bT/9Qos/yPL48H1L5ayEp0hxgLVPW7skGal7lVnAoVEQ== "@next/swc-linux-x64-musl@12.1.4": version "12.1.4" @@ -2460,10 +2460,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.0.tgz#2f63aae922d2b2829aec21bf8f9adda8b6c16365" integrity sha512-xBCP0nnpO0q4tsytXkvIwWFINtbFRyVY5gxa1zB0vlFtqYR9lNhrOwH3CBrks3kkeaePOXd611+8sjdUtrLnXA== -"@next/swc-linux-x64-musl@13.0.5": - version "13.0.5" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.5.tgz#2d4245512761d90f7e5086df6d6042f078b8e395" - integrity sha512-V+1mnh49qmS9fOZxVRbzjhBEz9IUGJ7AQ80JPWAYQM5LI4TxfdiF4APLPvJ52rOmNeTqnVz1bbKtVOso+7EZ4w== +"@next/swc-linux-x64-musl@13.1.0": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.0.tgz#3a95a243521f5d07985aa6308200d3834e73282b" + integrity sha512-H9UMEQv40e9pkgdX4mCms0dDf2dimmZ6WXhDTWF/yIh9icgcsHaP73BJ9IFlgvh80wLiUgWZ3LAX4vXnXzidmg== "@next/swc-win32-arm64-msvc@12.1.4": version "12.1.4" @@ -2475,10 +2475,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.0.tgz#4117bad96c2a6775f70294fba45c63951a8a21ac" integrity sha512-NutwDafqhGxqPj/eiUixJq9ImS/0sgx6gqlD7jRndCvQ2Q8AvDdu1+xKcGWGNnhcDsNM/n1avf1e62OG1GaqJg== -"@next/swc-win32-arm64-msvc@13.0.5": - version "13.0.5" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.5.tgz#19df9e548b3fe1a2aa8491dd7c01ca950977ac9e" - integrity sha512-wRE9rkp7I+/3Jf2T9PFIJOKq3adMWYEFkPOA7XAkUfYbQHlDJm/U5cVCWUsKByyQq5RThwufI91sgd19MfxRxg== +"@next/swc-win32-arm64-msvc@13.1.0": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.0.tgz#7cc6d467c769dff23ecb9c3953b4429e4ca9f3f8" + integrity sha512-LFFIKjW/cPl4wvG8HF/6oYPJZ+Jy32G3FUflC8UW1Od6W9yOSEvadhk9fMyDZN4cgsNOcVc3uVSMpcuuCpbDGw== "@next/swc-win32-ia32-msvc@12.1.4": version "12.1.4" @@ -2490,10 +2490,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.0.tgz#5914eb86f9ea92a00d76cb094dd9734b3bf2012c" integrity sha512-zNaxaO+Kl/xNz02E9QlcVz0pT4MjkXGDLb25qxtAzyJL15aU0+VjjbIZAYWctG59dvggNIUNDWgoBeVTKB9xLg== -"@next/swc-win32-ia32-msvc@13.0.5": - version "13.0.5" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.5.tgz#a4de6f9d2556b48869f20b1c0f61c5a88a213319" - integrity sha512-Q1XQSLEhFuFhkKFdJIGt7cYQ4T3u6P5wrtUNreg5M+7P+fjSiC8+X+Vjcw+oebaacsdl0pWZlK+oACGafush1w== +"@next/swc-win32-ia32-msvc@13.1.0": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.0.tgz#7bf1ed77d80b86c04cea12ecdf6ac4bf54b5160c" + integrity sha512-MBLaoHZSenMdxhB3Ww1VNEhjyPT3uLjzAi5Ygk48LLLbOGu5KxQolhINRrqGuJWqJRNWSJ9JSFBfJrZwQzrUew== "@next/swc-win32-x64-msvc@12.1.4": version "12.1.4" @@ -2505,10 +2505,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.0.tgz#c54a5a739dee04b20338d305226a2acdf701f67f" integrity sha512-FFOGGWwTCRMu9W7MF496Urefxtuo2lttxF1vwS+1rIRsKvuLrWhVaVTj3T8sf2EBL6gtJbmh4TYlizS+obnGKA== -"@next/swc-win32-x64-msvc@13.0.5": - version "13.0.5" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.5.tgz#f95f882900fe8bf84e049b720f18e851a7187cfe" - integrity sha512-t5gRblrwwiNZP6cT7NkxlgxrFgHWtv9ei5vUraCLgBqzvIsa7X+PnarZUeQCXqz6Jg9JSGGT9j8lvzD97UqeJQ== +"@next/swc-win32-x64-msvc@13.1.0": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.0.tgz#2e23251a84b95182249132480d55fb122a7ae4f0" + integrity sha512-fFTfIQvnmpbKoyh4v3ezlGqtERlgc2Sx8qJwPuYqoVi0V08wCx9wp2Iq1CINxP3UMHkEeNX7gYpDOd+9Cw9EiQ== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -9235,30 +9235,30 @@ next@^13.0.0: "@next/swc-win32-ia32-msvc" "13.0.0" "@next/swc-win32-x64-msvc" "13.0.0" -next@^13.0.5: - version "13.0.5" - resolved "https://registry.yarnpkg.com/next/-/next-13.0.5.tgz#cddfd6804f84a21721da370e4425980876670173" - integrity sha512-awpc3DkphyKydwCotcBnuKwh6hMqkT5xdiBK4OatJtOZurDPBYLP62jtM2be/4OunpmwIbsS0Eyv+ZGU97ciEg== +next@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/next/-/next-13.1.0.tgz#fe65eff07dbdb08c8c925876cffdaf59d4552b32" + integrity sha512-lQMZH1V94L5IL/WaihQkTYabSY73aqgrkGPJB5uz+2O3ES4I3losV/maXLY7l7x5e+oNyE9N81upNQ8uRsR5/A== dependencies: - "@next/env" "13.0.5" + "@next/env" "13.1.0" "@swc/helpers" "0.4.14" caniuse-lite "^1.0.30001406" postcss "8.4.14" - styled-jsx "5.1.0" + styled-jsx "5.1.1" optionalDependencies: - "@next/swc-android-arm-eabi" "13.0.5" - "@next/swc-android-arm64" "13.0.5" - "@next/swc-darwin-arm64" "13.0.5" - "@next/swc-darwin-x64" "13.0.5" - "@next/swc-freebsd-x64" "13.0.5" - "@next/swc-linux-arm-gnueabihf" "13.0.5" - "@next/swc-linux-arm64-gnu" "13.0.5" - "@next/swc-linux-arm64-musl" "13.0.5" - "@next/swc-linux-x64-gnu" "13.0.5" - "@next/swc-linux-x64-musl" "13.0.5" - "@next/swc-win32-arm64-msvc" "13.0.5" - "@next/swc-win32-ia32-msvc" "13.0.5" - "@next/swc-win32-x64-msvc" "13.0.5" + "@next/swc-android-arm-eabi" "13.1.0" + "@next/swc-android-arm64" "13.1.0" + "@next/swc-darwin-arm64" "13.1.0" + "@next/swc-darwin-x64" "13.1.0" + "@next/swc-freebsd-x64" "13.1.0" + "@next/swc-linux-arm-gnueabihf" "13.1.0" + "@next/swc-linux-arm64-gnu" "13.1.0" + "@next/swc-linux-arm64-musl" "13.1.0" + "@next/swc-linux-x64-gnu" "13.1.0" + "@next/swc-linux-x64-musl" "13.1.0" + "@next/swc-win32-arm64-msvc" "13.1.0" + "@next/swc-win32-ia32-msvc" "13.1.0" + "@next/swc-win32-x64-msvc" "13.1.0" nextra-theme-docs@2.0.0-alpha.44: version "2.0.0-alpha.44" @@ -11576,6 +11576,13 @@ styled-jsx@5.1.0: dependencies: client-only "0.0.1" +styled-jsx@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f" + integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw== + dependencies: + client-only "0.0.1" + supports-color@^4.0.0: version "4.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" From 455ececed53572de96f9e00f5bcbdf626a71176c Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 22 Dec 2022 20:32:11 +0100 Subject: [PATCH 054/312] Provide `html` in localized layout --- .../src/app/[locale]/layout.tsx | 8 +++- .../src/app/layout.tsx | 13 +------ .../tests/main.spec.ts | 5 +++ .../src/app/[locale]/layout.tsx | 8 +++- packages/example-next-13/src/app/layout.tsx | 13 +------ .../pages/docs/next-13/client-components.mdx | 38 +++++++++++++------ .../pages/docs/next-13/server-components.mdx | 28 ++++++++++---- 7 files changed, 68 insertions(+), 45 deletions(-) diff --git a/packages/example-next-13-advanced/src/app/[locale]/layout.tsx b/packages/example-next-13-advanced/src/app/[locale]/layout.tsx index 718b27b07..53efd5138 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/layout.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/layout.tsx @@ -10,5 +10,11 @@ export default async function LocaleLayout({ children, params: {locale} }: Props) { - return {children}; + return ( + + + {children} + + + ); } diff --git a/packages/example-next-13-advanced/src/app/layout.tsx b/packages/example-next-13-advanced/src/app/layout.tsx index 2fd952d97..c75c904d1 100644 --- a/packages/example-next-13-advanced/src/app/layout.tsx +++ b/packages/example-next-13-advanced/src/app/layout.tsx @@ -5,16 +5,5 @@ type Props = { }; export default function RootLayout({children}: Props) { - // TODO: Here's a problem: When there's no cookie yet, we can't use the locale - // from the URL. Something like `require('next/navigation').usePathname()` - // would be great, but that uses non-server context currently, so not an - // option in server components. `params` is also not an option, since they are - // only available from matched segments downwards. - const lang = undefined; - - return ( - - {children} - - ); + return children; } diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index 6bfac55bc..4a432c86d 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -12,6 +12,11 @@ it.skip('remembers the last locale', async ({page}) => { await expect(page).toHaveURL(/\/de/); }); +it('sets the `lang` attribute on `html`', async ({page}) => { + await page.goto('/en'); + await page.waitForSelector('html[lang="en"]'); +}); + it('can be used in the head', async ({page}) => { await page.goto('/en'); await expect(page).toHaveTitle('next-intl example'); diff --git a/packages/example-next-13/src/app/[locale]/layout.tsx b/packages/example-next-13/src/app/[locale]/layout.tsx index c67a4785a..d38cdccfa 100644 --- a/packages/example-next-13/src/app/[locale]/layout.tsx +++ b/packages/example-next-13/src/app/[locale]/layout.tsx @@ -11,6 +11,12 @@ export default async function LocaleLayout({ params: {locale} }: Props) { return ( - {children} + + + + {children} + + + ); } diff --git a/packages/example-next-13/src/app/layout.tsx b/packages/example-next-13/src/app/layout.tsx index 2fd952d97..c75c904d1 100644 --- a/packages/example-next-13/src/app/layout.tsx +++ b/packages/example-next-13/src/app/layout.tsx @@ -5,16 +5,5 @@ type Props = { }; export default function RootLayout({children}: Props) { - // TODO: Here's a problem: When there's no cookie yet, we can't use the locale - // from the URL. Something like `require('next/navigation').usePathname()` - // would be great, but that uses non-server context currently, so not an - // option in server components. `params` is also not an option, since they are - // only available from matched segments downwards. - const lang = undefined; - - return ( - - {children} - - ); + return children; } diff --git a/packages/website/pages/docs/next-13/client-components.mdx b/packages/website/pages/docs/next-13/client-components.mdx index cfe477f04..8ad4a11f5 100644 --- a/packages/website/pages/docs/next-13/client-components.mdx +++ b/packages/website/pages/docs/next-13/client-components.mdx @@ -8,21 +8,23 @@ import Callout from 'nextra-theme-docs/callout'; If you haven't done so already, [create a Next.js 13 app that uses the `app` directory](https://beta.nextjs.org/docs/installation). The goal is to prefix all routes with the `locale`, so we can retrieve it as a [dynamic segment](https://beta.nextjs.org/docs/routing/defining-routes#dynamic-segments) and use it to configure `next-intl`. -1. Create the following file structure: +**Start by creating the following file structure:** ``` ├── messages (1) │ ├── en.json │ └── ... ├── app -│ ├── [locale] -│ │ ├── layout.tsx (2) -│ │ └── page.tsx (3) -│ └── ... -└── middleware.tsx (4) +│ ├── layout.tsx (2) +│ └── [locale] +│ ├── layout.tsx (3) +│ └── page.tsx (4) +└── middleware.tsx (5) ``` -2. Set up messages for a language, e.g. in `messages/en.json` (1): +**Now, set up these files as follows:** + +1. Set up messages for a language, e.g. in `messages/en.json`: ```json { @@ -32,7 +34,15 @@ If you haven't done so already, [create a Next.js 13 app that uses the `app` dir } ``` -3. Configure `NextIntlClientProvider` in `app/[locale]/layout.tsx` (2): +2. Pass through children in `app/layout.tsx`: + +```tsx +export default function RootLayout({children}) { + return children; +} +``` + +3. Provide the document layout and set up `NextIntlClientProvider` in `app/[locale]/layout.tsx`: ```tsx import {NextIntlClientProvider} from 'next-intl/client'; @@ -47,14 +57,18 @@ export default async function LocaleLayout({children, params: {locale}}) { } return ( - - {children} - + + + + {children} + + + ); } ``` -4. Turn your component in `app/[locale]/page.tsx` into a Client Component to be able to use translations (3): +4. Turn your component in `app/[locale]/page.tsx` into a Client Component to be able to use translations: ```tsx 'use client'; diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 7314ee783..3884dfb63 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -34,10 +34,10 @@ If you haven't done so already, [create a Next.js 13 app that uses the `app` dir │ ├── en.json │ └── ... └── app - ├── [locale] - │ ├── layout.tsx (5) - │ └── page.tsx (6) - └── ... + ├── layout.tsx (5) + └── [locale] + ├── layout.tsx (6) + └── page.tsx (7) ``` **Now, set up these files as follows:** @@ -92,19 +92,33 @@ export default createIntlMiddleware(); } ``` -5. Pass your received locale to `NextIntlServerProvider` in `app/[locale]/layout.tsx`: +5. Pass through children in `app/layout.tsx`: + +```tsx +export default function RootLayout({children}) { + return children; +} +``` + +6. Provide the document layout and set up `NextIntlServerProvider` in `app/[locale]/layout.tsx`: ```tsx import {NextIntlServerProvider} from 'next-intl/server'; export default async function LocaleLayout({children, params: {locale}}) { return ( - {children} + + + + {children} + + + ); } ``` -6. Use translations in your page component in `app/[locale]/page.tsx` or anywhere else! +7. Use translations in your page component in `app/[locale]/page.tsx` or anywhere else! ```tsx import {useTranslations} from 'next-intl'; From f69ec20ff64f9367c8b5c591bc5c75ed690aa58f Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 22 Dec 2022 20:35:22 +0100 Subject: [PATCH 055/312] Update tested version --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 3884dfb63..6a51dcdca 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -18,7 +18,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. npm install next-intl@2.11.0-alpha.4 ``` -This preview version was tested with `next@13.0.6`. +This preview version was tested with `next@13.1.0`. ## Getting started From 358135a5b7a02bd5fc4222c4b87cd7c1bb546d05 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 23 Dec 2022 08:59:47 +0100 Subject: [PATCH 056/312] Use `generateStaticParams` --- .../example-next-13-advanced/src/app/[locale]/layout.tsx | 5 +++++ packages/example-next-13-advanced/src/i18n.tsx | 4 ++-- packages/example-next-13/src/app/[locale]/layout.tsx | 5 +++++ packages/example-next-13/src/i18n.tsx | 4 ++-- packages/website/pages/docs/next-13/client-components.mdx | 4 ++++ packages/website/pages/docs/next-13/server-components.mdx | 5 +++++ 6 files changed, 23 insertions(+), 4 deletions(-) diff --git a/packages/example-next-13-advanced/src/app/[locale]/layout.tsx b/packages/example-next-13-advanced/src/app/[locale]/layout.tsx index 53efd5138..f93a2a14e 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/layout.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/layout.tsx @@ -1,6 +1,11 @@ import {ReactNode} from 'react'; +import i18n from '../../i18n'; import NextIntlProvider from './NextIntlProvider'; +export function generateStaticParams() { + return i18n.locales.map((locale) => ({locale})); +} + type Props = { children: ReactNode; params: {locale: string}; diff --git a/packages/example-next-13-advanced/src/i18n.tsx b/packages/example-next-13-advanced/src/i18n.tsx index 077174105..558342d55 100644 --- a/packages/example-next-13-advanced/src/i18n.tsx +++ b/packages/example-next-13-advanced/src/i18n.tsx @@ -1,6 +1,6 @@ import {IntlError, NextIntlConfig} from 'next-intl'; -const config: NextIntlConfig = { +const i18n: NextIntlConfig = { locales: ['en', 'de'], defaultLocale: 'en', @@ -38,4 +38,4 @@ const config: NextIntlConfig = { } }; -export default config; +export default i18n; diff --git a/packages/example-next-13/src/app/[locale]/layout.tsx b/packages/example-next-13/src/app/[locale]/layout.tsx index d38cdccfa..c6e33aea1 100644 --- a/packages/example-next-13/src/app/[locale]/layout.tsx +++ b/packages/example-next-13/src/app/[locale]/layout.tsx @@ -1,5 +1,10 @@ import {NextIntlServerProvider} from 'next-intl/server'; import {ReactNode} from 'react'; +import i18n from '../../i18n'; + +export function generateStaticParams() { + return i18n.locales.map((locale) => ({locale})); +} type Props = { children: ReactNode; diff --git a/packages/example-next-13/src/i18n.tsx b/packages/example-next-13/src/i18n.tsx index 590cff8e7..f0378f373 100644 --- a/packages/example-next-13/src/i18n.tsx +++ b/packages/example-next-13/src/i18n.tsx @@ -1,6 +1,6 @@ import {NextIntlConfig} from 'next-intl'; -const config: NextIntlConfig = { +const i18n: NextIntlConfig = { locales: ['en', 'de'], defaultLocale: 'en', async getMessages({locale}) { @@ -8,4 +8,4 @@ const config: NextIntlConfig = { } }; -export default config; +export default i18n; diff --git a/packages/website/pages/docs/next-13/client-components.mdx b/packages/website/pages/docs/next-13/client-components.mdx index 8ad4a11f5..52657174c 100644 --- a/packages/website/pages/docs/next-13/client-components.mdx +++ b/packages/website/pages/docs/next-13/client-components.mdx @@ -48,6 +48,10 @@ export default function RootLayout({children}) { import {NextIntlClientProvider} from 'next-intl/client'; import {notFound} from 'next/navigation'; +export function generateStaticParams() { + return [{locale: 'en'}, {locale: 'de'}]; +} + export default async function LocaleLayout({children, params: {locale}}) { let messages; try { diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 6a51dcdca..5ce99b086 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -104,6 +104,11 @@ export default function RootLayout({children}) { ```tsx import {NextIntlServerProvider} from 'next-intl/server'; +import i18n from '../../i18n'; + +export function generateStaticParams() { + return i18n.locales.map((locale) => ({locale})); +} export default async function LocaleLayout({children, params: {locale}}) { return ( From 008efd43f7cde953aa4dd7b37f02a330b4655d55 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 23 Dec 2022 09:04:43 +0100 Subject: [PATCH 057/312] Add `head`/`title` for basic example --- packages/example-next-13/src/app/[locale]/layout.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/example-next-13/src/app/[locale]/layout.tsx b/packages/example-next-13/src/app/[locale]/layout.tsx index c6e33aea1..78979a5bd 100644 --- a/packages/example-next-13/src/app/[locale]/layout.tsx +++ b/packages/example-next-13/src/app/[locale]/layout.tsx @@ -17,6 +17,9 @@ export default async function LocaleLayout({ }: Props) { return ( + + next-intl + {children} From ae6b5ff15bb47ad7796e181cb9ed50b4d990162d Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 23 Dec 2022 09:48:11 +0100 Subject: [PATCH 058/312] Meta tags --- packages/example-next-13-advanced/src/app/[locale]/head.tsx | 1 + packages/example-next-13/src/app/[locale]/layout.tsx | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/example-next-13-advanced/src/app/[locale]/head.tsx b/packages/example-next-13-advanced/src/app/[locale]/head.tsx index 2c6bd8b85..4c63d241f 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/head.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/head.tsx @@ -21,6 +21,7 @@ function Meta() { <> {t('title')} + ); } diff --git a/packages/example-next-13/src/app/[locale]/layout.tsx b/packages/example-next-13/src/app/[locale]/layout.tsx index 78979a5bd..83de6e01c 100644 --- a/packages/example-next-13/src/app/[locale]/layout.tsx +++ b/packages/example-next-13/src/app/[locale]/layout.tsx @@ -19,6 +19,7 @@ export default async function LocaleLayout({ next-intl + From a94d11c2261ae2c7b079a132a09bca5fab2c40d9 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 27 Dec 2022 12:32:09 +0100 Subject: [PATCH 059/312] Update author --- .github/workflows/publish.yml | 2 +- packages/next-intl/package.json | 2 +- packages/use-intl/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index cfac9669c..873d60c42 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -16,7 +16,7 @@ jobs: registry-url: 'https://registry.npmjs.org' - uses: bahmutov/npm-install@v1 # Seems like after squash & merge the author is unknown to lerna - - run: git config --global user.email "jan@amann.me" && git config --global user.name "Jan Amann" + - run: git config --global user.email "jan@amann.work" && git config --global user.name "Jan Amann" - run: yarn run publish env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 99b7f3860..00e7f1fb9 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -2,7 +2,7 @@ "name": "next-intl", "version": "2.10.2", "sideEffects": false, - "author": "Jan Amann ", + "author": "Jan Amann ", "description": "A minimal, but complete solution for internationalization in Next.js apps.", "license": "MIT", "homepage": "https://next-intl-docs.vercel.app/", diff --git a/packages/use-intl/package.json b/packages/use-intl/package.json index 4fdee5397..d647ac3db 100644 --- a/packages/use-intl/package.json +++ b/packages/use-intl/package.json @@ -2,7 +2,7 @@ "name": "use-intl", "version": "2.10.2", "sideEffects": false, - "author": "Jan Amann ", + "author": "Jan Amann ", "description": "Minimal, but complete solution for managing internationalization in React apps.", "license": "MIT", "homepage": "https://next-intl-docs.vercel.app/", From 2ef03f84d58ff34f16aac0e299100dc6bcab02d2 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 27 Dec 2022 15:34:30 +0100 Subject: [PATCH 060/312] Require middleware only on / --- .../example-next-13-advanced/package.json | 2 +- .../src/middleware.tsx | 10 ++---- .../tests/main.spec.ts | 15 +++++++-- packages/example-next-13/src/middleware.tsx | 10 ++---- .../src/client/NextIntlClientProvider.tsx | 11 +++++-- .../next-intl/src/server/NextIntlCookie.tsx | 33 ------------------- .../server/NextIntlServerRuntimeContext.tsx | 2 ++ .../next-intl/src/server/SyncLocaleCookie.tsx | 12 +++++++ .../src/server/createIntlMiddleware.tsx | 9 ----- .../next-intl/src/server/resolveLocale.tsx | 23 ++++--------- packages/next-intl/src/shared/constants.tsx | 3 ++ .../next-intl/src/shared/useCookieSync.tsx | 19 +++++++++++ .../pages/docs/next-13/server-components.mdx | 10 ++++-- yarn.lock | 18 +++++----- 14 files changed, 88 insertions(+), 89 deletions(-) delete mode 100644 packages/next-intl/src/server/NextIntlCookie.tsx create mode 100644 packages/next-intl/src/server/SyncLocaleCookie.tsx create mode 100644 packages/next-intl/src/shared/constants.tsx create mode 100644 packages/next-intl/src/shared/useCookieSync.tsx diff --git a/packages/example-next-13-advanced/package.json b/packages/example-next-13-advanced/package.json index 184765491..63159465e 100644 --- a/packages/example-next-13-advanced/package.json +++ b/packages/example-next-13-advanced/package.json @@ -18,7 +18,7 @@ "typescript": "^4.6.3" }, "devDependencies": { - "@playwright/test": "1.28.1", + "@playwright/test": "^1.29.0", "@types/lodash": "^4.14.176", "@types/node": "^17.0.23", "@types/react": "^18.0.23", diff --git a/packages/example-next-13-advanced/src/middleware.tsx b/packages/example-next-13-advanced/src/middleware.tsx index caf5bf70a..11d9aaaa2 100644 --- a/packages/example-next-13-advanced/src/middleware.tsx +++ b/packages/example-next-13-advanced/src/middleware.tsx @@ -2,10 +2,6 @@ import {createIntlMiddleware} from 'next-intl/server'; export default createIntlMiddleware(); -// TODO: As soon as Next.js allows to write cookies via -// `cookies().set(name, value)`, we can add this. -// https://beta.nextjs.org/docs/api-reference/cookies -// -// export const config = { -// matcher: '/' -// }; +export const config = { + matcher: '/' +}; diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index 4a432c86d..1e53a7c62 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -5,9 +5,20 @@ it('redirects to a matched locale', async ({page}) => { await expect(page).toHaveURL(/\/en/); }); -// TODO: See comment in middleware.tsx -it.skip('remembers the last locale', async ({page}) => { +it('remembers the last locale', async ({page}) => { await page.goto('/de'); + + // Wait for the cookie to be set on the client side + await expect(async () => { + const cookie = (await page.context().cookies()).find( + (cur) => cur.name === 'NEXT_LOCALE' + ); + expect(cookie).toMatchObject({ + name: 'NEXT_LOCALE', + value: 'de' + }); + }).toPass(); + await page.goto('/'); await expect(page).toHaveURL(/\/de/); }); diff --git a/packages/example-next-13/src/middleware.tsx b/packages/example-next-13/src/middleware.tsx index caf5bf70a..11d9aaaa2 100644 --- a/packages/example-next-13/src/middleware.tsx +++ b/packages/example-next-13/src/middleware.tsx @@ -2,10 +2,6 @@ import {createIntlMiddleware} from 'next-intl/server'; export default createIntlMiddleware(); -// TODO: As soon as Next.js allows to write cookies via -// `cookies().set(name, value)`, we can add this. -// https://beta.nextjs.org/docs/api-reference/cookies -// -// export const config = { -// matcher: '/' -// }; +export const config = { + matcher: '/' +}; diff --git a/packages/next-intl/src/client/NextIntlClientProvider.tsx b/packages/next-intl/src/client/NextIntlClientProvider.tsx index 4f587d71d..c4300d624 100644 --- a/packages/next-intl/src/client/NextIntlClientProvider.tsx +++ b/packages/next-intl/src/client/NextIntlClientProvider.tsx @@ -3,12 +3,13 @@ import {useRouter} from 'next/router'; import React, {ComponentProps} from 'react'; import {IntlProvider} from 'use-intl'; +import useCookieSync from '../shared/useCookieSync'; type Props = Omit, 'locale'> & { locale?: string; }; -export default function NextIntlProvider({locale, ...rest}: Props) { +export default function NextIntlProvider({children, locale, ...rest}: Props) { let router; try { // Reading from context is practically ok to do conditionally @@ -32,5 +33,11 @@ export default function NextIntlProvider({locale, ...rest}: Props) { ); } - return ; + useCookieSync(locale); + + return ( + + {children} + + ); } diff --git a/packages/next-intl/src/server/NextIntlCookie.tsx b/packages/next-intl/src/server/NextIntlCookie.tsx deleted file mode 100644 index 15ea52cf9..000000000 --- a/packages/next-intl/src/server/NextIntlCookie.tsx +++ /dev/null @@ -1,33 +0,0 @@ -// We're using internals here, but if they are not found, worst case they become `any` -import {ReadonlyRequestCookies} from 'next/dist/server/app-render'; -import { - RequestCookies, - ResponseCookies -} from 'next/dist/server/web/spec-extension/cookies'; - -// Reuse the legacy cookie name -// https://nextjs.org/docs/advanced-features/i18n-routing#leveraging-the-next_locale-cookie -const COOKIE_NAME = 'NEXT_LOCALE'; - -type Cookies = ReadonlyRequestCookies | ResponseCookies | RequestCookies; - -export default class NextIntlCookie { - private requestCookies: Cookies; - - constructor(requestCookies: Cookies) { - this.requestCookies = requestCookies; - } - - public hasLocale() { - return 'has' in this.requestCookies && this.requestCookies.has(COOKIE_NAME); - } - - public getLocale() { - return this.requestCookies.get(COOKIE_NAME)?.value; - } - - public setLocale(locale: string) { - // TODO: Waiting for https://beta.nextjs.org/docs/api-reference/cookies#thread-id=6YOM0 - this.requestCookies.set(COOKIE_NAME, locale); - } -} diff --git a/packages/next-intl/src/server/NextIntlServerRuntimeContext.tsx b/packages/next-intl/src/server/NextIntlServerRuntimeContext.tsx index 186763c0f..a87f82e3b 100644 --- a/packages/next-intl/src/server/NextIntlServerRuntimeContext.tsx +++ b/packages/next-intl/src/server/NextIntlServerRuntimeContext.tsx @@ -2,6 +2,7 @@ import React, {createServerContext, use} from 'react'; import IntlProviderProps from 'use-intl/dist/react/IntlProviderProps'; import {NextIntlRuntimeConfig} from './NextIntlConfig'; +import SyncLocaleCookie from './SyncLocaleCookie'; const NextIntlServerRuntimeContext = createServerContext( 'next-intl', @@ -37,6 +38,7 @@ export function NextIntlServerProvider(props: IntlProviderProps) { }} > {props.children} + ); } diff --git a/packages/next-intl/src/server/SyncLocaleCookie.tsx b/packages/next-intl/src/server/SyncLocaleCookie.tsx new file mode 100644 index 000000000..637f2a547 --- /dev/null +++ b/packages/next-intl/src/server/SyncLocaleCookie.tsx @@ -0,0 +1,12 @@ +'use client'; + +import useCookieSync from '../shared/useCookieSync'; + +type Props = { + locale: string; +}; + +export default function SyncLocaleCookie({locale}: Props) { + useCookieSync(locale); + return null; +} diff --git a/packages/next-intl/src/server/createIntlMiddleware.tsx b/packages/next-intl/src/server/createIntlMiddleware.tsx index ec98e43ca..d275fd600 100644 --- a/packages/next-intl/src/server/createIntlMiddleware.tsx +++ b/packages/next-intl/src/server/createIntlMiddleware.tsx @@ -1,5 +1,4 @@ import {NextRequest, NextResponse} from 'next/server'; -import NextIntlCookie from './NextIntlCookie'; import resolveLocale from './resolveLocale'; import staticConfig from './staticConfig'; @@ -22,12 +21,6 @@ export default function createIntlMiddleware() { request.nextUrl.pathname ); - // It seems like setting headers and cookies here doesn't affect what can - // be read from RSC. If it did, we could use it to set the locale. - // - // request.headers.set('x-next-intl-locale', locale); - // request.cookies.set('x-next-intl-locale', locale); - let response; if (request.nextUrl.pathname === REDIRECT_URL) { response = NextResponse.redirect( @@ -37,8 +30,6 @@ export default function createIntlMiddleware() { response = NextResponse.next(); } - new NextIntlCookie(response.cookies).setLocale(locale); - return response; }; } diff --git a/packages/next-intl/src/server/resolveLocale.tsx b/packages/next-intl/src/server/resolveLocale.tsx index be5fa74ca..6850d5d52 100644 --- a/packages/next-intl/src/server/resolveLocale.tsx +++ b/packages/next-intl/src/server/resolveLocale.tsx @@ -1,21 +1,14 @@ import acceptLanguageParser from 'accept-language-parser'; -import {ReadonlyRequestCookies} from 'next/dist/server/app-render'; -import { - RequestCookies, - ResponseCookies -} from 'next/dist/server/web/spec-extension/cookies'; +import {RequestCookies} from 'next/dist/server/web/spec-extension/cookies'; +import {LOCALE_COOKIE_NAME} from '../shared/constants'; import NextIntlConfig from './NextIntlConfig'; -import NextIntlCookie from './NextIntlCookie'; export default function resolveLocale( i18n: NextIntlConfig, - requestHeaders?: Headers, - requestCookies?: ReadonlyRequestCookies | ResponseCookies | RequestCookies, - pathname?: string + requestHeaders: Headers, + requestCookies: RequestCookies, + pathname: string ) { - if (!requestHeaders) requestHeaders = require('next/headers').headers(); - if (!requestCookies) requestCookies = require('next/headers').cookies(); - let locale; // Prio 1: Use route prefix @@ -31,10 +24,8 @@ export default function resolveLocale( // Prio 2: Use existing cookie if (!locale && requestCookies) { - const nextIntlCookie = new NextIntlCookie(requestCookies); - - if (nextIntlCookie.hasLocale()) { - locale = nextIntlCookie.getLocale(); + if (requestCookies.has(LOCALE_COOKIE_NAME)) { + locale = requestCookies.get(LOCALE_COOKIE_NAME)?.value; } } diff --git a/packages/next-intl/src/shared/constants.tsx b/packages/next-intl/src/shared/constants.tsx new file mode 100644 index 000000000..09c3e06f6 --- /dev/null +++ b/packages/next-intl/src/shared/constants.tsx @@ -0,0 +1,3 @@ +// Reuse the legacy cookie name +// https://nextjs.org/docs/advanced-features/i18n-routing#leveraging-the-next_locale-cookie +export const LOCALE_COOKIE_NAME = 'NEXT_LOCALE'; diff --git a/packages/next-intl/src/shared/useCookieSync.tsx b/packages/next-intl/src/shared/useCookieSync.tsx new file mode 100644 index 000000000..87a7f328c --- /dev/null +++ b/packages/next-intl/src/shared/useCookieSync.tsx @@ -0,0 +1,19 @@ +import {useEffect} from 'react'; +import {LOCALE_COOKIE_NAME} from './constants'; + +/** + * This is necessary so the middleware only has to match + * on the root path, but we can keep the cookie in sync. + */ +export default function useCookieSync(locale: string) { + useEffect(() => { + const cookie = document.cookie + .split(';') + .find((cur) => cur.includes(LOCALE_COOKIE_NAME + '=')); + + const prevLocale = cookie?.split('=')?.[1]; + if (prevLocale !== locale) { + document.cookie = `${LOCALE_COOKIE_NAME}=${locale}; path=/; expires=Fri, 31 Dec 9999 23:59:59 GMT`; + } + }, [locale]); +} diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 5ce99b086..9856a5be9 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -76,10 +76,14 @@ module.exports = { import {createIntlMiddleware} from 'next-intl/server'; // This middleware intercepts requests to `/` and will redirect -// to one of the configured locales instead (e.g. `/en`). A cookie -// is set in the background, so if the user switches to a new -// language, this language will take precedence from now on. +// to one of the configured locales instead (e.g. `/en`). +// In the background a cookie is set that will remember the +// locale of the last page that the user has visited. export default createIntlMiddleware(); + +export const config = { + matcher: '/' +}; ``` 4. Set up messages for a language, e.g. in `messages/en.json`: diff --git a/yarn.lock b/yarn.lock index 64e8aa095..7c84d79d8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2708,13 +2708,13 @@ dependencies: "@octokit/openapi-types" "^7.3.3" -"@playwright/test@1.28.1": - version "1.28.1" - resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.28.1.tgz#e5be297e024a3256610cac2baaa9347fd57c7860" - integrity sha512-xN6spdqrNlwSn9KabIhqfZR7IWjPpFK1835tFNgjrlysaSezuX8PYUwaz38V/yI8TJLG9PkAMEXoHRXYXlpTPQ== +"@playwright/test@^1.29.0": + version "1.29.1" + resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.29.1.tgz#f2ed4dc143b9c7825a7ad2703b2f1ac4354e1145" + integrity sha512-iQxk2DX5U9wOGV3+/Jh9OHPsw5H3mleUL2S4BgQuwtlAfK3PnKvn38m4Rg9zIViGHVW24opSm99HQm/UFLEy6w== dependencies: "@types/node" "*" - playwright-core "1.28.1" + playwright-core "1.29.1" "@reach/skip-nav@^0.16.0": version "0.16.0" @@ -10145,10 +10145,10 @@ pkg-up@^2.0.0: dependencies: find-up "^2.1.0" -playwright-core@1.28.1: - version "1.28.1" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.28.1.tgz#8400be9f4a8d1c0489abdb9e75a4cc0ffc3c00cb" - integrity sha512-3PixLnGPno0E8rSBJjtwqTwJe3Yw72QwBBBxNoukIj3lEeBNXwbNiKrNuB1oyQgTBw5QHUhNO3SteEtHaMK6ag== +playwright-core@1.29.1: + version "1.29.1" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.29.1.tgz#9ec15d61c4bd2f386ddf6ce010db53a030345a47" + integrity sha512-20Ai3d+lMkWpI9YZYlxk8gxatfgax5STW8GaMozAHwigLiyiKQrdkt7gaoT9UQR8FIVDg6qVXs9IoZUQrDjIIg== pluralize@^8.0.0: version "8.0.0" From 6c95da07c484282b3ed07d26ea5d813f8754b965 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 27 Dec 2022 16:02:19 +0100 Subject: [PATCH 061/312] Accept `locale` for `next/link` --- .../src/components/LocaleSwitcher.tsx | 8 ++++---- .../example-next-13-advanced/tests/main.spec.ts | 9 +++++++++ .../src/shared/createLocalizedLinkComponent.tsx | 11 ++++++++--- .../pages/docs/next-13/server-components.mdx | 14 ++++++++++++++ 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/packages/example-next-13-advanced/src/components/LocaleSwitcher.tsx b/packages/example-next-13-advanced/src/components/LocaleSwitcher.tsx index cbca03de7..778cc417d 100644 --- a/packages/example-next-13-advanced/src/components/LocaleSwitcher.tsx +++ b/packages/example-next-13-advanced/src/components/LocaleSwitcher.tsx @@ -1,14 +1,14 @@ -import {useLocale, useTranslations} from 'next-intl'; -import Link from 'next/link'; +import {LocalizedLink, useLocale, useTranslations} from 'next-intl'; export default function LocaleSwitcher() { const t = useTranslations('LocaleSwitcher'); + const locale = useLocale(); const otherLocale = locale === 'en' ? 'de' : 'en'; return ( - + {t('switchLocale', {locale: otherLocale})} - + ); } diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index 1e53a7c62..90cba1e77 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -108,6 +108,15 @@ it('can use `LocalizedLink` on the server', async ({page}) => { ); }); +it('can use `LocalizedLink` to link to the root of another language', async ({ + page +}) => { + await page.goto('/en'); + await expect( + page.getByRole('link', {name: 'Switch to German'}) + ).toHaveAttribute('href', '/de'); +}); + it('can use `LocalizedLink` on the client', async ({page}) => { await page.goto('/en/client'); await expect(page.getByRole('link', {name: 'Go to home'})).toHaveAttribute( diff --git a/packages/next-intl/src/shared/createLocalizedLinkComponent.tsx b/packages/next-intl/src/shared/createLocalizedLinkComponent.tsx index c494b5489..0ce0477b7 100644 --- a/packages/next-intl/src/shared/createLocalizedLinkComponent.tsx +++ b/packages/next-intl/src/shared/createLocalizedLinkComponent.tsx @@ -7,9 +7,14 @@ export default function createLocalizedLinkComponent(useLocale: () => string) { /** * Wraps `next/link` and prefixes the `href` with the current locale. */ - function LocalizedLink({href, ...rest}: Props, ref: Props['ref']) { - const locale = useLocale(); - const localizedHref = '/' + locale + href; + function LocalizedLink({href, locale, ...rest}: Props, ref: Props['ref']) { + const curLocale = useLocale(); + if (!locale) locale = curLocale; + + let localizedHref = '/' + locale; + if (href !== '/') { + localizedHref += href; + } return ; } diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 9856a5be9..ce43a5f8c 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -144,6 +144,20 @@ If you've encountered an issue, you can [explore the code for a working example] If you're in a transitioning phase, either from the `pages` directory to the `app` directory, or from Client Components the the Server Components preview, you can apply `NextIntlClientProvider` additionally. +## Linking between pages + +In the `pages` folder, Next.js automatically considers the current locale for `next/link`. Since this is no longer the case for the `app` directory, `next-intl` provides a drop-in replacement for this use case. + +```tsx +import {LocalizedLink} from 'next-intl'; + +// When the user is on `/en`, the link will point ot `/en/about` +About + +// You can override the `locale` to switch to another language +Switch to German +``` + ## Switching to Client Components If you need to use translations in Client Components, the best approach is to pass the generated labels as props. From 500349e1c8377e5de15aeb6bc684e3e163945180 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 27 Dec 2022 16:12:26 +0100 Subject: [PATCH 062/312] 404 for unknown locales --- .../tests/main.spec.ts | 5 ++++ .../src/client/NextIntlClientProvider.tsx | 6 ++++- .../server/NextIntlServerRuntimeContext.tsx | 23 ++++++++++++++----- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index 90cba1e77..da790a05d 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -1,5 +1,10 @@ import {test as it, expect} from '@playwright/test'; +it('returns a 404 for unknown locales', async ({request}) => { + const response = await request.get('/unknown'); + expect(response.status()).toBe(404); +}); + it('redirects to a matched locale', async ({page}) => { await page.goto('/'); await expect(page).toHaveURL(/\/en/); diff --git a/packages/next-intl/src/client/NextIntlClientProvider.tsx b/packages/next-intl/src/client/NextIntlClientProvider.tsx index c4300d624..12b6ff14d 100644 --- a/packages/next-intl/src/client/NextIntlClientProvider.tsx +++ b/packages/next-intl/src/client/NextIntlClientProvider.tsx @@ -9,7 +9,11 @@ type Props = Omit, 'locale'> & { locale?: string; }; -export default function NextIntlProvider({children, locale, ...rest}: Props) { +export default function NextIntlClientProvider({ + children, + locale, + ...rest +}: Props) { let router; try { // Reading from context is practically ok to do conditionally diff --git a/packages/next-intl/src/server/NextIntlServerRuntimeContext.tsx b/packages/next-intl/src/server/NextIntlServerRuntimeContext.tsx index a87f82e3b..894b304ef 100644 --- a/packages/next-intl/src/server/NextIntlServerRuntimeContext.tsx +++ b/packages/next-intl/src/server/NextIntlServerRuntimeContext.tsx @@ -1,8 +1,10 @@ +import {notFound} from 'next/navigation'; // @ts-expect-error `cSC` is not officially released yet import React, {createServerContext, use} from 'react'; import IntlProviderProps from 'use-intl/dist/react/IntlProviderProps'; import {NextIntlRuntimeConfig} from './NextIntlConfig'; import SyncLocaleCookie from './SyncLocaleCookie'; +import staticConfig from './staticConfig'; const NextIntlServerRuntimeContext = createServerContext( 'next-intl', @@ -28,17 +30,26 @@ export function useServerRuntimeConfig() { return value; } -export function NextIntlServerProvider(props: IntlProviderProps) { +export function NextIntlServerProvider({ + children, + locale, + now, + timeZone +}: IntlProviderProps) { + if (!staticConfig.locales.includes(locale)) { + notFound(); + } + return ( - {props.children} - + {children} + ); } From 6ce70437f0ac11990562c566233a1b489033b701 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 27 Dec 2022 16:49:22 +0100 Subject: [PATCH 063/312] Typo [skip ci] --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index ce43a5f8c..6598ff334 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -151,7 +151,7 @@ In the `pages` folder, Next.js automatically considers the current locale for `n ```tsx import {LocalizedLink} from 'next-intl'; -// When the user is on `/en`, the link will point ot `/en/about` +// When the user is on `/en`, the link will point to `/en/about` About // You can override the `locale` to switch to another language From f30ad397c4ee9037423cf13a47d92c7c3b54c2d9 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 27 Dec 2022 18:49:54 +0100 Subject: [PATCH 064/312] alpha.5 --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 6598ff334..e3e3d3c80 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -15,7 +15,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current preview version ``` -npm install next-intl@2.11.0-alpha.4 +npm install next-intl@2.11.0-alpha.5 ``` This preview version was tested with `next@13.1.0`. From e9c66571939fc714e7ce5eb27b03c96e84fdcee0 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Sun, 8 Jan 2023 00:06:08 +0100 Subject: [PATCH 065/312] Remove unnecessary root layout --- .../src/app/layout.tsx | 9 -------- packages/example-next-13/src/app/layout.tsx | 9 -------- .../pages/docs/next-13/client-components.mdx | 21 ++++++------------- .../pages/docs/next-13/server-components.mdx | 17 ++++----------- 4 files changed, 10 insertions(+), 46 deletions(-) delete mode 100644 packages/example-next-13-advanced/src/app/layout.tsx delete mode 100644 packages/example-next-13/src/app/layout.tsx diff --git a/packages/example-next-13-advanced/src/app/layout.tsx b/packages/example-next-13-advanced/src/app/layout.tsx deleted file mode 100644 index c75c904d1..000000000 --- a/packages/example-next-13-advanced/src/app/layout.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import {ReactNode} from 'react'; - -type Props = { - children: ReactNode; -}; - -export default function RootLayout({children}: Props) { - return children; -} diff --git a/packages/example-next-13/src/app/layout.tsx b/packages/example-next-13/src/app/layout.tsx deleted file mode 100644 index c75c904d1..000000000 --- a/packages/example-next-13/src/app/layout.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import {ReactNode} from 'react'; - -type Props = { - children: ReactNode; -}; - -export default function RootLayout({children}: Props) { - return children; -} diff --git a/packages/website/pages/docs/next-13/client-components.mdx b/packages/website/pages/docs/next-13/client-components.mdx index 52657174c..1206374a7 100644 --- a/packages/website/pages/docs/next-13/client-components.mdx +++ b/packages/website/pages/docs/next-13/client-components.mdx @@ -15,11 +15,10 @@ If you haven't done so already, [create a Next.js 13 app that uses the `app` dir │ ├── en.json │ └── ... ├── app -│ ├── layout.tsx (2) │ └── [locale] -│ ├── layout.tsx (3) -│ └── page.tsx (4) -└── middleware.tsx (5) +│ ├── layout.tsx (2) +│ └── page.tsx (3) +└── middleware.tsx (4) ``` **Now, set up these files as follows:** @@ -34,15 +33,7 @@ If you haven't done so already, [create a Next.js 13 app that uses the `app` dir } ``` -2. Pass through children in `app/layout.tsx`: - -```tsx -export default function RootLayout({children}) { - return children; -} -``` - -3. Provide the document layout and set up `NextIntlClientProvider` in `app/[locale]/layout.tsx`: +2. Provide the document layout and set up `NextIntlClientProvider` in `app/[locale]/layout.tsx`: ```tsx import {NextIntlClientProvider} from 'next-intl/client'; @@ -72,7 +63,7 @@ export default async function LocaleLayout({children, params: {locale}}) { } ``` -4. Turn your component in `app/[locale]/page.tsx` into a Client Component to be able to use translations: +3. Turn your component in `app/[locale]/page.tsx` into a Client Component to be able to use translations: ```tsx 'use client'; @@ -85,7 +76,7 @@ export default function Index() { } ``` -5. Create a [middleware](https://nextjs.org/docs/advanced-features/middleware) in `middleware.tsx` that handles redirects (4): +4. Create a [middleware](https://nextjs.org/docs/advanced-features/middleware) in `middleware.tsx` that handles redirects (4): ```tsx import {createIntlMiddleware} from 'next-intl/server'; diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index e3e3d3c80..726526531 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -34,10 +34,9 @@ If you haven't done so already, [create a Next.js 13 app that uses the `app` dir │ ├── en.json │ └── ... └── app - ├── layout.tsx (5) └── [locale] - ├── layout.tsx (6) - └── page.tsx (7) + ├── layout.tsx (5) + └── page.tsx (6) ``` **Now, set up these files as follows:** @@ -96,15 +95,7 @@ export const config = { } ``` -5. Pass through children in `app/layout.tsx`: - -```tsx -export default function RootLayout({children}) { - return children; -} -``` - -6. Provide the document layout and set up `NextIntlServerProvider` in `app/[locale]/layout.tsx`: +5. Provide the document layout and set up `NextIntlServerProvider` in `app/[locale]/layout.tsx`: ```tsx import {NextIntlServerProvider} from 'next-intl/server'; @@ -127,7 +118,7 @@ export default async function LocaleLayout({children, params: {locale}}) { } ``` -7. Use translations in your page component in `app/[locale]/page.tsx` or anywhere else! +6. Use translations in your page component in `app/[locale]/page.tsx` or anywhere else! ```tsx import {useTranslations} from 'next-intl'; From eecdae9557419a2446dd5a9f7235ee76f21351c7 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 9 Jan 2023 13:42:52 +0100 Subject: [PATCH 066/312] Add roadmap about RSC to docs --- packages/website/pages/docs/next-13/server-components.mdx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 726526531..f6d92b1f5 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -20,6 +20,14 @@ npm install next-intl@2.11.0-alpha.5 This preview version was tested with `next@13.1.0`. +## Roadmap + +- ✅ All APIs from `next-intl` can be used in Server Components. +- 🚧 Bugs were discovered that probably need to be resolved upstream (workarounds are available). +- 🚧 The API to provide configuration to `next-intl` is still in flux. + +For details, see the [pending pull request for Server Components support](https://github.com/amannn/next-intl/pull/149). + ## Getting started If you haven't done so already, [create a Next.js 13 app that uses the `app` directory](https://beta.nextjs.org/docs/installation). The goal is to prefix all routes with the `locale`, so we can retrieve it as a [dynamic segment](https://beta.nextjs.org/docs/routing/defining-routes#dynamic-segments) and use it to configure `next-intl`. From 2a2f86f5919cf0326ca19af28e2ab0668d4381b2 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 9 Jan 2023 13:46:43 +0100 Subject: [PATCH 067/312] Clarify what upstream means [skip ci] --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index f6d92b1f5..d80da629a 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -23,7 +23,7 @@ This preview version was tested with `next@13.1.0`. ## Roadmap - ✅ All APIs from `next-intl` can be used in Server Components. -- 🚧 Bugs were discovered that probably need to be resolved upstream (workarounds are available). +- 🚧 Bugs were discovered that probably need to be resolved upstream in React/Next.js (workarounds are available). - 🚧 The API to provide configuration to `next-intl` is still in flux. For details, see the [pending pull request for Server Components support](https://github.com/amannn/next-intl/pull/149). From 2b929d3d50107c5b2c42ad8d54c05df3ec4e54f6 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 9 Jan 2023 19:57:32 +0100 Subject: [PATCH 068/312] Look ma, no `NextIntlServerProvider`! (#164) --- .../src/app/[locale]/NextIntlProvider.tsx | 19 ------- .../src/app/[locale]/head.tsx | 17 +----- .../src/app/[locale]/layout.tsx | 18 ++---- .../src/components/CurrentTime.tsx | 2 +- .../src/middleware.tsx | 13 ++++- .../tests/main.spec.ts | 12 +++- .../src/app/[locale]/layout.tsx | 19 ++----- packages/example-next-13/src/middleware.tsx | 3 +- .../next-intl/src/react-server/useConfig.tsx | 12 ++-- .../next-intl/src/react-server/useLocale.tsx | 4 +- .../next-intl/src/react-server/useNow.tsx | 4 +- .../src/react-server/useRuntimeConfig.tsx | 13 +++++ .../src/react-server/useTimeZone.tsx | 4 +- .../next-intl/src/server/NextIntlConfig.tsx | 7 ++- .../server/NextIntlServerRuntimeContext.tsx | 55 ------------------- .../src/server/ServerRuntimeSerializer.tsx | 24 ++++++++ .../src/server/createIntlMiddleware.tsx | 35 +++++++++--- packages/next-intl/src/server/index.tsx | 1 - .../next-intl/src/server/resolveLocale.tsx | 6 +- packages/next-intl/src/shared/constants.tsx | 4 +- .../next-intl/src/shared/useCookieSync.tsx | 6 +- .../pages/docs/next-13/server-components.mdx | 41 ++++---------- 22 files changed, 136 insertions(+), 183 deletions(-) delete mode 100644 packages/example-next-13-advanced/src/app/[locale]/NextIntlProvider.tsx create mode 100644 packages/next-intl/src/react-server/useRuntimeConfig.tsx delete mode 100644 packages/next-intl/src/server/NextIntlServerRuntimeContext.tsx create mode 100644 packages/next-intl/src/server/ServerRuntimeSerializer.tsx diff --git a/packages/example-next-13-advanced/src/app/[locale]/NextIntlProvider.tsx b/packages/example-next-13-advanced/src/app/[locale]/NextIntlProvider.tsx deleted file mode 100644 index af35a89b5..000000000 --- a/packages/example-next-13-advanced/src/app/[locale]/NextIntlProvider.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import {NextIntlServerProvider} from 'next-intl/server'; -import {ReactNode} from 'react'; - -type Props = { - children: ReactNode; - locale: string; -}; - -/** - * Configures `NextIntlServerProvider`, so the configuration can - * be shared among `layout.tsx` as well as `head.tsx`. - */ -export default function NextIntlProvider({children, locale}: Props) { - return ( - - {children} - - ); -} diff --git a/packages/example-next-13-advanced/src/app/[locale]/head.tsx b/packages/example-next-13-advanced/src/app/[locale]/head.tsx index 4c63d241f..e4f83c0b6 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/head.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/head.tsx @@ -1,21 +1,6 @@ import {useTranslations} from 'next-intl'; -import NextIntlProvider from './NextIntlProvider'; -type Props = { - params: { - locale: string; - }; -}; - -export default function Head({params: {locale}}: Props) { - return ( - - - - ); -} - -function Meta() { +export default function Head() { const t = useTranslations('Meta'); return ( <> diff --git a/packages/example-next-13-advanced/src/app/[locale]/layout.tsx b/packages/example-next-13-advanced/src/app/[locale]/layout.tsx index f93a2a14e..a406a8c14 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/layout.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/layout.tsx @@ -1,25 +1,15 @@ +import {useLocale} from 'next-intl'; import {ReactNode} from 'react'; -import i18n from '../../i18n'; -import NextIntlProvider from './NextIntlProvider'; - -export function generateStaticParams() { - return i18n.locales.map((locale) => ({locale})); -} type Props = { children: ReactNode; - params: {locale: string}; }; -export default async function LocaleLayout({ - children, - params: {locale} -}: Props) { +export default async function LocaleLayout({children}: Props) { + const locale = useLocale(); return ( - - {children} - + {children} ); } diff --git a/packages/example-next-13-advanced/src/components/CurrentTime.tsx b/packages/example-next-13-advanced/src/components/CurrentTime.tsx index e3f175b56..e147ccb45 100644 --- a/packages/example-next-13-advanced/src/components/CurrentTime.tsx +++ b/packages/example-next-13-advanced/src/components/CurrentTime.tsx @@ -6,7 +6,7 @@ export default function CurrentTime() { const timeZone = useTimeZone(); return ( -

+

{intl.formatDateTime(now, 'medium')} ({timeZone})

); diff --git a/packages/example-next-13-advanced/src/middleware.tsx b/packages/example-next-13-advanced/src/middleware.tsx index 11d9aaaa2..d18a1d66b 100644 --- a/packages/example-next-13-advanced/src/middleware.tsx +++ b/packages/example-next-13-advanced/src/middleware.tsx @@ -1,7 +1,16 @@ import {createIntlMiddleware} from 'next-intl/server'; -export default createIntlMiddleware(); +export default createIntlMiddleware({ + // By default the `timeZone` of the server + // is used, but this can be overridden. + timeZone: 'Europe/Vienna', + + // By default the current time of the server is used, + // but you can override this (e.g. for test assertions). + now: new Date('2020-01-01T00:00:00.000Z') +}); export const config = { - matcher: '/' + // Skip all internal paths + matcher: ['/((?!_next).*)'] }; diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index da790a05d..759517705 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -1,8 +1,8 @@ import {test as it, expect} from '@playwright/test'; -it('returns a 404 for unknown locales', async ({request}) => { - const response = await request.get('/unknown'); - expect(response.status()).toBe(404); +it('handles unknown locales', async ({page}) => { + await page.goto('/unknown'); + await expect(page).toHaveURL(/\/en/); }); it('redirects to a matched locale', async ({page}) => { @@ -139,3 +139,9 @@ it('can navigate between sibling pages that share a parent layout', async ({ await page.getByRole('link', {name: 'Nested page'}).click(); await expect(page).toHaveURL(/\/en\/nested/); }); + +it('can supply static values for runtime config', async ({page}) => { + await page.goto('/en'); + const element = page.getByTestId('StaticRuntimeConfig'); + await expect(element).toHaveText('Jan 1, 2020, 01:00 (Europe/Vienna)'); +}); diff --git a/packages/example-next-13/src/app/[locale]/layout.tsx b/packages/example-next-13/src/app/[locale]/layout.tsx index 83de6e01c..167035ac5 100644 --- a/packages/example-next-13/src/app/[locale]/layout.tsx +++ b/packages/example-next-13/src/app/[locale]/layout.tsx @@ -1,31 +1,20 @@ -import {NextIntlServerProvider} from 'next-intl/server'; +import {useLocale} from 'next-intl'; import {ReactNode} from 'react'; -import i18n from '../../i18n'; - -export function generateStaticParams() { - return i18n.locales.map((locale) => ({locale})); -} type Props = { children: ReactNode; params: {locale: string}; }; -export default async function LocaleLayout({ - children, - params: {locale} -}: Props) { +export default async function LocaleLayout({children}: Props) { + const locale = useLocale(); return ( next-intl - - - {children} - - + {children} ); } diff --git a/packages/example-next-13/src/middleware.tsx b/packages/example-next-13/src/middleware.tsx index 11d9aaaa2..0722689e1 100644 --- a/packages/example-next-13/src/middleware.tsx +++ b/packages/example-next-13/src/middleware.tsx @@ -3,5 +3,6 @@ import {createIntlMiddleware} from 'next-intl/server'; export default createIntlMiddleware(); export const config = { - matcher: '/' + // Skip all internal paths + matcher: ['/((?!_next).*)'] }; diff --git a/packages/next-intl/src/react-server/useConfig.tsx b/packages/next-intl/src/react-server/useConfig.tsx index b63d502c6..2f5cccd32 100644 --- a/packages/next-intl/src/react-server/useConfig.tsx +++ b/packages/next-intl/src/react-server/useConfig.tsx @@ -1,18 +1,18 @@ import {use} from 'react'; import getIntlContextValue from 'use-intl/dist/src/react/getIntlContextValue'; -import {useServerRuntimeConfig} from '../server/NextIntlServerRuntimeContext'; import staticConfig from '../server/staticConfig'; +import useRuntimeConfig from './useRuntimeConfig'; function isPromise(value: any): value is Promise { return value != null && typeof value.then === 'function'; } export default function useConfig() { - const providerConfig = useServerRuntimeConfig(); + const {locale, now, timeZone} = useRuntimeConfig(); function getStaticConfig() { const {getMessages, ...rest} = staticConfig; - const messagesOrPromise = getMessages?.(providerConfig); + const messagesOrPromise = getMessages?.({locale}); // Only promises can be unwrapped const messages = isPromise(messagesOrPromise) @@ -22,5 +22,9 @@ export default function useConfig() { return {messages, ...rest}; } - return getIntlContextValue({...getStaticConfig(), ...providerConfig}); + const opts = {...getStaticConfig(), locale}; + if (now != null) opts.now = now; + if (timeZone != null) opts.timeZone = timeZone; + + return getIntlContextValue(opts); } diff --git a/packages/next-intl/src/react-server/useLocale.tsx b/packages/next-intl/src/react-server/useLocale.tsx index 4670509a8..9a43d2d2f 100644 --- a/packages/next-intl/src/react-server/useLocale.tsx +++ b/packages/next-intl/src/react-server/useLocale.tsx @@ -1,5 +1,5 @@ -import useConfig from './useConfig'; +import useRuntimeConfig from './useRuntimeConfig'; export default function useLocale() { - return useConfig().locale; + return useRuntimeConfig().locale; } diff --git a/packages/next-intl/src/react-server/useNow.tsx b/packages/next-intl/src/react-server/useNow.tsx index 7ade0bf7d..ed848717b 100644 --- a/packages/next-intl/src/react-server/useNow.tsx +++ b/packages/next-intl/src/react-server/useNow.tsx @@ -1,5 +1,5 @@ -import useConfig from './useConfig'; +import useRuntimeConfig from './useRuntimeConfig'; export default function useNow() { - return useConfig().now; + return useRuntimeConfig().now; } diff --git a/packages/next-intl/src/react-server/useRuntimeConfig.tsx b/packages/next-intl/src/react-server/useRuntimeConfig.tsx new file mode 100644 index 000000000..9e0a1d6d5 --- /dev/null +++ b/packages/next-intl/src/react-server/useRuntimeConfig.tsx @@ -0,0 +1,13 @@ +import {headers} from 'next/headers'; +import ServerRuntimeSerializer from '../server/ServerRuntimeSerializer'; +import {HEADER_CONFIG_NAME} from '../shared/constants'; + +export default function useRuntimeConfig() { + const value = headers().get(HEADER_CONFIG_NAME); + if (!value) { + throw new Error( + 'Unable to find `next-intl` runtime config, have you configured the middleware?`' + ); + } + return ServerRuntimeSerializer.deserialize(value); +} diff --git a/packages/next-intl/src/react-server/useTimeZone.tsx b/packages/next-intl/src/react-server/useTimeZone.tsx index feced1ab5..bc0e2a7f5 100644 --- a/packages/next-intl/src/react-server/useTimeZone.tsx +++ b/packages/next-intl/src/react-server/useTimeZone.tsx @@ -1,5 +1,5 @@ -import useConfig from './useConfig'; +import useRuntimeConfig from './useRuntimeConfig'; export default function useTimeZone() { - return useConfig().timeZone; + return useRuntimeConfig().timeZone; } diff --git a/packages/next-intl/src/server/NextIntlConfig.tsx b/packages/next-intl/src/server/NextIntlConfig.tsx index df7279439..d632fc3dc 100644 --- a/packages/next-intl/src/server/NextIntlConfig.tsx +++ b/packages/next-intl/src/server/NextIntlConfig.tsx @@ -18,6 +18,11 @@ type NextIntlConfig = { ): AbstractIntlMessages | Promise; } & Pick< IntlProviderProps, - 'defaultTranslationValues' | 'formats' | 'onError' | 'getMessageFallback' + | 'defaultTranslationValues' + | 'formats' + | 'onError' + | 'getMessageFallback' + | 'now' + | 'timeZone' >; export default NextIntlConfig; diff --git a/packages/next-intl/src/server/NextIntlServerRuntimeContext.tsx b/packages/next-intl/src/server/NextIntlServerRuntimeContext.tsx deleted file mode 100644 index 894b304ef..000000000 --- a/packages/next-intl/src/server/NextIntlServerRuntimeContext.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import {notFound} from 'next/navigation'; -// @ts-expect-error `cSC` is not officially released yet -import React, {createServerContext, use} from 'react'; -import IntlProviderProps from 'use-intl/dist/react/IntlProviderProps'; -import {NextIntlRuntimeConfig} from './NextIntlConfig'; -import SyncLocaleCookie from './SyncLocaleCookie'; -import staticConfig from './staticConfig'; - -const NextIntlServerRuntimeContext = createServerContext( - 'next-intl', - undefined -); - -export function useServerRuntimeConfig() { - let value: NextIntlRuntimeConfig; - try { - value = use(NextIntlServerRuntimeContext) as NextIntlRuntimeConfig; - } catch (error) { - throw new Error( - "Currently all hooks from next-intl (like `useTranslations`) can only be used in Server Components that are not marked with `async`. We're working on removing this limitation.\n\nFor now, you can work around this by removing the `async` keyword and instead using the `use` hook from React to unwrap async values. See https://beta.nextjs.org/docs/data-fetching/fetching#use-in-client-components" - ); - } - - if (!value) { - throw new Error( - 'No intl context found. Have you configured `NextIntlServerProvider`?' - ); - } - - return value; -} - -export function NextIntlServerProvider({ - children, - locale, - now, - timeZone -}: IntlProviderProps) { - if (!staticConfig.locales.includes(locale)) { - notFound(); - } - - return ( - - {children} - - - ); -} diff --git a/packages/next-intl/src/server/ServerRuntimeSerializer.tsx b/packages/next-intl/src/server/ServerRuntimeSerializer.tsx new file mode 100644 index 000000000..d53ee0f41 --- /dev/null +++ b/packages/next-intl/src/server/ServerRuntimeSerializer.tsx @@ -0,0 +1,24 @@ +import {NextIntlRuntimeConfig} from './NextIntlConfig'; + +const SEPARATOR = '&'; + +export default class ServerRuntimeSerializer { + public static serialize(config: NextIntlRuntimeConfig) { + return [config.locale, config.now?.getTime(), config.timeZone].join( + SEPARATOR + ); + } + + public static deserialize(value: string) { + const [locale, nowTimestampString, timeZoneValue] = value.split(SEPARATOR); + return { + locale, + // Can be an empty string + now: nowTimestampString + ? new Date(parseInt(nowTimestampString)) + : undefined, + // Can be an empty string + timeZone: timeZoneValue || undefined + }; + } +} diff --git a/packages/next-intl/src/server/createIntlMiddleware.tsx b/packages/next-intl/src/server/createIntlMiddleware.tsx index d275fd600..53a1e1c4e 100644 --- a/packages/next-intl/src/server/createIntlMiddleware.tsx +++ b/packages/next-intl/src/server/createIntlMiddleware.tsx @@ -1,11 +1,19 @@ import {NextRequest, NextResponse} from 'next/server'; +import {HEADER_CONFIG_NAME} from '../shared/constants'; +import ServerRuntimeSerializer from './ServerRuntimeSerializer'; import resolveLocale from './resolveLocale'; import staticConfig from './staticConfig'; // If there's an exact match for this path, we'll add the locale to the URL -const REDIRECT_URL = '/'; +const ROOT_URL = '/'; + +export default function createIntlMiddleware(opts?: { + now?: Date; + timeZone?: string; +}) { + const now = opts?.now ?? new Date(); + const timeZone = opts?.timeZone; -export default function createIntlMiddleware() { const i18n = { locales: staticConfig.locales, defaultLocale: staticConfig.defaultLocale @@ -21,13 +29,26 @@ export default function createIntlMiddleware() { request.nextUrl.pathname ); + const isUnknownLocale = !request.nextUrl.pathname.startsWith('/' + locale); + const isAtRoot = request.nextUrl.pathname === ROOT_URL; + + const shouldRedirect = isUnknownLocale || isAtRoot; + let response; - if (request.nextUrl.pathname === REDIRECT_URL) { - response = NextResponse.redirect( - new URL(REDIRECT_URL + locale, request.url) - ); + if (shouldRedirect) { + response = NextResponse.redirect(new URL(ROOT_URL + locale, request.url)); } else { - response = NextResponse.next(); + response = NextResponse.next({ + request: { + headers: new Headers({ + [HEADER_CONFIG_NAME]: ServerRuntimeSerializer.serialize({ + locale, + now, + timeZone + }) + }) + } + }); } return response; diff --git a/packages/next-intl/src/server/index.tsx b/packages/next-intl/src/server/index.tsx index 4912c3d6d..736f7e1c4 100644 --- a/packages/next-intl/src/server/index.tsx +++ b/packages/next-intl/src/server/index.tsx @@ -3,4 +3,3 @@ */ export {default as createIntlMiddleware} from './createIntlMiddleware'; -export {NextIntlServerProvider} from './NextIntlServerRuntimeContext'; diff --git a/packages/next-intl/src/server/resolveLocale.tsx b/packages/next-intl/src/server/resolveLocale.tsx index 6850d5d52..ab0ff847a 100644 --- a/packages/next-intl/src/server/resolveLocale.tsx +++ b/packages/next-intl/src/server/resolveLocale.tsx @@ -1,6 +1,6 @@ import acceptLanguageParser from 'accept-language-parser'; import {RequestCookies} from 'next/dist/server/web/spec-extension/cookies'; -import {LOCALE_COOKIE_NAME} from '../shared/constants'; +import {COOKIE_LOCALE_NAME} from '../shared/constants'; import NextIntlConfig from './NextIntlConfig'; export default function resolveLocale( @@ -24,8 +24,8 @@ export default function resolveLocale( // Prio 2: Use existing cookie if (!locale && requestCookies) { - if (requestCookies.has(LOCALE_COOKIE_NAME)) { - locale = requestCookies.get(LOCALE_COOKIE_NAME)?.value; + if (requestCookies.has(COOKIE_LOCALE_NAME)) { + locale = requestCookies.get(COOKIE_LOCALE_NAME)?.value; } } diff --git a/packages/next-intl/src/shared/constants.tsx b/packages/next-intl/src/shared/constants.tsx index 09c3e06f6..71cbf9c21 100644 --- a/packages/next-intl/src/shared/constants.tsx +++ b/packages/next-intl/src/shared/constants.tsx @@ -1,3 +1,5 @@ // Reuse the legacy cookie name // https://nextjs.org/docs/advanced-features/i18n-routing#leveraging-the-next_locale-cookie -export const LOCALE_COOKIE_NAME = 'NEXT_LOCALE'; +export const COOKIE_LOCALE_NAME = 'NEXT_LOCALE'; + +export const HEADER_CONFIG_NAME = 'x-next-intl-config'; diff --git a/packages/next-intl/src/shared/useCookieSync.tsx b/packages/next-intl/src/shared/useCookieSync.tsx index 87a7f328c..7c9488faf 100644 --- a/packages/next-intl/src/shared/useCookieSync.tsx +++ b/packages/next-intl/src/shared/useCookieSync.tsx @@ -1,5 +1,5 @@ import {useEffect} from 'react'; -import {LOCALE_COOKIE_NAME} from './constants'; +import {COOKIE_LOCALE_NAME} from './constants'; /** * This is necessary so the middleware only has to match @@ -9,11 +9,11 @@ export default function useCookieSync(locale: string) { useEffect(() => { const cookie = document.cookie .split(';') - .find((cur) => cur.includes(LOCALE_COOKIE_NAME + '=')); + .find((cur) => cur.includes(COOKIE_LOCALE_NAME + '=')); const prevLocale = cookie?.split('=')?.[1]; if (prevLocale !== locale) { - document.cookie = `${LOCALE_COOKIE_NAME}=${locale}; path=/; expires=Fri, 31 Dec 9999 23:59:59 GMT`; + document.cookie = `${COOKIE_LOCALE_NAME}=${locale}; path=/; expires=Fri, 31 Dec 9999 23:59:59 GMT`; } }, [locale]); } diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index d80da629a..cbd827b32 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -15,7 +15,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current preview version ``` -npm install next-intl@2.11.0-alpha.5 +npm install next-intl@2.11.0-alpha.8 ``` This preview version was tested with `next@13.1.0`. @@ -23,8 +23,8 @@ This preview version was tested with `next@13.1.0`. ## Roadmap - ✅ All APIs from `next-intl` can be used in Server Components. -- 🚧 Bugs were discovered that probably need to be resolved upstream in React/Next.js (workarounds are available). - 🚧 The API to provide configuration to `next-intl` is still in flux. +- 🚧 Currently page transitions trigger a full page refresh (under investigation). For details, see the [pending pull request for Server Components support](https://github.com/amannn/next-intl/pull/149). @@ -43,8 +43,7 @@ If you haven't done so already, [create a Next.js 13 app that uses the `app` dir │ └── ... └── app └── [locale] - ├── layout.tsx (5) - └── page.tsx (6) + └── page.tsx (5) ``` **Now, set up these files as follows:** @@ -77,19 +76,22 @@ module.exports = { }; ``` -3. Create a [middleware](https://nextjs.org/docs/advanced-features/middleware) that handles redirects in `middleware.tsx`: +3. Create a [middleware](https://nextjs.org/docs/advanced-features/middleware) in `middleware.tsx`: ```tsx import {createIntlMiddleware} from 'next-intl/server'; -// This middleware intercepts requests to `/` and will redirect +// The middleware intercepts requests to `/` and will redirect // to one of the configured locales instead (e.g. `/en`). // In the background a cookie is set that will remember the // locale of the last page that the user has visited. +// The middleware furthermore passes runtime configuration +// to components in your app. export default createIntlMiddleware(); export const config = { - matcher: '/' + // Skip all internal paths + matcher: ['/((?!_next).*)'] }; ``` @@ -103,30 +105,7 @@ export const config = { } ``` -5. Provide the document layout and set up `NextIntlServerProvider` in `app/[locale]/layout.tsx`: - -```tsx -import {NextIntlServerProvider} from 'next-intl/server'; -import i18n from '../../i18n'; - -export function generateStaticParams() { - return i18n.locales.map((locale) => ({locale})); -} - -export default async function LocaleLayout({children, params: {locale}}) { - return ( - - - - {children} - - - - ); -} -``` - -6. Use translations in your page component in `app/[locale]/page.tsx` or anywhere else! +5. Use translations in your page component in `app/[locale]/page.tsx` or anywhere else! ```tsx import {useTranslations} from 'next-intl'; From 7913b3b74d9e343b0cad5e297e71c99fb9774630 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 9 Jan 2023 20:19:17 +0100 Subject: [PATCH 069/312] Docs wording [skip ci] --- packages/website/pages/docs/next-13/server-components.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index cbd827b32..e4619b305 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -30,7 +30,7 @@ For details, see the [pending pull request for Server Components support](https: ## Getting started -If you haven't done so already, [create a Next.js 13 app that uses the `app` directory](https://beta.nextjs.org/docs/installation). The goal is to prefix all routes with the `locale`, so we can retrieve it as a [dynamic segment](https://beta.nextjs.org/docs/routing/defining-routes#dynamic-segments) and use it to configure `next-intl`. +If you haven't done so already, [create a Next.js 13 app that uses the `app` directory](https://beta.nextjs.org/docs/installation). All routes should be moved within a `[locale]` folder so that we can use this segment to provide content in different languages. **Start by creating the following file structure:** @@ -116,7 +116,7 @@ export default function Index() { } ``` -That's all it takes! Now you can internationalize your apps without adding i18n features to your client bundle. +That's all it takes! Now you can internationalize your apps purely on the server side. If you've encountered an issue, you can [explore the code for a working example](https://github.com/amannn/next-intl-example-next-13) ([demo](https://next-intl-example-next-13.vercel.app)). From 9a39e2a88dae11c5915780023e7218454f3c4fc6 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 10 Jan 2023 12:46:32 +0100 Subject: [PATCH 070/312] Remove client-side cookie sync in favour of middleware cookie --- .../src/client/NextIntlClientProvider.tsx | 3 --- .../next-intl/src/server/SyncLocaleCookie.tsx | 12 ------------ .../src/server/createIntlMiddleware.tsx | 5 +++-- .../next-intl/src/shared/useCookieSync.tsx | 19 ------------------- 4 files changed, 3 insertions(+), 36 deletions(-) delete mode 100644 packages/next-intl/src/server/SyncLocaleCookie.tsx delete mode 100644 packages/next-intl/src/shared/useCookieSync.tsx diff --git a/packages/next-intl/src/client/NextIntlClientProvider.tsx b/packages/next-intl/src/client/NextIntlClientProvider.tsx index 12b6ff14d..c8fd4c84e 100644 --- a/packages/next-intl/src/client/NextIntlClientProvider.tsx +++ b/packages/next-intl/src/client/NextIntlClientProvider.tsx @@ -3,7 +3,6 @@ import {useRouter} from 'next/router'; import React, {ComponentProps} from 'react'; import {IntlProvider} from 'use-intl'; -import useCookieSync from '../shared/useCookieSync'; type Props = Omit, 'locale'> & { locale?: string; @@ -37,8 +36,6 @@ export default function NextIntlClientProvider({ ); } - useCookieSync(locale); - return ( {children} diff --git a/packages/next-intl/src/server/SyncLocaleCookie.tsx b/packages/next-intl/src/server/SyncLocaleCookie.tsx deleted file mode 100644 index 637f2a547..000000000 --- a/packages/next-intl/src/server/SyncLocaleCookie.tsx +++ /dev/null @@ -1,12 +0,0 @@ -'use client'; - -import useCookieSync from '../shared/useCookieSync'; - -type Props = { - locale: string; -}; - -export default function SyncLocaleCookie({locale}: Props) { - useCookieSync(locale); - return null; -} diff --git a/packages/next-intl/src/server/createIntlMiddleware.tsx b/packages/next-intl/src/server/createIntlMiddleware.tsx index 53a1e1c4e..f2c419c13 100644 --- a/packages/next-intl/src/server/createIntlMiddleware.tsx +++ b/packages/next-intl/src/server/createIntlMiddleware.tsx @@ -1,5 +1,5 @@ import {NextRequest, NextResponse} from 'next/server'; -import {HEADER_CONFIG_NAME} from '../shared/constants'; +import {COOKIE_LOCALE_NAME, HEADER_CONFIG_NAME} from '../shared/constants'; import ServerRuntimeSerializer from './ServerRuntimeSerializer'; import resolveLocale from './resolveLocale'; import staticConfig from './staticConfig'; @@ -31,7 +31,6 @@ export default function createIntlMiddleware(opts?: { const isUnknownLocale = !request.nextUrl.pathname.startsWith('/' + locale); const isAtRoot = request.nextUrl.pathname === ROOT_URL; - const shouldRedirect = isUnknownLocale || isAtRoot; let response; @@ -51,6 +50,8 @@ export default function createIntlMiddleware(opts?: { }); } + response.cookies.set(COOKIE_LOCALE_NAME, locale); + return response; }; } diff --git a/packages/next-intl/src/shared/useCookieSync.tsx b/packages/next-intl/src/shared/useCookieSync.tsx deleted file mode 100644 index 7c9488faf..000000000 --- a/packages/next-intl/src/shared/useCookieSync.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import {useEffect} from 'react'; -import {COOKIE_LOCALE_NAME} from './constants'; - -/** - * This is necessary so the middleware only has to match - * on the root path, but we can keep the cookie in sync. - */ -export default function useCookieSync(locale: string) { - useEffect(() => { - const cookie = document.cookie - .split(';') - .find((cur) => cur.includes(COOKIE_LOCALE_NAME + '=')); - - const prevLocale = cookie?.split('=')?.[1]; - if (prevLocale !== locale) { - document.cookie = `${COOKIE_LOCALE_NAME}=${locale}; path=/; expires=Fri, 31 Dec 9999 23:59:59 GMT`; - } - }, [locale]); -} From 984bc6213f2fdcc1d21d755136d436d75f42bd3d Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 10 Jan 2023 13:00:40 +0100 Subject: [PATCH 071/312] Upgrade Next.js --- .../example-next-13-advanced/package.json | 2 +- .../example-next-13-advanced/src/i18n.tsx | 5 +- packages/example-next-13/package.json | 2 +- packages/next-intl/package.json | 2 +- .../pages/docs/next-13/server-components.mdx | 2 +- yarn.lock | 148 +++++++++--------- 6 files changed, 81 insertions(+), 80 deletions(-) diff --git a/packages/example-next-13-advanced/package.json b/packages/example-next-13-advanced/package.json index 63159465e..cbc642826 100644 --- a/packages/example-next-13-advanced/package.json +++ b/packages/example-next-13-advanced/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "lodash": "^4.17.21", - "next": "^13.1.0", + "next": "^13.1.1", "next-intl": "*", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/example-next-13-advanced/src/i18n.tsx b/packages/example-next-13-advanced/src/i18n.tsx index 558342d55..e5b297795 100644 --- a/packages/example-next-13-advanced/src/i18n.tsx +++ b/packages/example-next-13-advanced/src/i18n.tsx @@ -3,7 +3,6 @@ import {IntlError, NextIntlConfig} from 'next-intl'; const i18n: NextIntlConfig = { locales: ['en', 'de'], defaultLocale: 'en', - async getMessages({locale}) { return (await import(`../messages/${locale}.json`)).default; }, @@ -23,7 +22,9 @@ const i18n: NextIntlConfig = { onError(error: IntlError) { if ( error.message === - 'MISSING_MESSAGE: Could not resolve `missing` in `Index`.' + (process.env.NODE_ENV === 'production' + ? 'MISSING_MESSAGE' + : 'MISSING_MESSAGE: Could not resolve `missing` in `Index`.') ) { // Do nothing, this error is triggered on purpose } else { diff --git a/packages/example-next-13/package.json b/packages/example-next-13/package.json index e74a39b6d..a161e8340 100644 --- a/packages/example-next-13/package.json +++ b/packages/example-next-13/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "lodash": "^4.17.21", - "next": "^13.1.0", + "next": "^13.1.1", "next-intl": "^2.10.2", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 00e7f1fb9..1caa20c8c 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -71,7 +71,7 @@ "dts-cli": "1.4.0", "eslint": "8.12.0", "eslint-config-molindo": "6.0.0", - "next": "^13.1.0", + "next": "^13.1.1", "react": "^18.2.0", "react-dom": "^18.2.0", "typescript": "^4.4.4" diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index e4619b305..dea40f361 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -18,7 +18,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. npm install next-intl@2.11.0-alpha.8 ``` -This preview version was tested with `next@13.1.0`. +This preview version was tested with `next@13.1.1`. ## Roadmap diff --git a/yarn.lock b/yarn.lock index 7c84d79d8..79839fd67 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2301,10 +2301,10 @@ resolved "https://registry.yarnpkg.com/@next/env/-/env-13.0.0.tgz#38527956680693c90b4522ab4ab9a2fbe3a17f67" integrity sha512-65v9BVuah2Mplohm4+efsKEnoEuhmlGm8B2w6vD1geeEP2wXtlSJCvR/cCRJ3fD8wzCQBV41VcMBQeYET6MRkg== -"@next/env@13.1.0": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.0.tgz#fdb4d4711c6bd544dd80f0afd9846af2699b8c1c" - integrity sha512-6iNixFzCndH+Bl4FetQzOMjxCJqg8fs0LAlZviig1K6mIjOWH2m2oPcHcOg1Ta5VCe7Bx5KG1Hs+NrWDUkBt9A== +"@next/env@13.1.1": + version "13.1.1" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.1.tgz#6ff26488dc7674ef2bfdd1ca28fe43eed1113bea" + integrity sha512-vFMyXtPjSAiOXOywMojxfKIqE3VWN5RCAx+tT3AS3pcKjMLFTCJFUWsKv8hC+87Z1F4W3r68qTwDFZIFmd5Xkw== "@next/eslint-plugin-next@12.0.1": version "12.0.1" @@ -2330,10 +2330,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.0.tgz#15cd89d19d3c00d123fdfe367bab38c362f6c515" integrity sha512-+DUQkYF93gxFjWY+CYWE1QDX6gTgnUiWf+W4UqZjM1Jcef8U97fS6xYh+i+8rH4MM0AXHm7OSakvfOMzmjU6VA== -"@next/swc-android-arm-eabi@13.1.0": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.0.tgz#b754f03c1af5572e950993b00cbc189d063e7642" - integrity sha512-ANBZZRjZBV+Sii11ZVxbxSvfIi6dZwu4w+XnJBDmz+0/wtAigpjYWyMkuWZ/RCD7INdusOlU4EgJ99WzWGIDjA== +"@next/swc-android-arm-eabi@13.1.1": + version "13.1.1" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.1.tgz#b5c3cd1f79d5c7e6a3b3562785d4e5ac3555b9e1" + integrity sha512-qnFCx1kT3JTWhWve4VkeWuZiyjG0b5T6J2iWuin74lORCupdrNukxkq9Pm+Z7PsatxuwVJMhjUoYz7H4cWzx2A== "@next/swc-android-arm64@12.1.4": version "12.1.4" @@ -2345,10 +2345,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.0.0.tgz#9410365bb07097268d4773a46b02cfe6b3fe3ab7" integrity sha512-RW9Uy3bMSc0zVGCa11klFuwfP/jdcdkhdruqnrJ7v+7XHm6OFKkSRzX6ee7yGR1rdDZvTnP4GZSRSpzjLv/N0g== -"@next/swc-android-arm64@13.1.0": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.0.tgz#8794b4c1680ed8825b9a0e9ae5b3d14cd0ad9f07" - integrity sha512-nPwbkS3aZjCIe61wztgjXjIeylijOP8uGtDGjjJVUF3B/5GLVx3ngZu6tjPTMEgaLM0u//HuGK+aZolWUQWE4g== +"@next/swc-android-arm64@13.1.1": + version "13.1.1" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.1.tgz#e2ca9ccbba9ef770cb19fbe96d1ac00fe4cb330d" + integrity sha512-eCiZhTzjySubNqUnNkQCjU3Fh+ep3C6b5DCM5FKzsTH/3Gr/4Y7EiaPZKILbvnXmhWtKPIdcY6Zjx51t4VeTfA== "@next/swc-darwin-arm64@12.1.4": version "12.1.4" @@ -2360,10 +2360,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.0.tgz#caf262fb5cb8bb335f6f344fd67a44dc8bf6a084" integrity sha512-APA26nps1j4qyhOIzkclW/OmgotVHj1jBxebSpMCPw2rXfiNvKNY9FA0TcuwPmUCNqaTnm703h6oW4dvp73A4Q== -"@next/swc-darwin-arm64@13.1.0": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.0.tgz#c7aeb19e53ee06f333b3af1a192a9a5b5b583755" - integrity sha512-0hUydiAW18jK2uGPnZRdnRQtdB/3ZoPo84A6zH7MJHxAWw9lzVsv3kMg9kgVBBlrivzqdNN8rdgA+eYNxzXU9w== +"@next/swc-darwin-arm64@13.1.1": + version "13.1.1" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.1.tgz#4af00877332231bbd5a3703435fdd0b011e74767" + integrity sha512-9zRJSSIwER5tu9ADDkPw5rIZ+Np44HTXpYMr0rkM656IvssowPxmhK0rTreC1gpUCYwFsRbxarUJnJsTWiutPg== "@next/swc-darwin-x64@12.1.4": version "12.1.4" @@ -2375,20 +2375,20 @@ resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.0.tgz#6b214753410e1d8512a1491045acea1e188df7d6" integrity sha512-qsUhUdoFuRJiaJ7LnvTQ6GZv1QnMDcRXCIjxaN0FNVXwrjkq++U7KjBUaxXkRzLV4C7u0NHLNOp0iZwNNE7ypw== -"@next/swc-darwin-x64@13.1.0": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.0.tgz#2efe163863cf8a72d71b9f72b31b6c1c94f7213a" - integrity sha512-3S3iQqJIysklj0Q9gnanuYMzF8H9p+fUVhvSHxVVLcKH4HsE8EGddNkXsaOyznL1kC6vGKw7h6uz1ojaXEafCA== +"@next/swc-darwin-x64@13.1.1": + version "13.1.1" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.1.tgz#bf4cb09e7e6ec6d91e031118dde2dd17078bcbbc" + integrity sha512-qWr9qEn5nrnlhB0rtjSdR00RRZEtxg4EGvicIipqZWEyayPxhUu6NwKiG8wZiYZCLfJ5KWr66PGSNeDMGlNaiA== "@next/swc-freebsd-x64@13.0.0": version "13.0.0" resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.0.tgz#eeb176bdb585f48882bdac1d04271b918ca87590" integrity sha512-sCdyCbboS7CwdnevKH9J6hkJI76LUw1jVWt4eV7kISuLiPba3JmehZSWm80oa4ADChRVAwzhLAo2zJaYRrInbg== -"@next/swc-freebsd-x64@13.1.0": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.0.tgz#bf80e44d0aae021104a4c80f1056d0b13f1b7ba7" - integrity sha512-wAgzwm/em48GIuWq3OYr0BpncMy7c+UA3hsyX+xKh/vb/sOIpQly7JTa+GNdk17s7kprhMfsgzPG3da36NLpkA== +"@next/swc-freebsd-x64@13.1.1": + version "13.1.1" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.1.tgz#6933ea1264328e8523e28818f912cd53824382d4" + integrity sha512-UwP4w/NcQ7V/VJEj3tGVszgb4pyUCt3lzJfUhjDMUmQbzG9LDvgiZgAGMYH6L21MoyAATJQPDGiAMWAPKsmumA== "@next/swc-linux-arm-gnueabihf@12.1.4": version "12.1.4" @@ -2400,10 +2400,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.0.tgz#2c2a9622c93f87a8baca94e068f674da4cae6018" integrity sha512-/X/VxfFA41C9jrEv+sUsPLQ5vbDPVIgG0CJrzKvrcc+b+4zIgPgtfsaWq9ockjHFQi3ycvlZK4TALOXO8ovQ6Q== -"@next/swc-linux-arm-gnueabihf@13.1.0": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.0.tgz#71ecac0482bfc7ad4bbe15ae7609cc8119772a0c" - integrity sha512-Cr2hzL7ad+4nj9KrR1Cz1RDcsWa61X6I7gc6PToRYIY4gL480Sijq19xo7dlXQPnr1viVzbNiNnNXZASHv7uvw== +"@next/swc-linux-arm-gnueabihf@13.1.1": + version "13.1.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.1.tgz#b5896967aaba3873d809c3ad2e2039e89acde419" + integrity sha512-CnsxmKHco9sosBs1XcvCXP845Db+Wx1G0qouV5+Gr+HT/ZlDYEWKoHVDgnJXLVEQzq4FmHddBNGbXvgqM1Gfkg== "@next/swc-linux-arm64-gnu@12.1.4": version "12.1.4" @@ -2415,10 +2415,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.0.tgz#69505827e2928fb18034150fd4d754d54c4a1c4b" integrity sha512-x6Oxr1GIi0ZtNiT6jbw+JVcbEi3UQgF7mMmkrgfL4mfchOwXtWSHKTSSPnwoJWJfXYa0Vy1n8NElWNTGAqoWFw== -"@next/swc-linux-arm64-gnu@13.1.0": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.0.tgz#212c2e3f092c8de9a97bbb13a2754271ec38ad90" - integrity sha512-EjCIKfeZB9h72evL2yGNwBvE5Im96Zn7o2zxImlvCiUYb/xXDqn4hzhck035BSP3g3sGDLfijFTE1wKRyXIk4w== +"@next/swc-linux-arm64-gnu@13.1.1": + version "13.1.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.1.tgz#91b3e9ea8575b1ded421c0ea0739b7bccf228469" + integrity sha512-JfDq1eri5Dif+VDpTkONRd083780nsMCOKoFG87wA0sa4xL8LGcXIBAkUGIC1uVy9SMsr2scA9CySLD/i+Oqiw== "@next/swc-linux-arm64-musl@12.1.4": version "12.1.4" @@ -2430,10 +2430,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.0.tgz#487a88f2583a046e882328fe0665b37eca4fd0f6" integrity sha512-SnMH9ngI+ipGh3kqQ8+mDtWunirwmhQnQeZkEq9e/9Xsgjf04OetqrqRHKM1HmJtG2qMUJbyXFJ0F81TPuT+3g== -"@next/swc-linux-arm64-musl@13.1.0": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.0.tgz#950c757b929b84aa359f3f9c3a5d90704d5c8f45" - integrity sha512-WAsZtCtPXlz/7/bnW9ryw856xEun+c6xSwZwbcvrMxtcSiW3z0LD91Nsj3AkexsjRtBjeEpNeVtDExqF2VKKSA== +"@next/swc-linux-arm64-musl@13.1.1": + version "13.1.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.1.tgz#83149ea05d7d55f3664d608dbe004c0d125f9147" + integrity sha512-GA67ZbDq2AW0CY07zzGt07M5b5Yaq5qUpFIoW3UFfjOPgb0Sqf3DAW7GtFMK1sF4ROHsRDMGQ9rnT0VM2dVfKA== "@next/swc-linux-x64-gnu@12.1.4": version "12.1.4" @@ -2445,10 +2445,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.0.tgz#29e89c7e4fd2e2b16ad059076f6261998aee53df" integrity sha512-VSQwTX9EmdbotArtA1J67X8964oQfe0xHb32x4tu+JqTR+wOHyG6wGzPMdXH2oKAp6rdd7BzqxUXXf0J+ypHlw== -"@next/swc-linux-x64-gnu@13.1.0": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.0.tgz#f60582199b2d2ba763deb3355e205733bf408c20" - integrity sha512-Tjd5gieI3X9vPce5yF+GsQxOl0jwUkyOrTR1g5PQr+bT/9Qos/yPL48H1L5ayEp0hxgLVPW7skGal7lVnAoVEQ== +"@next/swc-linux-x64-gnu@13.1.1": + version "13.1.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.1.tgz#d7d0777b56de0dd82b78055772e13e18594a15ca" + integrity sha512-nnjuBrbzvqaOJaV+XgT8/+lmXrSCOt1YYZn/irbDb2fR2QprL6Q7WJNgwsZNxiLSfLdv+2RJGGegBx9sLBEzGA== "@next/swc-linux-x64-musl@12.1.4": version "12.1.4" @@ -2460,10 +2460,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.0.tgz#2f63aae922d2b2829aec21bf8f9adda8b6c16365" integrity sha512-xBCP0nnpO0q4tsytXkvIwWFINtbFRyVY5gxa1zB0vlFtqYR9lNhrOwH3CBrks3kkeaePOXd611+8sjdUtrLnXA== -"@next/swc-linux-x64-musl@13.1.0": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.0.tgz#3a95a243521f5d07985aa6308200d3834e73282b" - integrity sha512-H9UMEQv40e9pkgdX4mCms0dDf2dimmZ6WXhDTWF/yIh9icgcsHaP73BJ9IFlgvh80wLiUgWZ3LAX4vXnXzidmg== +"@next/swc-linux-x64-musl@13.1.1": + version "13.1.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.1.tgz#41655722b127133cd95ab5bc8ca1473e9ab6876f" + integrity sha512-CM9xnAQNIZ8zf/igbIT/i3xWbQZYaF397H+JroF5VMOCUleElaMdQLL5riJml8wUfPoN3dtfn2s4peSr3azz/g== "@next/swc-win32-arm64-msvc@12.1.4": version "12.1.4" @@ -2475,10 +2475,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.0.tgz#4117bad96c2a6775f70294fba45c63951a8a21ac" integrity sha512-NutwDafqhGxqPj/eiUixJq9ImS/0sgx6gqlD7jRndCvQ2Q8AvDdu1+xKcGWGNnhcDsNM/n1avf1e62OG1GaqJg== -"@next/swc-win32-arm64-msvc@13.1.0": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.0.tgz#7cc6d467c769dff23ecb9c3953b4429e4ca9f3f8" - integrity sha512-LFFIKjW/cPl4wvG8HF/6oYPJZ+Jy32G3FUflC8UW1Od6W9yOSEvadhk9fMyDZN4cgsNOcVc3uVSMpcuuCpbDGw== +"@next/swc-win32-arm64-msvc@13.1.1": + version "13.1.1" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.1.tgz#f10da3dfc9b3c2bbd202f5d449a9b807af062292" + integrity sha512-pzUHOGrbgfGgPlOMx9xk3QdPJoRPU+om84hqVoe6u+E0RdwOG0Ho/2UxCgDqmvpUrMab1Deltlt6RqcXFpnigQ== "@next/swc-win32-ia32-msvc@12.1.4": version "12.1.4" @@ -2490,10 +2490,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.0.tgz#5914eb86f9ea92a00d76cb094dd9734b3bf2012c" integrity sha512-zNaxaO+Kl/xNz02E9QlcVz0pT4MjkXGDLb25qxtAzyJL15aU0+VjjbIZAYWctG59dvggNIUNDWgoBeVTKB9xLg== -"@next/swc-win32-ia32-msvc@13.1.0": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.0.tgz#7bf1ed77d80b86c04cea12ecdf6ac4bf54b5160c" - integrity sha512-MBLaoHZSenMdxhB3Ww1VNEhjyPT3uLjzAi5Ygk48LLLbOGu5KxQolhINRrqGuJWqJRNWSJ9JSFBfJrZwQzrUew== +"@next/swc-win32-ia32-msvc@13.1.1": + version "13.1.1" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.1.tgz#4c0102b9b18ece15c818056d07e3917ee9dade78" + integrity sha512-WeX8kVS46aobM9a7Xr/kEPcrTyiwJqQv/tbw6nhJ4fH9xNZ+cEcyPoQkwPo570dCOLz3Zo9S2q0E6lJ/EAUOBg== "@next/swc-win32-x64-msvc@12.1.4": version "12.1.4" @@ -2505,10 +2505,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.0.tgz#c54a5a739dee04b20338d305226a2acdf701f67f" integrity sha512-FFOGGWwTCRMu9W7MF496Urefxtuo2lttxF1vwS+1rIRsKvuLrWhVaVTj3T8sf2EBL6gtJbmh4TYlizS+obnGKA== -"@next/swc-win32-x64-msvc@13.1.0": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.0.tgz#2e23251a84b95182249132480d55fb122a7ae4f0" - integrity sha512-fFTfIQvnmpbKoyh4v3ezlGqtERlgc2Sx8qJwPuYqoVi0V08wCx9wp2Iq1CINxP3UMHkEeNX7gYpDOd+9Cw9EiQ== +"@next/swc-win32-x64-msvc@13.1.1": + version "13.1.1" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.1.tgz#c209a37da13be27b722f9c40c40ab4b094866244" + integrity sha512-mVF0/3/5QAc5EGVnb8ll31nNvf3BWpPY4pBb84tk+BfQglWLqc5AC9q1Ht/YMWiEgs8ALNKEQ3GQnbY0bJF2Gg== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -9235,30 +9235,30 @@ next@^13.0.0: "@next/swc-win32-ia32-msvc" "13.0.0" "@next/swc-win32-x64-msvc" "13.0.0" -next@^13.1.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/next/-/next-13.1.0.tgz#fe65eff07dbdb08c8c925876cffdaf59d4552b32" - integrity sha512-lQMZH1V94L5IL/WaihQkTYabSY73aqgrkGPJB5uz+2O3ES4I3losV/maXLY7l7x5e+oNyE9N81upNQ8uRsR5/A== +next@^13.1.1: + version "13.1.1" + resolved "https://registry.yarnpkg.com/next/-/next-13.1.1.tgz#42b825f650410649aff1017d203a088d77c80b5b" + integrity sha512-R5eBAaIa3X7LJeYvv1bMdGnAVF4fVToEjim7MkflceFPuANY3YyvFxXee/A+acrSYwYPvOvf7f6v/BM/48ea5w== dependencies: - "@next/env" "13.1.0" + "@next/env" "13.1.1" "@swc/helpers" "0.4.14" caniuse-lite "^1.0.30001406" postcss "8.4.14" styled-jsx "5.1.1" optionalDependencies: - "@next/swc-android-arm-eabi" "13.1.0" - "@next/swc-android-arm64" "13.1.0" - "@next/swc-darwin-arm64" "13.1.0" - "@next/swc-darwin-x64" "13.1.0" - "@next/swc-freebsd-x64" "13.1.0" - "@next/swc-linux-arm-gnueabihf" "13.1.0" - "@next/swc-linux-arm64-gnu" "13.1.0" - "@next/swc-linux-arm64-musl" "13.1.0" - "@next/swc-linux-x64-gnu" "13.1.0" - "@next/swc-linux-x64-musl" "13.1.0" - "@next/swc-win32-arm64-msvc" "13.1.0" - "@next/swc-win32-ia32-msvc" "13.1.0" - "@next/swc-win32-x64-msvc" "13.1.0" + "@next/swc-android-arm-eabi" "13.1.1" + "@next/swc-android-arm64" "13.1.1" + "@next/swc-darwin-arm64" "13.1.1" + "@next/swc-darwin-x64" "13.1.1" + "@next/swc-freebsd-x64" "13.1.1" + "@next/swc-linux-arm-gnueabihf" "13.1.1" + "@next/swc-linux-arm64-gnu" "13.1.1" + "@next/swc-linux-arm64-musl" "13.1.1" + "@next/swc-linux-x64-gnu" "13.1.1" + "@next/swc-linux-x64-musl" "13.1.1" + "@next/swc-win32-arm64-msvc" "13.1.1" + "@next/swc-win32-ia32-msvc" "13.1.1" + "@next/swc-win32-x64-msvc" "13.1.1" nextra-theme-docs@2.0.0-alpha.44: version "2.0.0-alpha.44" From ed528331bd9dcb916530d0efa0e7e10bf9013a44 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 10 Jan 2023 13:04:15 +0100 Subject: [PATCH 072/312] Bump alpha version [skip ci] --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index dea40f361..3c8026c20 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -15,7 +15,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current preview version ``` -npm install next-intl@2.11.0-alpha.8 +npm install next-intl@2.11.0-alpha.9 ``` This preview version was tested with `next@13.1.1`. From 3fe6907474589d599e504d0d4971b8ec279f8347 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 10 Jan 2023 14:22:41 +0100 Subject: [PATCH 073/312] Get rid of full page reloads --- .../src/middleware.tsx | 10 +---- .../tests/main.spec.ts | 6 --- .../next-intl/src/react-server/useConfig.tsx | 7 +-- .../next-intl/src/react-server/useLocale.tsx | 22 ++++++++- .../next-intl/src/react-server/useNow.tsx | 4 +- .../src/react-server/useRuntimeConfig.tsx | 13 ------ .../src/react-server/useTimeZone.tsx | 4 +- .../src/server/ServerRuntimeSerializer.tsx | 24 ---------- .../src/server/createIntlMiddleware.tsx | 45 ++++++++++--------- packages/next-intl/src/shared/constants.tsx | 3 +- .../pages/docs/next-13/server-components.mdx | 1 - 11 files changed, 52 insertions(+), 87 deletions(-) delete mode 100644 packages/next-intl/src/react-server/useRuntimeConfig.tsx delete mode 100644 packages/next-intl/src/server/ServerRuntimeSerializer.tsx diff --git a/packages/example-next-13-advanced/src/middleware.tsx b/packages/example-next-13-advanced/src/middleware.tsx index d18a1d66b..0722689e1 100644 --- a/packages/example-next-13-advanced/src/middleware.tsx +++ b/packages/example-next-13-advanced/src/middleware.tsx @@ -1,14 +1,6 @@ import {createIntlMiddleware} from 'next-intl/server'; -export default createIntlMiddleware({ - // By default the `timeZone` of the server - // is used, but this can be overridden. - timeZone: 'Europe/Vienna', - - // By default the current time of the server is used, - // but you can override this (e.g. for test assertions). - now: new Date('2020-01-01T00:00:00.000Z') -}); +export default createIntlMiddleware(); export const config = { // Skip all internal paths diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index 759517705..47399b4ec 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -139,9 +139,3 @@ it('can navigate between sibling pages that share a parent layout', async ({ await page.getByRole('link', {name: 'Nested page'}).click(); await expect(page).toHaveURL(/\/en\/nested/); }); - -it('can supply static values for runtime config', async ({page}) => { - await page.goto('/en'); - const element = page.getByTestId('StaticRuntimeConfig'); - await expect(element).toHaveText('Jan 1, 2020, 01:00 (Europe/Vienna)'); -}); diff --git a/packages/next-intl/src/react-server/useConfig.tsx b/packages/next-intl/src/react-server/useConfig.tsx index 2f5cccd32..b0a85e121 100644 --- a/packages/next-intl/src/react-server/useConfig.tsx +++ b/packages/next-intl/src/react-server/useConfig.tsx @@ -1,14 +1,14 @@ import {use} from 'react'; import getIntlContextValue from 'use-intl/dist/src/react/getIntlContextValue'; import staticConfig from '../server/staticConfig'; -import useRuntimeConfig from './useRuntimeConfig'; +import useLocale from './useLocale'; function isPromise(value: any): value is Promise { return value != null && typeof value.then === 'function'; } export default function useConfig() { - const {locale, now, timeZone} = useRuntimeConfig(); + const locale = useLocale(); function getStaticConfig() { const {getMessages, ...rest} = staticConfig; @@ -23,8 +23,5 @@ export default function useConfig() { } const opts = {...getStaticConfig(), locale}; - if (now != null) opts.now = now; - if (timeZone != null) opts.timeZone = timeZone; - return getIntlContextValue(opts); } diff --git a/packages/next-intl/src/react-server/useLocale.tsx b/packages/next-intl/src/react-server/useLocale.tsx index 9a43d2d2f..a4b72c7dc 100644 --- a/packages/next-intl/src/react-server/useLocale.tsx +++ b/packages/next-intl/src/react-server/useLocale.tsx @@ -1,5 +1,23 @@ -import useRuntimeConfig from './useRuntimeConfig'; +import {cookies, headers} from 'next/headers'; +import {COOKIE_LOCALE_NAME, HEADER_LOCALE_NAME} from '../shared/constants'; export default function useLocale() { - return useRuntimeConfig().locale; + let locale; + + // A header is only set when we're changing the locale, + // otherwise we reuse an existing one from a cookie. + const requestHeaders = headers(); + if (requestHeaders.has(HEADER_LOCALE_NAME)) { + locale = requestHeaders.get(HEADER_LOCALE_NAME); + } else { + locale = cookies().get(COOKIE_LOCALE_NAME)?.value; + } + + if (!locale) { + throw new Error( + 'Unable to find `next-intl` locale, have you configured the middleware?`' + ); + } + + return locale; } diff --git a/packages/next-intl/src/react-server/useNow.tsx b/packages/next-intl/src/react-server/useNow.tsx index ed848717b..7ade0bf7d 100644 --- a/packages/next-intl/src/react-server/useNow.tsx +++ b/packages/next-intl/src/react-server/useNow.tsx @@ -1,5 +1,5 @@ -import useRuntimeConfig from './useRuntimeConfig'; +import useConfig from './useConfig'; export default function useNow() { - return useRuntimeConfig().now; + return useConfig().now; } diff --git a/packages/next-intl/src/react-server/useRuntimeConfig.tsx b/packages/next-intl/src/react-server/useRuntimeConfig.tsx deleted file mode 100644 index 9e0a1d6d5..000000000 --- a/packages/next-intl/src/react-server/useRuntimeConfig.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import {headers} from 'next/headers'; -import ServerRuntimeSerializer from '../server/ServerRuntimeSerializer'; -import {HEADER_CONFIG_NAME} from '../shared/constants'; - -export default function useRuntimeConfig() { - const value = headers().get(HEADER_CONFIG_NAME); - if (!value) { - throw new Error( - 'Unable to find `next-intl` runtime config, have you configured the middleware?`' - ); - } - return ServerRuntimeSerializer.deserialize(value); -} diff --git a/packages/next-intl/src/react-server/useTimeZone.tsx b/packages/next-intl/src/react-server/useTimeZone.tsx index bc0e2a7f5..feced1ab5 100644 --- a/packages/next-intl/src/react-server/useTimeZone.tsx +++ b/packages/next-intl/src/react-server/useTimeZone.tsx @@ -1,5 +1,5 @@ -import useRuntimeConfig from './useRuntimeConfig'; +import useConfig from './useConfig'; export default function useTimeZone() { - return useRuntimeConfig().timeZone; + return useConfig().timeZone; } diff --git a/packages/next-intl/src/server/ServerRuntimeSerializer.tsx b/packages/next-intl/src/server/ServerRuntimeSerializer.tsx deleted file mode 100644 index d53ee0f41..000000000 --- a/packages/next-intl/src/server/ServerRuntimeSerializer.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import {NextIntlRuntimeConfig} from './NextIntlConfig'; - -const SEPARATOR = '&'; - -export default class ServerRuntimeSerializer { - public static serialize(config: NextIntlRuntimeConfig) { - return [config.locale, config.now?.getTime(), config.timeZone].join( - SEPARATOR - ); - } - - public static deserialize(value: string) { - const [locale, nowTimestampString, timeZoneValue] = value.split(SEPARATOR); - return { - locale, - // Can be an empty string - now: nowTimestampString - ? new Date(parseInt(nowTimestampString)) - : undefined, - // Can be an empty string - timeZone: timeZoneValue || undefined - }; - } -} diff --git a/packages/next-intl/src/server/createIntlMiddleware.tsx b/packages/next-intl/src/server/createIntlMiddleware.tsx index f2c419c13..a1b5d76e0 100644 --- a/packages/next-intl/src/server/createIntlMiddleware.tsx +++ b/packages/next-intl/src/server/createIntlMiddleware.tsx @@ -1,19 +1,12 @@ import {NextRequest, NextResponse} from 'next/server'; -import {COOKIE_LOCALE_NAME, HEADER_CONFIG_NAME} from '../shared/constants'; -import ServerRuntimeSerializer from './ServerRuntimeSerializer'; +import {COOKIE_LOCALE_NAME, HEADER_LOCALE_NAME} from '../shared/constants'; import resolveLocale from './resolveLocale'; import staticConfig from './staticConfig'; // If there's an exact match for this path, we'll add the locale to the URL const ROOT_URL = '/'; -export default function createIntlMiddleware(opts?: { - now?: Date; - timeZone?: string; -}) { - const now = opts?.now ?? new Date(); - const timeZone = opts?.timeZone; - +export default function createIntlMiddleware() { const i18n = { locales: staticConfig.locales, defaultLocale: staticConfig.defaultLocale @@ -30,27 +23,35 @@ export default function createIntlMiddleware(opts?: { ); const isUnknownLocale = !request.nextUrl.pathname.startsWith('/' + locale); - const isAtRoot = request.nextUrl.pathname === ROOT_URL; - const shouldRedirect = isUnknownLocale || isAtRoot; + const isRoot = request.nextUrl.pathname === ROOT_URL; + const shouldRedirect = isUnknownLocale || isRoot; + const isChangingLocale = + request.cookies.get(COOKIE_LOCALE_NAME)?.value !== locale; let response; if (shouldRedirect) { response = NextResponse.redirect(new URL(ROOT_URL + locale, request.url)); } else { - response = NextResponse.next({ - request: { - headers: new Headers({ - [HEADER_CONFIG_NAME]: ServerRuntimeSerializer.serialize({ - locale, - now, - timeZone + let responseInit; + + // Only apply a header if absolutely necessary + // as this causes full page reloads + if (isChangingLocale) { + responseInit = { + request: { + headers: new Headers({ + [HEADER_LOCALE_NAME]: locale }) - }) - } - }); + } + }; + } + + response = NextResponse.next(responseInit); } - response.cookies.set(COOKIE_LOCALE_NAME, locale); + if (isChangingLocale) { + response.cookies.set(COOKIE_LOCALE_NAME, locale); + } return response; }; diff --git a/packages/next-intl/src/shared/constants.tsx b/packages/next-intl/src/shared/constants.tsx index 71cbf9c21..c509bca9f 100644 --- a/packages/next-intl/src/shared/constants.tsx +++ b/packages/next-intl/src/shared/constants.tsx @@ -2,4 +2,5 @@ // https://nextjs.org/docs/advanced-features/i18n-routing#leveraging-the-next_locale-cookie export const COOKIE_LOCALE_NAME = 'NEXT_LOCALE'; -export const HEADER_CONFIG_NAME = 'x-next-intl-config'; +// Should take precedence over the cookie +export const HEADER_LOCALE_NAME = 'X-NEXT-INTL-LOCALE'; diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 3c8026c20..c654cef5f 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -24,7 +24,6 @@ This preview version was tested with `next@13.1.1`. - ✅ All APIs from `next-intl` can be used in Server Components. - 🚧 The API to provide configuration to `next-intl` is still in flux. -- 🚧 Currently page transitions trigger a full page refresh (under investigation). For details, see the [pending pull request for Server Components support](https://github.com/amannn/next-intl/pull/149). From 5bbd8adf600f34012b0a779f6ae6c9a7fbd62be4 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 10 Jan 2023 14:41:48 +0100 Subject: [PATCH 074/312] Bump version --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index c654cef5f..fdbe15e48 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -15,7 +15,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current preview version ``` -npm install next-intl@2.11.0-alpha.9 +npm install next-intl@2.11.0-alpha.10 ``` This preview version was tested with `next@13.1.1`. From ea131aeff6721a5074ef9430ca36ced27cc64b65 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 12 Jan 2023 11:50:38 +0100 Subject: [PATCH 075/312] Fix middleware redirecting non-page requests --- .../example-next-13-advanced/messages/de.json | 3 ++ .../example-next-13-advanced/messages/en.json | 3 ++ .../src/app/[locale]/layout.tsx | 10 +++++- .../src/app/not-found.tsx | 14 ++++++++ .../tests/main.spec.ts | 6 ++-- .../src/server/createIntlMiddleware.tsx | 4 +-- .../pages/docs/next-13/server-components.mdx | 33 +++++++++++++++++-- 7 files changed, 65 insertions(+), 8 deletions(-) create mode 100644 packages/example-next-13-advanced/src/app/not-found.tsx diff --git a/packages/example-next-13-advanced/messages/de.json b/packages/example-next-13-advanced/messages/de.json index 5fc4ac022..72157281a 100644 --- a/packages/example-next-13-advanced/messages/de.json +++ b/packages/example-next-13-advanced/messages/de.json @@ -22,6 +22,9 @@ "client": "Client-Seite", "nested": "Verschachtelte Seite" }, + "NotFound": { + "title": "Diese Seite wurde nicht gefunden (404)" + }, "LocaleSwitcher": { "switchLocale": "Zu {locale, select, de {Deutsch} en {Englisch} other {Unbekannt}} wechseln" }, diff --git a/packages/example-next-13-advanced/messages/en.json b/packages/example-next-13-advanced/messages/en.json index fe49de4de..df7e20c64 100644 --- a/packages/example-next-13-advanced/messages/en.json +++ b/packages/example-next-13-advanced/messages/en.json @@ -22,6 +22,9 @@ "client": "Client page", "nested": "Nested page" }, + "NotFound": { + "title": "This page was not found (404)" + }, "LocaleSwitcher": { "switchLocale": "Switch to {locale, select, de {German} en {English} other {Unknown}}" }, diff --git a/packages/example-next-13-advanced/src/app/[locale]/layout.tsx b/packages/example-next-13-advanced/src/app/[locale]/layout.tsx index a406a8c14..da5f580d2 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/layout.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/layout.tsx @@ -1,12 +1,20 @@ import {useLocale} from 'next-intl'; +import {notFound} from 'next/navigation'; import {ReactNode} from 'react'; type Props = { children: ReactNode; + params: {locale: string}; }; -export default async function LocaleLayout({children}: Props) { +export default function LocaleLayout({children, params}: Props) { const locale = useLocale(); + + // Show a 404 error for unknown locales + if (params.locale !== locale) { + notFound(); + } + return ( {children} diff --git a/packages/example-next-13-advanced/src/app/not-found.tsx b/packages/example-next-13-advanced/src/app/not-found.tsx new file mode 100644 index 000000000..5c04b266b --- /dev/null +++ b/packages/example-next-13-advanced/src/app/not-found.tsx @@ -0,0 +1,14 @@ +import {useLocale, useTranslations} from 'next-intl'; + +export default function NotFound() { + const locale = useLocale(); + const t = useTranslations('NotFound'); + + return ( + + +

{t('title')}

+ + + ); +} diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index 47399b4ec..c0741e783 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -1,8 +1,10 @@ import {test as it, expect} from '@playwright/test'; it('handles unknown locales', async ({page}) => { - await page.goto('/unknown'); - await expect(page).toHaveURL(/\/en/); + const response = await page.goto('/unknown'); + expect(response?.status()).toBe(404); + await expect(page).toHaveURL(/\/unknown/); + page.getByRole('heading', {name: 'This page was not found (404)'}); }); it('redirects to a matched locale', async ({page}) => { diff --git a/packages/next-intl/src/server/createIntlMiddleware.tsx b/packages/next-intl/src/server/createIntlMiddleware.tsx index a1b5d76e0..100c2644f 100644 --- a/packages/next-intl/src/server/createIntlMiddleware.tsx +++ b/packages/next-intl/src/server/createIntlMiddleware.tsx @@ -22,14 +22,12 @@ export default function createIntlMiddleware() { request.nextUrl.pathname ); - const isUnknownLocale = !request.nextUrl.pathname.startsWith('/' + locale); const isRoot = request.nextUrl.pathname === ROOT_URL; - const shouldRedirect = isUnknownLocale || isRoot; const isChangingLocale = request.cookies.get(COOKIE_LOCALE_NAME)?.value !== locale; let response; - if (shouldRedirect) { + if (isRoot) { response = NextResponse.redirect(new URL(ROOT_URL + locale, request.url)); } else { let responseInit; diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index fdbe15e48..970ba5e9a 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -42,7 +42,8 @@ If you haven't done so already, [create a Next.js 13 app that uses the `app` dir │ └── ... └── app └── [locale] - └── page.tsx (5) + ├── layout.tsx (5) + └── page.tsx (6) ``` **Now, set up these files as follows:** @@ -104,7 +105,35 @@ export const config = { } ``` -5. Use translations in your page component in `app/[locale]/page.tsx` or anywhere else! +5. Provide the matched `locale` to the document in `app/[locale]/layout.tsx`. + +```tsx +import {useLocale} from 'next-intl'; +import {notFound} from 'next/navigation'; +import {ReactNode} from 'react'; + +type Props = { + children: ReactNode; + params: {locale: string}; +}; + +export default function LocaleLayout({children, params}: Props) { + const locale = useLocale(); + + // Show a 404 error for unknown locales + if (params.locale !== locale) { + notFound(); + } + + return ( + + {children} + + ); +} +``` + +6. Use translations in your page component in `app/[locale]/page.tsx` or anywhere else! ```tsx import {useTranslations} from 'next-intl'; From 15c925d8caee1bf3dbb2ea847338a0da677e8285 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 12 Jan 2023 12:00:19 +0100 Subject: [PATCH 076/312] Bump version [skip ci] --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 970ba5e9a..4663f8cb9 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -15,7 +15,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current preview version ``` -npm install next-intl@2.11.0-alpha.10 +npm install next-intl@2.11.0-alpha.11 ``` This preview version was tested with `next@13.1.1`. From fe64eb31abf55947409cc86c38e9a2b4d50491e5 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 12 Jan 2023 14:43:03 +0100 Subject: [PATCH 077/312] Plugin instead of custom config --- .../example-next-13-advanced/next.config.js | 13 ++--- packages/example-next-13/next.config.js | 14 ++--- packages/next-intl/package.json | 7 ++- packages/next-intl/withNextIntl.d.ts | 5 ++ packages/next-intl/withNextIntl.js | 52 +++++++++++++++++++ .../pages/docs/next-13/server-components.mdx | 16 +++--- 6 files changed, 79 insertions(+), 28 deletions(-) create mode 100644 packages/next-intl/withNextIntl.d.ts create mode 100644 packages/next-intl/withNextIntl.js diff --git a/packages/example-next-13-advanced/next.config.js b/packages/example-next-13-advanced/next.config.js index 2d9e6e541..d14a4887d 100644 --- a/packages/example-next-13-advanced/next.config.js +++ b/packages/example-next-13-advanced/next.config.js @@ -1,8 +1,5 @@ -module.exports = { - experimental: {appDir: true}, - webpack(config) { - config.resolve.alias['next-intl/config'] = - require.resolve('./src/i18n.tsx'); - return config; - } -}; +const withNextIntl = require('next-intl/withNextIntl'); + +module.exports = withNextIntl({ + experimental: {appDir: true} +}); diff --git a/packages/example-next-13/next.config.js b/packages/example-next-13/next.config.js index b8989194d..d14a4887d 100644 --- a/packages/example-next-13/next.config.js +++ b/packages/example-next-13/next.config.js @@ -1,9 +1,5 @@ -/** @type {import('next').NextConfig} */ -module.exports = { - experimental: {appDir: true}, - webpack(config) { - config.resolve.alias['next-intl/config'] = - require.resolve('./src/i18n.tsx'); - return config; - } -}; +const withNextIntl = require('next-intl/withNextIntl'); + +module.exports = withNextIntl({ + experimental: {appDir: true} +}); diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 1caa20c8c..2b8b5f263 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -29,7 +29,8 @@ }, "./server": "./dist/src/server/index.js", "./client": "./dist/src/client/index.js", - "./config": "./config.js" + "./config": "./config.js", + "./withNextIntl": "./withNextIntl.js" }, "files": [ "dist", @@ -38,7 +39,9 @@ "server.d.ts", "client.js", "client.d.ts", - "config.js" + "config.js", + "withNextIntl.js", + "withNextIntl.d.ts" ], "keywords": [ "react", diff --git a/packages/next-intl/withNextIntl.d.ts b/packages/next-intl/withNextIntl.d.ts new file mode 100644 index 000000000..97e0c8bf3 --- /dev/null +++ b/packages/next-intl/withNextIntl.d.ts @@ -0,0 +1,5 @@ +import {NextConfig} from 'next'; + +type NextConfigWithI18n = NextConfig & {i18nConfig?: string}; + +export default function withNextIntl(config: NextConfigWithI18n): NextConfig; diff --git a/packages/next-intl/withNextIntl.js b/packages/next-intl/withNextIntl.js new file mode 100644 index 000000000..44826d5a8 --- /dev/null +++ b/packages/next-intl/withNextIntl.js @@ -0,0 +1,52 @@ +/* eslint-env node */ + +const fs = require('fs'); +const path = require('path'); + +module.exports = function withNextIntl(enhancedNextConfig = {}) { + // eslint-disable-next-line prefer-const + let {i18nConfig, ...nextConfig} = enhancedNextConfig; + + if (i18nConfig) { + i18nConfig = path.resolve(i18nConfig); + + if (!fs.existsSync(i18nConfig)) { + throw new Error( + `Could not find i18n config at ${i18nConfig}, please provide a valid path for \`i18nConfig\`.` + ); + } + } else { + i18nConfig = [ + './i18n.tsx', + './i18n.ts', + './i18n.js', + './i18n.jsx', + './src/i18n.tsx', + './src/i18n.ts', + './src/i18n.js', + './src/i18n.jsx' + ] + .map((cur) => path.resolve(cur)) + .find((cur) => fs.existsSync(cur)); + + if (!i18nConfig) { + throw new Error(`\n\nCould not locale i18n config. Create one at \`./(src/)i18n.{js,jsx,ts,tsx}\` or specify a custom location via \`i18nConfig\`: + +module.exports = withNextIntl({ + i18nConfig: './config/i18n.tsx' +});\n`); + } + } + + return Object.assign({}, nextConfig, { + webpack(config, options) { + config.resolve.alias['next-intl/config'] = require.resolve(i18nConfig); + + if (typeof nextConfig.webpack === 'function') { + return nextConfig.webpack(config, options); + } + + return config; + } + }); +}; diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 4663f8cb9..d655aa881 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -64,16 +64,14 @@ const config: NextIntlConfig = { export default config; ``` -2. Link to your configuration in `next.config.js`: +2. Add the plugin that provides your configuration to `next-intl` in `next.config.js`: ```js -module.exports = { - experimental: {appDir: true}, - webpack(config) { - config.resolve.alias['next-intl/config'] = require.resolve('./i18n.tsx'); - return config; - } -}; +const withNextIntl = require('next-intl/withNextIntl'); + +module.exports = withNextIntl({ + experimental: {appDir: true} +}); ``` 3. Create a [middleware](https://nextjs.org/docs/advanced-features/middleware) in `middleware.tsx`: @@ -85,7 +83,7 @@ import {createIntlMiddleware} from 'next-intl/server'; // to one of the configured locales instead (e.g. `/en`). // In the background a cookie is set that will remember the // locale of the last page that the user has visited. -// The middleware furthermore passes runtime configuration +// The middleware furthermore passes the resolved locale // to components in your app. export default createIntlMiddleware(); From b1c83ff4f11571cb988d8a9ef0707686bba0f08c Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 12 Jan 2023 15:01:06 +0100 Subject: [PATCH 078/312] 2.11.0-alpha.13 [skip ci] --- packages/website/pages/docs/next-13/server-components.mdx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index d655aa881..cc9959f91 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -15,7 +15,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current preview version ``` -npm install next-intl@2.11.0-alpha.11 +npm install next-intl@2.11.0-alpha.13 ``` This preview version was tested with `next@13.1.1`. @@ -64,12 +64,13 @@ const config: NextIntlConfig = { export default config; ``` -2. Add the plugin that provides your configuration to `next-intl` in `next.config.js`: +2. Add the plugin that passes your configuration to `next-intl` in `next.config.js`: ```js const withNextIntl = require('next-intl/withNextIntl'); module.exports = withNextIntl({ + i18nConfig: './i18n.tsx', // (default) experimental: {appDir: true} }); ``` From 565e3ad6c07c6ab742c8882bdddef1c5fca875cd Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 12 Jan 2023 15:17:19 +0100 Subject: [PATCH 079/312] Caching --- .../next-intl/src/react-server/useConfig.tsx | 26 ++++++++++--------- .../next-intl/src/react-server/useIntl.tsx | 4 +-- .../next-intl/src/react-server/useLocale.tsx | 7 ++++- .../src/react-server/useTranslations.tsx | 24 +++++++++-------- .../next-intl/src/server/NextIntlConfig.tsx | 4 +-- .../pages/docs/next-13/server-components.mdx | 2 -- 6 files changed, 36 insertions(+), 31 deletions(-) diff --git a/packages/next-intl/src/react-server/useConfig.tsx b/packages/next-intl/src/react-server/useConfig.tsx index b0a85e121..0df3e0d8a 100644 --- a/packages/next-intl/src/react-server/useConfig.tsx +++ b/packages/next-intl/src/react-server/useConfig.tsx @@ -1,4 +1,4 @@ -import {use} from 'react'; +import {use, useMemo} from 'react'; import getIntlContextValue from 'use-intl/dist/src/react/getIntlContextValue'; import staticConfig from '../server/staticConfig'; import useLocale from './useLocale'; @@ -10,18 +10,20 @@ function isPromise(value: any): value is Promise { export default function useConfig() { const locale = useLocale(); - function getStaticConfig() { - const {getMessages, ...rest} = staticConfig; - const messagesOrPromise = getMessages?.({locale}); + return useMemo(() => { + function getStaticConfig() { + const {getMessages, ...rest} = staticConfig; + const messagesOrPromise = getMessages?.({locale}); - // Only promises can be unwrapped - const messages = isPromise(messagesOrPromise) - ? use(messagesOrPromise) - : messagesOrPromise; + // Only promises can be unwrapped + const messages = isPromise(messagesOrPromise) + ? use(messagesOrPromise) + : messagesOrPromise; - return {messages, ...rest}; - } + return {messages, ...rest}; + } - const opts = {...getStaticConfig(), locale}; - return getIntlContextValue(opts); + const opts = {...getStaticConfig(), locale}; + return getIntlContextValue(opts); + }, [locale]); } diff --git a/packages/next-intl/src/react-server/useIntl.tsx b/packages/next-intl/src/react-server/useIntl.tsx index 7275546b3..8286fff86 100644 --- a/packages/next-intl/src/react-server/useIntl.tsx +++ b/packages/next-intl/src/react-server/useIntl.tsx @@ -1,9 +1,9 @@ +import {useMemo} from 'react'; import {createIntl} from 'use-intl/dist/src/core'; import useConfig from './useConfig'; export default function useIntl() { const config = useConfig(); - // TODO: Could be cached - return createIntl(config); + return useMemo(() => createIntl(config), [config]); } diff --git a/packages/next-intl/src/react-server/useLocale.tsx b/packages/next-intl/src/react-server/useLocale.tsx index a4b72c7dc..ff803c04d 100644 --- a/packages/next-intl/src/react-server/useLocale.tsx +++ b/packages/next-intl/src/react-server/useLocale.tsx @@ -1,7 +1,8 @@ import {cookies, headers} from 'next/headers'; +import {cache} from 'react'; import {COOKIE_LOCALE_NAME, HEADER_LOCALE_NAME} from '../shared/constants'; -export default function useLocale() { +const getLocale = cache(() => { let locale; // A header is only set when we're changing the locale, @@ -20,4 +21,8 @@ export default function useLocale() { } return locale; +}); + +export default function useLocale() { + return getLocale(); } diff --git a/packages/next-intl/src/react-server/useTranslations.tsx b/packages/next-intl/src/react-server/useTranslations.tsx index f62cc47e6..0b82b5135 100644 --- a/packages/next-intl/src/react-server/useTranslations.tsx +++ b/packages/next-intl/src/react-server/useTranslations.tsx @@ -1,3 +1,4 @@ +import {useMemo} from 'react'; import createBaseTranslator, { getMessagesOrError } from 'use-intl/dist/src/core/createBaseTranslator'; @@ -6,16 +7,17 @@ import useConfig from './useConfig'; export default function useTranslations(namespace?: string) { const config = useConfig(); - const messagesOrError = getMessagesOrError({ - messages: config.messages as any, - namespace, - onError: config.onError - }); + return useMemo(() => { + const messagesOrError = getMessagesOrError({ + messages: config.messages as any, + namespace, + onError: config.onError + }); - // TODO: We could cache this - return createBaseTranslator({ - ...config, - namespace, - messagesOrError - }); + return createBaseTranslator({ + ...config, + namespace, + messagesOrError + }); + }, [config, namespace]); } diff --git a/packages/next-intl/src/server/NextIntlConfig.tsx b/packages/next-intl/src/server/NextIntlConfig.tsx index d632fc3dc..949ade9a0 100644 --- a/packages/next-intl/src/server/NextIntlConfig.tsx +++ b/packages/next-intl/src/server/NextIntlConfig.tsx @@ -1,8 +1,6 @@ import AbstractIntlMessages from 'use-intl/dist/core/AbstractIntlMessages'; import IntlProviderProps from 'use-intl/dist/react/IntlProviderProps'; -// TODO: Move out of server? - export type NextIntlRuntimeConfig = Pick< IntlProviderProps, 'locale' | 'now' | 'timeZone' @@ -11,7 +9,6 @@ export type NextIntlRuntimeConfig = Pick< type NextIntlConfig = { locales: Array; defaultLocale: string; - // TODO: `domains` getMessages?( runtimeConfig: NextIntlRuntimeConfig @@ -25,4 +22,5 @@ type NextIntlConfig = { | 'now' | 'timeZone' >; + export default NextIntlConfig; diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index cc9959f91..7a378182f 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -8,8 +8,6 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. The `app` directory is currently in beta, patterns are still emerging and APIs may change. Please **use this at your own risk**, knowing that you might have to face a migration effort when the `app` directory becomes stable. - `next-intl` tries to stay up to date with the latest developments on the - Next.js side, but during this period there can be unexpected issues. ## Current preview version From 1b5e65ae1d6dd8c5e2d12edf56fd5b822db8662b Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 12 Jan 2023 15:47:22 +0100 Subject: [PATCH 080/312] Allow to use `useLocale` and `LocalizedLink` on the client side without a provider --- .../src/app/[locale]/page.tsx | 2 ++ .../ClientLocaleWithoutProvider.tsx | 14 +++++++++++ .../tests/main.spec.ts | 16 ++++++++++++ .../src/client/NextIntlClientProvider.tsx | 2 +- packages/next-intl/src/index.tsx | 18 ++++++++++--- .../next-intl/src/react-client/useLocale.tsx | 25 +++++++++++++++++++ 6 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 packages/example-next-13-advanced/src/components/ClientLocaleWithoutProvider.tsx create mode 100644 packages/next-intl/src/react-client/useLocale.tsx diff --git a/packages/example-next-13-advanced/src/app/[locale]/page.tsx b/packages/example-next-13-advanced/src/app/[locale]/page.tsx index 14bc12168..ae50d0aef 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/page.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/page.tsx @@ -1,4 +1,5 @@ import {useTranslations} from 'next-intl'; +import ClientLocaleWithoutProvider from '../../components/ClientLocaleWithoutProvider'; import CoreLibrary from '../../components/CoreLibrary'; import CurrentTime from '../../components/CurrentTime'; import LocaleSwitcher from '../../components/LocaleSwitcher'; @@ -27,6 +28,7 @@ export default function Index() { + ); } diff --git a/packages/example-next-13-advanced/src/components/ClientLocaleWithoutProvider.tsx b/packages/example-next-13-advanced/src/components/ClientLocaleWithoutProvider.tsx new file mode 100644 index 000000000..071759d38 --- /dev/null +++ b/packages/example-next-13-advanced/src/components/ClientLocaleWithoutProvider.tsx @@ -0,0 +1,14 @@ +'use client'; + +import {LocalizedLink, useLocale} from 'next-intl'; + +export default function ClientLocaleWithoutProvider() { + return ( + <> +

{useLocale()}

+
+ Client +
+ + ); +} diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index c0741e783..d9a95d296 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -141,3 +141,19 @@ it('can navigate between sibling pages that share a parent layout', async ({ await page.getByRole('link', {name: 'Nested page'}).click(); await expect(page).toHaveURL(/\/en\/nested/); }); + +it('can use the locale on the client side without using the provider', async ({ + page +}) => { + await page.goto('/en'); + + await expect( + page.getByTestId('ClientLocaleWithoutProvider-locale') + ).toHaveText('en'); + + await expect( + page + .getByTestId('ClientLocaleWithoutProvider-link') + .getByRole('link', {name: 'Client'}) + ).toHaveAttribute('href', '/en/client'); +}); diff --git a/packages/next-intl/src/client/NextIntlClientProvider.tsx b/packages/next-intl/src/client/NextIntlClientProvider.tsx index c8fd4c84e..1bc92161a 100644 --- a/packages/next-intl/src/client/NextIntlClientProvider.tsx +++ b/packages/next-intl/src/client/NextIntlClientProvider.tsx @@ -2,7 +2,7 @@ import {useRouter} from 'next/router'; import React, {ComponentProps} from 'react'; -import {IntlProvider} from 'use-intl'; +import {IntlProvider} from 'use-intl/dist/src/react'; type Props = Omit, 'locale'> & { locale?: string; diff --git a/packages/next-intl/src/index.tsx b/packages/next-intl/src/index.tsx index fdb8db802..4a2f17424 100644 --- a/packages/next-intl/src/index.tsx +++ b/packages/next-intl/src/index.tsx @@ -1,12 +1,22 @@ -import {useLocale} from 'use-intl'; +import useLocale from './react-client/useLocale'; import createLocalizedLinkComponent from './shared/createLocalizedLinkComponent'; /** - * Main entry that contains all APIs that are available - * on both the server as well as the client. + * This is the main entry file when non-'react-server' environments import + * from 'next-intl'. Make sure this mirrors the API from 'react-server'. */ -export * from 'use-intl'; +export * from 'use-intl/dist/src/core'; + +// Everything except for `useLocale`, as we provide an optimized implementation for that +export { + useTranslations, + useIntl, + useNow, + useTimeZone +} from 'use-intl/dist/src/react'; + +export {default as useLocale} from './react-client/useLocale'; export const LocalizedLink = createLocalizedLinkComponent(useLocale); export {default as NextIntlConfig} from './server/NextIntlConfig'; diff --git a/packages/next-intl/src/react-client/useLocale.tsx b/packages/next-intl/src/react-client/useLocale.tsx new file mode 100644 index 000000000..9047c109a --- /dev/null +++ b/packages/next-intl/src/react-client/useLocale.tsx @@ -0,0 +1,25 @@ +import {useLocale as useIntlLocale} from 'use-intl/dist/src/react'; +import {COOKIE_LOCALE_NAME} from '../shared/constants'; + +function getCookieValueByName(name: string) { + const value = `; ${document.cookie}`; + const parts = value.split(`; ${name}=`); + if (parts.length === 2) { + return parts.pop()?.split(';').shift(); + } else { + return undefined; + } +} + +export default function useLocale() { + // Shortcut to read the locale from the cookie. This allows to read the + // locale on the client side without using `NextIntlClientProvider`. + if (typeof window !== 'undefined') { + const locale = getCookieValueByName(COOKIE_LOCALE_NAME); + if (locale) return locale; + } + + // The condition never changes across runtime + // eslint-disable-next-line react-hooks/rules-of-hooks + return useIntlLocale(); +} From feef1bb8576a772f27042ecf4b9473f758a0d85f Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 12 Jan 2023 16:07:18 +0100 Subject: [PATCH 081/312] Remove `next-intl` unit tests as we're moving to e2e tests --- packages/next-intl/package.json | 2 +- .../client/NextIntlClientProvider.test.tsx | 41 ------------------- 2 files changed, 1 insertion(+), 42 deletions(-) delete mode 100644 packages/next-intl/test/client/NextIntlClientProvider.test.tsx diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 2b8b5f263..7ea0cfc1c 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -14,7 +14,7 @@ "build": "yarn build:default && yarn build:rsc", "build:default": "rm -rf dist && dts build", "build:rsc": "tsc && rm -rf dist/test", - "test": "TZ=Europe/Berlin dts test --testPathIgnorePatterns=dist", + "test": "echo 'No tests yet.'", "lint": "eslint src test && tsc --noEmit", "prepublishOnly": "yarn test && yarn lint && yarn build && cp ../../README.md .", "postpublish": "git checkout . && rm ./README.md" diff --git a/packages/next-intl/test/client/NextIntlClientProvider.test.tsx b/packages/next-intl/test/client/NextIntlClientProvider.test.tsx deleted file mode 100644 index df301000c..000000000 --- a/packages/next-intl/test/client/NextIntlClientProvider.test.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import {render, screen} from '@testing-library/react'; -import React from 'react'; -import {useTranslations} from '../../src'; -import {NextIntlClientProvider} from '../../src/client'; - -jest.mock('next/router', () => ({ - useRouter: () => ({locale: 'en'}) -})); - -it('can use messages from the provider', () => { - function Component() { - const t = useTranslations(); - return <>{t('message')}; - } - - render( - - - - ); - - screen.getByText('Hello'); -}); - -it('can override the locale from Next.js', () => { - function Component() { - const t = useTranslations(); - return <>{t('message', {price: 29000.5})}; - } - - render( - - - - ); - - screen.getByText('29.000,50 €'); -}); From e5ad261473ef73a2408ee2a102ddb5b36edb5703 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 12 Jan 2023 16:13:33 +0100 Subject: [PATCH 082/312] Fix lint --- packages/next-intl/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 7ea0cfc1c..e1874be42 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -15,7 +15,7 @@ "build:default": "rm -rf dist && dts build", "build:rsc": "tsc && rm -rf dist/test", "test": "echo 'No tests yet.'", - "lint": "eslint src test && tsc --noEmit", + "lint": "eslint src && tsc --noEmit", "prepublishOnly": "yarn test && yarn lint && yarn build && cp ../../README.md .", "postpublish": "git checkout . && rm ./README.md" }, From 1d385fefacce43ceaf0f920179bc7d51b7de833c Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 12 Jan 2023 16:22:25 +0100 Subject: [PATCH 083/312] Revert "Fix lint" This reverts commit e5ad261473ef73a2408ee2a102ddb5b36edb5703. --- packages/next-intl/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index e1874be42..7ea0cfc1c 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -15,7 +15,7 @@ "build:default": "rm -rf dist && dts build", "build:rsc": "tsc && rm -rf dist/test", "test": "echo 'No tests yet.'", - "lint": "eslint src && tsc --noEmit", + "lint": "eslint src test && tsc --noEmit", "prepublishOnly": "yarn test && yarn lint && yarn build && cp ../../README.md .", "postpublish": "git checkout . && rm ./README.md" }, From b375b4f99fb23db89e62138a6e9ca469d2c2dff6 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 12 Jan 2023 16:22:32 +0100 Subject: [PATCH 084/312] Revert "Remove `next-intl` unit tests as we're moving to e2e tests" This reverts commit feef1bb8576a772f27042ecf4b9473f758a0d85f. --- packages/next-intl/package.json | 2 +- .../client/NextIntlClientProvider.test.tsx | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 packages/next-intl/test/client/NextIntlClientProvider.test.tsx diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 7ea0cfc1c..2b8b5f263 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -14,7 +14,7 @@ "build": "yarn build:default && yarn build:rsc", "build:default": "rm -rf dist && dts build", "build:rsc": "tsc && rm -rf dist/test", - "test": "echo 'No tests yet.'", + "test": "TZ=Europe/Berlin dts test --testPathIgnorePatterns=dist", "lint": "eslint src test && tsc --noEmit", "prepublishOnly": "yarn test && yarn lint && yarn build && cp ../../README.md .", "postpublish": "git checkout . && rm ./README.md" diff --git a/packages/next-intl/test/client/NextIntlClientProvider.test.tsx b/packages/next-intl/test/client/NextIntlClientProvider.test.tsx new file mode 100644 index 000000000..df301000c --- /dev/null +++ b/packages/next-intl/test/client/NextIntlClientProvider.test.tsx @@ -0,0 +1,41 @@ +import {render, screen} from '@testing-library/react'; +import React from 'react'; +import {useTranslations} from '../../src'; +import {NextIntlClientProvider} from '../../src/client'; + +jest.mock('next/router', () => ({ + useRouter: () => ({locale: 'en'}) +})); + +it('can use messages from the provider', () => { + function Component() { + const t = useTranslations(); + return <>{t('message')}; + } + + render( + + + + ); + + screen.getByText('Hello'); +}); + +it('can override the locale from Next.js', () => { + function Component() { + const t = useTranslations(); + return <>{t('message', {price: 29000.5})}; + } + + render( + + + + ); + + screen.getByText('29.000,50 €'); +}); From df27b0d22a512a4db1f7c1d756947589278903a2 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 12 Jan 2023 16:25:39 +0100 Subject: [PATCH 085/312] Fix test --- .../src/client/NextIntlClientProvider.tsx | 2 +- packages/next-intl/src/index.tsx | 14 +++++++++++--- packages/next-intl/src/react-client/useLocale.tsx | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/next-intl/src/client/NextIntlClientProvider.tsx b/packages/next-intl/src/client/NextIntlClientProvider.tsx index 1bc92161a..c8fd4c84e 100644 --- a/packages/next-intl/src/client/NextIntlClientProvider.tsx +++ b/packages/next-intl/src/client/NextIntlClientProvider.tsx @@ -2,7 +2,7 @@ import {useRouter} from 'next/router'; import React, {ComponentProps} from 'react'; -import {IntlProvider} from 'use-intl/dist/src/react'; +import {IntlProvider} from 'use-intl'; type Props = Omit, 'locale'> & { locale?: string; diff --git a/packages/next-intl/src/index.tsx b/packages/next-intl/src/index.tsx index 4a2f17424..677d7d4a8 100644 --- a/packages/next-intl/src/index.tsx +++ b/packages/next-intl/src/index.tsx @@ -6,15 +6,23 @@ import createLocalizedLinkComponent from './shared/createLocalizedLinkComponent' * from 'next-intl'. Make sure this mirrors the API from 'react-server'. */ -export * from 'use-intl/dist/src/core'; - // Everything except for `useLocale`, as we provide an optimized implementation for that export { + AbstractIntlMessages, + TranslationValues, + RichTranslationValues, + Formats, + DateTimeFormatOptions, + NumberFormatOptions, + IntlError, + IntlErrorCode, + createTranslator, + createIntl, useTranslations, useIntl, useNow, useTimeZone -} from 'use-intl/dist/src/react'; +} from 'use-intl'; export {default as useLocale} from './react-client/useLocale'; diff --git a/packages/next-intl/src/react-client/useLocale.tsx b/packages/next-intl/src/react-client/useLocale.tsx index 9047c109a..75bfb8409 100644 --- a/packages/next-intl/src/react-client/useLocale.tsx +++ b/packages/next-intl/src/react-client/useLocale.tsx @@ -1,4 +1,4 @@ -import {useLocale as useIntlLocale} from 'use-intl/dist/src/react'; +import {useLocale as useIntlLocale} from 'use-intl'; import {COOKIE_LOCALE_NAME} from '../shared/constants'; function getCookieValueByName(name: string) { From 9608a6fd96fbbb1e47f1baebbc9e9f55f39ee435 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 12 Jan 2023 16:37:12 +0100 Subject: [PATCH 086/312] 2.11.0-beta.1 [skip ci] --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 7a378182f..1ef567399 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -13,7 +13,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current preview version ``` -npm install next-intl@2.11.0-alpha.13 +npm install next-intl@2.11.0-beta.1 ``` This preview version was tested with `next@13.1.1`. From 73c69cff944dfde8af51c25c5a1480f3c3a13053 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 13 Jan 2023 11:05:58 +0100 Subject: [PATCH 087/312] Move link [skip ci] --- README.md | 2 +- packages/website/pages/docs/next-13/index.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7258f89d1..63af02e4e 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@
-**🚀 New ✨**: `next-intl` is adding support for **Next.js 13** and the [`app` directory](https://beta.nextjs.org/docs/routing/fundamentals). A preview version with support for React Server Components is [now available](https://next-intl-docs.vercel.app/docs/next-13) for early adopters. +**🚀 New ✨**: `next-intl` is adding support for **Next.js 13** and the `app` directory. A preview version with support for React Server Components is [now available](https://next-intl-docs.vercel.app/docs/next-13) for early adopters.
diff --git a/packages/website/pages/docs/next-13/index.mdx b/packages/website/pages/docs/next-13/index.mdx index 86614be29..bc17602cb 100644 --- a/packages/website/pages/docs/next-13/index.mdx +++ b/packages/website/pages/docs/next-13/index.mdx @@ -2,7 +2,7 @@ import Callout from 'nextra-theme-docs/callout'; # Next.js 13 -With the introduction of the `app` directory, Next.js 13 provides a new level of flexibility for React apps. +With the introduction of [the `app` directory](https://beta.nextjs.org/docs/routing/fundamentals), Next.js 13 provides a new level of flexibility for React apps. There are two major changes that affect `next-intl`: From 2cded8fd01f723db2d55f2a8a9eeed32deaf1e00 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 13 Jan 2023 15:57:36 +0100 Subject: [PATCH 088/312] Improve docs [skip ci] --- .../pages/docs/next-13/server-components.mdx | 43 ++++++++++--------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 1ef567399..c57e92bae 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -27,26 +27,36 @@ For details, see the [pending pull request for Server Components support](https: ## Getting started -If you haven't done so already, [create a Next.js 13 app that uses the `app` directory](https://beta.nextjs.org/docs/installation). All routes should be moved within a `[locale]` folder so that we can use this segment to provide content in different languages. +If you haven't done so already, [create a Next.js 13 app that uses the `app` directory](https://beta.nextjs.org/docs/installation). All pages should be moved within a `[locale]` folder so that we can use this segment to provide content in different languages (e.g. `/en`, `/en/about`, etc.). **Start by creating the following file structure:** ``` -├── i18n.tsx (1) -├── next.config.js (2) -├── middleware.tsx (3) -├── messages (4) +├── messages (1) │ ├── en.json │ └── ... +├── i18n.tsx (2) +├── next.config.js (3) +├── middleware.tsx (4) └── app └── [locale] ├── layout.tsx (5) └── page.tsx (6) ``` -**Now, set up these files as follows:** +**Now, set up the files as follows:** -1. Define your configuration in `i18n.tsx`: +1. Provide messages for a language, e.g. in `messages/en.json`: + +```json +{ + "Index": { + "title": "Hello world!" + } +} +``` + +2. Define your i18n configuration (short for "internationalization") in `i18n.tsx`: ```tsx import {NextIntlConfig} from 'next-intl'; @@ -62,18 +72,21 @@ const config: NextIntlConfig = { export default config; ``` -2. Add the plugin that passes your configuration to `next-intl` in `next.config.js`: +3. Add the plugin that reads your configuration in `next.config.js`: ```js const withNextIntl = require('next-intl/withNextIntl'); module.exports = withNextIntl({ - i18nConfig: './i18n.tsx', // (default) + // This is the default, also the `src` folder is supported out of the box + i18nConfig: './i18n.tsx', + + // Other Next.js configuration ... experimental: {appDir: true} }); ``` -3. Create a [middleware](https://nextjs.org/docs/advanced-features/middleware) in `middleware.tsx`: +4. Create a [middleware](https://nextjs.org/docs/advanced-features/middleware) in `middleware.tsx`: ```tsx import {createIntlMiddleware} from 'next-intl/server'; @@ -92,16 +105,6 @@ export const config = { }; ``` -4. Set up messages for a language, e.g. in `messages/en.json`: - -```json -{ - "Index": { - "title": "Hello world!" - } -} -``` - 5. Provide the matched `locale` to the document in `app/[locale]/layout.tsx`. ```tsx From 5f45cc50571acbc2c855652a32fcbe69d53013e1 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 16 Jan 2023 16:40:59 +0100 Subject: [PATCH 089/312] Better ergonomics for plugin --- .../example-next-13-advanced/next.config.js | 2 +- packages/example-next-13/next.config.js | 2 +- packages/next-intl/package.json | 7 ++- packages/next-intl/plugin.d.ts | 3 + packages/next-intl/plugin.js | 59 +++++++++++++++++++ packages/next-intl/withNextIntl.js | 52 ++-------------- .../pages/docs/next-13/server-components.mdx | 10 ++-- 7 files changed, 79 insertions(+), 56 deletions(-) create mode 100644 packages/next-intl/plugin.d.ts create mode 100644 packages/next-intl/plugin.js diff --git a/packages/example-next-13-advanced/next.config.js b/packages/example-next-13-advanced/next.config.js index d14a4887d..948a68283 100644 --- a/packages/example-next-13-advanced/next.config.js +++ b/packages/example-next-13-advanced/next.config.js @@ -1,4 +1,4 @@ -const withNextIntl = require('next-intl/withNextIntl'); +const withNextIntl = require('next-intl/plugin')(); module.exports = withNextIntl({ experimental: {appDir: true} diff --git a/packages/example-next-13/next.config.js b/packages/example-next-13/next.config.js index d14a4887d..948a68283 100644 --- a/packages/example-next-13/next.config.js +++ b/packages/example-next-13/next.config.js @@ -1,4 +1,4 @@ -const withNextIntl = require('next-intl/withNextIntl'); +const withNextIntl = require('next-intl/plugin')(); module.exports = withNextIntl({ experimental: {appDir: true} diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 2b8b5f263..94221c5e2 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -30,7 +30,8 @@ "./server": "./dist/src/server/index.js", "./client": "./dist/src/client/index.js", "./config": "./config.js", - "./withNextIntl": "./withNextIntl.js" + "./withNextIntl": "./withNextIntl.js", + "./plugin": "./plugin.js" }, "files": [ "dist", @@ -41,7 +42,9 @@ "client.d.ts", "config.js", "withNextIntl.js", - "withNextIntl.d.ts" + "withNextIntl.d.ts", + "plugin.js", + "plugin.d.ts" ], "keywords": [ "react", diff --git a/packages/next-intl/plugin.d.ts b/packages/next-intl/plugin.d.ts new file mode 100644 index 000000000..66dc33376 --- /dev/null +++ b/packages/next-intl/plugin.d.ts @@ -0,0 +1,3 @@ +import {NextConfig} from 'next'; + +export default function withNextIntl(i18nPath: string): ((config: NextConfig) => unknown); diff --git a/packages/next-intl/plugin.js b/packages/next-intl/plugin.js new file mode 100644 index 000000000..230a0d496 --- /dev/null +++ b/packages/next-intl/plugin.js @@ -0,0 +1,59 @@ +/* eslint-env node */ + +const fs = require('fs'); +const path = require('path'); + +function initPlugin(i18nPath, nextConfig) { + if (i18nPath) { + i18nPath = path.resolve(i18nPath); + + if (!fs.existsSync(i18nPath)) { + throw new Error( + `Could not find i18n config at ${i18nPath}, please provide a valid path.` + ); + } + } else { + i18nPath = [ + './i18n.tsx', + './i18n.ts', + './i18n.js', + './i18n.jsx', + './src/i18n.tsx', + './src/i18n.ts', + './src/i18n.js', + './src/i18n.jsx' + ] + .map((cur) => path.resolve(cur)) + .find((cur) => fs.existsSync(cur)); + + if (!i18nPath) { + throw new Error(`\n\nCould not locate i18n config. Create one at \`./(src/)i18n.{js,jsx,ts,tsx}\` or specify a custom location: + +const withNextIntl = require('next-intl/plugin')( + './path/to/i18n.tsx' +); + +module.exports = withNextIntl({ + experimental: {appDir: true} +});\n`); + } + } + + return Object.assign({}, nextConfig, { + webpack(config, options) { + config.resolve.alias['next-intl/config'] = require.resolve(i18nPath); + + if (typeof nextConfig.webpack === 'function') { + return nextConfig.webpack(config, options); + } + + return config; + } + }); +} + +module.exports = function withNextIntl(i18nPath) { + return (nextConfig) => initPlugin(i18nPath, nextConfig); +}; + +module.exports.initPlugin = initPlugin; diff --git a/packages/next-intl/withNextIntl.js b/packages/next-intl/withNextIntl.js index 44826d5a8..51487f683 100644 --- a/packages/next-intl/withNextIntl.js +++ b/packages/next-intl/withNextIntl.js @@ -1,52 +1,10 @@ /* eslint-env node */ -const fs = require('fs'); -const path = require('path'); +// TODO: Only available for backwards compatibility +// during the beta, remove for stable release -module.exports = function withNextIntl(enhancedNextConfig = {}) { - // eslint-disable-next-line prefer-const - let {i18nConfig, ...nextConfig} = enhancedNextConfig; +const {initPlugin} = require('./plugin'); - if (i18nConfig) { - i18nConfig = path.resolve(i18nConfig); - - if (!fs.existsSync(i18nConfig)) { - throw new Error( - `Could not find i18n config at ${i18nConfig}, please provide a valid path for \`i18nConfig\`.` - ); - } - } else { - i18nConfig = [ - './i18n.tsx', - './i18n.ts', - './i18n.js', - './i18n.jsx', - './src/i18n.tsx', - './src/i18n.ts', - './src/i18n.js', - './src/i18n.jsx' - ] - .map((cur) => path.resolve(cur)) - .find((cur) => fs.existsSync(cur)); - - if (!i18nConfig) { - throw new Error(`\n\nCould not locale i18n config. Create one at \`./(src/)i18n.{js,jsx,ts,tsx}\` or specify a custom location via \`i18nConfig\`: - -module.exports = withNextIntl({ - i18nConfig: './config/i18n.tsx' -});\n`); - } - } - - return Object.assign({}, nextConfig, { - webpack(config, options) { - config.resolve.alias['next-intl/config'] = require.resolve(i18nConfig); - - if (typeof nextConfig.webpack === 'function') { - return nextConfig.webpack(config, options); - } - - return config; - } - }); +module.exports = function withNextIntl(enhancedNextConfig) { + return initPlugin(enhancedNextConfig.i18nConfig, enhancedNextConfig); }; diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index c57e92bae..1a2bd1638 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -72,15 +72,15 @@ const config: NextIntlConfig = { export default config; ``` -3. Add the plugin that reads your configuration in `next.config.js`: +3. Provide the path to your configuration in `next.config.js`: ```js -const withNextIntl = require('next-intl/withNextIntl'); - -module.exports = withNextIntl({ +const withNextIntl = require('next-intl/plugin')( // This is the default, also the `src` folder is supported out of the box - i18nConfig: './i18n.tsx', + './i18n.tsx' +); +module.exports = withNextIntl({ // Other Next.js configuration ... experimental: {appDir: true} }); From cc6ccff101d437304013d9797bf1ad56601a63b7 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 17 Jan 2023 16:46:52 +0100 Subject: [PATCH 090/312] Remove ability to use `LocalizedLink` to be used on the client without a provider, add `useLocalizedRouter` --- .../src/app/[locale]/page.tsx | 11 +++-- .../ClientLocaleWithoutProvider.tsx | 14 ------- .../ClientRouterWithoutProvider.tsx | 21 ++++++++++ .../tests/main.spec.ts | 15 +++++++ packages/next-intl/src/index.tsx | 26 ++---------- .../src/react-client/LocalizedLink.tsx | 6 +++ .../next-intl/src/react-client/useLocale.tsx | 25 ----------- .../src/react-client/useLocalizedRouter.tsx | 42 +++++++++++++++++++ .../shared/createLocalizedLinkComponent.tsx | 16 +++++-- .../next-intl/src/shared/localizeHref.tsx | 9 ++++ .../pages/docs/next-13/server-components.mdx | 15 ++++++- 11 files changed, 130 insertions(+), 70 deletions(-) delete mode 100644 packages/example-next-13-advanced/src/components/ClientLocaleWithoutProvider.tsx create mode 100644 packages/example-next-13-advanced/src/components/ClientRouterWithoutProvider.tsx create mode 100644 packages/next-intl/src/react-client/LocalizedLink.tsx delete mode 100644 packages/next-intl/src/react-client/useLocale.tsx create mode 100644 packages/next-intl/src/react-client/useLocalizedRouter.tsx create mode 100644 packages/next-intl/src/shared/localizeHref.tsx diff --git a/packages/example-next-13-advanced/src/app/[locale]/page.tsx b/packages/example-next-13-advanced/src/app/[locale]/page.tsx index ae50d0aef..68590baf4 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/page.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/page.tsx @@ -1,5 +1,5 @@ -import {useTranslations} from 'next-intl'; -import ClientLocaleWithoutProvider from '../../components/ClientLocaleWithoutProvider'; +import {LocalizedLink, useTranslations} from 'next-intl'; +import ClientRouterWithoutProvider from '../../components/ClientRouterWithoutProvider'; import CoreLibrary from '../../components/CoreLibrary'; import CurrentTime from '../../components/CurrentTime'; import LocaleSwitcher from '../../components/LocaleSwitcher'; @@ -28,7 +28,12 @@ export default function Index() { - + +
+ + Go to home with query param + +
); } diff --git a/packages/example-next-13-advanced/src/components/ClientLocaleWithoutProvider.tsx b/packages/example-next-13-advanced/src/components/ClientLocaleWithoutProvider.tsx deleted file mode 100644 index 071759d38..000000000 --- a/packages/example-next-13-advanced/src/components/ClientLocaleWithoutProvider.tsx +++ /dev/null @@ -1,14 +0,0 @@ -'use client'; - -import {LocalizedLink, useLocale} from 'next-intl'; - -export default function ClientLocaleWithoutProvider() { - return ( - <> -

{useLocale()}

-
- Client -
- - ); -} diff --git a/packages/example-next-13-advanced/src/components/ClientRouterWithoutProvider.tsx b/packages/example-next-13-advanced/src/components/ClientRouterWithoutProvider.tsx new file mode 100644 index 000000000..a61b4aacd --- /dev/null +++ b/packages/example-next-13-advanced/src/components/ClientRouterWithoutProvider.tsx @@ -0,0 +1,21 @@ +'use client'; + +import {useLocalizedRouter} from 'next-intl'; + +export default function ClientRouterWithoutProvider() { + const router = useLocalizedRouter(); + + function onClick() { + router.push('/nested'); + } + + return ( + + ); +} diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index d9a95d296..9f4473e79 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -115,6 +115,13 @@ it('can use `LocalizedLink` on the server', async ({page}) => { ); }); +it('can use `LocalizedLink` with an object as `href`', async ({page}) => { + await page.goto('/en'); + await expect( + page.getByRole('link', {name: 'Go to home with query param'}) + ).toHaveAttribute('href', '/en?test=true'); +}); + it('can use `LocalizedLink` to link to the root of another language', async ({ page }) => { @@ -157,3 +164,11 @@ it('can use the locale on the client side without using the provider', async ({ .getByRole('link', {name: 'Client'}) ).toHaveAttribute('href', '/en/client'); }); + +it('can use the localized router on the client side without a provider', async ({ + page +}) => { + await page.goto('/en'); + page.getByRole('button', {name: 'Go to nested page'}).click(); + await expect(page).toHaveURL(/\/en\/nested/); +}); diff --git a/packages/next-intl/src/index.tsx b/packages/next-intl/src/index.tsx index 677d7d4a8..99b5d013b 100644 --- a/packages/next-intl/src/index.tsx +++ b/packages/next-intl/src/index.tsx @@ -1,32 +1,12 @@ -import useLocale from './react-client/useLocale'; -import createLocalizedLinkComponent from './shared/createLocalizedLinkComponent'; - /** * This is the main entry file when non-'react-server' environments import * from 'next-intl'. Make sure this mirrors the API from 'react-server'. */ -// Everything except for `useLocale`, as we provide an optimized implementation for that -export { - AbstractIntlMessages, - TranslationValues, - RichTranslationValues, - Formats, - DateTimeFormatOptions, - NumberFormatOptions, - IntlError, - IntlErrorCode, - createTranslator, - createIntl, - useTranslations, - useIntl, - useNow, - useTimeZone -} from 'use-intl'; - -export {default as useLocale} from './react-client/useLocale'; +export * from 'use-intl'; -export const LocalizedLink = createLocalizedLinkComponent(useLocale); +export {default as useLocalizedRouter} from './react-client/useLocalizedRouter'; +export {default as LocalizedLink} from './react-client/LocalizedLink'; export {default as NextIntlConfig} from './server/NextIntlConfig'; // Legacy export for compatibility diff --git a/packages/next-intl/src/react-client/LocalizedLink.tsx b/packages/next-intl/src/react-client/LocalizedLink.tsx new file mode 100644 index 000000000..ff70b77e4 --- /dev/null +++ b/packages/next-intl/src/react-client/LocalizedLink.tsx @@ -0,0 +1,6 @@ +import {useLocale} from 'use-intl'; +import createLocalizedLinkComponent from '../shared/createLocalizedLinkComponent'; + +const LocalizedLink = createLocalizedLinkComponent(useLocale); + +export default LocalizedLink; diff --git a/packages/next-intl/src/react-client/useLocale.tsx b/packages/next-intl/src/react-client/useLocale.tsx deleted file mode 100644 index 75bfb8409..000000000 --- a/packages/next-intl/src/react-client/useLocale.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import {useLocale as useIntlLocale} from 'use-intl'; -import {COOKIE_LOCALE_NAME} from '../shared/constants'; - -function getCookieValueByName(name: string) { - const value = `; ${document.cookie}`; - const parts = value.split(`; ${name}=`); - if (parts.length === 2) { - return parts.pop()?.split(';').shift(); - } else { - return undefined; - } -} - -export default function useLocale() { - // Shortcut to read the locale from the cookie. This allows to read the - // locale on the client side without using `NextIntlClientProvider`. - if (typeof window !== 'undefined') { - const locale = getCookieValueByName(COOKIE_LOCALE_NAME); - if (locale) return locale; - } - - // The condition never changes across runtime - // eslint-disable-next-line react-hooks/rules-of-hooks - return useIntlLocale(); -} diff --git a/packages/next-intl/src/react-client/useLocalizedRouter.tsx b/packages/next-intl/src/react-client/useLocalizedRouter.tsx new file mode 100644 index 000000000..3fa093008 --- /dev/null +++ b/packages/next-intl/src/react-client/useLocalizedRouter.tsx @@ -0,0 +1,42 @@ +import {useRouter} from 'next/navigation'; +import {useMemo} from 'react'; +import {COOKIE_LOCALE_NAME} from '../shared/constants'; +import localizeHref from '../shared/localizeHref'; + +function getCookieValueByName(name: string) { + // https://stackoverflow.com/a/15724300/343045 + const value = `; ${document.cookie}`; + const parts = value.split(`; ${name}=`); + if (parts.length === 2) { + const part = parts.pop()?.split(';').shift(); + if (part) return part; + } + + throw new Error( + `Unable to find next-intl cookie, have you configured the middleware?` + ); +} + +function getCookieLocale() { + return getCookieValueByName(COOKIE_LOCALE_NAME); +} + +export default function useLocalizedRouter() { + const router = useRouter(); + + return useMemo( + () => ({ + ...router, + push(href: string) { + return router.push(localizeHref(getCookieLocale(), href)); + }, + replace(href: string) { + return router.replace(localizeHref(getCookieLocale(), href)); + }, + prefetch(href: string) { + return router.prefetch(localizeHref(getCookieLocale(), href)); + } + }), + [router] + ); +} diff --git a/packages/next-intl/src/shared/createLocalizedLinkComponent.tsx b/packages/next-intl/src/shared/createLocalizedLinkComponent.tsx index 0ce0477b7..c2a732382 100644 --- a/packages/next-intl/src/shared/createLocalizedLinkComponent.tsx +++ b/packages/next-intl/src/shared/createLocalizedLinkComponent.tsx @@ -1,7 +1,10 @@ import Link from 'next/link'; import React, {ComponentProps, forwardRef} from 'react'; +import localizeHref from './localizeHref'; -type Props = ComponentProps; +type Props = Omit, 'locale'> & { + locale?: string; +}; export default function createLocalizedLinkComponent(useLocale: () => string) { /** @@ -11,9 +14,14 @@ export default function createLocalizedLinkComponent(useLocale: () => string) { const curLocale = useLocale(); if (!locale) locale = curLocale; - let localizedHref = '/' + locale; - if (href !== '/') { - localizedHref += href; + let localizedHref; + if (typeof href === 'string') { + localizedHref = localizeHref(locale, href); + } else { + localizedHref = {...href}; + if (href.pathname) { + localizedHref.pathname = localizeHref(locale, href.pathname); + } } return ; diff --git a/packages/next-intl/src/shared/localizeHref.tsx b/packages/next-intl/src/shared/localizeHref.tsx new file mode 100644 index 000000000..81ed6a72e --- /dev/null +++ b/packages/next-intl/src/shared/localizeHref.tsx @@ -0,0 +1,9 @@ +export default function localizeHref(locale: string, href: string) { + let localizedHref = '/' + locale; + + if (href !== '/') { + localizedHref += href; + } + + return localizedHref; +} diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 1a2bd1638..9c93b92d0 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -150,7 +150,7 @@ If you've encountered an issue, you can [explore the code for a working example] If you're in a transitioning phase, either from the `pages` directory to the `app` directory, or from Client Components the the Server Components preview, you can apply `NextIntlClientProvider` additionally. -## Linking between pages +## Navigating between pages In the `pages` folder, Next.js automatically considers the current locale for `next/link`. Since this is no longer the case for the `app` directory, `next-intl` provides a drop-in replacement for this use case. @@ -164,6 +164,19 @@ import {LocalizedLink} from 'next-intl'; Switch to German ``` +If you need to navigate programmatically (e.g. in response to a form submission), `next-intl` provides a convience API that wraps `useRouter` and automatically applies the locale of the user. + +```tsx +'use client'; + +import {useLocalizedRouter} from 'next-intl'; + +const router = useLocalizedRouter(); + +// When the user is on `/en`, the router will navigate to `/en/about` +router.push('/about'); +``` + ## Switching to Client Components If you need to use translations in Client Components, the best approach is to pass the generated labels as props. From 2f2b794ae3dfd430ee19c7a699522f7227d12fc2 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 17 Jan 2023 16:58:39 +0100 Subject: [PATCH 091/312] Remove outdated test --- .../components/ClientRouterWithoutProvider.tsx | 2 +- .../tests/main.spec.ts | 18 +----------------- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/packages/example-next-13-advanced/src/components/ClientRouterWithoutProvider.tsx b/packages/example-next-13-advanced/src/components/ClientRouterWithoutProvider.tsx index a61b4aacd..74264ecf7 100644 --- a/packages/example-next-13-advanced/src/components/ClientRouterWithoutProvider.tsx +++ b/packages/example-next-13-advanced/src/components/ClientRouterWithoutProvider.tsx @@ -11,7 +11,7 @@ export default function ClientRouterWithoutProvider() { return ( -

+
+ + {expanded &&

{description}

} +
); } ``` From 0a6ec8e80d2c78f86fb594a1feb888dda53c05aa Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 17 Jan 2023 17:43:20 +0100 Subject: [PATCH 094/312] Add note about being SSR-only currently --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 4da9f4899..6f98e0924 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -21,7 +21,7 @@ This preview version was tested with `next@13.1.1`. ## Roadmap - ✅ All APIs from `next-intl` can be used in Server Components. -- 🚧 The API to provide configuration to `next-intl` is still in flux. +- 💡 Currently SSR-only, i.e. you should use [CDN caching](https://youtu.be/bfLFHp7Sbkg?t=490) via [`headers` in `next.config.js`](https://nextjs.org/docs/api-reference/next.config.js/headers). For details, see the [pending pull request for Server Components support](https://github.com/amannn/next-intl/pull/149). From c1b7aaa31074fef17e0843b8e3d90257cc84a818 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 18 Jan 2023 17:18:09 +0100 Subject: [PATCH 095/312] Change wording from preview to beta [skip ci] --- .../website/pages/docs/next-13/client-components.mdx | 2 +- packages/website/pages/docs/next-13/index.mdx | 2 +- packages/website/pages/docs/next-13/meta.json | 2 +- .../website/pages/docs/next-13/server-components.mdx | 10 +++++----- packages/website/pages/index.mdx | 5 ++--- 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/packages/website/pages/docs/next-13/client-components.mdx b/packages/website/pages/docs/next-13/client-components.mdx index 1206374a7..08e236e2f 100644 --- a/packages/website/pages/docs/next-13/client-components.mdx +++ b/packages/website/pages/docs/next-13/client-components.mdx @@ -98,7 +98,7 @@ If you've encountered an issue, you can [explore the code for a working example] Note that you have to make use of `'use client';` in all components that use features from `next-intl` if you use this approach. Support for `next-intl` - APIs in Server Components is [available in a preview + APIs in Server Components is [available in a beta version](/docs/next-13/server-components). diff --git a/packages/website/pages/docs/next-13/index.mdx b/packages/website/pages/docs/next-13/index.mdx index bc17602cb..b30646be0 100644 --- a/packages/website/pages/docs/next-13/index.mdx +++ b/packages/website/pages/docs/next-13/index.mdx @@ -12,4 +12,4 @@ There are two major changes that affect `next-intl`: There are currently two ways how you can set your app up with `next-intl` in the `app` directory: 1. [Deferring the usage of `next-intl` to Client Components](/docs/next-13/client-components) (stable, recommended when you migrate) -2. [Using `next-intl` in Server Components](/docs/next-13/server-components) (preview) +2. [Using `next-intl` in Server Components](/docs/next-13/server-components) (beta) diff --git a/packages/website/pages/docs/next-13/meta.json b/packages/website/pages/docs/next-13/meta.json index e51fa36d6..87a4d2dc3 100644 --- a/packages/website/pages/docs/next-13/meta.json +++ b/packages/website/pages/docs/next-13/meta.json @@ -1,5 +1,5 @@ { "index": "Getting started", "client-components": "Client Components", - "server-components": "Server Components (preview)" + "server-components": "Server Components (beta)" } diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 6f98e0924..3922655aa 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -1,8 +1,8 @@ import Callout from 'nextra-theme-docs/callout'; -# Usage in Server Components (preview) +# Usage in Server Components (beta) -Next.js 13 introduces support for [React Server Components](https://beta.nextjs.org/docs/rendering/server-and-client-components) in the `app` directory. `next-intl` is adopting the new capabilities and is currently offering a preview to early adopters, who are already building apps with the `app` directory. +Next.js 13 introduces support for [React Server Components](https://beta.nextjs.org/docs/rendering/server-and-client-components) in the `app` directory. `next-intl` is adopting the new capabilities and is currently offering a beta version to early adopters, who are already building apps with the `app` directory. The `app` directory is currently in beta, patterns are still emerging and APIs @@ -10,13 +10,13 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. to face a migration effort when the `app` directory becomes stable. -## Current preview version +## Current beta version ``` npm install next-intl@2.11.0-beta.2 ``` -This preview version was tested with `next@13.1.1`. +This beta version was tested with `next@13.1.1`. ## Roadmap @@ -148,7 +148,7 @@ That's all it takes! Now you can internationalize your apps purely on the server If you've encountered an issue, you can [explore the code for a working example](https://github.com/amannn/next-intl-example-next-13) ([demo](https://next-intl-example-next-13.vercel.app)). -If you're in a transitioning phase, either from the `pages` directory to the `app` directory, or from Client Components the the Server Components preview, you can apply `NextIntlClientProvider` additionally. +If you're in a transitioning phase, either from the `pages` directory to the `app` directory, or from Client Components to the Server Components beta, you can apply `NextIntlClientProvider` additionally. ## Navigating between pages diff --git a/packages/website/pages/index.mdx b/packages/website/pages/index.mdx index ee46c0e11..d075c2f3d 100644 --- a/packages/website/pages/index.mdx +++ b/packages/website/pages/index.mdx @@ -19,9 +19,8 @@ import styles from '../styles/index.module.css'; From 739897802279449da12d4348bf8cd7bb47bc80e5 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 18 Jan 2023 18:19:32 +0100 Subject: [PATCH 096/312] Fix import for `useLocalizedRouter` --- .../ClientRouterWithoutProvider.tsx | 2 +- packages/next-intl/src/client/index.tsx | 1 + .../src/client/useLocalizedRouter.tsx | 42 ++++++++++++++++ .../src/react-client/useLocalizedRouter.tsx | 49 +++++-------------- packages/next-intl/withNextIntl.js | 3 ++ .../pages/docs/next-13/server-components.mdx | 2 +- 6 files changed, 60 insertions(+), 39 deletions(-) create mode 100644 packages/next-intl/src/client/useLocalizedRouter.tsx diff --git a/packages/example-next-13-advanced/src/components/ClientRouterWithoutProvider.tsx b/packages/example-next-13-advanced/src/components/ClientRouterWithoutProvider.tsx index 74264ecf7..2058f3314 100644 --- a/packages/example-next-13-advanced/src/components/ClientRouterWithoutProvider.tsx +++ b/packages/example-next-13-advanced/src/components/ClientRouterWithoutProvider.tsx @@ -1,6 +1,6 @@ 'use client'; -import {useLocalizedRouter} from 'next-intl'; +import {useLocalizedRouter} from 'next-intl/client'; export default function ClientRouterWithoutProvider() { const router = useLocalizedRouter(); diff --git a/packages/next-intl/src/client/index.tsx b/packages/next-intl/src/client/index.tsx index 7c1d04074..4da64fe08 100644 --- a/packages/next-intl/src/client/index.tsx +++ b/packages/next-intl/src/client/index.tsx @@ -3,3 +3,4 @@ */ export {default as NextIntlClientProvider} from './NextIntlClientProvider'; +export {default as useLocalizedRouter} from './useLocalizedRouter'; diff --git a/packages/next-intl/src/client/useLocalizedRouter.tsx b/packages/next-intl/src/client/useLocalizedRouter.tsx new file mode 100644 index 000000000..3fa093008 --- /dev/null +++ b/packages/next-intl/src/client/useLocalizedRouter.tsx @@ -0,0 +1,42 @@ +import {useRouter} from 'next/navigation'; +import {useMemo} from 'react'; +import {COOKIE_LOCALE_NAME} from '../shared/constants'; +import localizeHref from '../shared/localizeHref'; + +function getCookieValueByName(name: string) { + // https://stackoverflow.com/a/15724300/343045 + const value = `; ${document.cookie}`; + const parts = value.split(`; ${name}=`); + if (parts.length === 2) { + const part = parts.pop()?.split(';').shift(); + if (part) return part; + } + + throw new Error( + `Unable to find next-intl cookie, have you configured the middleware?` + ); +} + +function getCookieLocale() { + return getCookieValueByName(COOKIE_LOCALE_NAME); +} + +export default function useLocalizedRouter() { + const router = useRouter(); + + return useMemo( + () => ({ + ...router, + push(href: string) { + return router.push(localizeHref(getCookieLocale(), href)); + }, + replace(href: string) { + return router.replace(localizeHref(getCookieLocale(), href)); + }, + prefetch(href: string) { + return router.prefetch(localizeHref(getCookieLocale(), href)); + } + }), + [router] + ); +} diff --git a/packages/next-intl/src/react-client/useLocalizedRouter.tsx b/packages/next-intl/src/react-client/useLocalizedRouter.tsx index 3fa093008..90a27d110 100644 --- a/packages/next-intl/src/react-client/useLocalizedRouter.tsx +++ b/packages/next-intl/src/react-client/useLocalizedRouter.tsx @@ -1,42 +1,17 @@ -import {useRouter} from 'next/navigation'; -import {useMemo} from 'react'; -import {COOKIE_LOCALE_NAME} from '../shared/constants'; -import localizeHref from '../shared/localizeHref'; +import useLocalizedRouter from '../client/useLocalizedRouter'; -function getCookieValueByName(name: string) { - // https://stackoverflow.com/a/15724300/343045 - const value = `; ${document.cookie}`; - const parts = value.split(`; ${name}=`); - if (parts.length === 2) { - const part = parts.pop()?.split(';').shift(); - if (part) return part; - } +// TODO: Only available for backwards compatibility +// during the beta, remove for stable release - throw new Error( - `Unable to find next-intl cookie, have you configured the middleware?` - ); -} +let hasWarned = false; -function getCookieLocale() { - return getCookieValueByName(COOKIE_LOCALE_NAME); -} - -export default function useLocalizedRouter() { - const router = useRouter(); +export default function useLocalizedRouterDeprecated() { + if (!hasWarned) { + console.warn( + `\n\nDEPRECATION WARNING: The \`useLocalizedRouter\` import from \`next-intl\` is deprecated and will be removed in the stable release of next-intl. Please import \`useLocalizedRouter\` from \`next-intl/client\` instead. See https://next-intl-docs.vercel.app/docs/next-13/server-components\n\n` + ); + hasWarned = true; + } - return useMemo( - () => ({ - ...router, - push(href: string) { - return router.push(localizeHref(getCookieLocale(), href)); - }, - replace(href: string) { - return router.replace(localizeHref(getCookieLocale(), href)); - }, - prefetch(href: string) { - return router.prefetch(localizeHref(getCookieLocale(), href)); - } - }), - [router] - ); + return useLocalizedRouter(); } diff --git a/packages/next-intl/withNextIntl.js b/packages/next-intl/withNextIntl.js index 51487f683..0429151dd 100644 --- a/packages/next-intl/withNextIntl.js +++ b/packages/next-intl/withNextIntl.js @@ -6,5 +6,8 @@ const {initPlugin} = require('./plugin'); module.exports = function withNextIntl(enhancedNextConfig) { + console.warn( + `\n\nDEPRECATION WARNING: The \`withNextIntl()\` function is deprecated and will be removed in the stable release of next-intl. Please use \`next-intl/plugin\` instead. See https://next-intl-docs.vercel.app/docs/next-13/server-components\n\n` + ); return initPlugin(enhancedNextConfig.i18nConfig, enhancedNextConfig); }; diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 3922655aa..742218bf2 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -169,7 +169,7 @@ If you need to navigate programmatically (e.g. in response to a form submission) ```tsx 'use client'; -import {useLocalizedRouter} from 'next-intl'; +import {useLocalizedRouter} from 'next-intl/client'; const router = useLocalizedRouter(); From 52cc2387075b3a4e940155f0c02b826b0b83ec1b Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 23 Jan 2023 12:36:45 +0100 Subject: [PATCH 097/312] Cache retrieval of messages per request --- packages/next-intl/src/react-server/useConfig.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/next-intl/src/react-server/useConfig.tsx b/packages/next-intl/src/react-server/useConfig.tsx index 0df3e0d8a..99e664a10 100644 --- a/packages/next-intl/src/react-server/useConfig.tsx +++ b/packages/next-intl/src/react-server/useConfig.tsx @@ -1,8 +1,13 @@ -import {use, useMemo} from 'react'; +import {cache, use, useMemo} from 'react'; import getIntlContextValue from 'use-intl/dist/src/react/getIntlContextValue'; import staticConfig from '../server/staticConfig'; import useLocale from './useLocale'; +const receiveMessages = cache( + (locale: string, getMessages: typeof staticConfig['getMessages']) => + getMessages?.({locale}) +); + function isPromise(value: any): value is Promise { return value != null && typeof value.then === 'function'; } @@ -13,7 +18,7 @@ export default function useConfig() { return useMemo(() => { function getStaticConfig() { const {getMessages, ...rest} = staticConfig; - const messagesOrPromise = getMessages?.({locale}); + const messagesOrPromise = receiveMessages(locale, getMessages); // Only promises can be unwrapped const messages = isPromise(messagesOrPromise) From 862cc87cabb3d308e4f781f4ef37c498bdeb7b3f Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 23 Jan 2023 13:14:57 +0100 Subject: [PATCH 098/312] Add `useUnlocalizedPathname` --- .../src/app/[locale]/client/ClientContent.tsx | 8 +++++++- .../example-next-13-advanced/tests/main.spec.ts | 5 +++++ packages/next-intl/src/client/index.tsx | 1 + .../src/client/useUnlocalizedPathname.tsx | 11 +++++++++++ .../test/client/useUnlocalizedPathname.test.tsx | 17 +++++++++++++++++ .../pages/docs/next-13/server-components.mdx | 13 ++++++++++++- 6 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 packages/next-intl/src/client/useUnlocalizedPathname.tsx create mode 100644 packages/next-intl/test/client/useUnlocalizedPathname.test.tsx diff --git a/packages/example-next-13-advanced/src/app/[locale]/client/ClientContent.tsx b/packages/example-next-13-advanced/src/app/[locale]/client/ClientContent.tsx index 3609841f1..59164f1fb 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/client/ClientContent.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/client/ClientContent.tsx @@ -1,7 +1,13 @@ 'use client'; import {LocalizedLink} from 'next-intl'; +import {useUnlocalizedPathname} from 'next-intl/client'; export default function ClientContent() { - return Go to home; + return ( + <> + Go to home +

{useUnlocalizedPathname()}

+ + ); } diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index d03408e66..9d6648a15 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -139,6 +139,11 @@ it('can use `LocalizedLink` on the client', async ({page}) => { ); }); +it('can use `useUnlocalizedPathname`', async ({page}) => { + await page.goto('/en/client'); + await expect(page.getByTestId('UnlocalizedPathname')).toHaveText('/client'); +}); + it('can navigate between sibling pages that share a parent layout', async ({ page }) => { diff --git a/packages/next-intl/src/client/index.tsx b/packages/next-intl/src/client/index.tsx index 4da64fe08..42a7019a0 100644 --- a/packages/next-intl/src/client/index.tsx +++ b/packages/next-intl/src/client/index.tsx @@ -4,3 +4,4 @@ export {default as NextIntlClientProvider} from './NextIntlClientProvider'; export {default as useLocalizedRouter} from './useLocalizedRouter'; +export {default as useUnlocalizedPathname} from './useUnlocalizedPathname'; diff --git a/packages/next-intl/src/client/useUnlocalizedPathname.tsx b/packages/next-intl/src/client/useUnlocalizedPathname.tsx new file mode 100644 index 000000000..eb2188b3f --- /dev/null +++ b/packages/next-intl/src/client/useUnlocalizedPathname.tsx @@ -0,0 +1,11 @@ +import {usePathname} from 'next/navigation'; + +export function unlocalizePathname(pathname: string | null) { + return pathname == null + ? pathname + : pathname.replace(/^\/[\w_-]+/, '') || '/'; +} + +export default function useUnlocalizedPathname() { + return unlocalizePathname(usePathname()); +} diff --git a/packages/next-intl/test/client/useUnlocalizedPathname.test.tsx b/packages/next-intl/test/client/useUnlocalizedPathname.test.tsx new file mode 100644 index 000000000..27cceb91d --- /dev/null +++ b/packages/next-intl/test/client/useUnlocalizedPathname.test.tsx @@ -0,0 +1,17 @@ +import {unlocalizePathname} from '../../src/client/useUnlocalizedPathname'; + +it('works for the root', () => { + expect(unlocalizePathname('/en')).toEqual('/'); +}); + +it("works if there's no pathname", () => { + expect(unlocalizePathname(null)).toEqual(null); +}); + +it('works for nested pages', () => { + expect(unlocalizePathname('/en/nested')).toEqual('/nested'); +}); + +it('works with sub-tags', () => { + expect(unlocalizePathname('/en-UK/nested')).toEqual('/nested'); +}); diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 742218bf2..f75510c5e 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -150,7 +150,7 @@ If you've encountered an issue, you can [explore the code for a working example] If you're in a transitioning phase, either from the `pages` directory to the `app` directory, or from Client Components to the Server Components beta, you can apply `NextIntlClientProvider` additionally. -## Navigating between pages +## Routing In the `pages` folder, Next.js automatically considers the current locale for `next/link`. Since this is no longer the case for the `app` directory, `next-intl` provides a drop-in replacement for this use case. @@ -177,6 +177,17 @@ const router = useLocalizedRouter(); router.push('/about'); ``` +To retrieve the pathname without a locale prefix, you can call `useUnlocalizedPathname`. + +```tsx +'use client'; + +import {useUnlocalizedPathname} from 'next-intl/client'; + +// When the user is on `/en`, this will be `/` +const pathname = useUnlocalizedPathname(); +``` + ## Switching to Client Components If you need to use translations in Client Components, the best approach is to pass the generated labels as props. From a9016e696e3ea6f1ee26833ea80667ecf7e670e7 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 23 Jan 2023 14:08:41 +0100 Subject: [PATCH 099/312] 2.11.0-beta.4 [skip ci] --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index f75510c5e..5790f04cd 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -13,7 +13,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current beta version ``` -npm install next-intl@2.11.0-beta.2 +npm install next-intl@2.11.0-beta.4 ``` This beta version was tested with `next@13.1.1`. From e858ca80ae4f56950462417b8efca4dfd575bbdc Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 31 Jan 2023 17:34:32 +0100 Subject: [PATCH 100/312] Consistent `now` value across server and client --- .../src/app/[locale]/client/ClientContent.tsx | 5 ++++- .../app/[locale]/client/DelayedServerContent.tsx | 13 +++++++++++++ .../src/app/[locale]/client/page.tsx | 9 ++++++--- .../example-next-13-advanced/tests/main.spec.ts | 15 +++++++++++++++ .../src/client/NextIntlClientProvider.tsx | 14 ++++++++++++-- packages/next-intl/src/react-server/useConfig.tsx | 8 +++++++- 6 files changed, 57 insertions(+), 7 deletions(-) create mode 100644 packages/example-next-13-advanced/src/app/[locale]/client/DelayedServerContent.tsx diff --git a/packages/example-next-13-advanced/src/app/[locale]/client/ClientContent.tsx b/packages/example-next-13-advanced/src/app/[locale]/client/ClientContent.tsx index 59164f1fb..ecf10c2ca 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/client/ClientContent.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/client/ClientContent.tsx @@ -1,11 +1,14 @@ 'use client'; -import {LocalizedLink} from 'next-intl'; +import {useNow, LocalizedLink} from 'next-intl'; import {useUnlocalizedPathname} from 'next-intl/client'; export default function ClientContent() { + const now = useNow(); + return ( <> +

{now.toISOString()}

Go to home

{useUnlocalizedPathname()}

diff --git a/packages/example-next-13-advanced/src/app/[locale]/client/DelayedServerContent.tsx b/packages/example-next-13-advanced/src/app/[locale]/client/DelayedServerContent.tsx new file mode 100644 index 000000000..5f8d0989e --- /dev/null +++ b/packages/example-next-13-advanced/src/app/[locale]/client/DelayedServerContent.tsx @@ -0,0 +1,13 @@ +import {useNow} from 'next-intl'; +import {use} from 'react'; + +export default function DelayedServerContent() { + use(new Promise((resolve) => setTimeout(resolve, 50))); + const now = useNow(); + + return ( + <> +

{now.toISOString()}

+ + ); +} diff --git a/packages/example-next-13-advanced/src/app/[locale]/client/page.tsx b/packages/example-next-13-advanced/src/app/[locale]/client/page.tsx index 1736711d6..f679db197 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/client/page.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/client/page.tsx @@ -1,17 +1,20 @@ -import {useTranslations, useLocale} from 'next-intl'; +import {useTranslations, useLocale, useNow} from 'next-intl'; import {NextIntlClientProvider} from 'next-intl/client'; import PageLayout from '../../../components/PageLayout'; import ClientContent from './ClientContent'; +import DelayedServerContent from './DelayedServerContent'; export default function Client() { const t = useTranslations('Client'); const locale = useLocale(); + const now = useNow(); return (

{t('description')}

- - +

{now.toISOString()}

+ +
diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index 9d6648a15..2f8b21100 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -139,6 +139,21 @@ it('can use `LocalizedLink` on the client', async ({page}) => { ); }); +it('supports a consistent `now` value across the server and client', async ({ + page +}) => { + await page.goto('/en/client'); + + const serverDate = await page.getByTestId('NowFromServer').textContent(); + const serverDateDelayed = await page + .getByTestId('NowFromServerDelayed') + .textContent(); + const clientDate = await page.getByTestId('NowFromClient').textContent(); + + expect(serverDate).toBe(serverDateDelayed); + expect(serverDate).toBe(clientDate); +}); + it('can use `useUnlocalizedPathname`', async ({page}) => { await page.goto('/en/client'); await expect(page.getByTestId('UnlocalizedPathname')).toHaveText('/client'); diff --git a/packages/next-intl/src/client/NextIntlClientProvider.tsx b/packages/next-intl/src/client/NextIntlClientProvider.tsx index c8fd4c84e..c566bc9ee 100644 --- a/packages/next-intl/src/client/NextIntlClientProvider.tsx +++ b/packages/next-intl/src/client/NextIntlClientProvider.tsx @@ -4,13 +4,16 @@ import {useRouter} from 'next/router'; import React, {ComponentProps} from 'react'; import {IntlProvider} from 'use-intl'; -type Props = Omit, 'locale'> & { +type Props = Omit, 'locale' | 'now'> & { locale?: string; + /** If a string is supplied, make sure this conforms to the ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ */ + now?: Date | string; }; export default function NextIntlClientProvider({ children, locale, + now, ...rest }: Props) { let router; @@ -28,6 +31,13 @@ export default function NextIntlClientProvider({ locale = router.locale; } + // Currently RSC serialize dates to strings, therefore make sure we have + // a date object. We might be able to remove this once more types have + // first-class serialization support (https://github.com/facebook/react/issues/25687) + if (typeof now === 'string') { + now = new Date(now); + } + if (!locale) { throw new Error( process.env.NODE_ENV !== 'production' @@ -37,7 +47,7 @@ export default function NextIntlClientProvider({ } return ( - + {children} ); diff --git a/packages/next-intl/src/react-server/useConfig.tsx b/packages/next-intl/src/react-server/useConfig.tsx index 99e664a10..dfb1af1a4 100644 --- a/packages/next-intl/src/react-server/useConfig.tsx +++ b/packages/next-intl/src/react-server/useConfig.tsx @@ -8,6 +8,9 @@ const receiveMessages = cache( getMessages?.({locale}) ); +// Make sure `now` is consistent across the request in case none was configured +const receiveNow = cache((now?: Date) => now || new Date()); + function isPromise(value: any): value is Promise { return value != null && typeof value.then === 'function'; } @@ -28,7 +31,10 @@ export default function useConfig() { return {messages, ...rest}; } - const opts = {...getStaticConfig(), locale}; + const {now: receivedNow, ...rest} = getStaticConfig(); + const now = receiveNow(receivedNow); + const opts = {...rest, now, locale}; + return getIntlContextValue(opts); }, [locale]); } From 801d0f6571f70a2e88a373f15c82c4d008b2c35f Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 1 Feb 2023 11:06:32 +0100 Subject: [PATCH 101/312] Fix TS warning --- packages/use-intl/src/core/createBaseTranslator.tsx | 2 +- packages/use-intl/test/react/useTranslations.test.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/use-intl/src/core/createBaseTranslator.tsx b/packages/use-intl/src/core/createBaseTranslator.tsx index 2686f6095..25103ba63 100644 --- a/packages/use-intl/src/core/createBaseTranslator.tsx +++ b/packages/use-intl/src/core/createBaseTranslator.tsx @@ -1,4 +1,4 @@ -import IntlMessageFormat from 'intl-messageformat'; +import {IntlMessageFormat} from 'intl-messageformat'; import { cloneElement, isValidElement, diff --git a/packages/use-intl/test/react/useTranslations.test.tsx b/packages/use-intl/test/react/useTranslations.test.tsx index d8a4f38b5..e873a87b6 100644 --- a/packages/use-intl/test/react/useTranslations.test.tsx +++ b/packages/use-intl/test/react/useTranslations.test.tsx @@ -1,6 +1,6 @@ import {render, screen} from '@testing-library/react'; import {parseISO} from 'date-fns'; -import IntlMessageFormat from 'intl-messageformat'; +import {IntlMessageFormat} from 'intl-messageformat'; import React, {ReactNode} from 'react'; import { Formats, From 30c918c69cec8cc1a09181f2fa23b749365aef06 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 1 Feb 2023 14:58:47 +0100 Subject: [PATCH 102/312] Change config format so `timeZone` and `now` can be dynamically set at runtime. Also fix forwarding of headers when changing the locale. --- .../src/components/CurrentTime.tsx | 4 +- .../example-next-13-advanced/src/i18n.tsx | 89 +++++++++++-------- .../tests/main.spec.ts | 11 +++ packages/example-next-13/.eslintrc.js | 10 ++- packages/example-next-13/src/i18n.tsx | 13 ++- packages/next-intl/src/index.tsx | 1 + .../next-intl/src/react-server/useConfig.tsx | 61 ++++++++----- .../next-intl/src/server/NextIntlConfig.tsx | 27 ++++-- .../src/server/NextIntlServerConfig.tsx | 18 ++++ .../src/server/createIntlMiddleware.tsx | 12 +-- .../next-intl/src/server/staticConfig.tsx | 6 -- .../pages/docs/next-13/server-components.mdx | 36 ++++++-- 12 files changed, 192 insertions(+), 96 deletions(-) create mode 100644 packages/next-intl/src/server/NextIntlServerConfig.tsx delete mode 100644 packages/next-intl/src/server/staticConfig.tsx diff --git a/packages/example-next-13-advanced/src/components/CurrentTime.tsx b/packages/example-next-13-advanced/src/components/CurrentTime.tsx index e147ccb45..c298294f5 100644 --- a/packages/example-next-13-advanced/src/components/CurrentTime.tsx +++ b/packages/example-next-13-advanced/src/components/CurrentTime.tsx @@ -6,8 +6,8 @@ export default function CurrentTime() { const timeZone = useTimeZone(); return ( -

- {intl.formatDateTime(now, 'medium')} ({timeZone}) +

+ {intl.formatDateTime(now, 'medium')} ({timeZone || 'N/A'})

); } diff --git a/packages/example-next-13-advanced/src/i18n.tsx b/packages/example-next-13-advanced/src/i18n.tsx index e5b297795..e80c225ae 100644 --- a/packages/example-next-13-advanced/src/i18n.tsx +++ b/packages/example-next-13-advanced/src/i18n.tsx @@ -1,42 +1,55 @@ -import {IntlError, NextIntlConfig} from 'next-intl'; +import { + NextIntlRuntimeConfigParams, + NextIntlRuntimeConfig, + NextIntlStaticConfig +} from 'next-intl'; -const i18n: NextIntlConfig = { +export default { locales: ['en', 'de'], - defaultLocale: 'en', - async getMessages({locale}) { - return (await import(`../messages/${locale}.json`)).default; - }, - defaultTranslationValues: { - globalString: 'Global string', - highlight: (chunks) => {chunks} - }, - formats: { - dateTime: { - medium: { - dateStyle: 'medium', - timeStyle: 'short', - hour12: false + defaultLocale: 'en' +} as NextIntlStaticConfig; + +export async function getRuntimeConfig( + params: NextIntlRuntimeConfigParams +): Promise { + const now = require('next/headers').headers().get('x-now'); + const timeZone = require('next/headers').headers().get('x-time-zone'); + const messages = (await import(`../messages/${params.locale}.json`)).default; + + return { + now: now ? new Date(now) : undefined, + timeZone, + messages, + defaultTranslationValues: { + globalString: 'Global string', + highlight: (chunks) => {chunks} + }, + formats: { + dateTime: { + medium: { + dateStyle: 'medium', + timeStyle: 'short', + hour12: false + } } + }, + onError(error) { + if ( + error.message === + (process.env.NODE_ENV === 'production' + ? 'MISSING_MESSAGE' + : 'MISSING_MESSAGE: Could not resolve `missing` in `Index`.') + ) { + // Do nothing, this error is triggered on purpose + } else { + console.error(JSON.stringify(error.message)); + } + }, + getMessageFallback({key, namespace}) { + return ( + '`getMessageFalback` called for ' + + [namespace, key].filter((part) => part != null).join('.') + ); } - }, - onError(error: IntlError) { - if ( - error.message === - (process.env.NODE_ENV === 'production' - ? 'MISSING_MESSAGE' - : 'MISSING_MESSAGE: Could not resolve `missing` in `Index`.') - ) { - // Do nothing, this error is triggered on purpose - } else { - console.error(JSON.stringify(error.message)); - } - }, - getMessageFallback({key, namespace}: {namespace?: string; key: string}) { - return ( - '`getMessageFalback` called for ' + - [namespace, key].filter((part) => part != null).join('.') - ); - } -}; - -export default i18n; + }; +} diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index 2f8b21100..fc54cec7d 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -176,3 +176,14 @@ it('can use the localized router on the client side without a provider', async ( page.getByTestId('ClientRouterWithoutProvider-link').click(); await expect(page).toHaveURL(/\/en\/nested/); }); + +it('can set `now` and `timeZone` at runtime', async ({page}) => { + page.setExtraHTTPHeaders({ + 'x-now': '2020-01-01T00:00:00.000Z', + 'x-time-zone': 'Asia/Shanghai' + }); + + await page.goto('/en'); + const element = page.getByTestId('CurrentTime'); + await expect(element).toHaveText('Jan 1, 2020, 08:00 (Asia/Shanghai)'); +}); diff --git a/packages/example-next-13/.eslintrc.js b/packages/example-next-13/.eslintrc.js index 3d3a6276c..3209e6bbe 100644 --- a/packages/example-next-13/.eslintrc.js +++ b/packages/example-next-13/.eslintrc.js @@ -11,5 +11,13 @@ module.exports = { ], rules: { 'react/react-in-jsx-scope': 'off' - } + }, + overrides: [ + { + files: ['src/i18n.tsx'], + rules: { + 'func-style': 'off' + } + } + ] }; diff --git a/packages/example-next-13/src/i18n.tsx b/packages/example-next-13/src/i18n.tsx index f0378f373..7d4df6d58 100644 --- a/packages/example-next-13/src/i18n.tsx +++ b/packages/example-next-13/src/i18n.tsx @@ -1,11 +1,10 @@ -import {NextIntlConfig} from 'next-intl'; +import {GetNextIntlRuntimeConfig} from 'next-intl'; -const i18n: NextIntlConfig = { +export default { locales: ['en', 'de'], - defaultLocale: 'en', - async getMessages({locale}) { - return (await import(`../messages/${locale}.json`)).default; - } + defaultLocale: 'en' }; -export default i18n; +export const getRuntimeConfig: GetNextIntlRuntimeConfig = async ({locale}) => ({ + messages: (await import(`../messages/${locale}.json`)).default +}); diff --git a/packages/next-intl/src/index.tsx b/packages/next-intl/src/index.tsx index 99b5d013b..9b3969667 100644 --- a/packages/next-intl/src/index.tsx +++ b/packages/next-intl/src/index.tsx @@ -7,6 +7,7 @@ export * from 'use-intl'; export {default as useLocalizedRouter} from './react-client/useLocalizedRouter'; export {default as LocalizedLink} from './react-client/LocalizedLink'; +export * from './server/NextIntlConfig'; export {default as NextIntlConfig} from './server/NextIntlConfig'; // Legacy export for compatibility diff --git a/packages/next-intl/src/react-server/useConfig.tsx b/packages/next-intl/src/react-server/useConfig.tsx index dfb1af1a4..66593c051 100644 --- a/packages/next-intl/src/react-server/useConfig.tsx +++ b/packages/next-intl/src/react-server/useConfig.tsx @@ -1,16 +1,24 @@ import {cache, use, useMemo} from 'react'; import getIntlContextValue from 'use-intl/dist/src/react/getIntlContextValue'; -import staticConfig from '../server/staticConfig'; +import {GetNextIntlRuntimeConfig} from '../server/NextIntlConfig'; +import NextIntlServerConfig, { + getRuntimeConfig +} from '../server/NextIntlServerConfig'; import useLocale from './useLocale'; -const receiveMessages = cache( - (locale: string, getMessages: typeof staticConfig['getMessages']) => - getMessages?.({locale}) -); - // Make sure `now` is consistent across the request in case none was configured const receiveNow = cache((now?: Date) => now || new Date()); +const receiveRuntimeConfig = cache( + async (locale: string, getConfig?: GetNextIntlRuntimeConfig) => { + let result = getConfig?.({locale}); + if (result instanceof Promise) { + result = await result; + } + return result; + } +); + function isPromise(value: any): value is Promise { return value != null && typeof value.then === 'function'; } @@ -18,23 +26,36 @@ function isPromise(value: any): value is Promise { export default function useConfig() { const locale = useLocale(); - return useMemo(() => { - function getStaticConfig() { - const {getMessages, ...rest} = staticConfig; - const messagesOrPromise = receiveMessages(locale, getMessages); - - // Only promises can be unwrapped - const messages = isPromise(messagesOrPromise) - ? use(messagesOrPromise) - : messagesOrPromise; + function safeUnwrap(valueOrPromise: Value | Promise): Value { + return isPromise(valueOrPromise) ? use(valueOrPromise) : valueOrPromise; + } - return {messages, ...rest}; + return useMemo(() => { + const runtimeConfig = use(receiveRuntimeConfig(locale, getRuntimeConfig)); + + let messages; + if ('getMessages' in NextIntlServerConfig) { + messages = safeUnwrap(NextIntlServerConfig.getMessages?.({locale})); + console.warn( + `\n\nDEPRECATION WARNING: The \`getMessages()\` function is deprecated and will be removed in the stable release of next-intl. Please see the updated documentation: https://next-intl-docs.vercel.app/docs/next-13/server-components\n\n` + ); + } else { + messages = runtimeConfig?.messages; } - const {now: receivedNow, ...rest} = getStaticConfig(); - const now = receiveNow(receivedNow); - const opts = {...rest, now, locale}; - + const now = receiveNow( + 'now' in NextIntlServerConfig + ? NextIntlServerConfig.now + : runtimeConfig?.now + ); + + const opts = { + ...NextIntlServerConfig, + ...runtimeConfig, + now, + messages, + locale + }; return getIntlContextValue(opts); }, [locale]); } diff --git a/packages/next-intl/src/server/NextIntlConfig.tsx b/packages/next-intl/src/server/NextIntlConfig.tsx index 949ade9a0..2cc3b6fbe 100644 --- a/packages/next-intl/src/server/NextIntlConfig.tsx +++ b/packages/next-intl/src/server/NextIntlConfig.tsx @@ -1,18 +1,17 @@ import AbstractIntlMessages from 'use-intl/dist/core/AbstractIntlMessages'; import IntlProviderProps from 'use-intl/dist/react/IntlProviderProps'; -export type NextIntlRuntimeConfig = Pick< - IntlProviderProps, - 'locale' | 'now' | 'timeZone' ->; +export type NextIntlRuntimeConfigParams = { + locale: string; +}; -type NextIntlConfig = { +export type NextIntlStaticConfig = { locales: Array; defaultLocale: string; +}; - getMessages?( - runtimeConfig: NextIntlRuntimeConfig - ): AbstractIntlMessages | Promise; +export type NextIntlRuntimeConfig = { + messages?: AbstractIntlMessages; } & Pick< IntlProviderProps, | 'defaultTranslationValues' @@ -23,4 +22,16 @@ type NextIntlConfig = { | 'timeZone' >; +export type GetNextIntlRuntimeConfig = ( + params: NextIntlRuntimeConfigParams +) => Promise | NextIntlRuntimeConfig; + +/** @deprecated See the updated docs for the config file */ +type NextIntlConfig = NextIntlStaticConfig & + NextIntlRuntimeConfig & { + /** @deprecated Use the `messages` property instead */ + getMessages?( + params: NextIntlRuntimeConfigParams + ): AbstractIntlMessages | Promise; + }; export default NextIntlConfig; diff --git a/packages/next-intl/src/server/NextIntlServerConfig.tsx b/packages/next-intl/src/server/NextIntlServerConfig.tsx new file mode 100644 index 000000000..a11912ec6 --- /dev/null +++ b/packages/next-intl/src/server/NextIntlServerConfig.tsx @@ -0,0 +1,18 @@ +// eslint-disable-next-line import/no-extraneous-dependencies +import NextIntlServerConfig, { + getRuntimeConfig as suppliedGetRuntimeConfig + // @ts-expect-error +} from 'next-intl/config'; +import NextIntlConfig, { + NextIntlRuntimeConfig, + NextIntlRuntimeConfigParams, + NextIntlStaticConfig +} from './NextIntlConfig'; + +export default NextIntlServerConfig as NextIntlStaticConfig | NextIntlConfig; + +export const getRuntimeConfig = suppliedGetRuntimeConfig as + | (( + params: NextIntlRuntimeConfigParams + ) => NextIntlRuntimeConfig | Promise) + | undefined; diff --git a/packages/next-intl/src/server/createIntlMiddleware.tsx b/packages/next-intl/src/server/createIntlMiddleware.tsx index 100c2644f..e7c6f14f0 100644 --- a/packages/next-intl/src/server/createIntlMiddleware.tsx +++ b/packages/next-intl/src/server/createIntlMiddleware.tsx @@ -1,15 +1,15 @@ import {NextRequest, NextResponse} from 'next/server'; import {COOKIE_LOCALE_NAME, HEADER_LOCALE_NAME} from '../shared/constants'; +import NextIntlServerConfig from './NextIntlServerConfig'; import resolveLocale from './resolveLocale'; -import staticConfig from './staticConfig'; // If there's an exact match for this path, we'll add the locale to the URL const ROOT_URL = '/'; export default function createIntlMiddleware() { const i18n = { - locales: staticConfig.locales, - defaultLocale: staticConfig.defaultLocale + locales: NextIntlServerConfig.locales, + defaultLocale: NextIntlServerConfig.defaultLocale }; return function middleware(request: NextRequest) { @@ -35,11 +35,11 @@ export default function createIntlMiddleware() { // Only apply a header if absolutely necessary // as this causes full page reloads if (isChangingLocale) { + request.headers.set(HEADER_LOCALE_NAME, locale); + responseInit = { request: { - headers: new Headers({ - [HEADER_LOCALE_NAME]: locale - }) + headers: request.headers } }; } diff --git a/packages/next-intl/src/server/staticConfig.tsx b/packages/next-intl/src/server/staticConfig.tsx deleted file mode 100644 index 29e044b71..000000000 --- a/packages/next-intl/src/server/staticConfig.tsx +++ /dev/null @@ -1,6 +0,0 @@ -// @ts-expect-error Should we provide a default? Probably. -// eslint-disable-next-line import/no-extraneous-dependencies -import staticConfig from 'next-intl/config'; -import NextIntlConfig from './NextIntlConfig'; - -export default staticConfig as NextIntlConfig; diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 5790f04cd..d26be5b9e 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -59,17 +59,16 @@ If you haven't done so already, [create a Next.js 13 app that uses the `app` dir 2. Define your i18n configuration (short for "internationalization") in `i18n.tsx`: ```tsx -import {NextIntlConfig} from 'next-intl'; +import {GetNextIntlRuntimeConfig} from 'next-intl'; -const config: NextIntlConfig = { +export default { locales: ['en', 'de'], - defaultLocale: 'en', - async getMessages({locale}) { - return (await import(`../messages/${locale}.json`)).default; - } + defaultLocale: 'en' }; -export default config; +export const getRuntimeConfig: GetNextIntlRuntimeConfig = async ({locale}) => ({ + messages: (await import(`../messages/${locale}.json`)).default +}); ``` 3. Provide the path to your configuration in `next.config.js`: @@ -120,7 +119,7 @@ type Props = { export default function LocaleLayout({children, params}: Props) { const locale = useLocale(); - // Show a 404 error for unknown locales + // Show a 404 error if the user requests an unknown locale if (params.locale !== locale) { notFound(); } @@ -188,6 +187,27 @@ import {useUnlocalizedPathname} from 'next-intl/client'; const pathname = useUnlocalizedPathname(); ``` +## Global runtime configuration + +If you'd like to apply [global runtime configuration](/docs/usage/configuration) like `formats`, `defaultTranslationValues`, `timeZone`, `now`, or [error handling functions](/docs/usage/error-handling) like `onError` and `getMessageFallback`, you can provide these via `getRuntimeConfig` in `i18n.tsx`. + +```tsx +// i18n.tsx + +import {GetNextIntlRuntimeConfig} from 'next-intl'; + +// ... + +export const getRuntimeConfig: GetNextIntlRuntimeConfig = async ({locale}) => { + const messages = (await import(`../messages/${locale}.json`)).default; + + // You can read from headers or cookies here if necessary. + const timezone = require('next/headers').headers().get('x-timezone'); + + return {timezone, messages}; +}; +``` + ## Switching to Client Components If you need to use translations in Client Components, the best approach is to pass the generated labels as props. From 626d1a71877b126d9f6be475d2313912981bb442 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 1 Feb 2023 15:00:11 +0100 Subject: [PATCH 103/312] Unnecessary type cast --- packages/example-next-13-advanced/src/i18n.tsx | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/example-next-13-advanced/src/i18n.tsx b/packages/example-next-13-advanced/src/i18n.tsx index e80c225ae..1eb086de4 100644 --- a/packages/example-next-13-advanced/src/i18n.tsx +++ b/packages/example-next-13-advanced/src/i18n.tsx @@ -1,13 +1,9 @@ -import { - NextIntlRuntimeConfigParams, - NextIntlRuntimeConfig, - NextIntlStaticConfig -} from 'next-intl'; +import {NextIntlRuntimeConfigParams, NextIntlRuntimeConfig} from 'next-intl'; export default { locales: ['en', 'de'], defaultLocale: 'en' -} as NextIntlStaticConfig; +}; export async function getRuntimeConfig( params: NextIntlRuntimeConfigParams From c727eb81d591ae06ed6380dc85f3821e4b5613ef Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 1 Feb 2023 15:07:03 +0100 Subject: [PATCH 104/312] Revert import change --- packages/use-intl/src/core/createBaseTranslator.tsx | 3 ++- packages/use-intl/src/react/useTranslationsImpl.tsx | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/use-intl/src/core/createBaseTranslator.tsx b/packages/use-intl/src/core/createBaseTranslator.tsx index 25103ba63..64d5d1c1f 100644 --- a/packages/use-intl/src/core/createBaseTranslator.tsx +++ b/packages/use-intl/src/core/createBaseTranslator.tsx @@ -1,4 +1,5 @@ -import {IntlMessageFormat} from 'intl-messageformat'; +// eslint-disable-next-line import/no-named-as-default -- False positive +import IntlMessageFormat from 'intl-messageformat'; import { cloneElement, isValidElement, diff --git a/packages/use-intl/src/react/useTranslationsImpl.tsx b/packages/use-intl/src/react/useTranslationsImpl.tsx index 92690ecb2..bd031fa47 100644 --- a/packages/use-intl/src/react/useTranslationsImpl.tsx +++ b/packages/use-intl/src/react/useTranslationsImpl.tsx @@ -1,4 +1,5 @@ -import {IntlMessageFormat} from 'intl-messageformat'; +// eslint-disable-next-line import/no-named-as-default -- False positive +import IntlMessageFormat from 'intl-messageformat'; import {useMemo, useRef} from 'react'; import AbstractIntlMessages from '../core/AbstractIntlMessages'; import createBaseTranslator, { From 0a771a89569fcff4b1c2385ad8a17af7abdc6ca3 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 1 Feb 2023 15:23:55 +0100 Subject: [PATCH 105/312] Fix another import --- packages/use-intl/test/react/useTranslations.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/use-intl/test/react/useTranslations.test.tsx b/packages/use-intl/test/react/useTranslations.test.tsx index e873a87b6..53feb7633 100644 --- a/packages/use-intl/test/react/useTranslations.test.tsx +++ b/packages/use-intl/test/react/useTranslations.test.tsx @@ -1,6 +1,7 @@ import {render, screen} from '@testing-library/react'; import {parseISO} from 'date-fns'; -import {IntlMessageFormat} from 'intl-messageformat'; +// eslint-disable-next-line import/no-named-as-default -- False positive +import IntlMessageFormat from 'intl-messageformat'; import React, {ReactNode} from 'react'; import { Formats, From 16a95f39e8e17120d9cbf98642b918e117b146a4 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 1 Feb 2023 15:52:57 +0100 Subject: [PATCH 106/312] Latest beta --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index d26be5b9e..553257845 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -13,7 +13,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current beta version ``` -npm install next-intl@2.11.0-beta.4 +npm install next-intl@2.11.0-beta.5 ``` This beta version was tested with `next@13.1.1`. From 0f9371753926cd7d19d202b1ba50b170c3d67910 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 1 Feb 2023 16:07:42 +0100 Subject: [PATCH 107/312] Fix typo [skip ci] --- packages/website/pages/docs/next-13/server-components.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 553257845..8901da696 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -202,9 +202,9 @@ export const getRuntimeConfig: GetNextIntlRuntimeConfig = async ({locale}) => { const messages = (await import(`../messages/${locale}.json`)).default; // You can read from headers or cookies here if necessary. - const timezone = require('next/headers').headers().get('x-timezone'); + const timeZone = require('next/headers').headers().get('x-time-zone'); - return {timezone, messages}; + return {timeZone, messages}; }; ``` From d144dd9226b84f7e273ad4c34f1981d2c6835b8c Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 1 Feb 2023 17:24:12 +0100 Subject: [PATCH 108/312] Move config for `locales` and `defaultLocale` to middleware and improve API to create request config --- .../example-next-13-advanced/src/i18n.tsx | 20 +- .../src/middleware.tsx | 5 +- packages/example-next-13/src/i18n.tsx | 11 +- packages/example-next-13/src/middleware.tsx | 5 +- packages/next-intl/src/index.tsx | 1 - .../next-intl/src/react-server/useConfig.tsx | 43 +--- .../next-intl/src/server/NextIntlConfig.tsx | 23 +- .../src/server/NextIntlMiddlewareConfig.tsx | 6 + .../src/server/NextIntlServerConfig.tsx | 18 -- .../src/server/createIntlMiddleware.tsx | 11 +- .../src/server/createRequestConfig.tsx | 9 + .../next-intl/src/server/getRequestConfig.tsx | 13 ++ packages/next-intl/src/server/index.tsx | 1 + .../next-intl/src/server/resolveLocale.tsx | 4 +- .../pages/docs/next-13/server-components.mdx | 39 ++-- yarn.lock | 216 ++++++++---------- 16 files changed, 183 insertions(+), 242 deletions(-) create mode 100644 packages/next-intl/src/server/NextIntlMiddlewareConfig.tsx delete mode 100644 packages/next-intl/src/server/NextIntlServerConfig.tsx create mode 100644 packages/next-intl/src/server/createRequestConfig.tsx create mode 100644 packages/next-intl/src/server/getRequestConfig.tsx diff --git a/packages/example-next-13-advanced/src/i18n.tsx b/packages/example-next-13-advanced/src/i18n.tsx index 1eb086de4..fad565fc2 100644 --- a/packages/example-next-13-advanced/src/i18n.tsx +++ b/packages/example-next-13-advanced/src/i18n.tsx @@ -1,16 +1,10 @@ -import {NextIntlRuntimeConfigParams, NextIntlRuntimeConfig} from 'next-intl'; +import {getRequestConfig} from 'next-intl/server'; +import {headers} from 'next/headers'; -export default { - locales: ['en', 'de'], - defaultLocale: 'en' -}; - -export async function getRuntimeConfig( - params: NextIntlRuntimeConfigParams -): Promise { - const now = require('next/headers').headers().get('x-now'); - const timeZone = require('next/headers').headers().get('x-time-zone'); - const messages = (await import(`../messages/${params.locale}.json`)).default; +export default getRequestConfig(async ({locale}) => { + const now = headers().get('x-now'); + const timeZone = headers().get('x-time-zone') ?? undefined; + const messages = (await import(`../messages/${locale}.json`)).default; return { now: now ? new Date(now) : undefined, @@ -48,4 +42,4 @@ export async function getRuntimeConfig( ); } }; -} +}); diff --git a/packages/example-next-13-advanced/src/middleware.tsx b/packages/example-next-13-advanced/src/middleware.tsx index 0722689e1..25ff46236 100644 --- a/packages/example-next-13-advanced/src/middleware.tsx +++ b/packages/example-next-13-advanced/src/middleware.tsx @@ -1,6 +1,9 @@ import {createIntlMiddleware} from 'next-intl/server'; -export default createIntlMiddleware(); +export default createIntlMiddleware({ + locales: ['en', 'de'], + defaultLocale: 'en' +}); export const config = { // Skip all internal paths diff --git a/packages/example-next-13/src/i18n.tsx b/packages/example-next-13/src/i18n.tsx index 7d4df6d58..c45ddee14 100644 --- a/packages/example-next-13/src/i18n.tsx +++ b/packages/example-next-13/src/i18n.tsx @@ -1,10 +1,5 @@ -import {GetNextIntlRuntimeConfig} from 'next-intl'; +import {getRequestConfig} from 'next-intl/server'; -export default { - locales: ['en', 'de'], - defaultLocale: 'en' -}; - -export const getRuntimeConfig: GetNextIntlRuntimeConfig = async ({locale}) => ({ +export default getRequestConfig(async ({locale}) => ({ messages: (await import(`../messages/${locale}.json`)).default -}); +})); diff --git a/packages/example-next-13/src/middleware.tsx b/packages/example-next-13/src/middleware.tsx index 0722689e1..25ff46236 100644 --- a/packages/example-next-13/src/middleware.tsx +++ b/packages/example-next-13/src/middleware.tsx @@ -1,6 +1,9 @@ import {createIntlMiddleware} from 'next-intl/server'; -export default createIntlMiddleware(); +export default createIntlMiddleware({ + locales: ['en', 'de'], + defaultLocale: 'en' +}); export const config = { // Skip all internal paths diff --git a/packages/next-intl/src/index.tsx b/packages/next-intl/src/index.tsx index 9b3969667..aca768a9d 100644 --- a/packages/next-intl/src/index.tsx +++ b/packages/next-intl/src/index.tsx @@ -8,7 +8,6 @@ export * from 'use-intl'; export {default as useLocalizedRouter} from './react-client/useLocalizedRouter'; export {default as LocalizedLink} from './react-client/LocalizedLink'; export * from './server/NextIntlConfig'; -export {default as NextIntlConfig} from './server/NextIntlConfig'; // Legacy export for compatibility export {NextIntlClientProvider as NextIntlProvider} from './client'; diff --git a/packages/next-intl/src/react-server/useConfig.tsx b/packages/next-intl/src/react-server/useConfig.tsx index 66593c051..e4082275e 100644 --- a/packages/next-intl/src/react-server/useConfig.tsx +++ b/packages/next-intl/src/react-server/useConfig.tsx @@ -1,21 +1,19 @@ import {cache, use, useMemo} from 'react'; import getIntlContextValue from 'use-intl/dist/src/react/getIntlContextValue'; -import {GetNextIntlRuntimeConfig} from '../server/NextIntlConfig'; -import NextIntlServerConfig, { - getRuntimeConfig -} from '../server/NextIntlServerConfig'; +import createRequestConfig from '../server/createRequestConfig'; import useLocale from './useLocale'; -// Make sure `now` is consistent across the request in case none was configured -const receiveNow = cache((now?: Date) => now || new Date()); - const receiveRuntimeConfig = cache( - async (locale: string, getConfig?: GetNextIntlRuntimeConfig) => { + async (locale: string, getConfig?: typeof createRequestConfig) => { let result = getConfig?.({locale}); if (result instanceof Promise) { result = await result; } - return result; + return { + ...result, + // Make sure `now` is consistent across the request in case none was configured + now: result?.now || new Date() + }; } ); @@ -31,31 +29,10 @@ export default function useConfig() { } return useMemo(() => { - const runtimeConfig = use(receiveRuntimeConfig(locale, getRuntimeConfig)); - - let messages; - if ('getMessages' in NextIntlServerConfig) { - messages = safeUnwrap(NextIntlServerConfig.getMessages?.({locale})); - console.warn( - `\n\nDEPRECATION WARNING: The \`getMessages()\` function is deprecated and will be removed in the stable release of next-intl. Please see the updated documentation: https://next-intl-docs.vercel.app/docs/next-13/server-components\n\n` - ); - } else { - messages = runtimeConfig?.messages; - } - - const now = receiveNow( - 'now' in NextIntlServerConfig - ? NextIntlServerConfig.now - : runtimeConfig?.now + const runtimeConfig = safeUnwrap( + receiveRuntimeConfig(locale, createRequestConfig) ); - - const opts = { - ...NextIntlServerConfig, - ...runtimeConfig, - now, - messages, - locale - }; + const opts = {...runtimeConfig, locale}; return getIntlContextValue(opts); }, [locale]); } diff --git a/packages/next-intl/src/server/NextIntlConfig.tsx b/packages/next-intl/src/server/NextIntlConfig.tsx index 2cc3b6fbe..c99794c31 100644 --- a/packages/next-intl/src/server/NextIntlConfig.tsx +++ b/packages/next-intl/src/server/NextIntlConfig.tsx @@ -1,16 +1,7 @@ import AbstractIntlMessages from 'use-intl/dist/core/AbstractIntlMessages'; import IntlProviderProps from 'use-intl/dist/react/IntlProviderProps'; -export type NextIntlRuntimeConfigParams = { - locale: string; -}; - -export type NextIntlStaticConfig = { - locales: Array; - defaultLocale: string; -}; - -export type NextIntlRuntimeConfig = { +type NextIntlConfig = { messages?: AbstractIntlMessages; } & Pick< IntlProviderProps, @@ -22,16 +13,4 @@ export type NextIntlRuntimeConfig = { | 'timeZone' >; -export type GetNextIntlRuntimeConfig = ( - params: NextIntlRuntimeConfigParams -) => Promise | NextIntlRuntimeConfig; - -/** @deprecated See the updated docs for the config file */ -type NextIntlConfig = NextIntlStaticConfig & - NextIntlRuntimeConfig & { - /** @deprecated Use the `messages` property instead */ - getMessages?( - params: NextIntlRuntimeConfigParams - ): AbstractIntlMessages | Promise; - }; export default NextIntlConfig; diff --git a/packages/next-intl/src/server/NextIntlMiddlewareConfig.tsx b/packages/next-intl/src/server/NextIntlMiddlewareConfig.tsx new file mode 100644 index 000000000..e816d3da7 --- /dev/null +++ b/packages/next-intl/src/server/NextIntlMiddlewareConfig.tsx @@ -0,0 +1,6 @@ +type NextIntlMiddlewareConfig = { + locales: Array; + defaultLocale: string; +}; + +export default NextIntlMiddlewareConfig; diff --git a/packages/next-intl/src/server/NextIntlServerConfig.tsx b/packages/next-intl/src/server/NextIntlServerConfig.tsx deleted file mode 100644 index a11912ec6..000000000 --- a/packages/next-intl/src/server/NextIntlServerConfig.tsx +++ /dev/null @@ -1,18 +0,0 @@ -// eslint-disable-next-line import/no-extraneous-dependencies -import NextIntlServerConfig, { - getRuntimeConfig as suppliedGetRuntimeConfig - // @ts-expect-error -} from 'next-intl/config'; -import NextIntlConfig, { - NextIntlRuntimeConfig, - NextIntlRuntimeConfigParams, - NextIntlStaticConfig -} from './NextIntlConfig'; - -export default NextIntlServerConfig as NextIntlStaticConfig | NextIntlConfig; - -export const getRuntimeConfig = suppliedGetRuntimeConfig as - | (( - params: NextIntlRuntimeConfigParams - ) => NextIntlRuntimeConfig | Promise) - | undefined; diff --git a/packages/next-intl/src/server/createIntlMiddleware.tsx b/packages/next-intl/src/server/createIntlMiddleware.tsx index e7c6f14f0..cd3cd12cc 100644 --- a/packages/next-intl/src/server/createIntlMiddleware.tsx +++ b/packages/next-intl/src/server/createIntlMiddleware.tsx @@ -1,15 +1,18 @@ import {NextRequest, NextResponse} from 'next/server'; import {COOKIE_LOCALE_NAME, HEADER_LOCALE_NAME} from '../shared/constants'; -import NextIntlServerConfig from './NextIntlServerConfig'; +import NextIntlMiddlewareConfig from './NextIntlMiddlewareConfig'; import resolveLocale from './resolveLocale'; // If there's an exact match for this path, we'll add the locale to the URL const ROOT_URL = '/'; -export default function createIntlMiddleware() { +export default function createIntlMiddleware({ + defaultLocale, + locales +}: NextIntlMiddlewareConfig) { const i18n = { - locales: NextIntlServerConfig.locales, - defaultLocale: NextIntlServerConfig.defaultLocale + locales, + defaultLocale }; return function middleware(request: NextRequest) { diff --git a/packages/next-intl/src/server/createRequestConfig.tsx b/packages/next-intl/src/server/createRequestConfig.tsx new file mode 100644 index 000000000..67056ea82 --- /dev/null +++ b/packages/next-intl/src/server/createRequestConfig.tsx @@ -0,0 +1,9 @@ +// @ts-expect-error +// eslint-disable-next-line import/no-extraneous-dependencies +import getRuntimeConfig from 'next-intl/config'; +import NextIntlConfig from './NextIntlConfig'; +import {GetRequestConfigParams} from './getRequestConfig'; + +export default getRuntimeConfig as ( + params: GetRequestConfigParams +) => NextIntlConfig | Promise; diff --git a/packages/next-intl/src/server/getRequestConfig.tsx b/packages/next-intl/src/server/getRequestConfig.tsx new file mode 100644 index 000000000..d1d4b0950 --- /dev/null +++ b/packages/next-intl/src/server/getRequestConfig.tsx @@ -0,0 +1,13 @@ +import NextIntlConfig from './NextIntlConfig'; + +export type GetRequestConfigParams = { + locale: string; +}; + +export default function getRequestConfig( + createRequestConfig: ({ + locale + }: GetRequestConfigParams) => NextIntlConfig | Promise +) { + return createRequestConfig; +} diff --git a/packages/next-intl/src/server/index.tsx b/packages/next-intl/src/server/index.tsx index 736f7e1c4..c849b5061 100644 --- a/packages/next-intl/src/server/index.tsx +++ b/packages/next-intl/src/server/index.tsx @@ -3,3 +3,4 @@ */ export {default as createIntlMiddleware} from './createIntlMiddleware'; +export {default as getRequestConfig} from './getRequestConfig'; diff --git a/packages/next-intl/src/server/resolveLocale.tsx b/packages/next-intl/src/server/resolveLocale.tsx index ab0ff847a..2a484ae74 100644 --- a/packages/next-intl/src/server/resolveLocale.tsx +++ b/packages/next-intl/src/server/resolveLocale.tsx @@ -1,10 +1,10 @@ import acceptLanguageParser from 'accept-language-parser'; import {RequestCookies} from 'next/dist/server/web/spec-extension/cookies'; import {COOKIE_LOCALE_NAME} from '../shared/constants'; -import NextIntlConfig from './NextIntlConfig'; +import NextIntlMiddlewareConfig from './NextIntlMiddlewareConfig'; export default function resolveLocale( - i18n: NextIntlConfig, + i18n: NextIntlMiddlewareConfig, requestHeaders: Headers, requestCookies: RequestCookies, pathname: string diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 8901da696..eb59137d9 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -56,19 +56,14 @@ If you haven't done so already, [create a Next.js 13 app that uses the `app` dir } ``` -2. Define your i18n configuration (short for "internationalization") in `i18n.tsx`: +2. `next-intl` creates an i18n configuration (short for "internationalization") once per request and makes it available to all Server Components. Define this in `i18n.tsx`: ```tsx -import {GetNextIntlRuntimeConfig} from 'next-intl'; +import {getRequestConfig} from 'next-intl/server'; -export default { - locales: ['en', 'de'], - defaultLocale: 'en' -}; - -export const getRuntimeConfig: GetNextIntlRuntimeConfig = async ({locale}) => ({ +export default getRequestConfig(async ({locale}) => ({ messages: (await import(`../messages/${locale}.json`)).default -}); +})); ``` 3. Provide the path to your configuration in `next.config.js`: @@ -96,7 +91,10 @@ import {createIntlMiddleware} from 'next-intl/server'; // locale of the last page that the user has visited. // The middleware furthermore passes the resolved locale // to components in your app. -export default createIntlMiddleware(); +export default createIntlMiddleware({ + locales: ['en', 'de'], + defaultLocale: 'en' +}); export const config = { // Skip all internal paths @@ -187,25 +185,22 @@ import {useUnlocalizedPathname} from 'next-intl/client'; const pathname = useUnlocalizedPathname(); ``` -## Global runtime configuration +## Global request configuration -If you'd like to apply [global runtime configuration](/docs/usage/configuration) like `formats`, `defaultTranslationValues`, `timeZone`, `now`, or [error handling functions](/docs/usage/error-handling) like `onError` and `getMessageFallback`, you can provide these via `getRuntimeConfig` in `i18n.tsx`. +If you'd like to apply [global configuration](/docs/usage/configuration) like `formats`, `defaultTranslationValues`, `timeZone`, `now`, or [error handling functions](/docs/usage/error-handling) like `onError` and `getMessageFallback`, you can provide these in `i18n.tsx`. ```tsx // i18n.tsx -import {GetNextIntlRuntimeConfig} from 'next-intl'; - -// ... +import {headers} from 'next/headers'; +import {getRequestConfig} from 'next-intl/server'; -export const getRuntimeConfig: GetNextIntlRuntimeConfig = async ({locale}) => { - const messages = (await import(`../messages/${locale}.json`)).default; +export default getRequestConfig(async ({locale}) => ({ + messages: (await import(`../messages/${locale}.json`)).default, - // You can read from headers or cookies here if necessary. - const timeZone = require('next/headers').headers().get('x-time-zone'); - - return {timeZone, messages}; -}; + // You can read from headers or cookies here if necessary + timeZone: headers().get('x-time-zone') ?? undefined +})); ``` ## Switching to Client Components diff --git a/yarn.lock b/yarn.lock index 79839fd67..839fb6c44 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3481,7 +3481,7 @@ acorn-jsx@^5.0.0, acorn-jsx@^5.3.1, acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-node@^1.6.1: +acorn-node@^1.8.2: version "1.8.2" resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== @@ -3671,10 +3671,10 @@ arg@^4.1.0: resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== -arg@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.1.tgz#eb0c9a8f77786cad2af8ff2b862899842d7b6adb" - integrity sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA== +arg@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== argparse@^1.0.7: version "1.0.10" @@ -4284,10 +4284,10 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -chokidar@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" - integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -4644,17 +4644,6 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" -cosmiconfig@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" - integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - create-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" @@ -4912,14 +4901,14 @@ detect-newline@3.1.0, detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -detective@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" - integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg== +detective@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.1.tgz#6af01eeda11015acb0e73f933242b70f24f91034" + integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw== dependencies: - acorn-node "^1.6.1" + acorn-node "^1.8.2" defined "^1.0.0" - minimist "^1.1.1" + minimist "^1.2.6" dezalgo@^1.0.0: version "1.0.3" @@ -6006,18 +5995,7 @@ fast-glob@^3.1.1: micromatch "^4.0.2" picomatch "^2.2.1" -fast-glob@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-glob@^3.2.9: +fast-glob@^3.2.12, fast-glob@^3.2.9: version "3.2.12" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== @@ -6810,13 +6788,6 @@ ignore@^5.1.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== -import-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-3.0.0.tgz#20845547718015126ea9b3676b7592fb8bd4cf92" - integrity sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg== - dependencies: - import-from "^3.0.0" - import-fresh@^3.0.0: version "3.2.2" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e" @@ -6833,13 +6804,6 @@ import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" - integrity sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ== - dependencies: - resolve-from "^5.0.0" - import-local@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" @@ -8055,10 +8019,10 @@ libnpmpublish@^4.0.0: semver "^7.1.3" ssri "^8.0.1" -lilconfig@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" - integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== +lilconfig@^2.0.5, lilconfig@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4" + integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== lines-and-columns@^1.1.6: version "1.1.6" @@ -8946,7 +8910,7 @@ micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.0.5" -micromatch@^4.0.4: +micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -8997,7 +8961,7 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.5: +minimist@^1.1.3, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -9545,10 +9509,10 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= -object-hash@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5" - integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw== +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== object-inspect@^1.10.3: version "1.10.3" @@ -10155,39 +10119,46 @@ pluralize@^8.0.0: resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== -postcss-js@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-3.0.3.tgz#2f0bd370a2e8599d45439f6970403b5873abda33" - integrity sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw== +postcss-import@^14.1.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0" + integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-js@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.0.tgz#31db79889531b80dc7bc9b0ad283e418dce0ac00" + integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ== dependencies: camelcase-css "^2.0.1" - postcss "^8.1.6" -postcss-load-config@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.0.tgz#d39c47091c4aec37f50272373a6a648ef5e97829" - integrity sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g== +postcss-load-config@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" + integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== dependencies: - import-cwd "^3.0.0" - lilconfig "^2.0.3" + lilconfig "^2.0.5" yaml "^1.10.2" -postcss-nested@5.0.6: - version "5.0.6" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-5.0.6.tgz#466343f7fc8d3d46af3e7dba3fcd47d052a945bc" - integrity sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA== +postcss-nested@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.0.tgz#1572f1984736578f360cffc7eb7dca69e30d1735" + integrity sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w== dependencies: - postcss-selector-parser "^6.0.6" + postcss-selector-parser "^6.0.10" -postcss-selector-parser@^6.0.6, postcss-selector-parser@^6.0.7: - version "6.0.8" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz#f023ed7a9ea736cd7ef70342996e8e78645a7914" - integrity sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ== +postcss-selector-parser@^6.0.10: + version "6.0.11" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" + integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: +postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== @@ -10201,7 +10172,7 @@ postcss@8.4.14: picocolors "^1.0.0" source-map-js "^1.0.2" -postcss@8.4.5, postcss@^8.1.6: +postcss@8.4.5: version "8.4.5" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95" integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg== @@ -10210,6 +10181,15 @@ postcss@8.4.5, postcss@^8.1.6: picocolors "^1.0.0" source-map-js "^1.0.1" +postcss@^8.4.18: + version "8.4.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + postcss@^8.4.6: version "8.4.12" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.12.tgz#1e7de78733b28970fa4743f7da6f3763648b1905" @@ -10425,6 +10405,13 @@ react@^18.0.0, react@^18.2.0: dependencies: loose-envify "^1.1.0" +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + dependencies: + pify "^2.3.0" + read-cmd-shim@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9" @@ -10822,6 +10809,15 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17 is-core-module "^2.1.0" path-parse "^1.0.6" +resolve@^1.1.7, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^1.19.0: version "1.22.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" @@ -10831,15 +10827,6 @@ resolve@^1.19.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.20.0, resolve@^1.22.0: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - resolve@^2.0.0-next.3: version "2.0.0-next.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" @@ -11629,32 +11616,34 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -tailwindcss@3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.0.7.tgz#15936881f042a7eb8d6f2b6a454bac9f51181bbd" - integrity sha512-rZdKNHtC64jcQncLoWOuCzj4lQDTAgLtgK3WmQS88tTdpHh9OwLqULTQxI3tw9AMJsqSpCKlmcjW/8CSnni6zQ== +tailwindcss@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.2.4.tgz#afe3477e7a19f3ceafb48e4b083e292ce0dc0250" + integrity sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ== dependencies: - arg "^5.0.1" - chalk "^4.1.2" - chokidar "^3.5.2" + arg "^5.0.2" + chokidar "^3.5.3" color-name "^1.1.4" - cosmiconfig "^7.0.1" - detective "^5.2.0" + detective "^5.2.1" didyoumean "^1.2.2" dlv "^1.1.3" - fast-glob "^3.2.7" + fast-glob "^3.2.12" glob-parent "^6.0.2" is-glob "^4.0.3" + lilconfig "^2.0.6" + micromatch "^4.0.5" normalize-path "^3.0.0" - object-hash "^2.2.0" - postcss-js "^3.0.3" - postcss-load-config "^3.1.0" - postcss-nested "5.0.6" - postcss-selector-parser "^6.0.7" + object-hash "^3.0.0" + picocolors "^1.0.0" + postcss "^8.4.18" + postcss-import "^14.1.0" + postcss-js "^4.0.0" + postcss-load-config "^3.1.4" + postcss-nested "6.0.0" + postcss-selector-parser "^6.0.10" postcss-value-parser "^4.2.0" quick-lru "^5.1.1" - resolve "^1.20.0" - tmp "^0.2.1" + resolve "^1.22.1" tar@^4.4.12: version "4.4.13" @@ -11794,13 +11783,6 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" From afc0a862d34da3ebd5bc52ebfe65a69e870ca38e Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 1 Feb 2023 17:34:05 +0100 Subject: [PATCH 109/312] v2.11.0-beta.6 --- packages/example-next-13/.eslintrc.js | 10 +--------- .../website/pages/docs/next-13/server-components.mdx | 2 +- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/packages/example-next-13/.eslintrc.js b/packages/example-next-13/.eslintrc.js index 3209e6bbe..3d3a6276c 100644 --- a/packages/example-next-13/.eslintrc.js +++ b/packages/example-next-13/.eslintrc.js @@ -11,13 +11,5 @@ module.exports = { ], rules: { 'react/react-in-jsx-scope': 'off' - }, - overrides: [ - { - files: ['src/i18n.tsx'], - rules: { - 'func-style': 'off' - } - } - ] + } }; diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index eb59137d9..5f55587b5 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -13,7 +13,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current beta version ``` -npm install next-intl@2.11.0-beta.5 +npm install next-intl@2.11.0-beta.6 ``` This beta version was tested with `next@13.1.1`. From c14dec8eeb9ccf668dae3620384a4713a98d8771 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 2 Feb 2023 14:00:52 +0100 Subject: [PATCH 110/312] Improve docs --- packages/website/pages/docs/next-13/server-components.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 5f55587b5..dbffd1a0b 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -56,7 +56,7 @@ If you haven't done so already, [create a Next.js 13 app that uses the `app` dir } ``` -2. `next-intl` creates an i18n configuration (short for "internationalization") once per request and makes it available to all Server Components. Define this in `i18n.tsx`: +2. `next-intl` creates a configuration once per request and makes it available to all Server Components. Define this in `i18n.tsx` (short for "internationalization"): ```tsx import {getRequestConfig} from 'next-intl/server'; @@ -199,7 +199,7 @@ export default getRequestConfig(async ({locale}) => ({ messages: (await import(`../messages/${locale}.json`)).default, // You can read from headers or cookies here if necessary - timeZone: headers().get('x-time-zone') ?? undefined + timeZone: headers().get('x-time-zone') ?? 'Europe/Berlin' })); ``` From c5ea64d744172fc0ade5e4691b336b2179cbc62e Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 3 Feb 2023 09:44:42 +0100 Subject: [PATCH 111/312] Improve error handling for async components --- .../next-intl/src/react-server/useConfig.tsx | 46 ++++++++++++++++--- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/packages/next-intl/src/react-server/useConfig.tsx b/packages/next-intl/src/react-server/useConfig.tsx index e4082275e..83be652ee 100644 --- a/packages/next-intl/src/react-server/useConfig.tsx +++ b/packages/next-intl/src/react-server/useConfig.tsx @@ -28,11 +28,43 @@ export default function useConfig() { return isPromise(valueOrPromise) ? use(valueOrPromise) : valueOrPromise; } - return useMemo(() => { - const runtimeConfig = safeUnwrap( - receiveRuntimeConfig(locale, createRequestConfig) - ); - const opts = {...runtimeConfig, locale}; - return getIntlContextValue(opts); - }, [locale]); + try { + return useMemo(() => { + const runtimeConfig = safeUnwrap( + receiveRuntimeConfig(locale, createRequestConfig) + ); + const opts = {...runtimeConfig, locale}; + return getIntlContextValue(opts); + }, [locale]); + } catch (error) { + if ( + error instanceof TypeError && + error.message.includes("reading 'useMemo'") + ) { + throw new Error( + `\`next-intl\` is currently not supported in async components. Please turn your component into a regular component by removing the \`async\` keyword and replacing \`await\` with \`use\` in the component body. + +Before: + +async function Component() { + const response = await fetch(...); + // ... +} + +After: + +function Component() { + const response = use(fetch(...))); + // ... +} + +Alternatively, you can split your component to separate the async code from the usage of \`next-intl\`. + +See https://github.com/vercel/next.js/issues/44778 +` + ); + } else { + throw error; + } + } } From 7e99f2430b789893e3e13252ac61ec2bd48f1632 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 3 Feb 2023 09:57:21 +0100 Subject: [PATCH 112/312] 2.11.0-beta.7 --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index dbffd1a0b..97a2845b1 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -13,7 +13,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current beta version ``` -npm install next-intl@2.11.0-beta.6 +npm install next-intl@2.11.0-beta.7 ``` This beta version was tested with `next@13.1.1`. From cc7c2958e443de8c6a4da56c9ef421872cbe67b9 Mon Sep 17 00:00:00 2001 From: Fabio Kapsahili <68349146+fkapsahili@users.noreply.github.com> Date: Wed, 8 Feb 2023 13:10:08 +0100 Subject: [PATCH 113/312] feat: Add example with `pages` and `app` directory (#175) --- .github/workflows/main.yml | 1 + lerna.json | 1 + package.json | 1 + .../example-next-13-with-pages/.eslintrc.js | 15 + .../example-next-13-with-pages/.gitignore | 7 + packages/example-next-13-with-pages/README.md | 14 + .../messages/de.json | 14 + .../messages/en.json | 14 + .../example-next-13-with-pages/next-env.d.ts | 5 + .../example-next-13-with-pages/next.config.js | 5 + .../example-next-13-with-pages/package.json | 28 + .../public/favicon.ico | Bin 0 -> 15086 bytes .../src/app/[locale]/layout.tsx | 20 + .../src/app/[locale]/page.tsx | 20 + .../src/components/LocaleSwitcher.tsx | 14 + .../src/components/PageLayout.tsx | 25 + .../example-next-13-with-pages/src/i18n.tsx | 5 + .../src/middleware.tsx | 11 + .../src/pages/[locale]/about.tsx | 32 + .../src/pages/_app.tsx | 20 + .../example-next-13-with-pages/tsconfig.json | 35 + packages/example-next-13-with-pages/yarn.lock | 2409 +++++++++++++++++ 22 files changed, 2696 insertions(+) create mode 100644 packages/example-next-13-with-pages/.eslintrc.js create mode 100644 packages/example-next-13-with-pages/.gitignore create mode 100644 packages/example-next-13-with-pages/README.md create mode 100644 packages/example-next-13-with-pages/messages/de.json create mode 100644 packages/example-next-13-with-pages/messages/en.json create mode 100644 packages/example-next-13-with-pages/next-env.d.ts create mode 100644 packages/example-next-13-with-pages/next.config.js create mode 100644 packages/example-next-13-with-pages/package.json create mode 100644 packages/example-next-13-with-pages/public/favicon.ico create mode 100644 packages/example-next-13-with-pages/src/app/[locale]/layout.tsx create mode 100644 packages/example-next-13-with-pages/src/app/[locale]/page.tsx create mode 100644 packages/example-next-13-with-pages/src/components/LocaleSwitcher.tsx create mode 100644 packages/example-next-13-with-pages/src/components/PageLayout.tsx create mode 100644 packages/example-next-13-with-pages/src/i18n.tsx create mode 100644 packages/example-next-13-with-pages/src/middleware.tsx create mode 100644 packages/example-next-13-with-pages/src/pages/[locale]/about.tsx create mode 100644 packages/example-next-13-with-pages/src/pages/_app.tsx create mode 100644 packages/example-next-13-with-pages/tsconfig.json create mode 100644 packages/example-next-13-with-pages/yarn.lock diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e14f92e52..be60ed348 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,6 +22,7 @@ jobs: - run: yarn workspace example-advanced run build - run: yarn workspace example-next-13 run build - run: yarn workspace example-next-13-advanced run build + - run: yarn workspace example-next-13-with-pages run build - run: yarn workspaces run lint - run: yarn workspaces run test diff --git a/lerna.json b/lerna.json index dcdae43a5..617290f4d 100644 --- a/lerna.json +++ b/lerna.json @@ -7,6 +7,7 @@ "packages/example-advanced", "packages/example-next-13", "packages/example-next-13-advanced", + "packages/example-next-13-with-pages", "packages/website" ], "useWorkspaces": true, diff --git a/package.json b/package.json index 4ceb4bab6..0083cc664 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "packages/example", "packages/example-next-13", "packages/example-next-13-advanced", + "packages/example-next-13-with-pages", "packages/example-advanced", "packages/website" ], diff --git a/packages/example-next-13-with-pages/.eslintrc.js b/packages/example-next-13-with-pages/.eslintrc.js new file mode 100644 index 000000000..3d3a6276c --- /dev/null +++ b/packages/example-next-13-with-pages/.eslintrc.js @@ -0,0 +1,15 @@ +require('eslint-config-molindo/setupPlugins'); + +module.exports = { + env: { + node: true + }, + extends: [ + 'molindo/typescript', + 'molindo/react', + 'plugin:@next/next/recommended' + ], + rules: { + 'react/react-in-jsx-scope': 'off' + } +}; diff --git a/packages/example-next-13-with-pages/.gitignore b/packages/example-next-13-with-pages/.gitignore new file mode 100644 index 000000000..ee91e9ab6 --- /dev/null +++ b/packages/example-next-13-with-pages/.gitignore @@ -0,0 +1,7 @@ +/node_modules +/.next/ +.DS_Store +tsconfig.tsbuildinfo +/test-results/ +/playwright-report/ +/playwright/.cache/ diff --git a/packages/example-next-13-with-pages/README.md b/packages/example-next-13-with-pages/README.md new file mode 100644 index 000000000..abb0771b6 --- /dev/null +++ b/packages/example-next-13-with-pages/README.md @@ -0,0 +1,14 @@ +# example-next-13-with-pages + +An example that showcases a basic installation of `next-intl` in a Next.js app that uses both the pages and the new app folder. + +Important to note: + +1. Do not add the i18n config to the `next.config.js` as it will cause the `app` directory to be ignored. +2. Add `GetStaticPaths` and `GetStaticProps` or `GetServerSideProps` (if you need SSR) to the relevant `pages`. + +You can run the example locally like this: + +``` +yarn && yarn dev +``` diff --git a/packages/example-next-13-with-pages/messages/de.json b/packages/example-next-13-with-pages/messages/de.json new file mode 100644 index 000000000..c7e7940ec --- /dev/null +++ b/packages/example-next-13-with-pages/messages/de.json @@ -0,0 +1,14 @@ +{ + "Index": { + "title": "Start", + "description": "Das ist die Startseite.", + "navigateToAbout": "Zu Über uns navigieren" + }, + "About": { + "title": "Über", + "description": "Das ist die Über-uns-Seite." + }, + "LocaleSwitcher": { + "switchLocale": "Zu {locale, select, de {Deutsch} en {Englisch} other {Unbekannt}} wechseln" + } +} diff --git a/packages/example-next-13-with-pages/messages/en.json b/packages/example-next-13-with-pages/messages/en.json new file mode 100644 index 000000000..3ef0a509d --- /dev/null +++ b/packages/example-next-13-with-pages/messages/en.json @@ -0,0 +1,14 @@ +{ + "Index": { + "title": "Home", + "description": "This is the home page.", + "navigateToAbout": "Navigate to about" + }, + "About": { + "title": "About", + "description": "This is the about page." + }, + "LocaleSwitcher": { + "switchLocale": "Switch to {locale, select, de {German} en {English} other {Unknown}}" + } +} diff --git a/packages/example-next-13-with-pages/next-env.d.ts b/packages/example-next-13-with-pages/next-env.d.ts new file mode 100644 index 000000000..4f11a03dc --- /dev/null +++ b/packages/example-next-13-with-pages/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/packages/example-next-13-with-pages/next.config.js b/packages/example-next-13-with-pages/next.config.js new file mode 100644 index 000000000..948a68283 --- /dev/null +++ b/packages/example-next-13-with-pages/next.config.js @@ -0,0 +1,5 @@ +const withNextIntl = require('next-intl/plugin')(); + +module.exports = withNextIntl({ + experimental: {appDir: true} +}); diff --git a/packages/example-next-13-with-pages/package.json b/packages/example-next-13-with-pages/package.json new file mode 100644 index 000000000..4ce1a6a2f --- /dev/null +++ b/packages/example-next-13-with-pages/package.json @@ -0,0 +1,28 @@ +{ + "name": "example-next-13-with-pages", + "version": "2.10.2", + "private": true, + "scripts": { + "dev": "next dev", + "lint": "eslint src && tsc", + "test": "echo 'No tests yet'", + "build": "next build", + "start": "next start" + }, + "dependencies": { + "lodash": "^4.17.21", + "next": "^13.1.1", + "next-intl": "^2.10.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "typescript": "^4.6.3" + }, + "devDependencies": { + "@types/lodash": "^4.14.176", + "@types/node": "^17.0.23", + "@types/react": "^18.0.23", + "eslint": "^8.12.0", + "eslint-config-molindo": "^6.0.0", + "eslint-config-next": "^13.0.0" + } +} diff --git a/packages/example-next-13-with-pages/public/favicon.ico b/packages/example-next-13-with-pages/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4ddd8fff7086c240ed21438ca7d96f1b8dae0bc0 GIT binary patch literal 15086 zcmdU$O=uNY6vrnYO%#n9m0G$<)C8)FRuGb41&a%z2%-zOrYkKQ7LVcV8tZ8{r_I(J}2Xwd3WZ$*OwePxifd}IsgB? z@7{AiX5x7@UY)mPi>I{JyV~w~9iHd4w)*$0Jnt9fty0SKPwPGJD;0Q8Wn|)gA|*d3 zZJyV>ZcgVi%JR2KUOJ_pNiRu%l#WaPk^bu|*W~exGL*#z+iFOiKxv{cq~A-QNoSnvZWVz$%y2 z$kB(=jC597D#v2>V1NZC*rkY~fpzbN^>mc9}aM-le$W`3Rbh-!*zlSeaS_(t57xidzf?h9!_wJ6XMpeG;F(2?%@^} zTZz5QCkusdm&t8;0X=2;v z=4NyA=FO7%Pfbmky?gg2#`ihHeJl-sYxshdXBjsq7mY z8_mUw7gO^e8yhp7ot>$$ea>(%X}z;`>sB*5I-05ur%#_Y#Iv;R=W{QKf7*DOB3>4% zC)`u_AKPw8<7vuxS%^Q}Q;%QEpEOB4Eg@cp>j3vu@iWMsYu9*MV!RCVhdXmXI6u|B zOFS(xUWR$WJ@NV>s=meIX&K^WkiT6&bc&Dj`YnpP&5w(xWr&wS{&xM=By8vPv*j6; zM#a-I#mgXnIKv%r-oL19&_}`Ra6BzzybR*m{R{jzNz1x_B%V%BPv_?4GR8~GAFgn= z!d{p?v3*{0N<1AJ8Zs|lyeMUT8O4LM2F@IU!kI)_e}g@H_L#xJL9=w}(kLEj^5Mu? zPa!Gm`4#bW_3G7WI7ZpTonKL(#c+POu291V^0w=Gv7X=BY8=qTLOVb2w&WaA-W4pg z_ZPfVNg|8+{gJIFb*3*>V?2NfcG7m2$vk0h`@i3x4*QtFGv;}uQrr+*nI9_oTi_dv zxOXgioLZQ(?e_y}6iZ{#ZwxL^&=9>|`hvL_vv zayCHQqFj^5GrQ-*#;)IWnNEy;<($6sycVvrp4Uj4(FrcKN zvwpkUcIKIsPTVT}NSgmnYgOv+w20N4r9IMbr9Vq2rL(?rO&-rELs@J}6~-g|aZs9- zPD^QmIHgQhiVe2-NF(pcs9(zWSaEo9&#=V@zLH3X3Xe$n+2j1XJi`aR@aZBuRp=+F zi|-_5@QLp@fnz1GEl+$$wFAG=4^msUQYjeW{!ptt`bniQ!+ya6(@K{v%63*JUtzrP zJy>8OjL&bR;WD}Vy1F`(R_p8QS z3)aiW1e0>+L40 z-*@!(_U7itD4r4d!TA^bRO^q1h6b~2*|K1rT(A3mOt7s~bNyvGRCE1lIqcL$qL`%e zF71v_e7gwkz@DKR`wz>H{y;x@CUvP_p)%OwBfQ>LmXi=0*h5xh{~07$vHiE{t1C-pXV!RjLzkh$YPT0;{WAHuhnKNhJu)lWgTA}x{_V=CVx2>(su;#M@ zA9w|M`q$Xc<8RBbW@GJ!#C#`=ZNB}iEh&4Pk&zMe=+Pt7-riman>=juzhBUvYv%ET z2M + + next-intl + + + {children} + + ); +} diff --git a/packages/example-next-13-with-pages/src/app/[locale]/page.tsx b/packages/example-next-13-with-pages/src/app/[locale]/page.tsx new file mode 100644 index 000000000..ecc6acd76 --- /dev/null +++ b/packages/example-next-13-with-pages/src/app/[locale]/page.tsx @@ -0,0 +1,20 @@ +import { LocalizedLink, useLocale, useTranslations } from "next-intl"; +import LocaleSwitcher from "../../components/LocaleSwitcher"; +import PageLayout from "../../components/PageLayout"; + +export default function Index() { + const t = useTranslations("Index"); + const locale = useLocale(); + + return ( + +

{t("description")}

+ +

+ + {t("navigateToAbout")} + +

+
+ ); +} diff --git a/packages/example-next-13-with-pages/src/components/LocaleSwitcher.tsx b/packages/example-next-13-with-pages/src/components/LocaleSwitcher.tsx new file mode 100644 index 000000000..cbca03de7 --- /dev/null +++ b/packages/example-next-13-with-pages/src/components/LocaleSwitcher.tsx @@ -0,0 +1,14 @@ +import {useLocale, useTranslations} from 'next-intl'; +import Link from 'next/link'; + +export default function LocaleSwitcher() { + const t = useTranslations('LocaleSwitcher'); + const locale = useLocale(); + const otherLocale = locale === 'en' ? 'de' : 'en'; + + return ( + + {t('switchLocale', {locale: otherLocale})} + + ); +} diff --git a/packages/example-next-13-with-pages/src/components/PageLayout.tsx b/packages/example-next-13-with-pages/src/components/PageLayout.tsx new file mode 100644 index 000000000..bc840a0cb --- /dev/null +++ b/packages/example-next-13-with-pages/src/components/PageLayout.tsx @@ -0,0 +1,25 @@ +import {ReactNode} from 'react'; + +type Props = { + children?: ReactNode; + title: string; +}; + +export default function PageLayout({children, title}: Props) { + return ( + <> +
+
+

{title}

+ {children} +
+
+ + ); +} diff --git a/packages/example-next-13-with-pages/src/i18n.tsx b/packages/example-next-13-with-pages/src/i18n.tsx new file mode 100644 index 000000000..45fdedc99 --- /dev/null +++ b/packages/example-next-13-with-pages/src/i18n.tsx @@ -0,0 +1,5 @@ +import { getRequestConfig } from "next-intl/server"; + +export default getRequestConfig(async ({ locale }) => ({ + messages: (await import(`../messages/${locale}.json`)).default, +})); diff --git a/packages/example-next-13-with-pages/src/middleware.tsx b/packages/example-next-13-with-pages/src/middleware.tsx new file mode 100644 index 000000000..d719e6323 --- /dev/null +++ b/packages/example-next-13-with-pages/src/middleware.tsx @@ -0,0 +1,11 @@ +import { createIntlMiddleware } from "next-intl/server"; + +export default createIntlMiddleware({ + locales: ["en", "de"], + defaultLocale: "en", +}); + +export const config = { + // Skip all internal paths + matcher: ["/((?!_next).*)"], +}; diff --git a/packages/example-next-13-with-pages/src/pages/[locale]/about.tsx b/packages/example-next-13-with-pages/src/pages/[locale]/about.tsx new file mode 100644 index 000000000..bb0fe13a4 --- /dev/null +++ b/packages/example-next-13-with-pages/src/pages/[locale]/about.tsx @@ -0,0 +1,32 @@ +import React from "react"; +import type { GetStaticPropsContext } from "next"; +import { useTranslations } from "next-intl"; +import LocaleSwitcher from "../../components/LocaleSwitcher"; +import PageLayout from "../../components/PageLayout"; + +export default function AboutPage() { + const t = useTranslations("About"); + + return ( + +

{t("description")}

+ +
+ ); +} + +export async function getStaticProps({ params }: GetStaticPropsContext) { + return { + props: { + messages: (await import(`../../../messages/${params?.locale}.json`)) + .default, + }, + }; +} + +export async function getStaticPaths() { + return { + paths: [{ params: { locale: "de" } }, { params: { locale: "en" } }], + fallback: false, + }; +} diff --git a/packages/example-next-13-with-pages/src/pages/_app.tsx b/packages/example-next-13-with-pages/src/pages/_app.tsx new file mode 100644 index 000000000..fbbb7f7ed --- /dev/null +++ b/packages/example-next-13-with-pages/src/pages/_app.tsx @@ -0,0 +1,20 @@ +import { NextIntlProvider } from "next-intl"; +import { NextRouter, withRouter } from "next/router"; +import type { AppProps } from "next/app"; + +interface WithRouterProps { + router: NextRouter; +} + +function App({ Component, pageProps, router }: AppProps & WithRouterProps) { + return ( + + + + ); +} + +export default withRouter(App); diff --git a/packages/example-next-13-with-pages/tsconfig.json b/packages/example-next-13-with-pages/tsconfig.json new file mode 100644 index 000000000..1c6c979ae --- /dev/null +++ b/packages/example-next-13-with-pages/tsconfig.json @@ -0,0 +1,35 @@ +{ + "extends": "eslint-config-molindo/tsconfig.json", + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ] + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/packages/example-next-13-with-pages/yarn.lock b/packages/example-next-13-with-pages/yarn.lock new file mode 100644 index 000000000..fe8578ba7 --- /dev/null +++ b/packages/example-next-13-with-pages/yarn.lock @@ -0,0 +1,2409 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/helper-validator-identifier@^7.15.7", "@babel/helper-validator-identifier@^7.18.6": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/runtime-corejs3@^7.10.2": + version "7.20.1" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz#d0775a49bb5fba77e42cbb7276c9955c7b05af8d" + integrity sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg== + dependencies: + core-js-pure "^3.25.1" + regenerator-runtime "^0.13.10" + +"@babel/runtime@^7.10.2", "@babel/runtime@^7.18.9": + version "7.20.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.1.tgz#1148bb33ab252b165a06698fde7576092a78b4a9" + integrity sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg== + dependencies: + regenerator-runtime "^0.13.10" + +"@eslint/eslintrc@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" + integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@formatjs/ecma402-abstract@1.11.4": + version "1.11.4" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz#b962dfc4ae84361f9f08fbce411b4e4340930eda" + integrity sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw== + dependencies: + "@formatjs/intl-localematcher" "0.2.25" + tslib "^2.1.0" + +"@formatjs/ecma402-abstract@^1.11.4": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.13.0.tgz#df6db3cbee0182bbd2fd6217103781c802aee819" + integrity sha512-CQ8Ykd51jYD1n05dtoX6ns6B9n/+6ZAxnWUAonvHC4kkuAemROYBhHkEB4tm1uVrRlE7gLDqXkAnY51Y0pRCWQ== + dependencies: + "@formatjs/intl-localematcher" "0.2.31" + tslib "2.4.0" + +"@formatjs/fast-memoize@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz#e6f5aee2e4fd0ca5edba6eba7668e2d855e0fc21" + integrity sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg== + dependencies: + tslib "^2.1.0" + +"@formatjs/icu-messageformat-parser@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz#a54293dd7f098d6a6f6a084ab08b6d54a3e8c12d" + integrity sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + "@formatjs/icu-skeleton-parser" "1.3.6" + tslib "^2.1.0" + +"@formatjs/icu-skeleton-parser@1.3.6": + version "1.3.6" + resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz#4ce8c0737d6f07b735288177049e97acbf2e8964" + integrity sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + tslib "^2.1.0" + +"@formatjs/intl-localematcher@0.2.25": + version "0.2.25" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz#60892fe1b271ec35ba07a2eb018a2dd7bca6ea3a" + integrity sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA== + dependencies: + tslib "^2.1.0" + +"@formatjs/intl-localematcher@0.2.31": + version "0.2.31" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.2.31.tgz#aada2b1e58211460cedba56889e3c489117eb6eb" + integrity sha512-9QTjdSBpQ7wHShZgsNzNig5qT3rCPvmZogS/wXZzKotns5skbXgs0I7J8cuN0PPqXyynvNVuN+iOKhNS2eb+ZA== + dependencies: + tslib "2.4.0" + +"@humanwhocodes/config-array@^0.11.6": + version "0.11.7" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.7.tgz#38aec044c6c828f6ed51d5d7ae3d9b9faf6dbb0f" + integrity sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@next/env@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.6.tgz#c4925609f16142ded1a5cb833359ab17359b7a93" + integrity sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg== + +"@next/eslint-plugin-next@13.0.4": + version "13.0.4" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-13.0.4.tgz#46800f48d9f81e8bb460319a15a00bf2f4016e91" + integrity sha512-jZ4urKT+aO9QHm3ttihrIQscQISDSKK8isAom750+EySn9o3LCSkTdPGBtvBqY7Yku+NqhfQempR5J58DqTaVg== + dependencies: + glob "7.1.7" + +"@next/swc-android-arm-eabi@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.6.tgz#d766dfc10e27814d947b20f052067c239913dbcc" + integrity sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ== + +"@next/swc-android-arm64@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.6.tgz#f37a98d5f18927d8c9970d750d516ac779465176" + integrity sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw== + +"@next/swc-darwin-arm64@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.6.tgz#ec1b90fd9bf809d8b81004c5182e254dced4ad96" + integrity sha512-KKRQH4DDE4kONXCvFMNBZGDb499Hs+xcFAwvj+rfSUssIDrZOlyfJNy55rH5t2Qxed1e4K80KEJgsxKQN1/fyw== + +"@next/swc-darwin-x64@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.6.tgz#e869ac75d16995eee733a7d1550322d9051c1eb4" + integrity sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA== + +"@next/swc-freebsd-x64@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.6.tgz#84a7b2e423a2904afc2edca21c2f1ba6b53fa4c1" + integrity sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw== + +"@next/swc-linux-arm-gnueabihf@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.6.tgz#980eed1f655ff8a72187d8a6ef9e73ac39d20d23" + integrity sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw== + +"@next/swc-linux-arm64-gnu@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.6.tgz#87a71db21cded3f7c63d1d19079845c59813c53d" + integrity sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ== + +"@next/swc-linux-arm64-musl@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.6.tgz#c5aac8619331b9fd030603bbe2b36052011e11de" + integrity sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ== + +"@next/swc-linux-x64-gnu@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.6.tgz#9513d36d540bbfea575576746736054c31aacdea" + integrity sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q== + +"@next/swc-linux-x64-musl@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.6.tgz#d61fc6884899f5957251f4ce3f522e34a2c479b7" + integrity sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ== + +"@next/swc-win32-arm64-msvc@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.6.tgz#fac2077a8ae9768e31444c9ae90807e64117cda7" + integrity sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ== + +"@next/swc-win32-ia32-msvc@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.6.tgz#498bc11c91b4c482a625bf4b978f98ae91111e46" + integrity sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w== + +"@next/swc-win32-x64-msvc@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.6.tgz#17ed919c723426b7d0ce1cd73d40ce3dcd342089" + integrity sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@pkgr/utils@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.3.1.tgz#0a9b06ffddee364d6642b3cd562ca76f55b34a03" + integrity sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw== + dependencies: + cross-spawn "^7.0.3" + is-glob "^4.0.3" + open "^8.4.0" + picocolors "^1.0.0" + tiny-glob "^0.2.9" + tslib "^2.4.0" + +"@rushstack/eslint-patch@^1.1.1", "@rushstack/eslint-patch@^1.1.3": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" + integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg== + +"@swc/helpers@0.4.14": + version "0.4.14" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" + integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== + dependencies: + tslib "^2.4.0" + +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/lodash@^4.14.176": + version "4.14.189" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.189.tgz#975ff8c38da5ae58b751127b19ad5e44b5b7f6d2" + integrity sha512-kb9/98N6X8gyME9Cf7YaqIMvYGnBSWqEci6tiettE6iJWH1XdJz/PO8LB0GtLCG7x8dU3KWhZT+lA1a35127tA== + +"@types/node@^17.0.23": + version "17.0.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + +"@types/normalize-package-data@^2.4.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + +"@types/prop-types@*": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/react@^18.0.23": + version "18.0.25" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.25.tgz#8b1dcd7e56fe7315535a4af25435e0bb55c8ae44" + integrity sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/scheduler@*": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + +"@typescript-eslint/eslint-plugin@^5.0.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.44.0.tgz#105788f299050c917eb85c4d9fd04b089e3740de" + integrity sha512-j5ULd7FmmekcyWeArx+i8x7sdRHzAtXTkmDPthE4amxZOWKFK7bomoJ4r7PJ8K7PoMzD16U8MmuZFAonr1ERvw== + dependencies: + "@typescript-eslint/scope-manager" "5.44.0" + "@typescript-eslint/type-utils" "5.44.0" + "@typescript-eslint/utils" "5.44.0" + debug "^4.3.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.42.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.44.0.tgz#99e2c710a2252191e7a79113264f438338b846ad" + integrity sha512-H7LCqbZnKqkkgQHaKLGC6KUjt3pjJDx8ETDqmwncyb6PuoigYajyAwBGz08VU/l86dZWZgI4zm5k2VaKqayYyA== + dependencies: + "@typescript-eslint/scope-manager" "5.44.0" + "@typescript-eslint/types" "5.44.0" + "@typescript-eslint/typescript-estree" "5.44.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.44.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.44.0.tgz#988c3f34b45b3474eb9ff0674c18309dedfc3e04" + integrity sha512-2pKml57KusI0LAhgLKae9kwWeITZ7IsZs77YxyNyIVOwQ1kToyXRaJLl+uDEXzMN5hnobKUOo2gKntK9H1YL8g== + dependencies: + "@typescript-eslint/types" "5.44.0" + "@typescript-eslint/visitor-keys" "5.44.0" + +"@typescript-eslint/type-utils@5.44.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.44.0.tgz#bc5a6e8a0269850714a870c9268c038150dfb3c7" + integrity sha512-A1u0Yo5wZxkXPQ7/noGkRhV4J9opcymcr31XQtOzcc5nO/IHN2E2TPMECKWYpM3e6olWEM63fq/BaL1wEYnt/w== + dependencies: + "@typescript-eslint/typescript-estree" "5.44.0" + "@typescript-eslint/utils" "5.44.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.44.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.44.0.tgz#f3f0b89aaff78f097a2927fe5688c07e786a0241" + integrity sha512-Tp+zDnHmGk4qKR1l+Y1rBvpjpm5tGXX339eAlRBDg+kgZkz9Bw+pqi4dyseOZMsGuSH69fYfPJCBKBrbPCxYFQ== + +"@typescript-eslint/typescript-estree@5.44.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.44.0.tgz#0461b386203e8d383bb1268b1ed1da9bc905b045" + integrity sha512-M6Jr+RM7M5zeRj2maSfsZK2660HKAJawv4Ud0xT+yauyvgrsHu276VtXlKDFnEmhG+nVEd0fYZNXGoAgxwDWJw== + dependencies: + "@typescript-eslint/types" "5.44.0" + "@typescript-eslint/visitor-keys" "5.44.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.44.0", "@typescript-eslint/utils@^5.10.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.44.0.tgz#d733da4d79d6c30f1a68b531cdda1e0c1f00d52d" + integrity sha512-fMzA8LLQ189gaBjS0MZszw5HBdZgVwxVFShCO3QN+ws3GlPkcy9YuS3U4wkT6su0w+Byjq3mS3uamy9HE4Yfjw== + dependencies: + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.44.0" + "@typescript-eslint/types" "5.44.0" + "@typescript-eslint/typescript-estree" "5.44.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.44.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.44.0.tgz#10740dc28902bb903d12ee3a005cc3a70207d433" + integrity sha512-a48tLG8/4m62gPFbJ27FxwCOqPKxsb8KC3HkmYoq2As/4YyjQl1jDbRr1s63+g4FS/iIehjmN3L5UjmKva1HzQ== + dependencies: + "@typescript-eslint/types" "5.44.0" + eslint-visitor-keys "^3.3.0" + +accept-language-parser@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/accept-language-parser/-/accept-language-parser-1.5.0.tgz#8877c54040a8dcb59e0a07d9c1fde42298334791" + integrity sha512-QhyTbMLYo0BBGg1aWbeMG4ekWtds/31BrEU+DONOg/7ax23vxpL03Pb7/zBmha2v7vdD3AyzZVWBVGEZxKOXWw== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.8.0: + version "8.8.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + dependencies: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + +array-includes@^3.1.4, array-includes@^3.1.5, array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.flat@^1.2.5: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.tosorted@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" + integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.1.3" + +ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== + +axe-core@^4.4.3: + version "4.5.2" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.5.2.tgz#823fdf491ff717ac3c58a52631d4206930c1d9f7" + integrity sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA== + +axobject-query@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +caniuse-lite@^1.0.30001406: + version "1.0.30001434" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz#ec1ec1cfb0a93a34a0600d37903853030520a4e5" + integrity sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +ci-info@^3.3.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.6.2.tgz#362ea15378f1c39378ba786affbc1c9ef015ecfd" + integrity sha512-lVZdhvbEudris15CLytp2u6Y0p5EKfztae9Fqa189MfNmln9F33XuH69v5fvNfiRN5/0eAUz2yJL3mo+nhaRKg== + +clean-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clean-regexp/-/clean-regexp-1.0.0.tgz#8df7c7aae51fd36874e8f8d05b9180bc11a3fed7" + integrity sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw== + dependencies: + escape-string-regexp "^1.0.5" + +client-only@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" + integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +confusing-browser-globals@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== + +core-js-pure@^3.25.1: + version "3.26.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.26.1.tgz#653f4d7130c427820dcecd3168b594e8bb095a33" + integrity sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ== + +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +csstype@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" + integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== + +damerau-levenshtein@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + +debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +enhanced-resolve@^5.10.0: + version "5.11.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.11.0.tgz#543cf6c847a85adba0c4a5e2170bded4d493919a" + integrity sha512-0Gcraf7gAJSQoPg+bTSXNhuzAYtXqLc4C011vb8S3B8XUSEkGYNBk20c68X9291VF4vvsCD8SPkr6Mza+DwU+g== + dependencies: + graceful-fs "^4.2.9" + tapable "^2.2.0" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.20.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" + integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.2" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-molindo@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-molindo/-/eslint-config-molindo-6.0.0.tgz#2a5ac0acd5e43f3428c60fb0b51881bc5ba42ae4" + integrity sha512-kZ/SZBJIejZY45HVn9q0WSkF1mhvem+7FmxDF7mNfCepGEGrjID2mNlOuWAShBTidzpukMQ7qKhkjV5JVmO91w== + dependencies: + "@rushstack/eslint-patch" "^1.1.1" + "@typescript-eslint/eslint-plugin" "^5.0.0" + "@typescript-eslint/parser" "^5.0.0" + confusing-browser-globals "^1.0.11" + eslint-plugin-css-modules "^2.11.0" + eslint-plugin-import "^2.25.4" + eslint-plugin-jest "^26.1.3" + eslint-plugin-jsx-a11y "^6.5.1" + eslint-plugin-prettier "^4.0.0" + eslint-plugin-react "^7.29.4" + eslint-plugin-react-hooks "^4.3.0" + eslint-plugin-sort-destructure-keys "^1.4.0" + eslint-plugin-unicorn "^41.0.1" + prettier "^2.6.1" + typescript "^4.0.0" + +eslint-config-next@^13.0.0: + version "13.0.4" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-13.0.4.tgz#78954caf26b3aa718bed077bce90c1f505db0005" + integrity sha512-moEC7BW2TK7JKq3QfnaauqRjWzVcEf71gp5DbClpFPHM6QXE0u0uVvSTiHlmOgtCe1vyWAO+AhF87ZITd8mIDw== + dependencies: + "@next/eslint-plugin-next" "13.0.4" + "@rushstack/eslint-patch" "^1.1.3" + "@typescript-eslint/parser" "^5.42.0" + eslint-import-resolver-node "^0.3.6" + eslint-import-resolver-typescript "^3.5.2" + eslint-plugin-import "^2.26.0" + eslint-plugin-jsx-a11y "^6.5.1" + eslint-plugin-react "^7.31.7" + eslint-plugin-react-hooks "^4.5.0" + +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== + dependencies: + debug "^3.2.7" + resolve "^1.20.0" + +eslint-import-resolver-typescript@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.2.tgz#9431acded7d898fd94591a08ea9eec3514c7de91" + integrity sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ== + dependencies: + debug "^4.3.4" + enhanced-resolve "^5.10.0" + get-tsconfig "^4.2.0" + globby "^13.1.2" + is-core-module "^2.10.0" + is-glob "^4.0.3" + synckit "^0.8.4" + +eslint-module-utils@^2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== + dependencies: + debug "^3.2.7" + +eslint-plugin-css-modules@^2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-css-modules/-/eslint-plugin-css-modules-2.11.0.tgz#8de4d01d523a2d51c03043fa8004aab6b6cf3b1a" + integrity sha512-CLvQvJOMlCywZzaI4HVu7QH/ltgNXvCg7giJGiE+sA9wh5zQ+AqTgftAzrERV22wHe1p688wrU/Zwxt1Ry922w== + dependencies: + gonzales-pe "^4.0.3" + lodash "^4.17.2" + +eslint-plugin-import@^2.25.4, eslint-plugin-import@^2.26.0: + version "2.26.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" + integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== + dependencies: + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.3" + has "^1.0.3" + is-core-module "^2.8.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.5" + resolve "^1.22.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-jest@^26.1.3: + version "26.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.9.0.tgz#7931c31000b1c19e57dbfb71bbf71b817d1bf949" + integrity sha512-TWJxWGp1J628gxh2KhaH1H1paEdgE2J61BBF1I59c6xWeL5+D1BzMxGDN/nXAfX+aSkR5u80K+XhskK6Gwq9ng== + dependencies: + "@typescript-eslint/utils" "^5.10.0" + +eslint-plugin-jsx-a11y@^6.5.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz#93736fc91b83fdc38cc8d115deedfc3091aef1ff" + integrity sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q== + dependencies: + "@babel/runtime" "^7.18.9" + aria-query "^4.2.2" + array-includes "^3.1.5" + ast-types-flow "^0.0.7" + axe-core "^4.4.3" + axobject-query "^2.2.0" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" + has "^1.0.3" + jsx-ast-utils "^3.3.2" + language-tags "^1.0.5" + minimatch "^3.1.2" + semver "^6.3.0" + +eslint-plugin-prettier@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-react-hooks@^4.3.0, eslint-plugin-react-hooks@^4.5.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== + +eslint-plugin-react@^7.29.4, eslint-plugin-react@^7.31.7: + version "7.31.11" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz#011521d2b16dcf95795df688a4770b4eaab364c8" + integrity sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw== + dependencies: + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + array.prototype.tosorted "^1.1.1" + doctrine "^2.1.0" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + object.hasown "^1.1.2" + object.values "^1.1.6" + prop-types "^15.8.1" + resolve "^2.0.0-next.3" + semver "^6.3.0" + string.prototype.matchall "^4.0.8" + +eslint-plugin-sort-destructure-keys@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-sort-destructure-keys/-/eslint-plugin-sort-destructure-keys-1.4.0.tgz#45924521e556692002522468a75b6a9fbac11316" + integrity sha512-txU9l22mblz7YpyjJNYFy4wb5PVXiRMbc9lqFPPhvY4wKyBBYQvb31TIcduf7iRb4Bv01aiXcJiuCkOOrVY48Q== + dependencies: + natural-compare-lite "^1.4.0" + +eslint-plugin-unicorn@^41.0.1: + version "41.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-41.0.1.tgz#b49205b38e71e227d21fb5776f8d078a1dc637ca" + integrity sha512-gF5vo2dIj0YdNMQ/IMegiBkQdQ22GBFFVpdkJP+0og3w7XD4ypea0xQVRv6iofkLVR2w0phAdikcnU01ybd4Ow== + dependencies: + "@babel/helper-validator-identifier" "^7.15.7" + ci-info "^3.3.0" + clean-regexp "^1.0.0" + eslint-utils "^3.0.0" + esquery "^1.4.0" + indent-string "^4.0.0" + is-builtin-module "^3.1.0" + lodash "^4.17.21" + pluralize "^8.0.0" + read-pkg-up "^7.0.1" + regexp-tree "^0.1.24" + safe-regex "^2.1.1" + semver "^7.3.5" + strip-indent "^3.0.0" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.12.0: + version "8.28.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.28.0.tgz#81a680732634677cc890134bcdd9fdfea8e63d6e" + integrity sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ== + dependencies: + "@eslint/eslintrc" "^1.3.3" + "@humanwhocodes/config-array" "^0.11.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.15.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.4.0: + version "9.4.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@^3.2.11, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-tsconfig@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.2.0.tgz#ff368dd7104dab47bf923404eb93838245c66543" + integrity sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg== + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@7.1.7: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.15.0: + version "13.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.18.0.tgz#fb224daeeb2bb7d254cd2c640f003528b8d0c1dc" + integrity sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A== + dependencies: + type-fest "^0.20.2" + +globalyzer@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" + integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515" + integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + +globrex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" + integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== + +gonzales-pe@^4.0.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3" + integrity sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ== + dependencies: + minimist "^1.2.5" + +graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +intl-messageformat@^9.3.18: + version "9.13.0" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-9.13.0.tgz#97360b73bd82212e4f6005c712a4a16053165468" + integrity sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw== + dependencies: + "@formatjs/ecma402-abstract" "1.11.4" + "@formatjs/fast-memoize" "1.2.1" + "@formatjs/icu-messageformat-parser" "2.1.0" + tslib "^2.1.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-builtin-module@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.0.tgz#bb0310dfe881f144ca83f30100ceb10cf58835e0" + integrity sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw== + dependencies: + builtin-modules "^3.3.0" + +is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.10.0, is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +js-sdsl@^4.1.4: + version "4.2.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" + integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" + integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== + dependencies: + array-includes "^3.1.5" + object.assign "^4.1.3" + +language-subtag-registry@~0.3.2: + version "0.3.22" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" + integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== + +language-tags@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== + dependencies: + language-subtag-registry "~0.3.2" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.2, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +next-intl@^2.10.2: + version "2.10.2" + resolved "https://registry.yarnpkg.com/next-intl/-/next-intl-2.10.2.tgz#ea7d49902acb33ea5e6e351c92be3db0da713680" + integrity sha512-wMNNn8l/fwKprYhH6rLQb68GEBkZaACBl99tELL/Tw+AWkGKfvEmnfYEdkiqm5OBQbaJn+gH9gMzGMsJzs1MLA== + dependencies: + accept-language-parser "^1.5.0" + use-intl "^2.10.2" + +next@^13.1.1: + version "13.1.6" + resolved "https://registry.yarnpkg.com/next/-/next-13.1.6.tgz#054babe20b601f21f682f197063c9b0b32f1a27c" + integrity sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw== + dependencies: + "@next/env" "13.1.6" + "@swc/helpers" "0.4.14" + caniuse-lite "^1.0.30001406" + postcss "8.4.14" + styled-jsx "5.1.1" + optionalDependencies: + "@next/swc-android-arm-eabi" "13.1.6" + "@next/swc-android-arm64" "13.1.6" + "@next/swc-darwin-arm64" "13.1.6" + "@next/swc-darwin-x64" "13.1.6" + "@next/swc-freebsd-x64" "13.1.6" + "@next/swc-linux-arm-gnueabihf" "13.1.6" + "@next/swc-linux-arm64-gnu" "13.1.6" + "@next/swc-linux-arm64-musl" "13.1.6" + "@next/swc-linux-x64-gnu" "13.1.6" + "@next/swc-linux-x64-musl" "13.1.6" + "@next/swc-win32-arm64-msvc" "13.1.6" + "@next/swc-win32-ia32-msvc" "13.1.6" + "@next/swc-win32-x64-msvc" "13.1.6" + +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.12.2, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.3, object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" + integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.fromentries@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.hasown@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" + integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== + dependencies: + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.values@^1.1.5, object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +open@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + +postcss@8.4.14: + version "8.4.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.6.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + +prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +react-is@^16.13.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +regenerator-runtime@^0.13.10: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regexp-tree@^0.1.24, regexp-tree@~0.1.1: + version "0.1.24" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.24.tgz#3d6fa238450a4d66e5bc9c4c14bb720e2196829d" + integrity sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw== + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^2.0.0-next.3: + version "2.0.0-next.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +safe-regex@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-2.1.1.tgz#f7128f00d056e2fe5c11e81a1324dd974aadced2" + integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A== + dependencies: + regexp-tree "~0.1.1" + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + +"semver@2 || 3 || 4 || 5": + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.5, semver@^7.3.7: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.12" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" + integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== + +string.prototype.matchall@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" + integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.4.3" + side-channel "^1.0.4" + +string.prototype.trimend@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +styled-jsx@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f" + integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw== + dependencies: + client-only "0.0.1" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +synckit@^0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.4.tgz#0e6b392b73fafdafcde56692e3352500261d64ec" + integrity sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw== + dependencies: + "@pkgr/utils" "^2.3.1" + tslib "^2.4.0" + +tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +tiny-glob@^0.2.9: + version "0.2.9" + resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" + integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== + dependencies: + globalyzer "0.1.0" + globrex "^0.1.2" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tsconfig-paths@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0, tslib@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" + integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +typescript@^4.0.0, typescript@^4.6.3: + version "4.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db" + integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +use-intl@^2.10.2: + version "2.10.2" + resolved "https://registry.yarnpkg.com/use-intl/-/use-intl-2.10.2.tgz#100648eec697a6950a164eeb1df8d243cf4a7ce2" + integrity sha512-4RT+Vc8Dkzw+I2e4DEa+hjLwZow5sj7nqJYVr+UttZ5LVkmOP6IuVMgEhnjHHperL+ywlA5nhrOTTetTVzMpBg== + dependencies: + "@formatjs/ecma402-abstract" "^1.11.4" + intl-messageformat "^9.3.18" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 854dc69244a07ec21fa43dfadb6708f11231c798 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 8 Feb 2023 13:17:45 +0100 Subject: [PATCH 114/312] Clean up new example --- packages/example-next-13-with-pages/README.md | 8 +++--- .../src/app/[locale]/layout.tsx | 2 ++ .../src/app/[locale]/page.tsx | 16 +++++------ .../example-next-13-with-pages/src/i18n.tsx | 6 ++--- .../src/middleware.tsx | 8 +++--- .../src/pages/[locale]/about.tsx | 27 +++++++++---------- .../src/pages/_app.tsx | 14 +++++----- 7 files changed, 39 insertions(+), 42 deletions(-) diff --git a/packages/example-next-13-with-pages/README.md b/packages/example-next-13-with-pages/README.md index abb0771b6..a3b5c1b63 100644 --- a/packages/example-next-13-with-pages/README.md +++ b/packages/example-next-13-with-pages/README.md @@ -2,13 +2,11 @@ An example that showcases a basic installation of `next-intl` in a Next.js app that uses both the pages and the new app folder. -Important to note: - -1. Do not add the i18n config to the `next.config.js` as it will cause the `app` directory to be ignored. -2. Add `GetStaticPaths` and `GetStaticProps` or `GetServerSideProps` (if you need SSR) to the relevant `pages`. +**Important**: Do not add an `i18n` config to `next.config.js`, as it will cause the `app` directory to be ignored. You can run the example locally like this: ``` -yarn && yarn dev +yarn +yarn dev ``` diff --git a/packages/example-next-13-with-pages/src/app/[locale]/layout.tsx b/packages/example-next-13-with-pages/src/app/[locale]/layout.tsx index 167035ac5..479d16458 100644 --- a/packages/example-next-13-with-pages/src/app/[locale]/layout.tsx +++ b/packages/example-next-13-with-pages/src/app/[locale]/layout.tsx @@ -1,3 +1,4 @@ +/* eslint-disable @next/next/no-head-element */ import {useLocale} from 'next-intl'; import {ReactNode} from 'react'; @@ -8,6 +9,7 @@ type Props = { export default async function LocaleLayout({children}: Props) { const locale = useLocale(); + return ( diff --git a/packages/example-next-13-with-pages/src/app/[locale]/page.tsx b/packages/example-next-13-with-pages/src/app/[locale]/page.tsx index ecc6acd76..1597cd40b 100644 --- a/packages/example-next-13-with-pages/src/app/[locale]/page.tsx +++ b/packages/example-next-13-with-pages/src/app/[locale]/page.tsx @@ -1,18 +1,18 @@ -import { LocalizedLink, useLocale, useTranslations } from "next-intl"; -import LocaleSwitcher from "../../components/LocaleSwitcher"; -import PageLayout from "../../components/PageLayout"; +import {LocalizedLink, useLocale, useTranslations} from 'next-intl'; +import LocaleSwitcher from '../../components/LocaleSwitcher'; +import PageLayout from '../../components/PageLayout'; export default function Index() { - const t = useTranslations("Index"); + const t = useTranslations('Index'); const locale = useLocale(); return ( - -

{t("description")}

+ +

{t('description')}

- - {t("navigateToAbout")} + + {t('navigateToAbout')}

diff --git a/packages/example-next-13-with-pages/src/i18n.tsx b/packages/example-next-13-with-pages/src/i18n.tsx index 45fdedc99..c45ddee14 100644 --- a/packages/example-next-13-with-pages/src/i18n.tsx +++ b/packages/example-next-13-with-pages/src/i18n.tsx @@ -1,5 +1,5 @@ -import { getRequestConfig } from "next-intl/server"; +import {getRequestConfig} from 'next-intl/server'; -export default getRequestConfig(async ({ locale }) => ({ - messages: (await import(`../messages/${locale}.json`)).default, +export default getRequestConfig(async ({locale}) => ({ + messages: (await import(`../messages/${locale}.json`)).default })); diff --git a/packages/example-next-13-with-pages/src/middleware.tsx b/packages/example-next-13-with-pages/src/middleware.tsx index d719e6323..25ff46236 100644 --- a/packages/example-next-13-with-pages/src/middleware.tsx +++ b/packages/example-next-13-with-pages/src/middleware.tsx @@ -1,11 +1,11 @@ -import { createIntlMiddleware } from "next-intl/server"; +import {createIntlMiddleware} from 'next-intl/server'; export default createIntlMiddleware({ - locales: ["en", "de"], - defaultLocale: "en", + locales: ['en', 'de'], + defaultLocale: 'en' }); export const config = { // Skip all internal paths - matcher: ["/((?!_next).*)"], + matcher: ['/((?!_next).*)'] }; diff --git a/packages/example-next-13-with-pages/src/pages/[locale]/about.tsx b/packages/example-next-13-with-pages/src/pages/[locale]/about.tsx index bb0fe13a4..5814df570 100644 --- a/packages/example-next-13-with-pages/src/pages/[locale]/about.tsx +++ b/packages/example-next-13-with-pages/src/pages/[locale]/about.tsx @@ -1,32 +1,29 @@ -import React from "react"; -import type { GetStaticPropsContext } from "next"; -import { useTranslations } from "next-intl"; -import LocaleSwitcher from "../../components/LocaleSwitcher"; -import PageLayout from "../../components/PageLayout"; +import {GetStaticPropsContext} from 'next'; +import {useTranslations} from 'next-intl'; +import PageLayout from '../../components/PageLayout'; -export default function AboutPage() { - const t = useTranslations("About"); +export default function About() { + const t = useTranslations('About'); return ( - -

{t("description")}

- + +

{t('description')}

); } -export async function getStaticProps({ params }: GetStaticPropsContext) { +export async function getStaticProps({params}: GetStaticPropsContext) { return { props: { messages: (await import(`../../../messages/${params?.locale}.json`)) - .default, - }, + .default + } }; } export async function getStaticPaths() { return { - paths: [{ params: { locale: "de" } }, { params: { locale: "en" } }], - fallback: false, + paths: [{params: {locale: 'de'}}, {params: {locale: 'en'}}], + fallback: false }; } diff --git a/packages/example-next-13-with-pages/src/pages/_app.tsx b/packages/example-next-13-with-pages/src/pages/_app.tsx index fbbb7f7ed..45c2886d0 100644 --- a/packages/example-next-13-with-pages/src/pages/_app.tsx +++ b/packages/example-next-13-with-pages/src/pages/_app.tsx @@ -1,16 +1,16 @@ -import { NextIntlProvider } from "next-intl"; -import { NextRouter, withRouter } from "next/router"; -import type { AppProps } from "next/app"; +import {NextIntlProvider} from 'next-intl'; +import {AppProps} from 'next/app'; +import {NextRouter, withRouter} from 'next/router'; -interface WithRouterProps { +type Props = AppProps & { router: NextRouter; -} +}; -function App({ Component, pageProps, router }: AppProps & WithRouterProps) { +function App({Component, pageProps, router}: Props) { return ( From 44af8abf987623ce7104f71093e4ced3650341a1 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 13 Feb 2023 10:12:49 +0100 Subject: [PATCH 115/312] feat: Awaitables for Next.js 13 RSC integration (#184) * Add awaitable functions * Fix lint --- .../example-next-13-advanced/messages/de.json | 8 +- .../example-next-13-advanced/messages/en.json | 8 +- .../example-next-13-advanced/package.json | 2 +- .../src/app/[locale]/head.tsx | 12 -- .../src/app/[locale]/layout.tsx | 10 ++ .../src/middleware.tsx | 2 +- packages/example-next-13/package.json | 2 +- packages/example-next-13/src/middleware.tsx | 2 +- packages/next-intl/middleware.d.ts | 1 + packages/next-intl/package.json | 4 +- ...reateIntlMiddleware.tsx => middleware.tsx} | 6 +- .../src/react-client/LocalizedLink.tsx | 1 - .../next-intl/src/react-server/useConfig.tsx | 70 --------- .../next-intl/src/react-server/useHook.tsx | 30 ++++ .../next-intl/src/react-server/useIntl.tsx | 9 +- .../next-intl/src/react-server/useLocale.tsx | 25 +-- .../next-intl/src/react-server/useNow.tsx | 5 +- .../src/react-server/useTimeZone.tsx | 5 +- .../src/react-server/useTranslations.tsx | 23 +-- packages/next-intl/src/server/getConfig.tsx | 27 ++++ packages/next-intl/src/server/getIntl.tsx | 10 ++ packages/next-intl/src/server/getLocale.tsx | 26 +++ packages/next-intl/src/server/getNow.tsx | 9 ++ packages/next-intl/src/server/getTimeZone.tsx | 9 ++ .../next-intl/src/server/getTranslations.tsx | 102 ++++++++++++ packages/next-intl/src/server/index.tsx | 12 +- packages/next-intl/types/index.d.ts | 3 +- .../pages/docs/next-13/server-components.mdx | 39 ++++- yarn.lock | 148 +++++++++--------- 29 files changed, 377 insertions(+), 233 deletions(-) delete mode 100644 packages/example-next-13-advanced/src/app/[locale]/head.tsx create mode 100644 packages/next-intl/middleware.d.ts rename packages/next-intl/src/{server/createIntlMiddleware.tsx => middleware.tsx} (87%) delete mode 100644 packages/next-intl/src/react-server/useConfig.tsx create mode 100644 packages/next-intl/src/react-server/useHook.tsx create mode 100644 packages/next-intl/src/server/getConfig.tsx create mode 100644 packages/next-intl/src/server/getIntl.tsx create mode 100644 packages/next-intl/src/server/getLocale.tsx create mode 100644 packages/next-intl/src/server/getNow.tsx create mode 100644 packages/next-intl/src/server/getTimeZone.tsx create mode 100644 packages/next-intl/src/server/getTranslations.tsx diff --git a/packages/example-next-13-advanced/messages/de.json b/packages/example-next-13-advanced/messages/de.json index 72157281a..34eea1b41 100644 --- a/packages/example-next-13-advanced/messages/de.json +++ b/packages/example-next-13-advanced/messages/de.json @@ -1,14 +1,14 @@ { - "Meta": { - "title": "next-intl Beispiel", - "description": "Das ist ein Beispiel, wie next-intl im `app`-Verzeichnis verwendet werden kann." - }, "Index": { "title": "Start", "description": "Das ist die Startseite.", "rich": "Das ist formatierter Test.", "globalDefaults": "{globalString}" }, + "LocaleLayout": { + "title": "next-intl Beispiel", + "description": "Das ist ein Beispiel, wie next-intl im `app`-Verzeichnis verwendet werden kann." + }, "Client": { "title": "Client", "description": "Dise Seite wird auf der Client-Seite initialisiert." diff --git a/packages/example-next-13-advanced/messages/en.json b/packages/example-next-13-advanced/messages/en.json index df7e20c64..1daa3410f 100644 --- a/packages/example-next-13-advanced/messages/en.json +++ b/packages/example-next-13-advanced/messages/en.json @@ -1,14 +1,14 @@ { - "Meta": { - "title": "next-intl example", - "description": "This is an example of using next-intl in the `app` directory." - }, "Index": { "title": "Home", "description": "This is the home page.", "rich": "This is a rich text.", "globalDefaults": "{globalString}" }, + "LocaleLayout": { + "title": "next-intl example", + "description": "This is an example of using next-intl in the `app` directory." + }, "Client": { "title": "Client", "description": "This page hydrates on the client side." diff --git a/packages/example-next-13-advanced/package.json b/packages/example-next-13-advanced/package.json index cbc642826..6475e6e1c 100644 --- a/packages/example-next-13-advanced/package.json +++ b/packages/example-next-13-advanced/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "lodash": "^4.17.21", - "next": "^13.1.1", + "next": "canary", "next-intl": "*", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/example-next-13-advanced/src/app/[locale]/head.tsx b/packages/example-next-13-advanced/src/app/[locale]/head.tsx deleted file mode 100644 index e4f83c0b6..000000000 --- a/packages/example-next-13-advanced/src/app/[locale]/head.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import {useTranslations} from 'next-intl'; - -export default function Head() { - const t = useTranslations('Meta'); - return ( - <> - {t('title')} - - - - ); -} diff --git a/packages/example-next-13-advanced/src/app/[locale]/layout.tsx b/packages/example-next-13-advanced/src/app/[locale]/layout.tsx index da5f580d2..76bdc91c6 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/layout.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/layout.tsx @@ -1,4 +1,5 @@ import {useLocale} from 'next-intl'; +import {getTranslations} from 'next-intl/server'; import {notFound} from 'next/navigation'; import {ReactNode} from 'react'; @@ -7,6 +8,15 @@ type Props = { params: {locale: string}; }; +export async function generateMetadata() { + const t = await getTranslations('LocaleLayout'); + + return { + title: t('title'), + description: t('description') + }; +} + export default function LocaleLayout({children, params}: Props) { const locale = useLocale(); diff --git a/packages/example-next-13-advanced/src/middleware.tsx b/packages/example-next-13-advanced/src/middleware.tsx index 25ff46236..409fa3c26 100644 --- a/packages/example-next-13-advanced/src/middleware.tsx +++ b/packages/example-next-13-advanced/src/middleware.tsx @@ -1,4 +1,4 @@ -import {createIntlMiddleware} from 'next-intl/server'; +import createIntlMiddleware from 'next-intl/middleware'; export default createIntlMiddleware({ locales: ['en', 'de'], diff --git a/packages/example-next-13/package.json b/packages/example-next-13/package.json index a161e8340..ef5090776 100644 --- a/packages/example-next-13/package.json +++ b/packages/example-next-13/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "lodash": "^4.17.21", - "next": "^13.1.1", + "next": "canary", "next-intl": "^2.10.2", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/example-next-13/src/middleware.tsx b/packages/example-next-13/src/middleware.tsx index 25ff46236..409fa3c26 100644 --- a/packages/example-next-13/src/middleware.tsx +++ b/packages/example-next-13/src/middleware.tsx @@ -1,4 +1,4 @@ -import {createIntlMiddleware} from 'next-intl/server'; +import createIntlMiddleware from 'next-intl/middleware'; export default createIntlMiddleware({ locales: ['en', 'de'], diff --git a/packages/next-intl/middleware.d.ts b/packages/next-intl/middleware.d.ts new file mode 100644 index 000000000..26b85a5ef --- /dev/null +++ b/packages/next-intl/middleware.d.ts @@ -0,0 +1 @@ +export {default} from './dist/src/middleware'; diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 94221c5e2..69006d844 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -30,6 +30,7 @@ "./server": "./dist/src/server/index.js", "./client": "./dist/src/client/index.js", "./config": "./config.js", + "./middleware": "./dist/src/middleware.js", "./withNextIntl": "./withNextIntl.js", "./plugin": "./plugin.js" }, @@ -41,6 +42,7 @@ "client.js", "client.d.ts", "config.js", + "middleware.d.ts", "withNextIntl.js", "withNextIntl.d.ts", "plugin.js", @@ -77,7 +79,7 @@ "dts-cli": "1.4.0", "eslint": "8.12.0", "eslint-config-molindo": "6.0.0", - "next": "^13.1.1", + "next": "canary", "react": "^18.2.0", "react-dom": "^18.2.0", "typescript": "^4.4.4" diff --git a/packages/next-intl/src/server/createIntlMiddleware.tsx b/packages/next-intl/src/middleware.tsx similarity index 87% rename from packages/next-intl/src/server/createIntlMiddleware.tsx rename to packages/next-intl/src/middleware.tsx index cd3cd12cc..78c18ce57 100644 --- a/packages/next-intl/src/server/createIntlMiddleware.tsx +++ b/packages/next-intl/src/middleware.tsx @@ -1,7 +1,7 @@ import {NextRequest, NextResponse} from 'next/server'; -import {COOKIE_LOCALE_NAME, HEADER_LOCALE_NAME} from '../shared/constants'; -import NextIntlMiddlewareConfig from './NextIntlMiddlewareConfig'; -import resolveLocale from './resolveLocale'; +import NextIntlMiddlewareConfig from './server/NextIntlMiddlewareConfig'; +import resolveLocale from './server/resolveLocale'; +import {COOKIE_LOCALE_NAME, HEADER_LOCALE_NAME} from './shared/constants'; // If there's an exact match for this path, we'll add the locale to the URL const ROOT_URL = '/'; diff --git a/packages/next-intl/src/react-client/LocalizedLink.tsx b/packages/next-intl/src/react-client/LocalizedLink.tsx index ff70b77e4..8562b2e1e 100644 --- a/packages/next-intl/src/react-client/LocalizedLink.tsx +++ b/packages/next-intl/src/react-client/LocalizedLink.tsx @@ -2,5 +2,4 @@ import {useLocale} from 'use-intl'; import createLocalizedLinkComponent from '../shared/createLocalizedLinkComponent'; const LocalizedLink = createLocalizedLinkComponent(useLocale); - export default LocalizedLink; diff --git a/packages/next-intl/src/react-server/useConfig.tsx b/packages/next-intl/src/react-server/useConfig.tsx deleted file mode 100644 index 83be652ee..000000000 --- a/packages/next-intl/src/react-server/useConfig.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import {cache, use, useMemo} from 'react'; -import getIntlContextValue from 'use-intl/dist/src/react/getIntlContextValue'; -import createRequestConfig from '../server/createRequestConfig'; -import useLocale from './useLocale'; - -const receiveRuntimeConfig = cache( - async (locale: string, getConfig?: typeof createRequestConfig) => { - let result = getConfig?.({locale}); - if (result instanceof Promise) { - result = await result; - } - return { - ...result, - // Make sure `now` is consistent across the request in case none was configured - now: result?.now || new Date() - }; - } -); - -function isPromise(value: any): value is Promise { - return value != null && typeof value.then === 'function'; -} - -export default function useConfig() { - const locale = useLocale(); - - function safeUnwrap(valueOrPromise: Value | Promise): Value { - return isPromise(valueOrPromise) ? use(valueOrPromise) : valueOrPromise; - } - - try { - return useMemo(() => { - const runtimeConfig = safeUnwrap( - receiveRuntimeConfig(locale, createRequestConfig) - ); - const opts = {...runtimeConfig, locale}; - return getIntlContextValue(opts); - }, [locale]); - } catch (error) { - if ( - error instanceof TypeError && - error.message.includes("reading 'useMemo'") - ) { - throw new Error( - `\`next-intl\` is currently not supported in async components. Please turn your component into a regular component by removing the \`async\` keyword and replacing \`await\` with \`use\` in the component body. - -Before: - -async function Component() { - const response = await fetch(...); - // ... -} - -After: - -function Component() { - const response = use(fetch(...))); - // ... -} - -Alternatively, you can split your component to separate the async code from the usage of \`next-intl\`. - -See https://github.com/vercel/next.js/issues/44778 -` - ); - } else { - throw error; - } - } -} diff --git a/packages/next-intl/src/react-server/useHook.tsx b/packages/next-intl/src/react-server/useHook.tsx new file mode 100644 index 000000000..8d0dbfa90 --- /dev/null +++ b/packages/next-intl/src/react-server/useHook.tsx @@ -0,0 +1,30 @@ +import {use} from 'react'; + +export default function useHook( + hookName: string, + promise: Promise +) { + try { + return use(promise); + } catch (error: any) { + if ( + error instanceof TypeError && + error.message.includes("Cannot read properties of null (reading 'use')") + ) { + throw new Error( + `\`${hookName}\` is not callable within an async component. + +You can either: + +1. Split your component into two, leaving the async code in the first + one and moving the usage of \`${hookName}\` to the second one. + +2. Use an awaitable version of the hook, see + https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components`, + {cause: error} + ); + } else { + throw error; + } + } +} diff --git a/packages/next-intl/src/react-server/useIntl.tsx b/packages/next-intl/src/react-server/useIntl.tsx index 8286fff86..e4859384c 100644 --- a/packages/next-intl/src/react-server/useIntl.tsx +++ b/packages/next-intl/src/react-server/useIntl.tsx @@ -1,9 +1,6 @@ -import {useMemo} from 'react'; -import {createIntl} from 'use-intl/dist/src/core'; -import useConfig from './useConfig'; +import getIntl from '../server/getIntl'; +import useHook from './useHook'; export default function useIntl() { - const config = useConfig(); - - return useMemo(() => createIntl(config), [config]); + return useHook('useIntl', getIntl()); } diff --git a/packages/next-intl/src/react-server/useLocale.tsx b/packages/next-intl/src/react-server/useLocale.tsx index ff803c04d..e39b3c88b 100644 --- a/packages/next-intl/src/react-server/useLocale.tsx +++ b/packages/next-intl/src/react-server/useLocale.tsx @@ -1,27 +1,4 @@ -import {cookies, headers} from 'next/headers'; -import {cache} from 'react'; -import {COOKIE_LOCALE_NAME, HEADER_LOCALE_NAME} from '../shared/constants'; - -const getLocale = cache(() => { - let locale; - - // A header is only set when we're changing the locale, - // otherwise we reuse an existing one from a cookie. - const requestHeaders = headers(); - if (requestHeaders.has(HEADER_LOCALE_NAME)) { - locale = requestHeaders.get(HEADER_LOCALE_NAME); - } else { - locale = cookies().get(COOKIE_LOCALE_NAME)?.value; - } - - if (!locale) { - throw new Error( - 'Unable to find `next-intl` locale, have you configured the middleware?`' - ); - } - - return locale; -}); +import getLocale from '../server/getLocale'; export default function useLocale() { return getLocale(); diff --git a/packages/next-intl/src/react-server/useNow.tsx b/packages/next-intl/src/react-server/useNow.tsx index 7ade0bf7d..4b49b36b4 100644 --- a/packages/next-intl/src/react-server/useNow.tsx +++ b/packages/next-intl/src/react-server/useNow.tsx @@ -1,5 +1,6 @@ -import useConfig from './useConfig'; +import getNow from '../server/getNow'; +import useHook from './useHook'; export default function useNow() { - return useConfig().now; + return useHook('useNow', getNow()); } diff --git a/packages/next-intl/src/react-server/useTimeZone.tsx b/packages/next-intl/src/react-server/useTimeZone.tsx index feced1ab5..04c2b5350 100644 --- a/packages/next-intl/src/react-server/useTimeZone.tsx +++ b/packages/next-intl/src/react-server/useTimeZone.tsx @@ -1,5 +1,6 @@ -import useConfig from './useConfig'; +import getTimeZone from '../server/getTimeZone'; +import useHook from './useHook'; export default function useTimeZone() { - return useConfig().timeZone; + return useHook('useTimeZone', getTimeZone()); } diff --git a/packages/next-intl/src/react-server/useTranslations.tsx b/packages/next-intl/src/react-server/useTranslations.tsx index 0b82b5135..c4b503802 100644 --- a/packages/next-intl/src/react-server/useTranslations.tsx +++ b/packages/next-intl/src/react-server/useTranslations.tsx @@ -1,23 +1,6 @@ -import {useMemo} from 'react'; -import createBaseTranslator, { - getMessagesOrError -} from 'use-intl/dist/src/core/createBaseTranslator'; -import useConfig from './useConfig'; +import getTranslations from '../server/getTranslations'; +import useHook from './useHook'; export default function useTranslations(namespace?: string) { - const config = useConfig(); - - return useMemo(() => { - const messagesOrError = getMessagesOrError({ - messages: config.messages as any, - namespace, - onError: config.onError - }); - - return createBaseTranslator({ - ...config, - namespace, - messagesOrError - }); - }, [config, namespace]); + return useHook('useTranslations', getTranslations(namespace)); } diff --git a/packages/next-intl/src/server/getConfig.tsx b/packages/next-intl/src/server/getConfig.tsx new file mode 100644 index 000000000..12c6b4f89 --- /dev/null +++ b/packages/next-intl/src/server/getConfig.tsx @@ -0,0 +1,27 @@ +import {cache} from 'react'; +import getIntlContextValue from 'use-intl/dist/src/react/getIntlContextValue'; +import createRequestConfig from '../server/createRequestConfig'; +import getLocale from './getLocale'; + +const receiveRuntimeConfig = cache( + async (locale: string, getConfig?: typeof createRequestConfig) => { + let result = getConfig?.({locale}); + if (result instanceof Promise) { + result = await result; + } + return { + ...result, + // Make sure `now` is consistent across the request in case none was configured + now: result?.now || new Date() + }; + } +); + +const getConfig = cache(async () => { + const locale = getLocale(); + const runtimeConfig = await receiveRuntimeConfig(locale, createRequestConfig); + const opts = {...runtimeConfig, locale}; + return getIntlContextValue(opts); +}); + +export default getConfig; diff --git a/packages/next-intl/src/server/getIntl.tsx b/packages/next-intl/src/server/getIntl.tsx new file mode 100644 index 000000000..48e6e496d --- /dev/null +++ b/packages/next-intl/src/server/getIntl.tsx @@ -0,0 +1,10 @@ +import {cache} from 'react'; +import {createIntl} from 'use-intl/dist/src/core'; +import getConfig from './getConfig'; + +const getIntl = cache(async () => { + const config = await getConfig(); + return createIntl(config); +}); + +export default getIntl; diff --git a/packages/next-intl/src/server/getLocale.tsx b/packages/next-intl/src/server/getLocale.tsx new file mode 100644 index 000000000..db968e1bd --- /dev/null +++ b/packages/next-intl/src/server/getLocale.tsx @@ -0,0 +1,26 @@ +import {cookies, headers} from 'next/headers'; +import {cache} from 'react'; +import {COOKIE_LOCALE_NAME, HEADER_LOCALE_NAME} from '../shared/constants'; + +const getLocale = cache(() => { + let locale; + + // A header is only set when we're changing the locale, + // otherwise we reuse an existing one from a cookie. + const requestHeaders = headers(); + if (requestHeaders.has(HEADER_LOCALE_NAME)) { + locale = requestHeaders.get(HEADER_LOCALE_NAME); + } else { + locale = cookies().get(COOKIE_LOCALE_NAME)?.value; + } + + if (!locale) { + throw new Error( + 'Unable to find `next-intl` locale, have you configured the middleware?`' + ); + } + + return locale; +}); + +export default getLocale; diff --git a/packages/next-intl/src/server/getNow.tsx b/packages/next-intl/src/server/getNow.tsx new file mode 100644 index 000000000..e541f7560 --- /dev/null +++ b/packages/next-intl/src/server/getNow.tsx @@ -0,0 +1,9 @@ +import {cache} from 'react'; +import getConfig from './getConfig'; + +const getNow = cache(async () => { + const config = await getConfig(); + return config.now; +}); + +export default getNow; diff --git a/packages/next-intl/src/server/getTimeZone.tsx b/packages/next-intl/src/server/getTimeZone.tsx new file mode 100644 index 000000000..8fd3ddaf4 --- /dev/null +++ b/packages/next-intl/src/server/getTimeZone.tsx @@ -0,0 +1,9 @@ +import {cache} from 'react'; +import getConfig from './getConfig'; + +const getTimeZone = cache(async () => { + const config = await getConfig(); + return config.timeZone; +}); + +export default getTimeZone; diff --git a/packages/next-intl/src/server/getTranslations.tsx b/packages/next-intl/src/server/getTranslations.tsx new file mode 100644 index 000000000..95a1163b6 --- /dev/null +++ b/packages/next-intl/src/server/getTranslations.tsx @@ -0,0 +1,102 @@ +/* eslint-disable import/default */ + +import {cache} from 'react'; +import type Formats from 'use-intl/dist/src/core/Formats'; +import type TranslationValues from 'use-intl/dist/src/core/TranslationValues'; +import createBaseTranslator, { + getMessagesOrError +} from 'use-intl/dist/src/core/createBaseTranslator'; +import {CoreRichTranslationValues} from 'use-intl/dist/src/core/createTranslatorImpl'; +import MessageKeys from 'use-intl/dist/src/core/utils/MessageKeys'; +import NamespaceKeys from 'use-intl/dist/src/core/utils/NamespaceKeys'; +import NestedKeyOf from 'use-intl/dist/src/core/utils/NestedKeyOf'; +import NestedValueOf from 'use-intl/dist/src/core/utils/NestedValueOf'; +import getConfig from './getConfig'; + +async function getTranslationsImpl< + NestedKey extends NamespaceKeys< + IntlMessages, + NestedKeyOf + > = never +>( + namespace?: NestedKey +): // Explicitly defining the return type is necessary as TypeScript would get it wrong +Promise<{ + // Default invocation + < + TargetKey extends MessageKeys< + NestedValueOf< + {'!': IntlMessages}, + [NestedKey] extends [never] ? '!' : `!.${NestedKey}` + >, + NestedKeyOf< + NestedValueOf< + {'!': IntlMessages}, + [NestedKey] extends [never] ? '!' : `!.${NestedKey}` + > + > + > + >( + key: TargetKey, + values?: TranslationValues, + formats?: Partial + ): string; + + // `rich` + rich< + TargetKey extends MessageKeys< + NestedValueOf< + {'!': IntlMessages}, + [NestedKey] extends [never] ? '!' : `!.${NestedKey}` + >, + NestedKeyOf< + NestedValueOf< + {'!': IntlMessages}, + [NestedKey] extends [never] ? '!' : `!.${NestedKey}` + > + > + > + >( + key: TargetKey, + values?: CoreRichTranslationValues, + formats?: Partial + ): string; + + // `raw` + raw< + TargetKey extends MessageKeys< + NestedValueOf< + {'!': IntlMessages}, + [NestedKey] extends [never] ? '!' : `!.${NestedKey}` + >, + NestedKeyOf< + NestedValueOf< + {'!': IntlMessages}, + [NestedKey] extends [never] ? '!' : `!.${NestedKey}` + > + > + > + >( + key: TargetKey + ): any; +}> { + const config = await getConfig(); + + const messagesOrError = getMessagesOrError({ + messages: config.messages as any, + namespace, + onError: config.onError + }); + + // We allow to resolve rich text formatting here, but the types forbid it when + // `getTranslations` is used directly. Supporting rich text is important when + // the react-server implementation calls into this function. + // @ts-ignore + return createBaseTranslator({ + ...config, + namespace, + messagesOrError + }); +} + +export default cache(getTranslationsImpl); diff --git a/packages/next-intl/src/server/index.tsx b/packages/next-intl/src/server/index.tsx index c849b5061..1aabf0b8c 100644 --- a/packages/next-intl/src/server/index.tsx +++ b/packages/next-intl/src/server/index.tsx @@ -2,5 +2,15 @@ * Server-only APIs. */ -export {default as createIntlMiddleware} from './createIntlMiddleware'; +export function createIntlMiddleware() { + throw new Error( + "DEPRECATION ERROR: `import {createIntlMiddleware} from 'next-intl';` is deprecated and needs to be replaced with `import createIntlMiddleware from 'next-intl/middleware'`." + ); +} + export {default as getRequestConfig} from './getRequestConfig'; +export {default as getIntl} from './getIntl'; +export {default as getLocale} from './getLocale'; +export {default as getNow} from './getNow'; +export {default as getTimeZone} from './getTimeZone'; +export {default as getTranslations} from './getTranslations'; diff --git a/packages/next-intl/types/index.d.ts b/packages/next-intl/types/index.d.ts index 81a4ebae8..f94a7983c 100644 --- a/packages/next-intl/types/index.d.ts +++ b/packages/next-intl/types/index.d.ts @@ -1,5 +1,6 @@ -// Temporarly copied here until the "es2020.intl" lib is published. +declare interface IntlMessages extends Record {} +// Temporarly copied here until the "es2020.intl" lib is published. declare namespace Intl { /** * [BCP 47 language tag](http://tools.ietf.org/html/rfc5646) definition. diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 97a2845b1..199e2bda5 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -16,7 +16,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. npm install next-intl@2.11.0-beta.7 ``` -This beta version was tested with `next@13.1.1`. +This beta version was tested with `next@13.1.6`. ## Roadmap @@ -83,7 +83,7 @@ module.exports = withNextIntl({ 4. Create a [middleware](https://nextjs.org/docs/advanced-features/middleware) in `middleware.tsx`: ```tsx -import {createIntlMiddleware} from 'next-intl/server'; +import createIntlMiddleware from 'next-intl/middleware'; // The middleware intercepts requests to `/` and will redirect // to one of the configured locales instead (e.g. `/en`). @@ -211,8 +211,8 @@ If you need to use translations in Client Components, the best approach is to pa import {useTranslations} from 'next-intl'; import Expandable from './Expandable'; -export default function FrequentlyAskedQuestions() { - const t = useTranslations('FrequentlyAskedQuestions'); +export default function FAQ() { + const t = useTranslations('FAQ'); return ; } ``` @@ -243,6 +243,37 @@ This way your messages never leave the server and the client only needs to load If you absolutely need to use functionality from `next-intl` on the client side, you can wrap the respective components with `NextIntlClientProvider` ([example code](https://github.com/amannn/next-intl/blob/feat/next-13-rsc/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx)). Note however that this will increase your client bundle size. +## Using internationalization outside of components + +If you need to use translated messages in functions like `generateMetadata`, you can import awaitable versions of the functions that you usually call as hooks from `next-intl/server`. + +```tsx +// [locale]/layout.tsx + +import {getTranslations} from 'next-intl/server'; + +export async function generateMetadata() { + const t = await getTranslations('Metadata'); + + return { + title: t('title'), + description: t('description') + }; +} +``` + +These functions are available from `next-intl/server` for usage outside of components: + +```tsx +import { + getTranslations, // like `useTranslations` + getIntl, // like `useIntl` + getLocale, // like `useLocale` + getNow, // like `useNow` + getTimeZone // like `useTimeZone` +} from 'next-intl/server'; +``` + ## Providing feedback If you have feedback about using `next-intl` in the `app` directory, feel free to leave feedback in [the PR which implements the React Server Components support](https://github.com/amannn/next-intl/pull/149). diff --git a/yarn.lock b/yarn.lock index 839fb6c44..8a3a69d2e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2301,10 +2301,10 @@ resolved "https://registry.yarnpkg.com/@next/env/-/env-13.0.0.tgz#38527956680693c90b4522ab4ab9a2fbe3a17f67" integrity sha512-65v9BVuah2Mplohm4+efsKEnoEuhmlGm8B2w6vD1geeEP2wXtlSJCvR/cCRJ3fD8wzCQBV41VcMBQeYET6MRkg== -"@next/env@13.1.1": - version "13.1.1" - resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.1.tgz#6ff26488dc7674ef2bfdd1ca28fe43eed1113bea" - integrity sha512-vFMyXtPjSAiOXOywMojxfKIqE3VWN5RCAx+tT3AS3pcKjMLFTCJFUWsKv8hC+87Z1F4W3r68qTwDFZIFmd5Xkw== +"@next/env@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.7-canary.7.tgz#0d32871cd2c9d30689ce7696f6ebd24c4dbaca54" + integrity sha512-hRrDd5Kzo9MnAeTxHkf47gQxzR7hiDKQquAyKNa4Cpre/vL6ZMerr53J4BuIIgToyvYu49Of+QI2SdyArFbxhA== "@next/eslint-plugin-next@12.0.1": version "12.0.1" @@ -2330,10 +2330,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.0.tgz#15cd89d19d3c00d123fdfe367bab38c362f6c515" integrity sha512-+DUQkYF93gxFjWY+CYWE1QDX6gTgnUiWf+W4UqZjM1Jcef8U97fS6xYh+i+8rH4MM0AXHm7OSakvfOMzmjU6VA== -"@next/swc-android-arm-eabi@13.1.1": - version "13.1.1" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.1.tgz#b5c3cd1f79d5c7e6a3b3562785d4e5ac3555b9e1" - integrity sha512-qnFCx1kT3JTWhWve4VkeWuZiyjG0b5T6J2iWuin74lORCupdrNukxkq9Pm+Z7PsatxuwVJMhjUoYz7H4cWzx2A== +"@next/swc-android-arm-eabi@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.7-canary.7.tgz#ce9df22859489a3b098414601bbba4cd2f48b510" + integrity sha512-0np5XOLL112tgzOz1uxyeKoabhwHSQG6zFwbCJxmYwBXa3LH9CB55cOT56jW4xaqZSQhNWG1UEyISiOMJ0XXRg== "@next/swc-android-arm64@12.1.4": version "12.1.4" @@ -2345,10 +2345,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.0.0.tgz#9410365bb07097268d4773a46b02cfe6b3fe3ab7" integrity sha512-RW9Uy3bMSc0zVGCa11klFuwfP/jdcdkhdruqnrJ7v+7XHm6OFKkSRzX6ee7yGR1rdDZvTnP4GZSRSpzjLv/N0g== -"@next/swc-android-arm64@13.1.1": - version "13.1.1" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.1.tgz#e2ca9ccbba9ef770cb19fbe96d1ac00fe4cb330d" - integrity sha512-eCiZhTzjySubNqUnNkQCjU3Fh+ep3C6b5DCM5FKzsTH/3Gr/4Y7EiaPZKILbvnXmhWtKPIdcY6Zjx51t4VeTfA== +"@next/swc-android-arm64@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.7-canary.7.tgz#0eb443cbb91946973a245793607a0e5093549d92" + integrity sha512-Qrso/wINns3fgmrrRCojvEIgXWE2QKTySspc/zMklUa9ck4RUiCRpKV3O0+sAGx68ZqKzQOrJFsp2cLHWX45AQ== "@next/swc-darwin-arm64@12.1.4": version "12.1.4" @@ -2360,10 +2360,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.0.tgz#caf262fb5cb8bb335f6f344fd67a44dc8bf6a084" integrity sha512-APA26nps1j4qyhOIzkclW/OmgotVHj1jBxebSpMCPw2rXfiNvKNY9FA0TcuwPmUCNqaTnm703h6oW4dvp73A4Q== -"@next/swc-darwin-arm64@13.1.1": - version "13.1.1" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.1.tgz#4af00877332231bbd5a3703435fdd0b011e74767" - integrity sha512-9zRJSSIwER5tu9ADDkPw5rIZ+Np44HTXpYMr0rkM656IvssowPxmhK0rTreC1gpUCYwFsRbxarUJnJsTWiutPg== +"@next/swc-darwin-arm64@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.7-canary.7.tgz#11925aa69fb6f3b00e4b93a6f5b6a9431e474f95" + integrity sha512-aBzwyTed3TBVDRvr3SuCCkmJ40YT+7hoSgeBu+MHAVM4SUhVq6C+tTQqpk56fDI6Q5aB34feswvgZQcJD1Wibw== "@next/swc-darwin-x64@12.1.4": version "12.1.4" @@ -2375,20 +2375,20 @@ resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.0.tgz#6b214753410e1d8512a1491045acea1e188df7d6" integrity sha512-qsUhUdoFuRJiaJ7LnvTQ6GZv1QnMDcRXCIjxaN0FNVXwrjkq++U7KjBUaxXkRzLV4C7u0NHLNOp0iZwNNE7ypw== -"@next/swc-darwin-x64@13.1.1": - version "13.1.1" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.1.tgz#bf4cb09e7e6ec6d91e031118dde2dd17078bcbbc" - integrity sha512-qWr9qEn5nrnlhB0rtjSdR00RRZEtxg4EGvicIipqZWEyayPxhUu6NwKiG8wZiYZCLfJ5KWr66PGSNeDMGlNaiA== +"@next/swc-darwin-x64@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.7-canary.7.tgz#1b2825d7c1c06ef71a0559df4507cf929e8bbf2b" + integrity sha512-/d/lNcR81i+pOmudnR1prtWs4OTnxD/M94JCYMbXAaH1+EDUUALYNbPYmOaPgKeYOvlLHTkbhnhdaTeepbitlg== "@next/swc-freebsd-x64@13.0.0": version "13.0.0" resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.0.tgz#eeb176bdb585f48882bdac1d04271b918ca87590" integrity sha512-sCdyCbboS7CwdnevKH9J6hkJI76LUw1jVWt4eV7kISuLiPba3JmehZSWm80oa4ADChRVAwzhLAo2zJaYRrInbg== -"@next/swc-freebsd-x64@13.1.1": - version "13.1.1" - resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.1.tgz#6933ea1264328e8523e28818f912cd53824382d4" - integrity sha512-UwP4w/NcQ7V/VJEj3tGVszgb4pyUCt3lzJfUhjDMUmQbzG9LDvgiZgAGMYH6L21MoyAATJQPDGiAMWAPKsmumA== +"@next/swc-freebsd-x64@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.7-canary.7.tgz#b11117a78ab2ee7ecb9d0431ecdff1d72a72ebe7" + integrity sha512-/NtZDP2FEm6LeBUvJPHg4B6ubQJSz1W5s1Ijbcj+O/w45iCbGBOagozvHXax5hapYYrQh2RylaBJjIYBI1VlaQ== "@next/swc-linux-arm-gnueabihf@12.1.4": version "12.1.4" @@ -2400,10 +2400,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.0.tgz#2c2a9622c93f87a8baca94e068f674da4cae6018" integrity sha512-/X/VxfFA41C9jrEv+sUsPLQ5vbDPVIgG0CJrzKvrcc+b+4zIgPgtfsaWq9ockjHFQi3ycvlZK4TALOXO8ovQ6Q== -"@next/swc-linux-arm-gnueabihf@13.1.1": - version "13.1.1" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.1.tgz#b5896967aaba3873d809c3ad2e2039e89acde419" - integrity sha512-CnsxmKHco9sosBs1XcvCXP845Db+Wx1G0qouV5+Gr+HT/ZlDYEWKoHVDgnJXLVEQzq4FmHddBNGbXvgqM1Gfkg== +"@next/swc-linux-arm-gnueabihf@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.7-canary.7.tgz#b35d654c6fe939e6b5a9b6f8e787b26ed15e668d" + integrity sha512-/+M97v9gNP5PDLnrQzLpaiXGhz9B/TjkkDKC+KHMMv0vXPN+F0Db72Sz7EX+ax2+xTwbCcvZLqkK5uA5gnWEvw== "@next/swc-linux-arm64-gnu@12.1.4": version "12.1.4" @@ -2415,10 +2415,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.0.tgz#69505827e2928fb18034150fd4d754d54c4a1c4b" integrity sha512-x6Oxr1GIi0ZtNiT6jbw+JVcbEi3UQgF7mMmkrgfL4mfchOwXtWSHKTSSPnwoJWJfXYa0Vy1n8NElWNTGAqoWFw== -"@next/swc-linux-arm64-gnu@13.1.1": - version "13.1.1" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.1.tgz#91b3e9ea8575b1ded421c0ea0739b7bccf228469" - integrity sha512-JfDq1eri5Dif+VDpTkONRd083780nsMCOKoFG87wA0sa4xL8LGcXIBAkUGIC1uVy9SMsr2scA9CySLD/i+Oqiw== +"@next/swc-linux-arm64-gnu@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.7-canary.7.tgz#e30fa2e5ddece4964a385030c0da5a2ed18b712e" + integrity sha512-Bgd7FzE0c2WqIrmUW/5+88/csT+E/H0oOSc8OoQwd9eQNPgUxAYjY/UHEg4LEVZTkEKe1VbIo3j6g6EHI5wrGg== "@next/swc-linux-arm64-musl@12.1.4": version "12.1.4" @@ -2430,10 +2430,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.0.tgz#487a88f2583a046e882328fe0665b37eca4fd0f6" integrity sha512-SnMH9ngI+ipGh3kqQ8+mDtWunirwmhQnQeZkEq9e/9Xsgjf04OetqrqRHKM1HmJtG2qMUJbyXFJ0F81TPuT+3g== -"@next/swc-linux-arm64-musl@13.1.1": - version "13.1.1" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.1.tgz#83149ea05d7d55f3664d608dbe004c0d125f9147" - integrity sha512-GA67ZbDq2AW0CY07zzGt07M5b5Yaq5qUpFIoW3UFfjOPgb0Sqf3DAW7GtFMK1sF4ROHsRDMGQ9rnT0VM2dVfKA== +"@next/swc-linux-arm64-musl@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.7-canary.7.tgz#af2477dc977ffc8237d461c07eb1b6805aee5b22" + integrity sha512-TiwJ77MiY+V2zmvzfJx9WJ17LsSf/r6oCzAevya9yAm0LWgzD7zRxksZ3JGFUKWXouVDIHLlFQy3aXEOG2vGqA== "@next/swc-linux-x64-gnu@12.1.4": version "12.1.4" @@ -2445,10 +2445,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.0.tgz#29e89c7e4fd2e2b16ad059076f6261998aee53df" integrity sha512-VSQwTX9EmdbotArtA1J67X8964oQfe0xHb32x4tu+JqTR+wOHyG6wGzPMdXH2oKAp6rdd7BzqxUXXf0J+ypHlw== -"@next/swc-linux-x64-gnu@13.1.1": - version "13.1.1" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.1.tgz#d7d0777b56de0dd82b78055772e13e18594a15ca" - integrity sha512-nnjuBrbzvqaOJaV+XgT8/+lmXrSCOt1YYZn/irbDb2fR2QprL6Q7WJNgwsZNxiLSfLdv+2RJGGegBx9sLBEzGA== +"@next/swc-linux-x64-gnu@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.7-canary.7.tgz#1d6fc813b06642ac000efb838e930c0f42e1d577" + integrity sha512-CJzqJUiktVmauoCZa62CVya7scI3qvlZ96KyAUU2aURCvu2GfPtXpK6khQ1JAZyEYdnpPoQ4aQQS2yY+fWHguQ== "@next/swc-linux-x64-musl@12.1.4": version "12.1.4" @@ -2460,10 +2460,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.0.tgz#2f63aae922d2b2829aec21bf8f9adda8b6c16365" integrity sha512-xBCP0nnpO0q4tsytXkvIwWFINtbFRyVY5gxa1zB0vlFtqYR9lNhrOwH3CBrks3kkeaePOXd611+8sjdUtrLnXA== -"@next/swc-linux-x64-musl@13.1.1": - version "13.1.1" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.1.tgz#41655722b127133cd95ab5bc8ca1473e9ab6876f" - integrity sha512-CM9xnAQNIZ8zf/igbIT/i3xWbQZYaF397H+JroF5VMOCUleElaMdQLL5riJml8wUfPoN3dtfn2s4peSr3azz/g== +"@next/swc-linux-x64-musl@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.7-canary.7.tgz#837fecc52b255ea3e5c1fc1b66f1c08d49eae343" + integrity sha512-wISnRcHz5vYkE86LYER0Y3TZsAorpOhMg83NaXXxRDPfR+a7umejFIgvslPnWRcbYy2kCgGRlBtW5lDEYzhJXA== "@next/swc-win32-arm64-msvc@12.1.4": version "12.1.4" @@ -2475,10 +2475,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.0.tgz#4117bad96c2a6775f70294fba45c63951a8a21ac" integrity sha512-NutwDafqhGxqPj/eiUixJq9ImS/0sgx6gqlD7jRndCvQ2Q8AvDdu1+xKcGWGNnhcDsNM/n1avf1e62OG1GaqJg== -"@next/swc-win32-arm64-msvc@13.1.1": - version "13.1.1" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.1.tgz#f10da3dfc9b3c2bbd202f5d449a9b807af062292" - integrity sha512-pzUHOGrbgfGgPlOMx9xk3QdPJoRPU+om84hqVoe6u+E0RdwOG0Ho/2UxCgDqmvpUrMab1Deltlt6RqcXFpnigQ== +"@next/swc-win32-arm64-msvc@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.7-canary.7.tgz#da869c79b6fee09b8c7ab74bea708ce63d87691d" + integrity sha512-WtQTpLUHHDbL2U6dFdIlHErKHkL78jDIfoqCxjaxRvBBKvJYM1fZalr35Zes8HFpk4UAI5agMp12j2AjDdKVRQ== "@next/swc-win32-ia32-msvc@12.1.4": version "12.1.4" @@ -2490,10 +2490,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.0.tgz#5914eb86f9ea92a00d76cb094dd9734b3bf2012c" integrity sha512-zNaxaO+Kl/xNz02E9QlcVz0pT4MjkXGDLb25qxtAzyJL15aU0+VjjbIZAYWctG59dvggNIUNDWgoBeVTKB9xLg== -"@next/swc-win32-ia32-msvc@13.1.1": - version "13.1.1" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.1.tgz#4c0102b9b18ece15c818056d07e3917ee9dade78" - integrity sha512-WeX8kVS46aobM9a7Xr/kEPcrTyiwJqQv/tbw6nhJ4fH9xNZ+cEcyPoQkwPo570dCOLz3Zo9S2q0E6lJ/EAUOBg== +"@next/swc-win32-ia32-msvc@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.7-canary.7.tgz#db19042755838506e013a05ae5a89b4d39127797" + integrity sha512-fPubKDnOYgRpUf1PdgejSw7UeHJGC4Hzx4evYDzay2balVRrC5nO9s6OBDv82/JfNPVqB9rAjBC9d0LPUwanMg== "@next/swc-win32-x64-msvc@12.1.4": version "12.1.4" @@ -2505,10 +2505,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.0.tgz#c54a5a739dee04b20338d305226a2acdf701f67f" integrity sha512-FFOGGWwTCRMu9W7MF496Urefxtuo2lttxF1vwS+1rIRsKvuLrWhVaVTj3T8sf2EBL6gtJbmh4TYlizS+obnGKA== -"@next/swc-win32-x64-msvc@13.1.1": - version "13.1.1" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.1.tgz#c209a37da13be27b722f9c40c40ab4b094866244" - integrity sha512-mVF0/3/5QAc5EGVnb8ll31nNvf3BWpPY4pBb84tk+BfQglWLqc5AC9q1Ht/YMWiEgs8ALNKEQ3GQnbY0bJF2Gg== +"@next/swc-win32-x64-msvc@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.7-canary.7.tgz#32e94f2cbb0d944e227ae9d6d04352ecf895b086" + integrity sha512-Cc2G7Di4wKjIb74vrCmxlmn5F6FAMmVX/Gx/Tl7NuUSL+YYXrMrw55FCe6WyBawbF+7CeoPTZKhp3YmPWp1ASQ== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -9199,30 +9199,30 @@ next@^13.0.0: "@next/swc-win32-ia32-msvc" "13.0.0" "@next/swc-win32-x64-msvc" "13.0.0" -next@^13.1.1: - version "13.1.1" - resolved "https://registry.yarnpkg.com/next/-/next-13.1.1.tgz#42b825f650410649aff1017d203a088d77c80b5b" - integrity sha512-R5eBAaIa3X7LJeYvv1bMdGnAVF4fVToEjim7MkflceFPuANY3YyvFxXee/A+acrSYwYPvOvf7f6v/BM/48ea5w== +next@canary: + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/next/-/next-13.1.7-canary.7.tgz#1526687ed0d765c49930ea378fb63a1e7ee45747" + integrity sha512-ekVXWHSPLsE799i97f0qYpElO+CsG5V9/48KmxlL/g5ASuLB/BNmR2Lj+zqO8s7q7qjV+JteMwFl2dXH4srgNg== dependencies: - "@next/env" "13.1.1" + "@next/env" "13.1.7-canary.7" "@swc/helpers" "0.4.14" caniuse-lite "^1.0.30001406" postcss "8.4.14" styled-jsx "5.1.1" optionalDependencies: - "@next/swc-android-arm-eabi" "13.1.1" - "@next/swc-android-arm64" "13.1.1" - "@next/swc-darwin-arm64" "13.1.1" - "@next/swc-darwin-x64" "13.1.1" - "@next/swc-freebsd-x64" "13.1.1" - "@next/swc-linux-arm-gnueabihf" "13.1.1" - "@next/swc-linux-arm64-gnu" "13.1.1" - "@next/swc-linux-arm64-musl" "13.1.1" - "@next/swc-linux-x64-gnu" "13.1.1" - "@next/swc-linux-x64-musl" "13.1.1" - "@next/swc-win32-arm64-msvc" "13.1.1" - "@next/swc-win32-ia32-msvc" "13.1.1" - "@next/swc-win32-x64-msvc" "13.1.1" + "@next/swc-android-arm-eabi" "13.1.7-canary.7" + "@next/swc-android-arm64" "13.1.7-canary.7" + "@next/swc-darwin-arm64" "13.1.7-canary.7" + "@next/swc-darwin-x64" "13.1.7-canary.7" + "@next/swc-freebsd-x64" "13.1.7-canary.7" + "@next/swc-linux-arm-gnueabihf" "13.1.7-canary.7" + "@next/swc-linux-arm64-gnu" "13.1.7-canary.7" + "@next/swc-linux-arm64-musl" "13.1.7-canary.7" + "@next/swc-linux-x64-gnu" "13.1.7-canary.7" + "@next/swc-linux-x64-musl" "13.1.7-canary.7" + "@next/swc-win32-arm64-msvc" "13.1.7-canary.7" + "@next/swc-win32-ia32-msvc" "13.1.7-canary.7" + "@next/swc-win32-x64-msvc" "13.1.7-canary.7" nextra-theme-docs@2.0.0-alpha.44: version "2.0.0-alpha.44" From 68ce7db79383900de2d46bb69dd5c175a6d0c7d1 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 13 Feb 2023 10:47:17 +0100 Subject: [PATCH 116/312] feat: Unprefixed routing for default locale & domain-based locale matching (#186) * Add awaitable functions * Fix lint * Unprefixed routing * Support unprefixed routing in `LocalizedLink`, `useLocalizedRouter` and `useUnlocalizedPathname` * Support domain-based routing * Assert correct links in test * Remove outdated file * Fix import --- .../src/app/[locale]/client/page.tsx | 8 +- .../02-MessagesOnClientCounter/Counter.tsx | 3 +- .../src/middleware.tsx | 12 +- .../tests/main.spec.ts | 132 ++++++++++++++++-- .../src/middleware.tsx | 2 +- packages/next-intl/package.json | 4 +- .../next-intl/src/client/getCookieLocale.tsx | 19 +++ .../src/client/hasPathnamePrefixed.tsx | 7 + packages/next-intl/src/client/index.tsx | 18 ++- .../next-intl/src/client/localizeHref.tsx | 46 ++++++ .../src/client/useLocalizedRouter.tsx | 27 +--- .../src/client/useUnlocalizedPathname.tsx | 41 +++++- packages/next-intl/src/index.tsx | 8 +- packages/next-intl/src/middleware.tsx | 80 ++++++++--- .../src/react-client/LocalizedLink.tsx | 5 - .../src/react-server/LocalizedLink.tsx | 5 - packages/next-intl/src/react-server/index.tsx | 6 +- .../src/server/NextIntlMiddlewareConfig.tsx | 6 + .../next-intl/src/server/resolveLocale.tsx | 61 ++++++-- .../next-intl/src/shared/LocalizedLink.tsx | 26 ++++ .../NextIntlClientProvider.tsx | 2 + .../shared/createLocalizedLinkComponent.tsx | 31 ---- .../next-intl/src/shared/localizeHref.tsx | 9 -- .../test/client/hasPathnamePrefixed.test.tsx | 7 + .../client/useUnlocalizedPathname.test.tsx | 4 - .../pages/docs/next-13/server-components.mdx | 19 ++- yarn.lock | 19 ++- 27 files changed, 460 insertions(+), 147 deletions(-) create mode 100644 packages/next-intl/src/client/getCookieLocale.tsx create mode 100644 packages/next-intl/src/client/hasPathnamePrefixed.tsx create mode 100644 packages/next-intl/src/client/localizeHref.tsx delete mode 100644 packages/next-intl/src/react-client/LocalizedLink.tsx delete mode 100644 packages/next-intl/src/react-server/LocalizedLink.tsx create mode 100644 packages/next-intl/src/shared/LocalizedLink.tsx rename packages/next-intl/src/{client => shared}/NextIntlClientProvider.tsx (97%) delete mode 100644 packages/next-intl/src/shared/createLocalizedLinkComponent.tsx delete mode 100644 packages/next-intl/src/shared/localizeHref.tsx create mode 100644 packages/next-intl/test/client/hasPathnamePrefixed.test.tsx diff --git a/packages/example-next-13-advanced/src/app/[locale]/client/page.tsx b/packages/example-next-13-advanced/src/app/[locale]/client/page.tsx index f679db197..098e4ec0e 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/client/page.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/client/page.tsx @@ -1,5 +1,9 @@ -import {useTranslations, useLocale, useNow} from 'next-intl'; -import {NextIntlClientProvider} from 'next-intl/client'; +import { + useTranslations, + useLocale, + useNow, + NextIntlClientProvider +} from 'next-intl'; import PageLayout from '../../../components/PageLayout'; import ClientContent from './ClientContent'; import DelayedServerContent from './DelayedServerContent'; diff --git a/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx b/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx index 327199849..4ac95272a 100644 --- a/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx +++ b/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx @@ -1,6 +1,5 @@ import pick from 'lodash/pick'; -import {useLocale} from 'next-intl'; -import {NextIntlClientProvider} from 'next-intl/client'; +import {useLocale, NextIntlClientProvider} from 'next-intl'; import ClientCounter from './ClientCounter'; export default async function Counter() { diff --git a/packages/example-next-13-advanced/src/middleware.tsx b/packages/example-next-13-advanced/src/middleware.tsx index 409fa3c26..9a0ec72f0 100644 --- a/packages/example-next-13-advanced/src/middleware.tsx +++ b/packages/example-next-13-advanced/src/middleware.tsx @@ -2,7 +2,17 @@ import createIntlMiddleware from 'next-intl/middleware'; export default createIntlMiddleware({ locales: ['en', 'de'], - defaultLocale: 'en' + defaultLocale: 'en', + domains: [ + { + domain: 'example.de', + defaultLocale: 'de' + }, + { + domain: 'de.example.com', + defaultLocale: 'de' + } + ] }); export const config = { diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index fc54cec7d..822549cd5 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -3,13 +3,72 @@ import {test as it, expect} from '@playwright/test'; it('handles unknown locales', async ({page}) => { const response = await page.goto('/unknown'); expect(response?.status()).toBe(404); - await expect(page).toHaveURL(/\/unknown/); + await expect(page).toHaveURL('/unknown'); page.getByRole('heading', {name: 'This page was not found (404)'}); }); -it('redirects to a matched locale', async ({page}) => { +it('redirects to a matched locale at the root for non-default locales', async ({ + browser +}) => { + const context = await browser.newContext({locale: 'de'}); + const page = await context.newPage(); + await page.goto('/'); - await expect(page).toHaveURL(/\/en/); + await expect(page).toHaveURL('/de'); + page.getByRole('heading', {name: 'Start'}); +}); + +it('can redirect a more specific locale to a more generic one', async ({ + browser +}) => { + const context = await browser.newContext({locale: 'de-DE'}); + const page = await context.newPage(); + + await page.goto('/'); + await expect(page).toHaveURL('/de'); + page.getByRole('heading', {name: 'Start'}); +}); + +it('does not redirect on the root if the default locale is matched', async ({ + page +}) => { + await page.goto('/'); + await expect(page).toHaveURL('/'); + page.getByRole('heading', {name: 'Home'}); +}); + +it('supports unprefixed routing for the default locale', async ({page}) => { + await page.goto('/nested'); + await expect(page).toHaveURL('/nested'); + page.getByRole('heading', {name: 'Nested'}); +}); + +it('redirects unprefixed paths for non-default locales', async ({browser}) => { + const context = await browser.newContext({locale: 'de'}); + const page = await context.newPage(); + + await page.goto('/nested'); + await expect(page).toHaveURL('/de/nested'); + page.getByRole('heading', {name: 'Verschachtelt'}); +}); + +it('supports domain-based locale detection', async ({page}) => { + page.setExtraHTTPHeaders({ + 'x-forwarded-host': 'example.de' + }); + await page.goto('/nested'); + page.getByRole('heading', {name: 'Verschachtelt'}); + + page.setExtraHTTPHeaders({ + 'x-forwarded-host': 'de.example.com' + }); + await page.goto('/nested'); + page.getByRole('heading', {name: 'Verschachtelt'}); + + await expect(page.getByRole('link', {name: 'Client-Seite'})).toHaveAttribute( + 'href', + '/client' + ); }); it('remembers the last locale', async ({page}) => { @@ -27,7 +86,7 @@ it('remembers the last locale', async ({page}) => { }).toPass(); await page.goto('/'); - await expect(page).toHaveURL(/\/de/); + await expect(page).toHaveURL('/de'); }); it('sets the `lang` attribute on `html`', async ({page}) => { @@ -139,6 +198,47 @@ it('can use `LocalizedLink` on the client', async ({page}) => { ); }); +it('prefixes as necessary with `LocalizedLink`', async ({page}) => { + await page.goto('/'); + await expect(page.getByRole('link', {name: /^Home$/})).toHaveAttribute( + 'href', + '/' + ); + await expect(page.getByRole('link', {name: 'Client page'})).toHaveAttribute( + 'href', + '/client' + ); + await expect( + page.getByRole('link', {name: 'Switch to German'}) + ).toHaveAttribute('href', '/de'); + + await page.goto('/en'); + await expect(page.getByRole('link', {name: /^Home$/})).toHaveAttribute( + 'href', + '/en' + ); + await expect(page.getByRole('link', {name: 'Client page'})).toHaveAttribute( + 'href', + '/en/client' + ); + await expect( + page.getByRole('link', {name: 'Switch to German'}) + ).toHaveAttribute('href', '/de'); + + await page.goto('/de'); + await expect(page.getByRole('link', {name: /^Start$/})).toHaveAttribute( + 'href', + '/de' + ); + await expect(page.getByRole('link', {name: 'Client-Seite'})).toHaveAttribute( + 'href', + '/de/client' + ); + await expect( + page.getByRole('link', {name: 'Zu Englisch wechseln'}) + ).toHaveAttribute('href', '/en'); +}); + it('supports a consistent `now` value across the server and client', async ({ page }) => { @@ -155,8 +255,14 @@ it('supports a consistent `now` value across the server and client', async ({ }); it('can use `useUnlocalizedPathname`', async ({page}) => { + await page.goto('/client'); + await expect(page.getByTestId('UnlocalizedPathname')).toHaveText('/client'); + await page.goto('/en/client'); await expect(page.getByTestId('UnlocalizedPathname')).toHaveText('/client'); + + await page.goto('/de/client'); + await expect(page.getByTestId('UnlocalizedPathname')).toHaveText('/client'); }); it('can navigate between sibling pages that share a parent layout', async ({ @@ -164,17 +270,23 @@ it('can navigate between sibling pages that share a parent layout', async ({ }) => { await page.goto('/en/nested'); await page.getByRole('link', {name: 'Client page'}).click(); - await expect(page).toHaveURL(/\/en\/client/); + await expect(page).toHaveURL('/en/client'); await page.getByRole('link', {name: 'Nested page'}).click(); - await expect(page).toHaveURL(/\/en\/nested/); + await expect(page).toHaveURL('/en/nested'); }); -it('can use the localized router on the client side without a provider', async ({ - page -}) => { +it('prefixes routes as necessary with the router', async ({page}) => { + await page.goto('/'); + page.getByTestId('ClientRouterWithoutProvider-link').click(); + await expect(page).toHaveURL('/nested'); + await page.goto('/en'); page.getByTestId('ClientRouterWithoutProvider-link').click(); - await expect(page).toHaveURL(/\/en\/nested/); + await expect(page).toHaveURL('/en/nested'); + + await page.goto('/de'); + page.getByTestId('ClientRouterWithoutProvider-link').click(); + await expect(page).toHaveURL('/de/nested'); }); it('can set `now` and `timeZone` at runtime', async ({page}) => { diff --git a/packages/example-next-13-with-pages/src/middleware.tsx b/packages/example-next-13-with-pages/src/middleware.tsx index 25ff46236..409fa3c26 100644 --- a/packages/example-next-13-with-pages/src/middleware.tsx +++ b/packages/example-next-13-with-pages/src/middleware.tsx @@ -1,4 +1,4 @@ -import {createIntlMiddleware} from 'next-intl/server'; +import createIntlMiddleware from 'next-intl/middleware'; export default createIntlMiddleware({ locales: ['en', 'de'], diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 69006d844..d72905f03 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -65,7 +65,8 @@ "testEnvironment": "jsdom" }, "dependencies": { - "accept-language-parser": "^1.5.0", + "@formatjs/intl-localematcher": "0.2.32", + "negotiator": "0.6.3", "server-only": "0.0.1", "use-intl": "^2.10.2" }, @@ -75,6 +76,7 @@ }, "devDependencies": { "@testing-library/react": "^13.0.0", + "@types/negotiator": "0.6.1", "@types/react": "^18.0.23", "dts-cli": "1.4.0", "eslint": "8.12.0", diff --git a/packages/next-intl/src/client/getCookieLocale.tsx b/packages/next-intl/src/client/getCookieLocale.tsx new file mode 100644 index 000000000..5f207d636 --- /dev/null +++ b/packages/next-intl/src/client/getCookieLocale.tsx @@ -0,0 +1,19 @@ +import {COOKIE_LOCALE_NAME} from '../shared/constants'; + +function getCookieValueByName(name: string) { + // https://stackoverflow.com/a/15724300/343045 + const value = `; ${document.cookie}`; + const parts = value.split(`; ${name}=`); + if (parts.length === 2) { + const part = parts.pop()?.split(';').shift(); + if (part) return part; + } + + throw new Error( + `Unable to find next-intl cookie, have you configured the middleware?` + ); +} + +export default function getCookieLocale() { + return getCookieValueByName(COOKIE_LOCALE_NAME); +} diff --git a/packages/next-intl/src/client/hasPathnamePrefixed.tsx b/packages/next-intl/src/client/hasPathnamePrefixed.tsx new file mode 100644 index 000000000..1649a281a --- /dev/null +++ b/packages/next-intl/src/client/hasPathnamePrefixed.tsx @@ -0,0 +1,7 @@ +export default function hasPathnamePrefixed(locale: string, pathname: string) { + const prefix = `/${locale}`; + return ( + pathname === prefix || + (pathname.startsWith(`${prefix}/`) && pathname.length > prefix.length) + ); +} diff --git a/packages/next-intl/src/client/index.tsx b/packages/next-intl/src/client/index.tsx index 42a7019a0..3ef6bc05d 100644 --- a/packages/next-intl/src/client/index.tsx +++ b/packages/next-intl/src/client/index.tsx @@ -2,6 +2,22 @@ * Client-only APIs. */ -export {default as NextIntlClientProvider} from './NextIntlClientProvider'; +import React, {ComponentProps} from 'react'; +import NextIntlClientProvider_ from '../shared/NextIntlClientProvider'; + export {default as useLocalizedRouter} from './useLocalizedRouter'; export {default as useUnlocalizedPathname} from './useUnlocalizedPathname'; + +let hasWarned = false; +export function NextIntlClientProvider( + props: ComponentProps +) { + if (!hasWarned) { + console.warn( + 'DEPRECATION WARNING: `NextIntlClientProvider` should be imported from `next-intl`, not `next-intl/client` - please update your import statement.' + ); + hasWarned = true; + } + + return ; +} diff --git a/packages/next-intl/src/client/localizeHref.tsx b/packages/next-intl/src/client/localizeHref.tsx new file mode 100644 index 000000000..56c8c4885 --- /dev/null +++ b/packages/next-intl/src/client/localizeHref.tsx @@ -0,0 +1,46 @@ +import {UrlObject} from 'url'; +import getCookieLocale from './getCookieLocale'; +import hasPathnamePrefixed from './hasPathnamePrefixed'; + +function localizePathname(locale: string, pathname: string) { + let localizedHref = '/' + locale; + + if (pathname !== '/') { + localizedHref += pathname; + } + + return localizedHref; +} + +export default function localizeHref(href: string, locale?: string): string; +export default function localizeHref( + href: UrlObject | string, + locale?: string +): UrlObject | string; +export default function localizeHref( + href: UrlObject | string, + locale?: string +) { + const cookieLocale = getCookieLocale(); + if (!locale) locale = cookieLocale; + + const {pathname} = window.location; + const isSwitchingLocale = locale !== cookieLocale; + const isPathnamePrefixed = hasPathnamePrefixed(locale, pathname); + + if (isPathnamePrefixed || isSwitchingLocale) { + let prefixedHref; + if (typeof href === 'string') { + prefixedHref = localizePathname(locale, href); + } else { + prefixedHref = {...href}; + if (href.pathname) { + prefixedHref.pathname = localizePathname(locale, href.pathname); + } + } + + return prefixedHref; + } else { + return href; + } +} diff --git a/packages/next-intl/src/client/useLocalizedRouter.tsx b/packages/next-intl/src/client/useLocalizedRouter.tsx index 3fa093008..72d93db5e 100644 --- a/packages/next-intl/src/client/useLocalizedRouter.tsx +++ b/packages/next-intl/src/client/useLocalizedRouter.tsx @@ -1,25 +1,6 @@ import {useRouter} from 'next/navigation'; import {useMemo} from 'react'; -import {COOKIE_LOCALE_NAME} from '../shared/constants'; -import localizeHref from '../shared/localizeHref'; - -function getCookieValueByName(name: string) { - // https://stackoverflow.com/a/15724300/343045 - const value = `; ${document.cookie}`; - const parts = value.split(`; ${name}=`); - if (parts.length === 2) { - const part = parts.pop()?.split(';').shift(); - if (part) return part; - } - - throw new Error( - `Unable to find next-intl cookie, have you configured the middleware?` - ); -} - -function getCookieLocale() { - return getCookieValueByName(COOKIE_LOCALE_NAME); -} +import localizeHref from './localizeHref'; export default function useLocalizedRouter() { const router = useRouter(); @@ -28,13 +9,13 @@ export default function useLocalizedRouter() { () => ({ ...router, push(href: string) { - return router.push(localizeHref(getCookieLocale(), href)); + return router.push(localizeHref(href)); }, replace(href: string) { - return router.replace(localizeHref(getCookieLocale(), href)); + return router.replace(localizeHref(href)); }, prefetch(href: string) { - return router.prefetch(localizeHref(getCookieLocale(), href)); + return router.prefetch(localizeHref(href)); } }), [router] diff --git a/packages/next-intl/src/client/useUnlocalizedPathname.tsx b/packages/next-intl/src/client/useUnlocalizedPathname.tsx index eb2188b3f..ac577c7d5 100644 --- a/packages/next-intl/src/client/useUnlocalizedPathname.tsx +++ b/packages/next-intl/src/client/useUnlocalizedPathname.tsx @@ -1,11 +1,42 @@ import {usePathname} from 'next/navigation'; +import {useEffect, useState} from 'react'; +import getCookieLocale from './getCookieLocale'; +import hasPathnamePrefixed from './hasPathnamePrefixed'; -export function unlocalizePathname(pathname: string | null) { - return pathname == null - ? pathname - : pathname.replace(/^\/[\w_-]+/, '') || '/'; +export function unlocalizePathname(pathname: string) { + return pathname.replace(/^\/[\w_-]+/, '') || '/'; } +/** + * Returns the pathname without a potential locale prefix. + * + * Note that on the server side `null` is returned, only on + * the client side the correct pathname will be returned. + * + * This can be helpful e.g. to implement navigation links, + * where the active link is highlighted. + */ export default function useUnlocalizedPathname() { - return unlocalizePathname(usePathname()); + const pathname = usePathname(); + const [unlocalizedPathname, setUnlocalizedPathname] = useState( + null + ); + + useEffect(() => { + if (pathname == null) { + setUnlocalizedPathname(pathname); + return; + } + + const cookieLocale = getCookieLocale(); + const isPathnamePrefixed = hasPathnamePrefixed(cookieLocale, pathname); + + if (isPathnamePrefixed) { + setUnlocalizedPathname(unlocalizePathname(pathname)); + } else { + setUnlocalizedPathname(pathname); + } + }, [pathname]); + + return unlocalizedPathname; } diff --git a/packages/next-intl/src/index.tsx b/packages/next-intl/src/index.tsx index aca768a9d..817fc5989 100644 --- a/packages/next-intl/src/index.tsx +++ b/packages/next-intl/src/index.tsx @@ -6,8 +6,8 @@ export * from 'use-intl'; export {default as useLocalizedRouter} from './react-client/useLocalizedRouter'; -export {default as LocalizedLink} from './react-client/LocalizedLink'; -export * from './server/NextIntlConfig'; +export {default as LocalizedLink} from './shared/LocalizedLink'; +export {default as NextIntlClientProvider} from './shared/NextIntlClientProvider'; -// Legacy export for compatibility -export {NextIntlClientProvider as NextIntlProvider} from './client'; +// DEPRECATED: Legacy export for compatibility +export {default as NextIntlProvider} from './shared/NextIntlClientProvider'; diff --git a/packages/next-intl/src/middleware.tsx b/packages/next-intl/src/middleware.tsx index 78c18ce57..50219b6dd 100644 --- a/packages/next-intl/src/middleware.tsx +++ b/packages/next-intl/src/middleware.tsx @@ -3,43 +3,33 @@ import NextIntlMiddlewareConfig from './server/NextIntlMiddlewareConfig'; import resolveLocale from './server/resolveLocale'; import {COOKIE_LOCALE_NAME, HEADER_LOCALE_NAME} from './shared/constants'; -// If there's an exact match for this path, we'll add the locale to the URL const ROOT_URL = '/'; -export default function createIntlMiddleware({ - defaultLocale, - locales -}: NextIntlMiddlewareConfig) { - const i18n = { - locales, - defaultLocale - }; - +export default function createIntlMiddleware(config: NextIntlMiddlewareConfig) { return function middleware(request: NextRequest) { // Ideally we could use the `headers()` and `cookies()` API here // as well, but they are currently not available in middleware. - const locale = resolveLocale( - i18n, + const {domain, locale} = resolveLocale( + config, request.headers, request.cookies, request.nextUrl.pathname ); const isRoot = request.nextUrl.pathname === ROOT_URL; - const isChangingLocale = + const hasOutdatedCookie = request.cookies.get(COOKIE_LOCALE_NAME)?.value !== locale; + const hasMatchedDefaultLocale = domain + ? domain.defaultLocale === locale + : locale === config.defaultLocale; - let response; - if (isRoot) { - response = NextResponse.redirect(new URL(ROOT_URL + locale, request.url)); - } else { + function getResponseInit() { let responseInit; - // Only apply a header if absolutely necessary - // as this causes full page reloads - if (isChangingLocale) { + if (hasOutdatedCookie) { + // Only apply a header if absolutely necessary + // as this causes full page reloads request.headers.set(HEADER_LOCALE_NAME, locale); - responseInit = { request: { headers: request.headers @@ -47,10 +37,54 @@ export default function createIntlMiddleware({ }; } - response = NextResponse.next(responseInit); + return responseInit; + } + + function rewrite(url: string) { + return NextResponse.rewrite(new URL(url, request.url), getResponseInit()); + } + + function next() { + return NextResponse.next(getResponseInit()); + } + + function redirect(url: string) { + return NextResponse.redirect(new URL(url, request.url)); + } + + let response; + if (isRoot) { + if (hasMatchedDefaultLocale) { + response = rewrite(`/${locale}`); + } else { + response = redirect(`/${locale}`); + } + } else { + const pathLocale = config.locales.find((cur) => + request.nextUrl.pathname.startsWith(`/${cur}`) + ); + const hasLocalePrefix = pathLocale != null; + + if (hasLocalePrefix) { + if (pathLocale === locale) { + response = next(); + } else { + const basePath = request.nextUrl.pathname.replace( + `/${pathLocale}`, + '' + ); + response = redirect(`/${locale}${basePath}`); + } + } else { + if (hasMatchedDefaultLocale) { + response = rewrite(`/${locale}${request.nextUrl.pathname}`); + } else { + response = redirect(`/${locale}${request.nextUrl.pathname}`); + } + } } - if (isChangingLocale) { + if (hasOutdatedCookie) { response.cookies.set(COOKIE_LOCALE_NAME, locale); } diff --git a/packages/next-intl/src/react-client/LocalizedLink.tsx b/packages/next-intl/src/react-client/LocalizedLink.tsx deleted file mode 100644 index 8562b2e1e..000000000 --- a/packages/next-intl/src/react-client/LocalizedLink.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import {useLocale} from 'use-intl'; -import createLocalizedLinkComponent from '../shared/createLocalizedLinkComponent'; - -const LocalizedLink = createLocalizedLinkComponent(useLocale); -export default LocalizedLink; diff --git a/packages/next-intl/src/react-server/LocalizedLink.tsx b/packages/next-intl/src/react-server/LocalizedLink.tsx deleted file mode 100644 index fd3ffb3cb..000000000 --- a/packages/next-intl/src/react-server/LocalizedLink.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import createLocalizedLinkComponent from '../shared/createLocalizedLinkComponent'; -import useLocale from './useLocale'; - -const LocalizedLink = createLocalizedLinkComponent(useLocale); -export default LocalizedLink; diff --git a/packages/next-intl/src/react-server/index.tsx b/packages/next-intl/src/react-server/index.tsx index e361c7821..a97620a0a 100644 --- a/packages/next-intl/src/react-server/index.tsx +++ b/packages/next-intl/src/react-server/index.tsx @@ -9,7 +9,11 @@ export {default as useTranslations} from './useTranslations'; export {default as useIntl} from './useIntl'; export {default as useNow} from './useNow'; export {default as useTimeZone} from './useTimeZone'; -export {default as LocalizedLink} from './LocalizedLink'; + +// We don't offer a server-only variant of this component currently +export {default as LocalizedLink} from '../shared/LocalizedLink'; + +export {default as NextIntlClientProvider} from '../shared/NextIntlClientProvider'; // Everything from `core` export * from 'use-intl/dist/src/core'; diff --git a/packages/next-intl/src/server/NextIntlMiddlewareConfig.tsx b/packages/next-intl/src/server/NextIntlMiddlewareConfig.tsx index e816d3da7..5e5f3239a 100644 --- a/packages/next-intl/src/server/NextIntlMiddlewareConfig.tsx +++ b/packages/next-intl/src/server/NextIntlMiddlewareConfig.tsx @@ -1,6 +1,12 @@ type NextIntlMiddlewareConfig = { + /** A list of all locales that are supported. */ locales: Array; + + /* If this locale is matched, pathnames work without a prefix (e.g. `/about`) */ defaultLocale: string; + + /** Configure a list of domains where the `defaultLocale` is changed (e.g. `es.example.com/about`, `example.fr/about`). Note that the `x-forwarded-host` or alternatively the `host` header will be used to determine the requested domain. */ + domains?: Array<{domain: string; defaultLocale: string}>; }; export default NextIntlMiddlewareConfig; diff --git a/packages/next-intl/src/server/resolveLocale.tsx b/packages/next-intl/src/server/resolveLocale.tsx index 2a484ae74..2041f7f8b 100644 --- a/packages/next-intl/src/server/resolveLocale.tsx +++ b/packages/next-intl/src/server/resolveLocale.tsx @@ -1,15 +1,44 @@ -import acceptLanguageParser from 'accept-language-parser'; +import {match} from '@formatjs/intl-localematcher'; +import Negotiator from 'negotiator'; import {RequestCookies} from 'next/dist/server/web/spec-extension/cookies'; import {COOKIE_LOCALE_NAME} from '../shared/constants'; import NextIntlMiddlewareConfig from './NextIntlMiddlewareConfig'; +function findLocaleDomain( + requestHeaders: Headers, + i18n: NextIntlMiddlewareConfig +) { + let host = + requestHeaders.get('x-forwarded-host') ?? + requestHeaders.get('host') ?? + undefined; + + // Remove port + host = host?.replace(/:\d+$/, ''); + + // Consider optional www subdomain + const domains = i18n.domains?.flatMap((cur) => { + if (cur.domain.startsWith('www.')) { + return cur; + } + return [cur, {...cur, domain: `www.${cur.domain}`}]; + }); + + if (host && domains) { + const domain = domains.find((cur) => cur.domain === host); + return domain; + } + + return undefined; +} + export default function resolveLocale( i18n: NextIntlMiddlewareConfig, requestHeaders: Headers, requestCookies: RequestCookies, pathname: string ) { - let locale; + let locale, domain; // Prio 1: Use route prefix if (pathname) { @@ -22,26 +51,36 @@ export default function resolveLocale( } } - // Prio 2: Use existing cookie + // Prio 2: Use a domain + if (!locale && i18n.domains) { + domain = findLocaleDomain(requestHeaders, i18n); + + if (domain) { + locale = domain.defaultLocale; + } + } + + // Prio 3: Use existing cookie if (!locale && requestCookies) { if (requestCookies.has(COOKIE_LOCALE_NAME)) { locale = requestCookies.get(COOKIE_LOCALE_NAME)?.value; } } - // Prio 3: Use accept-language header + // Prio 4: Use the `accept-language` header if (!locale && requestHeaders) { - locale = - acceptLanguageParser.pick( - i18n.locales, - requestHeaders.get('accept-language') || i18n.defaultLocale - ) || i18n.defaultLocale; + const languages = new Negotiator({ + headers: { + 'accept-language': requestHeaders.get('accept-language') || undefined + } + }).languages(); + locale = match(languages, i18n.locales, i18n.defaultLocale); } - // Prio 4: Use default locale + // Prio 5: Use default locale if (!locale) { locale = i18n.defaultLocale; } - return locale; + return {locale, domain}; } diff --git a/packages/next-intl/src/shared/LocalizedLink.tsx b/packages/next-intl/src/shared/LocalizedLink.tsx new file mode 100644 index 000000000..d92427732 --- /dev/null +++ b/packages/next-intl/src/shared/LocalizedLink.tsx @@ -0,0 +1,26 @@ +'use client'; + +import Link from 'next/link'; +import {usePathname} from 'next/navigation'; +import React, {ComponentProps, forwardRef, useEffect, useState} from 'react'; +import localizeHref from '../client/localizeHref'; + +type Props = Omit, 'locale'> & { + locale?: string; +}; + +/** + * Wraps `next/link` and prefixes the `href` with the current locale. + */ +function LocalizedLink({href, locale, ...rest}: Props, ref: Props['ref']) { + const [localizedHref, setLocalizedHref] = useState(href); + const pathname = usePathname(); + + useEffect(() => { + setLocalizedHref(localizeHref(href, locale)); + }, [href, locale, pathname]); + + return ; +} + +export default forwardRef(LocalizedLink); diff --git a/packages/next-intl/src/client/NextIntlClientProvider.tsx b/packages/next-intl/src/shared/NextIntlClientProvider.tsx similarity index 97% rename from packages/next-intl/src/client/NextIntlClientProvider.tsx rename to packages/next-intl/src/shared/NextIntlClientProvider.tsx index c566bc9ee..30afbbef1 100644 --- a/packages/next-intl/src/client/NextIntlClientProvider.tsx +++ b/packages/next-intl/src/shared/NextIntlClientProvider.tsx @@ -10,6 +10,8 @@ type Props = Omit, 'locale' | 'now'> & { now?: Date | string; }; +// Move this from /client to default + export default function NextIntlClientProvider({ children, locale, diff --git a/packages/next-intl/src/shared/createLocalizedLinkComponent.tsx b/packages/next-intl/src/shared/createLocalizedLinkComponent.tsx deleted file mode 100644 index c2a732382..000000000 --- a/packages/next-intl/src/shared/createLocalizedLinkComponent.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import Link from 'next/link'; -import React, {ComponentProps, forwardRef} from 'react'; -import localizeHref from './localizeHref'; - -type Props = Omit, 'locale'> & { - locale?: string; -}; - -export default function createLocalizedLinkComponent(useLocale: () => string) { - /** - * Wraps `next/link` and prefixes the `href` with the current locale. - */ - function LocalizedLink({href, locale, ...rest}: Props, ref: Props['ref']) { - const curLocale = useLocale(); - if (!locale) locale = curLocale; - - let localizedHref; - if (typeof href === 'string') { - localizedHref = localizeHref(locale, href); - } else { - localizedHref = {...href}; - if (href.pathname) { - localizedHref.pathname = localizeHref(locale, href.pathname); - } - } - - return ; - } - - return forwardRef(LocalizedLink); -} diff --git a/packages/next-intl/src/shared/localizeHref.tsx b/packages/next-intl/src/shared/localizeHref.tsx deleted file mode 100644 index 81ed6a72e..000000000 --- a/packages/next-intl/src/shared/localizeHref.tsx +++ /dev/null @@ -1,9 +0,0 @@ -export default function localizeHref(locale: string, href: string) { - let localizedHref = '/' + locale; - - if (href !== '/') { - localizedHref += href; - } - - return localizedHref; -} diff --git a/packages/next-intl/test/client/hasPathnamePrefixed.test.tsx b/packages/next-intl/test/client/hasPathnamePrefixed.test.tsx new file mode 100644 index 000000000..a9e0c1e55 --- /dev/null +++ b/packages/next-intl/test/client/hasPathnamePrefixed.test.tsx @@ -0,0 +1,7 @@ +import hasPathnamePrefixed from '../../src/client/hasPathnamePrefixed'; + +it('works', () => { + expect(hasPathnamePrefixed('en', '/en')).toEqual(true); + expect(hasPathnamePrefixed('en', '/en/client')).toEqual(true); + expect(hasPathnamePrefixed('en', '/client')).toEqual(false); +}); diff --git a/packages/next-intl/test/client/useUnlocalizedPathname.test.tsx b/packages/next-intl/test/client/useUnlocalizedPathname.test.tsx index 27cceb91d..8c66f02e3 100644 --- a/packages/next-intl/test/client/useUnlocalizedPathname.test.tsx +++ b/packages/next-intl/test/client/useUnlocalizedPathname.test.tsx @@ -4,10 +4,6 @@ it('works for the root', () => { expect(unlocalizePathname('/en')).toEqual('/'); }); -it("works if there's no pathname", () => { - expect(unlocalizePathname(null)).toEqual(null); -}); - it('works for nested pages', () => { expect(unlocalizePathname('/en/nested')).toEqual('/nested'); }); diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 199e2bda5..4e65fa489 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -85,15 +85,20 @@ module.exports = withNextIntl({ ```tsx import createIntlMiddleware from 'next-intl/middleware'; -// The middleware intercepts requests to `/` and will redirect -// to one of the configured locales instead (e.g. `/en`). -// In the background a cookie is set that will remember the -// locale of the last page that the user has visited. -// The middleware furthermore passes the resolved locale -// to components in your app. export default createIntlMiddleware({ + // A list of all locales that are supported locales: ['en', 'de'], - defaultLocale: 'en' + + // If this locale is matched, pathnames work without a prefix (e.g. `/about`) + defaultLocale: 'en', + + // Optionally configure a list of domains where the `defaultLocale` is changed + domains: [ + { + domain: 'example.de', + defaultLocale: 'de' + } + ] }); export const config = { diff --git a/yarn.lock b/yarn.lock index 8a3a69d2e..744bf0963 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1353,6 +1353,13 @@ dependencies: tslib "^2.1.0" +"@formatjs/intl-localematcher@0.2.32": + version "0.2.32" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.2.32.tgz#00d4d307cd7d514b298e15a11a369b86c8933ec1" + integrity sha512-k/MEBstff4sttohyEpXxCmC3MqbUn9VvHGlZ8fauLzkbwXmVrEeyzS+4uhrvAk9DWU9/7otYWxyDox4nT/KVLQ== + dependencies: + tslib "^2.4.0" + "@headlessui/react@^1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.5.0.tgz#483b44ba2c8b8d4391e1d2c863898d7dd0cc0296" @@ -3085,6 +3092,11 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== +"@types/negotiator@0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@types/negotiator/-/negotiator-0.6.1.tgz#4c75543f6ef87f427f4705e731a933595b7397f5" + integrity sha512-c4mvXFByghezQ/eVGN5HvH/jI63vm3B7FiE81BUzDAWmuiohRecCO6ddU60dfq29oKUMiQujsoB2h0JQC7JHKA== + "@types/node@*": version "17.0.23" resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.23.tgz#3b41a6e643589ac6442bdbd7a4a3ded62f33f7da" @@ -3463,7 +3475,7 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -accept-language-parser@1.5.0, accept-language-parser@^1.5.0: +accept-language-parser@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/accept-language-parser/-/accept-language-parser-1.5.0.tgz#8877c54040a8dcb59e0a07d9c1fde42298334791" integrity sha512-QhyTbMLYo0BBGg1aWbeMG4ekWtds/31BrEU+DONOg/7ax23vxpL03Pb7/zBmha2v7vdD3AyzZVWBVGEZxKOXWw== @@ -9135,6 +9147,11 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + negotiator@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" From f8fefd2174dbb226f7772977267cdd0b5d2ec193 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 13 Feb 2023 11:01:57 +0100 Subject: [PATCH 117/312] feat: Next.js 13 RSC routing clean up & add `redirect` (#187) * Add awaitable functions * Fix lint * Unprefixed routing * Support unprefixed routing in `LocalizedLink`, `useLocalizedRouter` and `useUnlocalizedPathname` * Support domain-based routing * Assert correct links in test * Deprecate + alternatives * Add new APIs * Add `redirect` --- .../src/app/[locale]/client/ClientContent.tsx | 8 +++--- .../src/app/[locale]/page.tsx | 6 ++--- .../src/app/[locale]/redirect/page.tsx | 5 ++++ .../ClientRouterWithoutProvider.tsx | 4 +-- .../src/components/LocaleSwitcher.tsx | 6 ++--- .../src/components/Navigation.tsx | 9 ++++--- .../src/components/NavigationLink.tsx | 25 ++++++++++++++++++ .../tests/main.spec.ts | 26 +++++++++++++------ .../src/components/LocaleSwitcher.tsx | 5 ++-- packages/next-intl/.gitignore | 1 + packages/next-intl/src/client/index.tsx | 26 ++++++++----------- .../next-intl/src/client/localizeHref.tsx | 11 +------- ...nlocalizedPathname.tsx => usePathname.tsx} | 6 ++--- .../{useLocalizedRouter.tsx => useRouter.tsx} | 6 ++--- packages/next-intl/src/index.tsx | 12 ++++++--- .../src/react-client/useLocalizedRouter.tsx | 4 +-- packages/next-intl/src/react-server/index.tsx | 7 ++++- packages/next-intl/src/server/index.tsx | 3 +++ packages/next-intl/src/server/redirect.tsx | 10 +++++++ packages/next-intl/src/shared/Link.tsx | 26 +++++++++++++++++++ .../next-intl/src/shared/localizePathname.tsx | 9 +++++++ ...Pathname.test.tsx => usePathname.test.tsx} | 2 +- .../pages/docs/next-13/server-components.mdx | 18 ++++++------- 23 files changed, 161 insertions(+), 74 deletions(-) create mode 100644 packages/example-next-13-advanced/src/app/[locale]/redirect/page.tsx create mode 100644 packages/example-next-13-advanced/src/components/NavigationLink.tsx create mode 100644 packages/next-intl/.gitignore rename packages/next-intl/src/client/{useUnlocalizedPathname.tsx => usePathname.tsx} (88%) rename packages/next-intl/src/client/{useLocalizedRouter.tsx => useRouter.tsx} (75%) create mode 100644 packages/next-intl/src/server/redirect.tsx create mode 100644 packages/next-intl/src/shared/Link.tsx create mode 100644 packages/next-intl/src/shared/localizePathname.tsx rename packages/next-intl/test/client/{useUnlocalizedPathname.test.tsx => usePathname.test.tsx} (79%) diff --git a/packages/example-next-13-advanced/src/app/[locale]/client/ClientContent.tsx b/packages/example-next-13-advanced/src/app/[locale]/client/ClientContent.tsx index ecf10c2ca..c08452045 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/client/ClientContent.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/client/ClientContent.tsx @@ -1,7 +1,7 @@ 'use client'; -import {useNow, LocalizedLink} from 'next-intl'; -import {useUnlocalizedPathname} from 'next-intl/client'; +import {useNow, Link} from 'next-intl'; +import {usePathname} from 'next-intl/client'; export default function ClientContent() { const now = useNow(); @@ -9,8 +9,8 @@ export default function ClientContent() { return ( <>

{now.toISOString()}

- Go to home -

{useUnlocalizedPathname()}

+ Go to home +

{usePathname()}

); } diff --git a/packages/example-next-13-advanced/src/app/[locale]/page.tsx b/packages/example-next-13-advanced/src/app/[locale]/page.tsx index f549692df..e39a3a6ae 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/page.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/page.tsx @@ -1,4 +1,4 @@ -import {LocalizedLink, useTranslations} from 'next-intl'; +import {Link, useTranslations} from 'next-intl'; import ClientRouterWithoutProvider from '../../components/ClientRouterWithoutProvider'; import CoreLibrary from '../../components/CoreLibrary'; import CurrentTime from '../../components/CurrentTime'; @@ -31,9 +31,9 @@ export default function Index() {
- + Go to home with query param - +
); diff --git a/packages/example-next-13-advanced/src/app/[locale]/redirect/page.tsx b/packages/example-next-13-advanced/src/app/[locale]/redirect/page.tsx new file mode 100644 index 000000000..5212ddf14 --- /dev/null +++ b/packages/example-next-13-advanced/src/app/[locale]/redirect/page.tsx @@ -0,0 +1,5 @@ +import {redirect} from 'next-intl/server'; + +export default function Redirect() { + redirect('/client'); +} diff --git a/packages/example-next-13-advanced/src/components/ClientRouterWithoutProvider.tsx b/packages/example-next-13-advanced/src/components/ClientRouterWithoutProvider.tsx index 2058f3314..505458f09 100644 --- a/packages/example-next-13-advanced/src/components/ClientRouterWithoutProvider.tsx +++ b/packages/example-next-13-advanced/src/components/ClientRouterWithoutProvider.tsx @@ -1,9 +1,9 @@ 'use client'; -import {useLocalizedRouter} from 'next-intl/client'; +import {useRouter} from 'next-intl/client'; export default function ClientRouterWithoutProvider() { - const router = useLocalizedRouter(); + const router = useRouter(); function onClick() { router.push('/nested'); diff --git a/packages/example-next-13-advanced/src/components/LocaleSwitcher.tsx b/packages/example-next-13-advanced/src/components/LocaleSwitcher.tsx index 778cc417d..f53e1bd6e 100644 --- a/packages/example-next-13-advanced/src/components/LocaleSwitcher.tsx +++ b/packages/example-next-13-advanced/src/components/LocaleSwitcher.tsx @@ -1,4 +1,4 @@ -import {LocalizedLink, useLocale, useTranslations} from 'next-intl'; +import {Link, useLocale, useTranslations} from 'next-intl'; export default function LocaleSwitcher() { const t = useTranslations('LocaleSwitcher'); @@ -7,8 +7,8 @@ export default function LocaleSwitcher() { const otherLocale = locale === 'en' ? 'de' : 'en'; return ( - + {t('switchLocale', {locale: otherLocale})} - + ); } diff --git a/packages/example-next-13-advanced/src/components/Navigation.tsx b/packages/example-next-13-advanced/src/components/Navigation.tsx index 1e831f745..8cd65eff9 100644 --- a/packages/example-next-13-advanced/src/components/Navigation.tsx +++ b/packages/example-next-13-advanced/src/components/Navigation.tsx @@ -1,13 +1,14 @@ -import {LocalizedLink, useTranslations} from 'next-intl'; +import {useTranslations} from 'next-intl'; +import NavigationLink from './NavigationLink'; export default function Navigation() { const t = useTranslations('Navigation'); return ( ); } diff --git a/packages/example-next-13-advanced/src/components/NavigationLink.tsx b/packages/example-next-13-advanced/src/components/NavigationLink.tsx new file mode 100644 index 000000000..5efa77919 --- /dev/null +++ b/packages/example-next-13-advanced/src/components/NavigationLink.tsx @@ -0,0 +1,25 @@ +'use client'; + +import {Link} from 'next-intl'; +import {usePathname} from 'next-intl/client'; +import {ReactNode} from 'react'; + +type Props = { + children: ReactNode; + href: string; +}; + +export default function NavigationLink({children, href}: Props) { + const pathname = usePathname(); + const isActive = pathname === href; + + return ( + + {children} + + ); +} diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index 822549cd5..faec77a0c 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -162,7 +162,7 @@ it('can use the core library', async ({page}) => { await expect(element).toHaveText('Relative time: tomorrow'); }); -it('can use `LocalizedLink` on the server', async ({page}) => { +it('can use `Link` on the server', async ({page}) => { await page.goto('/en'); await expect(page.getByRole('link', {name: /^Home$/})).toHaveAttribute( 'href', @@ -174,23 +174,21 @@ it('can use `LocalizedLink` on the server', async ({page}) => { ); }); -it('can use `LocalizedLink` with an object as `href`', async ({page}) => { +it('can use `Link` with an object as `href`', async ({page}) => { await page.goto('/en'); await expect( page.getByRole('link', {name: 'Go to home with query param'}) ).toHaveAttribute('href', '/en?test=true'); }); -it('can use `LocalizedLink` to link to the root of another language', async ({ - page -}) => { +it('can use `Link` to link to the root of another language', async ({page}) => { await page.goto('/en'); await expect( page.getByRole('link', {name: 'Switch to German'}) ).toHaveAttribute('href', '/de'); }); -it('can use `LocalizedLink` on the client', async ({page}) => { +it('can use `Link` on the client', async ({page}) => { await page.goto('/en/client'); await expect(page.getByRole('link', {name: 'Go to home'})).toHaveAttribute( 'href', @@ -198,7 +196,7 @@ it('can use `LocalizedLink` on the client', async ({page}) => { ); }); -it('prefixes as necessary with `LocalizedLink`', async ({page}) => { +it('prefixes as necessary with `Link`', async ({page}) => { await page.goto('/'); await expect(page.getByRole('link', {name: /^Home$/})).toHaveAttribute( 'href', @@ -254,7 +252,7 @@ it('supports a consistent `now` value across the server and client', async ({ expect(serverDate).toBe(clientDate); }); -it('can use `useUnlocalizedPathname`', async ({page}) => { +it('can use `usePathname`', async ({page}) => { await page.goto('/client'); await expect(page.getByTestId('UnlocalizedPathname')).toHaveText('/client'); @@ -265,6 +263,18 @@ it('can use `useUnlocalizedPathname`', async ({page}) => { await expect(page.getByTestId('UnlocalizedPathname')).toHaveText('/client'); }); +it('can use `redirect`', async ({page}) => { + await page.goto('/en/redirect'); + await expect(page).toHaveURL('/en/client'); + + await page.goto('/redirect'); + // Currently we can't detect unprefixed routing in the `redirect` function + await expect(page).toHaveURL('/en/client'); + + await page.goto('/de/redirect'); + await expect(page).toHaveURL('/de/client'); +}); + it('can navigate between sibling pages that share a parent layout', async ({ page }) => { diff --git a/packages/example-next-13/src/components/LocaleSwitcher.tsx b/packages/example-next-13/src/components/LocaleSwitcher.tsx index cbca03de7..d9da1a130 100644 --- a/packages/example-next-13/src/components/LocaleSwitcher.tsx +++ b/packages/example-next-13/src/components/LocaleSwitcher.tsx @@ -1,5 +1,4 @@ -import {useLocale, useTranslations} from 'next-intl'; -import Link from 'next/link'; +import {useLocale, useTranslations, Link} from 'next-intl'; export default function LocaleSwitcher() { const t = useTranslations('LocaleSwitcher'); @@ -7,7 +6,7 @@ export default function LocaleSwitcher() { const otherLocale = locale === 'en' ? 'de' : 'en'; return ( - + {t('switchLocale', {locale: otherLocale})} ); diff --git a/packages/next-intl/.gitignore b/packages/next-intl/.gitignore new file mode 100644 index 000000000..1521c8b76 --- /dev/null +++ b/packages/next-intl/.gitignore @@ -0,0 +1 @@ +dist diff --git a/packages/next-intl/src/client/index.tsx b/packages/next-intl/src/client/index.tsx index 3ef6bc05d..903018b9a 100644 --- a/packages/next-intl/src/client/index.tsx +++ b/packages/next-intl/src/client/index.tsx @@ -2,22 +2,18 @@ * Client-only APIs. */ -import React, {ComponentProps} from 'react'; import NextIntlClientProvider_ from '../shared/NextIntlClientProvider'; +import usePathname from './usePathname'; +import useRouter from './useRouter'; -export {default as useLocalizedRouter} from './useLocalizedRouter'; -export {default as useUnlocalizedPathname} from './useUnlocalizedPathname'; +export {default as useRouter} from './useRouter'; +export {default as usePathname} from './usePathname'; -let hasWarned = false; -export function NextIntlClientProvider( - props: ComponentProps -) { - if (!hasWarned) { - console.warn( - 'DEPRECATION WARNING: `NextIntlClientProvider` should be imported from `next-intl`, not `next-intl/client` - please update your import statement.' - ); - hasWarned = true; - } +/** @deprecated Is called `usePathname` now. */ +export const useUnlocalizedPathname = usePathname; - return ; -} +/** @deprecated Is called `useRouter` now. */ +export const useLocalizedRouter = useRouter; + +/** @deprecated Should be imported from `next-intl`, not `next-intl/client`. */ +export const NextIntlClientProvider = NextIntlClientProvider_; diff --git a/packages/next-intl/src/client/localizeHref.tsx b/packages/next-intl/src/client/localizeHref.tsx index 56c8c4885..7a9bac39d 100644 --- a/packages/next-intl/src/client/localizeHref.tsx +++ b/packages/next-intl/src/client/localizeHref.tsx @@ -1,17 +1,8 @@ import {UrlObject} from 'url'; +import localizePathname from '../shared/localizePathname'; import getCookieLocale from './getCookieLocale'; import hasPathnamePrefixed from './hasPathnamePrefixed'; -function localizePathname(locale: string, pathname: string) { - let localizedHref = '/' + locale; - - if (pathname !== '/') { - localizedHref += pathname; - } - - return localizedHref; -} - export default function localizeHref(href: string, locale?: string): string; export default function localizeHref( href: UrlObject | string, diff --git a/packages/next-intl/src/client/useUnlocalizedPathname.tsx b/packages/next-intl/src/client/usePathname.tsx similarity index 88% rename from packages/next-intl/src/client/useUnlocalizedPathname.tsx rename to packages/next-intl/src/client/usePathname.tsx index ac577c7d5..846b242de 100644 --- a/packages/next-intl/src/client/useUnlocalizedPathname.tsx +++ b/packages/next-intl/src/client/usePathname.tsx @@ -1,4 +1,4 @@ -import {usePathname} from 'next/navigation'; +import {usePathname as useNextPathname} from 'next/navigation'; import {useEffect, useState} from 'react'; import getCookieLocale from './getCookieLocale'; import hasPathnamePrefixed from './hasPathnamePrefixed'; @@ -16,8 +16,8 @@ export function unlocalizePathname(pathname: string) { * This can be helpful e.g. to implement navigation links, * where the active link is highlighted. */ -export default function useUnlocalizedPathname() { - const pathname = usePathname(); +export default function usePathname() { + const pathname = useNextPathname(); const [unlocalizedPathname, setUnlocalizedPathname] = useState( null ); diff --git a/packages/next-intl/src/client/useLocalizedRouter.tsx b/packages/next-intl/src/client/useRouter.tsx similarity index 75% rename from packages/next-intl/src/client/useLocalizedRouter.tsx rename to packages/next-intl/src/client/useRouter.tsx index 72d93db5e..93fd5eac9 100644 --- a/packages/next-intl/src/client/useLocalizedRouter.tsx +++ b/packages/next-intl/src/client/useRouter.tsx @@ -1,9 +1,9 @@ -import {useRouter} from 'next/navigation'; +import {useRouter as useNextRouter} from 'next/navigation'; import {useMemo} from 'react'; import localizeHref from './localizeHref'; -export default function useLocalizedRouter() { - const router = useRouter(); +export default function useRouter() { + const router = useNextRouter(); return useMemo( () => ({ diff --git a/packages/next-intl/src/index.tsx b/packages/next-intl/src/index.tsx index 817fc5989..83129545b 100644 --- a/packages/next-intl/src/index.tsx +++ b/packages/next-intl/src/index.tsx @@ -3,11 +3,17 @@ * from 'next-intl'. Make sure this mirrors the API from 'react-server'. */ +import Link from './shared/Link'; +import NextIntlClientProvider from './shared/NextIntlClientProvider'; + export * from 'use-intl'; export {default as useLocalizedRouter} from './react-client/useLocalizedRouter'; -export {default as LocalizedLink} from './shared/LocalizedLink'; +export {default as Link} from './shared/Link'; export {default as NextIntlClientProvider} from './shared/NextIntlClientProvider'; -// DEPRECATED: Legacy export for compatibility -export {default as NextIntlProvider} from './shared/NextIntlClientProvider'; +/** @deprecated Is called `NextIntlClientProvider` now. */ +export const NextIntlProvider = NextIntlClientProvider; + +/** @deprecated Is called `Link` now. */ +export const LocalizedLink = Link; diff --git a/packages/next-intl/src/react-client/useLocalizedRouter.tsx b/packages/next-intl/src/react-client/useLocalizedRouter.tsx index 90a27d110..a309650d3 100644 --- a/packages/next-intl/src/react-client/useLocalizedRouter.tsx +++ b/packages/next-intl/src/react-client/useLocalizedRouter.tsx @@ -1,4 +1,4 @@ -import useLocalizedRouter from '../client/useLocalizedRouter'; +import useRouter from '../client/useRouter'; // TODO: Only available for backwards compatibility // during the beta, remove for stable release @@ -13,5 +13,5 @@ export default function useLocalizedRouterDeprecated() { hasWarned = true; } - return useLocalizedRouter(); + return useRouter(); } diff --git a/packages/next-intl/src/react-server/index.tsx b/packages/next-intl/src/react-server/index.tsx index a97620a0a..bae9bc192 100644 --- a/packages/next-intl/src/react-server/index.tsx +++ b/packages/next-intl/src/react-server/index.tsx @@ -3,6 +3,8 @@ * from 'next-intl'. Make sure this mirrors the API from the main entry. */ +import Link from '../shared/Link'; + // Replaced exports from the `react` package export {default as useLocale} from './useLocale'; export {default as useTranslations} from './useTranslations'; @@ -11,9 +13,12 @@ export {default as useNow} from './useNow'; export {default as useTimeZone} from './useTimeZone'; // We don't offer a server-only variant of this component currently -export {default as LocalizedLink} from '../shared/LocalizedLink'; +export {default as Link} from '../shared/Link'; export {default as NextIntlClientProvider} from '../shared/NextIntlClientProvider'; // Everything from `core` export * from 'use-intl/dist/src/core'; + +/** @deprecated Is called `Link` now. */ +export const LocalizedLink = Link; diff --git a/packages/next-intl/src/server/index.tsx b/packages/next-intl/src/server/index.tsx index 1aabf0b8c..c4b5a2383 100644 --- a/packages/next-intl/src/server/index.tsx +++ b/packages/next-intl/src/server/index.tsx @@ -2,6 +2,7 @@ * Server-only APIs. */ +/** @deprecated */ export function createIntlMiddleware() { throw new Error( "DEPRECATION ERROR: `import {createIntlMiddleware} from 'next-intl';` is deprecated and needs to be replaced with `import createIntlMiddleware from 'next-intl/middleware'`." @@ -14,3 +15,5 @@ export {default as getLocale} from './getLocale'; export {default as getNow} from './getNow'; export {default as getTimeZone} from './getTimeZone'; export {default as getTranslations} from './getTranslations'; + +export {default as redirect} from './redirect'; diff --git a/packages/next-intl/src/server/redirect.tsx b/packages/next-intl/src/server/redirect.tsx new file mode 100644 index 000000000..da1074b56 --- /dev/null +++ b/packages/next-intl/src/server/redirect.tsx @@ -0,0 +1,10 @@ +import {redirect as nextRedirect} from 'next/navigation'; +import localizePathname from '../shared/localizePathname'; +import getLocale from './getLocale'; + +export default function redirect(pathname: string) { + const locale = getLocale(); + const localizedPathname = localizePathname(locale, pathname); + + return nextRedirect(localizedPathname); +} diff --git a/packages/next-intl/src/shared/Link.tsx b/packages/next-intl/src/shared/Link.tsx new file mode 100644 index 000000000..5014e3f2e --- /dev/null +++ b/packages/next-intl/src/shared/Link.tsx @@ -0,0 +1,26 @@ +'use client'; + +import NextLink from 'next/link'; +import {usePathname} from 'next/navigation'; +import React, {ComponentProps, forwardRef, useEffect, useState} from 'react'; +import localizeHref from '../client/localizeHref'; + +type Props = Omit, 'locale'> & { + locale?: string; +}; + +/** + * Wraps `next/link` and prefixes the `href` with the current locale. + */ +function Link({href, locale, ...rest}: Props, ref: Props['ref']) { + const [localizedHref, setLocalizedHref] = useState(href); + const pathname = usePathname(); + + useEffect(() => { + setLocalizedHref(localizeHref(href, locale)); + }, [href, locale, pathname]); + + return ; +} + +export default forwardRef(Link); diff --git a/packages/next-intl/src/shared/localizePathname.tsx b/packages/next-intl/src/shared/localizePathname.tsx new file mode 100644 index 000000000..dcb1a5179 --- /dev/null +++ b/packages/next-intl/src/shared/localizePathname.tsx @@ -0,0 +1,9 @@ +export default function localizePathname(locale: string, pathname: string) { + let localizedHref = '/' + locale; + + if (pathname !== '/') { + localizedHref += pathname; + } + + return localizedHref; +} diff --git a/packages/next-intl/test/client/useUnlocalizedPathname.test.tsx b/packages/next-intl/test/client/usePathname.test.tsx similarity index 79% rename from packages/next-intl/test/client/useUnlocalizedPathname.test.tsx rename to packages/next-intl/test/client/usePathname.test.tsx index 8c66f02e3..e8b9765f8 100644 --- a/packages/next-intl/test/client/useUnlocalizedPathname.test.tsx +++ b/packages/next-intl/test/client/usePathname.test.tsx @@ -1,4 +1,4 @@ -import {unlocalizePathname} from '../../src/client/useUnlocalizedPathname'; +import {unlocalizePathname} from '../../src/client/usePathname'; it('works for the root', () => { expect(unlocalizePathname('/en')).toEqual('/'); diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 4e65fa489..4145091cb 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -157,37 +157,37 @@ If you're in a transitioning phase, either from the `pages` directory to the `ap In the `pages` folder, Next.js automatically considers the current locale for `next/link`. Since this is no longer the case for the `app` directory, `next-intl` provides a drop-in replacement for this use case. ```tsx -import {LocalizedLink} from 'next-intl'; +import {Link} from 'next-intl'; // When the user is on `/en`, the link will point to `/en/about` -About +About // You can override the `locale` to switch to another language -Switch to German +Switch to German ``` -If you need to navigate programmatically (e.g. in response to a form submission), `next-intl` provides a convience API that wraps `useRouter` and automatically applies the locale of the user. +If you need to navigate programmatically (e.g. in response to a form submission), `next-intl` provides a convience API that wraps `useRouter` from Next.js and automatically applies the locale of the user. ```tsx 'use client'; -import {useLocalizedRouter} from 'next-intl/client'; +import {useRouter} from 'next-intl/client'; -const router = useLocalizedRouter(); +const router = useRouter(); // When the user is on `/en`, the router will navigate to `/en/about` router.push('/about'); ``` -To retrieve the pathname without a locale prefix, you can call `useUnlocalizedPathname`. +To retrieve the pathname without a potential locale prefix, you can call `usePathname`. ```tsx 'use client'; -import {useUnlocalizedPathname} from 'next-intl/client'; +import {usePathname} from 'next-intl/client'; // When the user is on `/en`, this will be `/` -const pathname = useUnlocalizedPathname(); +const pathname = usePathname(); ``` ## Global request configuration From d8871a81e025d6795a54ca2580e0565ef34cf7b1 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 13 Feb 2023 11:07:19 +0100 Subject: [PATCH 118/312] Docs for `redirect` --- .../pages/docs/next-13/server-components.mdx | 81 +++++++++++-------- 1 file changed, 49 insertions(+), 32 deletions(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 4145091cb..655760ebd 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -66,7 +66,7 @@ export default getRequestConfig(async ({locale}) => ({ })); ``` -3. Provide the path to your configuration in `next.config.js`: +3. Set up the plugin and provide the path to your configuration in `next.config.js`: ```js const withNextIntl = require('next-intl/plugin')( @@ -154,6 +154,8 @@ If you're in a transitioning phase, either from the `pages` directory to the `ap ## Routing +### `Link` + In the `pages` folder, Next.js automatically considers the current locale for `next/link`. Since this is no longer the case for the `app` directory, `next-intl` provides a drop-in replacement for this use case. ```tsx @@ -166,6 +168,8 @@ import {Link} from 'next-intl'; Switch to German ``` +### `useRouter` + If you need to navigate programmatically (e.g. in response to a form submission), `next-intl` provides a convience API that wraps `useRouter` from Next.js and automatically applies the locale of the user. ```tsx @@ -179,6 +183,8 @@ const router = useRouter(); router.push('/about'); ``` +### `usePathname` + To retrieve the pathname without a potential locale prefix, you can call `usePathname`. ```tsx @@ -190,6 +196,17 @@ import {usePathname} from 'next-intl/client'; const pathname = usePathname(); ``` +### `redirect` + +To redirect the user to another page with the current locale, you can call `redirect` from a Server Component. + +```tsx +import {redirect} from 'next-intl/server'; + +// When the user is on `/en`, this will be `/en/about` +redirect('/about'); +``` + ## Global request configuration If you'd like to apply [global configuration](/docs/usage/configuration) like `formats`, `defaultTranslationValues`, `timeZone`, `now`, or [error handling functions](/docs/usage/error-handling) like `onError` and `getMessageFallback`, you can provide these in `i18n.tsx`. @@ -208,6 +225,37 @@ export default getRequestConfig(async ({locale}) => ({ })); ``` +## Using internationalization outside of components + +If you need to use translated messages in functions like `generateMetadata`, you can import awaitable versions of the functions that you usually call as hooks from `next-intl/server`. + +```tsx +// [locale]/layout.tsx + +import {getTranslations} from 'next-intl/server'; + +export async function generateMetadata() { + const t = await getTranslations('Metadata'); + + return { + title: t('title'), + description: t('description') + }; +} +``` + +These functions are available from `next-intl/server` for usage outside of components: + +```tsx +import { + getTranslations, // like `useTranslations` + getIntl, // like `useIntl` + getLocale, // like `useLocale` + getNow, // like `useNow` + getTimeZone // like `useTimeZone` +} from 'next-intl/server'; +``` + ## Switching to Client Components If you need to use translations in Client Components, the best approach is to pass the generated labels as props. @@ -248,37 +296,6 @@ This way your messages never leave the server and the client only needs to load If you absolutely need to use functionality from `next-intl` on the client side, you can wrap the respective components with `NextIntlClientProvider` ([example code](https://github.com/amannn/next-intl/blob/feat/next-13-rsc/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx)). Note however that this will increase your client bundle size. -## Using internationalization outside of components - -If you need to use translated messages in functions like `generateMetadata`, you can import awaitable versions of the functions that you usually call as hooks from `next-intl/server`. - -```tsx -// [locale]/layout.tsx - -import {getTranslations} from 'next-intl/server'; - -export async function generateMetadata() { - const t = await getTranslations('Metadata'); - - return { - title: t('title'), - description: t('description') - }; -} -``` - -These functions are available from `next-intl/server` for usage outside of components: - -```tsx -import { - getTranslations, // like `useTranslations` - getIntl, // like `useIntl` - getLocale, // like `useLocale` - getNow, // like `useNow` - getTimeZone // like `useTimeZone` -} from 'next-intl/server'; -``` - ## Providing feedback If you have feedback about using `next-intl` in the `app` directory, feel free to leave feedback in [the PR which implements the React Server Components support](https://github.com/amannn/next-intl/pull/149). From 7cdc10cdb51e33650efe7f8eab89990ae6c4396d Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 13 Feb 2023 11:16:53 +0100 Subject: [PATCH 119/312] `2.11.0-beta.8` --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 655760ebd..0da60f9ba 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -13,7 +13,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current beta version ``` -npm install next-intl@2.11.0-beta.7 +npm install next-intl@2.11.0-beta.8 ``` This beta version was tested with `next@13.1.6`. From a35595fc1664c01ec461b111c7cf4341940911f4 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 13 Feb 2023 14:07:18 +0100 Subject: [PATCH 120/312] Improve docs for `redirect` --- .../pages/docs/next-13/server-components.mdx | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 0da60f9ba..03e681faa 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -198,13 +198,21 @@ const pathname = usePathname(); ### `redirect` -To redirect the user to another page with the current locale, you can call `redirect` from a Server Component. +If you want to interrupt the render of a Server Component and redirect to another page, you can invoke the `redirect` function from `next-intl`. This wraps [the `redirect` function from Next.js](https://beta.nextjs.org/docs/api-reference/redirect) and automatically applies the current locale. ```tsx import {redirect} from 'next-intl/server'; -// When the user is on `/en`, this will be `/en/about` -redirect('/about'); +export default async function Profile() { + const user = await fetchUser(); + + if (!user) { + // When the user is on `/en/profile`, this will be `/en/login` + redirect('/login'); + } + + // ... +} ``` ## Global request configuration From b301d472c9d1fd7ec27eff344b677c04540333dc Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 13 Feb 2023 16:52:43 +0100 Subject: [PATCH 121/312] Improve docs --- packages/example-next-13-advanced/src/middleware.tsx | 4 ++-- packages/example-next-13-with-pages/src/middleware.tsx | 4 ++-- packages/example-next-13/src/middleware.tsx | 4 ++-- packages/next-intl/package.json | 2 +- .../website/pages/docs/next-13/client-components.mdx | 2 +- .../website/pages/docs/next-13/server-components.mdx | 10 +++++----- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/example-next-13-advanced/src/middleware.tsx b/packages/example-next-13-advanced/src/middleware.tsx index 9a0ec72f0..841a68e75 100644 --- a/packages/example-next-13-advanced/src/middleware.tsx +++ b/packages/example-next-13-advanced/src/middleware.tsx @@ -16,6 +16,6 @@ export default createIntlMiddleware({ }); export const config = { - // Skip all internal paths - matcher: ['/((?!_next).*)'] + // Skip all non-content paths + matcher: ['/((?!api|_next|favicon.ico).*)'] }; diff --git a/packages/example-next-13-with-pages/src/middleware.tsx b/packages/example-next-13-with-pages/src/middleware.tsx index 409fa3c26..b419c4ac0 100644 --- a/packages/example-next-13-with-pages/src/middleware.tsx +++ b/packages/example-next-13-with-pages/src/middleware.tsx @@ -6,6 +6,6 @@ export default createIntlMiddleware({ }); export const config = { - // Skip all internal paths - matcher: ['/((?!_next).*)'] + // Skip all non-content paths + matcher: ['/((?!api|_next|favicon.ico).*)'] }; diff --git a/packages/example-next-13/src/middleware.tsx b/packages/example-next-13/src/middleware.tsx index 409fa3c26..b419c4ac0 100644 --- a/packages/example-next-13/src/middleware.tsx +++ b/packages/example-next-13/src/middleware.tsx @@ -6,6 +6,6 @@ export default createIntlMiddleware({ }); export const config = { - // Skip all internal paths - matcher: ['/((?!_next).*)'] + // Skip all non-content paths + matcher: ['/((?!api|_next|favicon.ico).*)'] }; diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index d72905f03..2987c5e3e 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -5,7 +5,7 @@ "author": "Jan Amann ", "description": "A minimal, but complete solution for internationalization in Next.js apps.", "license": "MIT", - "homepage": "https://next-intl-docs.vercel.app/", + "homepage": "https://next-intl-docs.vercel.app", "repository": { "type": "git", "url": "https://github.com/amannn/next-intl" diff --git a/packages/website/pages/docs/next-13/client-components.mdx b/packages/website/pages/docs/next-13/client-components.mdx index 08e236e2f..1c31609a3 100644 --- a/packages/website/pages/docs/next-13/client-components.mdx +++ b/packages/website/pages/docs/next-13/client-components.mdx @@ -76,7 +76,7 @@ export default function Index() { } ``` -4. Create a [middleware](https://nextjs.org/docs/advanced-features/middleware) in `middleware.tsx` that handles redirects (4): +4. Create a [middleware](https://nextjs.org/docs/advanced-features/middleware) in `middleware.tsx` that handles redirects: ```tsx import {createIntlMiddleware} from 'next-intl/server'; diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 03e681faa..5d7fd43da 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -102,8 +102,8 @@ export default createIntlMiddleware({ }); export const config = { - // Skip all internal paths - matcher: ['/((?!_next).*)'] + // Skip all non-content paths + matcher: ['/((?!api|_next|favicon.ico).*)'] }; ``` @@ -274,7 +274,7 @@ import Expandable from './Expandable'; export default function FAQ() { const t = useTranslations('FAQ'); - return ; + return {t('description')}; } ``` @@ -284,7 +284,7 @@ export default function FAQ() { import {useState} from 'react'; -function Expandable({title, description}) { +function Expandable({title, children}) { const [expanded, setExpanded] = useState(false); function onToggle() { @@ -294,7 +294,7 @@ function Expandable({title, description}) { return (
- {expanded &&

{description}

} + {expanded &&

{children}

}
); } From 436b0bb7827564a808f9af4ca32d955ceb23736d Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 14 Feb 2023 08:53:57 +0100 Subject: [PATCH 122/312] Use `.ts` extension where possible in the docs --- .../website/pages/docs/next-13/client-components.mdx | 4 ++-- .../website/pages/docs/next-13/server-components.mdx | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/website/pages/docs/next-13/client-components.mdx b/packages/website/pages/docs/next-13/client-components.mdx index 1c31609a3..f15312d1f 100644 --- a/packages/website/pages/docs/next-13/client-components.mdx +++ b/packages/website/pages/docs/next-13/client-components.mdx @@ -18,7 +18,7 @@ If you haven't done so already, [create a Next.js 13 app that uses the `app` dir │ └── [locale] │ ├── layout.tsx (2) │ └── page.tsx (3) -└── middleware.tsx (4) +└── middleware.ts (4) ``` **Now, set up these files as follows:** @@ -76,7 +76,7 @@ export default function Index() { } ``` -4. Create a [middleware](https://nextjs.org/docs/advanced-features/middleware) in `middleware.tsx` that handles redirects: +4. Create a [middleware](https://nextjs.org/docs/advanced-features/middleware) in `middleware.ts` that handles redirects: ```tsx import {createIntlMiddleware} from 'next-intl/server'; diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 5d7fd43da..f437590e2 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -35,9 +35,9 @@ If you haven't done so already, [create a Next.js 13 app that uses the `app` dir ├── messages (1) │ ├── en.json │ └── ... -├── i18n.tsx (2) +├── i18n.ts (2) ├── next.config.js (3) -├── middleware.tsx (4) +├── middleware.ts (4) └── app └── [locale] ├── layout.tsx (5) @@ -56,7 +56,7 @@ If you haven't done so already, [create a Next.js 13 app that uses the `app` dir } ``` -2. `next-intl` creates a configuration once per request and makes it available to all Server Components. Define this in `i18n.tsx` (short for "internationalization"): +2. `next-intl` creates a configuration once per request and makes it available to all Server Components. Define this in `i18n.ts` (short for "internationalization"): ```tsx import {getRequestConfig} from 'next-intl/server'; @@ -71,7 +71,7 @@ export default getRequestConfig(async ({locale}) => ({ ```js const withNextIntl = require('next-intl/plugin')( // This is the default, also the `src` folder is supported out of the box - './i18n.tsx' + './i18n.ts' ); module.exports = withNextIntl({ @@ -80,7 +80,7 @@ module.exports = withNextIntl({ }); ``` -4. Create a [middleware](https://nextjs.org/docs/advanced-features/middleware) in `middleware.tsx`: +4. Create a [middleware](https://nextjs.org/docs/advanced-features/middleware) in `middleware.ts`: ```tsx import createIntlMiddleware from 'next-intl/middleware'; @@ -220,7 +220,7 @@ export default async function Profile() { If you'd like to apply [global configuration](/docs/usage/configuration) like `formats`, `defaultTranslationValues`, `timeZone`, `now`, or [error handling functions](/docs/usage/error-handling) like `onError` and `getMessageFallback`, you can provide these in `i18n.tsx`. ```tsx -// i18n.tsx +// i18n.ts import {headers} from 'next/headers'; import {getRequestConfig} from 'next-intl/server'; From 53beb17253ba6261baf1652b94570cabb1089db7 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 14 Feb 2023 08:57:19 +0100 Subject: [PATCH 123/312] Use `.ts` extension in examples where possible --- .../src/{middleware.tsx => middleware.ts} | 0 packages/example-next-13-with-pages/src/{i18n.tsx => i18n.ts} | 0 .../src/{middleware.tsx => middleware.ts} | 0 packages/example-next-13/src/{i18n.tsx => i18n.ts} | 0 packages/example-next-13/src/{middleware.tsx => middleware.ts} | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename packages/example-next-13-advanced/src/{middleware.tsx => middleware.ts} (100%) rename packages/example-next-13-with-pages/src/{i18n.tsx => i18n.ts} (100%) rename packages/example-next-13-with-pages/src/{middleware.tsx => middleware.ts} (100%) rename packages/example-next-13/src/{i18n.tsx => i18n.ts} (100%) rename packages/example-next-13/src/{middleware.tsx => middleware.ts} (100%) diff --git a/packages/example-next-13-advanced/src/middleware.tsx b/packages/example-next-13-advanced/src/middleware.ts similarity index 100% rename from packages/example-next-13-advanced/src/middleware.tsx rename to packages/example-next-13-advanced/src/middleware.ts diff --git a/packages/example-next-13-with-pages/src/i18n.tsx b/packages/example-next-13-with-pages/src/i18n.ts similarity index 100% rename from packages/example-next-13-with-pages/src/i18n.tsx rename to packages/example-next-13-with-pages/src/i18n.ts diff --git a/packages/example-next-13-with-pages/src/middleware.tsx b/packages/example-next-13-with-pages/src/middleware.ts similarity index 100% rename from packages/example-next-13-with-pages/src/middleware.tsx rename to packages/example-next-13-with-pages/src/middleware.ts diff --git a/packages/example-next-13/src/i18n.tsx b/packages/example-next-13/src/i18n.ts similarity index 100% rename from packages/example-next-13/src/i18n.tsx rename to packages/example-next-13/src/i18n.ts diff --git a/packages/example-next-13/src/middleware.tsx b/packages/example-next-13/src/middleware.ts similarity index 100% rename from packages/example-next-13/src/middleware.tsx rename to packages/example-next-13/src/middleware.ts From 63b279a22267c2fc4a043e54dbb923e394ad2ac9 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 14 Feb 2023 10:12:35 +0100 Subject: [PATCH 124/312] One more `tsx` -> `ts` --- packages/website/pages/docs/next-13/server-components.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index f437590e2..76f7bda1f 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -70,7 +70,7 @@ export default getRequestConfig(async ({locale}) => ({ ```js const withNextIntl = require('next-intl/plugin')( - // This is the default, also the `src` folder is supported out of the box + // This is the default (also the `src` folder is supported out of the box) './i18n.ts' ); @@ -217,7 +217,7 @@ export default async function Profile() { ## Global request configuration -If you'd like to apply [global configuration](/docs/usage/configuration) like `formats`, `defaultTranslationValues`, `timeZone`, `now`, or [error handling functions](/docs/usage/error-handling) like `onError` and `getMessageFallback`, you can provide these in `i18n.tsx`. +If you'd like to apply [global configuration](/docs/usage/configuration) like `formats`, `defaultTranslationValues`, `timeZone`, `now`, or [error handling functions](/docs/usage/error-handling) like `onError` and `getMessageFallback`, you can provide these in `i18n.ts`. ```tsx // i18n.ts From f0bceebe3d964f5a37f5655d4b397b5466a36c27 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 14 Feb 2023 11:52:52 +0100 Subject: [PATCH 125/312] 3.0.0-beta.1 --- packages/website/pages/docs/next-13/server-components.mdx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 76f7bda1f..c5704ac31 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -13,10 +13,14 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current beta version ``` -npm install next-intl@2.11.0-beta.8 +npm install next-intl@3.0.0-beta.1 ``` -This beta version was tested with `next@13.1.6`. +This version was tested with `next@13.1.6`. + +**Upgrading from `next-intl@2`:** + +- `NextIntlClientProvider` now needs to be imported from `next-intl` (not `next-intl/client`). ## Roadmap From 643af24ddce2acffe8a69b3428acc6e52a0f9ec5 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 14 Feb 2023 11:59:45 +0100 Subject: [PATCH 126/312] Revert "3.0.0-beta.1" This reverts commit f0bceebe3d964f5a37f5655d4b397b5466a36c27. --- packages/website/pages/docs/next-13/server-components.mdx | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index c5704ac31..76f7bda1f 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -13,14 +13,10 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current beta version ``` -npm install next-intl@3.0.0-beta.1 +npm install next-intl@2.11.0-beta.8 ``` -This version was tested with `next@13.1.6`. - -**Upgrading from `next-intl@2`:** - -- `NextIntlClientProvider` now needs to be imported from `next-intl` (not `next-intl/client`). +This beta version was tested with `next@13.1.6`. ## Roadmap From a78b375c7f82dec029ea543bfe75a8c993e32d5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=AA=E5=BF=83=E7=A6=BE?= Date: Tue, 14 Feb 2023 19:00:30 +0800 Subject: [PATCH 127/312] Add `use client` to `usePathname` so `NextIntlClientProvider` can still be imported (#189) --- packages/next-intl/src/client/usePathname.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/next-intl/src/client/usePathname.tsx b/packages/next-intl/src/client/usePathname.tsx index 846b242de..22b9f7250 100644 --- a/packages/next-intl/src/client/usePathname.tsx +++ b/packages/next-intl/src/client/usePathname.tsx @@ -1,3 +1,5 @@ +'use client'; + import {usePathname as useNextPathname} from 'next/navigation'; import {useEffect, useState} from 'react'; import getCookieLocale from './getCookieLocale'; From 1df09964b3114817a1372a546a91d61a238ed9c4 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 14 Feb 2023 12:03:24 +0100 Subject: [PATCH 128/312] 2.11.0-beta.9 --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 76f7bda1f..dda351ca2 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -13,7 +13,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current beta version ``` -npm install next-intl@2.11.0-beta.8 +npm install next-intl@2.11.0-beta.9 ``` This beta version was tested with `next@13.1.6`. From 70be9b02e565f7da450cda922be56c8c348ba018 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 14 Feb 2023 15:30:59 +0100 Subject: [PATCH 129/312] Keep search params in middleware --- .../src/app/[locale]/page.tsx | 7 ++++- .../tests/main.spec.ts | 27 +++++++++++++++++++ packages/next-intl/src/middleware.tsx | 23 ++++++++++------ 3 files changed, 48 insertions(+), 9 deletions(-) diff --git a/packages/example-next-13-advanced/src/app/[locale]/page.tsx b/packages/example-next-13-advanced/src/app/[locale]/page.tsx index e39a3a6ae..d59f204fa 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/page.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/page.tsx @@ -7,7 +7,11 @@ import PageLayout from '../../components/PageLayout'; import MessagesAsPropsCounter from '../../components/client/01-MessagesAsPropsCounter'; import MessagesOnClientCounter from '../../components/client/02-MessagesOnClientCounter'; -export default function Index() { +type Props = { + searchParams: Record; +}; + +export default function Index({searchParams}: Props) { const t = useTranslations('Index'); return ( @@ -35,6 +39,7 @@ export default function Index() { Go to home with query param
+

{JSON.stringify(searchParams, null, 2)}

); } diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index faec77a0c..c1d53aa09 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -309,3 +309,30 @@ it('can set `now` and `timeZone` at runtime', async ({page}) => { const element = page.getByTestId('CurrentTime'); await expect(element).toHaveText('Jan 1, 2020, 08:00 (Asia/Shanghai)'); }); + +it('keeps search params for directly matched pages', async ({page}) => { + await page.goto('/de?param=true'); + await expect(page).toHaveURL('/de?param=true'); + await expect(page.getByTestId('SearchParams')).toHaveText( + '{ "param": "true" }' + ); +}); + +it('keeps search params for rewrites', async ({page}) => { + await page.goto('/?param=true'); + await expect(page).toHaveURL('/?param=true'); + await expect(page.getByTestId('SearchParams')).toHaveText( + '{ "param": "true" }' + ); +}); + +it('keeps search params for redirects', async ({browser}) => { + const context = await browser.newContext({locale: 'de-DE'}); + const page = await context.newPage(); + + await page.goto('/?param=true'); + await expect(page).toHaveURL('/de?param=true'); + await expect(page.getByTestId('SearchParams')).toHaveText( + '{ "param": "true" }' + ); +}); diff --git a/packages/next-intl/src/middleware.tsx b/packages/next-intl/src/middleware.tsx index 50219b6dd..bc2a2cea2 100644 --- a/packages/next-intl/src/middleware.tsx +++ b/packages/next-intl/src/middleware.tsx @@ -54,10 +54,15 @@ export default function createIntlMiddleware(config: NextIntlMiddlewareConfig) { let response; if (isRoot) { + let pathWithSearch = `/${locale}`; + if (request.nextUrl.search) { + pathWithSearch += request.nextUrl.search; + } + if (hasMatchedDefaultLocale) { - response = rewrite(`/${locale}`); + response = rewrite(pathWithSearch); } else { - response = redirect(`/${locale}`); + response = redirect(pathWithSearch); } } else { const pathLocale = config.locales.find((cur) => @@ -65,21 +70,23 @@ export default function createIntlMiddleware(config: NextIntlMiddlewareConfig) { ); const hasLocalePrefix = pathLocale != null; + let pathWithSearch = request.nextUrl.pathname; + if (request.nextUrl.search) { + pathWithSearch += request.nextUrl.search; + } + if (hasLocalePrefix) { if (pathLocale === locale) { response = next(); } else { - const basePath = request.nextUrl.pathname.replace( - `/${pathLocale}`, - '' - ); + const basePath = pathWithSearch.replace(`/${pathLocale}`, ''); response = redirect(`/${locale}${basePath}`); } } else { if (hasMatchedDefaultLocale) { - response = rewrite(`/${locale}${request.nextUrl.pathname}`); + response = rewrite(`/${locale}${pathWithSearch}`); } else { - response = redirect(`/${locale}${request.nextUrl.pathname}`); + response = redirect(`/${locale}${pathWithSearch}`); } } } From 7c0d88bc159ba55e9e69ef25b03981bd42cf4ac0 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 14 Feb 2023 15:52:33 +0100 Subject: [PATCH 130/312] 2.11.0-beta.10 --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index dda351ca2..af97582fb 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -13,7 +13,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current beta version ``` -npm install next-intl@2.11.0-beta.9 +npm install next-intl@2.11.0-beta.10 ``` This beta version was tested with `next@13.1.6`. From bc4174020655a4a853e6590e70ddc7773516dd16 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 16 Feb 2023 08:16:07 +0100 Subject: [PATCH 131/312] Add test for new API routes --- .../example-next-13-advanced/next-env.d.ts | 1 + .../example-next-13-advanced/package.json | 2 +- .../src/app/api/route.ts | 5 + .../tests/main.spec.ts | 7 + packages/example-next-13/package.json | 2 +- packages/next-intl/package.json | 2 +- .../pages/docs/next-13/server-components.mdx | 2 +- yarn.lock | 243 ++++++++++++------ 8 files changed, 186 insertions(+), 78 deletions(-) create mode 100644 packages/example-next-13-advanced/src/app/api/route.ts diff --git a/packages/example-next-13-advanced/next-env.d.ts b/packages/example-next-13-advanced/next-env.d.ts index 4f11a03dc..7aa8e8ef7 100644 --- a/packages/example-next-13-advanced/next-env.d.ts +++ b/packages/example-next-13-advanced/next-env.d.ts @@ -1,5 +1,6 @@ /// /// +/// // NOTE: This file should not be edited // see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/packages/example-next-13-advanced/package.json b/packages/example-next-13-advanced/package.json index 6475e6e1c..1a64f37f9 100644 --- a/packages/example-next-13-advanced/package.json +++ b/packages/example-next-13-advanced/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "lodash": "^4.17.21", - "next": "canary", + "next": "13.1.7-canary.15", "next-intl": "*", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/example-next-13-advanced/src/app/api/route.ts b/packages/example-next-13-advanced/src/app/api/route.ts new file mode 100644 index 000000000..3f385f4b4 --- /dev/null +++ b/packages/example-next-13-advanced/src/app/api/route.ts @@ -0,0 +1,5 @@ +import {NextResponse} from 'next/server'; + +export async function GET() { + return NextResponse.json({message: 'Hello world'}); +} diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index c1d53aa09..21bda5c69 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -336,3 +336,10 @@ it('keeps search params for redirects', async ({browser}) => { '{ "param": "true" }' ); }); + +it('keeps route handlers intact', async ({request}) => { + const response = await request.get('/api'); + expect(response.status()).toBe(200); + const data = await response.json(); + expect(data).toEqual({message: 'Hello world'}); +}); diff --git a/packages/example-next-13/package.json b/packages/example-next-13/package.json index ef5090776..68d9b81f8 100644 --- a/packages/example-next-13/package.json +++ b/packages/example-next-13/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "lodash": "^4.17.21", - "next": "canary", + "next": "13.1.7-canary.15", "next-intl": "^2.10.2", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 2987c5e3e..961688c4c 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -81,7 +81,7 @@ "dts-cli": "1.4.0", "eslint": "8.12.0", "eslint-config-molindo": "6.0.0", - "next": "canary", + "next": "13.1.7-canary.15", "react": "^18.2.0", "react-dom": "^18.2.0", "typescript": "^4.4.4" diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index af97582fb..a7e13a92f 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -21,7 +21,7 @@ This beta version was tested with `next@13.1.6`. ## Roadmap - ✅ All APIs from `next-intl` can be used in Server Components. -- 💡 Currently SSR-only, i.e. you should use [CDN caching](https://youtu.be/bfLFHp7Sbkg?t=490) via [`headers` in `next.config.js`](https://nextjs.org/docs/api-reference/next.config.js/headers). +- 💡 Currently SSR-only (i.e. no `generateStaticParams`). You should use [CDN caching](https://youtu.be/bfLFHp7Sbkg?t=490) via [`headers` in `next.config.js`](https://nextjs.org/docs/api-reference/next.config.js/headers). For details, see the [pending pull request for Server Components support](https://github.com/amannn/next-intl/pull/149). diff --git a/yarn.lock b/yarn.lock index 744bf0963..db3251914 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2308,10 +2308,15 @@ resolved "https://registry.yarnpkg.com/@next/env/-/env-13.0.0.tgz#38527956680693c90b4522ab4ab9a2fbe3a17f67" integrity sha512-65v9BVuah2Mplohm4+efsKEnoEuhmlGm8B2w6vD1geeEP2wXtlSJCvR/cCRJ3fD8wzCQBV41VcMBQeYET6MRkg== -"@next/env@13.1.7-canary.7": - version "13.1.7-canary.7" - resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.7-canary.7.tgz#0d32871cd2c9d30689ce7696f6ebd24c4dbaca54" - integrity sha512-hRrDd5Kzo9MnAeTxHkf47gQxzR7hiDKQquAyKNa4Cpre/vL6ZMerr53J4BuIIgToyvYu49Of+QI2SdyArFbxhA== +"@next/env@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.6.tgz#c4925609f16142ded1a5cb833359ab17359b7a93" + integrity sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg== + +"@next/env@13.1.7-canary.15": + version "13.1.7-canary.15" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.7-canary.15.tgz#b18392a37e41be1dc8927a8f047627c0cfdf6816" + integrity sha512-LoZMSEGgm/Cb5I36qtnna/IX908AZPNzRCh7unwHWSvyn8EiO+HzW2w6DKzTI8ne5EASMtt1z4VfWTtE/nVLhg== "@next/eslint-plugin-next@12.0.1": version "12.0.1" @@ -2337,10 +2342,15 @@ resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.0.tgz#15cd89d19d3c00d123fdfe367bab38c362f6c515" integrity sha512-+DUQkYF93gxFjWY+CYWE1QDX6gTgnUiWf+W4UqZjM1Jcef8U97fS6xYh+i+8rH4MM0AXHm7OSakvfOMzmjU6VA== -"@next/swc-android-arm-eabi@13.1.7-canary.7": - version "13.1.7-canary.7" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.7-canary.7.tgz#ce9df22859489a3b098414601bbba4cd2f48b510" - integrity sha512-0np5XOLL112tgzOz1uxyeKoabhwHSQG6zFwbCJxmYwBXa3LH9CB55cOT56jW4xaqZSQhNWG1UEyISiOMJ0XXRg== +"@next/swc-android-arm-eabi@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.6.tgz#d766dfc10e27814d947b20f052067c239913dbcc" + integrity sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ== + +"@next/swc-android-arm-eabi@13.1.7-canary.15": + version "13.1.7-canary.15" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.7-canary.15.tgz#16b71374d7e2dc944944114af1178f57d4236a38" + integrity sha512-LeLp9vm+DtryRwEdH4B7HR0yntV7dJTyjAZ2VKQDlJHEmIxeomeQw9tyscpKD1nuUP8VCBCXZ0o540VOtk6khw== "@next/swc-android-arm64@12.1.4": version "12.1.4" @@ -2352,10 +2362,15 @@ resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.0.0.tgz#9410365bb07097268d4773a46b02cfe6b3fe3ab7" integrity sha512-RW9Uy3bMSc0zVGCa11klFuwfP/jdcdkhdruqnrJ7v+7XHm6OFKkSRzX6ee7yGR1rdDZvTnP4GZSRSpzjLv/N0g== -"@next/swc-android-arm64@13.1.7-canary.7": - version "13.1.7-canary.7" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.7-canary.7.tgz#0eb443cbb91946973a245793607a0e5093549d92" - integrity sha512-Qrso/wINns3fgmrrRCojvEIgXWE2QKTySspc/zMklUa9ck4RUiCRpKV3O0+sAGx68ZqKzQOrJFsp2cLHWX45AQ== +"@next/swc-android-arm64@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.6.tgz#f37a98d5f18927d8c9970d750d516ac779465176" + integrity sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw== + +"@next/swc-android-arm64@13.1.7-canary.15": + version "13.1.7-canary.15" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.7-canary.15.tgz#f83c7694e5cce7f31da0d21cd4ddfce09d88afd9" + integrity sha512-DcK1czYr2xyGge+5lPFBi5i0D1ejitLA8Cl2Sc/Vx7QRNHAcfT1b6R0o9hdPBSuxcWalHzL19PvLV/3FlyQzGg== "@next/swc-darwin-arm64@12.1.4": version "12.1.4" @@ -2367,10 +2382,15 @@ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.0.tgz#caf262fb5cb8bb335f6f344fd67a44dc8bf6a084" integrity sha512-APA26nps1j4qyhOIzkclW/OmgotVHj1jBxebSpMCPw2rXfiNvKNY9FA0TcuwPmUCNqaTnm703h6oW4dvp73A4Q== -"@next/swc-darwin-arm64@13.1.7-canary.7": - version "13.1.7-canary.7" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.7-canary.7.tgz#11925aa69fb6f3b00e4b93a6f5b6a9431e474f95" - integrity sha512-aBzwyTed3TBVDRvr3SuCCkmJ40YT+7hoSgeBu+MHAVM4SUhVq6C+tTQqpk56fDI6Q5aB34feswvgZQcJD1Wibw== +"@next/swc-darwin-arm64@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.6.tgz#ec1b90fd9bf809d8b81004c5182e254dced4ad96" + integrity sha512-KKRQH4DDE4kONXCvFMNBZGDb499Hs+xcFAwvj+rfSUssIDrZOlyfJNy55rH5t2Qxed1e4K80KEJgsxKQN1/fyw== + +"@next/swc-darwin-arm64@13.1.7-canary.15": + version "13.1.7-canary.15" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.7-canary.15.tgz#5436585df0e655502e79f4e359754312e112c605" + integrity sha512-zHwrJGHtpw22s6qrQzUTYLMvIgknog66a8jNCC0+iSI8Xejgmq+900yJ3c8xrzR29uEZqXkjcVDcGzBtqGdPqw== "@next/swc-darwin-x64@12.1.4": version "12.1.4" @@ -2382,20 +2402,30 @@ resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.0.tgz#6b214753410e1d8512a1491045acea1e188df7d6" integrity sha512-qsUhUdoFuRJiaJ7LnvTQ6GZv1QnMDcRXCIjxaN0FNVXwrjkq++U7KjBUaxXkRzLV4C7u0NHLNOp0iZwNNE7ypw== -"@next/swc-darwin-x64@13.1.7-canary.7": - version "13.1.7-canary.7" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.7-canary.7.tgz#1b2825d7c1c06ef71a0559df4507cf929e8bbf2b" - integrity sha512-/d/lNcR81i+pOmudnR1prtWs4OTnxD/M94JCYMbXAaH1+EDUUALYNbPYmOaPgKeYOvlLHTkbhnhdaTeepbitlg== +"@next/swc-darwin-x64@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.6.tgz#e869ac75d16995eee733a7d1550322d9051c1eb4" + integrity sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA== + +"@next/swc-darwin-x64@13.1.7-canary.15": + version "13.1.7-canary.15" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.7-canary.15.tgz#fee7d70d797d99c02d5ebdba8c1b1b3b103e3e58" + integrity sha512-aF6BW1b1Sny+oIw9LuBdXdzimhZODmhm8uz9xgMMiJlvF4w+Q0UptkNnGmbZe4peameRKKqzT/FnGxIFXhmswA== "@next/swc-freebsd-x64@13.0.0": version "13.0.0" resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.0.tgz#eeb176bdb585f48882bdac1d04271b918ca87590" integrity sha512-sCdyCbboS7CwdnevKH9J6hkJI76LUw1jVWt4eV7kISuLiPba3JmehZSWm80oa4ADChRVAwzhLAo2zJaYRrInbg== -"@next/swc-freebsd-x64@13.1.7-canary.7": - version "13.1.7-canary.7" - resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.7-canary.7.tgz#b11117a78ab2ee7ecb9d0431ecdff1d72a72ebe7" - integrity sha512-/NtZDP2FEm6LeBUvJPHg4B6ubQJSz1W5s1Ijbcj+O/w45iCbGBOagozvHXax5hapYYrQh2RylaBJjIYBI1VlaQ== +"@next/swc-freebsd-x64@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.6.tgz#84a7b2e423a2904afc2edca21c2f1ba6b53fa4c1" + integrity sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw== + +"@next/swc-freebsd-x64@13.1.7-canary.15": + version "13.1.7-canary.15" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.7-canary.15.tgz#db94061be6a04a9e35292e921a0859bdbde2d844" + integrity sha512-kq82F4A7TBGMDRT5nGxaiuaWpqeovMG+NizVZwB17FSr81qb2bwq8nF0Iy8Aw9feFWAvPHictvRTgeaU0ycxTA== "@next/swc-linux-arm-gnueabihf@12.1.4": version "12.1.4" @@ -2407,10 +2437,15 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.0.tgz#2c2a9622c93f87a8baca94e068f674da4cae6018" integrity sha512-/X/VxfFA41C9jrEv+sUsPLQ5vbDPVIgG0CJrzKvrcc+b+4zIgPgtfsaWq9ockjHFQi3ycvlZK4TALOXO8ovQ6Q== -"@next/swc-linux-arm-gnueabihf@13.1.7-canary.7": - version "13.1.7-canary.7" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.7-canary.7.tgz#b35d654c6fe939e6b5a9b6f8e787b26ed15e668d" - integrity sha512-/+M97v9gNP5PDLnrQzLpaiXGhz9B/TjkkDKC+KHMMv0vXPN+F0Db72Sz7EX+ax2+xTwbCcvZLqkK5uA5gnWEvw== +"@next/swc-linux-arm-gnueabihf@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.6.tgz#980eed1f655ff8a72187d8a6ef9e73ac39d20d23" + integrity sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw== + +"@next/swc-linux-arm-gnueabihf@13.1.7-canary.15": + version "13.1.7-canary.15" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.7-canary.15.tgz#cc70d86804c35d6adedbc572cb4edc3a02df5e42" + integrity sha512-XHg8TjviTtByOplkflnGF2vfTNiShvc7g+FzRXfkljCWvZ3tjoz2dPH+TKsL07XQaTB/mG50+t7t6qi53pyJiw== "@next/swc-linux-arm64-gnu@12.1.4": version "12.1.4" @@ -2422,10 +2457,15 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.0.tgz#69505827e2928fb18034150fd4d754d54c4a1c4b" integrity sha512-x6Oxr1GIi0ZtNiT6jbw+JVcbEi3UQgF7mMmkrgfL4mfchOwXtWSHKTSSPnwoJWJfXYa0Vy1n8NElWNTGAqoWFw== -"@next/swc-linux-arm64-gnu@13.1.7-canary.7": - version "13.1.7-canary.7" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.7-canary.7.tgz#e30fa2e5ddece4964a385030c0da5a2ed18b712e" - integrity sha512-Bgd7FzE0c2WqIrmUW/5+88/csT+E/H0oOSc8OoQwd9eQNPgUxAYjY/UHEg4LEVZTkEKe1VbIo3j6g6EHI5wrGg== +"@next/swc-linux-arm64-gnu@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.6.tgz#87a71db21cded3f7c63d1d19079845c59813c53d" + integrity sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ== + +"@next/swc-linux-arm64-gnu@13.1.7-canary.15": + version "13.1.7-canary.15" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.7-canary.15.tgz#46d157621e74ed1866e7dda40a18c9d6587de675" + integrity sha512-mU+3d4FflsqpMoboC4JD0uEBsRWM/OX2x3tyQ28JljiCuiPqmF9cmPjr9rlWNzxBZd2ACuR970PUixI99b07qA== "@next/swc-linux-arm64-musl@12.1.4": version "12.1.4" @@ -2437,10 +2477,15 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.0.tgz#487a88f2583a046e882328fe0665b37eca4fd0f6" integrity sha512-SnMH9ngI+ipGh3kqQ8+mDtWunirwmhQnQeZkEq9e/9Xsgjf04OetqrqRHKM1HmJtG2qMUJbyXFJ0F81TPuT+3g== -"@next/swc-linux-arm64-musl@13.1.7-canary.7": - version "13.1.7-canary.7" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.7-canary.7.tgz#af2477dc977ffc8237d461c07eb1b6805aee5b22" - integrity sha512-TiwJ77MiY+V2zmvzfJx9WJ17LsSf/r6oCzAevya9yAm0LWgzD7zRxksZ3JGFUKWXouVDIHLlFQy3aXEOG2vGqA== +"@next/swc-linux-arm64-musl@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.6.tgz#c5aac8619331b9fd030603bbe2b36052011e11de" + integrity sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ== + +"@next/swc-linux-arm64-musl@13.1.7-canary.15": + version "13.1.7-canary.15" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.7-canary.15.tgz#6d76b090a4b1aab7c1c7caaa742bfc4e369b0124" + integrity sha512-xR2UFMaXCtIOZcnRBjDje9Q/KH9k93Lwjzlh66clPnK1Npc1gNA4qeXQu4blQLxhrP0PSNUj5A91P/zCyyrTmw== "@next/swc-linux-x64-gnu@12.1.4": version "12.1.4" @@ -2452,10 +2497,15 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.0.tgz#29e89c7e4fd2e2b16ad059076f6261998aee53df" integrity sha512-VSQwTX9EmdbotArtA1J67X8964oQfe0xHb32x4tu+JqTR+wOHyG6wGzPMdXH2oKAp6rdd7BzqxUXXf0J+ypHlw== -"@next/swc-linux-x64-gnu@13.1.7-canary.7": - version "13.1.7-canary.7" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.7-canary.7.tgz#1d6fc813b06642ac000efb838e930c0f42e1d577" - integrity sha512-CJzqJUiktVmauoCZa62CVya7scI3qvlZ96KyAUU2aURCvu2GfPtXpK6khQ1JAZyEYdnpPoQ4aQQS2yY+fWHguQ== +"@next/swc-linux-x64-gnu@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.6.tgz#9513d36d540bbfea575576746736054c31aacdea" + integrity sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q== + +"@next/swc-linux-x64-gnu@13.1.7-canary.15": + version "13.1.7-canary.15" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.7-canary.15.tgz#8b502bbc370d34586f2879771069773d56aaa95a" + integrity sha512-8B6Q7CtNnuP6U6I82nEZ+izsFarrLeYKl42i+fH0YcP+ouMZK3Zyo/qYSIaZ/R0kvYTKIRFpnRtsSH/g4zqj9Q== "@next/swc-linux-x64-musl@12.1.4": version "12.1.4" @@ -2467,10 +2517,15 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.0.tgz#2f63aae922d2b2829aec21bf8f9adda8b6c16365" integrity sha512-xBCP0nnpO0q4tsytXkvIwWFINtbFRyVY5gxa1zB0vlFtqYR9lNhrOwH3CBrks3kkeaePOXd611+8sjdUtrLnXA== -"@next/swc-linux-x64-musl@13.1.7-canary.7": - version "13.1.7-canary.7" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.7-canary.7.tgz#837fecc52b255ea3e5c1fc1b66f1c08d49eae343" - integrity sha512-wISnRcHz5vYkE86LYER0Y3TZsAorpOhMg83NaXXxRDPfR+a7umejFIgvslPnWRcbYy2kCgGRlBtW5lDEYzhJXA== +"@next/swc-linux-x64-musl@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.6.tgz#d61fc6884899f5957251f4ce3f522e34a2c479b7" + integrity sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ== + +"@next/swc-linux-x64-musl@13.1.7-canary.15": + version "13.1.7-canary.15" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.7-canary.15.tgz#0a39d606bcb9ab2d87bf1069d94f768226c856bb" + integrity sha512-jc9Lq3RubBwiOuz8WBu9PrZE2UtjM9mIKMxlklZtagm8I1q0/WFswiWrCo5IfzbvM2XTsnLk5UygKRxrYSNkKw== "@next/swc-win32-arm64-msvc@12.1.4": version "12.1.4" @@ -2482,10 +2537,15 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.0.tgz#4117bad96c2a6775f70294fba45c63951a8a21ac" integrity sha512-NutwDafqhGxqPj/eiUixJq9ImS/0sgx6gqlD7jRndCvQ2Q8AvDdu1+xKcGWGNnhcDsNM/n1avf1e62OG1GaqJg== -"@next/swc-win32-arm64-msvc@13.1.7-canary.7": - version "13.1.7-canary.7" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.7-canary.7.tgz#da869c79b6fee09b8c7ab74bea708ce63d87691d" - integrity sha512-WtQTpLUHHDbL2U6dFdIlHErKHkL78jDIfoqCxjaxRvBBKvJYM1fZalr35Zes8HFpk4UAI5agMp12j2AjDdKVRQ== +"@next/swc-win32-arm64-msvc@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.6.tgz#fac2077a8ae9768e31444c9ae90807e64117cda7" + integrity sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ== + +"@next/swc-win32-arm64-msvc@13.1.7-canary.15": + version "13.1.7-canary.15" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.7-canary.15.tgz#43a696ef62d8f403ba7436c9270231fd08e3dd3c" + integrity sha512-dTGavwBf58RmfjT0Bhkxy+p2tz/A4bKP1ySNlvdrSJEXa6ey4D6/LHTMA856pFoxyfZOBc9lJ7v0gv0kf+BQFQ== "@next/swc-win32-ia32-msvc@12.1.4": version "12.1.4" @@ -2497,10 +2557,15 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.0.tgz#5914eb86f9ea92a00d76cb094dd9734b3bf2012c" integrity sha512-zNaxaO+Kl/xNz02E9QlcVz0pT4MjkXGDLb25qxtAzyJL15aU0+VjjbIZAYWctG59dvggNIUNDWgoBeVTKB9xLg== -"@next/swc-win32-ia32-msvc@13.1.7-canary.7": - version "13.1.7-canary.7" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.7-canary.7.tgz#db19042755838506e013a05ae5a89b4d39127797" - integrity sha512-fPubKDnOYgRpUf1PdgejSw7UeHJGC4Hzx4evYDzay2balVRrC5nO9s6OBDv82/JfNPVqB9rAjBC9d0LPUwanMg== +"@next/swc-win32-ia32-msvc@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.6.tgz#498bc11c91b4c482a625bf4b978f98ae91111e46" + integrity sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w== + +"@next/swc-win32-ia32-msvc@13.1.7-canary.15": + version "13.1.7-canary.15" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.7-canary.15.tgz#d9c35062d65898d9843b9edcba140a150f9281c5" + integrity sha512-vAjWph1GSpMfxp5GraKKA9rqs1kIGUkn1PL54Yy8/t9X+x8nbCqc7E9uZPvGkWGCh6hGBQJ0lKTIzGnxW7QMhA== "@next/swc-win32-x64-msvc@12.1.4": version "12.1.4" @@ -2512,10 +2577,15 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.0.tgz#c54a5a739dee04b20338d305226a2acdf701f67f" integrity sha512-FFOGGWwTCRMu9W7MF496Urefxtuo2lttxF1vwS+1rIRsKvuLrWhVaVTj3T8sf2EBL6gtJbmh4TYlizS+obnGKA== -"@next/swc-win32-x64-msvc@13.1.7-canary.7": - version "13.1.7-canary.7" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.7-canary.7.tgz#32e94f2cbb0d944e227ae9d6d04352ecf895b086" - integrity sha512-Cc2G7Di4wKjIb74vrCmxlmn5F6FAMmVX/Gx/Tl7NuUSL+YYXrMrw55FCe6WyBawbF+7CeoPTZKhp3YmPWp1ASQ== +"@next/swc-win32-x64-msvc@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.6.tgz#17ed919c723426b7d0ce1cd73d40ce3dcd342089" + integrity sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA== + +"@next/swc-win32-x64-msvc@13.1.7-canary.15": + version "13.1.7-canary.15" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.7-canary.15.tgz#3bd71f7211d189e99904370e5c49f2bc63ec42f5" + integrity sha512-oFuTy4PyFav5n1cejXCHlm7J5aYz9z4CguBJc6Mp5HLetfxqGGZCQb43z+r+UDonfr49HH2n75dt06nmWNPnQQ== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -9167,6 +9237,31 @@ next-themes@^0.2.0-beta.0: resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.2.0-beta.0.tgz#4894b360116020dee9f89b8b8f01896f78caab11" integrity sha512-vzF6V1cWo6LVuMZkTpsP3+7roc14X8VTRgyiZT/6TWzcd7sLdE+y/6F1WiXEvKg+IqwdUb8g3KwC20Fo1yUYqw== +next@13.1.7-canary.15: + version "13.1.7-canary.15" + resolved "https://registry.yarnpkg.com/next/-/next-13.1.7-canary.15.tgz#d02dc799d36cfd87d6036666d73848d806890644" + integrity sha512-NBywyj3xjM1nc5vtdqLNNMDrRrFRyDtjKHbLwjkT0BFQ5OKlHP0VFWFtd2RNq86gj7nfTdQ1zCvWPiYAzuGjcQ== + dependencies: + "@next/env" "13.1.7-canary.15" + "@swc/helpers" "0.4.14" + caniuse-lite "^1.0.30001406" + postcss "8.4.14" + styled-jsx "5.1.1" + optionalDependencies: + "@next/swc-android-arm-eabi" "13.1.7-canary.15" + "@next/swc-android-arm64" "13.1.7-canary.15" + "@next/swc-darwin-arm64" "13.1.7-canary.15" + "@next/swc-darwin-x64" "13.1.7-canary.15" + "@next/swc-freebsd-x64" "13.1.7-canary.15" + "@next/swc-linux-arm-gnueabihf" "13.1.7-canary.15" + "@next/swc-linux-arm64-gnu" "13.1.7-canary.15" + "@next/swc-linux-arm64-musl" "13.1.7-canary.15" + "@next/swc-linux-x64-gnu" "13.1.7-canary.15" + "@next/swc-linux-x64-musl" "13.1.7-canary.15" + "@next/swc-win32-arm64-msvc" "13.1.7-canary.15" + "@next/swc-win32-ia32-msvc" "13.1.7-canary.15" + "@next/swc-win32-x64-msvc" "13.1.7-canary.15" + next@^12.1.0: version "12.1.4" resolved "https://registry.yarnpkg.com/next/-/next-12.1.4.tgz#597a9bdec7aec778b442c4f6d41afd2c64a54b23" @@ -9216,30 +9311,30 @@ next@^13.0.0: "@next/swc-win32-ia32-msvc" "13.0.0" "@next/swc-win32-x64-msvc" "13.0.0" -next@canary: - version "13.1.7-canary.7" - resolved "https://registry.yarnpkg.com/next/-/next-13.1.7-canary.7.tgz#1526687ed0d765c49930ea378fb63a1e7ee45747" - integrity sha512-ekVXWHSPLsE799i97f0qYpElO+CsG5V9/48KmxlL/g5ASuLB/BNmR2Lj+zqO8s7q7qjV+JteMwFl2dXH4srgNg== +next@^13.1.1: + version "13.1.6" + resolved "https://registry.yarnpkg.com/next/-/next-13.1.6.tgz#054babe20b601f21f682f197063c9b0b32f1a27c" + integrity sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw== dependencies: - "@next/env" "13.1.7-canary.7" + "@next/env" "13.1.6" "@swc/helpers" "0.4.14" caniuse-lite "^1.0.30001406" postcss "8.4.14" styled-jsx "5.1.1" optionalDependencies: - "@next/swc-android-arm-eabi" "13.1.7-canary.7" - "@next/swc-android-arm64" "13.1.7-canary.7" - "@next/swc-darwin-arm64" "13.1.7-canary.7" - "@next/swc-darwin-x64" "13.1.7-canary.7" - "@next/swc-freebsd-x64" "13.1.7-canary.7" - "@next/swc-linux-arm-gnueabihf" "13.1.7-canary.7" - "@next/swc-linux-arm64-gnu" "13.1.7-canary.7" - "@next/swc-linux-arm64-musl" "13.1.7-canary.7" - "@next/swc-linux-x64-gnu" "13.1.7-canary.7" - "@next/swc-linux-x64-musl" "13.1.7-canary.7" - "@next/swc-win32-arm64-msvc" "13.1.7-canary.7" - "@next/swc-win32-ia32-msvc" "13.1.7-canary.7" - "@next/swc-win32-x64-msvc" "13.1.7-canary.7" + "@next/swc-android-arm-eabi" "13.1.6" + "@next/swc-android-arm64" "13.1.6" + "@next/swc-darwin-arm64" "13.1.6" + "@next/swc-darwin-x64" "13.1.6" + "@next/swc-freebsd-x64" "13.1.6" + "@next/swc-linux-arm-gnueabihf" "13.1.6" + "@next/swc-linux-arm64-gnu" "13.1.6" + "@next/swc-linux-arm64-musl" "13.1.6" + "@next/swc-linux-x64-gnu" "13.1.6" + "@next/swc-linux-x64-musl" "13.1.6" + "@next/swc-win32-arm64-msvc" "13.1.6" + "@next/swc-win32-ia32-msvc" "13.1.6" + "@next/swc-win32-x64-msvc" "13.1.6" nextra-theme-docs@2.0.0-alpha.44: version "2.0.0-alpha.44" From 5d6ce8a5d55bc3d9cd6cf37ef5a3ca6cf8a424a8 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 16 Feb 2023 09:22:46 +0100 Subject: [PATCH 132/312] Use latest stable version of Next.js --- .../example-next-13-advanced/next-env.d.ts | 1 - .../example-next-13-advanced/package.json | 2 +- .../tests/main.spec.ts | 2 +- packages/example-next-13/package.json | 2 +- packages/next-intl/package.json | 2 +- .../pages/docs/next-13/server-components.mdx | 2 +- yarn.lock | 131 +++--------------- 7 files changed, 23 insertions(+), 119 deletions(-) diff --git a/packages/example-next-13-advanced/next-env.d.ts b/packages/example-next-13-advanced/next-env.d.ts index 7aa8e8ef7..4f11a03dc 100644 --- a/packages/example-next-13-advanced/next-env.d.ts +++ b/packages/example-next-13-advanced/next-env.d.ts @@ -1,6 +1,5 @@ /// /// -/// // NOTE: This file should not be edited // see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/packages/example-next-13-advanced/package.json b/packages/example-next-13-advanced/package.json index 1a64f37f9..f7ace9f58 100644 --- a/packages/example-next-13-advanced/package.json +++ b/packages/example-next-13-advanced/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "lodash": "^4.17.21", - "next": "13.1.7-canary.15", + "next": "13.1.6", "next-intl": "*", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index 21bda5c69..85f17de6e 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -337,7 +337,7 @@ it('keeps search params for redirects', async ({browser}) => { ); }); -it('keeps route handlers intact', async ({request}) => { +it.skip('keeps route handlers intact', async ({request}) => { const response = await request.get('/api'); expect(response.status()).toBe(200); const data = await response.json(); diff --git a/packages/example-next-13/package.json b/packages/example-next-13/package.json index 68d9b81f8..53b527b0f 100644 --- a/packages/example-next-13/package.json +++ b/packages/example-next-13/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "lodash": "^4.17.21", - "next": "13.1.7-canary.15", + "next": "13.1.6", "next-intl": "^2.10.2", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 961688c4c..8063d578c 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -81,7 +81,7 @@ "dts-cli": "1.4.0", "eslint": "8.12.0", "eslint-config-molindo": "6.0.0", - "next": "13.1.7-canary.15", + "next": "13.1.6", "react": "^18.2.0", "react-dom": "^18.2.0", "typescript": "^4.4.4" diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index a7e13a92f..8a489086e 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -21,7 +21,7 @@ This beta version was tested with `next@13.1.6`. ## Roadmap - ✅ All APIs from `next-intl` can be used in Server Components. -- 💡 Currently SSR-only (i.e. no `generateStaticParams`). You should use [CDN caching](https://youtu.be/bfLFHp7Sbkg?t=490) via [`headers` in `next.config.js`](https://nextjs.org/docs/api-reference/next.config.js/headers). +- 💡 Currently SSR-only (i.e. no `generateStaticParams`). You can use [CDN caching](https://youtu.be/bfLFHp7Sbkg?t=490) via [`headers` in `next.config.js`](https://nextjs.org/docs/api-reference/next.config.js/headers) to get the same level of performance from SSR'd pages. For details, see the [pending pull request for Server Components support](https://github.com/amannn/next-intl/pull/149). diff --git a/yarn.lock b/yarn.lock index db3251914..702e75c3a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2313,11 +2313,6 @@ resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.6.tgz#c4925609f16142ded1a5cb833359ab17359b7a93" integrity sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg== -"@next/env@13.1.7-canary.15": - version "13.1.7-canary.15" - resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.7-canary.15.tgz#b18392a37e41be1dc8927a8f047627c0cfdf6816" - integrity sha512-LoZMSEGgm/Cb5I36qtnna/IX908AZPNzRCh7unwHWSvyn8EiO+HzW2w6DKzTI8ne5EASMtt1z4VfWTtE/nVLhg== - "@next/eslint-plugin-next@12.0.1": version "12.0.1" resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.0.1.tgz#6e1c39143bdc79252e5601b4e5abfbd2cc8c26ad" @@ -2347,11 +2342,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.6.tgz#d766dfc10e27814d947b20f052067c239913dbcc" integrity sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ== -"@next/swc-android-arm-eabi@13.1.7-canary.15": - version "13.1.7-canary.15" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.7-canary.15.tgz#16b71374d7e2dc944944114af1178f57d4236a38" - integrity sha512-LeLp9vm+DtryRwEdH4B7HR0yntV7dJTyjAZ2VKQDlJHEmIxeomeQw9tyscpKD1nuUP8VCBCXZ0o540VOtk6khw== - "@next/swc-android-arm64@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.1.4.tgz#f320d60639e19ecffa1f9034829f2d95502a9a51" @@ -2367,11 +2357,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.6.tgz#f37a98d5f18927d8c9970d750d516ac779465176" integrity sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw== -"@next/swc-android-arm64@13.1.7-canary.15": - version "13.1.7-canary.15" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.7-canary.15.tgz#f83c7694e5cce7f31da0d21cd4ddfce09d88afd9" - integrity sha512-DcK1czYr2xyGge+5lPFBi5i0D1ejitLA8Cl2Sc/Vx7QRNHAcfT1b6R0o9hdPBSuxcWalHzL19PvLV/3FlyQzGg== - "@next/swc-darwin-arm64@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.4.tgz#fd578278312613eddcf3aee26910100509941b63" @@ -2387,11 +2372,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.6.tgz#ec1b90fd9bf809d8b81004c5182e254dced4ad96" integrity sha512-KKRQH4DDE4kONXCvFMNBZGDb499Hs+xcFAwvj+rfSUssIDrZOlyfJNy55rH5t2Qxed1e4K80KEJgsxKQN1/fyw== -"@next/swc-darwin-arm64@13.1.7-canary.15": - version "13.1.7-canary.15" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.7-canary.15.tgz#5436585df0e655502e79f4e359754312e112c605" - integrity sha512-zHwrJGHtpw22s6qrQzUTYLMvIgknog66a8jNCC0+iSI8Xejgmq+900yJ3c8xrzR29uEZqXkjcVDcGzBtqGdPqw== - "@next/swc-darwin-x64@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.4.tgz#ace5f80d8c8348efe194f6d7074c6213c52b3944" @@ -2407,11 +2387,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.6.tgz#e869ac75d16995eee733a7d1550322d9051c1eb4" integrity sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA== -"@next/swc-darwin-x64@13.1.7-canary.15": - version "13.1.7-canary.15" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.7-canary.15.tgz#fee7d70d797d99c02d5ebdba8c1b1b3b103e3e58" - integrity sha512-aF6BW1b1Sny+oIw9LuBdXdzimhZODmhm8uz9xgMMiJlvF4w+Q0UptkNnGmbZe4peameRKKqzT/FnGxIFXhmswA== - "@next/swc-freebsd-x64@13.0.0": version "13.0.0" resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.0.tgz#eeb176bdb585f48882bdac1d04271b918ca87590" @@ -2422,11 +2397,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.6.tgz#84a7b2e423a2904afc2edca21c2f1ba6b53fa4c1" integrity sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw== -"@next/swc-freebsd-x64@13.1.7-canary.15": - version "13.1.7-canary.15" - resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.7-canary.15.tgz#db94061be6a04a9e35292e921a0859bdbde2d844" - integrity sha512-kq82F4A7TBGMDRT5nGxaiuaWpqeovMG+NizVZwB17FSr81qb2bwq8nF0Iy8Aw9feFWAvPHictvRTgeaU0ycxTA== - "@next/swc-linux-arm-gnueabihf@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.4.tgz#2bf2c83863635f19c71c226a2df936e001cce29c" @@ -2442,11 +2412,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.6.tgz#980eed1f655ff8a72187d8a6ef9e73ac39d20d23" integrity sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw== -"@next/swc-linux-arm-gnueabihf@13.1.7-canary.15": - version "13.1.7-canary.15" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.7-canary.15.tgz#cc70d86804c35d6adedbc572cb4edc3a02df5e42" - integrity sha512-XHg8TjviTtByOplkflnGF2vfTNiShvc7g+FzRXfkljCWvZ3tjoz2dPH+TKsL07XQaTB/mG50+t7t6qi53pyJiw== - "@next/swc-linux-arm64-gnu@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.4.tgz#d577190f641c9b4b463719dd6b8953b6ba9be8d9" @@ -2462,11 +2427,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.6.tgz#87a71db21cded3f7c63d1d19079845c59813c53d" integrity sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ== -"@next/swc-linux-arm64-gnu@13.1.7-canary.15": - version "13.1.7-canary.15" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.7-canary.15.tgz#46d157621e74ed1866e7dda40a18c9d6587de675" - integrity sha512-mU+3d4FflsqpMoboC4JD0uEBsRWM/OX2x3tyQ28JljiCuiPqmF9cmPjr9rlWNzxBZd2ACuR970PUixI99b07qA== - "@next/swc-linux-arm64-musl@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.4.tgz#e70ffe70393d8f9242deecdb282ce5a8fd588b14" @@ -2482,11 +2442,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.6.tgz#c5aac8619331b9fd030603bbe2b36052011e11de" integrity sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ== -"@next/swc-linux-arm64-musl@13.1.7-canary.15": - version "13.1.7-canary.15" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.7-canary.15.tgz#6d76b090a4b1aab7c1c7caaa742bfc4e369b0124" - integrity sha512-xR2UFMaXCtIOZcnRBjDje9Q/KH9k93Lwjzlh66clPnK1Npc1gNA4qeXQu4blQLxhrP0PSNUj5A91P/zCyyrTmw== - "@next/swc-linux-x64-gnu@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.4.tgz#91498a130387fb1961902f2bee55863f8e910cff" @@ -2502,11 +2457,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.6.tgz#9513d36d540bbfea575576746736054c31aacdea" integrity sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q== -"@next/swc-linux-x64-gnu@13.1.7-canary.15": - version "13.1.7-canary.15" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.7-canary.15.tgz#8b502bbc370d34586f2879771069773d56aaa95a" - integrity sha512-8B6Q7CtNnuP6U6I82nEZ+izsFarrLeYKl42i+fH0YcP+ouMZK3Zyo/qYSIaZ/R0kvYTKIRFpnRtsSH/g4zqj9Q== - "@next/swc-linux-x64-musl@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.4.tgz#78057b03c148c121553d41521ad38f6c732762ff" @@ -2522,11 +2472,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.6.tgz#d61fc6884899f5957251f4ce3f522e34a2c479b7" integrity sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ== -"@next/swc-linux-x64-musl@13.1.7-canary.15": - version "13.1.7-canary.15" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.7-canary.15.tgz#0a39d606bcb9ab2d87bf1069d94f768226c856bb" - integrity sha512-jc9Lq3RubBwiOuz8WBu9PrZE2UtjM9mIKMxlklZtagm8I1q0/WFswiWrCo5IfzbvM2XTsnLk5UygKRxrYSNkKw== - "@next/swc-win32-arm64-msvc@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.4.tgz#05bbaabacac23b8edf6caa99eb86b17550a09051" @@ -2542,11 +2487,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.6.tgz#fac2077a8ae9768e31444c9ae90807e64117cda7" integrity sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ== -"@next/swc-win32-arm64-msvc@13.1.7-canary.15": - version "13.1.7-canary.15" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.7-canary.15.tgz#43a696ef62d8f403ba7436c9270231fd08e3dd3c" - integrity sha512-dTGavwBf58RmfjT0Bhkxy+p2tz/A4bKP1ySNlvdrSJEXa6ey4D6/LHTMA856pFoxyfZOBc9lJ7v0gv0kf+BQFQ== - "@next/swc-win32-ia32-msvc@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.4.tgz#8fd2fb48f04a2802e51fc320878bf6b411c1c866" @@ -2562,11 +2502,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.6.tgz#498bc11c91b4c482a625bf4b978f98ae91111e46" integrity sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w== -"@next/swc-win32-ia32-msvc@13.1.7-canary.15": - version "13.1.7-canary.15" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.7-canary.15.tgz#d9c35062d65898d9843b9edcba140a150f9281c5" - integrity sha512-vAjWph1GSpMfxp5GraKKA9rqs1kIGUkn1PL54Yy8/t9X+x8nbCqc7E9uZPvGkWGCh6hGBQJ0lKTIzGnxW7QMhA== - "@next/swc-win32-x64-msvc@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.4.tgz#a72ed44c9b1f850986a30fe36c59e01f8a79b5f3" @@ -2582,11 +2517,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.6.tgz#17ed919c723426b7d0ce1cd73d40ce3dcd342089" integrity sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA== -"@next/swc-win32-x64-msvc@13.1.7-canary.15": - version "13.1.7-canary.15" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.7-canary.15.tgz#3bd71f7211d189e99904370e5c49f2bc63ec42f5" - integrity sha512-oFuTy4PyFav5n1cejXCHlm7J5aYz9z4CguBJc6Mp5HLetfxqGGZCQb43z+r+UDonfr49HH2n75dt06nmWNPnQQ== - "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -9237,30 +9167,30 @@ next-themes@^0.2.0-beta.0: resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.2.0-beta.0.tgz#4894b360116020dee9f89b8b8f01896f78caab11" integrity sha512-vzF6V1cWo6LVuMZkTpsP3+7roc14X8VTRgyiZT/6TWzcd7sLdE+y/6F1WiXEvKg+IqwdUb8g3KwC20Fo1yUYqw== -next@13.1.7-canary.15: - version "13.1.7-canary.15" - resolved "https://registry.yarnpkg.com/next/-/next-13.1.7-canary.15.tgz#d02dc799d36cfd87d6036666d73848d806890644" - integrity sha512-NBywyj3xjM1nc5vtdqLNNMDrRrFRyDtjKHbLwjkT0BFQ5OKlHP0VFWFtd2RNq86gj7nfTdQ1zCvWPiYAzuGjcQ== +next@13.1.6, next@^13.1.1: + version "13.1.6" + resolved "https://registry.yarnpkg.com/next/-/next-13.1.6.tgz#054babe20b601f21f682f197063c9b0b32f1a27c" + integrity sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw== dependencies: - "@next/env" "13.1.7-canary.15" + "@next/env" "13.1.6" "@swc/helpers" "0.4.14" caniuse-lite "^1.0.30001406" postcss "8.4.14" styled-jsx "5.1.1" optionalDependencies: - "@next/swc-android-arm-eabi" "13.1.7-canary.15" - "@next/swc-android-arm64" "13.1.7-canary.15" - "@next/swc-darwin-arm64" "13.1.7-canary.15" - "@next/swc-darwin-x64" "13.1.7-canary.15" - "@next/swc-freebsd-x64" "13.1.7-canary.15" - "@next/swc-linux-arm-gnueabihf" "13.1.7-canary.15" - "@next/swc-linux-arm64-gnu" "13.1.7-canary.15" - "@next/swc-linux-arm64-musl" "13.1.7-canary.15" - "@next/swc-linux-x64-gnu" "13.1.7-canary.15" - "@next/swc-linux-x64-musl" "13.1.7-canary.15" - "@next/swc-win32-arm64-msvc" "13.1.7-canary.15" - "@next/swc-win32-ia32-msvc" "13.1.7-canary.15" - "@next/swc-win32-x64-msvc" "13.1.7-canary.15" + "@next/swc-android-arm-eabi" "13.1.6" + "@next/swc-android-arm64" "13.1.6" + "@next/swc-darwin-arm64" "13.1.6" + "@next/swc-darwin-x64" "13.1.6" + "@next/swc-freebsd-x64" "13.1.6" + "@next/swc-linux-arm-gnueabihf" "13.1.6" + "@next/swc-linux-arm64-gnu" "13.1.6" + "@next/swc-linux-arm64-musl" "13.1.6" + "@next/swc-linux-x64-gnu" "13.1.6" + "@next/swc-linux-x64-musl" "13.1.6" + "@next/swc-win32-arm64-msvc" "13.1.6" + "@next/swc-win32-ia32-msvc" "13.1.6" + "@next/swc-win32-x64-msvc" "13.1.6" next@^12.1.0: version "12.1.4" @@ -9311,31 +9241,6 @@ next@^13.0.0: "@next/swc-win32-ia32-msvc" "13.0.0" "@next/swc-win32-x64-msvc" "13.0.0" -next@^13.1.1: - version "13.1.6" - resolved "https://registry.yarnpkg.com/next/-/next-13.1.6.tgz#054babe20b601f21f682f197063c9b0b32f1a27c" - integrity sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw== - dependencies: - "@next/env" "13.1.6" - "@swc/helpers" "0.4.14" - caniuse-lite "^1.0.30001406" - postcss "8.4.14" - styled-jsx "5.1.1" - optionalDependencies: - "@next/swc-android-arm-eabi" "13.1.6" - "@next/swc-android-arm64" "13.1.6" - "@next/swc-darwin-arm64" "13.1.6" - "@next/swc-darwin-x64" "13.1.6" - "@next/swc-freebsd-x64" "13.1.6" - "@next/swc-linux-arm-gnueabihf" "13.1.6" - "@next/swc-linux-arm64-gnu" "13.1.6" - "@next/swc-linux-arm64-musl" "13.1.6" - "@next/swc-linux-x64-gnu" "13.1.6" - "@next/swc-linux-x64-musl" "13.1.6" - "@next/swc-win32-arm64-msvc" "13.1.6" - "@next/swc-win32-ia32-msvc" "13.1.6" - "@next/swc-win32-x64-msvc" "13.1.6" - nextra-theme-docs@2.0.0-alpha.44: version "2.0.0-alpha.44" resolved "https://registry.yarnpkg.com/nextra-theme-docs/-/nextra-theme-docs-2.0.0-alpha.44.tgz#ec26828a536521c2353c77fbeeff33ea4d591e89" From 026691e0eb45cc9cefbb00b59a44a7589c5bcb3b Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 16 Feb 2023 09:33:22 +0100 Subject: [PATCH 133/312] Use canary with support for new metadata API --- .../example-next-13-advanced/package.json | 2 +- packages/example-next-13/package.json | 2 +- packages/next-intl/package.json | 2 +- yarn.lock | 131 +++++++++++++++--- 4 files changed, 116 insertions(+), 21 deletions(-) diff --git a/packages/example-next-13-advanced/package.json b/packages/example-next-13-advanced/package.json index f7ace9f58..a0798e7df 100644 --- a/packages/example-next-13-advanced/package.json +++ b/packages/example-next-13-advanced/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "lodash": "^4.17.21", - "next": "13.1.6", + "next": "13.1.7-canary.7", "next-intl": "*", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/example-next-13/package.json b/packages/example-next-13/package.json index 53b527b0f..e1b5ea2ef 100644 --- a/packages/example-next-13/package.json +++ b/packages/example-next-13/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "lodash": "^4.17.21", - "next": "13.1.6", + "next": "13.1.7-canary.7", "next-intl": "^2.10.2", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 8063d578c..a242b77df 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -81,7 +81,7 @@ "dts-cli": "1.4.0", "eslint": "8.12.0", "eslint-config-molindo": "6.0.0", - "next": "13.1.6", + "next": "13.1.7-canary.7", "react": "^18.2.0", "react-dom": "^18.2.0", "typescript": "^4.4.4" diff --git a/yarn.lock b/yarn.lock index 702e75c3a..ea5272ba1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2313,6 +2313,11 @@ resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.6.tgz#c4925609f16142ded1a5cb833359ab17359b7a93" integrity sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg== +"@next/env@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.7-canary.7.tgz#0d32871cd2c9d30689ce7696f6ebd24c4dbaca54" + integrity sha512-hRrDd5Kzo9MnAeTxHkf47gQxzR7hiDKQquAyKNa4Cpre/vL6ZMerr53J4BuIIgToyvYu49Of+QI2SdyArFbxhA== + "@next/eslint-plugin-next@12.0.1": version "12.0.1" resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.0.1.tgz#6e1c39143bdc79252e5601b4e5abfbd2cc8c26ad" @@ -2342,6 +2347,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.6.tgz#d766dfc10e27814d947b20f052067c239913dbcc" integrity sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ== +"@next/swc-android-arm-eabi@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.7-canary.7.tgz#ce9df22859489a3b098414601bbba4cd2f48b510" + integrity sha512-0np5XOLL112tgzOz1uxyeKoabhwHSQG6zFwbCJxmYwBXa3LH9CB55cOT56jW4xaqZSQhNWG1UEyISiOMJ0XXRg== + "@next/swc-android-arm64@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.1.4.tgz#f320d60639e19ecffa1f9034829f2d95502a9a51" @@ -2357,6 +2367,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.6.tgz#f37a98d5f18927d8c9970d750d516ac779465176" integrity sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw== +"@next/swc-android-arm64@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.7-canary.7.tgz#0eb443cbb91946973a245793607a0e5093549d92" + integrity sha512-Qrso/wINns3fgmrrRCojvEIgXWE2QKTySspc/zMklUa9ck4RUiCRpKV3O0+sAGx68ZqKzQOrJFsp2cLHWX45AQ== + "@next/swc-darwin-arm64@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.4.tgz#fd578278312613eddcf3aee26910100509941b63" @@ -2372,6 +2387,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.6.tgz#ec1b90fd9bf809d8b81004c5182e254dced4ad96" integrity sha512-KKRQH4DDE4kONXCvFMNBZGDb499Hs+xcFAwvj+rfSUssIDrZOlyfJNy55rH5t2Qxed1e4K80KEJgsxKQN1/fyw== +"@next/swc-darwin-arm64@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.7-canary.7.tgz#11925aa69fb6f3b00e4b93a6f5b6a9431e474f95" + integrity sha512-aBzwyTed3TBVDRvr3SuCCkmJ40YT+7hoSgeBu+MHAVM4SUhVq6C+tTQqpk56fDI6Q5aB34feswvgZQcJD1Wibw== + "@next/swc-darwin-x64@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.4.tgz#ace5f80d8c8348efe194f6d7074c6213c52b3944" @@ -2387,6 +2407,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.6.tgz#e869ac75d16995eee733a7d1550322d9051c1eb4" integrity sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA== +"@next/swc-darwin-x64@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.7-canary.7.tgz#1b2825d7c1c06ef71a0559df4507cf929e8bbf2b" + integrity sha512-/d/lNcR81i+pOmudnR1prtWs4OTnxD/M94JCYMbXAaH1+EDUUALYNbPYmOaPgKeYOvlLHTkbhnhdaTeepbitlg== + "@next/swc-freebsd-x64@13.0.0": version "13.0.0" resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.0.tgz#eeb176bdb585f48882bdac1d04271b918ca87590" @@ -2397,6 +2422,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.6.tgz#84a7b2e423a2904afc2edca21c2f1ba6b53fa4c1" integrity sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw== +"@next/swc-freebsd-x64@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.7-canary.7.tgz#b11117a78ab2ee7ecb9d0431ecdff1d72a72ebe7" + integrity sha512-/NtZDP2FEm6LeBUvJPHg4B6ubQJSz1W5s1Ijbcj+O/w45iCbGBOagozvHXax5hapYYrQh2RylaBJjIYBI1VlaQ== + "@next/swc-linux-arm-gnueabihf@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.4.tgz#2bf2c83863635f19c71c226a2df936e001cce29c" @@ -2412,6 +2442,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.6.tgz#980eed1f655ff8a72187d8a6ef9e73ac39d20d23" integrity sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw== +"@next/swc-linux-arm-gnueabihf@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.7-canary.7.tgz#b35d654c6fe939e6b5a9b6f8e787b26ed15e668d" + integrity sha512-/+M97v9gNP5PDLnrQzLpaiXGhz9B/TjkkDKC+KHMMv0vXPN+F0Db72Sz7EX+ax2+xTwbCcvZLqkK5uA5gnWEvw== + "@next/swc-linux-arm64-gnu@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.4.tgz#d577190f641c9b4b463719dd6b8953b6ba9be8d9" @@ -2427,6 +2462,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.6.tgz#87a71db21cded3f7c63d1d19079845c59813c53d" integrity sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ== +"@next/swc-linux-arm64-gnu@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.7-canary.7.tgz#e30fa2e5ddece4964a385030c0da5a2ed18b712e" + integrity sha512-Bgd7FzE0c2WqIrmUW/5+88/csT+E/H0oOSc8OoQwd9eQNPgUxAYjY/UHEg4LEVZTkEKe1VbIo3j6g6EHI5wrGg== + "@next/swc-linux-arm64-musl@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.4.tgz#e70ffe70393d8f9242deecdb282ce5a8fd588b14" @@ -2442,6 +2482,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.6.tgz#c5aac8619331b9fd030603bbe2b36052011e11de" integrity sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ== +"@next/swc-linux-arm64-musl@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.7-canary.7.tgz#af2477dc977ffc8237d461c07eb1b6805aee5b22" + integrity sha512-TiwJ77MiY+V2zmvzfJx9WJ17LsSf/r6oCzAevya9yAm0LWgzD7zRxksZ3JGFUKWXouVDIHLlFQy3aXEOG2vGqA== + "@next/swc-linux-x64-gnu@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.4.tgz#91498a130387fb1961902f2bee55863f8e910cff" @@ -2457,6 +2502,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.6.tgz#9513d36d540bbfea575576746736054c31aacdea" integrity sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q== +"@next/swc-linux-x64-gnu@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.7-canary.7.tgz#1d6fc813b06642ac000efb838e930c0f42e1d577" + integrity sha512-CJzqJUiktVmauoCZa62CVya7scI3qvlZ96KyAUU2aURCvu2GfPtXpK6khQ1JAZyEYdnpPoQ4aQQS2yY+fWHguQ== + "@next/swc-linux-x64-musl@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.4.tgz#78057b03c148c121553d41521ad38f6c732762ff" @@ -2472,6 +2522,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.6.tgz#d61fc6884899f5957251f4ce3f522e34a2c479b7" integrity sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ== +"@next/swc-linux-x64-musl@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.7-canary.7.tgz#837fecc52b255ea3e5c1fc1b66f1c08d49eae343" + integrity sha512-wISnRcHz5vYkE86LYER0Y3TZsAorpOhMg83NaXXxRDPfR+a7umejFIgvslPnWRcbYy2kCgGRlBtW5lDEYzhJXA== + "@next/swc-win32-arm64-msvc@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.4.tgz#05bbaabacac23b8edf6caa99eb86b17550a09051" @@ -2487,6 +2542,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.6.tgz#fac2077a8ae9768e31444c9ae90807e64117cda7" integrity sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ== +"@next/swc-win32-arm64-msvc@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.7-canary.7.tgz#da869c79b6fee09b8c7ab74bea708ce63d87691d" + integrity sha512-WtQTpLUHHDbL2U6dFdIlHErKHkL78jDIfoqCxjaxRvBBKvJYM1fZalr35Zes8HFpk4UAI5agMp12j2AjDdKVRQ== + "@next/swc-win32-ia32-msvc@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.4.tgz#8fd2fb48f04a2802e51fc320878bf6b411c1c866" @@ -2502,6 +2562,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.6.tgz#498bc11c91b4c482a625bf4b978f98ae91111e46" integrity sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w== +"@next/swc-win32-ia32-msvc@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.7-canary.7.tgz#db19042755838506e013a05ae5a89b4d39127797" + integrity sha512-fPubKDnOYgRpUf1PdgejSw7UeHJGC4Hzx4evYDzay2balVRrC5nO9s6OBDv82/JfNPVqB9rAjBC9d0LPUwanMg== + "@next/swc-win32-x64-msvc@12.1.4": version "12.1.4" resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.4.tgz#a72ed44c9b1f850986a30fe36c59e01f8a79b5f3" @@ -2517,6 +2582,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.6.tgz#17ed919c723426b7d0ce1cd73d40ce3dcd342089" integrity sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA== +"@next/swc-win32-x64-msvc@13.1.7-canary.7": + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.7-canary.7.tgz#32e94f2cbb0d944e227ae9d6d04352ecf895b086" + integrity sha512-Cc2G7Di4wKjIb74vrCmxlmn5F6FAMmVX/Gx/Tl7NuUSL+YYXrMrw55FCe6WyBawbF+7CeoPTZKhp3YmPWp1ASQ== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -9167,30 +9237,30 @@ next-themes@^0.2.0-beta.0: resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.2.0-beta.0.tgz#4894b360116020dee9f89b8b8f01896f78caab11" integrity sha512-vzF6V1cWo6LVuMZkTpsP3+7roc14X8VTRgyiZT/6TWzcd7sLdE+y/6F1WiXEvKg+IqwdUb8g3KwC20Fo1yUYqw== -next@13.1.6, next@^13.1.1: - version "13.1.6" - resolved "https://registry.yarnpkg.com/next/-/next-13.1.6.tgz#054babe20b601f21f682f197063c9b0b32f1a27c" - integrity sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw== +next@13.1.7-canary.7: + version "13.1.7-canary.7" + resolved "https://registry.yarnpkg.com/next/-/next-13.1.7-canary.7.tgz#1526687ed0d765c49930ea378fb63a1e7ee45747" + integrity sha512-ekVXWHSPLsE799i97f0qYpElO+CsG5V9/48KmxlL/g5ASuLB/BNmR2Lj+zqO8s7q7qjV+JteMwFl2dXH4srgNg== dependencies: - "@next/env" "13.1.6" + "@next/env" "13.1.7-canary.7" "@swc/helpers" "0.4.14" caniuse-lite "^1.0.30001406" postcss "8.4.14" styled-jsx "5.1.1" optionalDependencies: - "@next/swc-android-arm-eabi" "13.1.6" - "@next/swc-android-arm64" "13.1.6" - "@next/swc-darwin-arm64" "13.1.6" - "@next/swc-darwin-x64" "13.1.6" - "@next/swc-freebsd-x64" "13.1.6" - "@next/swc-linux-arm-gnueabihf" "13.1.6" - "@next/swc-linux-arm64-gnu" "13.1.6" - "@next/swc-linux-arm64-musl" "13.1.6" - "@next/swc-linux-x64-gnu" "13.1.6" - "@next/swc-linux-x64-musl" "13.1.6" - "@next/swc-win32-arm64-msvc" "13.1.6" - "@next/swc-win32-ia32-msvc" "13.1.6" - "@next/swc-win32-x64-msvc" "13.1.6" + "@next/swc-android-arm-eabi" "13.1.7-canary.7" + "@next/swc-android-arm64" "13.1.7-canary.7" + "@next/swc-darwin-arm64" "13.1.7-canary.7" + "@next/swc-darwin-x64" "13.1.7-canary.7" + "@next/swc-freebsd-x64" "13.1.7-canary.7" + "@next/swc-linux-arm-gnueabihf" "13.1.7-canary.7" + "@next/swc-linux-arm64-gnu" "13.1.7-canary.7" + "@next/swc-linux-arm64-musl" "13.1.7-canary.7" + "@next/swc-linux-x64-gnu" "13.1.7-canary.7" + "@next/swc-linux-x64-musl" "13.1.7-canary.7" + "@next/swc-win32-arm64-msvc" "13.1.7-canary.7" + "@next/swc-win32-ia32-msvc" "13.1.7-canary.7" + "@next/swc-win32-x64-msvc" "13.1.7-canary.7" next@^12.1.0: version "12.1.4" @@ -9241,6 +9311,31 @@ next@^13.0.0: "@next/swc-win32-ia32-msvc" "13.0.0" "@next/swc-win32-x64-msvc" "13.0.0" +next@^13.1.1: + version "13.1.6" + resolved "https://registry.yarnpkg.com/next/-/next-13.1.6.tgz#054babe20b601f21f682f197063c9b0b32f1a27c" + integrity sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw== + dependencies: + "@next/env" "13.1.6" + "@swc/helpers" "0.4.14" + caniuse-lite "^1.0.30001406" + postcss "8.4.14" + styled-jsx "5.1.1" + optionalDependencies: + "@next/swc-android-arm-eabi" "13.1.6" + "@next/swc-android-arm64" "13.1.6" + "@next/swc-darwin-arm64" "13.1.6" + "@next/swc-darwin-x64" "13.1.6" + "@next/swc-freebsd-x64" "13.1.6" + "@next/swc-linux-arm-gnueabihf" "13.1.6" + "@next/swc-linux-arm64-gnu" "13.1.6" + "@next/swc-linux-arm64-musl" "13.1.6" + "@next/swc-linux-x64-gnu" "13.1.6" + "@next/swc-linux-x64-musl" "13.1.6" + "@next/swc-win32-arm64-msvc" "13.1.6" + "@next/swc-win32-ia32-msvc" "13.1.6" + "@next/swc-win32-x64-msvc" "13.1.6" + nextra-theme-docs@2.0.0-alpha.44: version "2.0.0-alpha.44" resolved "https://registry.yarnpkg.com/nextra-theme-docs/-/nextra-theme-docs-2.0.0-alpha.44.tgz#ec26828a536521c2353c77fbeeff33ea4d591e89" From 695c65ba223f385d99ec8534d5cb8f1a83ce0fc6 Mon Sep 17 00:00:00 2001 From: Tobias Date: Thu, 16 Feb 2023 12:31:18 +0100 Subject: [PATCH 134/312] Fix path in server-components.mdx (#191) --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 8a489086e..779f52ef2 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -62,7 +62,7 @@ If you haven't done so already, [create a Next.js 13 app that uses the `app` dir import {getRequestConfig} from 'next-intl/server'; export default getRequestConfig(async ({locale}) => ({ - messages: (await import(`../messages/${locale}.json`)).default + messages: (await import(`./messages/${locale}.json`)).default })); ``` From 9b564f9a4722fca06eaa71df62a8a2f425c29db7 Mon Sep 17 00:00:00 2001 From: Andres Date: Fri, 17 Feb 2023 18:21:40 +0100 Subject: [PATCH 135/312] fix: Handle invalid `accept-language` header gracefully (#192) Co-authored-by: Andres --- packages/next-intl/src/server/resolveLocale.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/next-intl/src/server/resolveLocale.tsx b/packages/next-intl/src/server/resolveLocale.tsx index 2041f7f8b..5f41c853c 100644 --- a/packages/next-intl/src/server/resolveLocale.tsx +++ b/packages/next-intl/src/server/resolveLocale.tsx @@ -74,7 +74,11 @@ export default function resolveLocale( 'accept-language': requestHeaders.get('accept-language') || undefined } }).languages(); - locale = match(languages, i18n.locales, i18n.defaultLocale); + try { + locale = match(languages, i18n.locales, i18n.defaultLocale); + } catch (e) { + // Invalid language + } } // Prio 5: Use default locale From 5a6434abccd1912d478be248a47a48e063f18f97 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 17 Feb 2023 18:23:04 +0100 Subject: [PATCH 136/312] Improve docs --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 779f52ef2..1d113c809 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -21,7 +21,7 @@ This beta version was tested with `next@13.1.6`. ## Roadmap - ✅ All APIs from `next-intl` can be used in Server Components. -- 💡 Currently SSR-only (i.e. no `generateStaticParams`). You can use [CDN caching](https://youtu.be/bfLFHp7Sbkg?t=490) via [`headers` in `next.config.js`](https://nextjs.org/docs/api-reference/next.config.js/headers) to get the same level of performance from SSR'd pages. +- 💡 Currently SSR-only (i.e. no `generateStaticParams`). You can use [CDN caching](https://vercel.com/docs/concepts/edge-network/caching#stale-while-revalidate) via [`headers` in `next.config.js`](https://nextjs.org/docs/api-reference/next.config.js/headers) to to get the same level of performance from SSR'd pages ([learn more](https://youtu.be/bfLFHp7Sbkg?t=490)). For details, see the [pending pull request for Server Components support](https://github.com/amannn/next-intl/pull/149). From 1deee08f72aa31872c8fd157d3a23bac4c206ab5 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 17 Feb 2023 18:29:17 +0100 Subject: [PATCH 137/312] 2.11.0-beta.12 --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 1d113c809..9bf1e9448 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -13,7 +13,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current beta version ``` -npm install next-intl@2.11.0-beta.10 +npm install next-intl@2.11.0-beta.12 ``` This beta version was tested with `next@13.1.6`. From 7a76d2bfda0285cc02ff9bc8ac1414711e3102c4 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Sun, 19 Feb 2023 07:17:52 +0100 Subject: [PATCH 138/312] Default to disabling prefetching in `Link` when a `locale` is passed (closes #193) --- packages/next-intl/src/shared/Link.tsx | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/next-intl/src/shared/Link.tsx b/packages/next-intl/src/shared/Link.tsx index 5014e3f2e..5cfc886c3 100644 --- a/packages/next-intl/src/shared/Link.tsx +++ b/packages/next-intl/src/shared/Link.tsx @@ -12,15 +12,25 @@ type Props = Omit, 'locale'> & { /** * Wraps `next/link` and prefixes the `href` with the current locale. */ -function Link({href, locale, ...rest}: Props, ref: Props['ref']) { +function Link({href, locale, prefetch, ...rest}: Props, ref: Props['ref']) { const [localizedHref, setLocalizedHref] = useState(href); const pathname = usePathname(); + // When the user renders a link to another locale, Next.js might prefetch it + // and the `set-cookie` response header will cause the locale cookie on the + // current page to be overwritten. Therefore default to disabling prefetching + // when the user passes a `locale` prop. + if (prefetch === undefined && locale !== undefined) { + prefetch = false; + } + useEffect(() => { setLocalizedHref(localizeHref(href, locale)); }, [href, locale, pathname]); - return ; + return ( + + ); } export default forwardRef(Link); From 9c843c979458fdfe423bc4686036c770fa0b779f Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Sun, 19 Feb 2023 07:47:47 +0100 Subject: [PATCH 139/312] Add image example and add clarification for `public` folder to docs --- .../public/assets/image.jpg | Bin 0 -> 2752884 bytes .../src/app/[locale]/page.tsx | 2 ++ .../src/middleware.ts | 2 +- .../pages/docs/next-13/server-components.mdx | 4 +++- 4 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 packages/example-next-13-advanced/public/assets/image.jpg diff --git a/packages/example-next-13-advanced/public/assets/image.jpg b/packages/example-next-13-advanced/public/assets/image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f9852a89d50b0f025eb344804c39c75e45103927 GIT binary patch literal 2752884 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≧t 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 &n2G?upFeUy7%^la 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�L@e|}K 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�RfgDqKhy1n9%Vcjx+`hisQVBIvKaT9cq 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%0AFTSIy6+Ji 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

-dGXZom{E7vZ&KTQ#i3RU z+y&>2In^#fA#oL6(s1Bvu=D!+a?OIgW-_b%$^dMX1u{0j0dPGVJbgERv&ib?61NMsBW8V%l zYIo(`m4V)x*L#dMwf#^u{bR5L2CaF2{EBqOfbDHnnV6SKrkeLUyC?=b)|GehL2niI z6z_&R(Wglr!gj(JueDjRkXWVb09W&Oqo(SKIX;=KS#u(cliGUDg0_%BwLqYkNf|Yj zm};eZ?p>!Ew)&2O%bnl{2%kLJRRziE!P;wwqFpJy@lsURH%{>YJe}VE=eM%2>Yn!i zntlZQ6RElqf-kglIFm#1gj}PXn$mb~Co%yFF>*cBKVwt!q;yNMecJK+re^oF_9~Ej zF&`@D5`Fg!Xz(>s(6kYv=!BP4?}X3#Ox2&!^bCsLL^GF{9^25Je186g(KpS*A$!=fONi9TI-)6uQo94nD->%js(d6wO?dCY&th6g$XTtycJC&VNi!Hv{BIO+>$(m)X^#Ks21Dx7=q^m>A4nTK5&XY(%dAgn1}@bs zh%$h|7tyhI*UMhav<PYzY(x|CyQfx5F#*;zX~`Fs9J#>k4+gEH7J^z2=&sbCS#4X_cIR*7 zVXJv68Lsf{Ytoj&1by1VP-RY1VayLAU(UBFox=1NoiFp8{?dwuG8-Pz+4@?koZG`o zQ{F<=0Hctwgdy~JHro78w161@$V+HECqp$ zCk#%ZWYhSS5hXsB@Vv|maX5s&}uei+}k$7K(S-0 zcPB}M&K1>i7rwHwD_d3x8vrZmd94!a9S9DWj!t1GW1vA&AX42}Y;AfCJ!1)C$TYB?=eoOu4}{Fhmbp4j?t0lCM_R!YV7bj|a!1Ze zT6oKN%8(x~ddd8q8bk1M#$4mI3=~tfKD~4K<^ z(LYGJO2EMM(8QgC?#jD9l@VBkhF15MyTT?Zvdvj<9PF=9PVl0>gP$$;;-5C5LI-`8 z?U2#yQ4*A@Imbw%^EPx&mJ*MY`VlifLxgNXca&`o1k|Ds+3Kom$Q#=MTx4*2rNFn` z!n+n?Odu9n4GWKS3SMeHUB}O3eO^M%gRV2?D<9{))0bVx+5tm$as$SZt9Jhv5hM&}f18qsB5T zr7OhCGGr?=z%i#-rAD&C6jAh=Da_K7?q^m5)Sg40=Fb#tQjfnG+MP_(aGvz)XaCD{ zOP;Uc`}Uqm$ixfK&NQWS&~Whx<5ww+JoOkIo6;={Tj5V2qHt3w9EB3M-}WQa6b<|w zheD{Z9@m3ni7Yk8B=lGD2x7H++3^zwU`ElStY!L*GK^83bH-S56(s#b zdNE##Pj|=7Cx9JC=(Kdjbxqt)u@%pAQ{E;KWWeX$kG~%yq2IjREdlZ=2TxUH*jV{ z%}e2KfJ@YRp@7y3&Z!Jk?@h_QPmk4o%oEgxx6XXiRv^md(9)YLpZCIo0fES-HE>`9 zaQw$=-opAIaiGzjCKkZgzUc1COx2_%TI@?_r^U>aiHLmDL=%PXXO^#u=$%Li_5A|# zDp0Y(3Kn=y(B74NP+->3&f`SKb9th(qTbR)WNvv3jQDa9qCq9Eye&uQJak61C`2mw z4Z|#>B>Hs6`ObT{CpYBBII@qs%V$WnpxT*=b%PD9a<^Ca#8Y-<=B<@nV&)%&Wl*bQ z89Z6w%=LlkAiBT3vw>aol7o3uPFs^OS*=m0Owlo3{o0X%Wycja@Utf072Vzt1ELdN zItV|6$aaGvs4@UaC$zVPKT6F${wgH*i>ty225t(8GnHS*txUu zp_W06YF#W=(B*uA)noRUN3*!ipCjJjF*NvtMplVgEPl6ePAqDPeMNy^rk zTWYh^=xphz#?%5#PLrPwNRb4S)p?AUO1jI!2qn5jx)rBq@)Bbee4W(pp)S1))XC>b zBwf}|S<}wm1K-2_xb5Go{50bGG~{6_(IEfTI|#T!GCu^bKUMn~2Kn$!&~d*U3)+QS zeSY1QC-!AWPj=~hNRp0gm~1fYo?r?jWLedsMzxZ^-4QgI8zC=BnZK~`~Bt?_|Nwro7X`UFn&m4tF+f6rmoiRiL(?a&;+>^ptx0akW!ZvD%#W@H^sldqwj@ zL^lr99+1^|cq~eslI2og9aq(1+<}v~o;!Jyp=!^~h~jF)IkU7E$GRBzhZjsg|;W|H_|^cC=!oC)ilbbyW4EKKSHtLI6<3?s#rBRf4?Jk zdSEYiZ#nU=wj1Y??u`Xf4*I*1VJyMb_wkZHw0Xpmro2mUrBL#pYfoGc%s_`)M+bRu ztI)8ojC(_cO@m9!F<#BUJwT=0I^Ze;L65cgTn{(U zYuRu@bd?i%j_@7*`%A!^9~8b6IpZaNe&?yn&@iifWB9f?m~RY18a@#^(#{e-sndg4 zP`gr{^&t+aUq^^#=EZZx$7Nf!g5<-bJ*8SI@0baXfC;VJf|}O8tDpI34{~H7sJMdV zxt@r2D*w=&VMK$mZgrBJ=9c(gJ0oJMeO}|BI^gQ+ue>Ip2HW+y2J;z3v&80Do?{Fp z)~UsD$>^@24^}(EfzaX8W4-K2mfzxsV_bJm7eBlDCcZ=ob&2F;dm2M}n42had=GP1 zUq6nU3j!>&38&9J>z`@4^Q6L5yf8-to66I$ikiG;Fgi*GJPB7|JtF zUWEH()ir<&d3-T*?I9z}X;saMpP;U@pNJ=<*m2>*y;gwdW3>O!aTR8K#Bv&MKw*e> zJZx){^EYlu2!~W6R0PBoN2&43;*ML_Gd6W7uQmvV@S!gCr>N!QcT5gXgniBuSReLm zX&iZFFI6aO_0?XR;7JT#a?IwNtvT%;9OFxu5S7*beb*Zq@MBnN4g4&_b6Gd=yDt|r zlWwHVpmczW6laRWEIi7NY+O6*21aeu>*!DF@ukUG@pt(d41Yk; zm)ol$!C(gFxS z&s@gY+W~?S)!yvz3!LOEnkhbL6+nXM22m0j*JCY^J&P%+1zVQ?>t4H_E_G=|zpRUd zxNgPVSGqE!qEA3GR?vC!f&ubBUkJ9}%^wSwf&1IRqnti1x0x;cWmyNgm#c(J`Pz6G z1U>IO;Xg#PVUrJ5WE(!tk``HY0?!G-{UzlWi}l!$wYYj)*%JF;TybeUI)WL1POlmM zDnhS*BhcSthLcL|9P#Dh$xgEgar4=WN7n66_hg>1AnI?Uq|*Z$TdC^Pm36)>R#@XW{DJPR)Ycs9=!g{U2 z++NJj>|m&3U}cV-74(*Mi%h`jkO#+=YQFXi{r5{dK)fwkY*nY3*AgSU$af%4u?j%@ z2`2b6TLKaO51&+j;yS_bO>*KwHrMiyGJ4VV3{E<#0IW;@-Mj(by6S=YGv27w3w}cX@;yP{CW5a|NtUq8DND zhH-EjR1RN$TP&!M#K@BknnG!%ZyrfxS}75?$p>Wp%Qps+lSAUtXzV{K5*UtI%SI=w(8_IzSH}tc6 z{9$2CIp)_^v=#i<&D+mP{ZFA@A<6QBInqEp)o#)vH;T!v?KO>24D=zm&H{e*D+7vd z^%8(?!PYhyLM=N+T8U{@j=A3t5^tC0IRv9w7~YANQJ@u}zQrfwqpfs|mi^1u7)QTu zQE>0-%b^-D>aK2v?>x}v>E5XZK}_n zR)nQo!S1VwjHyNs_3Rpahd|ItSxvRJQx3XGil|!|R2+@0px9C7OAyEuE|mOjB|M*F zO8{CZ^k-`JQA`7@|FrPK`ph$5Z)=`IX2mC(O5dmpfS7r%UTj8(`TFokpr zuav93MH@JNQ?mM*c=Kdb_eV`ZskQS5o-8$zsme#yU9ai8H++dHw49S(`J?cKdUGMc zHOi{ST=>uZ;wZ><-x9ieT!^>e30o&YR_1oZj^Oggt{2@O8$N=TU2oFV*0O{nmUM+< z>Cy3z-B%&6X0^ZR`7E30U%)d<@q@L}IiLIPQ!b|^>8u^OJM6;V&Mn`2-eF<^-&abV z=NNK4w&ss2f$r!I0gb1^;MR1xjb0U>tU#67mH+kQ26zsnP$tOU9okCzP)GV(4-^2nt{XOt?n$uTby1{PtI-D9=P^E+`6a}&su>ZH^73x^ z4qlSL|Ig^2erLy3;S>X7p^fODK7yA(O=NR}ATAH{ygugH%Y2ue`Yx!^w9dhX*K$N_ zZhixTK`Di0JxId*SAz2n;~u+WufZxeXG1L~C;*CIN&DdZT{0huMhWHr)o|+mSd#Sh z!8~J(xa?6Z<=X4GK)3Xi6jA`#7?Ef4lh!(vjvcij*n$f8M_e`SSDsL9y~YCrh`Hx} zjnK8DXdxWm2O-8{QX;MWtX{lbzJc}diyU^g0TH>;Hq2JEE{)I2oPC4EcTMTx2x^P4Ki>kJBd~ONwks+9pKaqL&q?0 ztg9#o&~M5%KZhf>P2V^=463vSTyN8qo8xj6w?aJDd=rY+kB~+EKXY8lbt8Ugyqyzr zYxb$AI4ahR%iK|wPUJj{IhZRUy%_^SUa8(Z?rZosC+hc}Rr5g?znbS?G#|N#`OBF? z>U4wQFYU7aD4l!4&AVQzJ8G!TXfq+;uHS2wLl5h^dqrU~h6MYprlxL?!X5Rma`JH!LJcTgag*ryKmxZ@zYT^Lv%Jeq z6*|l|nIVI*hF4qzyw?zeM%C-WK1(~y-PI3(zbUl9jtO_2_$L3Tmf&DyvEs!%gYe`0 zD7xBzWarVOcqwzR{zT_Y$1=q26G zveGfC{jP2{K~a0S@WRmk;yyLtDun96V9ei70Jy612L&WV%lVC`-J$OOesQsTvQNH2 zdqmTv5u_V~Yo>6y07~b%0mk&K8{16mtp--G$2s+Pto~)`9Q3|H1;>hYR5^XdX1c;y z-jL&(l&{f;GOzN;_Yn=>q^V=4Ku@c(?0=@$bRJ~*>TdhUP`JV|2T7YPXU`K|R)SwM z8E{(Q4eduy_LsZE>VQ+KhP)r^BzJLsh@-D}K7FgAcZH37UD_L3|LR zVE9!)n*ZnICeh@>>LrA_~ASs%@UYG2&S8y%~FL+vu$dBR`Ohz5cMDLtztIRj){$9lEhMEOlJG6$xGKMg8|n6xuGM z&^8o*IYHssVB>G%>jt=-qF2HiC%Xrr?>eZK0%~JyuXK61!|%!_&OZqra%!*nQgfHR zwXeqr%XGfozh0gvUQ!60ghqhl!>==gPF-q_0e&TZ4=Nk09?jZ!1rTDi@?2)H_W8Mu!6n-|PZ3jcL0>`IEA!s(!pU0y z{US~Gh*branr>B2uE-OQGN`d?`u!xLR>?UTDSm*-8bx-fF=-6Sc~+526FUQHq6;v@ zJP|rXP3=#2TN3gsP0!@snuQq1c>=Pk9bY#<=5 zT6MTof27>o?&Keu5z-X!R=C&y%b4ZrZsia`DOBC^CtXTgZ%K+D`yTUmqOS3<}=r7EVO@c zppEovX=!Xq&x`a5W4vskjm1z4Huu)Q<*1TsS-&z(EH!@Fu;CoG^54bbq&exuBxrAP zP0#UHd@%Pd(=QkbfN;?QGT3l~w zOFh~YNKM&iAQoTwYQCZ!W*I31E~ZJ%OlA;{)YRw6TPX@0ixWsMw2=-E5z}oe)?`c^ z$j%9+k1|@MOhdJWrtbeg`40wmDN4R-%Wlc*MU~LKfrK^ZN*uj~jk?7~|=d^sgsGSr~XIVPbH6ENa!Z(vJZD6#Qk6S~E z`)o(Nu1`=hY2ri7nOsX|jX{X)(4!={ze4lHKeQTim&AX#D|!@7YvD+2Uh+FX30N2C zhh1T~hWosoJDTpovT)bqLahUhFrLBN1B{oCbE0-R%hx{+d>{Fv0_%EyPkCZCyW1nX zKAw3qHni;JE~R+9e&4;Z{i?BMSLA=cfT}Bnnzb8-yi+kY+xXK{zgZ9p5zbk_XPv4C zT`1(Z0?As9`XOiVpj+F0rwh~x*-RA&A6u5ec|u-T0pX(C13>ovssf}gK_ z$bmNBxNJMjL%%VPv8#Fe!IOJcv_AFBX=d^UWe$POOltb}RKzFFppY7L@?QTPB@h?r z4^;0SR8Z1%-T@Hh^RqJ)wrKD&_|_ zo7bFw6WVL^@|b#D7RxTrj(*-hFfMzJ@z?tVluG}`YACA6F{bP{1(xGSLB!Y7@`)tB zx^K@99{s-J`1$2A&B`?`db2yo{7d>BXs_~2SJnOP2cLFb+*4CZ@8=D%dz{o-uAFg( z8KnC@IH56UR@@%N4Y>b1s3uAvcN(^uv$o}$`^jC>I}O%5duXR0A_bfr;CM8#-nhJM z{l>ZG9^NW=a&lMRUcHd==+S0*O+y@}RZZrtp!J)e-JsECVhO)XQlfP|6mCCDCgM$qmR&2C?Lv zQi83-BHkR6kHT6CE>o>b7V7edSKu{!AFlKhI0{721Jzg|x}t7;<%T6?Lm=*q@4S8Ok?S5{7}kg6DQ)IxH?FMu3auLQhtkx~WcN)V z#ZeNOaqvE@27fkJ=Eo^BnHYRk-u1W6-&M~93@>Ca_B$_?yvPjwI%fK{C^6`yWc^D^ zSUrg*XA7RX!8^T-ALwb~cE;d6O2Nn0m7WU+=7;*O|A6T%-5*c!wmsZt!t)8?HWML3 zO%>%vUS^lBeznMiUE(4hFvR$=n7VbocON84@?vtgfq=sDSCLE0s>Ks+M^jhJa zmJ5opQf>W-cUlms+N-2a_id`&?nf;>6ymAM)bKTSughCxt1K$GpDD14Rw> zzccGOmaU<6LGXBYC23v^c1k^j>fukzeRyl_2h?KfYI4m$DB0-en|HM$CqL;@O+q-R z;yoQkyIKoW+wipBg)vXp7YAl>qVcSP2^S!;UlVJV3tenz{2kj^zrI)ilYuu|05kLZ zEzEPlbZGf&NX5(xv$e#ilRf%aaFN^U1B0ND4a=mMX=_+-u$}Lh3`(-m75gmc$wd6n z#FVPeLzj34vuu)IPqt0~m?l=@+JYtBDc6}1Fszo#h*9rVj73>jYa1a@1Pz{v!7|_nWGU@~Wd9fQ00I8+gQ5sp#bWls0bl^TD2V z1!zQc)-l~i4GeFk_O$ONn33szE_pbjC|IhB+&dt-%gD6Jv^_mgm}47#x$tR#e}E&f za`p2kFkc|=JkLa7J27WD&JE3X)fKjded9Ze*`zu)Aefj7Un|Z8e@@5d_>wADANdLAu-Whml2`;6AY4Z)PQG}ETR{m?lS^RSwC z@maBhg)V)ugtttLA+&HDE2U?633YC*yMn58S0Y$hpCA^@LtQEVbWY^t?+qz&hWT69 z-ojY}-c&~y+l3CQ-n?|JE+%n@$^zu#-tL*kY-$*3#6VByA=*srw##MZdeNNEjT(NH z`A2rdgAPWg!ePCd=~*soZ6;O1lwLhY6H?^uXKHr3(po_lZ&<1aS;xd9o1*;R(?24S zoYWSeH|kZ{qP_0#?f3B>bWOjP=;nU*>B)TH&tId$d-w+}Wl0d#5hA>LObE{uW8TvH z2zk7;HnuWfcES`H0~^`qRX2jnVyD`27AZ*{?q_dnay9a-1YH|dv~Tu=jn z*>rNqEEV2m9`#2(@pyW!rNxh@Z|g}A>bW#yyz*CroK=FiN56wvA;E?jV&<0C(I%`5 zx3bX0VfGoh#bl&@`B?(s#wClrt%dR}uJHI_hh(|1o_QK<26_+0m`R-OtnpYQAW z!;SInmAO~n*Y)|~`!6tFujljexZiKLy1`mb_J*i9Guh>s z!G}UxPj#u!hdd8vnxRf{E^A`M=?Qc4pC5oawU5)fnfz}Xf_RLAXJ?GW4XH~zCga=cTlZpl|fv|7joVg|TKdtT_ z<}2{=@9!TN^@0+=9QQBz=do#(--N9f5%x1*KD<$rB*f-`sV2UL+@iJe6e|Bdqa7Iu zwJN(hk%N*F6kC;?t}YsM2fwSjbmA{;oHy^6TuKkBz5ET1tbCikQlB5BBJrwTYDoC9 z{dC%}jrAj$3HRo|Bz++>%-=_*$*8KI7uV?y`TZP&|c5OYMNkmW#=WL&3bzJ<>*~aUXiqI9_{YlTyZpae?{_~UCFGrf_ zZ@S+}9y5>3Z`G1&`#M5yJl@K?qo9qFq%TOV4f){$>X*%um5i?J$b>PE-4!r9h3-J! zXCI_OT7iPO$^ShjGisck<3`T{nfN7txP&Nt?Q*5%%?JsX+%gswzgWMUQrWr6A7?c6 zt=gs6xRd?(23o(55K1&*wwT^*mCi@5M0El1^~g;MP<;iur)Iqs-iJW)q(RUesO9?A zB>jLLg7aLbUvG($Os$~Lgn&%C5hL)h!~4wF)bPS$6`IqOzjB?&qt8>YO=CT`K5dQa z*i|w0hJtCDK8Abzk6KZjg-1_te#5h?h);m&d>f^jtrb-IRqEg@QVKb#>^c6iIv9KgmY1N#kVJ=2WsAyQV zWBJN))AzsN{PV5kzM_fZzSb3II74% zwM)kRaNO@;G0VNN=j|GjZFcdNAtA$%g{y{a@Yw8|GF{QMhzo>s^jN{UIdl+;=sNLY z@FH*m%7auX$A{%qmyBgEmo!zjh;%6PoF|^|8A|T|{Tezce^!9qUIb;J*KL(L)9j< zc3q`o&N0!Yi!kS*)&Jxyf)#JwuZg^zQX0xT>nr+^lbg_^Ru;PJv}FB7+c;1Z%&Ek< z3V+Y%1EIkWpUDk_RP+_+cY^@(N(Ti*$0H~HMz~dk65kuwkL%LJZ!$glyQ@IK6xr_ z>CW|x0>+YW<>5_H{m2$VqU5&FU(Y<| z%()M;CFDz=UN|~{9sT0fzx0ykt9m8`DX2=zoZuSsLlNeO%mNd7Zg;Q15<#5+?gQE% zG|*ZvJx)BxQIDxFw>g;|JGu>+l?E_#?!ga7yUltkE~_x@_%(`Ge@S#& z@OI(*WMj{h`QK4PC~3GsjIb*xa_nX|{z6@ne^>pmT{&f3jFIS(A42gFuk(&WCR8k% zaa}`9`F=lq76^sgd-S(h@(KdNu(8`esVh-#UfBQxTw%eZo`mQR zryc39#nh)E-6?B0EhCXUJH90~kd3BFV1Lp01rwRe3;(9-%^XtUw@~}HPeZ> zxS{iQS1ZhI<1(=5Dlac+Yve{#-aoVW*L2LAfu5vstDYWzub2(dFVhV^E>ABtP{LHE z1mNm{hYP3%uejp;I=;eMl_0xrA9x2-Mo-fnD-K|VD*-P+n696X%)H^@7ER6R$s?w( zn$w7{IwO@BuyRmo(}#AWjPdKLlX+&CO@&qHrh@tk&1fC(Vc`sr51)GSs+tnM>kT;9 z7LHz~fUZh|HwJ9eCWGcY_CVW?ZKXRjp9oR-cT$hM?gg(-`0pcykKK@M+bg2i!L%nc z{f|%R-b_>{4+eaCg(gD&nGr<9Xr&T`CT>;&kv89tmmMs|!y?r*@S)uUOFoYO((AnD zn$amg8MeLvk;}1du3&Hf@(Q%yrZU?LH>~{YoGY@dOYAiWhs+s!7S!`h`urVE0GB@% z`&rNO-96&jx4>(AjPt_2D-29nFI5m@`>bl<;Y#>UI}@ z1*w(pzE#YsKY!X(OMcy96Zn;-^v;_YI6Z2I@4NbN>^k|t(23A&34W|nhEaZh+-`=r zjH#2Wm%N9YH{2&0fAKzR8=7z}+_OFl?up~IvQ9Hzf#AIkk9^v{W_xlgTQ3k!#?C** zZ8%#b-Hjv;Wl@qmw} zZuul7H-4qvd~hAEpnA1|>lkn~5%uA?pRJi~T1nfp@$oa{Jq$zwhg2F&>9g!UICj(P zpxqk*5H@jvbjfg(3#eqeLE>>4&(gaZHQ=TxXZ%%k(6QwcdGnJ z>n`MBLhR}73;QQPa%EtwE73zkwT>?veo0eGZ_+N{5YUtR zl#kUB(g7?|98|5`M$)^ieNjdjLasO=$x$!}KjR2eX6rXfV3BTJm)_>nrmJAk$up!M zkPiU?)eWL)fq%?F@i7&bchsMHsGIzAC~g>4@+Q5`A*trA!tFjtMIMHqulX?>A(I9T z8&%eQYB&xfv(@5xz*n%EUH$|p@vh-YV_UcDpM$PO`)oofW$R# z_i~LARH_7!f{y}@9vEYl{Y{`<0DETGu_o3eR}@K zErs!@Ch8|)k=beYDQm`DNgISjIa?a zpG%Yc%0;2W`-t0=oQ(|NXqjdSp08=LgPYMo;>C|YiL1>HKeSf8pLA`Sm@4{!NU{v! zRZnL?@bXGn?lo8cg;22%f7%R`x0pY`%$?u&T3j{s39umBmZWeMI+5dTg4ajelmJWO z>z70uAsHs7Mo}JPhYs+Vf5x(?Fa^Jz)JpSj!;Q8lu0{>6YP54B&8O8D=-Dr8_Ey$Z zI$ze*12@W7JBONW7b`EPD}<|`*1?sn~lr* zOVweIs?z|xQl(V`_R2YR%X$uSRMSaOSHMlxDLbX8-NS1Ov)qux6~ zQj7a&Kt0B$xcAGPvZ)e00MuoZ(nIJn;o8w~B+|< zP5&_GD=BULov_kP(S_AdKZIQwWAkvd^T&YlyP5Q%i;hAwh^RO^9TJde{0Hx_uTS&= z@EBEd3Xx$acV_W?2Jfm>6jYHeHpLr4H*}DJfFZZZ<8R%^+n4swjvr?5wZt zV~c;3Y(qFtM{Ft^s48%t=f9l$qFV#0D_WP^pOu>GS=3*Bi`~>nBL7Q4sPmBY(;AA{ zreeW|O|>SftBCT-g*xDXIWILfuB113ntV2e3vmN~SknH=uqeZq?a=S;@LSo%&24fU zJQ=eJl4{dCq3uqIU?s~L+k3bv;L5fwe$sC+WG_!R-Mm%;54^kwN_UeK8I0IdRERQ3 zt*SN~pFitNkoZc`c_f&vc|2*B7f=(B>{5tdc1rgoXv}#__C;O~%}CvtRA_W<%K_TZ zV)72gT-3kW_tgHAC&~Er1PD2paoZ00*?l$`TbjUfLEm4FdH--m)j-MAp!d$Vt;Hux zF(=-RUqM!<63y~0VL!Bt$FV!|V^QRfpK+U1i8~p%?A+-J{mUOVtZ%Mye_1`N#gwW{ za?-j)T*VdHDe0AVy)4lZC1qcT+=(r**kNb(&9(l(|4|HdrLTQsC(RO*$UaqU2{-5E z%d5eMV^l$P{pEqQ@wd-r`!qIjlj;=zw8|DD0<`7ygysy51ljpLMCpvXnjF_M9|n|> zOfv@B(g#;nA!A9Tl()m9k#B081H2d*22u0)gAvgd%LX3qq3|hXMj|*V^40sBfOeZO z=~~JZv1oNjmH6t7YD~Cm^J3lq0QvjKiL~ClgHxEP%tgs;OJSR{M3Q;DW`yXS?)jIZIo0Wys$q1<8LpG zow9cuL3LhQ!ehhAn;PCVQ^1ci%CIN#zSYvCNcy9>zsvkHm=0=c1qi(7*kxu!y0{{k zFgF8(twZ)=pHWyf3&$!he@q@(qnjm*maFUV#l|A^6tinR7Boxty_2nxuG+ZXW1SY% z=zYsu`fPO2VHFEbFqq{CI^owzllV)iuG{eohosiTlj1>cE zm~gHa)^_u+jvxl&C$e9`NIM`X2C4aC`93B)3#>%B`w{y8f#ITtz_b zb*v)TR1x8piZ^@wO{5^yU!a!DVZftu%qx^7QoQB`t=6}f9+)jbyH9jP_McaA? z^!kIFeFL1IIhm6at=2ulsS?|cw^$~*3(A73b6AUz>nY{qrt~<#+PKzZm0qTlU>RQ| z8G}XaVS;{wLT}9Mpo6o%%wbs-#Z{jng>`H9R2(Ujj0MRvk%(UY#r1Wpg(WIdBDQ&W z3G+G>bnB?CByMw|32#k$Ono&1Kau@9I4}}^9 zF#l+>5Mv3cxl5*WD|LP8!7D!VB*e#`>G;{Y)Ftxy5QBges_TBF%(A&{THQ6L9Ad@qHlzmrxWtJW+YqHaC$ke(l`q#e?JMkpG!CTdZ1yL2pT5;WU-FIbsz zlW;!Lx(a0bAa#b|cohHTD0;JiVwKtUD{ID?X=O`NcM3qoF0Mi^ujItTCdxIFjq_$R z*5KVqB%38OvR=zgFJ^EDXVxbBGrQTyF)|GcC$EYPn?k--fp?oWoSdoh1 zwMrvdyd=-OkPzTHNw#bOf-VtS9@+XzJkl*#Ia|qnLueIi%2z`Ut1&lyoNW)9 z?P3WR7{6!}2>_k7fcE*tPtR+3x~JsDaozDOiMxI(N__DT=+8OVc|Qi84Y2N#a$Z)c zV|jwNb}=~BJ&Y~;RB3&tod~@IVpMF>bTw5%Jqx8flboGC5X$fjvhh8!@U?%-SVv_6 z3in0AH1V$F7JmzyH9k}0YOGj`Edm#^X4XMdTGgNQ?)cfRA4N6QiYe+pSCg~D$j%kb zYR6i4O4$s0YC>TuuRO62gMvOYLsqT&#n?H@1quo#Ya(r5RtadL9Pp z*6CX@64@fo+J@65uo`A75);UxCGC7^6;U{s9e4=j93hFQ3Ngm;3Gs5sTWGV>Lyody z+k?fAw2%K+S5tiUXgiD@_Mg=AO_VM`j-aN&>RmZSUA3j9E{j69o>a8eHQq^8MmIe8 zG6x$O(%v}EBWg3$v0zD|H-JW_fw#Zsv zq2J29G{Ed}N7t8B$2SxzCw@0e@GLqnCgFuF^{MIJ0#=5Kz>+D4N)k=~tS0MYi(heZ z6y0fOMal2L@cvP|(1IQkNiJQEN|3fqtGR*#V1=G5kuON+G?g%!p)i}iQ%?t~9DuX} zD+3kvjv60Va(God;trwOqo}X>l5iFuHAvpTS8iQwXx#t27EHJ@oswX(V*6NrzTYa@ zz&xI1IrJf6fxtPG^JAbpe|7CuGH zfZ>#p6y_$}lZsmE$_p9odKnie3=^UfW^ZO+&KExFo2m&FL@26ere!;&r;O`X8fx8M zU!k`kcs%-!=!Ib{mc-G=JX54I=7#k62A6p9!jt&2c+LWS{`LoYVbOcZqiyQ#;*1_> zn;d3Zk(50g4sM01raq*BfSb0^eLc!MT)RvT!obxVFDUM3ih)xfRR!djF6JMOvS>sh z7u6;G3O#IgE$37YW7(}8j~(4ZjbAm}REj`oQI1PX>t%OINgIfr zgPob|M}sS>`GvTGg&#L;M*+PAFZR=2eEQqF+4ay*wP+nLZytOLlz|6JU@5VuJ^pX# z9;L{_-c_cl4_sK;lK`(4^slqDTCti-H{#Q7Bw%b^6$dzUOw)eObj3NWnj&Zyt1{Mf z81Lh`9HhDF&S9Z-FlTfjzF}<=h{3j63dd8=;;FMkT)+|mQcjijtgmHqhQqvyzdUq| za<&MtN?oekyh!Clc9nNJ+h)0p2jpz_>oQU$M5o;(!}&Q-KwK42*}Db8yPsmVHf`Jz zWjJHD5IAfKqk{0BcHZD|QpaTb84L9--Vf5Usf*z7A(XjHsPS;Y4D1^gZSj2Gd=DLC zi8oOgtGqEEL4FFW7VKM%g}-R6G-I9<1t=7;wt>w3QxD`Vfp?LNeNu~VbEdR*P9}Nq z{IPrc;3uo^h-CyW^jfX(i_dUXS_YSjh$=TbIad`rdV5p>_*}E8y|1o>agudm5PiCbT;}5!$pK6K0 z_ik{2O&aQdVST*^O@2zaXwh-+F&|yAhF`{3eiDxLN%g?R&coAj2aA5c-R6 zMs1cinr#NiCfHeq_ye-wvEa1XG-m_Pa85jj8A`APuw7-8@Sc;5>q!s z(oL`th9t&TyN&u?`%pLV&l8=O#4+FO&^n%k?Cs=rL^R6PUc){h-BN^lBJ6EWh&feK z_3fx(9Cm^4l%s|$tIAZGdED?QG3yXWlKj6RmSqS4^q_*e6IJQng%w^`QuReUCe~NY zjELA13|C$4z7kjGYTgf>cWKK5UWbHuK&xDwa0t-3vv#u73C+sUOpe(ZxE*S%A*Pi>6Q*ag9yRl2qgwY=pXza9p)i#?B<1n;#%`C}WCALG|73D)H=b$sJ01C`B}iK~9lE%A*L`3X9=rys9aJvV(9X=a?Qv~I(7pAm%Co*Omx)l<^^ zFPC>!pn0cv@^sDeV{CXlbQ#Br;sAS}gMiqCIe|?E9N)d?^m%b9lSirluK0f+Y#oPE zbq97`wCwZ0lTVJ)<(z#zAld!0+1eMI3S-NeO*976uEb9RSM)23gZS3{(x`I^w4}L4 zC~5pU@aiscD8;E>YM5(sFi_$0D}OiFCBIp7{qyf5ocF54pn?Ta6`!ORcs)(F?Sw+U ztk2)sE{XIv*^>h-w6*Z%&RbqDYPfJd_J8oll;{2BvE^mZwKD5p!?T5V-Jb7NbPp*4 z(k)>QcEhh8dIcW$@T}y`Nwqq(c*z2%Ka~Sc{DU4SK7RG|_5FzhzWkWBcF*0p1vC7P zl+t?BKvv0T9b7b3^Y;;Hjwu0Y;3@lxq~5OY{nQ#XD@cnKCi=Q1w^mj)B_F5$TkmSM zUT!KpHTUYSi8j}X(~jkMlCF>?5Lld<@~O)a7j9^_H-#(6j?)uT1oL6|gn4YArtj&J zrh0Wf#N*M^t96c*by$Ey*dlt6p}0P&<5f;$r;V0Bv-!DqR)vY!v0lEGR)w?Ql>9ex z&hbmh3ng6Y7!Y>5uTi=C<)9|GqrWxUt?WCoMI}0EM7C$FFS>?L z&irl9b`fSv4_;dOJePZzx|b^xbvvg2($BLaub?k3uM6;{#t} zeoe=&WUbxRgJ>l*TFPtA5w+j#t>U9%Zs=c51G;L<&Qk>0C`Qp{JD!xbh~ zQ5al#D8{d`sehs9Mz2~^RJT(Q6?&+l_VIWv*nM?3cju753p*~b(F=!1uRV7k;*gf9 zHpcC^XmNr@XDlzBX7s4)HhsR;QVHX4f4HD|x-wN9KFus@74OTMEsUnv4T`&B*ns+| z&a*|}x1@~s0I>jNo+=>CdOV^FC3iO7Gw1xtYCkuT1X0x=+cgnMCOxW|PWpgH`Z^D(&;*tnKX$YYti><9vF|;o0f7ZW1U*#VdVz=y9z2~Ua2Z1 zoNZVTWER3UT(2ulX7LTgbGp3f*5{s&$ONFH+Mc*8+dpaL(b~n`WwB z9E1zdU=Pev+2Ru1UOPz9LyhiB{V=#k0BsrCZQaA1 zQmMAiZS#8`m-VORFT9<1I3x+uZ30VCeU!nqxb=8L9q<;J*ipYymDw1WUx)ezV!S;m zlLl?~QSAfB!P4l3S!A4-ax3z0i;D9p!z@pw-O9&qsjr&AOutd>)UMDFqxG>W>3V*f zGjfx8Wp!eMc=}`Wqi7B^!brw}2c6~LUAOmxwR+z@|Wk{$US-RcAxe1SL;lA?~`28fpZa-20m1^DG zJ|~U2zYL`<`LrJb-L+MFmwK-ob$N@M6g{I`Xoma;iG#%5@=G?)+`nmn#IWN50`xLZ zzy4q#T456?l=I%jLo_JtX);`;k5g}M;FbyxZujW@X|d{z@<~IvUy*X2vC43mSy(GQ z^NsPv$4@1M1kF2>hB{EfGUhrwQ4#R})FvLu%KhMbp3ed*@-ID*5mw!csw_ zvpv~-peD%t6N&!_uV}oCbId|$yfyP&&R(^A(C^sMZYY+ce=)3cWlggfL7!HmI__4# zm>NF!`uWELiy1-9?p@8A{S6X3X93kIbP?ikD zv#a3-K&^8{e?yu8-Im#(hcVYE6P+;uUELofcOu1e?l%%JC&i93v6=8wb8bH2{B} zHn$xa_0d!kpZ^g0tqOg+%1NAJMm@Ky;Y?PW3hC!pjZsD?#7`3H=BrIKU~ns}hS3f-F& zN@ZF!nDb#g`Lj@=h5f!C6TgoH250*Cn$cZM6s=<2|F=yFyc8`2aMH`sP5vtVYXKXtQPVi!yZK@L3DbPa}%5W7hy!Sjj+2&$Xm`zWEnb^dWStrs+-!0lE zbe5k{%XWnFIX>ML z=jO~wD;_hat=%0b_6@57Uf4LmCz%zh=IHBZeN-j_ANj%Ql3wyhZJt+ix+#bqWY+XJ zTe`u4Vv%J!ThB{MEZyS!DmlF1r!9YKed(Yn`)HQvwB-GqTb_?>y5?5XJbH0#-TY9i z{tD#k$XCJz&4;ly$?;lhrUg`)dyDO-TDTo~jx!15s_IM!>+(AqDW2~b{X7i!@>kLX zNwHY@Y<(c_<7pIPt6=zYU`_NGY%W-gHfZSUVr&y@gr( zZ!I4fuhF2JeAkI`pbnI98;)z)vC%jG1F>g0g=B8bD9PhOTpE2CZx%(W$|NN)2ZESt zx759`M1}5DdRg~ct#(-l($g1p@1(9~`z*~zmfuDVexO1lL$xQFnQSo{>gtIhyt0Hi1*&7T$g^>n z1gEzzFM##jPW;VewZQXFF_v@bD_@!4N7S`1^^g?lWufMl8Cx)(w&)N*+DZu{ECwJS z%GFD}FnQT-8gBM@q#&qF@#zhJ&uuLm9@4=VTS*gC;I-W{{7$XfX-+G?Ue+oBmdIGr zl>T&usaE5Cns<~U>8@NA>2&-AX}ZVpt23dMj=4B``fb2X#SI`Nammhh3OyArCekBz z-Lt!OS$*$rmMK&%ZBG49S<-~^7R_$HF8CikY|h=3bqhPT+*|Re$JQSgvovW4 z^JwZ2%{6s)AP4HvXW%ZbT&XYitu_XFSsLR~Gx+_GANdUKd1YPOP2AT$pZ(x@o5zlI z0AF)$$k{%1yt;0bZ95gA>ro1?$6wgvH6D8y62f?4wMIv9q-A#8ZgQ z9j)B&ivmVND6lH+Y9|g1I?Uh^qhmPRWKeVpW-Vt_|A0-aysWLmDL`DI-K$VuznBxI ztDUgfn)Pq8=oJ}W&{{x`WsSw{+x|xC##U~*WCLZe*MSGL3$&xned*fCmb~ry*|*Da zqRj3C_s)e@h(F`y^=6CIcw{&#MO6+-FA(JX!7sc|ZK2WCA)91b0~$;IjH+lsK&ITO z$caK-H&F(6WMj#_o3dXS~beO+`mt>J3DX0dbUhiq>}#F77ie2 z9v*y!s50 zsR?jQXL@yC#<}x9=fFiKv$h~6>^==4e)`GleKvLh&-$(X^2iP0Pbg|>*;)97-7M(q z&l;8ZEK5SghMTJbN&QjcQ!G@rEp^{Ob6H|rLJcq(O}^ih)D1H6zp&|k+9J<(%HHSL zaQcA-eOt@EX)gE|9K#chmI>ltxpw!}iIUO(WXnJ2=i?E^BhV5S8*QvODN16SgrHs{%H3&99mJ^M&(x_hQHCvBgabBnE>hcv}ATwWAu_Y*+7s z@%MfTWV;LVuzJ<@9=6<=#azRwCvW0Ro2~6Q7vD4kZg08PmOCljwYc|zML1qsciAyP z0?@D%t?RB!+p`!m+XZG(&&h-j5^_$f#)A@ae~F=!lk#uV6wmBs!_K{-eDkNR)wYXLS z<=!CZoH+PhF?ukwT{!XI`Op{pA*UG5$DP~3@UKsJS@`Xr>43=5^efT)$rm6k3A}I~ z>k0KPR6ixt4m9z=d&^|%X+Fj#fSPjkK4+#T5%?*JlK1Ht)nKXdOh ztDKx;N(V}D)n#od+{%`(84;Ot_@4B%K)sQh5;z=Q;mjB%I-_p z(l3f5~ zB}f080BM=ko6v~bm39_4fb3b2A|RW57P?iT^Hlf`0ALdXz&|ScQf~!M+Z0z`bBRP5 zINT~u3S=}gEFq%M4ehcthe>H5!YR*?)}Kw=*aDeOw8MQa95$_8&bi zP5u2otYJgKslMre52}ssF`2w-W^QojdJEJqmbCjNRql`|yj0)E{-SUDOST>S?oXD( z63$iXz7f2e!hV~0J;=)Z(^`or0G1W%Akm`1n&2oh&?J?1VqC@CVaq^$!?ezrYK3%X z3cb)AG&!5T6hkdXfAO42xutP3<30V$0l)VN{q9@O(5J$Mc}rKotftmimUG&6GV&3= zQ~&VnS5-Qv0pT=c(m>S3@AayEJcoEWz^R)myg-r#z3S4NNVim_*X(A20+v*>TmlBj zK>4^|;~n|>lvP`$^>p6;IWiJrE4FE2GvaC(>-%vX(EjP&F%c> z1&ncybn=%~4Q-Zinn`=Q3(A0X-5baLzxp8*Ktdw>6X?wjsu<>k?`<*=#Z}jPGS{tj z<>XD~!tUcfIBws($WHHL+U&wB<@+f#w#G*{&!IAMcMj#;46A*Inr27@?7+DnUuEIRx*HTU`Ur5}@rks2pS6YWbb_taF%z$3RGcHz{E zHP2MZKE_}Lqq?d+$KTQxB%_%+9Wx{6I}9BCAMjMPYZ(?!|KjWt*KCa}zgJ$Hb~c_H za)tUzZpqaAAnFG0lka6F-N^Loy}n&XgXO#CO#J9;aWsP%^A0fY4l7ZfbN^YhUbb5m z;dmq4X**J|??gmz?)X{@ZkDCA3D>g6o3lc9n+otIj|+?H?7J%NZL37vX&ftLRrXm! zr19Z2^UUq}ZL%McA`+Nd@c+K~(zB4)0Ex^!JECZuayw}lbiW8y2dD!3PVv|Ql-!|B z$O3-ohZ%G}3^#cS#=ry)X@zO;rB+&`cD!1MjL@3dXFUtb@^Ka}N2UEx*ZP4MFc*Y- z2;_ga&o77cR(g$>6JiEdo|GxsrKbdgMqy!o;KWNeIvoGdDUNbZPvSk=q`y9T@G@=L z!_XWSI*wOVutyB>hmjFWSx?BnkFY1@a>;wn7y~~3QAO4e*tZw!shTZ1k*XR9Q*;od zq}FF8%{>TCzx+WyH667jLTP;Ob*(t>WFTfIDqRot@squx!X>$01Hf#u?XEgrWKNTo zj10RZ)-|A|pb$3Joh~OYbfvELdrI<~jW}JkhQk-XAksjd>nJR0&~U}AK1TQSxj9X) zL){#f?xvCV&1{+>*l?>#(IAWjsRcS~-MT6yF~PE4^8dH2ISuh;7JWumwEif$87?C- z*OVLn47z!-wcC8-wYWn^_KwtTU&|$PYAThx@cRfU=dX&W1WF@XlO->b%ZZbwUFUNN zBhw-KoKQb{9;U)tjvhq4{NapeAunhdNxo4!Rj^C%8{SUS(Z#(u{d|t_IEUs^rmJ|? zMHloK3abgEt=S7If7M33qt+%l%$Usni|)YtB(#3DumCn0zmLc*LTLsnFV^0)++=<& zB8UD|kfj0v@Ow93($@i5&<8ULj#&e@^csXnX_uQPQG`95Z=e;Zt_@f_RPp7Z!&G&G4Yz3e^wZTBTAG^h| z`|eo!a=B}!p!EhpWl}5r$DP45bf>wu7FN?^eh`ggKeRCGlcMs+H)UjaRMA16e9e3M z_W3>S=w-E^ps587?fYi}9(M4#=rInQQ?pFe1enc#{UOy+qe%`*vVAH}AAn4@QNPCE zP+JO$vchQL054We7@@K7-Cs@aQn_1T0fn%X?J|cXdLEc>!$-fT_Sk(n$auS)Db35^ zB$V|+1-bK5Z{hDUw_)yzAf-=nRGd4o9e$>}s*1al^XBE!qCz zE7*>1k%(TKyjVa0Q2`e3sas!xM7ELyX+mkDSRE;Z=zR5$}lQ|=t~pHA0dCR{zc z*SJTKE%S`cA`oHW!7O=HAvLXH$*Zy_>5qhs#^DSac)8{C{KJtO?+H!o!Gvh~W_Cnv zRJp==i^Qx(fH~if`tJSeb`Ov^%qWL2tf?kJlf9-huG1J{3#frynGm`@B@!u-_Ax?_fJC9KH~r zwYCY_mFkT|9lExgqPawEQy$Y*I}a#Me^il2z4_Gu{Rh@AZ~0LvV}yGnk*7*uxI3;w z}X_#nZiXG?Mnnk_M9{t>6 zUH<-i>J~A0)7a+N3XgH?W*Sj-3aJVc-cfZJchGuHgqmHd{vMbzEDpsSSB)q;i(A|J z0gDiEEQqwZvmvu)U-HEidgY%K;}!)CQr2iNOMRH&cvk~k6&^a0!srqA`0PYnUNwyp z^gV^U+yUX!`0a4;Fjx|7gVVJ4>8IvxJXXxP@Vg za&wFOtOqnUO)ZcW-n$cUr!lxpV$tmYf^omhxgGDoa?7^TWq=L%Xgc{gMD+Hv6(zn) zFALS8*={nSC^`FVZ<4&#csQccDQ_Y6wO$yQ%ihx*p~ij+`*^>Wzj1XEnKCGRilnNk z@&l^@U-dK~O7`xVk}P`qTqmBJZe>Z}VIVGD!xRs@bjsLq@AI0wT8^>aHkP=h`1IM( zE#>ymbB@-3ZCw1>ta8wJy9jlx9aB~a?zuUi_t*VG^lyc;RdoiK{*Su!x;>TCxzO$d5Ov+-B={?D;sPqF2?snO--10Ic zy6nAZ)52^I;}C6$ymw*q{J%x^>DT}ic~tG%6v{w3=EXS&$v1A`;w~h&1Dbd+;!m*O z&`Bjqc+MN;oxOLrEX{Pop7h4v&n>)iX4b^|wNjqmgiTacKrzvt&`VH17L zVdj&f2AnQkoaRk)HPc{`o@Z0f66bKvar@@`57nx9LAW)v+dLumV+sXIDmgk{9&ur$ z9FZ~KzNq&?{&lIfqP?Bnl8+*QfPH~we;(|2sI9q&va&{>nHOC}8doZXS9?`OOr$A3 zo?~NckQZi_U6Dx*2E2glg>{C+d~x@-^C4>5cfpN^fZkXq@CucKdTHO8*u_89RQ1&E z9(@iYNtQ8mOEdW6trAi{>WPYw5v*gJ*d zC`!7`2&`OVT6Sna$}%`a{r8bcY&64XbOJ|r=ZzOA-})onzD_V^{m7=?XGQ-i`Ll%;@V9r=FQ8r* zrE~DQ&#T!WHv(?oJE)X~Qs!-keYg1tF+P1?{F~-d{u+)IQ5y1QI3+0$Sggw*ZFYp= zen}2fkOsVlAs?rA`*8|j_|o+HCQ>Q1=FghG(5Zb#4TlJ!6wc-b@rd%M|Aqk zNkyK6Y%^E!?jd>sAUwh>T+IuD`3gB-5=*bJDQum7)`}=E9~D~xz3NX-nbFj_DkNB_ zIQ2_Qlu&w}Dx|V*3GW<&2*oYuH`0v#DUKG8>noVzo-`4MNJR|j(+Tm*kd~p+=>@6u z8eR-0w*-sUJT4*QYYyiRUsyE>IbLFaXhe1NZ9HpIATymjkfkqytCBVz;Cjk%OQlKV z*_`+=KO9kJDmZk^`rz1yrj_8id*FS-QX8e8$cQj<_M#wqee;JYdkj^!%+ ztsLgE`^@3M_`ibZ!Ay|VZ7HOv@AGfbs(_(l#Dy`xOP~+dmxNCZRLDxDepAst+Tkqu zWcNHw`~5-&ckpeZ?x9ua2Pp(To!`)noP!GGAa^djHqcY6kfpO=%CxUUV9c(*5E93! zXg^RlfnhN3#a9-yZ_4OZ6i5WCI&uGAfE!dIg2cm7r=waYG7JmORf(!vS=6>bJ1Txo zrc{NQriJ}~Je_M?Q)jyNomL8(7DR-AlB5-E&`?sOlv7ArM@$`CC}Sm|jmby^Izwjw zF|q>7Fd_&fkW>_@a>xj?x1BMQ2uydOT}{kc2#_)dQfBWVCqnEFv$IwrvH}s`HD6vo z_(AjIkUZ-?T-X1;pVYLaxbOb&NLT98ABa)&A0S%=uf)H3(f)-yM;LZowC*6Ck>o-6B zrhcn$weRg4hyM!Uf4B)A{iy518}|v~kN$S>^RCyvTZmo%JF6?J^e5Pc%0E7xg+KVs zCzHSP*N*+XtSj;#?F(Ve4~pwYi()ELgN9>2JbLziKDG(ysd(fF!*ad&&n<6nzxV6C z)clIaLJ^fID7_#e9RA?j=R1gBA2^z3o;Feb_ti2ibauuu8(-`@&7s+e~1+J3%%pz-=S?23?MmwLp!qeuUKdPFsbU5i;by|3by zCxyV$oIFWBdDHpJJ+xl$(_Fdhr0Bxys^fai{Cl!LtKRt6dfKCVuibil{evf#-kakF z+mm1Bee53u&xg+DeAPbw z_O&xH$eT1_6;>XR^!1S8uN0`xE8*m;Xpv z!~~3rrMHUjeEQ^{QwN9IG`0Mb_Z)A(vwh0$eb?Gd&2-ZL zR!nPSNoTpc3a?EboRI})M8;dxPj@}N@x#J*vkd6|>B-XK+44+c3-+02Zgu{8-znP1 z%cOeV-wsR}&mJn@KHIf@H+&p;?JaM`&L&M<4?Gu^>D`~649_*cc5!i|)9^jENOACN zN(6OokLCYP9P0Rs#w~kp*zv}m9WVUH4jS;p@e#0j$VCwx+2VS z%lEr&0~#YY(s38yzY;s2*XXEp0kz#Q=R-6TNU_kWuR0e=xp)e!-Vbj$d^3}b^oo%A zfOC<&TPQ$du0h#t^mqrC{(MJ9p8Xcuxavc0k>UREChcrMdBzE*1p9HA($>wm@59>3o-UO;nI1+O11STIS^&5YZWR3?bm}04XvdWXqmL z2C3A==9TMQmRX5+_@-&x<`m;{Q?Mi=^tH>2RQlGZ2> z?+R~y1dO#wLvt5oN8G$VjrmEl({>%*3|wrSXS|TxXoXaT?uqe^YXbAAYQ`7qQeHk+ z%Yba+lZYscD@5c3q)#Vg5-05)(3Z#6UeRE`0;Kuz9VUshyw9~9`+hT3Cd#$)29o@5 ze|j5UV*GX@nRIJXpc~8OCV5G}{R+L@(*8^o!y8yyXhFy(aCs`@Q`HNIsVUefS)FP` zTj;xjep86Xi=3`+;T{g2Ala_O8kIRAWM(2&Na?%LbMD5RDQRb5m|%{uYFRkpQqdG_{wbS*{-Y&fYT(y_$^WU=PX_u-?0nceB#iv{i_Vs&!1)663S1IBS+ZXm6T@)_cp27~9{aU$sfz~-wm$}kM4XB#O}r?Q!zEj* zIrh}a#ucA=xpXsVjmD-{Ujx=xOJ`zi4%U^m8|yk;xEQ(|YK9wi0&Ts&EijCe`w9Er zU7#gbN(eW3yPf6i!HtzcE~WqRpsCpi#3q8xI!oY7Y9<=zTAzoF+Wz55<)dR?h;ju zk=yfDkR%Nrr0N;hp6@uKIYQ~f1-)4&21TO<{IZtdj~*KlDy&o14g{@q=%4ivRNNfo zxlhtI5eAuWtW%{1qy)Y)o3`clGgLddL`wEd%dV<=+Go&H`rBpbp_SuKZKA*J!ga=@ ztM2?mf%6rK{r!p)DcVGPQsBceJ6YOs$IH1$GkvP0wAcBKc@T}+`pVFDR=#HoDRI6J z%O3h*o|ENZ=s>$m^@zh-Q7~Q>dZ)ktdUe2KJ0yi-(X%k1m{|85bCY@&w%~L|mX|g< zy)`Q-FxHDA9ZD+M`F+sV1(0Jpz{ZS^EqAx)r%qdMh)E2DzqX8om=RwP zYrD&Mhp9v8IkYA~g`1qV0(f0QzJVy?(d-$3=U${D)Hsj2aJwnMK*`*Uu_gQUbK5(s zaI-!2j~}aa)!Zly$ba}WX8`X$xn1^ zzH%3Gr9bzXxMYErkV2?rywTrb1h!xke+cgOnZ#~&_6+<$wury3KGj|!6g@y2ot!4e za)HY&WBX+y;^byJ2#+eVyxlF>L5wwl4$#}@Nff2WLV??h(I)z--5Z&KB@I<+Lf zz%B*WrIT;KrE`#I?2tORTuMKclO%K& zt!|pM+gtQ?TXjJ-?N4y9OG?UdehVlQ( z4IhCwoy%l+)3YQx5tv-sbZ)_=BpN;{aFSO0_CZim=oupL6^sapcFPGot5c=hBOz96 zJ+V@;MVGi#%3ske2R9>J=y6`? zE-46>^rjeX?fkn89fz;?cW}sJm)ud35&pUZ?-1>JeX`^b_CrD?cN%OjNeul1?xl(K z`8w#W&w8a3ON(6MFI^2$iV`{k7FY@|bicdi-+#Qpr<+`?iFc^ps032<>UglpDLT-t ziSsVe3dk}pF)Xvb^nAxpTyLT^h<}>8ig zEO00J@7Sa>u=VOPRSa9BtiY5jq>lZYX+ z%?Pa|8alHoKN3D8U&1{!qO26BP!`!TghkZvws!)x;TNzA&%>8j5qrk8wZ)P0G89Jd z!{0j3Z_~CV>$`!edSDw3ZXC$%`xvI4V$b-)cZ7gW}PhtS%>s?ZWh z>EL{0W_Jr_+RgsM_5QvXoNmINxYC)e1GvcqG=By*_qY{dfSksmO651e`-F<;JFssb zxnV>}*M#eO`z@M9=7aOY*jd{N-H+Smso=}ov>>!Dfo&0J*8KAw(P_RrR08@7@Y}+G zACBeb%ujB&>!<_BA{MxxRS73b+RN>c%Y2DG7Qo5}+Be~7Yw!4&J$nYi4VC1(5xu(6 zA=^n(>5ds7fvfxARHHcf83bv#k;4-_nJoj!8zunfi})M5yo~x=bOO2suUo#Fkp>r8 z!}Wmtp)3W_m^=EM+zgEgQyverwA-!$@7i`bLQQarGT*C7M;CJ}D$`SeM_IU?Eh1o# zXAv<-Kb&uHE6=Vr*xO~WYI;J!%0SIMb&s#Om8DYb2Z5kVyhyiCCs}tfP1yTW=+ z@o>YTtcCH8lCV*DuUpvvN&~0V=CXRRFml@C&(_gYZT0>EO$$Ku(Ed;U4DIPeLx;@E;>TXSM5!?`h|PX z@m1O28`fu_ag87!8RFt)dxTvjnj2dbZ{5u&ugYrGq|DxBLcdwPPR=QMeL3Usqp*XM%rhn#zX`(a)SvfIh% z!Kxmrwxt_gJMF^$wzqhQG9Px-j z_}{Jxa%FFNzM|~#@ch(Kro?G?DvII2yiu$AvLr1tI!F)S$ z<7ONo<~4kN@JY}{Dwoz>%u>c&b+^db_9&xQStumOIi#nsd@2~W7|?IA*XDUSO{vGM zK65#jJTqxeg43CihsYtwVWM$m&_X;*RAIGi_9eWqzGrI_ZQZc%gCalHdgc`B+!qeDOfxj3VBI) z<0RBL^A8UY?AJKKDChMga^p25)kFWR1ZJkef|*Zc`^^BC+rFLG@r&*=4) zv8K<)6h1l%6<2q=O4M;OpnIcpcBq&8t6k=?>)H#_Qqx35K#>u5$3UpN&B#p+O3_Ic`y_^D1X}dDBqt8|C$8`Yf=wF8s;bXsk>4(6^ z+)4W(V^#ekpVA@h{@0Kfx^(cwSDD8Sin#$ZFBH0`QX-LrD zud`rfxC60e1h<@uC8lrRC0ph{vdw#%q%H0~c8pdkY7Z*VMHQ|Qa*TJ#jEMLvl`QL2vFs^UH5RddzgNRVQ?u9n3 z5-YtJ+CH>APG zeu^0o5yv=RxfYXyezCEn7q!0r&iK?~&C9mbV!jM)+Uw+~2z>QvhcZrVW{;yA^JAy> z$ZUz0PheYb zve;Pnn9H#3*ISF~2Nm>Kp>n_b>$(0lWmBQ^S)Gy^HB6{H$Go~O?Q!KTCH6{Xwl@gq zUfvZudK*5+2AKMsHhe2NkF>mZV*`W^`Cc53FfNmndM8lJ?MwX>rju! z6Og}1hr<^hsAIUhJja*lQ5h$l)Q1LMkJh$AjRa(P@V>EtJT4g06>k=JYdK~pzX|-?y8M#jna%v7AD60F|ovh)Mr`{OugakeA zYAy+|?>9~H5gkSyzd3v$2!?MEU zMsy|w*%P*Ch;UsRTq{2h6wJ-nwBJZ>c9VWP$$AAj(P`$V`QlbM_~GzJrK*=Jpzl0^ z!EMN50tMWKRiD6`_>@)v#ZiQDA87k@Z zBKnPK;U-C@EcN=#nD8mnn7F%x42vAbLX?r$K_re_!n<9eqjlIp32w|x9fZ+h))8l3 zSK!`?Y(F?^1s9<56Yvggeuf_t!Ow1r}J`+fr|Y683Vj_L%EAg0JvmrQY+ACqIDr_ej`YY zHBE^g1*u1!HoSBAY-rT#50hI0((rep5^h?+?tNN93~h*EvrK*Il3-x91H}=lmA|YP z?ecCpxdl2;?&9k$1o-CVUXgf^cX-xmPF%wE0BQH#$(!&|qb|4x*%{~SH9HaIsqyG8 zL*2w8C04fFnzvir6HfWwU`ba4=hl?<@LL&Ja~phGOzfcL!_@d{Wtt}8 zkuF?b;IzrW{s?uJQ=VLgFRW8E;l+`@4nAB~)7L*;Jw8PnVZ4-Q$G!TDzmV#Ml$T|a zEu(xS3nWEq=U=r)hsGK^g_?Lzj-rbM$VDK9^R^a(#9ZRA}t7@mG?pYls74|PAiXzbO zT=gU0)qR}p8hJ25jE1ZRX(z=9=IgB|whXR3?H^_{P6mDEaRhwzaW|K>FR#?fK40;y z?(x5Ki;@I#tMAO(9P`xdE}ao44Igc(to!mvmOp;lDT)Y|OWce2o^2{OZ8k8WAprOL zDl~h;mhh8`T;8=jrem2ECaLCYB*@0VTuY~%ta-~uaWAO$EmI{rf8q8^^OMDe@$JLG zKnB4j84wUtZbosMk&?sWOlq-Y3v*);;YNl3TtVd7M2GLamIi8nGM_a&Z~Ru~f8 zd;|6m_Mn@VFma6LCj@xnP#8D8=^=hh))QlF9iyW{Uwc*VrsvR*bDr{Wa+*Vl*;}4m zO`?74S+t}svZVaBI4N41Y{MGsyF*dkAC7TUc9JSms4SF^D&zW;)T}Q;WTH?uYkrV+_`mH#N&Y3Iy^+IYz=&%zwb(J-L z&oFsU;<(pd*_W#%9n7C|3AGq)nAP!xp-%BPG&XO%$P_&_Umfc>@7}m65WCO2q2iVb zk3GH<*)V?4$z$^{vGQxb#*rBspKNqW&zNYG zn=!f&%h42Gc>v)o>ofC^qz&2d$YOlv=;|bi*vVL?QXo=P{+cB zyRvn^yN=XL%uL~!v!clS^_`TV)dm`Ve>xAqE>>jwv^$-{;=$$DoKeG6uQ{ok7d?5A z^-AEx#(qq~X)kLNDpxLA$P)Jd3JKvSh^9?b5seQUW9~c(&!H{|RywqpfwZCf5dC3vus3{P2Aqd|<_R^S7c)Ls z9hz6p!4o5OotVE+TYWyj1R2NwU;vuP?cU`A2ddoL5qpgqDI83<=E99qB#*61$xlM& zPdWb%+`E}>A{SOoHF`z4aRoXovF`>1Xu>h%QsWBu4S;XZ6t?tjV&#NJOEsv&mw}qT zIu0>(vBb6hMR+*0M3KO6)ctR+y0kOL*$TYN%?m72WSo?@$`@>{lVw!a?eZB5ak z^cb<_)nS%&A~}J26CM^>kLd=vdhfw)WUOmgM5n} z-4=({lZ=OcU z_TCt{*HAwRFH$;0x#6hrf5^@Y?}tAQSDF|`H9@qqyG)EbU{FB6idLw5%yxmq*9tw57T8*v#`lqoZ3i<}Y+2MK3GvbyAW7eoY&5HGK)5OiA0TI)1r6s zI{w|f*OcJaMz7rS*gX&n7Sc(<2Mc5k4Bpx?My-B;(sE-F6dj0B12ZM#?1^&GMU zlP$~7SBPRja*UpcLr!%wF_pL-Z2?*{L2n1Yz!~XlrBG$%zIaM&YY-?M4(1Lwo4K#3 zC?KQdnivrnO(f!k?~a-KFK0v%WTDW z=b$D$Nzt5-nBEGhC&a*T@O;?+3HL-aL7QAQ%y;!)KN&t_Qc#@x-8-`>-bu5g-=48e*@i{1Y|Z$@im z`*p8!Y;sKmqJl39oV?#oY=)yCo=o+~m*e(jyLunZHHh9ww?|K~&&GKN4?C9V@n-0a z>jPF!3PEx{E}8#k=n`el|pGt_q-ks?&fTbSojBf-`gQJ(ZQ$=iCZ` zo^uPzbaLD>4(k9W{HkNJvGK8)7E2?RZ)6sTxoaj+g8so+lH?(|n%tQEFKYY(tj3OK zABwRmob*9EIoaQHtI^R4PqHM6ixxNFx*=J^}(1eNs)fEE1}t{jvCIqZ61Y6INv(ik2&8`+FT7= zdOV|i>|Bh_-3PGTPr*v;S!q*jgq}U$an)xLu}D2U2NuQ?W&#(>F)QLx=8kUphgGhsr_n z&8qqZ|A4vjQe)?AUll}%!lWm!JsJ_(aOJ)ZZnmy&YQv(^Ysez@+<`f>gNb5uJU_8v zyV=DhEB4z}_{1R7xxVtOPP8jf(ptog9;-w*y$pIuOUFS&=o`4%fe?$j5P`0}i;Q_R z(b6yu&R=c6W5~#vCXK51_T>o~qZ%{0%&bCyxUq?XPx`me(3=R5RFtBcv8 znHJ@k7)f=SLUfagSsFRA%B_^{xc<4i$4^f1NthkN1fYlLh7QS-p7~;-S~$3F!XJ1$ zV=t39u>f47=CJP#7#fCi#0a$G$cZdg9VMsud%5A{- zd`By<-4#) z#xAmMYE-koLa%q)Fq!GjFpf|uyEzm;Gg;#LevDdJS({PsBh>v>AK(@`2RxDBy=%dR zH0VzFg$gU_nfcz5@@1u~_dra85|_GBtPPeD78I#!ii zZodXBG+H*y{$4Mxtx6217gpjDa$RGW@#UOmvcwE}-$Zh&MOY=(F`=Ltm8Wuy)py}f zoYk8JR3j$^SKckKV$D3IHEwR;8zoQae#ye9WhE`@#1@C7)-$C}9 z=|s&74WgP^#23{Q(Cl~T-B1~QW}BD~*T{Xbo`wN8EwyUXX}dNSbSk!-i*y^ zm2|A!-vb=1KgttFj}dX}nAi62CMp8IU7*bt5F?VW z&tG}I0|)YQoT^vQQ5om64V2n(d>}xjk8zvb{=NzfI#ZXVD~>iS!&8&gexS7&S>PxD zkRN}?wUst_bkaop)UQwUb%4LPDH@+P``Qs@wnR6`hVU2>oIopQKkl;lD3C4j!-LVC znnM9~gSq@49u6zK`)B}aXh+{mL+d8WLxg&3 z!rle2gNs#@%tKwIUB=2PV73<^rgs@~exC%Ef}WYV(ati>xTBme#_#kv&s9 zt@t&6VUc4dP9sZT^$coG8yC_RS?GZsVj$VM21>9F*(c3~rzd)eFm{!g$kE zF)0x)A+ec4J9(f0*6yt91r#5|>7lzmhT>!lVKvRC&6SYfzDR3!Ck+<4xshh|uV1TF zmry8!E>;qlPdFYT*a9BoNE&! zjP@tv4ujPK4?~9WZ8Zqbvn5we9)sot3lgJt!XkvlMdv2!F~@@+>k3b z@>?e}s6C?hD;`WN@0Gsqrz7_0uZ`81fAquTGXC1siSx&FGY0JBMRGn5intc15Thi( zP3L9+BfLn;^kt06h-uA?ze%ObIeH)<69EL^R7Fj*ok4%#Cf zkYF09>8^M)$jR~i)D03@{dem=DIg7@_}ux41+E#nC zdHV%m{&KxfrZL>T(3)%BH?d6W0rF=>gw<&)Q1!?ZGGy|X^X;+`;XE}?Khg=<(^8i| zgGyYC2>$2-Ce7Y=_u9JZ|KQ2p&^1J|2iN;EbyH6o^@?|_QkHJ)hjH}cp-#lyhxNIl zTr;LOOX&-T4i#0Fi7t9S5-N87tB-;&zA|ngUac#Ij{$K?t!a8imA&fu> zv}qox$Vx2K42oWEXm?;t3>G}lEGJt6H)HQ#fnwb$hE2754~{L@5JFV_@>yiV3D}5I zXg^|=De;L4nqYp))WU>#xVc+pr!xEIqlU{M%=B^C#SxaTQqTQdijF<5c-)MvyZ?nxFio_3m6zekyJzBby4RZ_tSHYu3{*i zQ=K`WFMyfXh_S-qGul1qhN5&CA7Ozq;vHkaGNr%DT7(`LkxqWOKX@=g?oeNNWPXyH zzmG6fm1)m$)XG4Ouma=OOqWWcybDWgMMh!0PivP-H%KtX30k+P4uo?N#WEkcGaJH-Yvtg#fkyqhX(~Mzq32kYhY4;BTu7pQ zgW;4Tr)ER}!eQ-(WdpjduH~Ak{)l2Ai6$lZ>0Phj%F@Xpp(@>|~(dgiH zhQGr+1=*}BK-g|}+V5y~Ljv00+?t&Y!;KP)dqIh74XQJB7>(SM_e@v|e`_G%X-NlX z8@f%kCRDp+fla^aG~jol>58HTAN&kRAx_dKGtTys?>sH{M`z;V&Fk$OZ5NAEIzWD* z3mF}G6N=YwxCacMGm}!Zl=%6XnLU%e(uUhk;HE&nm_U{>%fZd?p=mVRtd3ii$2TYo z0q-0`3^hzw&|+{}+cV}N(IJWPhvz#e>g>=$AMt0Hk1cJOcNe0S=tmcRYW44GG9qB% zD(&Rod&q0b6-ouc^E^>)!Uy! zezS<_@CU2m>&vWG%*^57lU!3)Ea1Fwl8o#N6*#d(SPUbg7|ve|b<)z~@m-WX%&W=| z1-cGpDfp@{Ze~ikNA#e*-TALuoZv{qrfxX)3u8qzCdm)twZQWoU_x258x&}->93hP1#+f(C=u4@^Tn`o0e8IN-&`7%RqUTTza)Nf)2K@aZVkuTGZQf9(G z2HpipXbAJQ7^J>xUgyMz*#NGMt+4vwVZ77d&R0=jRSfqG`X;xwaLCK? zcRwOU!WD+q_uQ_aCA77{8^vcW7yFuM}?7cz0T3J@U+-y?}%;-kZF zPQQ8u14AS-Kylf*I(35DQO(xitenkRAYt-d5qHcU6<$HHS)KSZ|3(!N7W#M0La?3` z`nC4`bKYf2&KzKui$u_ddAZ4ey@_ABITZov6j(3Kaw*Jr+}U5amvSU?E^KXe0U5J% zn^zYg>$NekpBT!ZPo1=1T^kXWvWEhgs@b38;_geEtHRwV=Mq)}UcEgLuGJ>zBY!(5 ztkr}4*CHG$V~fOIUeH90~|G%<2Ln11yK$3tMn;Uvvxf8<_QF-{pK+IJkJ8t$;F5 zsOgK zR2DElJmY2bT5=bZfUd0DxdGBY_bRtKdlmG^b%jHb*5_S%}Fa0pS*umP4mnKkL% z=GK$g1V$vYDlqmVU~@ET6Vgkv=QS?`F+H7vRiy=@=0L_N>})v~(7%Q#|JH^lt=Py* zVXUKfJYqelXf-el=%F39*>pJL_dT9x+b*}Cd85cVc6zJ-0Z`JgV zrxe~yr*}vwmLv}EN~SPj?+I>9AktizVs<8^SCU%#m`w5uvLCrF+&&`)5 zq~xpjBAk6q9$KPf(wT@_(wNm1X7woozFoga?L9cZ_^VvAHNNxTvO9-VG=H8m96q}W zelHjfUq?&5W4JjxYLjXn*I>=Btu>FK|3jD#)!Z?Qc5yJT_7f-fNccY-VsfTlwJ+CM zUPs;O)g(Ks*L67qNaKKIO|{$1XGzfwZM{NSf{p9M^Ob}O;h(C0w>}eT_Tun;x*)f} z9Ya!Q>q5qx>FW-E`>Hf#iy4KW1u|HmH$T2!!OM3pY`K4IP}rmJY3`RX%x($bZ0(<| zFLm;goleotdJzSaa#F(o({ja^wOy^CpP2(#yF46hB%+IxilqaeB>X`YgcHxpuKu3DC^>?k2*mOjz0e$t^>e!YUw8iThHep5XhE|ij zoli=FRr@dq!~M4g|2CgU#|lvNe{&hHY`?-+7K(Pm*f5f^@PcZFTl?78R|T*l=EJAu zOQ4@{K~ctYtYfhGJQi(?)jtGogLg%TL_32cpY|oTBDP_NpRg*O;P_hMd(+F*A-pN` z7<{pr^l+K-<{NcSXqSQh-4;jidt@mgEhR^{%USO%2WsKk0JWdXC?Ag1W!WR{c@nu+mb2XZ6)w7O?!lhe zg2s7Nn+IvWZcm+*p)3)vJkY$TnO}W$DO6Cr+wqLGe%A+bLawTN8Xdt$~)u^kWtO4jq7qU!ON~_nTSy}#oMKM zVGCCLy?z)6sL01XwG@JP0mNJpa$f~VkjU12gxY?PVt~d>wCk>xKGHhm3V-F4Kf<&H zrsy}5>nOFoUeRRc{PB_UXz^uXbxd2VQ?>KLFy$(yYsPzkKPnsM_#?$ZQN)0UyVIzS zU8}>=IWgZB-+#yQ>0{1ovcgbP0=d5k@$CsMru$#+qw&ZcVt1)@ZaidaHbGItvBq<9 zO$@N!ugj&CL}4xsnNvm$)asx(r++S&v&gzqw~2K>Kcn5>zAD>2C)yi$UzFn;5;6Y` zjI)iECGEhbcR9uQHdU`InNDiy@EK`e-422wE}C(<{#l(*68i&c+zY*jIRhD)xe)E* z`>uYCEBdQZ}3`B|7*&IABuoa6U`evNi;WXhKB z1nh|g)*_fs_U;u0u@TVjz8A5+x4kOnc!NfiEuKxMrH{1FH25%}#=&u0ZT%aPnH;YV z!_2(fQcYmO^nAyBM!i<}4F=KV4Q?44R5(#If+2*XLwyc^uNge&IVsxB06&Ck7~?Xa z*||{OJNhO)ex|rxw_A14MoGD9W}lv`K!6dHm4QS8KvA4@#$(4hZHaE|cn^i{cUXz@ zfpAUX4HIDA1#hFu>~@QvfD&ul;XB~B`N((Gcl&j;`!M+q%-l`c-ib*l1S~ooLZt6& zBEb}R(=}FK*61LYWsB4S{vq@0B}X!7XAzrN$XaC*H9u*Y9^Foa z=%L0wbWDt~qp_mTD$vGhfJB_4S>Iyl)r6Q>(p6SyHuhg`i zt82X{2S1g)7&!U3K^ju0vDZereyXSJedp1P<3ZOP@Y>&k1F(Y#J)U-#1D%kqTa}8Ee{T8qQ^+n2aM_So34IkY0BW3cT+r%u$>iiSr+Z z7HGkqHn$z)!(q!zd5QWDS%=xa?#j9)+Ex;{Z?%MTo$b@x_NUBFZeT+n_%{&QUYMB_ zz^J`V-iE8CgE|f3(cR(A73j3vhmdcEzV)65YT7DLn*_?Bbd-;1cIW;W?9Bw5%zQ8A zev86*xosDxFg-y>@o&!D`*X(YI z2fuR59Ud-IhT}Zpx=WtoS^IMC!ZUz$ zEt4LhA)o~X#3c6BB7ndLo~=fU^D*&ut`aHx8MOn<4@`^RgJ_pdsi_P#_A9rQa?;Cd zEQ_^m{hjXRviu-suD6Nv8f6QIoB)rAt(JzTB&d*>0%n8_fvccpUvYTV49rAHmFbedS~vARE)x{P&W z^&s&R&eF~*RGa(Qhr_p>z@UrtO-PCITs*gWm%m z%=}vqA7t}KoDywzd&VVrB}E`Cgm@)(<}XZNe)nv^ffatTi1-ZC0}1D z8msGwN^>2yo$1>xXqtR6pp0mK^ zcLAurr3)TQ_c(tP)J=!t_3meUaXv^VK}39;01Ig>++O4Mj8+DqZ~79_I%sQ>p8W3p zGUKZFmC}k~Ml@*@>fl*_(O|~BqQ{|=2-?k`)ct}&)|^k1an>E*C zaHZfN))6?eZM#1*Oy6*)To=rhPWCx(7)sa~vVGG-A@QEXye64e5nN6{5^eNo)P1z>La$+y*lWTa@oSr`WylMz^ZE#OO@mm}osI;-Mb;E21knDng}}UAK93{0)gFZi@s$H}8Jdp^ zXaEZ!aHx`$R}o_i*pB!M;4~i;tV!}W3~Z3Nx;}I{BXU%gSDh7=j*4>+K11M~1l=9D zl5L1tX1DqNqpHFQ<&I$e$P0Z{lHu(c%#;mkz?1Ipxz?0;&W89WiV(4)spxM+d*qaGjgm#USu*3L6uY_ImF^ z)_kL8BY~JDvs3qOPj@nvjT&kiWxc*SAGk>LT-NJ4m1UT295o2Ihz{n!%ZX;bUP>?B zDF~9F+B?K+;Ik{kW^;XQ@KtYf_?@>#4LqdImU*tA5ikq1;hneT^n+!S!NZ8D%*Zp_ z1UHhmYk6?r`%PU6FsW`6#?s257d*ogIZ+WfUG9Vpoe(5rZ8vBa)}~BgFxj9bMaW=o zxzK5lFniTRRD)e6sLZJ2Ws??b*1-?YX*k6rB>$T1VHflivVNY~AmGR}9=eWp@vuEj zheJ1O6jiT)aAr?c)4%H zFs{;;mw=s_Q5%`uQ8|ia6jiU01R_9VYMa%60K@}@i z;X2fp$^%`)SD~|+gR`JM$4zCDuvJrr})1;h>Fzu7F)aTOHGQ!#`MGm#{9O2%io7 z0kA)1D~b9%is+#L(EFlS8!3%Jg81bT4a;1g+zAl|WE=6<5P zsL6O7iJi*>D#7n+V2DrB5E1LpX$MwGn|atcK&P8x64N7WhJ^IEbZu_6+74reGswq(W>iHDK%g0)-F`hucksafIGN0ZkADHuq$ zcDsO(skGJ1gm;eRHs|Zz=Gm^I(3l6P%*M5zo{MWuqadkowZb_`vWG$tc`N~8px1#3TVzLMl{W8EN)s9Ds-gPLf2E>I-+#Izb_?>_;L+0PAKI@)JvdYEc66gl@f6aui~O7;kn#ShOMT&lQ@Sq zuDcSom>!V1{)#zx9Or2j!x+Ffuihl8>hTH>q|!clh?C+qKafOo=fBf9M2J`$`TBUl zrOK5krRTyN_OAeuqP1Yy!BH`vG9M4O0f8&UH2zwMr2Vaj6H9^H98djXvLp!B9 zSf*9pFk|+GUPNX0=PR8VUmkckWEnaDyu1jHC4H<*G9^qlxUTW>Ss`wx%%WQs%@{8< z3chOiBoi0_rK=4KG3X9Q9cwHkh*&0zzqmaVrJl;%-vTmu8f*A`ijQH4w6~!4#2`_X zi-PWP5pwR1@CF%lxyZ5uL7vx2l^Y=f-3nGh69$0985LOdN{DC~yYzK~q+kFjg6^eL zCuJWzm=_Q>^hCB5N`k^XPfLtv1GP~KuVGHl8h zc@`Fd2L`TTe{m5&O9jU|G)`#*@%y#2=<9{;JQ2_40$c`Vs8*RnA;q^<3a>>zDGh^y ze*%`&=>`?KDpDuv^{UcU1#ybHrf3lz6OY;O`%PSj9eJVCk7YINQS8W4b)F+JHp|e9 z8H4%0DS}ricpZ(Mqpyq}721&O4c}_snUQL8g>SpU99us5&fKX5SFe$`f;0cF0#>S5 z$~J1uJ5jVh3lEH?!>-Ih#cr9xn%PpQdj=_L2aCJrrJlo#LF^X8;5TEnC#^IB!5T~H ztZMVZF2jedAIRL@e{ixHiZZw#PC0?{(62;mrE*+K{vwBL~O{SZv}7 zO#rgLh$KM>D%AbNgXRqIU#P2hEf%gz1x2-fp-MaBarf;St^-a^s~nv6=48N-uADH$%UCYjyVPYSih(5hPeq7dR%f8clKzUka<3K&{xAi#ze#agQ8*KH zVs4PW2aN2s!m)0_oUc71lIzS#-2#V%cF2ca@%QGk!{-NvBgV6r`$93uvB=^sL-E+Y zdkE2<3kaIZ~FIZ*#f zKpmCgFsY_0Vi%z1xNU>|=5pTF9x6~BuBv)6gV%azanh3H1}Vcgb9=Ewn^)BwY?1IE zrTIHlgDeU%elFTTMhY$$jhT`Uq||Ae=7&<^24>c!blqR!X=-z^=ppb~D$Kjfe?gU3 za$Of#dsEOBr}8c3n`uRok`3rPC>a@I&L1jjSsWzWPlBMIXz-PiDTsSGJgBJ27mNoQ zXzbIuBLp2Vl*UPJFL2NGupjc{D<2Vjyk7r{3D006*yf(hr;8>M5)2z}5F&Ms3Ma@z zCrMfEE*{Aq4)^iWD4m3%R30?&nrFaR@)&2O<@4xJktyEMV$Jw_LG%8C!To}sZ7J%~ z*L;wzIdB})(lG(NoOTXvi~N@+se{^J6kIj1dPkQzZ{uoe{3Ytaw$*TTHxF|kV0Hp zv+Rjq26KX~@v7YMDB?R2@UShU2T6I}RGo8^+T5d|mzlpBDq;&9#PJQ0y0M2KE>I?; zud*({CtuB$uBs{vBZ1}FaB(F;OuRNudPz3o}sFV zu|1gsuc9USZM~ka;o>QZvI0Co-zaib%mb;y)BF;WZk!rg1+zzKmpSL~3Ku!jLlw%{ zSj@9~H6=WU+bZ9xq)ZwwoC-3NEx^-vbFz3kj&>!(8hCDN+BIuEMnQ(dLL5%ML@VL^ zi)6>MArQ&}+PR;JfpczpkTI|>aRk<&Irjrs0&io%pd(}a%^Ae{RK5-&9^OVq_VME` z2pB^O8xvKnA1T)W+36dK`M&878n{ZVKzeiq_yjiEU(?SZE@*h0Cs!^Qc>YE|bDA{f z9;SAD5?0t7Nx(oHG8pFt&Bhu|&I4<9IbJ}(VqKvI!w>uO`z!N0l6|=ci`4vFi2@@} zp$sG0(+~M`5jE8l#Z?R^aY<#UZHe@bEWSf^2VRO)q~P@F2*pMiz+-T zrI@|UN980tg6^3htmY(uh(#4?VL5mIm0+P2bybDuq&H9nSAw~5^uN(hcqVIQhVE-OdcLrETp0(?^zjvY7N`3)*J(IS!f3(0;k?+zLYgk30ZQ>4 z;LGQQvgVMqiSoA}7*?g+a0|i+w0Jq}FfW1I*()IWZDr^#f{|nNP-3b7NIyJQ209I0 zW%Np^*5B+o{|F1DLU2I2iA+JF`6Zom1nbqiQLSLLCI{bpz%&~bPw2Hdb|X1>EvaAw z%0G^6oN6p+LdQ}Prg{ZMH-q^FdK4|7Kf{)7S8_qLTK z0>l~fz;x8wSeUhj!?PjR&7q;<1>xAmUap(R>NJ&cWO6YSlqB^3#zc?yoOipJWmv0I zot)y@os5a6tuo=cou9n^PPMc=i}Sgh7fO+);6b??*_XT*d6ToI=K4nIMrKc@b?GCl zz?i4GsB2=@2jWKiT2E7+z0I&QhX^`ESO`7tyZX4iQ)tWsLbIG)6T@=>^4el~C3A)3 z1S{)!u~aZx0PLHmFr|8hex8PnMbWMtFO?>YUd%k>gRY~%qXjukTf9D=8v!gDY0H8> zGiyIN>UIALL0_VCXm0>6=aA{aD}6 zsmW|Zej~7;i98l*hcUfk1?V$MXZlZOFAX4}(aSTI+6*^`XDtzEL z2Vx)#g`j10N)Tf)=bCD0e&gD}=~8Sp^tMPvYfh;t7~YGh2V_hv2war+$CPU6JYPC6 z!XHavI2qq>3gf1?Kz+ahC}T|n_vYBp+f)Lq;_$*298k_)RH2K8kj*HT4Hy`MV<7CH z4+C@;dYL4D7*R(Ptd3A#@Rhe`+?rG#8-^~G+t`6rkHnt*4WtBGqoYv}k&V37qtRPD zec$|7X8sQ1J=0Z5N^b1bk3>iX={M*n=M`=vaG6*|(6wtgfKE1SClpt%0ILa@(_7Ew z_F5o?&BWcjmLnQ5DRRLZ?IkCk#Gn>tN{CB(lv?2ICZ6?-sFwl*#WR>3Uy?#fa}8oU z;Lz0Zm+ zev!is@6r%Tp)+}ian*4wqE1a?e7L*&PgAZuzL(+ge$(S8+8Jd)vFT5Xb9sZ#Ri!gz zR0_5;On%lX?#C-3 z33=wR?#4yvn+@EPHJ%q7P^_M8u7h~CoUo>9E@rQA^IVEXP-%qU(J7;1~RVkV+T0ZYrK3&GKK~UZV~oYsfWjs>}tCUde^b z_`ktrzLj*uYlV%fVUm=Mlu;FxCK9^avIWG|UYOG=rwW*bDxq7}3TSp1nAN65=2Hx(zed}Y5fJPN20{zf`9i*9~ zSt(ufHR|OHC2Q|D<*vdJFi^#e8`R;e2A%n+R@bH~uSv{Wp=&S_E0i+|#$ZOgpU8~d zbQI{3YsTM%gs~w4x15viHLB7oJk|Zf((0n7NdyR-nR_U28H3W=&~;y@UI&B+DBJE; zNd;#z93<)qDM8msvO^>NcYepjh)eL5kwuMDRD5NHF zdGDOe0~Q=T)<}HN0fRx)zK4Q#v0%U8mtg=810tNxv8W4#K^s(r?s1RS0-?8Z>!Lw0 z(UQN)%A63(q`bXtV;L2$^kUI{e&<-BzNV*l;LSOR=}@Wn0c=E3$x=t%o8TfgoNmn= zh}p?Vlj^tUZe`sAubp;vLK!XzOLXlQP-|pPd>dNg#oPnf2wiQR9MpXlV8ZxsDsR8} zo7VzmOFqMPk^ul=TUi}Oa)tLgvZi=q_){%U(lKsW7967gG;vr(V~ql?mdN})5SNkc zx_W5V(`Qfg0v7~`ooX89U#(Aq5$j*MS|eV6AjJ+AYrM6{M$9zdn-F={kUAUfy^zTq zC`gW{-4m>;2xJ!twXQ;D+ zn%iPRS7Em$UnM)4PsC=%rOy!PoyhUb25gw>wq#wx@GY7c=$i=Y7@-h|0m`ajRQ@a) zc?%t+t2S;J+MbX0QEB~Qv!%G8USix_Y&*NxWCG-M0}dgLqw6?+R7I5g z(5mLFrsO{iN1AV2WV)u<1jq@0k2|8TBfnNQpp4ylBR;!TzBROLyuQa`oq~}PzXFL6 zp|wdnqQJ>CbJ^AIWXvc|(t67v_ZU6?RpA_^8onnc;y#3D)?+h|XcV4fW-Jyf@rjb& zCCpqXj8GNRlGW{lb7ER6j})7zor>6# zxh`_u7KY0~$jg+BGlN`wckGIuMPrAL(B{qzGR!{DCo={AjQI=)NwSAO?ghRMT%daF zvTUA@zgrT!IG7qW9Lk*aX;g*P7R&pNN)rsZ+e5-@g29rLre+I_w?MC64)gU62&Q?f zTf=02d1B!Pl|VbI@&;unLb35pe1&4MXr7S`-!@9O8aS&UM^dGzT#2*Q%=xkfS7`vm zfdqN8SzlFfs-p1-J+B)6GHTs0Fn1;v;`|CGXf(VISO^@{=7^f%FnqV%&OP8zdX->3 zZZOKf*;o@fKpJ$^8|n_I!;Qm_eW9sLJ3P7z%!EH?`;rdco+j!dP^JG z_=Pdv5NZmWF9C2%BN+3XOI~NyNmy|p5@l3)erS4A z3e6!r`s`Qs?}O8k3a~iG-lhP3+95Uz{EkWIXCe|_KP&iGKedsr;#j`=kf{T>Q2;(myJZM0OPqLA!V z-a8o~%;!Eef@K9!?|dEFFjUsd)X0A|_vQek-5julLfyTvD7jmY*EcD)uvLMM7*$lARXVYMEnfXizwX;`Q zm((hvJG8W`^q5%f-Sg+O3JI5u_rj&Cs**N(aAn~fxk|7mikx%nv`y2-XUW6B=MicSRR?C&>$ zE2=i8(1H>AnfCxS)7xK4yeIbw(&!_)v~y?)ni%bmMNF^EM!#-^24+DP(;L&1CuZcO zq?7;vtuCUa@fQ92D!HyvMcig!Ldw{SO}!`9`yZE!Rg}e*nDP|PYKvQSagETb zd4u*uMbC2{i77LuL1+9eW<3}jc}Hua7}i?B$0eA_$6}tB#&5KscXC-*r)LX-hg};c z)zd>~$Zj(D45h`;T&7Y4iVEZQ;JaKF6uUJZ%NyFe#nX{WTiI(k-A54a6Ud7J(BJg! zuO1aM>ybe!!jhgJVA=i2IdQ%B{?5JsfIYt1mBQdcwKsD)3!I^#FlRl9L0LR6j!+Arl6Mle3x!qcz zQ$pvtK7)OUD zBy01+EWz29`w1~*y21F&G<;Guz*o6RfWF?GzGLD;`11b93>*&IV$e4)I!%KS7h&## z?!cjJyu$NB>&eN9kfMD0P2l@0O{Cq(AlKlVc^`ZtF%Uc5I>v@9f^wc! zaB`l~V}Z{0^!_m>eygE*8spj|6)1KO5X&U&=W_gpMqjOr)Xs&E07h?YM`UwKOQrxJ zp|TP5=+|=@3vytg1(P~tINSu{Pv-56;Pxq2XHqsV#spB)@z!x(A_Er%Oe76599m9$ zb%BNnuNe#V4%WxIbpX=40DsR-L@O5K^;lHNy+*ZZb?VY*0I?9p6g(w6(}=ouc}cSz zpqW9rO2q@-Jkn;%+L5s`7`R#D6o_w%$Fq5{{fXwAKD)Wsr1Q5kJig$-y# z0TYWIpzm-62Py)_`Y^#cj!;)DKd2Y(X%3DFGUz&Wp<;n_OUm9JY6a?gx_d@QO-#T> zW~dTauw#2V#;g*e=U;(QoWge0_psT^_x&cdWy1WGiQLQe8SuueXs(~9WsgKEtb|Uq zqDCO93<&hQ^SLhCI>JUz3HtU*oTMiLOC zI8fZw{BAOzfl<)_cUh&YOQhFm>~fkL(2@GRLKUT5;RlB_eKm z@HuOCkJBKjoP^|}vK1Aabo;d?4C^A5)(lc1Lm8FjQXa@d%{8o~cQE!W5Wla1**L67 z01_pkf$E|D!J=C>6w>g+7+a3isji;*lXO|<6;vjJfWGkkGvRy&C~4Qm%D2!v zEvM+nTT*(N0hFGjN3C*e#s`@*x3$--E-&zKsfkd*s(;1y&=^Q zE%e_;7#ZMce+}}GUJ6wP624mUy_8(@Duyx+)iF)0a+0kPbUW$2`cO!%N9DIT)G?w* zHNcL(qQh3JCl+SC;nq)pehB=tIA6>{fI-(TdNrGUUE4?dwF8V~m(R+grAsgRJGUoI zV@6)|PtlGivCX!pF7;x^$`p2sLRa28+hv~ohRR6Si-9Jaexra-`V8#6;5s{WEI#O^ z=^U<8fm`XS>HF}7Zi2$D&mSuWu^vUElOQizq`Am~wBpUPenSFaFQs*#K>$Q}o9M&p zL$pD(a}R=uaiTOE^lgS%SN2pZei-aVGd?i`ajTEiNT3|W=UGky4zMrxoMrR-P4&Qb zt|Iz|OBi{2kl@-qih=<$zA>_RUU1gqL336ph(TxU1|W!O!{g4D;x4fQ#G+q!zoO|Q zqJW%~8*$U0~`B z5x@JQ#R>w3YlXd>o*kyq8J`dz^b$L__yak-st=f@xDG9pd%Uf#V|2FAeE{P;$)EFl zCozH;OH_i2Fzi_Q&;re(!$v|f;DP#ih?v(+AT(bgQ6>t=3&j({$zBtO5j>JEir4;P zVhE!FLe+r$3!{Rvpb4z*IM)uip18s0&mk-M{dOXeyRVNx(X>!rMH>)WgNlClPDMq* z?bX|3ok(y(+KhlKO${U{=Ajmks)*o=K+N-{XPVxm*sJi%?Fy&yR>%IqVVq&zZ(4v_ z0Mio3^4~sA?Rrx_bp%v#LZ3nM>(wzj#1;Tj3v}ZQ(#gpu8nwtjE1i+SJx*z7Gdw5x_Ua&I`E zBZvjsqm~!Xa9U9w1ewWjDc9vV_-l|ZVEq=9AgyjnjsMz|ymNU8|7|=yBM1&)#M216 zo)jl}HX$3&*)2v^IHu@XzyJxdgBNdL-Hw0W!o40j=M@6-fucBF=an9n47M{4;-LUP`iSZ zJs1OD4#A>O`6;C;n-VrE%T@(~4r;+w7%Lhgx533t&}b`jVowYRtJIcGs&XZ|s>9+* z`>;7m4JX4#(g%5KD?fxh@yt_Ydky`x)9N8*B>jPVkz}&uL6}PKPz8qGU0eR+`m!&o zW4Wj5i%PRq!$VtqI^6Mo({)}%iB9h0VYXdRXyRO9)Wt4Irf@67bt!6rOU--G66ZEU z3?F4|G#-HkXYxi$&PtUHjslXub7HF&uMZ{$7R+J~`q`?yDX}OA0MP@H|0hacA{f{N zb3YyHe;b0dgb3#`mSYn1p?7coaKYvBQ#~sVHTtrXpPc$AI3Dh{1T$h7+o?Px=1lYoJV6(efr{Pp3!D*RhJnBqJ-m z0rmPOv9|+}Fk8CtSgS{6?xiSq%S0Eq=Q`K|S8aGT_MO{ZyM_ym44dQIo~lv~u;)v+ zCJJ5i6OSDA{`VHdQl#zwm5(dna19{l4yJUBc6M4a_?81ba8R#!iF+n*Tp4Zl_-mk) zaZ5^ky23n{EkrG}itdd*WY);)HCCBUFkvo87wbpORDCd)t@KdoYX|AhBY6G-M7Rj| zwlZu8to3#4>f;N9gk{o^G=6Zp@>F_Z{LOY| zAi`}(KU5l~`po6bx{Fu{|2zGnQ+~hPF?zGB!vcvJHYYT__uV!&oWN1CqLG zhk9ieBbrGe&{Ea@*WHg_Eg3|yrQJ1)J=jlEISumbX~C>U!7dd;1)+dBBg z-zr^#n#wZ&?do3b`M@RKi){Vhj}-2e`Tw>{+Ux7?1->eAv6cgBngtd@D1D*P`v-$bNQI^1p{;~-jh z2u`ju@T#HakWXZh;C7Gj=1H)=CB%1&QlB6hIK5-RLBftAtgHV4N6JPieVVFQGxVHQ zF==a00dw2*)Ws|aY5{zPTXH;w9*vH8P19ROauTW4NOyPg9(xqdw%EZBMK zy4lfh2cu~#&uZUr{b%Bf?w1myQ@8DZ85|12(X5GH@T+`39)mXIUI)HywZDux#B&i> zLT*i>Af0%YT$8>VT4lqpXgYA`hl=}|=BpIp4u!3H@N!7ueAVzL6M{Zi-o(uqTb%}b zu=g_{&t)cJMAg%U-gjt5h*@mqpKo&0=c6Gk2LxnLsUJg ze!8&h<1fi#%W1yT|BmA*DfsX z087oTRMDTfqeq;*MoTDF1|adum-JN%fGJyrq4%2-ad#u$__ekp9tAhpFr*g@ln3a#e9GiJQjj)UGR&IwjE^bx9~Tfl*!jBz(o5D?rn&;U4~zIc&WMQt zWfQj)P;svDm)YC)I~nh_b?=906$Sd(^C+4=R6PU|bn!az`GEVW*IM_oSvQ~Zza=F6 z(4L#XII{J@*7htLJJ*Ok-c7z6*2>oz(O`+uJn*L}ZJP*tfjVtMvw%?Jdu^y_ zj49}3n&aTTC1nd>JBR{B-Jq;?G`=lvkWEsV4v6WPc8Y3tPstBW29Fw9s9?_Dq4Tiu zN?h8MQ&K$?4}vD$LeomNAT&DrNBWNNddgMjFV?qJxY+*t&jvsX+Ra)(o{B!5^ta~$ zJq@#-{_i){ri5FPg;JrIBgM#!oS60K=)WTKVCh3MFmvEUYAsUAJx669xN^wH#&i|1 zfVA8+DcDUp>wlZ0beKeShz?{#P8v4YOrvF}3==ASn+8b9399AFg6b*J;dZ~qCdu}q z`jAM{ff&Y$$GW6`tp z+Fa;-ytxIxx<+SyoO8o2>}vh_W_SgwA4}MMCWeIO`V+%)$Yb;yheE?vI=HI#8 z%=4*7YeolyXB2xdRZ3e?z%YQ>=8n&i?a(D%BC{7d;szMA*ou_3=2!|xyx=C~x`zPN zzTvrCH-0KT#5frIk7~PW&-Q~cS7MZvgQX%!7@d3fo1DbmiW{N6tJlA?`{K&(oBu3G z_CgT9sy}g+8tRZv_9_=%pnI9tNYC9*~8AZ`tE$NlZcLtlhlY; z*-+A7%U{Ar49Z)1J5*r6)KtZD^~u-`RtQO}xO?_7$3^Qq6AgUoXCRHQbTUq;vLv_r z5N}78u08j6zrx_Z^1+irR??>b??%qC|5)6|!}I+>ge$uoWHbM;JJGUl$TuPNJm%!L zzx{AO9L;U=JNoPvHffGDGJR~NFJQf+)&1P@H{>;Y>5U@nO`tpYpay=Yu*oP-eyG-S#T z^%nx}*8(lWL$)ydMgBd00baR7N<5Q;=LF}~WQ}*9Ia4OaxYZ{9$EBV|)!x-`Q54;E zL}Rbx#q=hwTby`g!h?fGkTs8@{kW;^ec?*0=JvlU_xYXYan<2l^3S6i|REXXr8&kI2g~| z4n;2M52O;6=t$y|or2jQ@EG+rwi+%EN)49&WoJ(an?p95^PTlONq-LMGSXoPECI5Tr+=+&)!O9)Stt%^C ze*WxS+ph^bszv3mpO#R};TBYWQWiu4m@rAn{|e_oC?~fj)4ZF)b8i$I^4hV!OM*a= z;2iBD01%NPUyp&|?r>~=^OfT`q=y9AHI)y_10yjoAB3KYWQE{qd4TKr5SX9&<-gyQ z5O`%O|Iv$>B3WoQ>2zu9b;#MdhmX7vZQpK)x3WYC6LTVLK}7q(Mb{`qR@IK9m&mCf z9K2b5_vBuuQ2t}*YkwE--e7(ipuEGb>?o@|Q#bkH4q4fO7titjM@~f^Jp=AYHwH=Q zz$sQWOBXJiPs*6)Kh=EicUm;C717va50%1NDh$kuyc`z`ze!ygD~wnD1O=zGnxcX4 z1jIPyge9h1<2+zoK-+g4{kc960a)hnOiZPS^1t0*jJUJIWkUf0Z+H1^O9!=OAL;wV zlCXNcdG~>|OqX5nH~n&_%j2JacG~vz97sXv_P;nZ; z29h6-X)Yd*qJI46_FUUC_fE%nxW)2!>5Z7DR31olgT9baG#w=ca|bzhJ2sfw7jrb! z=WH|T?)NO_aIU~~hIBxa~q(o`>ya@XGp3uX@YY)UJ!{PP*TGaW>$aKN9 z?~Sp`mn9Pd#^73K{YCX|4Zd>QOwbH&2hsL^OdQxK(m3D~UaA#3s$CMUoZi0ge-tI0 zD5&}Q+QUxpJv#jGKRL&)cg%d}kl4L@hl7J-6?KWfH}rg<%&9&5&U|gc)aUKnHk_<> z{lhBv>GILv@Hat^SQm0mWuk~<6!7UH>0MSgE!wbFKgHPE7)wJs2{-4ktQN9Xl(tlW z^=3G+n69cuY~!m)VW2^vz-YbW3GKo_wYDQ4>{KGbYfb70%mGH8BCw{Tz7+s5q?MUl ztJzsUdG3b+)1lII>>tN3U-GSHS+%7nu5bTN^+jEMB?!De{6D+pL!a(&xdx0!|9QS6 z;pguTR}EBDUH!?=Bv~rU86Mwe9Q^{h-eCTD0gA+T>I_9@0q8+vcA?J z!X_R)ycKgevH#qzfQU#h3u#EMm8y$I3Ur;)POd8?X=WvRFUm7q%zrp0AvcUntqq5%|UuExgdGlO3YF-2m>|wi@ooScyLoA z43)t1wH=w@ zQE`+!Vt=GRv95Ca!L_F4xO_q7$%NLI9p~LXWZvN5f86&8w_)yu&MNdk!12Td`@}F0 z@K(9;Hk*GkWPnH>AnF3;eZHMHBD8Nl6lkJ^!Jn|<{izedoH2|mbLcp-HrGgYRz^WT z&=gza^5w+1Ehh%oKrPKD&?y+`j64621$9%vGV`jjA5KQCRBm;sLEIG0x865gYP~Zq z_-@FC{Ppwd(W5yO={)~W{B`H%V=lUPel^X({$|I}1O07ZT%WM82?5(lZz}&?TRHZ7 zh@Fc}wQ{E>_4nY=M5o;^{+GluY;&6HEcl{5w&l{(x8bIyhvMjqxqkrxW6LX>K^oP0 z+#4?|LB|rW#R`fw7pTie<#)GpU45}5 z6~t>#?cHiCpDE{a{*lz58Gv2?`s0sx-FdSMpHzP`!AtbwVZAcx#Ltw4R_vQlcdyTC z_in3TV)#M7ZAJ&-51&R`j%F+hx3+7Snx%FtuaqzzJ3?q?3@8JqV4N{2doBnMEag(4 z0Uz5@WkX25DWJ^X08C!A;ewE~k>L|@R~^95uQft5GmO*V+gDgApA8mtIQKn~pneY-b*Tt0yXqHnx~t7U%^`vIIV<+!Xiq9<`Wf(}9C^4avDUl%>z8k~ z_)NNQtNZIcPpHoVp(Mt%+f3LTFQ5F1Ah4}WF$X&gk%;R+t?1xpDtIglXDjN@1gX8yE z-}0H|YbV=8yS@QuaU1^OJ=)lZhOXz^-)%kn_v;O<$0|x69jdLpa@^K_XYx;I>zbck zUR-{P^KuW|e6_9K>gGE6f@)w-y>K+ok4L`sX|rA8Pv%4@l=%>l|BB~ntPxV$3f5}D zxjW0u?+^_rwq!KM?`7-}L#c7L{&H@_Z68lXl^|D4_uwl%M%z1Y<0QzK6VrlyE1tSo zh?_0}DF%CB?3T&e`6)hvD=8kSAGq{g*|~g8?69@I^_xMko0J}yveDf8^7^;GIDaaN z`8ldFnv;BR=ZSG}v{n{E?>y?Wzq0xC%WEPR;eVuccl+C(r^cUmdAakj2=(lXw@2({ z`~!*Gjz0g`tN#41$ddxsm*4*S@z#{T_t#as;9757`f~G$4E442tlk^HqVF^?yo<*C zV;L#>YFacjiya+M%&#Ne>L*R_UW0fy)KR0N$ll3b!0B}lYDCskR8G9rMX(>~HC{OS zg*q87TF53vgF)>?T#$hPh#7#ewUAjDyV5=!&rQ4S-*(pL(#JUo_Mw?Je@j;dGEZLo z-NyIpKX$p~?KyVm#`Y{A?~a`M2c-z%hgdrD<;lkz;kJLijdW3A2k%be-R?iM+COv0 z)DnG1w!hMr@7UJbw{84vY|_%{Lwvto*+*Kj%jf&k>OBt}5I&sx<~kxCaqE{r$7`#m zy|!0^<42l_V+TcXLb)l&95=*8!B4Y!BHf72@h!PxffmrXQYx3$`e3_MdRL|(_9DvE z3xWzx=I6`p{9K1>Q(m25H(HvMKTNHMaxvIgwRxgbXK#F{t;y81X=f5NFE~*-*GX=o zBQE{cwH5z&Qvy>eTNJ2L(VIgr`OzUGHFf7FH_3rFUOT^JHM|%TE4OGr4sp2 z;d}Ug_$Wy=)893^_r{&ehmRz@fIt1fWxs0IfkyuK_SgHI;Od#M)L5Up|M98Wg4kk?#z`;1Dnq4xiw}fTkADIW*^w!8gmd`o`Q7Gms4VkL}WMg5yxbxM%?RUDBaSKCf_(f402zna>GwhFOdDgf6zIj=H-JYEK zO%vr!m^DA~OX-E3+@{Q5>#lnxr+o#E1otY1dyIt!o1)^<7GiP|G(@uf zLjKUSe;v&PSmDm3T&*`7TTKy=tvy(-kg@`mHB=^3z4GAMB-f1CN1e$CZ1Qj6jGSBm zSxV@udgP;h+&+s5*mN_-@dyoHfcZaZQb(G z&4TTfoqip+AFeiKJtINxq0;13)(NcTEG4K z5000QwIgdk3`zOL?c33i+Un~+(kp%1;E=Bl?yuw6;a(i6_ky-={oCj}q_ffE&aHjt zoec+Sawy*@GM$_0_j)qlZ<0zu!Lt?MNl|Ly)_i59^-bgD;Jtv5i{KVeGh% zb)D7Ls+ZXhH=L4heatFZVr|dArtDjfvke?L=TiN;ThQwPosN3Df6uwQfnIli5%Kr^ z(k&L5A1|XceqsHVBQr;Ld%w(~m3j;Rvt>%fZ^yeP-)Tr5`1GCE&x*tUxF9Z$yZpHI z6880>ILHWp?DKG!GiS%*e9DnSFHYUA_@vZjZ)0jo@=pP0{z$4vTxu`|`quq(!hLiX zPx|*jKi?ZQi`^On6cvu^|Wt1Cl71}^6jdZX(Q7NAX*YUOL2~n zbB2JnAuBGlXC`+8;*DR~-H;0rh0(tzaNcxv0Z;7-!G`fFBW>nt3fxhQKwWlHC z4h^2B8=3PT@!9@1wElQaU%At_*gLYwkgFdb9By<+9L^tYZc7hs{LKGR)t`?XKN?Lq zTQR|Rtv->07M+Cms`UeT{D%#llO&s2MJNC zeBu*xQ;49<>@@Ih9`a`UKO6AzTD!fndjY>T4&!h>Im$p~kY-)ujcukqrTsLD6glx- zLfobWh^cEuH8)kxb~o=;@3^)LzS5A6OqlF!v$Bf$);+Gz`bCpv^B*I3Zr01c$hjUK zKY8VKeTd}i83)d1q8HzO{&tx%U|~Kyj1Nufw@rHXPv?RiPj>ym6u%r^oV%Ff5K=8T zenNElvmGAiKf%Yu^jbA1dwK8j82eHDEHLlF{%k#BXA$Ktev9?rE_K4kD-YiFGkHGy z&GOOhM;}@$PNX^43S`Ga?^y-amYH8kfgi12TK=`rJ@QN`r0`iGS1`h5gXCK)-7jPS z9SxQearOe@u+8)lup`v19;|mZYOulh=8RhaVz@JNM!5q&hf|LpkEIR(UJ)ysey>UE z@smqXzm-QN!fGpp|MKCrIE?7p{U>f)gA*psyF?-$#pnP2JZmR+HChP~%QslVI# zcDn5H$qIDp{V_4zBB@$9VQh>J`2D6!XsUDhn@a}IeY+m*+V^7JIr2nE?Do@`le>9G zGWq+FPct1n5Jw)i>{@^l_ox$3o&M}T5{F~HQF(&{3?%{Wi*U#VjYS!sj|RM z_z>$c^T6xwV9u{JUU!NHEG^@l^bTkaZ2~oX4C-Q*wo;NMaBf-Qa8Zk4q&NWzL@Ow= zhAAUhz-ZeRbFyCL;{;=NRu8rv-TwKJ%$b7+{oa|L1h`i(wOShFA&b#M!fBgMSa@l~)W7xQC1$t3Plkz6DoFJ-Gz*a?LIcwE|t! zxCP;U#kU-C1zz$=L2-P$q z*K{7nA$&|gRWB3$Z>%sv%zr|_FFs{t*^7XID=OBuSz1FY9i_R5w$`@=ju(X9Vb)7R z>EG199FGWmzUL8(d1Sh_hWFZTPg38f=gM%RP|uW#kDxo#$|>7lxz+`l9o5&K6MZ5W zXJ0f}wKPQBWi6lhzavfGN>VI$+8urr-pwfk?t{5H$%gID=LfEv_us#hd!uFkapuY7 zEd0AYQG5Ik@Xx=f_~>k)i0hv}Nyo2Gy!e{;88Ttp&V(Po+wnhJ%FG(%MDtz?m{whtb}SG%b1jH+Ma;%jt}vR%YRc6K%k;U7>= zXe^hgp*qpqf6INmP08#O&biFDrVBvn;JXf=@nwjv!i2|O@xbfRSF2WW+Nb{L@j!%Z z9x620-4CmM9kwi>(|Y^uG!QRGiBiCVL3`F&|C9yy_bxq67PrW&iO-mSw3mcnk4w1f z0~bUdKS2gZlU44++~EGj;v0`lSz5BvIO<#g&}!tpjEUA83C>k9kxWUN;UCkR3%04) zJA6ywctc|}w>6`~rH=oYu5i~3#=6X}az8vR(l5pK^FDXFJ&N5Np5sFGCq#a?s84cI znJ{*FZZ04jgh?%Qy}QUTM@bI#N`88}y3Z0E_Ely7;A){FZND@>_&Jf(s4-?>yh^6ewqxG-w;)MU~&Hb5+}TH%%eYG?$o1?jB%vuJ0a>Q{v{9{%~jrZ=)b zV@~eGH$fpP#wDO9hV-CJH)qsUqKg)vMmaT}Dg351IWIRh>Zs+!)f88Za~P=^YKq3m ziX}>qIE;lkz+rwLALPB+m4w>0)-fMw8%&_D5mL+J+Wb@+nY2>MBl*A$v(M6 zxouysPjY{_Ju>c2&G2i*oCKrdeTk{CFiSf$l0?m|Tg^FH=62yTATT;HQ?n&`*%x?d zycO+C;w~qz zQtP7_I!WKFKgI=^Rwp0CiN2|QeRCNLW z@7S8D3;x#6U5oA8hA$aVaV5> zmo*2^(;gXsdwjugCMR=P86fV=H6uZiNj)@`BJlLc;m z)gD>^UeQI}6AJhzh&{7=^Vlte1{0l^$L(;e7wn}MptC1ps@Xb!$5(xH3ZZf`vd+R{ zPY6P{aQj8mr_c>j4G?g)ZS$web6_whP1_k~YwHFrn+Gl~{VH7v_{24B zCOUA_5q0B$WyMEY*+C!oua21C>;+|$KBP~+9&^C~)Rwjbm&&6uM@u>E8fo3io{l=Dk7R4P{nT>~#m3J)N}!V%xtNG!}TK3ax`JK!0F~>pTwF z^{Lv)y7q}%hBul>aO9d6MZGph9*of}9W6A$+?d%Y>jH4wPv*yA&;v_A*Fr&RU0+!-GxASh{R=G!FgA&AdSUoYC zVJF|b8~*GKuqKkeDZH)`LmYpj(8rsxds5$4Y2h7#97`C~U#Ws8r8XM~d05Vc1;~)c zaT`ukjZl}g)mx8g4XQXBAy(hVYFQQo8KYFh3h4plRUHEVla<#0jda~2J_L#C+i`#5 zpO>M0J-0;#_ih5S_?Te(f6$H>F2>V57Fn|UvTUF&5Q%1LTYOx!_11_FdO)cm2*%6r z^KV#ygxnLQs@{We*brhGuZZRl$DcvX&gsVM2G_%_0$ssyyR|vxeQjptNy**w6G->K z*B`4+_@*`6DIf`Y{MWrF0(RNA#g2`Uz1<5=?_k_>cqdLJ3alV~ZrUfteVW6zOyoW% z`@*=RvEu!fs;xT)+ayZMs*)sN;Q3aqr-OKDS53TME?4Th{Q-@CE+Eq0%Z)^j-R)ka z^DnLC7?dlE@oX)sT3z3`=<6+M;#Ak%BDkVR8-C0AUX+};EZgkf9#-+MFahoKuAcFh z`ONH)*IZ`FHpKQl-|7oz8WGIuRvtL6_^^Ut(ErU=b7CT|Ak!k7Kfn>+MsQ(lgnY`N zy8Ay_?j)zjf%8)4r|!-ml8|Ca5r}^G<7@jeH1>}tM;K9Tyih?5^4xIV^~+vzuk(fW zqDGxBjL`gb@$dZe$5+&?8OBYO0)RO~686XuRGp$iy+2{MuUUXeu zPHwB75;L2(ar;#j(~~u3_uC;iHdpUUf@JP>E>|bXHCp}r7@;06Q8B0`|D$X{F0Czn zFvsFba+gca{?D|!7X4VQZAnQGt`Ej=xS3Dw1?j<`WQ=#QWC1eRJIR;NLQj+i3r051 z3Uq{)?Bnns3(_NA&^?^Xv3Z{#cB84pg6s*Uzxj|qrS@Z;S-}@S=?FB7xBG8Z{uRS% z!Y|??DW9v5fCV#UmfN#w0i~B@WKVPE?n#lf=N50@O!X~)b?2G;{WYJO68L890i=wB z7XZ+3L-ix?t$*`Jq26M8X$yaLAi3mDgMCZ4SSZ6d4jU;U!^L7SLGQq?81926^KIV-r4_O5MAe8Ujx}3)e;3MIn_c+xWgS z+x9ow>Q)`O_z1A|o+xMbq=VJ+bH~0PEdc ze=Js3hPf{ET2a?$57%G^(GA{Bl_2nmG7C}PX>W;vDxRF857=zMRkgR`MX3uH!)n;F z5TJof78UP5nE4K8C|i@jIBOB zoD~Vo4FJ>$<(#mzPiW5gFlwMNP=AjVn9sQV0tS;z`fQ>RnWHr%WxK4r(!#rZu}w$N z;>y`&<1EftsYNOI45;ppCWS%tX`B7yCJO2bBNdmvghKUzD6<6+qo2qxZA|_)D;P z1)Pq@8=MfAxuwxJ7yg;%Va__zN;D;$S<2T(x9tCS%yq-VLO;&(yqSNbr|;I#Lt|o*#28rG-9%cDBfT!LB1390$Xs5fM*y=pRI$FS5S5i$6P3 zgbFGpD5OW^qgFqr?o+v}SnfcJQP2xN-j7)=+|zQe+8+w4D+x~q!)cJg{YMu2W-rO> zX^F~pU4s(i3)_q0T_M}~6?9aqTsXDo(`1)^YE_D1#SAHrzJzus*y_R|?E{>9m=@2>A zoCX3F?`nX~0wf#hDihq%!nF1;h{4~;wKmy|=-g+fjE*TNMCwju)LS_ZAF?I5ClBWZ z2u6Tv!TPR|kxsN|uD`yZHhmqz3FZ;(9KCzk{H>ts#M7A5Oy_xs%6Of=2ETKeF%nE#Ug zbVMDE>4Sp4?|NSt>O2w(pHI7-G>}Me7a4F0i6$D31GdE)&c${*i`oG?w-|oiLIr?V ztj2mO;cY#sLAkI(^2(ay9S)wQ>e6T+FAzydN_4qff5m!&=3~b|8rs9 zimksdk(}}_^rqEd$E}W6^MaiyE<4e`_f(ZP9L|Aj2Zx5L0AXu*^1~}8vtW!)->fsy zMqKy6>hCX+K11`CqDY^08K0vqAI;c=&p#y6hHt0-uI>YU6xg2AB}wy%UbPv|>F!^JsW=z@NX3bbvA6ac$E^a0sz^jjzW z6EYzjd*K;8^aHd59WF*fh5Z!aUINegn%0YZB3(bz2NgxSBVTl>4YVoPZsYXeno67C z5_)BH*`a8;x? zG8l4CoAyWFltNnCT?*4yIiCbVw4aI`|CJGfzIxi`H8^kTMo{(~7fYe5krbv@r1ir! z#7y?4iACxz%M2LNb~bkl&K#sTpnnJ0&5mc97UDQ%Ec5$$Ve^f-ku4pyc4>CMk}qr- zUI@(B*~SK|m>Qxcb`7YPDx@!`VnhXP^w52n>viSZn%b5++`!k;h_7PWBZ;9{`$UJG z523|XpBZcc;P7(9#=4r}wUGo5o3)Ls`M)(^_bf~n$2#SO)Be@n=s*_4*xaaIU{2{a zFsi$#ft8)OP?3ArxhuRX6|@-bpDFDb&k@!PrqKJeJByf{7u)ljT;IMGZ-gsjrxvR^~_b9IJ7fS7y^3&2MocC&JypH*IFT)H;S_F^! zzl0hah{7P5dP=WkzTkmSDbBXPa~(~{*WWs-lVo}-;qR5D%2LL5$2Tbf@S+aX&$E_A z8W71&IjsWTUl88VjeRGC_FBw5rRyYvRdCAsEDmOaf_klq0j+Zu+-(D)tC(&c77L~ zJ764qzMfO(GS!&j7QVgxvW4qHPYviBi{%2K2I?d8o<_31?xTnY3=;O3tovMA$ z(C6KvP8-@+kwn8EmYyc}&tLW9zqy;4y!exNW5)lHM~?2ZNyVZqM*ob&61C}4UZ-AV z^c2l_WOsNoD7WwlO>-*!TDwC2!ra(H^=cCr_kdaP_^9~7FB?osyzGqKR13~6m0ItS zZI^+A5J=F0ziJ}h0?2fIwha$>wC!u&eQ{9&@QzctywrEUtxlS%!+a|jt2&`PBGit2 z@&eG%gIFSF=QS||l7)dZ9axr=YhuoZc#MId|Ju(oMfIla{$$GKfGV08j)@JQb>zPb zl1^*?qyXRn^emV9@k|f!&3du4Tgw7qN?~q#!OA~%GQS;{^L&FOxe`VLbRW)7W>2x) ze9i{AltU7Y=&F7}rGE#l(q~Ujze3c)Y$Q(ohZ(BXb&zt(NEbNT)(#c<^}k~!e6>B< zOtecXc4&j9Gw@XEN=uRy<+shF8{7c*iD3#XJPRD2da*@-&8?xhCY&c+>DlVm)XCU+ zsc^`xXgwH?T~v5l7XsnG8K9Cjcw*YW4W_h=&~@qW5!@HBaew72q^LFcl1h^7E<|qV zdyiip)nPs=KbzukJs{R!FTL_9~~A30v)WDgi%1GpQ#P z5C{{n&w+fm&}Opa^|hw=0^U2?2CE67?BQXIp6y=kI?(@6;B$>@F0P|6Ua^58a2@mFL!_-`b`hV7%Nqh$lF!1-r?gXgw z`ajfh%*&yVT#8`S_TlaBpH-l#cL%Fu#{D?kR+PTkTfO!T&jl5a6{Hhg_t0)lb*{QX zRVsK$yjQW0!DX>6M634C z2r3Go1PjUbW02pnDw3Fo_P6pGUs0}}Tf9)_{$t-3&1~6|t3SKAi#~uE)8`JP zD>_=Y)oO#Nss6n*G0b)iI{%8;vnFH`7_TtkipE{y__b;XIbm2^7DZh#@Uzl05vUfK z>YuD~!$Xojh9ELd6hjBd{4vdE#?#cYod$b>*rGq$g zazPlQk=gT$xf{3flXnLL{vb}KYDyo;3#vfS1xQ4bQSH#xLIQ~S#-=`1h4nlgRjFpA zkP(&v?O#E}3BzA&vO6cI%{4)8nxj*5I26Cl!~Y#K201l6>*&Oo*nK&hY?;d%>ArfU zvHFB%r^Upc90Pm=&LxhamHsda3SFJ>|GyriaBCO`lbzosjF!l8qaKoH7KGF|r|63L z*HO8#8`Ip%-SUxQBG437^&@N4_)uj3+Hx{m5?n-_>;AP|y5jR}dz7v>KW92sJXlK~ zHM~S4@r^VNo^K>Yi@Ao8YB&KGE@k3zig-`i*LD5XP$L}qpz;i+IB#%1PNtx*nLuD5 zal>yGbiOV;fSl65mYTz@1qf3FwoisyP;}~S#zmA|jdAn$WW3SEH3e=14i*=q4~CX0 ziq=z2S?QA1?FyRQe@#A+L9&oX@pW=J`-69n?1@u&*@5KV`b)IYerH4ph=v%3VzdevpUi8=Vf$GGD1I#&N6QtDpf|F{* zJ%U~rrzKPFD8n1>p+jEt?}0=i1&(DS#au@DgU%Cb_A)?{z#eti0$f3~`dE{+jM69J zVA&WAYBrG2_|NXj$FQ+*|wHhu0TrPi6K;m8rKvTJKsKsHCQA3 zNlqcAC61qst$lI$^JT9Y`x7ZPw%b*DeL!wG4s8oU#Dr7aU}@mSJ(I2({#&PIQ+Q#V%9t@+bHpfGd8d*|{j?W5T_e+v zPLMtb27HM`{@Qg%b5B|G+xX+54X|3Nd2hq6?7SPxEy{ki+Nu#oBpp(8f{xLcA2*Iv z8{&+u42XTb>@F1yo=vkHPWqGIW-%0P@?0QV<9PjoWttM(Upl4R2H?+KasBk=C;bf8 zjC}!!vWRt+&a(axu9MRa^tI$JZw1A8#=o%T`v%pJA%376ZO^S*-Uw(p!Sx=q8Tvi) zN8&<;a3bzA@za5vS>ot;E+X^lbCVU#dz@Dysf4J2*006{8DSZL$t}&TN^n+r({q>G z8KWYH-x972-qUUc5DXg3)KBWS=lnL%?dA9Tt|Q~6y{c8%L@@>80z-`FGMTZ@wpx+L z0*g{l4B0epe@(9R(}lcic1N3-QokO+&oHskVoRJCO&rilzYQ>Kz!tNK?3Zg|tb6Si%YSU8&DA)MN|p#r{0i>8yHG+VmK0 zI0lbSTr#O#%d|`8jgblfkvpR8m!1_|o>o2e21|5M#&5Yx2I@aW-hilw)#;Z*3B3do zy8PxqwVcaMW^TjY1bg&vBvW|4gY9*VwYzZVguEcZRJ^r-?;pJ|cpN4$dgM&v*j2y^ z?C#~U+oGIFJgnx%e~L0@M=cbW9^wA9fN64;(GQ)ur>e5w!y+7u+*t2UdI8p~znv#R z(Echmoz%Sce?g(|G8t`2Q@uOm0-sZj?yuQ%#CYVF1@~x5JlBagd6o^OhglEDvdz&6 z__9~~=!*a7wefbzatnwk+-2cV|N2+QDW?BB7C=J$JU-qrt~Wmt*q67HuDNOC1AVw1{pyCD|&W@&q9#6?vG0?K`!a+sn!u52s@+ z1Y;b3fzV_}AGd<^VyJQexs~%4eI;u#`OFf*x3GlWG;rJq$=Mp(UbDgl%W}$$rg((Bde$&Oz-g2sjEH(+_O&b8)rS>!i zrk~lF_~NO0iM7;IR0|DZG>s{5I1y>2z;x_^g+DyxY_b={GyxQ1Uwb?fd9y!2U;XJb z61M%1+VT6EtLHmN^DJuG4H&qOqMMskpNAnyy+Q*(OFy~yG|y3wqg)VH{rF`Ltuc~I zhc9%}Rq9+ZX26>|+$U45@$)OB5O1Z3oUg+FKn_7B{(!!XN^mJLKReNt1$)HV)e zGllXkjY1q~=xlk^otS)AT?hb}K-2)4IP6Q-Yp2ero!uqK!fX0)fEzS+jH}D-os)6m zGgm3ndAA!2$o4tFL8(6q+tLZ#DmFMBzS;j{F0bV zxU1&AD4l^#$i78ni%`^o>2o4?ga3fOE|mbKBtfeyq#-ug3wAcZX(*u+QwxoqlTJy& znf z|0cW_4~bFzgA;9+Q^*CN&Itu4j(*L=Ed+y8L5Lh`IqK}+v9|`bBvmo4ooydh&lM;u z@H>X$`rQA)xPC>={|p$KXE4;2T><9a8VpxH^k7~H(eba)Y$LedKf8Gvy&HyT`Ed%E zG(-3>{#24RwTC&MoV0e|<;!d4S}{?C$^={YKSSs7&^MCS zS+@QsyH46Ii?qFRAfZ+%X!7)qkh&CY9h6n+{Asf_6k&{KJx@`7`Vg%L z|KG7-1P>*2@Uh&MR^f)DtvAr+?07_!#Bn}(HQ$lf3@8xX%M^}52?zu2jU(0j=+!KA)fJu;hu0rZVb+?leuTgqszOq`vRT(n)H zLaKSg+d0yo@KAPSOn1oF)Vyv(SMZBZJLdusf*cTYL?rp3!?SSI(?n18gp#85ISg&+rN zQGa;1vQ88^UaD#&Dv|Pu|G;lErL8$i)`hV~b?%EfaOKxf0#~qV~uKBuu__^g;-b>kE;+g0xF*5pvZ5 zdw$$ioAT@*q7@^#UsF#1*y&CiBD2A zYQRZX%rWkFT-+rreQ#V+G&TS1HM`^nOjhSx7UKMSS@VIm7@We{Cj`Z=elH#Kwc>U5@VzV6D<_bW9tMlxNle+Rg?b#S!&C;-LxX;_{D;4oN`3jJX z_^w?+=;d);c(P>rPg?{I(dE|ocE%1Mfm5cutZ(;EEKPd6$&Wcm(Y=SI$k($1*(gE3 zEylkOiAkD@guPg)w7(bDBTOGWWauk=t=nx5pcM3s{~hKu0MR;)iIX>D3tz!t^RM)! z2VK-~UST5pmqAP<-JuGSuj?rJeyk{3xs=d=v08Kg_awN%`1#pe(dhzTzxGAn-rQA>C=)O zOXj+Id>x)!%EzvjrN_b2)+O$6Wlq!F)NyRwir$NedG!iPVA2M8wlV{*%A}A5>uNtv zeUNJRANCA5Qz07h5$2X#E$YAQ#p@lAE$Cn1#fJ{#l~cdM>=kK%KfJd5RW!ADT>Wp? zI3f0b#}-J+VZjQRS8b=w3Z2IWL&2Suu8-)p9EJ`75+Eo6)sPk0R~J3XRsCF$Qn!l`a_i0@N=LlSi^HLOr&pait=0Mv9+lt&ASuI=F2t71#tIMIGi%BSNDxCyV=d% zDCvCb=9ZG^>-oYS(Hn$ia0NKTm0ATzRb28O1qK&6O}+&O2aDs+W_PO1AElEkU3E0A zQ0_fhl{zLd_1$4{0?|PC)PbO!Y*M&RSr5KtTCQ_1T*kSb%6$nFxKy!mzMNB7^#J!A zLTN_f2G7NzOuQwx6=BdhlHgf9R?PN9V607_9u8b0EF(wt=dqz~oF0JB-W<3n^~h;n z_4&iWiPJmI!?o5jlMjKo+aqPDuFPBq=djE_LtD6+Yi82Oa90)dP zybz)PJaSWbGqUu!0T>HE?fhLFtK)T-7!?onkCRQ)#mUBHO(UI%UBGzq=)%|Z^U)fa zk85dVHuHn(cXdPfx=Ab*oF_2h@t|1$6>(P(Y|w6y$Z+RD=UP`o>umJVGz4!(VB>fu zP6wOnFeItb`Zpqt+wid$qWQXKW_+PJisiT)FwV>pxRJa{=?~3Ap4d zsg$z6TxWHcjnw9j=}UVb$;@5fP)UGol2o&d=_p=_?gAqMdx|<;)Hi@x!5>`O;W#nd zrhzCO`WitPYe1&TnyUQb>?$D~Ez!2J{8t-(7hPHOf=Py(Zk}MV^c)pm& z9g>uZS^IDcn^{57<3&RAnSjRCK)+iVZ;HzkTeJV#hWxk0MLtok^SgzeNM5?;jJ(M0 z`3p~z1MM|z`6*MJ+2z$Q?%^=1a^LrzJ4WaNNjp-vyxIr>_;YKIiUi zc@AyFP1r_#6JdzSwES?|51ei$q)(&sm14V*qCDa+$sWL4e>z-i)o^;828fP`^XLC6 zYzmrGba;$LrGx8)GZXoqdN@>uoJI>s3o;+eBj5`ijt*jB`gx&rXP`rBuu+dVG`H1J z+T5mk=q~u*1xF#+>!3GA`H)k%m&9|srm2c}2xzSggElTR4{vu7guLHfMwpry_7g?||fQhV|rr;!d?I5Mrv-M=;F7CSk#+XUxBngc z%|G{OEJHWIF5UdH!BRz=a2vIFTE-KeY_wFMvuLa)QR?I+j(CQa%WJ$v6e+M-awt%s zfw<7-AMnMuC}fCt|G|y)ON!m_KW#srYzg_D%Aa9+JS5Jl;nB~=phM}*d@+t9G5jS6ws%sqd>Vz+EXOv-5rh-!|fXDRp91QEW!Ugp*9ci z-;B0&p^Kr{IUNZuvX}vW76PC(EstjsNXUHaREA}n0)sL$6Dw>5%0LMO$s8%Ey>fal z0@~xoQIx2-qrAaoJ&z4mS1rv_!)mErr(PG1k!8I&H@Xuq&vl7(r6}3q9U@iDCJzb6mqZr%C~kWY7txw^i9uUjS>hB z{_`9yW&2Q7MnK;OJ(C_-$TzQ`AEzLm-w;YSJC!-Ug*)vb9S9Y=PyGPo{H?IP>65*exNRhEx5r637YM8#P1ugKf^PM&{Cg04H{i;ffFSvIgk`n7LOwwng4S?=$ z`YiwuO6&~x^mWVHo~a6UkdE{>IPo0%=+dNe_H21jt%Q*0hqVh$bx#s^{JQb)7X7z6 z$+`pnZuP=68lew_KFRkSl*Xp%M250-PX_*jk-WWu&~AG%=BbJUk>BZaL2!Mk^yUC71iq#Xh9VD26z^QCB!Jw* z;juz*5VG=Ssy6&vg!Dc5+bcglfzbJ_x^|^eisY-z-fQFX+^7VO zD*+SPzIgN2k7=#}-YRxe8^JY}xA0yN+1ldtqs`1}+C8jwtP5JdF>l~=zu*2w>Yq-LLUCZimKvClGzvYS%*{(b?7j3q2Z!Xu5 zo;mBro~PkdXfuX{yhq*vTn`7uJxc&mKBE(C6~KSt4(r=AVtq11>XW`_NX8o441c{) zx?M~`3jXGsq0?fUhZk&3BU6opeJ9D*xi^5v%QTn93DxnqMOY8O0#XMwMvlG7Isucs zkcpaheXA}&+ZukgxQl$aaqfm7KoEpjvPl#~8^YS1kRfAFxF_WErtoBg)U^I7<#A_) zWqq!nqlMF_(3hR~~&?5$?xb z+zj4HAQ%&JC88XLK%vTALo-StO8g_pz;5JvlS@)~)CSbI@jGOSaLWiw(M)UEk#gkcU4nP5$60Z zUy;6Y2r5Nv3WJQT$3|~55|-M`MP;Q88a$Atk1Lk@zfY+I=$}-bXn5Cl4jF*ADrVFi zz8!tU>z@DOrfoh}6^I*}FUW7cnm%kJK*iVX+KjNw*8CQLMSn+mc@#lIgIR|MlRYet z!nR1SKFLMibTzE~b{h73t++wRuv4;jR2XGr7D+I6hsOcWI$+Tj&Rv6!P(3}P1u7c|S{4>3UJL#TZFZ7>ZU_&eEsy0T9+tq>vPD^f_xepeA?rVw8r;FF#*=GtU ziqH9Dvn-Xln#h#+%q1_2y?-E_`UwxX8jR>8v}-Ylb|TDL(IR9Et`vlDahKI zL7K$xZ>bW>;plq$>)lmkl=38!6#ORjF2Ke2zVu0?q@y{92Yk5+#;exh{2 z<`bp6(+)ko@Bz*hxvG_01qMa^8mC0o3JmYRVpD)yhx_N(bZ95b)+QvM5anPJZ75n^Shc$wbhE=iu0VG-3PH(oXp`m@AFfLMOzQ9#)DsvP*Q2K z%jOSV5$!L1;J6Yfs}U-6hW9oU=^85Z{%cE+uG@{G0M`csXxzxV4pfS}QEA7MdW|2W!Cp10ts(bmoM*iNz8wM&AdScw#78Q$lvAfZaz>DASB&&|?J2=>e!jw?s_Wo>reaVoUr(kPDsG%GI!t%7 zf)@*nEd6>JG}J8?${SQ*a9939i>%^WTSU?2Z2rr{?-mF`G)Ak52kouMA)O5?4b#_o z^VEDHPl>PhoJ4i^Q7+E#WwLdahfneyH1eECQ6Tl={b_A<8G?*1R&%TO1No)$;~lde zF5Pzzz`9&gP1Rk)**QKJ--XSIv3z#2(Jt@B=Tapl#a_1^i9YQg^6m`MLk$Nw#2zrnUY#qX6(k?ssMN+FV6f zLzBWTf(PHbRs1dVUcq^xGHLCIcmPebi?b&@ueLgo)A>5i%SdWoVKdcK($>R3y8^+ z{(5%^ie;(-a=Fc?mtqUnHwk_;>_Py~LJ>UaTHZ%O=Qe_&DT&#Ees~fhQ9c_w{+v-> zeIvsL1$Y>9b>FxBdhPHQO4=rn_$x(cJc^#<9r&L1{MhkCImY<|*R{X-DXTeH z@YsA$&PP6nYqu(UB3c*RPV6fzdZRBD8mBEDCIdZ@UoLV=5dImm6R@!qnIR7o5q-;l zStAiFLU(zcY??E)5La*x?D1Fwb}=z6VxjIpyj&H+V43%7m)W5UzkS^BrV4Fa@ zxV?~2%*s5U%7m@k4L)@@Q>lCg-AXS#u!r%q5<;u{B*=5pP#SSgROWBqKrN2b=1K@6 zu4j#&WwnGCsZ|x}$&6P^a1T)2m5l ze#Vx)NVfv(`p=^M7~A3rbJ3Bmm!b&`jOS6^rwA5&-&th03^3mQubQYqu2*v2`t%b( zz3$2J=dlmQP1b3#1tnqj|H(chQi+JQ;>~jshJtn}mN}|nNy5Al7Ab2N>K*<_&;O$| zzM-Oy5F1!454;$dSst(Cj<$7T#F#=_@1?$T;&(wjOjfZjg44H}iifLYA-a&Hr~fQH zjaSyo92{aZTxMITWQE)|9qfOAy0=eKICBT!B0c}CjVd?4cCvMij@S3WyD3VS887GO zmGsDlhISBrgG&_kd3fuuDbi zx>KIZ8(C(5m<+&S>fdRCl7W9}kW-=YKTK4<85*Z2P) zMd$v{^y9zbcXHSqcXFEJW^DwDaQW;3c5p1#F;6#IYsvgK8X@Ts!Z zz256yq`ouN1^~i*`Smx#T|j3eRVE|{N4f=NeQ&sIztCW6?}uM9X32L1giXYxWFv3jFR9_{<+aOuQqZL_S_Zhy8+iuCYSS zC{_k95hAvmeFW{=TpFWK;ST=jZuBtUFpFDilXW5w@$Q z4DZ`|yrM-tH4A#wrzcpK2QKORY{-wf)7=>q}|D}D!rkJ}r~U9L0jR?CKjsrBLw@5cL3y;a0sN>PzkUiDp& zH&wXLnO-8D(I<@ONKtB|e8fPl=OPEHN^4yi`SwV1;lxsYBZwA?MADdxk$6UC#0?v1 z#`#wY<{jKxsQp&Ch-GO6GzA}KZeea5X7Z#21p){7oRGd-ag(nYphRN5BP~E8v`)T* z1qD585~D|Iy*jsJ%~1KGpiyKAV1#W?OW-lUuITg0Z_qtfA1WC+{Cdc3FryGCnLID2 z;*m_caUU(nD9Mj&%KsL6nB1P)+5diPVP1!~djHR2onp(0V+ z)>lX=C#K!a*O-(;jUGCIFIh#6?#F`eH(V`TOU={kMm(!Z>LV&%y*g=tP*JCMUSeeY z1tSnWk+oReFBY1F?+&@l>|wOsALEXQ486D8{_OApdrKB!4M&%a(&gX~y490IG`BOg zO%iM*ZHRCn1`7G4ITRE`OE=1RZf3X%8ZsK~sLX{Uu#YlL8IywQxzm3&z zY#lgOz6a5CZ{)i*K@epVC=x#)u=9>Yb8(FdNI!v9p=Z~c7E$$0sd8IHiNvcQK1tuV z%&?T@Zb*9ttBHG1%#_?Nf2Ikgd#)O@Q*W5&g$fi)B8y@{Z<**`Vg9I?!9;}_-z8y7 z682CkwU&hYKg+k?&;rf_ZpE$xoVYflxAv%x+Sh|f+{&5Y?Bn(_#1l$V@AuKy2_@>Z zP@*1w>VxrrRu!t~u*On&zx%KDPYQduL|E^XcxB0R$ln{qeE>w|UZXLKB4$(%XEBsV zME-?p^j39wAcFrmOs+wzk*;*&tgxL4QmabxU7eMP~whe zkOkK!pyWfbfYj_+3PQsi>pblCc4Mx`#GG9wyvs#BZuDH(|18!W7P%X)$I678m4g5%EveM_k-PG7Rt!NP*ZX1Y^BD2(oyd-Pjl@OF;wX)7DKW8ENrT25N(4On=$H>$x)NN zU#}Fn8UoJ$&7pDD~m=e+#KQR}qBQ2Fuur0a$pJd z@zYYhEHkdtbQPiMq|*^+x5^H;?jzOqy0b~QFF@!AGl^pxwD^w1q6D%UtD-hC9x0DC z0Srkxqo32V`Z%g-O?|OG;oZ}m&ar-|G3Q!8NH0TT*@a9vBneBo!(1OBfxV7SP3lbP z;VKLc^vDmZ*%q4azrfT6hySwvuEtG3VP{6wJqZ(C|z%iK1C*U%;T4OQH

&!^E_5pVJQ<|1?qq@zOqdn%8A7dxj=7-$X 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

  • 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

    qtIl=^qn|ZI3 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

    Ek1kx{ljr*dw+_*+q@cv{FnXd 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 hSaKg5gP5k?Gu+ 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�_|56ekc;hJl0lE3CM^ z7YwC2YQ2f8UBvZP@esFWLYG-&8EtjpfLOFYxvGMplh3lW;;v%rp3b1qp3?@k=0cX= zP-)N`f0(TvqM(htXOf%fQDiA+G#2v(8mj9c9a8*YgqQN&U*Ac6hw;zZMf`b#;&_!S zb^cjwj``6kz%^G2Y@}j^KLAP^3$9p^lt3?k#05G4h#Pcc0RY$yYA`I~3M>npD@EO; zH<5Fu@A!pPd)UAnEHo~#y%@a}rcqnJyHknF9eeSaR=g@vZOCXgkpw}vW$`_=X2o^xKVqEI<>p0Nqm6D;Z+8&`jv-FD z=ebQatwGzqIre7fk}AT_vc6?R@MQv&^9N#rDE|O-tTlfbgZ;nuS~>+1iGPqsMy60! z>-RY{t(*<)D`-^_X!TQFYx$N1t5#sASlRyoXX-E5c=8lB+D$)WVBK4?f$c)-U`JBH z-NLzzv|cjfl#nm;?0r1L;|0cp9PjZ5H_A>Y0Tr`!)D{TB z*lMZ+!1*r66Sm@@7oPV9%z?xAA0!2Mb&4g-`^@|j>2UbiCfMHsB@Y(3!mInEjVjy? zm?>r*231_61?n#qq=u*%ei)@qpvQsDjb@l?@tDz}llv@ifNk@M<@2mr~I+bqg$hFNnCxqpxDTAbkJhD~lU$qKtz^K;RTi1{@YLUmXI7#%*YJBIZPcZks zLeHvL2s$LNf)#55E7%6Lm6GqfdyE8ME*ZkTu4NlqPW*rZKK?FN*=1QraZ75UZ&!a? z2x+9#h`=JA)8DX5(0RDj1@rMNJHsJm+t^x|s(>3Vju0rM9s}8^dTo62JrUv~vW#=z zA{lCR({ZLB#lS5kqu&vZIa)Htqndw$G^ZCRVTn#seSMX6aX*jDaOZLsEVoLI+up>r zL52XdQk=*3HT#Vr$FL0}%9?lIQv;S23d=9Hrpj4^<@G9nqW=JyN%`;YSnhTI0JDyc z=sNijS`?xD5DX0q+-}wzrj8<wjh^-)ztuF|gNOzr%UoOW~k{fO@v7W)p`wXQcjC980bZmU@Gn|wb$ zN(^t%7XTWE66+;;3p3aNbxBcdSX3HxA`@i{5_f9JYz=CX=s4|(MJHvU+bK(jFs=enFWwO9P}5f@@?OjeJ@#+O2p##Ju3ACWC+vbcp;#@}*_1vODPFC0CH zP(K_I33wIu1zIeb%q=w7SG>RlcrAWIgj=4%tI^s;lE6Vh_w(dRYQ!8k$d&vnihg&VH_0CNuEUu=Sk{?Noc-!VH% z+_n^=bLTNbI5^LdDD5fw{QQAs4F*BAYL(u_Q$*yIa*geYa+~J_dUY!Nj_q;9#cVPS zRj28eHoUv$0Gw;NQTgs8+i$r*9Mw$Vj?%QY{EOuq2=RvNnyX(RjW=HNPzt(oyhI13Ub&hv zMXF33>9v+$d>1u*H&1+&gexmqlGLjY`7pEs;Y(GA@G)uq6z}UO2nrx%oC^N{*y$?X zwmpFN%QB{r=xwRN8vwe!@>UdtK{ZB-{$WfNVFl9BLEJ`5S7lO4HU;E8*D-;>tNAQc zy&~r@sX@1#!ny+osmXWtcA9Lj`4xL`e-R6gSivQ)U=>WD>K5|ZL9x8t-vb~8AhlB6P zcrd6dqy~on0I@7Z=Nmiu3sNh0d{ojRxu*m>ii8L87RuXlTEc~Y`5=X(7Ue;oY-cgn zigEP-76RVj+gNkS6a~0Bi#xkG;9`AiiudsXz!AEyB{^jtxrs$k=k5Ygt_~m@g)bP4 z31zp;RtruQ@&lw8_O1#G)B@jssO^P4yN!f(R0xy`iA5@bVdG->!w3^D&^iDuy*1QWlm^eF9+7??!m23w#9828 zc>yhzW(9J4QM((u(EWuKN*dvnHauYpi^`=vwGEu3ud?VOxCU5D8&E&QHPcUh*WwK02M2+qZqqHtdwh-=kYCvD{F(eoK+Q3`3n?r>;l3I?ITsXo+Vo3 z5d6ykrkQ4%im+fjnmh=Jvn$J+vXMJ?_A5YAsbwR+e3r#*{2!Yj);uA0AR zR-b-E2QB$nlZMz8`HetZ0t5yIug-MiZ-HmK+ME#Qb~)wWP{?7xv=RM#=_ zRlIvBHS%M9PupO>AUqpPt}-0P)~IF@g|4``tzh^>)f%&B{EAp`M!&k=K`dqSLJBAw z+(Bul0JR!kpT8h&U1vXK61SQh5othaDrd!ce#*uBo+aL!XSw(wHW>c^C$NR4yZcbl zLcT!b5tJ+$p45C7e9Lg0SYMKXPHyHvs`d6*+Po-WwQR+MhV{(133uNlD5NVWVdIG2 z&%wtrD@qZUfZGJx34QYxmFxJ)%mJ<$eI6Cq(z9z+e2vz(y~NVnQCs3$nu0s$ zT3lmS$hz5fFDOUpEn@IZWod=O2nYVMmrbQav!E`z{7ozYGVEn(3YJw)0oE!o)A=9= zYkA_PuZ8jIp?%>>fX1VE3-9DQ6k_0{DzU?N%otLSI1Gbwu@#*K?!;G7D45d+bymJBe4g97q*AK z;-GL>Qrk{NXD8-eC~&hqBhb7bQ40&YyWi~r0q2mey@eF*^gWW?d%KjdPV1b&(|T9+ z6t9xyClTX#94B#6=*sTmpf*~XVX=aF>t#V@xldC{-j6O(_&bKmcCLbTu{=RVQ+i;! z9L%zj7pL>YP8FYg-4j3_76$KWmK1O>g(>ylzDCIA@(RMYn`IWaaH_N+tZlu@O>ejF z$hU;3Zv-sA9CsA}omInUL``Zw?;9FPWi9?7+jbS7xGYx-uErdE0U&i_$b+k{q5%DI z&cFr@WdS}U!KDo?-HB*lhI_Q4*p?uS?w@I!|`EA zqpg-@SA;dbj^jc@F4YFkt{Lu;0K7;q@bL~y{E<|;x2~YjnjA!_m*Eh^0{M-td=oEc zpj@|&)L4%^z>KRiX5&V)Jpscj*DzU~%%g9n0;x}ZiB0hCWcOrl!q?!)v?dF-Dti&S z@BKz!8prUZm<4|2i%l1!vyzOBQC=e}-;C1Oz~x$su4#gT`HA5LXv3*%$MfD}%=~0` zYYQwD_AAx=uHX#`(KI5`Rau@(es5N;2%;L4*OHB%wp!WUSLPw*fsj7}S<{Qi9k)3r z@p7BdFS%7S{{SEs*c=f-?glG+*#I%-L2>^8?n`MmnODfcl<>^-ws0qstOZ2_;K^ON z?4pg^@*{?eacQ+mL@QiD;?O88|rPJ zP!M|a1h!LfHD1Jo6PhCYm2m;7t+`{(SMCUM`Q|nDLj}t!xUMCRX^jfwQyG8EM!8r_ zvF4!Xq|M{+vsy;>v8j^F8snRWb+r`0ieDA%1XZV#>rrTGrRu6KZK zpjLLv<*bdBg+atB=8QqE<-AIP4o+?%z|*)G7B2jYeVoeL$CNOBRDcq!YxWV*RsLob z<0I4g`vjFo6HCzl05Gb|I{yH_A#`JA3@g?yMeJM}{CPeN^T?W?*y=o6a+mQDc3p5E z7}C<|Ep!vVHa4jP>jdx!YEdr&Bn7+8VL={TBCPxTb1kj%ochWZ+B+3RrTilDYPxQr zWTi6Nk2v$}0}H<3L`tV#`vpZXI2AV&O~v1p72y3%w)?(2mfSu-_qE@r;&QjY#dUJ5 zJFX`oYWnPeOf^||`IP84Lib=%Jf0T4L|1%lm47L@Z6&d|JeqP+j@sWC6iUBiLb7f2 zR$8hm#_8pX=GeLv9xlrAp11Fk!(Of>p=)lj*=b>U5M4RG$nK35a>&|0V@+3SI&$yG zH^Rqdl;zmxJxy?N=IO7q3Ndv7kL>674)y1gsL)bftW#)IcqpmYPy*f6^vVMN0O}x7 zoFx#!&#a+M)>Ixlr%%jUYPr9#DyYupiu0Vd9NAd-!(3(iwHQ+R_Cvpq4ka`$_xp&2 zCL8t?u>8GT_*I#C5TPr9g{yEFj#28-AaYm*#?!03&mvwND7~?XZbx=mT!YvvG)jnF z>?YM@pte=Ua7dTS#u*OMfZwwUcH!((Mjl++ms@PQGVS~TKy>VAL~C#Sz?c!k_=@F) zbNH4{V#E%(f}E|-Tk0TZ3Ax0uULh#4MC!7FRnj_BjtCUsa6pC!>cW7Au(GPPu&`ke z3%p322%VS>D8c0-TN~R1RqVKUynN_^;oL_`^-%DyUy*XN*p+;D@2p%5PAhFWenDZe zw};jbx$Q#yyt{|7tumD@fErn2a@7}uO=jtUL9`bIw_7(~V>%Qv=g z5m;2V(5zth8!%lE#&sbin0iu+_Bl{{SIwV{+n}^7`&OSSWV< zmb!!e{vcaJUSQ%6SIibfI-!uEK!-H$#n3F>+2qE<2ceJc9;SQtJ&!A#gi2Gy02Nv% z$&Uipr;rtblb3&nTc9UiKqXZTt?MNz@vU)QMZ6up%hA2-FeYKkmK?j->h}6)pJf#d z`z?4VdiFV?x>HPO2cD2!$MHn8G{SHT1p~+_@8Ve8{{WvL)GC@k_5p8KZWmP$uw|RZ zv59+D_cNk_09c_vAtN|eh^Y#-le@OOW93Q!>M6u$G%uq-tF_xlI7NV1;;m{ zTHApB@p2SjI=>;%zkXcN9JqZVDR(UEnPqrzziM{L>D;bSu7h!=%T%VNpAoYv&t(f6 zC^ydLrKPyag5~NJ<(OnHCo7vW$$B~>d0&SP8oX5ut*FESy^1t_f1%mce-u^#5m zP^9B-e=N}!@d_wvQ3Bc7=*76##qdRK;>tt)#HF)`Fc&tE$!M}Qm)R&(&9HBu&PwH{ z7tCyf#ZX^y4XMlg)h7zhdcGOi(4iD2V0sj3fGKF`~l5iK3d} zpNA@+AG2ypzgrOUbzF2x5h!y`Wfcx!3Jq@_s%*UQI?G(Yb+W;0p03!?IjV8d_8&e6 zTvQD&SR7d>Zw4!c_EV7m0CivXA>yC)15?9xdGb}h+=Mi|UB8diMQ$z|gxvcSpbolu zsOuf!%TFu?fu&i~e_&`@u*wK|bi`CD+WP}0HprnU zI(9%dRYUgzi`C`xR}KWeH;eXJt%*Vk4@FSHk$SD=AW&~8=G%ur-V*Wq0U2^jR=Tpb zrF9OGl$|?%KqA7OY^4grjv-rA9-Tj7Whvs&A_!4@Fg&8&znC^F>b{U@ zZ%*Kj1~v97c8|N%qw-iqxIjtKTJ|ye+xYipDq~HumKMG~K@qeg<6-C|gG~FWLvc}YO zCRBL0@W#?q!`T^dHN{5T8IR%(I8#3?Y%QU4CLq%g`AxtLrC;LZ1#}Yu zy7AN+wR7(bRJN&gI(gW4#vpllX#X2=e^_tkJ?eeTb{#y9$zcv ze41c$SjN!ae~7HXS_<+jYBibV&TN5jdO=!CO}OCjgG!}&00M>kZNvt#>I7n1n7hqq zo>VQbD#xfQzy;mv#b7_$7gDxyQs8Q;?s}8>=4J)2xj=9J#95%_-fDh^1vVnQ5FCHG zTM&;caOA2-KbWEb?Z3XuR|F3+PWxIxwJqmRlk)SF)(njXrrUqSE*H;^j1)UyPx45yjb@LqSV9t_W3W7{U-SnjNsf?jja@ zELDR0@^U+-rZm9pi&zJ!t6^O>0ItUEVQWZYt?paOWB};Z8RbTu-Crasu8h5piAo2Tvg_fChbrD=L!(S!>y!$r&B^~R> z$gf0sN6GNU;?A(`cQkAkcRD4@g>A;CIgnSU68B#Px%mNos*Tl^!Q?^;T(DD_Qe<^E zD&-Y2tXT2OG=Rj|RrGai@>Vv#L~ejr+0#pV4&y%`Dka(P?3Er|U1F|e*(n^LqN+zM&tRX%aVv#aH$iOH7EEnU9Lm&t9h z6k4%2F(}_D6so2Z3xhDaIH-izY~@hT+3SFxK$o^0J|MH{6a4-CIiO}KrGkq z);7?7e#O{UMZ3ZM*jXwRpf%UxQ9*g8{{YlWwlPXu3>uT@W`{2zaMg!1Eyi#{pjQyS z4&K9SIXUhFmK86G!sZ%F0ld9TZw#aRsD)#f1RE@QG0S0m;ZEj|KRJkBg3AvVby0a2 z^ucxAz$(m$<#Re$Cmz5!H4(0IT9b|DbRX0KQkY?V%WYyAcJea7Hdj${^W+niwGoQD zXEU^WLYFy++p5&)@WWBX_A7p65pD7U{2jzkbc%{MkIW7n8DP4)g6H0&W7A}{3%)p? zJ4iXKI40aAt6!c)v)|ufI1i=Dx8;c}t|v?>mIF=wz~g;FpP+>$otII^zmg*Qm)x_L z_$CVVfy{wg-hw+v!lI>e%!0TeS?(q^uv9Imtl7O21$^QTE?>KpL_7*3+lz+_EoP{? zraUUkfjElvoxQz5(8RUdDO&y~?0bOU@=J2$!RKzGNT$ZsTkI(>ce!C)WVfch`#Lou z2qB}>5T*CrS6N_l4(ynxnurI9eL244{jtIMl8#afMwJH#^23DPg()A}`iB(|jqc(t zzsxyZ^C=^7Qs%v%Ad5>Y?66aIB4wXDCYB!gc6R(fOBLGySgXF0CIapWQXe2EisK=n zqV(=tz}aiH^*`jYflafzKQiq>%lMjkjIcFdupD3h!j@I%Q7F>-_(GIA0uZZJ`(;4g zk*h;+;(`AFkgiI6m*h9tOdbb5H#O9&!0tG5zRN7zT>Qo44Hd6B8xE}8h^C9L#YV&p z2ZdbZDD^BnvD+mg*LUzTw}seWnUyG^x8Km5ih#U#70X?wi1~NSvQ_X;XD1sJu?-bC zY59P}LoI|okP1Sm5DsabL~4vjEYe}n%BPYER%Kj#3-%hd*Pg+r?_El|H~N5GP5k7= zeZ#3xtNVQ0I|ZGQTkH1A7Ok~MWU|=`rBSL!>~4y2oK=I5=kqY^Z|(&|`PWeN=$|2M zTCWZ!M4=t7rL}*tm-&Sbg@@K@SD*P1GOzJc{HlL~aV;;BB8RC(+Wu`sRTQ!|tFfhx zTijcc!d(O{bbx+a`z=q4yM-%-t@0~*$8(Tj{$=srVn;bYiLftr;--xn!R)1+%SB~-?LlpE>p2~NikP{( z;WR6*k7bgUIbluJ*S$}Py;l;I9Gp}Yt>q-dfo3JG9$0L=G-8h6*m=V9IWd=r$FC+- z)$&<-@wn6g;PYXIlg&d(T-}kk9B#=V`zD;Yd;dU zSm&QT`3x0XZAO<3LzsZ#Jdf~2Z7!D*h_zM30OoW50FuRl&-?aKV1<9jM6tQ5`M)8h zr&e&0Eqkh@xN586tBXz`f+_py14*-o`BX+*=0&xCZz>HaZkE)Sfi&|^5}h;@8$bKeTytr-q!r`4Nw-s`DGR?_bJHgd2WqVUVtrf26Z=Skq7_^zOVBr1;6DjplXml zhjElCq~+#PvgfW#T4ctWT(=(4hqFT{e{%v`YW{uuDAlC9I(rj4N{)EaTfO%c(Bd24 zjH!#-r#Z}6*Jt28eU(FFhA>2J+xTUb^_E9%pM zH9@By*H<_XUspd(ZL#>nrF7m{Ws72uSt(qdzdmdf;maCQ*Zj=@XW|PrbNHe^@ZR zz*TJ_!Q8%+92u&3`v6;bt$c}1ELuAwd?|D*&oYJ5JgI@j;nD8ky4u29Z9S~UD;jXs z{{RpxZ(ZvqIW=O+#$uGL{4REBdZkzq#kVczEYB`|uwUVgdU`LP%+~%XdYtQ-VhTs$ z$b1GQOydai9iM6Sf}*K8etL`3gCkjJv##Tn^waSUZPTr&2yp)Z*`N1i-l2cmq6+~> zPFpDa;7MT*96sE!^lAH)8xRfFw+pH$OKqIX4fnwSXIvGs$Tr(&P&T+H4npV`X4eo# z+;>Jn3l0nR;4asHKu1=cE4CCAZ&Q$ZBq|En41$`gpCxxQgo350qnK^{V zTJ4BRDGs>&L%vH0)q-1bfE9OcFS$!qJtBpHyY2q~$dIK$2-O>YO(|o7%9am-1S&A3 z`uXxv17PrTK@cdRyE=h+k5F_~ql4B{kgPMCmQgQ^KkVkmjtE+zw%7ZVFLrVE*zT{3 zt4N})m(m0X(JVOp@a$@w3;i$_mh*tiK@xzUh4Qwev~ZGu-2+o@XbV@x>qMoYX}Yuh zL|`pkfLL4Xn3~Nv{{RqfyRE+RBLu%mLVeTOcZEWje6jI`0h8DgF!aH@H!ggt*fK$KAUybx@o%l`n# zR)v0AwS|p#cccpozRsD+S#|sOVmcasiHJ1TcjOAcK@}{EJ#h=9ZdGFoKg`s-O!BK| zI$PcK6luw?*p<(#FDg;RfgZYHUNp|yg@9GL&D3+?4DazC_3pTold8f8Ywa5?Z^uz- zs(t4F01}`F7B+M=AN3mgDBmKMsmGl@$`q@ksH=Pxz*G^v)mVCbnM$rZIU}0F^$`Ip zxN>n;06+&Q_XWVKRlyre9(`EQKtD;ME#I)G3P%vx#F&tkQ8j47TIN?6EJ%vlUH52P%u@BI(|khaCx=-E_lo||KtA2~E26NyDvGZz zASkibMAM<`=?TbkqgoK>KM-AF#vv5&`z~nS9n@?ZQ!WKo!B^3;#ZRx}@i-R1TUGul zcul`|39rLvZ^F*I_rqMv~}Qzr}a)o{tuflE5s^dzS%9HN1|l^whOc zrt#{$g8)*MgvXL-2wX4P!CJBmsW)E!zy2S`v@#7OAQa`Gu%(Gj>wd9s^y) z=fC0t7SS{oQpEdi{ea-b2E)HD7uam@?@@r-)p<6+qs#vQBJFztp{(GT?Oc^K2BEMO zX#=<@ZLvQLOQ1)j3ES!jDj{t=RsQDOy5>H{`QK48pYMqc4o(Wch@dL%0BJuHEZ^G# zni;dCb0{IfaD{J|cXF-Hg1E}bAL zZ zU6r_9TnEitKh#cxd;O(=yVEs5)dyFS_yGM)w5;pTA%CC{r+IMy0J&OIa4E>Onj>)Tpx;EhJ+3Q9wHazF4tFfjtg4Et zMMP~83YaR5fC{U5QGhSVo(UxZ$gmotX3ICH_<>#C+ff5(^IGf1JH2z%u;#ddRryeD z-#_j;hd=qST)PUywJvcfYkR47*0%bWX$M(M=Lg0nv|4lW1>vKInt|PS#d!v{ZLVNb zo1fZPw~jbX-CLV4mRXj02Y@*Bjr1F3<(KUewpWva5w-!=LbOlN;R#Txam-seP4aNX zKL#%rLY5W|svtkjdoAD}ogy=iPlPD7uHmb;0DUhJ9II}UpbAqLwz!wdP|-(371mIv z@$y(dj?ZC@s+=DglzeW+#r0)m3PUKf@I>k?R%jgtY$nl66^Lje--^BEWdyrXlrK|OqLM?Bo2jA8kOXFPb4e9u}9Nf>bx?<-4 z0C?F-*NowVo6Wz>ElOsOU&NuZ{?x8r)!puSEKz7xsl=ytW7ykUd9>BISolCOn=uLEMpY;3O|ZGzn(u6Ok;QuW`G?|qj2@s+0x$#vPTjmfmn z$>exfzqoBuy8i&k;N9ObaRpNNT7TrbbJ{B6xPfjzEEV1dpFEXTu6XjihVv`k;#!pF zf9=jfR@GfxcS4ayqf-aR$PdjI;X7;Z>MegEN&=kHU6kjPvgrr=eEBm#+p(gBwfCt~ zcDwCD0A1O9)TMNP4$JPf?AdW|s0IoY0DswVYh0S~cJS1S?5cxWfXn-sS3kJR}`cZY=1&BH&#b_K4z=ifJi2{{6MjNBSY`lIT6d>v06C4J5Hq^yz@^W z2cD6o{{RfNj%+;a4zSN^h$sOcUmz!vyNyD)<@e;#7VG%EBfY0Knr;|u7aZc^Xslor zD2d(YOr^B>Ifcr*RNNITGl!7szudr~Ti(l5_f8!|1Hd(KK?Tl#KZw=KPkN1JaaGvE zyFugGw%1-4Y!E9%1@)E+zg;ovbg)~PN>ht9kV^+Ie<9XuqF6iF3&`qoEb{~7#Gj?fJI?XUH&4L+L--~0KGVz7!67X zfIVIMeqtADLG zI8?cEFnsb|YZZRf2ev2@fkU4*RJ2*Z8kK0!I&S4J1Mu)vY;}Jf*u!J#&e5HpiA!|0@ zmsj==r=ar=n#_S|$MsYtk4=QlY32S>?uKJ&&@YTDPrE|g;TT@ZDn za+71g_xOQPbFtK|>4z5nV&%;oviWdfp7FA$&E`}~KShPgR*OA@&~tYb4@$NB8?6h$ zoW%e?7mQ0z4=`I|+pwbU>xYl#VpuG%38_T#{={T*)qZ7&G;8tsm0)Y{zgeoFE5BxS zdk_j1D!i!R-Bp=Yak1lg*B;X00?~xS@H=7wj7f(dGjMLiI!JZ;mgT zl+8Px)Akz6qh0oNK;>WfTzTku@FFzrV2Dj-pyL}Tr4a+0(bO6p-kr0tqvvo&gbVu! zR2;q&na}Hw{g>oc^0L1%O%GSOp5z0gZy>4+Ej{0`B|N7ekNX6$9Jec!2rBtz7Ou{G zxxC%2JEi=FsjKy3X#Vb?sNvnsmPU$lEi3O^^722YTiiNoy9a4K4yPBy{Y9__{3>qE zLQ_(nZ@;(s*Ww5p{4gpOJe$b^((QD$1(Lwu$<%A7Yj~Pcxx1-O zih06fJ2~!lvFm7oc3ytUe3&zhH}MT!ibei5a@;EusD$c@<0@G*tvV`eXI0GUwjBN# z8$$j(BHRd7+)b))KM^`zxFO~D>ZQ1$=esXdH*Ni?N+WBUqB7N&^P^#6!R?P_pCL_K z`G^wqx9m%|8enYd!hnSC)i!d@3Sy{>a9MXk) zx9^Yzfv^ZSRS+g;aMt4GIlf!E?lyGXOF*}jcFp9nvIkmd?DA1!8ueaF6tY@~1($77 z{6Hgl;-ypn0F?(eh11DQg;m*=P~{cSDcgo04G`6oR}zZ8l>n6pOUEezW1k^q7nl3` z!FS@i@@SuS;4GS`i~XAxhJflRK(3+;TlP^!+ykHSH+L0<^`vbiA@iw)Yw$+3!G8qV z4EThl$6snDJ$z*=r^|{n@|IHCx%-$g*O~e!FdAtq+^c35bCS(7p*dFh@5lw&Rm|v6 zE{=SaC|LO{B{#!4g6p^+=Lj}xW8C--o%!s3g3T@17cE8B?b<^0w~b;Yf4nReS;umV z4O|OQ^N)5Wi!)+v;6ZUMz|wY9xC)V!Zo==r+4Qz;oG~Yz{7qdi=2+GIS8+!046gcR zC4+a8(C(*Gni_#ytGpNoHO0q-Agc3pthK`d8{Y>SvK%&M46(acpWM+W!FXKDrZivseMeUx3EH7zRK*C+3|?c-F! zg?|l9DR6F3?}#yn`-e0ZcXNSKlz-n4QOh{0Goocuf^#yi*q#lB6Ijol!E9GNMIF-? zDeGmBpx<{s9c+6++FCg$HW9^Z>QXBpi=g0~&KAHAZv}mpiul1tjbPr|+4|`nvH1`z zQox*IrSo#Z`mN-PGRqOjjR6BCCjAee$nDfg3S0_>;^B7(L( zX0DDhr9GDQUBE8jIG7qGx0Q7YTl19=n~Nv~oIooO9!B^hw^lFeB?V)v?A7htDn)Ku zyBS$wM^Qh{#8anpMbZ_V2|-iK*ePkwWmwdLJBpBeiCC&79vmks{9VZ1f%W^6%u08ZkX4G+~ zOEB&B2Y$MRHU>-O&HRzPdo(Z;NoQwqEF3>P=GjIHy8yeZ&LCzE>)L?DLyg~cEZDV4 zb=+Ga6rd*}ugl#;n;khTn6__A%H{mam3Hy$RYIY2=W%s!2cKNn-GB!i&dnuERb%7% zmuZ$c94xV5?=jE-ltk5Vp+>(|{-76)tRT}*WZ*2wXa%kD$L-25dR?7Bx{px+-8~+_ zQp=*9{{RpQ2%#ZBQ`-8=4qhBwH>^BiYqk#uY!qno)Ht;~gi_n&y6A5_lyJxQP{oVp znGpm)xLweQSCO|@8g?)Or`ouM`j%S|RF-u6NXTR{6$)-%tBWLTmI}9l+z`( z>^G6OSf(jT(}_Udpp<-bqB(Hh_t*nWwyyXgN5r~!3x^qBE+`Q|;glY2?p^ovjBuu8 zx+%m<;%@@vHN&{KEyc*_LiBu_$RUi_?wpRTcHWU3jlN|m$$lIAodIVh?4h+j^(?R& z&Y<3_n9vI5iCh@;^)1I|_wkJjZ~atoM-nQ7c*`k&ud#FJ{wgYnyA&3^3;o9s^?2Al z(MMNd^tn8g_``4;K`*fTGODtK$P}`#pZ#HqD|z!!3sJ6-S>P&wfl8e^+^b#s#igU( z#v;_ql%Xl@3->vJnEw4^YxD0?-z;_>Tghi4_3}1uiKHu5C4ythe=LX;A1#NJbFOYH zHvE7>y=B0LHQsH_0NSp05+K)CEo?toW#g~o*~ZNVlE~9uyv%mBO!hWvsHEDcwz{kT z0P+?Oe#BB{IG-mE$7P+~xOE?tG^e~%apC=B!K779^y)xlrB zxr!~x%);=fcx#9zsJd>iX^LO{?s64V1gd<0(g=@XU@EttQU#-fSMl-y70y(pf3p5S zvs?TipDCnj4quL-wWbayFup(g(F+aSILAY2mbEywzD>qLO0Y<)J8#KKO+V@hwuD_= z=uX~6Qabaw%qR`-nE39rJnB(hghqjR8Qh?6P1AXg5HAVTiXyGn?4@u-nb8{ z%NU%D#df3Delw6)TQgy`npL%_yK2*^K(~XhKT%>jKZ9X=4lTujZx-Kr5G7{bJu=j_ zo>ZhPJa4ZXn?P%rLe~5*j-@VZhQn&-WG@!l{6qo+!R5JSQwE;sh=kDq4lCM}rH=w< z?q!sn?{cCy<_yPCM^DVmW0~S${Vb1o~rzq7J>I$>4~X*+lKXUX>S92 z5DkcO<03^yx{OvUN~5cW2SaS^{vee>jk1=&Zz9X$=n4BWg^xu>e7SjvRYJSt0NX$$ zzmBCZk^D*#+zYD*6o4=c-$nK&kXxwHC0U6S_nOdWywt#a z9CHhG>#y+w!Q@1F&ly_Pw)`mJC1Gz~%ILLw{{XUqTAtl&1X_54c~4@UDU z!Na78RGl~uE7%L$g7Y3om=wMcax@oK_S=`k91Gc3f}}5!0}WfxJVa1cCcKT^^SqtM z9LYkAXYFwfkX=!`AyWFM`F2_XZ8x$m)ikl&1re@avZeGN8-sWePMj{k%mlajeU7EW zZ=Z-{{!tLVULL_vFx_|bf^SWvM(LAn-v|AGuDuJi%!a;$oJ1YUx?gZ_SgXB?vKf4g zScy?uG5Lfwnsrt{vkhRX;F1V2Z#kA)cwv}it}A}QFU9h zo+cKP^#t=v%LJWU{L8AoQ>}?&vs}dB1I0!Gnw|*N4W7cxsy)B&0z`jXiR9OgPv%rA zr{XZM?;@}dYoh&tm0FwKM&xe$s7A65CT^G z`bQHI*n;fH4X(&Hp^bOQKviY8`nV94rUfm3FW73;unPfHj)n`z$XB6iBGb>g7PXba z;-wsSa)2FpsJOy%r?TxtrBj7d2CVijz0PKk_5InEz4lOVtEc9^af-O_3;T5Fw%%r{%Y6vJY zGzg-lDa{T`8W3wdmvw52dNg-66hCsEw$feEdK$whEob8;`*OOJ6$@Eb0-)j_CZ@F_ zDQ$V(&RwZRnw-(p7RRf}fZr@7N^PrWv|ATuo6T$xHr7))s_EIKm#lq^xU~C{)$_FQ zh0o7-HEkpjOXq&T@20b>mB@JJBA?lowC-R_!Pm1Xtrr2Qwpzu|?{d-kbzI938y=vA zIz2sz+IZ$;r|Jc?3HnYB7Yi4G7xhPxBk~NFZ(X05g+Sg~g&4IhULLaOvBCZ-S?<1h z63d^k3>i(_I6T&VB@zDs2!p8CA@OCltxGm(sz!q6q_9F-t2rZLE?{z=dp}~kh}O9{ z@?nFykD_}K8bv#mbMD1@*=%0*P+P7ElnKlH&U?vB1Wrm{A%vSO@9+`vxixfjELze6 zh!l_tCoeHWi?-$pDo)R3*3F8Ww|@W{nVE3b%^Ti10G7T-hP;*p!?|OtJb>Nr;x6OF7qS7z zY0M1gDq`%$6gB=>;OFV`UW>A5B5%o4T5er&?@{KeQ&*C%RZ9hsAT(KHjzzau8?tk9 zvG=Q&V}8$i?&Duw4f844IT-P@&g$)jR{eYz$ zzyzhlEPwg=i)d-ZQw`FV>+E_~R?M)xBV;yT8UltD3=zS)J1K$Lvxp8OLhB#miRXs z5zpAFQ?>j1EL}^#<_^QnEGBJ+%JI#AXlz}@6)pJNfN8K_%ks)>Fx0XIVujkehsmQY z+WAq%txx`8+N9{@xl9e{;sl+!sp+MdCQ!T47~H@q2GWU?-HM0dVFL76(^+t4v3^Ss z;`zuS%Q|P+@^YN~#0hEk`e3bCU~h*F46R-0e?N%Zqr3d<@Xm$GQ`1~Kf@6XD-(js4 zl~X|X@PW2~93S@u*aFcm3pmQO<}E=R$Yel;Zu^b^(Cz17F|S1l$&i`4$3hR1FT?kb=G6Ga#-S@8YG1o*$Kxh?Ecdjr7hpo0`z|-w|n~;ur?n zpn<~u-(cC=D!$P4mTes3WLxV001!a#aPBK)bboZl!%76_x5-5nT8#w^9nHf4zkis8 z=vDc@W5~78{lI%^<=GQQYu$V72D@&ZM7}CYd&kLDgekYuq4v`Anfi%QDswxOEr8#! z7&lM%Awi9PC1Cox=3<%$eQb=%w2Qy6JyQns{!cUKAvDxN>=KGroo>IptC>E6O>^Ze`*G8dQr5ENy zxYifQPauoFock)l0pUJPamGEhCZb$AIp;WPc2=`xGw%|E zZul8U;A5!cau))jbmNG^;3^h8lKTE{F!>&8HO;CBa4KPfHrH_+P)LJIzxU8ew-!E4N5u&8ZZ*qjTz9lcZ+4ua)NRCWtVa|@wJbuVOSVQ*Mf zzc1DnuEZNH@5nlq2vr`zvfHVDqW=Ij0?G?w4Hrhaaap5X{{YB9yS~qUgw(1R%asva zAN~6kLCBZ5GRWv%CohoS7v@~vsM~&WG&ivtCKbj!FhMC>n>H7utpV#QFG-bN$1S&Z z`S{4P0{%IEvoybDP!jFaSJyZ}TYLa=LW)=!OT?~XhX_R7y}4B`$zJ~eFg9Ci=Yn(w z_L-Az+Hf2x0Z|k{5sV8asXjx)9!CxNEUJ?4zM@eN1OB2sDB)Gb3v%Ipdj$@-E4TqD zSDeBMWwi1Y2O1w>0%mO^M#Oc@HdeRVpo*|vG3vdBjfzB$gSo@y!o?7|odhD9h;fF9lJlC;K8|Ii44QN(-I10Y$;DbZAV_hxkTBl5BGyA$~4Tmjo z)&8X-p5y|u7NF-ouG?nBW`IOiy!%QqVky(giCRBziuWK;pqy+Brz*9I0d@ktudxjm zpw{Dc{HJ$5s;=syftB^fL(>RA6X22c%jG z>jqm(e!#+|_NO=LfNT}Ef&fyl{UB++O>%6e{yF(^0<~)zZM+?48p{AS`>XyT+$*$~ zPvQnJzFR@$vgJj+fN#!LWcZa)>0?Hb8nz|Z5{hf(=jt)T*UbD&0gC(VZ?_6AD>SVu zz9qMHe5>4P9kYbYen<+f1?u?`IuUQ`fIpu7}I+QlV;}pK2!<0mVU>p!NQx z!aEn8qEzB*H1;*c-_s6U{$q?ayohCWNt{5{m3&s@T%93AOD-) zSQR${;Oi(WIA{nG=9c>vbHT%_?j4HCwhLd~mZ&a{ErthEcgc2GPhTU22)*nm2w2&v zNLADhdK?~0u^-zNTKPm5h`;72g0ndkfyK+A3JZlU#ID==5w`EfcPOKRbJ^(;py@u7 zlac!se_Qfr3W*Bj3iW_$yI-kR)1c#s?Um2=jhrT;7NU2R0XpSx*q0p;uJ>0t6&o12-xn6kOH}u9OVb*1cy`%LY_hK^vLaOQg_ak5 z?~_9KXd!!I*Y22wl}HsWS4rb7xLVxfjYDbFVQ{Y6)%{(skTbaGQPDWco*ca8n-Y8v132l?NB>*N-t^!UmP z=TLZfb^Oa!JL;vb=d(ly5Y`9tStvN6>L6(jI^g`qDDq(rg@^e|1oz<$L#)J8$1zS% z{rpXO6+oVko`pX~?=-+3B0Sq6nz_`{`Sps|_^_UaW^!b^qo!ji{5a|3&XSXEFF z3a^{n8Zs$LM4XiT{$S}_D-oza%xjIRHgJs)?^=LX_=UFHlu>S8Jc8uzdRLLxpDuQa zU-lrNBhPZK>Mm;0p`$3KE3V1NuE^T6X5SZ^`hz^&3caD}fFJb|{b9nb-;u0s@88@? z93C#BI6*o5Odp~EH0JoP?n?N4gUbMIxvz7x?#of;EA=y%n*%wia?UE7hOJxFdwRGW@8VohM+=%8s0VPo zFgdtbu-FB^C4Qm;7Pkd^*#Jd5;$M&akHtqY&#ai(Q?aD{fN6q&S8$fiNqfuP(tg1;2p1!208R&7Svw!hbN8w)aG&j03mBm zc0JUEFiT%3%Y|9j6JqrNnNYn*I`~=KyI9qKh=dfY z``i~vogKsj`Ib7}To7%)glTlhY~f%2AYBW1?~_qfTZmHckx>H%z*4|YJd{@3Te1Zd zaK3zvrtRJ6fZy|8MxUQyMLArov5R|BA!u=Y&KFL2g{QY=GBmLMC5y0>Q@G3V*7FoD zg|P=BU|R zcY(1c3vc~%Eh>z)zDg?RG!q@8)(JZohiWS9p7U%UqzSm^?pQ69=RB35Yn9J3@Rppg zu}rQXn2oNSwGl?OCA3)u)$4q~03IAFoEB%YcJnamlv|t@z5eiQ_v`=;JckCYGvpk0>zkIm0-b;?D(E&2 z7OuIJa!t2?uH95^rdBky3UXPy3q5B?26Kb^l#+q;*UdDlsM6yFE&l&OE{AY34 z3-&%~3~u`_)aMrk>{eX8=m={CBq zX|MkPBT%j6OKVBq@LYFWpIj!+RbYUocIy0PEi1K=S3|Qah`rQofUuT%&3i3PhNXP` zz+O2left1`Lg(9n*;Lig_fR~J75&S;ix#h7wR2vy#_sC>00bzn!AJd%KicD&fx~D{ z!Z)y|t_#YRy9rU3uO9fCP{bB@k%spb?-DO&>%ndUx1&wT3#F0QZf0$%En!sZI5 z<;JeXaycSW?h3s`8r9PIx{P$!_LP^y(Wr@{SGy2AmzE(wEKcg>1#GpBBtcL=h5Ukq zuzJp*sDW`rFIG0rL~zwBV?+hpZ?%+Fo5T4bQX5wR>+H{9Ij-N-!J_%+56n3qX?%bR zEnT@yN-u{k4?aX|o85JDW`!|$2)*ZF6j51t-0h36Rh_rE4TGeo{QhPD6x6e?Nk}1h zg6sz+TeH*ObtdYN`@sOH^XbAPRZVXFJ!1NnRrElpJlpv8Dr14_U<<0Zbbo1U19RBm zXcm_XEI$k^UxWvvxG1)8Z(90AHNAlZ+|VfV^$UEvZRqTP6*rONcw%0Zpl&fh-*tRs zDheTfE(>Dq->4;d8+5T%vyq;}wOHBTVBS@XTjgLO1aR4J;-wknmkvMVn`?Gtcdj3u zGZn$LuKxfmr%6V=B^Whumm+5r_sGX1~zERvrUC@2p3 z>~UzG{5pZ%$8XrxjzCJ(nioR;e7H0Xn(`_G#bEyciC~Q_KJP1E)* z796|c3(|#wtNv#Kr~rxC_=UZ3wZEJaiEcdngQ~o9SjS?{H;RT_v{lN&ft__VECF?V zf9nc#3tc?2gC@HCmtZ$(pzwPvy4Z_k(4ssURZ_9doSwW(Avo-}OskDLd$Jo%@^RZL z<>%nyc6Fsn$SCCOEj+-bzQ^H(mC_?*;bC_isI)ft@+zA zH>zu%sQWoYM(jvZ1p~CGuqb~}+Sy;k&h>rv3Mk5dEyK;Uw~UWbupyVKb%J(qIEC7* zx6HVvm`8DI*+Xddc2}CguX|%xY&in!oA1eLX}qx0y>>td-%JNLT)*yMOd*BoQqODc zno%)?uU?p4d$~47n8iRXwtFL`qW8e9b~b2Rxk4E)5=`Ch=;t9*#cRbCz<(Cj>w zT%}c#s<(3biq^b6^)+X++JjK5 zvRo}+W;oV=nBS!pQK&8Z8ofdI!Eqd}JeE7ArX`(0MxU(uID-_gga?O=P&q-p94360 zlU(sFP2h`->RGGeG#5j*pl0I&qHkZa*t14~FPzIPFA zq$pRjurzp@wl-Lo7`{)$C-UY}P(524OAZ|_Etzi73rn|PHKl~wnZt)uu)YRW)j(<9 zARnp1E5uDuO6pshS8?rd5J(}$>RuLCLphj?=xU!24exI*X-y_haS zm!0Y+0#3+i*r)n~rtZOAHu#8HZyiK?KV~cMETO?yFUb%NC3W&x8G=Hbyf$vA0-Ly~ zBlw9#t!@DUUx+UbQ#5hF$P}XQfrzK$^Boo)_r}0M`Ph{^F83P-a(^ULz3~<8SMU3P z?VZAi)%HV&x5FZx9Ymzc9(Q0H$*Wr|=6`}Bs5&Jr_&ab^p8yei25}n#UBn3SL2+MO z_5f8ecNl!?D$wNu95@f)f)w6LYs7e}oKs$>6I%2m;;zz|X}xzWYM{&y(0#C+-^^A>YeDCAh+@9bJa z?gYAlx5sR-@kfUc=J8UnZj(3cG*@k3kN~5T`Ifagr}F;*s4Q$QF1Ree)V6SC{mFec zgVXE|wfw2r0}G!yJ`gue8E+n2@^Sz?dj&OL8|)PB%eCq~s)wipw>&*c4i+7|P~dLF z3Y~VZKNBf2Rr#-D8*-TwZw{gxAIlU8wK|Ut#4O;d>VAJa%v;cM%1kQPcqC_3QBi!;UMdqKQb|^N)}Q<4Rvp-ing{%!S1}TU z%lU_b-YOK7D&x^5tE=QjtG53DGWT|xe&sI$KC_0GjE@`gWy6;aG@Z+VRIt~n!x}bi zdlSf5$}9M?3s-q)r4pX@vjN2h#b%bIER9zc8a1|m6)*_l%ZS*bpVjpMUF>n7%IhLG zP5%H;sH9qmwJomp;%F+{{6+Rtmi2as198U6-+?t{0i~d6p<0y}4*NUer5xypU+&PZFI>1145s=kpOM zYViHb5?fxKROk(XuQGA^peF*0&ANiqM6B?QmD2}sr^_2>LqA-pQKMYx5)N_i55+^G z2J#a5IvCNCjjo`nx>mrHAXt02F0{fpW`ij%aqj zQL3i~uZxbMTl~Zj3$K67M$yw;@t*A~mlKR7wF_C|#HbI;SE~0J4L1%lyjZG*_ZRX9e@jARQ5f z%WHScmr>hnVO4a$2tn~bxYOwo)u;HHmmSl>E(KkxAcDERIbjB#&uXH1M&j?A$fIH* zh3!s@Kwd%)Cd@W6kjvk(5CC5xDXuP!2!RJ)kQUnj-#IDmYerGUpjwPj@KBBM>=kN^ zr2g>ippWt7HOLqI{DBvz`#&HEsaB@DWfR@5X@QH8Rwb8WQP*&3r0bby0TmFgYgu96 zB<2iw=@P8Jff^15-Jg4agetC$jn|dk^HJIqrEo;1oJu-3$JmvSurFmTQK#uhSi2~@ z2Ccoi`TBsNXGi^sL(h?BD}~T;GRBG55W?nvH!Q(UACe-q;BSb%0lRnX&_%sR6(CUR zs%_j3kGJuZonz1Zfp$w#LKGDe!Pp0=5{cD!xwGMdfJar#02jf(w#4>T=-Ojid|3`# z%nBRq7;-uU5ZLWM(pg%hp-V|cnhzV?$Qv8Ba*Zr**;b{t>0Q1?aOm#o9geWP-_PbE zD~IM?HL7Fvi$FQZ^$SIqVbr3~Gj1haax4$NOM(ppPw>t_!7<`&BI=s&;zUGv7RQ&v zYt~9|3;rL7II-c_)I2}KGy{dzZ^)@@_(RQE;+U-+t|m72Rz-v)ML=U zCdyT#@~KFpbO!j?rdXBykkENW&)6d~4S1`8!juG~qF6ym##_GpmoCzMf09~JR_y)x z@?RnFIT*w|7C_)0vW3>ydIRLLOE%ZfTY!^8u|~qj0p;}RgQc2YTEhBK{M<&&rwQHt zg;m{x&4$cB8{}vJy0bfjQ$gmxGLl%c+_RjCV(=~DYmu;^<8y`r+8Pe_rR6T$g9ipT z3%4nF4h^>9PJ-X&V?D3&^qN#vymoU0%Jc;00JBTGQ-f4+ci15Y?CU5$)I?mqagjsj zxeldZS6A0F^`vsQ^vP$_Q%yEFov}sKD$@0_Ydz9k@pX?JvXfWlzI$@2IN4Nr>-m5NMqQk{?{0?hr#l>i6qm9XVzLKis<`pdve9keN*{{V2&TW->-{{RutFTx3e`{Q5S1?>ws-8a{> zfH)WB!PuO&<~t6t;*s_yt-cVyA^>e}pCJRZ)_w?HB{++l%N=no(P;MoDByX^FmBtD zs-jB)!TBcaZSd9=03zzSU@6WFKFi(3OQNgYiR^FhQ-t-1N|0~6Wss+NelwBFs$EmW zV6?ZtE4gkD4joSIQ@QyVY#| zoG||Ij5P5&0nX=ZbSC9MDlOy=15h+|_AD=VmLU3YI@jM}g5eT@$Btsd2s$B7l?^9X z-!lgW1xpueukjuztL|_H#9yZ-G&Ot~K&AGj4vNrKlaO-YjX!UZ7NMo@*_5kJZhc1# z=B0_YXX56IM+^d-*_#!gQ?W_8+~9NZ`zQmH*T`B&k-ufv<8}F#S)U~bc^alfY3ezL zb$Vt;zNotV#c&I(wsBT)ex_oZSQ4P%+|#``#MU3fQjiT*ce6^it8B8^SukGyA#MEr z(PC=p{{Y0IRj0?PX00&HD>?9#+CM*F2k_wl>sZIETH(jvvw+`U#Ix z=hvujp_#J9yZub1Lr>(6J)|g~IU>q(yCYwPLEYM{uH~pjzT5?_er!eB{>19v!^X?l zEu%g#zbK2t8U5fKc@R`DurTQ>KFS&s9&;~EWitURp2P)f`7gHawg;p%Jz*}{%~aW< zsnVsm7x}oTQ_J>fcCJXP+cLeBw0rN#Wpv6(i24yST;9i*6iyM<*c)ue zyyarX#DQVW7Dd7#@5z3fQ-yU8;9=k9bGKK-wX{GLwp#pHKx<5mfL3;Fwv@}*d8Z#D zXb$-KB+vX|jh+Ax0S9Nf{vuXxC z30F;!rkKJ5t<{fHfWNKIT=~zExjcV(QFcl#+B}<lqrGJPmx|$6|x^*tjHU1@1 z@+;~k;kxvRVMj2oc~i1gH%i%eg1*JE5}$*aZ7ws2C9{~GP<)D-9oSA1%!z3{{uxAb zoYWH!G5kyZVSd+6fUJVRG%Y2J>d@Isx)_TN>%<~ z3q}26a!>q)Up&9W-u`YSdT!Z3=RKE067K_l)B#FB;(mHWaOcut^y&yD&`GPT7*`Oz zG;=oH;DDx}k5g1UxoHdYW-X8bM|uPE!dRaNEFh_ zy}|*`?!uwFYVHsM7c|BLp>S__hYC?|a5~!VU@zD)Qj>{qbn{WCOK|u_p+U;~{6q{- z$Bb~c&mf9JeII4>D7{1xk2fw2clfzh-CvKAh#icm1@6djjRye=0Iz@SKr@uYZjL({ zSq0Y9IVrvGP;SYM0-;#`W zzVQN_w`(|nISkF~xvL+tAZQk@c>u@6<}_C5z4>uPHTs;Pjeluqa47Y6#d zfy!Oq*?z^dYeoc3HqE^#s&WXx6)Wmg^&j6q~;@&uO7_;wRIg9H1OtFpc)#*1DqH1xDuyc`i|G1!YQKb zec56YF5y<_`arQ=7P*a-4*KpoZtA}zbmJ97v%sDl{{ZZK5wO;CNcm0#4j1*#YLA^?^zQnuKY@Zv?cQEv}hG+$A!T_rQ!U1nkrfj5Kskl zLWZ>VpW-5{D1P_kL2vHyEitfZS`KN5X|t#(B|7a`5cETZr#;KGzm%y^uK0VJuvb%{ zt?ER%tuR0!*r+-a@-rHRh&XjkZ!<;hcV}d5kw?THXr#gooF}|g-#xE839uZQ_}NH1 z=sN`-Q5CgYV0m}!RB9vq=P*jR=Q$@PD0*&s>0y6mJqmqgC>kDb$>=dT9XY9s3J+4k zG-@MT5u1<>ESNI&>lGHu@POG)p2=tcdV-)D@tbtu%XZ*$Z1($x7T!;<;uc-m{{RV; zQ(xfA;bF(>KDDk_KZw``H$igiV^r_iMR@&dF$d(I;hNRmbU?UY%XpW!LY8?idRKwE zd5lAm=jIS8(~14Ad4*;yzu)dE)&a}tdu574%P0n$+LXS3FT^X5`1Vdw_*!&}um_wH z$_?La8_Ar#A{z%z4nyn?Oz8#c(}Ic2VRQxS0W)2uH%%9H{$(z;;P59FmC`RnBa;{< zV;v&82%NIZ>Tvt^4fXWl`M9AF6zf<`>etJHEXR+s_FZ%T0Hk7?CE?`7O&n$2o9hr2 z@|dEj4DRpb(3DmfS}po}9(pU7R#kSv;C=Y0rr4p2fL6BvSuCo4S5nF*j8(+K`Sv!i z0RRfvRUH1O7Q42o`xd5NbL0d9o2vf+vfZlA3+4xjJULMVXS0KCx>zg@a9g)9E^>T| zWWPvt^k%@>!TOfE7RHEOOoN8)H4IP8wXkSfnguO$a{mB3q5dU+P@gX0R$Zu-x@P^8-tXU3CNRHeC7qu3*ttxpuipnrW`TxL3=a9?D>@ z)4$rH3(z$I4fJ*Ivyzq1I*lTc$LHmWvsC{8733bPTU@uvM*0W$lw0}7tihCD_wHP_ zjx+nhirhI-0dAFjm7yz`C5kcNz{U(xJlkB_i*l^H==#M6yEwjoGoNY~zD;mFvI2{I z_5R=t4wrdg1l4JP;`(990Cl}bs$)E0svEVZqvH}S$FsI7cwY$W-FwdBpGz)NcXsjq zpmw+M{q6uYS=85%zj*lz{k-29FEAXfaDV$Wr5>JNaC?WQPD6}3Dg$DgXC)LR1VAmm z%gr~h>L9qB>L)xpz7rxAG1C|16UcwB%mhoibLr$@34iF8RSsVA z-Ooe3mB)z@W`bCEciysC7?SHw~BAxf7At@-#!ph zA$H~ML@rWdbj5Cit*M}gW|>VzX|UAOu$nKG zCoCHa3hw%gywDnpR!{(Oo+7S<1v^uGoo-=`ExZFk_+O)AjW^IXdpngBP3=L|A% z^M7XTG+&Um9{bd*c0$#ETg0FS8@a1XVDy?w@>`r##ox-5v}!Jgaf5MOa}lm7uk38F z7T#;*pny}qxZ9_`uwlxu>!_#)V_2xGoP3Dbw>s)Iz^lvHkdpgc_XBIaq~Hslyi1$o zjDjysE(PzL2+^D+!9c68ZU9yKCorLSb!@U)_@mqiol?)#F9~03-}^L;1yRki=)5}i z=fwr$<&NUXMJbMp6?Ny#i(n`%fQ99NzahR~gn1=sT(CsD_98)7M7V;5YxOII+BO7k zwN1G+s}U)|1xkN-FJJa4b7!lC2G)LH?k&?qz0z?V!%MM-tha5xLz<;VR2#bEv zUyv8dhq*InUSO!21RKQ5Wl>HMITppr;4|YFDf}>bFaeDI(Xzsuv&cCQYJk#_J7yJL zuyq=V#uXJO%6*Hr8ru#tU%qN9eeeAe*T#i@A-BxGdxob5sBf5#N4#kcYL2;_hqg*Z zZ(S7tVFy^kthCFkm303AH}>O3yL;?{lmSfGFY4M7Ue95h{MVVAUsV8D%Qz zidL3zT(Uq5mE3JdK8{rW7aLQ+a65`PMzV-mcd8Mh?f7A4a|61m*!s?vG2#RI1e?%aDzx1=aUEOj z2$s-8tU_QYcq%K!w*gC;?-G{jG?qg}D%fLH8X4b?^8g?#`z48=nRjnwE5i&%o+Fw<}9P^w#DdC1xF?F&gdn!ovvUAi&?(L-(_|npbas;GHn`h%nUTA zTfSvF=>uH0TZgfSB)>@cZZ!^uulAJfdHIc2t?X~|vd-WkM>&4R)h+ROs8_+4rb^P} zw+IH_-5&@Ds>A&I3ZueZ1(ZDT60VB5VNu6&!EV09+f};(>sAs2UzOxbwzu4FR$4r| z;$(L8L~(ht{3jxd+k)C$tZIpx&#iMPTb@URmr}0mfcnamA??KIx@BHDWTl+Zf0h-; zxRgC2rqAL62HRuj$f9)`Ork*_K0?LbOdC@DDtT%YCvvV>Ay|ySa;I|mrUG%x_Bbzz z%q-K(7S_#W2Ao$BT_|6&*cqWGBaC~`=2cfP=x_Of@ADL*rKvlLpUhAcGFJ{hLWg)< zU^agVP79PSn%b8_tIfk`df!Q-#gP%6b6>-d>vT65^$y7?1mF59jnk76{-St9_~!Xu%tA}m2HJN8)o zFStrM6#7&JW7)Zxga8!t-&H6zOVmbU;)V@=Ik<|wQD8hrQGhWsf z4`IRtz6Sz6TU&sw*IbK|hP0}ynRnM$7V7wVIVxCt?73#^RQITJbWq0`GA-0C_tqFu z5RPZ#{-}s7z5ACf2oI~z)EfQ~{{V4OqpIVGbg$f{32ySj!<&bj9_!}X@~3C7L=|cW zb$&~7iAo5YUhTglTw7ILFdKv4l`f9e{Qm$mJd5K<0R6Xj8A1WSQ7qTG{KZIoCy}aK z!Y{Q=sX)+)*SIm`czl)(@3-V26z4w?LDx(oyIXNKyc1t*sdX*ttncIsTTF=f?$7Ni zj+upbQHjEqqp4OPd7G6rsv`hg>6b&BxP@=R6;R~qIQ+~uKyX!Cy~l0H8m~q_%%;yd zxkGE|^@G9ia}ty@ihqb(0WFl#(*FQ85}~(?5bZs!PvC>9Id0`}IcY=+>f9C~rDu?NZ0{LojyuG` z!GQr~7j|b;Qj}X!GcwVyWjB@ujvm$#t3~~Xmiv6d+lP@UYVODL3RRpt_7rr=NlMUb zE+H+@8_2Pg26ED^R z_=1lWsZR#JoWCOvw6BzXmLsvDS+$KHN35rDdo1+N@5HzlnpqHGf1%@DmXj+GjwTJALp0Ioge zR?Zhu-CpY!}!jIwWC4pT$yn~{u&U};(hbtoYL<*(^ICmqS zf~qAKMdm{0lvMjHT5~ihm9VYu7L`7NE9m}dV#eN|g9A~NYWD!-?XK)>Les_n0Jx=c z9p|VWw%#8q47Naua0k-y6|ivt0mjsI1S5MB$X%lDxeltRX5Yi;#4E@a`4MZADlH`) z9JyGQjh6oaBtQ;_qrh8t+XsxyM!qz{#<|*|eIK9_; zV`1eyZxPacxoDJItM(-}>sX~bZ!fr#wAv3y-MhtI%;CQN7zViT?h9wYA8KSw zpsUO|#n%%Jxy0bvbiSsjz^BcDR;+6I2vbcQA7F{E!Ssss!6&u`kb9rZIv1yTAh(dvHPH7^)`4}~FTmO1oJ$-R z)yJGdk)yt&TFR`a1;tn|2r&kn;yc66udqyI3>IC(Ur1T3*AlgE8zWdzX)4UBp{S@j z3(O%$S#A-ytzZHw+H!L>qTRdlRj!uqcpUo6Zi4EP23SOYB&$3Wj-Ply_Ua39nziHA zKmb;_Le&CumX}-V4I_Eg@Uic=u0M#bQRy70FLB}dDZ$g{E9^+ow^#NyUbf@hH>4TuK1n)3KFhuk`W>Y593^w+q7JPzQ^bY&%K?DN1^4k^=2belLOw z!)@!y=GynTfVAfbCV&B^^EZH%T9KL}ZZFO2q6u1Z7j`yNmQLAhyrI|~|?qYYb~^8q*K z^8;F=g(6h!=4$NQxox_O&$raAT3AwdEC50L>~iTuQymDG#G$Q!=W>X(^81^tl~4=O z%|^)EJN7mJVcpAAw&LF90Np?$zl$$ZxLa-9FtHNs=k+MidSA;H(T-h!Qrz#&f)prx zlmNW167*{GsOb{DV2>~dc5d4n0I{TnYgM&-RZ($&N!K^uX2bj*zRm$DIY^D&@fLBT z;|w%5KD#wRMTuQUh^$+0{=}>Un3k);at2zhQAbc6k5HDCNS_6`Nkcuid5#nu%q3ObAE;bc;Q{FSk@bd{ z*{Z!KbKf4zpcztx&N3>Rzw|?@Ea~o0F}L|bCnrmX1=#oamu=)1#KD)suKBS7)S#KkN?yTdIxx>PdYRQcZ!=r$ep z&P4favg20-%Pg&dWnM8CJ(U(zgV?gCITmoms-5DE!Q*ywa9MTwuA-nORz)g;f@*7G zvteF9vzuC%rR2iU^wew}$ZKZS%gpL%(({;dGNH#18C%l8fkmel-^kvFdvUUq?xk~z z`7Im2zvPEjnC;8T6KYx%Zg=0}6a-%N;|mMB{v{7be~ajdTR~?9)oBVGvv`Rbja999 z-_&d&0YRnt;T}sP&Bt_b#koUIE+6&*6xxWDW7HeInxZRf`HxfIvG810n(Mg!Gf*}w zgC#3>DmgJ`U$C;MJ(O8wZ>g(^_T@RJ974#wyFUyaL)=8(mHs7gXjdu>W#a;Ebb^=0 z#DI2X)_Ey@ydW)@wtC9shol^P-&2q%f=P`?3p1g_UmMM47*qXZ7viVg7;Q`z+e*Pk|+qiXPZz}Wm7~ai|AzoCbmc?_i`{j&C@rvx@Xa4{(1`Vxv znkv0oxKme``!X%7&aNAB-LEN{Y<>i{PSiilA0Nwvme2&FAv~F)2^0)SsiyK+XTmtNsg+IA%BYuC_E+c85h-}KbXy@g?b~xUyAqFA8hm)vh zWEz9YcLIg0_?sv|w-B|yI^_L8whS#l+)IlWZVrMp(Q<;XU)~F|O-=q|&(iJugZGqq z>GuA`0N-HyPzkkU`Y=S{@%t`-OM30aT`k@7+b)Sq%lU%w^Ms{W4nHwLUnB5~l0OIi z#)@$H#1OFT{m9zCO#_I#d{dIEvXbWoW_8q{SM$ULX89}{IF-<}b?3-~q@u!^o}ZaY z3BBh(%-4XdrvCu>B1gBEDOE!CI+TF~MuM`TZ5jd*H2cc~91$*}?L~(W0Hxlw!8ovo zw>LbDRfRWfU%!hAmp7I6H^5V}jxWF6&O z`B{jqcyvl$t%JQv)sG(evp}>9@|~tH%`@)dO|rAuT0yNX4l0=j0?s{{W;` z&TE->BC%&AS$1hv@^CaRtDY)Ra#w;;ZcZh&{$N}w#1;z`c9;Gpi*!f_*;sfQz9`}H zDQa~>b8K3X{Pd8kcvk#=Y_Tk+!`dOKOU3}M4`qyW-Ta)5b#cj$gs!**G0ok|jCHoV_{VJu3D>5HTd-x%E^?6#qV^>Cr`cy!Q@AJ%l zo!R6<2();-m9Z`2asb#(It*^+!q2k*02?W54%a{G7N&k)p8SHZhJQavr)BA7@9?9z zy02#uQqDgEDWz%Uv`Wz|tRq{Z$_C~?5X_+bN=zz*`tu{ej;sy_EI%9K7uo9n0NlE+ z2R*5-$ew0QN@-AyBHi1@OHI?MzQ>T+Wvp`DLqmd~;g)eaoZ<>E4La{1?R^Vr+#r{wf3yWDtt{{ZO{TLE(R zh`pc`SG=qdLcO?vHFUl1pbGZl6*N`4_8CSBAIw@sUT+ha2~@Hzg=nUr+bZt&BB7?= zHX*M&hko-|A9mL29a~2K0GNeJhY#u{@otZ?(P-v}pUEiRp~vMiU;$t?F6t_pMxM$o z!nr+X-kQvnDp&!l()x%USNJ}`A+}&~EZ0YndLkB@20h$YXxcXWC{7ZQv#!{j8@K5r zY9pYlW9oQA4f0aI2eXl>U{<&L9z?cTp_0Y{wZ`AbE;I#La(K&W`TSJwZ5y3)QQfa{ zrwFmu^Bj6C!Row-Osdn`mI$I56^khLE2yO1f&^Hf)FdLFNkaGy-y=LU3;zJ5rW;1L z*({_@^_YaBYbDwN!lK2}?hQAhjpOMJOOpq$)EaTc1mX5xhUm43 zqO{ZOMOl9i(WsW-UaqwsZM{=JdhF zxU}U|U%&umiA_EK0I*wy+0QIu(Og4?Z|8*4gdDx7hzRLWJ&jkj49jCzD)g@FuiWG< zTP~O{VY2Dqf@9;?P%j7HZZ)2$`%4juSUC8`#HjFfnZEfsU{xq#$<50ZtzCBe7jdn^`d&3AB8HGHvf zQiI;0E(@AGjiSP>H5)LRSXb?l<+oc+#h z6A^;8p0AM=oF2eNg4V{>!uAaZ+nm{!5dbBsp|>ug#qrHWmFn}Up$vtw#pP#TB7h3j z;RU6Yl>-`T_j{K^s@4lG+q88$O7n@+aG*z*5VEz^`xTi@tMVSzzuqBW8vjm%Q7dw_Jm${e?jl4t{4{fJVPXH7sMDeL2CIVM2RuP6M6D~|WzjkJD<@}#RYeV(q^`)0C=Kx% ze{zXMB*l~u{{RswsZH8TQr!Olb-`~`aSAZUdu7gO`x_F1T_xlpSRTSK`Qp0%`=u>=4lC8V{07xA=Z9}BF z4%(yaqj!1FGWaw=YEYm|{{Rxzs^0p5ZLYYQ$+drOQXX?>Yn-SO%dmr1xsJ~D#GGcv;O$H54&8 zC8dc(X?HYQ)%Efk7r)@BBHcqp@#F&k04#5US8>Pdimip{x93c{ME)V>@~-0V5~?;; zfAIt#)B%bVU+M=9wa&1LlpGxWm@P-2^>We)X_C)C#x!R9eqd{wNB}?pRd64eKa`%* z!LgcO^A2CjjYRt`!u}Xr>xQLjzbfVxI|J7s(ZyH+vqipXQ!~1lz&T_q&at<hFv#Tj5D6_lV-i(Msm0;}tz8ypLn%gt7aG zpXK{ANk?+pW%V>_xT#7h8#IXlMgI5qFi76PY}~k%$C4x4VnIx6V(io|GrkDW zv%Vuk{dEAbdDJWnOCuZ$D7}TeBfB!_=BlN=iE^#W*y0TI@>!htg&nW{_b44~vm3QO zR9)w}e6<$jGpIJxlYUEh{{Rx`Q7l9M0In2&2m;z75c#(%yWXXjw$y1#HCZm`*<=yP z-uo$5>1@;RhuT&K-1<~0tdpc2!^*`U1sVAB@vkZ90m9?7HgqE(Io z+qEb+fVc+L)z+skUv!vle-So(h;GmB+vu-9=-oYhxFLAk(d_x}Kqs*ZS0mJS;O z3mKu$ZUNT6GTN$L%cu6|s3Ck@X%GbJIaf?uCb?z3hmwy{>C=lK&|{VJ<2fnIhKr&) zft?6ZvEzQItbgn{d*@Mh&Ie#XC;JIkqN)0*D$&QiqcpHHgH`e?PbSAE}Eq@FhXnhE;>;P<^KS3 zmGHq`eSSn*Y#1mX=2|=r+<9G9an8lO2xL2E)0mKj+u(IHavOgUjWyYG1$ze7Q>Vzb z_5f|BeS^rdvf{l{$z=Sg@R=bl>&7D5FZahxEES7zEc`_}lrF;64--OAe$h~{$A^Y) zfYeY$D~*k7{{ToZ2NlONg$K_PTeGA1Ww%R1zo;~+$Z3=fRPn(nqS43dUo10W?C5cQ z#+r;O!}x;InRai)+8~q$@_>1B#cWz0y2fq0r)@qT`RuLnzaqengG^sEwxArZiD5 z+p`$_M&AZ;*wIGpVj3(K2a=1nCY4-o+34BG9Q{3pybtv?jVrqDI|KXlMEi6r(FhVCK2^)*)OSMVcjx-;o2!Z@5NE8&%qSDy?@eL`hg1bK)`!-QmSEV^I1bEMv?B;ILiudsgz~JHnFUmf^M#o2qEWLC- ze&K#H>bCBqh0@kvkZgEt%V4}RTn~->lWfsFdjSBo(HNx@YpeXgWc)hfabPc8jJM>V zUwS5`H%EP+e3pPrNkDc_az5!z=t=3mIW+~+{mrXj7HN=3y(F*&t(a;-O%QB`HXlUv0MsppFU0jI#Bsg z01}tj000+0AvC7db@X5wOaUUWq~!sSpzNwGh1L^8wF?DQuTtT=U+vty7dm^2ikXcL z37RidK3mO|UT;e}UNqW=JLa{;f(xoCEk z?o|QEvew5K%i(dhh+YTNnE9>o@?9+py77RuN%8KY#ctU8O2Yu- z#wItRHwq1}b_%HBXq#BWxs|j&br+JZzW!lv;JfU)4D0}FI{P*N*Z zsoQd{Amkmp_BWoEi2&ldamVp5cl?MNEj>O(q48^)`vnYHbq(+ef0^K>uUOb!fM}>O zzPTkgb#6Pz>_~#QzqTQ374J91v`cw(`gI7NRc&`s>vr$)E(gZ009)gpZWf~u2CcZ(D!cZUB!yV{ z+*=jXf6Nngfuk0mTDTixxP1PA?X#0ojulj@wyi8a29)YwR1;^U50x* zK4j2FZT-JyC^u9O65X!%T2H8a>J;WF<2kE$`HpZ?3z1pRmk~ox=l#nm(CtbO`z*hc z3K~tizGACUPxCg({9H-^zMPf?2ibg^Kfp$X2p$^l1JaHH7E|~xTx`A9Ab$>tLQp=D zvG?z>PB>P zicM0uw>`=miv_5HEks+-;hdJalxSg&#kyEqh zA0b6=dhMKzah^m%?LI+OTq3ZG=Q)-EI-A$oV`uzav%Cf~o`0wnVw0I|Ra5$ov3L7R zn-%LFn%mN%?6p?CMBR$<0p`%$S|Hu^QL1gR6LJmS-_}YY;GttciXVu$o-HOyh(pX@ zAl!Mc?&y{^miZ7;^Zmk!-F7sjl~6U+XI5m;%8-*UqJ?o|ug%^YJmeqF_ zn|mmYw0w2F&a)-+m#EzXrUTv|I*2zI(^d9u zRX5}VPB&*RzmfzH>;WH9h~_UG&7#|uyRAQ~k3Z|E^t*Vfg>J+Ns&4Q7vck%`?hU3q z`NXpB$B9vbcL(iPa0dAKEa86sAmZoH{ICV!N^*3q%0IV$Ri04qS z+Lwnr7lZ|XXE3h7*yyk39c^38UP5YjoJ)ExX%f@zGgU@lrF@p})YW1=^K1mTr=ee#!$9!`A!aS)+Al5z@>84W`hH(R~OQtD(#$ zKgl&{9L9=P=9_eML~{7!j^aJM%y*a>C=BDc?J_C<00_LY!JO0+*d>RkHU`RN)5%-H z_{a+`zRIIIb(E{ERhN8;%I!sD(c&E+{73iY!j4Lp{Ksj!-Xa%qQ%3lT-FXpbzGX%G z`GQ``D{4_GHs=IrYG)Hj0e<=H7k{_0J_6f(_9pyms1w@pAcQZ9R|qt7)msoPX5Yw= zTqv*RUarO!8X!;W_S8>m>iD{S%# zh;DgO#acYUVB(G!i-Q3Vm)#I^RVis{3o4gGVmvRWQvU#-8DIrQXssVRmY4Bz z&lViUw)NCY#b;+vkionP;-H#b9Dv;6U$An=4v59}QKJ_f@3?`Nhp0a_aoBc-7S3#sDO>gQ|v`~K$ z%Usrf*d@Nx91uY7(jjZE9aK(Q&+&20KNd&bY*MaV-fyB@znk%cfljnloA{m#R=EiObRn253g0kr)g?`mVV(X1psKsSiQkhcF6e{4f6-$*hh7TpU znif}XSlyT80fiNL=_-_qoWxMqeEP=i9{R+V3YH~U_fgXe*l#R*?%wQ1+!X1+=Yu( z?K!<~Ao4P%doZBD{>ZEFHo$NPBbyP7zYRV40ud<+*? z;0(ToQEpb0#Ng~epfoh4`8ae%-{x6Zg|M?K2%#EF3t!Yhx<&I}#G$yPZkL!Af*qd; z#NK`GU{b%)_6gx#JGr85e7?R!GLCEi02sDPeYgh1!wPhN*inu7h!>>gT{kou1H9As z_b&RyM^x0UVO5XT1>nx!kzH=k2tw4mRekV^iVCerk&ZuO@fv{Ew)kbWMPU-ToD#Lo zY*lJnJ+#3>DfH%X%_F~RErvG7kx@l)zlUalHQH*_X)3s`<@aK^*?UI6k(9E7i=qnjcPq5?Mpfhr9w#6j zd)%Zn%1%Tv1RU7!*Q#x+^c+p_>=~ETur54_?5z~&aS53mWB_nkb7;VGQg#7 zt|v??^kt@iz$(FAUyQKw>#&N^cHN%+m@44ibtnT!VeLWF;_KDTUbt{(RBo1zQ(Zxd zYu@G6MGoZ}&~{datEOn7{{T<12yh4DqYdUN>arIcHCGfyoQC?c0YEMP03Rb+cQs{& zDf{*%jH@h^92wkK3(ISl>|9QoqqvH^eC{L=Wh?ATZ?)_#lli{bhIf_r5(sjy__Cf= zU-qRov)7k77kSjWM~D8gq~C0XcCSl6+^weffy7$#EtKSF! zufTY@Y3ZNEOc82U*)IO9i`$+0M@l#K{KPj!=TXHq#J^ypNHlXh!mO?7mRT#Ls$KpQ zqqvj-^Ll}=7QtXI$2ANn*wcA%c3Bm%>}*jMnlH~Bc0;#)sB{;R;aTQ1R z2V=lxbqd`Tl87S8AzYOC0$PN=BbO!ayp1(Az_SRd1bNMa0nPJYB@}vb>URB!w}zfn06A0s<&hlR3mtmIXJ#o^u?VAHp>_`4me}h~ZS;FWAyit=3=1nCRC~pt8eUu3+`NvGfZFTaCO0!`pPzQ5ckO zsaZ!C%m{`507&86Ga*~QmJ5DOhtse?n(v%JwV^?;s5b5oQ9HhpB{|;j;&*wfw^6UA@GYZu*x^xatGi3UJHnS+`KD z4nF%b-QMIng{)b$jtz(7z;BYxs%qpKVOO8_HCg@k04z7DOX1`aa20Zk`&V5;z@GUj zI92}un4^WHc@dB`?q6OcGLn6Yuve;PZ@H;c~LJ)hg0?V zlxoW=;wc8BM2{3y0cC@>_m81;fr=L9**EsXFb8bs-jyJ zkmO*LhrLIZDR%CvqJvjiOs+w%?Hi{2E_HoPu0tYFqUG+h$kt~p1}O7$@Fi8el(P}O z6C&NT^(ulj_vCV(TjFrDA;HYtSUn`P-*Du$ZozTsfeHn)R88u00DOZs%BQ#p8w*?W ziFB)PY+W3ymsij81S=OdFG8*jojUx$BF+g&D)d1@RBkW6pd$ctj-_em!u5tdSe%ojt|KP45$_c$82Eyc|_cjK^ztb$QNy2F6ys1)$YrvvTEh_${L@(u|E z_4s5O!tMRHFionhjtH(GjNN}3FD+TZLi~q|Ii9$ji7mA#1r=7lu?fv_&l?)(;Y7Ut z0xI$Y(YZXw{UJSfzQsr`ZMg0nHE_JC?kr1w$~zv2Chh+Ks5O2$>t_Q74p>!1!CB+m z3I|H8i9zp)WQL3O*?KibV56>q;{rjfPeqq=l3{{Sak{^FWQmyb07)Sn6a6>=8k9*dus<61_Mq!;Y%s&{P5 z_?1ntn$&oiNY}L}DyypP@q^yY>(7xdmw%=TjxEf1C{9E`$F|Ku2Y2h6ECP0EE{JNfFZb{dMV3ts@QK84L}^o7i(iG8Y;Q^Ugb9T^Y0RnmYjih zel}Mfw@-W^19KQQP~%V73D9kDyUmreh0C<=C|&ir8UxG7rCO&a*cR+BuUI>$n z--=F@{CGrgsC#+)9kM$%!j{>;*h^nbVA~pyEc6uIwG|d{Kme}%IQbfuhrYmlmR3J< z)>8d5`GsuMD&?C6Yyc|EugeQZyO1eSuLWcil?R;L3M>^vNho{uulE^t&+f|LI&6(y z^6z+vriIJqM7;bXx*Ke1pi}z^hpS}ZBbFbSWnaO;Vrp>%<%|aziZaUo0B~D8e>ExS zoDcvDxn|@*YXj>40P_`+mVXk!VDYm`O$aj<2B9~<@pQ7Ya0HG}|*0>0F_->jt* z8n@Y?cJX!Ze67*HdXg_kvg0> z7T9(1{{ZSGq2&Yk*n4+w2}3rmzLRD`udrkrZAGNzEHkV4A7ap=9VfWbFpi<5C^orOEI6X{{0*7C? z#^}?R_=vdQ9mi`ZOAnH%z~|x$9^g&-wq0Ay{GTN`qY6q5g75yScf4`=0<=ym#45Ly zwQcMhdh%EmW;5wF87Wo&XEe5H4)*?AZSRBuaP}uW1JDDRx%V18VG)SQncTw^#@rW9&3t=Y8JZ^Rn>^- zMf%u{Tvq(ie4M`1p@L3=TTN`d(IN@6=&moi+o-` zA0bOcwOndM?;V61TYY;rxw@traY4G|hK9>HaA9MC%Xc&j$}8WKKn3MIzyt-I9c6o; zpYaz^rnmJK8o@w8eB7YY>elntQ~+-hfphFqv%5nW>D_4`uq;(lmkwL8et?{=xO2K; z4&!|{b26^I`xOklxQ#i+cg8@;)vw4&7VXi1V9Mw?zTnsiNN;l7 zDZk4O!&gfJ=I^KYsNfZy9ALUxu0~wIy=o>ct^WWi;i>1Vn`50rq#nG3>_h7&D zoHMsDDU*ja=ddxwch}-lt_}xfOlXyTzQ7hxUURV-*wZTFsS!hq8?I9tSV63S)?M=s zU{F5+J`9Bv2bM}tK;zOZuoT*L3)NlMYGKp)scR2hAu+zPo3i#(1CiVp)8EEDY%tDa zc0SGZ5Zl^Q>jMwV$Ak`lvD=m?zb#1+5AluR#9Ef zP8&G#W+tyVBVwF_{{TJ0xCYdB&vL~|S`{d0miN&McFudAf>$kTrDCIK;RxQ3Rn0X6 zg=+krO4qpqL3|~&Xr_rxDyz@T1W|o9V~%^3HiMWK{d3y^f@k=bJxw>^Eojo-W^GNf zf&;I^Qi|hmE@CBJMvIqU=c&`p7sO7aL-h=3U2*=|%ElF#4sjmcq_w9M{$u?XONvqC z1ob;|qO5-B6bpUS{1G@P^^}g`o;H3rhGoCq97N_GH2psJ)qHCD(8kkDIMal(*Ud6l= zok4Z{#ZB2n4-2JdA#?3TyHTrsbL8aKR{0f0-~0OzM!KXv$0cjOup;<*UZu9!CEI70 zEYpq)g5xA}^~h=nn!Rjt@p^D%9~ z@>8r?xZUZsKPS1j@{|*YG)IvE#q~A5XZV&Zy2_#j=M-#1DWtseZBB`%A!YpBP-*kw z9>IM}Nux%vtr?dVCxPJZS%~Ks?4_>%0K&t8e^`ox`kYhVhZQKd*+s3Uyt{$|%FF!1 z=(m=jYP6J1QjH=StEtM;C-)0ZA)GbsqyMt93{^GU!07aJ9uocq7{LSKQShA!Wj?QEj z*YOHi)+^-9Se^Wqunj%K@9yOoz&MMa6Y+0oNqTRXnU4$2H5ahnP6TCHz=0{J*j*z z^C>GCUE*4QvXv-RF(De`q-Sa6MW5!T?=j@^Hjw0Q7?o;;eRaW=@BFOPaH?UN` zDp&_*W~NF8XZT_$QdNP~-lJ4mTLivAyF@*^;$_9G_Fyak-yFw@bqmXO;G23>Y zaRz}+SpXEOyMB-ts@x-4V_1jsbL_QP!ZFf-shw&`QOT?p37_Apv zHpFi1J@x`N>SQogM~c|$a~!ovQjSazO=ZB2y*(hUekH+e?Mp@5@JedKZ^)uKEanuUP=7lTz#91*DSc<^0`#>092URWtbfLi=Zb~uCr(D(AkS5iLrJ6%0-+!_yuIDkl z6<*9fZO7k8fxqxVz$F*$z`(vDtIGKaM&@iSX+4F9Tkqincj14SaqsKoqV3euH46SK zxxm4jK#QVn$W}03WD_Xi=Kk-SC5zg{uAe6tpf-G&O?*Q0>zJn%^X#zPHv57ykbMhzg@c ze)s&6>r`D|6&=oPn<(GIMrMG%r z#*5hFuheYOSN*C2>nS35Y;#{F<9q(cv898DxWC_~BbVaiT@>@e|8(o=oQ#UtczyP|k%jc-iSNLur*!pq!obet*QKb!X zJ(^kf3EY+6kIXbG$ZkVZ56Y@l1Ci0sv9cl{a{`nx%10>$pv0?d$B-q_uY41LUyq&C z=!T2^qz)N>Xq*MB7w?ia>Jzzf~P2}{fr>4mdg!^IO<6g_p*WVeRV`M+iBesw4e zSm)WLfH|srf*fCM>L_vI{=vAHooodPt|~qH&$k<7F79&>wqJhKp-ORea)Y62>-R50 zhu!c+Ny`|jJvQx_~cKKDB-l9KkT!^hHoGH4K!{1OD5~cQ){cVm$6o~+-&gOU9ZHf zM+WrQ?XZAy&=|D7U!{H}T9hldpTwbBbsDH|q~>rtt7*QzkvOWi?+{ID2}mtxT*p|7 zJJnp_5&ir+oBM4OO4>MjfF)Ut6zr!c*;e)uw-8t55B-;7+C4m%33_q%CNAEFm>yP) z3gwDQbZGbXHKE5-OKrDqC63Z6Jv_Jp(Ty7C@QFBj5Jt+v$DM*WZC!MHiB_jsxX#kR zquHBP_5SRor$<5-&>l|lHKj`aSwW?+d_cPA0|kO8SKfMp3Y@w(@$ z<~MC3@beK?)5+D%;5+S0E}RnUD#D?KO##l?W}^DjhJS3nzfmgkSg+3$09tDsvpkPN z=z4%*i;4aqkh*v>%0+*)TLzwb+D?4k6_E=^hWOYwB@{QG+$9aH0Q!`Ga;P~aa53*K zkSJYiZ?e!19dN`$bgF3cxRR*;=CCRK5GE?x5D=1rYLlBE~HcS+GK>4gRd+AT?DQX~Z2n+T(Zw!A^6x>%;{A=00oU3*k89R;n*sdt%C%cD^_vODD|TupgVZ$Ed%`o7 zs!>l+fU50R8|#Vto>|+F5y1T$6=sk71;DI3^TH_n8VKq?N%!M77sHB0xQ)EN2;v;; zbM3;K%6snkl|sJ|c!+aC(&dXDMON9|T6cT#Vwmo$IDn(_ud9jnDB)!p)VNruIi#;3 zjr8jKk42T#yDc5((h6D&eh?>uC{0;O6doLJ@3su-`dv{kO>9;0*EX-~Ft%gaq%spt z?>O+nEf>5&L1&W40r}{Tg;~s0HUM6Ij+aDhhzl*#!r8)CCnw&SZH1J#X!!+-Zw9^+ zrkZUYnf~G+_ZV6V7xE7d?)fTg z77_-Tr3>=lrLB>ekxI+)!CLoe|kWu3JOt0VHy*BI&g@9wd8ja{S6mnq4+zjTG{6IEYT&H(14PWC| z1iN@+q7|NK!9~BN&A{2)+~_+O;SNMxX_lI)c*_I+@Ceozh06kFHG4immctmFk(uvg005sNOkLZDe(q_RE!mjN4D+!LifcLmxSIi9YU z$w+%^o=5}J6WAX))-EMCiS|=i_kUt({oYCoy62t0v#RuKES-i2?4rlnv57|2Q+#+t zhbK9T=;Lqqj|rTw*fnTYaSb)0ikh{gLAKZSKtk_2cx9;i>&RN&D+z&&qODuV)Kwr_ zE3IPM&|CXqhU}@0U2ydiP3i-`!5&3l{y`jg`wbu!ZsM~&a}=X!t(Rrpra+{3J3F`x za1j&tk{u5DB`a!wwk5i1SCaU;%4Mr`{{U)^hEvlO$X4Y*6idF>h%r@QkuWK00V(j@ z@mz7eLx2>puYSN$IU6ZOZQuxoWAP<=R%*o8BLcfw5oUgUhu_sqVO-Dq0CN!pM>^<< zYMDX5i#nE5mnvGeua^v`GitUKLDk2VD(IxZxcsHr>$%(!p?=HP6^sr>`pPSppqFrc zd#Eg=0LfFc{6U5I{{S$i&%BK#JPZ|lU32Ue?{`wpzG*A+-^LR0T|PxM1LPMoO;b@e zj#RDK)&BrDEd}wCw4kc!m17;CV1ae0(euJ`psH*brvkIBhI|0cKr+AI9o$07>i+=b z8+{&piuVuVeJ%ML>A2_@WVAnK0Q2kxZHJ>_V{>l=zp+L99L{GRz$-1_hKou(d!G9f zC=_`7kwt%~u8Kc39oLxPQ^rlU=^eFI_6FL`tA4=ycOM0DFL^>Jjon?XTtrn- zpualy9T$WxqD85A&4N`|?UwEQFy~O^mb^tPe}+0hdvfSJuqoc`D(e3Lac=6s%a+q^ z?o}EbL`R-NbQjZ81SVdmQ28r`Kq%EMkh){jzB{Rd_w1llqM1Y+7S5oE?v7@Lur}Rb z@Epqm-cF#1z9q6~{vxiIpON?_azJm2n1zH;i0xkY9Vp*ZS}Ne30tQPOo4iYD%o46u zY%v_HuhSJv=a6>k1eTh-eYmOO!0i{%!Qd4HSuFM?VNLlhiY28(CCaBzC(qQ z?f?ZPk21ii!~`{vv#ww#72LJbWlU1Gc=V{JA7C8$vAtWpN&&t)o!+wub2x%)cT(hG zKG?WQE0qQG*kmlDPO@@Uu%T7kQh=q>SF3*|;j+AU1vG$kpXLp#oBg9qpu_Vjrf|QB z%2hA(2((vo@UNLv1r+1)DYn>{M73HWVdrnGEb+T=s|%_8oMc?Q`g;YmuC6Pni(l|m zwJxK%_GEB+5T?tvDk_UdNss0I%`Z7AIFy65SL}vfb&o7TYH%@WSN`UvxVOl7J&gw< zL5?Y?0#Mujr68lID$ClPKowh;<1lkBhsBL6W&Z%FX$dVuN}JqsbETC_%M7_qU9_lt zh=p+t+x#9tr!8<-=uR*NX!|%0SA&vVE}o8}2kTkg&MF#3%jj2`a>dQWd*O_tY3LR; z5PJMUuFBeaiHlrM+TN?Uo=*Y0k$ zXC5-IM!q;4PI1q2 z32yGg2p}y1kFx!nF2IRgA%fFszSmK$SB{vt=xF`RNkirSdzJ?JY(@E+5C9Ex&&cSB zxE;he02eAW$47{EB?^8CNPh??XkRqTG}qoGg57_3D>^XVVo>leSNlMqT;%@%RRyoH zXnVMsM}7YQk~WDqkHtr#nqTf4{y>4P>+_w(*!2Uui*w+;|J47yd(Lam9Ns+m8pNpc_ydHq$VpRn6QMQ5ENjYR-zxjhLEO>(+KzKh_`?vebF}#Ojva{2{49a=2<1$Mr{Y zm2rM<{hf9a0BBy*$-b?1|1As%Ir_YLprWNJEB}J-K}~X`Veqw7g1m{Ucis zvBhV&hSAbcHv3N}1xAX#*w8k%>#K&? z<<~?3u&2IL+`FvdIM|OFZM$OMcf<{ucNXH((DukqT;F9viu}4j#1*{v3PO)Bv8J2=2Qfj0r!zC`TN%_f5FUJs zb!f)6;-UhaFEs%G5lcI$nl1DCJgD&tYW+YcU7XcHqf{c-l=JgHBct_*UkdFMYsW9h z7RVNgejb@XPMf&waxuF|APZ{PxKeYb1b^H#Qo_0Z^45)%RmMVPntS<$4$*mVY5R6wbA z3+UnSAHqL{&A=Mgow2i#%+&;qp;Z(@t?pb=4Re2oBbY@~4I>yV(L73Z<3;M5(jKF6DMaULI;RWGOWQ6U$tafR^& zy_;J*@%%%A<%sk*m~FtiTJ-8fQ9yTM0O)1tODZ*7xX7Y4dG5iUD`?f07SLF~pCW1n z@BYoRn;lh7K@#p&7?(t)FmpLHMl{NK5o!h3cKz98cUM$V8i@W&$U#qqAzMrPpP5)1 zD}JKH8u}IfpbD+7P^dbWmjUwA&9EEBZQ+ro@5f}I3Hrz9V64u zeL}(SuVoB-z{)fRj%G@&SlQOM{wgSSK=;Y?PsYHGPx%Vqy8VO}*RCHXY&W5^O8()p zWEppmEmE35?H@_`i-Mri1aEjlO7E#*r2Zmu8iU#=0Pf`!iYJ)trJ-#Z>k0&Uw#tGH z;=kNQ598!r0s(32at~?}sXC}}vrhbAw$vV(QP2j}xl*~Y$|RdWf|@lKAgEjf zJ6XVQ>+H}_=h!<#h*2sfFlJ&Ly78+)99Wi3|9 z!AnOK6I$|IplWi6mMA9g5TJo+0QPTii&ap@bG}COzHfg>U=cG--sik6Smr@?Xfe|c zmDV_Bjpc`lwBTL9)TSna;1QaoT3c~t@U4VMI%y28+ojR?m<(FhaCbgr!e-Qu}mjA zSfORcM5V#ttKtR2jvmKe3a*LH^4AY=(tuNlR9#X291wx&T@bAS-M3rf7040Sl7fbz zUzi$n@cR|kvHj|EeFe%J*~cys(>2RvR%j*-H^TJM_BRK$gB&^h4L^C z1C?Sz zg@2gy3Oq_-aixO>3P(xHF?VV!6mraS>mZCd+l~*NJV%zGtMkzO}g8H{dw zwUGm3_Al8)w2QRsy#8+XSLUe$j^fMjB99<9qprRWVZAwhEB5`iBiQhpr;VtlO zoTr>h_3x?HLY1&>-pT`5lxtf9T+2b#PD6m3D{JKR8Nl1I%XW7JD*T@9G1}}(YwTp~u@{tthy>sH3}-cj+ZOAz?gNI~KP5B*qsKom->=0N0CQJ)9pPs;jIX z-*E`ltge^4V7vDtV2#yMrEP^D4cTJfr9p5waT|sB{{XWpsvo7)M5=q1qno1skmsv} z1q1Oi_Wg|<(7)zz)Wza@3pP3x*u=IMI*z*`#JIGIaOM7Dr(L~ZPHeiqR$r@nDy(fzAD`l{j1MzayvfE`^li@qf?_H%-JT zr=EVmETWz{q84uJlV=#+MqW3WKrIK)l82hjQz6)Zc$s_Jy}OnV0FsItfw!%G{{Rq` zjni`#=llG@_D_nrjvY;1y{tU_|*)$q8Md*g;*diTo;@3fPqL@4ue?G$vT2`g{DO;1Z zyi>V2*`_DRp+Ie_yPJk7&Eg}C@V!7vGK-Yn(4~|eDWiOrwM0XxHxXV8!B(S^n%T9X z>okD3m%kWb+#V2p3fTVunU`bEhm)9&&Zro+uBLexLVh3iS)N_WUcU1z0a+_|YjFP>`osE}F8zxymopaGxFkf60qyWNV1 zOE!*~SSxxavf=u3FM7hQPX7Sh4BNHk?9iRTPHZ~|S}O`VxT#Ny4|u33P_&`&mb_(q z`>AnVumFXs0Ht491%9uZ*+E~LJJ>cQ6n^5+Q2wJKYP3L>04}(`YA$VueI&NP<tP)e>+~l z9EP;w{DsvOu4Nd(Yn_X9t*&^3lW5*w5h>U&OD6-fc09{8Rrq@WSOMdPVyvaNsZdS6 zSX$N&0Xogwd{xxIEO;7?YjMw+#ZGRYh13F+)9)m_27fOu5L)Q2dx8ee?zX=y7AR?H za_>7qS;a-RV6H{mm~1b&XxZI8&ImUA5ryi}wx81*Y8uy<_Hp99siY2ic$Hi?6uVIv z4nLTNw1;eh1Y>(gA4ur#?w?NQFlv_@qY!95P9$+{nh$Xh3n|a~BU@7nGH}4NJ91#Y zYLLXsl|y}{H`{3bGFVpASpz#e=aJ%z&gPjK=J;OEVZxuFE#l_MuV1>pXIoO zyKYGNeLr4AI1X(%L(3O=*RsWFJ27nrzd7A}X6gY~%vI4oSHlL2)q}yPfGMv-{@B2{ z3VWt=!-0FmtwiKL09ByUBRz50H^lP0m(^i`n~uu4$#5?^7wr9g-lhuKist( z8@~xt$!l%qMYT)3)>N%vwwqikpZsw_B(A*$Doy9vCW)*DhYa1$(m<~%?GB{_<>w~sI!G%!}L^AMxKVP*!B!0tHcs-*=*YU_T=Rv1`v zfs8 z>H-$kbb^Nz*~C>Yi*?*ci@iDRfUQx{s+0!p{{UuRf`u*0i)AH-dm8+YJ3Fp7&5r9} zYIpJiST@)ynU*>9zT)yLE0eevegjv|OEh80%UpR~P7@cHUbVCPW21|%)~Z`T;*p(O zE0R4Mukyu1T1~h#pk`gcS{4O^)UZKT`Q&UD+iRF1166+}()k*$uv-9f$1Z>PHI9$M zyjY28$4C6iD&yhTunk#-SKME(B-9AC_bn{UarmP#32~B?6_9MH|zQmORlqLvAANxZRJ>ePs+aA|Ee1Sd zzr3VCO{ds2fz(yh>WOwLp-L})Fs90~{{V1bH<3>22MG=5soh(6@e&Vq3UnB3Dq7{L z$_ZC4QE7hn>_w^FBt<~uFep!d)S`}@K(ehj6`(!aAb}kD03O@VAgVxt3VvWubZA5w z0HEEk)GSHI_xwu&w$19vXL(pf3pr#_r-D(u4^V`o8sBjaZtc1{g4%hj@>_Ii$tVG` z`nu_sR6oQkwRG_f0ie6>gK2^tlN_u_B0Qa3M~ycD((~)YuoP=*qJ>wPIRnlmDXM+( z`5GlB69MNRnPWpgyhprxtB80@vJOOQ1`G8~g+S1BbX1x2$Y#;)J2e%qb;R zOl|gR@164l6-e0LOT)><;9$>SqLX_1L1^3F*jAbn*=q}aRLW3f(y3Kdq$xo9KM0-o z&M^RemT30nmrWG2JGiQ$`B?e|qU9E~ULk5PaK}o(gUvFUUjW9y^^OcbFmpp0Xx^T_ zM(F)E$5F0W7xm;e7pb`}h#&Qs{F28P8DMKk5TnHv5W9awvWsz~R1&(yQh0#WKfIC@n0Z5f?Nj3X||%> z%)DO31DZ_YQowT6#JOe44tqDa0cut8D5Ac}YN)cRt9?f|);#4FKyQ~^+zU)Ex!uOy z!2pK+JCwDYk>Jme(IIJepwunhtfX8w*=5FRrTwhe-Z~|{Bo?o@-8q#DXsJgXv1c$> zM=^rF$ThPZmG4Z@#ES|FN6-D1d2v@C@sz7|kqc~tq#v-R*A7*g)V(Vyn*pFceUx76 zSP5}ep9?KbdoAtNL|FdONGYx^I9Gy7nW{}$1{!}HP2|(qSAh8gj2pM?0>0v6JgO9$TpDwbe-jmCD?&B;BfyL>j2SFxnMt*-da3#>eZACoT)`*xUWZY;wnMiD)}Q{#Ovnzj%Jc zB_&ps%oU?pm#^&wEI0E5y>s}MI4ySu?iRB7vc{T%?WK!6AYk|Gpsw2dOD(QkENmY+ z_5$j%^`F4VvxPs+#d@peaTcnpm1h3{5BiGO7p$p;d{m$3g@nBUj+_la=h~Hee!ZjZ2s)BP<$C{!KX6L8SJs|J3=Qwp$fZk zE#H*lyxmlwq6=lWv2xl|n&p*c5u-;E@(GK$S5l>pDk_g(!vSc~jWdD`n-f)`%itjE za{Ae&qV{ST&wlJdDPO{_P&s4w#$CT)<`Lan2;-JR>MkgQhrRFn&Km38a|_`@x#}K9 zv6p9o%YDuQ5o}Y0UIOM{R!ZzG7g!oogNQbO0hR|8xUz#0TvWB9u`KrGtTkH1{^7qN z5CpDEinEbObFZPscbZfk_ty~2!T=g*k z@Rl(ZLfz)#S(Q1ssu((RpCG&^Q7le4JA-PlcRpr8e3IN02M9IWJapYjNyR%R2{X$#155;ww-NC5HO3H zt{*&{Lc+}Piut!^NbMH9pJzl|M;IDZe$7xgpSUVfJuITgQrpU?iz&CUT|Ap>mH3O( zv)NdtKGiXufaUA;D$bS-CnQaAPZwq{jRG(as{T+7FaAnu0r&k*m8aL%32Y0m+4+Y( zQ!{DZ&Zo1_$Ryur{{X*;(AK{)p@6VGsb;9JQMT_>G(_Q~DUHK{nYR65sO{9QSBR-5>e})edR9MKL$;-_kmm5X@O@zp8LMAzBAvfw zTfN{xIphAo?S|*bq)N8vVoEQmX{PU{x|msi?iq!yJ-Fp`D_`{}$F;$+1?dcI$~o>( zTI)%L(hXjsHkIOIHX}}4I7^0=wNRdWP%H%{r4EPOs4Jl;ySZTj#zANY4NO5n9ww1$ z_vn!;OEFn$;;F2H*A~}(%C4mwy;z!NRibkWp3!CSkp1g!oO><@g=$*6&H*iA*o%zq zmbTjW0ciT3SCD~+ej^g^i>SbI_v`qZs)jZctEk{Siu9MDHT|j>V)`P`>+Gh6eCcHa zM${_Zj23b|42{l+z~0$6d_@;cdAIfsgyO23&tPL-r)x@mlaR-QTc^!W}4k55-FQtP&}j^`yqRh%1DuAMS()`4+Slx2X} z6AMbg6cWGz?*5S+Pg*yB8D$6lb1F@A?O4jjf&TzumW1>14$$P65ZG5cuaV|fvW_3j zMuOZaIU=;+IthFYx6oe_$VJa4&ZAmkV@bAM(oY7*T8!GQb>aDrKt!+c6hbs`IQ+Nd zqJ`d@lLNgEBe4{JusCBxRiM9B>osP9x`lWew-k}|2X!Ke;pV%KTp7pA*!C5grNC?e?0wwuQP0H~I_3^4Z&0kb91 z_!Kd_Ix+ml%7Wd!XZwxKs<`uF=Uq5;>@jcjr{p`U(OY>5HE%9){6@4A{gmkP1xL!$ zbMSi^*PloIkqQspcKu*fwsR@8Ln-lu*-EAT#o?ti+nbsM4dd8N2P*zbijM&CeBz~& zHQURTO$95G%Bq!I%jBC~4*t$lLfiR>BcN>XB`X!ZGpXIDZLR7GSZ@wDsA}v?4B|8k znCt8of%4qqHvsjQ12h)2e0#V7s|72`dI4JW=35{#235kYHmgB}m@TN5 z4jiKM^HCUMV!MAc1IF!nSh)-NDWi`4isQPoDUJrqyK}fOfp+5G;w(i4-s$*-B@b&K zV(6;^#pCld_T}~m5r9zTs5||pds@?}Lv-!si;tdp1UMBE2aCbP0 zFE4fG!6t;je*KLUF5J^Y0aJl@<1h*?v!?e2>|B)*RN0(t9oLOVX!#o?!MpT)h-%*; ze24?O?Yo9JGKpbV@$6J7RJmud6uZq}g^1;PUyybyYwFB+hk*Ne`k$mUaT;BcgVf8V zQsc13E$WXDDn^;m{8hku!82)){cIi_iCI|p7q z5V`~cXbR=rEG>Ri!hG$Pu5;PQXJ!UYQ5Dm#?n(xY-=#`8-?ec2K})pU6-r>}juI8U ze#>dx@b+?X31!-dyJ1_4E^PH(Uoqs!=s)_UC<ENpBc4z*rn4+Lj_w<&ZYMJg{9iE#?%Wgz85IAx|Y}5{{ZF* z+xV7>){S6Ubko$j40Yys99S)gUbT)D_zf{{S-Y z1^UH8xij@CT+`Iuu=)6a*WNsbAwM@QMQua)o=zS|LL?mKJAKhO+++}FMwPa#lq?z@PF*neqHRehIM=CB(U*DRn{A>!)zzxOtdVZ{p`3(^TI=Ra5# zw|PXx2L{xL4^9!+JAA+}FW4iq^#DM>&3OlP%Ju3XQ>AkR95+jO{$k*t;Vtm~Sla96 z#ZWbz5%%;fshd1H#?q%n75>!$Yjm1GyW8?y;eruv_^I)f(Axb*uCv^L9J}NF$|`^; z!~M&HIw~G-^ZAVc8{T}D-Q{;44(KHle3j2cRC2W8@*IKA{{X3q#`@+ag+4PjI^7rk zNv;&+l=v?qkh~m5gDahJuu*tL{Y3k7`Qliy(~IgAxL%!9p*si}Jbrj#Dvm>QYx+LI zjfdt4y&KGGuPBEiw^enYnt)qr=b!2ohkwNpl}^m|AYn{E@N=gnej;`+9KL^5EVdts zGu2-aS{UgrUSb4!>Y~%+jUtX#vj!SA)s#NL{a#cz4F3QU#+}S4oRl+$A4WC}aY6q8 zWvyqJh}|vQ3dXLRYGwwC!XxW{w4m4+_qcdpJ8({{R`nMrhbFB>I{0w_5}W4vx`zrm zVMW5ee~8-(=DmwYT3^7ig2$YxgO^d2ZI*BPoG9I+Z*>!CrMvWlP;jUI3>X79CY8~g zvcrRIzez!ztgkqzsA1TCC8>Xa8RVe?n=%Set}n>DGX8DA^4HbDKvicPbM_=d=Xp5_ zzt$g^HLeIyJgS<>0I(+;l%ed^~}b zWnbZ9wEKsgKq=LRApvbVoUug%VN!!?!rrb~Lck{>vY7>I8$Ill8Ua*~uoa32Zx#l5 zQ&rI$U8?Npfv(%Dm=?QTWDBGU#|dGzSlKnDUOf9U2Yo#CsM?0`)pfnW+m?1lYAC=u zHr4_KXhPL@0cnqdRp1Fj_+(XQ{ANOs3DbLuTdtMm$7edKx%_z^`nuM#Bhpu|W`;I3 z#}G6{u>dUh&G{NFJUxx&G?iiB#xGC5%EYSZ6QAN1c(-|YmvZe;{$c<}`LbRR4y`i3 z5jL;5i*0Q`89YI?t*hn-D@bd`Jgh2gs z7V!|)8~aiQy7Da+EptuP%V@-kX{Yf}PW55-03DRT7HdcT!C6&>zCnp?3=R|4Ep4!- z3nVU>n3LoP)D}`Nw*keE#YF@K8sq%HxDF53o0K$J;r<{XI2))N29@pK$wi-bThAc> z057n`ql^b(E~oR!7Oi3?OKUf^g`#=;fTF0Q3&{!1kzcjsDpy%)jaYlH@$yl%%C}uk z3Juo_k1l}#t}YsG+g)5G({;ozO1d3*NUH^K4}D<88odlf(?EQ@@q(4_dYWm^4-xTv z@-%w6pKh?YCX2JZfhDE7E0FdHIt5=l^qd8#HhXX_P36>3(wcU&_ZR{#xM(%iUnzwS z56>}8E1T!HnSg98Ys-|f-4mnwKm*_7Dr-vn@L(ZrSR@uo(S`Bxf908%!(Zm@Jq9U)Tc3D)bLf3XS|V{28nDUd)lZ%)V{0K~pI zxTptx9!f1qPS>6O;N64l6eUXY%HIgk#_v_%)^#0=x|CP)36IQ=01)c!{XxaEp!qjo z*2D)u)qUlMJ(Ro0gBzexl?F|*5^aZcjs~FlAVVDUsmQHaod`A*@xHTEa4}Y{F3XJgxk*P4KKaDG8yp^FY`qtSUBoS{J$dpe zR?win*;LqmCrt&c)8sUU!Arv^L-8yws$D!^<_@nv*pF~W1q~y#WyG;ZE{9oE zz?NGs(HqbfOUfp48To=>;HwO{6cdGm39d@r{v{0#vG3HCbOh;S6JtVjs#s3bH25sx zCU0(%oG*gJs#in47Ud{Z?jFku6{h#7ZULMdgo4(bFZC}&OQGhajz*~~Y8kSs?z<(` zb!D&E1Y5pW->{(MJpRloLLptsuOV;;Dy&!I*g?9?b^^E|tp5NzFZfp6q1L|Am~?~w ziO3Sb)?5lkE}3mDC{molgrzTGOB}zH;u;+x^9mhtJasuH}12ImnyZ$E2wb%Sg`7S#E3M;yZ3<9d?lsp^Pv_)R5Dy*;6vJOw&CYm_wh&kSd zct-~UsSX#Y4Yqe)#V7!Mjsi2TrlkSPlT&A_!xd3ptP^(Pg>euYS(K$przl$vZV6y* zQOsM5Xkbn%c?dP=Q#@+?y9(&km~JVB(sQwb<{6nTg3g<#NoHbI6v7QDG@+l(UE$s z8el)d2o&c$$g5Lw*2N2p*U7_`(1UF^BPhQ~R)SZs($_f(QYR?!T?aX51U^lHFMMvc6_#J9VNU?-~P{&NCzErP(CnW%{)Stwfui*p9TJgb`wwj zW?_19>`bznzBsrvuMOFSoOBWBA5S4<=tU{hp7Kz%c3-h+9AMkZ@)p0oVqjfNV_qPz zQ)PY#{{V|ft5}!AE0-C0wKE8i&~`P0S~2f7L5Tuvx6!P_z<<0@0B`YrLelxZ<$)i! zkmk@wkhiSxjo|Q32Ut-Cm!Bo6yr&CooDQ3rh6=U(ry*Snl|?z4P1PhstZB|*h7yt- zx9o0!TV03{HlT`ezo~*k!;&~Ca{mBwjW3lb6!*{O14q0=c-R%6V@Y;hbHpjDWh}j=n;y zp#01Yh;V~{%-zX}Z~20&Sa*Fg!YMk#*h%T%6mQtJj^g=2HBEtEX ze7NRSm2A3(IQ+q5&yW>;pJ|nG`KUBrEGcRkX-2SS5y*baaNgbp#; z@m=vAs;i7)4u9(_fp*wRQ-6=miY zhS_)3O)dl7`@}^BD(mwtr}lI+EY}3BGrqg2RTXiMuJv9-Dz%|!5y@+Z;y1cVx|iOs ziK5w^#q8TKs9N*+e1KWrkO~>N<&>O1{EiuZq{}_JmR+R=R2(T?Bt`G)qafN*xgG&e z6OdOQ-Y)c5RcWI3`l$FflgQ-n@ieGZAPr1?IgK`Gv+nn?D=uwu-y3dzu7s zPC0`e+Hwzi#u}Hy5B-&;ReyPu)gSLsGo}9kC_GxWiB)G;NgG~@ z*W?;4x*Pm=vcL{GHY2hxbo4;1LGrEz@mOWGS~pErO)%?WQuF&jsYjN$m}vC6>@eu@ zk8q`19xlu!jOpM(cvr>qFH6f0k#ewY`k!H1nU6C4D_KXsnSZ=ngOUoz>^rPHLX|8X zNrD2j_Q<}V`wnto2bT;TCl{yMi)UHIy4=A-|b)vTKR>*_wh zXcRSMNH)veIiRpn+9X`K(-@I!2dZtmfvcmF%(TA0eg{rTl>WZlN%xST(Q60a}LhC>n!R zD+%X)#>JYctf#I@z~aNKJ6pd!ffaNwGMfW;oe^-gUBB>)(=m2fJi4dk29D(&)y4T) zP5JgXrLqE;A)MYyHZ&L=Mh6#v-cw-iapXIz1w8Q|iu))b0IW>r7r6%q*=vxBT;v<0 z4vb4ujivlUYBbqNO5-yjNBNW|MBcS~RMNZ5MvPFu*%X^wAsay*>*3FL7*`XJvGyTO z)gP~57iPJ8VXMcgW6>IUmRKNJad->o%z-MuPo2V8@N>ji%OMX1G_{CSS~-7)9keYj z?z-x8JHona+k#Zp*PHCNt=fW=^ORdPUVjp`#lA^l4<}G`1&&^jYBW4iujXd~TE4eB zdcXc$v|OD&Lb@8dmQ`O@?#11#7aL7c=Xcy7EP51nekI>ZO!g6ZBTDu8uA(C}tq&q8 zIS18N$A|D@@$LTrthgzl(fRTnmbla2z(94#^9#0xcn*jyKWW(kWjx(}B1k>OfVMm4 zMTa!!7XBh3O){BtCWe&W{{V8wORhL5f*ZfzUzoT7UMp%WDxsBl`S#kwxLP+mg-Ti37v>3sPO9lS4JsiN0NrPm?+e&X6`UBwhvCo!rz zKU?pNEP&@8dP5x!+|no&LBhB2LqV-yCyb#-GUdzmG!$O$>c9!Y?xh-npTz05`v}r4 zmqJk8xDEW->`EFebxM9<;Iit6`^28x^1o19HouL58-K6!@&E#f%60gbKO=Vy3f^{c zsc>)s%a4B|scMbi$P6NlsJZzm>ma*ai{p~2t@9B>W|lb!Rzm*($OLP*xWracjmFQA zqpRlPh*%$T8%ooHD4-W({E_tL^5Ttu25|s_^Xz~wRo?#q$SMHwPv2$e8+$@tt(Y1b zHMjtadFl}~ScgBlj^*VwBm@5qB9t;wet z`J47p1DnoO2h{W`h=@ApT0+;mUPMxj{?53bziY43aiL$Z5XQMiEda~5-owEMTJ|j; z$(k%PZ|p2>5l_wPQjNbTS#`kclW5&m+(3F247RG>z`K+!kDnz=3s~|3jVe`Z);)+= zsO6-2MN6ovfv$(2?JlWb{X_z&OJA$^*;o5zH_LFJds`M!9UV({{c`8zd2CpS< z*bSor#mp@nsp#sU0J6~Tk^nUv-kka2I0&iQQm2DdeD+@2$%)L8{=;o$Rr$6~B%ej`N#-IaBrX@1H=tHxh5AiCzS z8|n!DXDNS3*mT=!H$*=lB4sWA0G&mA4_6as(4-YdtbXM%R}4z<(%>)=D>~!bn4mSJ zl<;*)0c?6cKqCti$PUl9{{Uu>R9!o80d9@!`@l|q{w^Z=q2CZ7PwmkHZ2tfT`88N; zjjfzVZ*e{HUPV+~0V#xB%gTO5(N2+CTn->8D7MbFHByo9egkM<=> zg?CcP$!9SQ`;DwKRw`3d!sCx_VZ-^Az76HvqMYup{Y@|2H>rSCHvNVUx|(gu{{Ryb z^y*kveMTbH8wGw`$4qD`fIEL(&xMb#RRO4XKYc)<{2&p~zlb z;5Ph$b{{5$y;KUS$#yDIy9{Ue<(9JPE&|&qZX(vr1T>`4i2>rJaW~0Gy%o$55AxS? z!}q_Ew?v2|%P*rmftGQ3`sz~H;D5iccy158GL@~O`dX^bp%QvXrhaTwL}IT zz*$sXOyN(@o<%n9E%+nJlaN*1djZOEdQWj;m0eXHya1iG}u zMUQWh2iI{3xZWVqR?Z*|me0XQ_JfvOu!>uG_8wfM==&2r-=lIl>@;=1jRJLHWHIqGJgzWFUt%53{Bdh59I>-8Q)9Q7#L7|fp*#Gs#U}nu%1i3p`GuqTYlQJeNzp zwH2WcoNT&VR6dTbj+fb(^knQ|SF6a*a zFn60S92=%y70TGMm+Ry%S1;Z{k5Z?iwgQjlQ*Xu#VgrW#nyvoTDJyP>u8!_-q_uBs zLXOF6{EU98pXo|(r)8~5fo~@-t(~9X;Tml;==)Fwx`GR#*52&iFY?ErbF0{9yI0RY zs1?nj{ybp3lvw6n`7igI{@{^N`JBZLW6xfvqErgrw```%Z*HH%I0;S#Y$1``H9OYc>5aq0OCL$zb5`+ zX-ZZ>c=Eqrh^$7G;|Q2tG}~THH}iz%CQ+#0u_tv$+xsj*`(HC-rC;JV(p5G6;40Wv zFN>C}VW~#AZ<>}3*_M5l>a&^L!OQIoMRh+?G z;n5bcS@4(U=i;EtqrN?1RBMYXNutPwOZmJ+M_G~Vtt`)q3N9hM*Hr);j{74?XpoOS1zb;^3AMKLDf$;Dnati%0fV%fLs3PggjOGimT(NE~oP}BE z{feVT)7(+mIKQ&XO3qKPGGQ0-_w0LCsq7WSog9rqk!cjh>8$+gclyN92OftP9+Ao8B zBq1Qy1?J^xh+J5%-TI@+VXER60C13Dld&u2G#oM z6pa=+%cv~FvmAj=-oKcIJ?3l$YH?)CXd66~=X-3*dVH55b`O8{a1~rEJ?MpurQdG8 zz;dSZiD3AJ8c9|O5wjXX&RNYNfZJnyRJ02YkK!S(<&hK{4jo_F$E_5{k_z{@l($RX znRo`h#kI6+Ylr}DtA^USa2^TlpsiyGIyBq%QD{r8m~vQtA$;9ATxW8)coA=!ltutd z3QsKdWD76w+#KCIEF8S{|=PWB7pfb-gU1+)fm*Du`JLYi0E=#;U+oGTK|9(N{PRqw!tMH120{0A9k# z(DlT9i)NdLQCLJjxs;L@{2>pa9sM zSCYUjG+*uyz?=bUqWDcUY=mhVY3^-H*>5Wq17TKmZ?TmAZU7~4=bLgXLyzITg$@zK z1$hFY2EA}F8q~fm0`epciEE1D{>JL6nU$m$iz;0>-wY~7@!|4W(lRg~kd@Uj>wxrzv5fFMeaiPg8uLq8Vm&vdJ#n{mt(JxRyxbY%`bVrcqHzZNQBExrKmRG7h^OSFx!rky0BE!#$NO(5U_OhE~r;xb!1R z6xTP{^#;lUWuUH=R(_*(Uz~5oVCmMvZc?_K@wG2EronzPdZgZWgVplCl+1I~Q9gJ=a}zj}>ralrUM zi)p7`W&)H-y5u{EK&&nL{F!vttAETE^93*{2Qkjd8tn|B0Iv^WdU$`afn824qQU@x zmsF~Z(xxq2-Sgy45On7t!%6@-@O_*kc2Irwfap`jaR9ehgPJ;);MvwimPf{16Bek7 zoZxzWj_zAkaS#Ym@3FdTqVE3y$L3m=Dhv^#@*%ZtIk>5xTKSytSzau<((k_A6gp2_G;Xke_ZBV<-;(OqQe zNIkyAo;W-(rNpM|{xHxfV$aDa`-hJv@GC)i$+fF|{{U+a3y&glOg)whNqD`=)}@L; zP*BvRYQFLNP}S@Z*jkTEUoAQQWjw;6>nAb*0OzRlxn7y3ClKoqS+I z7V%s_J47@uVXE$`u_k7OXS-k zs%*+AvZUCaQD$ zbpcgTKfx(wMXqKBn{l@~F$V7YfYmFHl?~OKf8I3PY@j)~tJBdrCSGm6XHJs(hJ~y^ z(}o{m2yj5tb#|2pWz|i^rn&n#LD14XAH>@pnpg_BEybJaFUL1uA^~?!Y{qKNzD--f zo!!A{q-eGv)2EE~A5a?gkTfpum^*e?@J$s@((-*$P)Y{H@c8nV!zrL? zx>%M$(OsM~70bi zNAkH#$Nr$LlIIC+de0IaLy)$&NTz}T2YM|;0n#Z4xyM|4QEFi<1Q)gJ1PiPC@=p2U{GbAc`d`fVw5XtG=aI?P-jdH-?()uthS{byvn^D=`bm< zN};x_N*Z{T*B8lN#vT6v!cjD>g$C4AYI$exjgy;VRmEl%apNZE$NEemnUnGLpD~ zPcPVpxv%#$c>L7haQogy>1ilJdh*Ivyd z+XkIhIDzIu#|!Fk+knyk0Oneyb|(n!6jedDK`RI+AxN=rUxHr@YAa?JQLxTGi<-;V z*>wDM4hTffv4xE~=3gb>N7-!)lqU$lscxfY?4%uYox=2Vf-<#F=38rzkZq+f%7iJk zoc{o6cJW8TBl$nG9%|*~W5^*%s)Nbj^i_t#t_M=y5vkDa83T)dQFz*dd56h-MOK#a z7Ey}?r}%}f3i$<@MWe`r^^9*1eq<~haW8J~C6uT8M)@3b6=RU7{0=PRwD&Y(9 zM+`5c>l$lTb;vVIt}rKlEbRLRfPNvjjzpa8y0ZJ!)yo(Fr(F&Y<__B)4b9WrS93vaiN$<3=6|@~64=V2b_5ZBf#j+iZ!@c7-kRP+f{t=uu&53& zJxXmm1Hu=;mB(}FgPzR=5CG9?QERS$iHU`K3k@o){7eK^&(h159+KOAV$5I8WS|9n zDJp1R3m=3mYgT;zjjg!<6Dz_NqXjXw|h`w(eVL2^|ePDln1ZpQIiweSz-pepaL zBUgV1$*aMfK!sO#Vw`EagNp1q{{SPf?*S$2YeWE*PvKFuW!uXU!CP|0uRcPm%CgVQ zy_iu}pJo|Q(~W-1G!Iv8*hK4W=?2PPa^ZJk^-W|o^&?6ZsY8)Og9E#G{82oUtX^pQB7u~OTi*ylfplcsZd zS)xFF7{_)eIBZCzN-XyTzMOQg7g zRhMP>N@(TdWwxVS+$~JIIQ}E#EG~`Pq<1(w0a^}EYEUzi_Cr;TwOLtLE_}GhUOV@# zjTQ~vl!~#uy<=SM^5=gb)urA~?-)~ttICLQ;i#JE{7VZ0sd?4~ReTHL7!}@Od@8!? z2RHT3Ty$Hc3W62m+2lh!N*~8DN~50GSvPRi(}VuX8>*9kvzbYRE7ykezR?0b7-lbVwLvA3bs$^gsR{nnyk;0bSV&g<$@LawSc(0IA zo*c5Gg)!Q)BKB3NgG%o$S1SZLwez-JU)n$g)0g1BwbbDiEA(QVf*fo?jeuv^*aA06 zZ5+zTetC+eEWUgW*bkLg5AzTtH)r5${6YE=zF%=lHNdy&D7+90F$KG#%Q}h$4n@V$ zdg8c)Tw1|6ibp|@2BIY%I+QvK`Lo@cS_W`RBdzZ75L2JU%X9{Ic?wzJ&#`0E{F3U% zsAr#LJSvp1;!=kPKi$l`;W&n64E|W!pxCGaV(Rbn*%7)gzS|*&uGZ<|5}m|AI-_E!7ob7TVd=Do2%4RuFzf}6(w0NHd`d}i)!spCrPikv>K9!vBu zOeTfE%X9RH{1y_m>NZ>-^KquAv~Vt;UX;0aZ<^PdkVK}+C?vg!W) zmKp|K)XaG+enVh_g^U{I{01W5~2PYgy--A^OJRDK@A|2_j zzuc?Zflx%T56|@qy^a)O4Q zh~v^?ly^5sAh%!ra+a6{R6vwqTNczq;qS>*aj#$EC|bEIxN65c@-0TGZ_klYgXDJC z&La3NrQZa*im;Z5OwjA|A3#x8adR(=e0zve%2{0y-xX=pC@tfv<9ds+K{$ATyc9Kx zJsrOi#khBo+f{HI0Zam4dd#R(dQb5=7h6N*y%syJ*n)O0uZY)EM6=t1Huh;bE&v^- z%Lflnkt(LdQC5F73h~eG#iCtZ-zqh^^nHh`mk&0s^EGO!-1~4fACsmH+Wm%IX-Dm6jH6}lCLRL&6IZ@Zc+;a?+zqT@?v z1*S^_OZDs61Nm#!P6`HA{{VP+KWz`~FMW+=br#qwl2yOXT;k#KX|qHX?410aGeM1o ztkwjkr8ZY_dGa`mqxdBSt}u=Zro#K5E?yG1P7qbzU7H(s#(PZOD=eJ(r`e}HU&(eZ zvIP#cP*r!&XHXYF*5?6b_4$g*0pP)7qW$s%i{b(Ud)bg0;q{i_-^{tAEG@k2`Iu#O z{6mA^@WgDpSzqoHDGIVDR`Til41Pb{4y;uj*VquW0crG22=BBdju!7#u;B^j6y0pV-e=_#mN0`LDtz1hM zxOEppuAx-_04%Ap0?nv%DWX#aD#4(qIViD7`-AKxs&e1C6uxCS2fL2oH^{*~XOI9W zFCR!Ph71a?1AvxbKBTk4hZ2q6c#tvXovtmH7*hbsy##LEFz|k0uw`0O^sP!dC3wR6 zLhvD5S=khNtc#oEanAK95rhg_x38Bj&EmWmDSiI{mSWX?&*UBT>~<97z3u^~_Q+Vk zuKgn8sQWFVqKVslOGrLj4Fo4|zDABUU*25^*U50Jf$I8}-~0Ahio9u83#ZG1Hm&Ug zQ`2P?PJfY(@tTGYW*)C_CFrcBPgf|QbKlrC>bdGZ{?Xck^wz2x^%IjSXF*lOM_IMo z6jA=sB%{B2oHSJ%09ff}*j(h6KY|aCqZ{g5o^K=6>3{1Mf+J4LE;#c?a?ii&8%C9x z8#2s;&iYua`{b<#-+n@=R=DkDMV<_~qVwb)4d0{{bAwo=0l_E-CzS;Pcxf3z=&h83 z<9DBrmdY3Ypto-OaILjvDV8Yy@e-CL%-&)rZB0JKQp}bgmj3_~Z69%z8@XmRUdt`r zMElGU&%MVKUpp3>SJWF@m#`YU;FLTMa)j6BB8x5BV*{Hwk7kW0E=Gr&gMfcA6uGyk z^Z8}YHPOhX>ytz36tlu_J#}QiaV6SQ7#O}Pa?9cb*_1-Su8>t{62({Z8r4<6D~0jq z06AfIDSUk<2QM{&0c2`Fvnj}F{KovG@-7%h;r>}i7aG>p@fQC8G4#s*Va_q9b`sUs zG1vN)&f8nms(J3DLaTcG#NxV%DljgQ;u;zD8Vr_2z4tl;Y`lIab<6pK!hX4#Rt#-S ziq2tdZ-fmRvQ<6Y@hVurRHx_UeIMo!wvSJd(dm}ZT|Dw|YAw_K;X~QYbjI3#Oj7Qy zQ~v;ndCKm%Y6F9ZuYOBY!<;~%HnuB#ps`M%0jop4*HbHzUZQfBUBmU&e1Kb43}eK4 zKA^f?2XoNl*=h>g#m)d3;~wzX(4hRdA!!x=0H^G`$mSODe*Ps{sxOY=WTu)60j^8( zHeJ;_3bCpZnNy7p-(hraFH;7uwGvXc`X&X}h zr(Y!@EAlI21(X^J@9I}obRPYbQ89y)zh$-M&)4Dts_lR0^DewU?WtR(^!ZU5CNV9S zdwI0W+f6CVr9bb;jjw0kCah1y4rak)>_rm3B6?rbxj=2d@=A)D^E7XB_RDlLEA#Sv6~(Y!{`N8=Y@t)Z?6$n{bj+#Bz&MYOl8UpU z&$CMddKNqX02eHR+fUh10iX|Y;^~P@F?<|Na8PM{lZNmnbN=Dk6v=EXA3b0aj5K9Y z;{tL@vH9naSDiSoA{P;sk1;`IChh+K3>%`arYX~!Kwdr+`!-gpKZw<)!<&k#qoMrl zGeFfN<0%GiuENx6sKWbZ)#Avl(GGvqvp~?*OCzSD3OP<*2*u?Yb&t zEq|yAi*{bM1OO!~2aT7G7dfuCySH5A@OyuTOK1T^rTytfw8w(4& z@zfO*G(U`*sw_Ev#?UDTmo1q~ZP~J|XB`hL1x3EK+Icovudi@N7akm_^eU0eucHJv zs<*-#rK*yzqn{!Q@KwexN0m3q!bO$kQq(vnr;DqHAtDx%&2z=VmuG=ypO#u|G4n~^ zaP#9RDY2bt{^54my{?L`v)P<09Jr&327*eoAyww>XK^yPaR+C97!#Ib2r77a*t$;ZEOJ3^crYFcxbD!aPcTM+X&| z4dptkb1b5XT%;F5`rA42xEn&ppCTEd+jH22tF9pO_Zq2M{z+lA8r%LDK$WUz*-BAc z{GrWTXM7Pa7M*hh@-&<=%$Ioqy2p*E*-z;a!3|ufSwhtO_d6Fw(WIcEV~V>aUN=>- zIw4{fK&?Ne%n_v@CYP$THXLsAAVT^p+JGQ~b$a=bExfIRG-&r-z^Q=OmrxtUoc278 zD7Ap)m|bv3*8D0|6rh(x905Za;=Xx_eQo5|-58IoEDb@^K ze)w?$dKvtp%u}6voU@^$?4~N7OXHPcmWrqGI0kdC*?!HY54^xSDAeXzE8(*T&@)e#}E))m}Rh__!OlrDyzZ~p)%D(iy(0Lbe=h_ix2 zRd4TXz8f#6k*Rc)bYILzMsOG0Fm{F}(jxA}8@JE1N&)Y%HvJS3c#c!~fVve#L>EO3 z>Js3zaGVa)O6KQaLXF<%Dy&R|?OW>mfxkEo?jbCG2ng)v^1xK(pf}V(wu6_*z7?cy zxII0WNn^F-jbU9^%7toV{a8z|1zZuwZ-jp{Lkb7?1RX8A?IIky@#@${Q$h=F;G$^s zF?yH`*-os#k*hB64`L7~JPu_h-b{v;-#Y3F)TZ<_si^Gf6*^ukjFtm@ZS??HUtbmt zSg;}h2Dv(~Wrb1G$pK4GeM=wBwgC_gxRlzh*#V)Vhw2@{s?)0;U`G##D6Bk!xhap- zKnq&_B0it{H0fI81uX`|TBsQQ7@9eFYuHe%+O_!h zDRhiWb@(OihbzA-2nF)wARN~oBtlhh<_$gV`!5UA&LOEPmfo$KEx%=^*o5{Ipd+*` zp{nMhs=W%FL8`5oJXEl;w7*4OpQuNzWskC#ZL;av9we*sc`OFi{4s1i8Am^uf&?hD z+%1PF{HU6Pw1NRRb>%{?_fS^~M*V=@nx@|{NY`LvOXEqjjVD}D1D8sMwmpBu`Uaj3 z3C(ubeZV||ovtoY20)(d8dJYRuOneYoTEOR)BMV?KttB!m)kRPD(BV$v~dkVq~;aNkviR-&Gq%!7@-Zvfvyut%Xogtd_IJjQJaM^49vpe~#`OYqYQv=$`$V z`CRyp-bTYsSDZjPtcXq%B_pjryf`g!1J4w}L+35|1)AfZgsX1s4)~lln7~_O{R}}H z&+@^_OD$hLfB|hTMVIvq9_MA$L_lNERMD{{XNa zlU6^Cn^i{{doBq^a{mA@Hq;N13eeBBDQ%ipngp<9BB{hbXt>D%w^l&FmgVwl3U;kimR?f`utVkJc96L2cW?sYX8~F?Mq=NqOVnkT|Oc zUJ<6N`00SPRom1O*=5GeC)2sLXB8DE7HJUR^<)h;GS4R!dG-c&S1ZX@fW{?!{{V|- z>xntfPJZQ|E?B-aP5^0L%(sq9r@4i{i~LRFkG)K2*U!YIqL##Ta|2{mOA7e~pqBpt z5MtKTe#I=RfMX5*K12=IFX|xGbD|pR`auy28F%TaWqD=53NHNWXykE#eSl?~)D7fp zx?bbuM&sFU6ZrBJf8D^kZiD;A(-WDXo){1)$-1jXoE2QlE&PVL{Zv&6Z}kJqfnviY z7nr{la;~;oSRAKrGdVD znM@>F$aD6p((fr1-8>TlfTyn+MV-qKyO2l-8o;K^g@(efCkAtjETxTp;w#IJq5&@N z@=n%KL-qwDxUs%r(ifkKE2!`lP9apOj49BIOVypkD`xO8r|;M{_maZ^u;F2GTYZgX zJoN-8w=C*y%346$6>(FJDgK3C2zwAdITAQaI*8)DlVMHn*HK$4f#zVfpM%8Y*a%mp z!_k0KoVywXYwQ-)raX;)py)~xwd3FBDF(RjsX|*h1w(?moZ3-baSP`^Gwr`0h-VW0 zfXa_5Z7@vAD<^>b{EFi=mb6Fdj(%csq%8Aew_oB8zYAs1?FF*Jj|hq`;djJU3T07P zML)2eY^IZ_xx~KEafQJut@HiH+akskQ_FuIlG>v%xlCKEs>M~ZxJLFj&@wJMdn&m) z&dZD_7fmW#=p0m0{ChD0tPUPkZhumhbJ?%D z7X?MKbU{CZ^%?^LZaxBPx1u6SftskM$) zUJw!AkrDOBxoXmEOh2 zG&+#gbPs_wZbfdTYAZD3e{{XKbsKf)8kIbOzs?V1@Iy^BL zKYO3O*wx zK+=XdzOt2TZ-P)!Ri^g{w$*3mF_q9hGOi(QaVQ{-`bCp|GWxf#A^!jpi%L~h$3T2E zWGvfO(k1K*?hOSVCHHFmC1>m&N2nE_xCayMJ1(!RL$`RPuYHDJo$MVncD<raVu`?t#RXkk5wT+1wjEZGQ9f@<77El>pEF=+Enb98 z3p(zWU&0kTRX+QELCI)&YNl0HzHP*9s^85;NN(BAT+(?D!b2K)tIAKg6AQ+s^oKt& z4X^v|W|HUzxdF1)1?5mSzj3885{Y^Xj99PMB+;+Z4Qzmzr$nkSpx?n4rBG$tSg{mb zp~rVHTR8YsMnosYOx5Ad=FO-#tAlu_y?bHI$w<}f5#e&}PGH%6Jf3C0G(x7aJ1&J0 zzb#$AA&aAT@Uqq^1vwE#m1Vuu0i}vJEGlfR?Tml-i?^3_<1uu8&tdE@1`V0 z{{Z1RV)|py0`Xix{%LnzLCYTeNP$JyKF(m(@_dSg-nO-=l?6X#H)Xr4+?pDL>*Oib z{Z=5kZNlPO3mfH#UTDf4gd?r#UP`uae`_rEu)i`O*YbtbUD|=WHCyDXU?{XWW!8ke zf7(TNAA@ryFERY@_2TbO0XCE2sp6gpJgyUydz^` z>=1vH+>b?Hu`7$~rnrSmkoiqRR-FSJxGWP|Y%9Q1pP7rLF8yOD0c)>+H#&HBf-GQ>>(Ir~NXG;G7vhRgmy)hAWrsH_wDXj&je0Yp>tpXdv)~sX*>aO5A9;D5oE0 zj1kP{0%k4!z3 zCcx9f>}?{OIE9V0G4!le!FECKdo;cp9_(lx4fKh(IpvivR?b4;4mpm84HIL$z9L{P zJ@O$SE*v>unX{2+609GSU+xB8o*qjqw%xm|O{qI8>`*B2XF9}g8s1LJDiw+;XM* zHHT}z@h`sp%SoFDQqVM^FwN&BhDu-8}$I>`Ob;w^a zQF0cFFMWpqQB}wR0fzZ=kaXJkWTbR)f07RpYyQ+Xk!md+`E16c`US(MFK5Wo8 zkHoQc`Rq`o?JQS)z`T|8oOX+;^oSH~Hy86D2VuqjA<0tO=L{VN+hYy7)%6`^Q)oMi z7Oh+T;(L0Mo1;?WdhmE7Q|h(>$#f_V;E1_A{`!vK+WcHrXj;2ABHsk&qHI_RF5mgg_sp|)Ee-sf zv1*E8_Ye041q#31cbqQ#*qTyMX6(3DUk&P8g0o``YyJdiCRjgeDQkZaZL7$nsB`_G z7tl30ScU4x_?1I%&)l-He#;GSXR^v0b;lKRQ}qPu2l8`y2joh-Nszl98Dt^aj-s^j z+*KDo!Ly!S@VQD4&lfVVuplpy{{S&4S&Oq;Rh0m)D-DgOPSn74@&VT|bek-rn*7Q_ z$1QhVN*>3wLf7Z;eUA*Hp+Nw(KPQp52l6$M7d2cj$-m$ zJ;W`i*+Z88ec~V*-AY8}rQGlSA#FDG_PmYk3gh4ABBHsnJUjPt`U={Kwe2hM77Rbl z!LLqYc|4p;nh)o=4KKdlqSKu_C32(3;ydx@vaTBYuvgb`qeHv;B^@h>kEWsms|O=S znNvaHb>05}$U12qLswjt6{PN!pRlFg;L_E&-;?aL599R`%V_;B2!mzTEuqTtaV$3S zkpn$;cM(D46IzAseAt%4*RWBEMy~$=JjxY$biefgH^Zex38`^ush32x9~}1Oyaa$B z+&!oie>{^-JpJ4y2jdcG+AN@T`GH1#K1AbrBiGqmZ_~IGJTs-zCYRR_EZu9WjsAZp zcW2qcxP0b59n6n_uuBW)A^|})<#Tc-S0CzCWtogJm20HNa8+s4ar3#gaKMhI&`#g6 zXazB8FL|P-6b}!~pnk>b&w<5;gLJ#@0*{j0?hqkv zo&8EwW=?HZ%e2ull8`+zHq~QbSJ;Y;%A`w0SFy!IsgsWRfSq!V4_K>Z*;4eh_{tWm zC0gA3DY{RBMXK=;{{TA*I@A`M{{WxRJ4*X$!vZ z?faE=Pd!XAp;E2j4uS77xL0!M zYRl)Te!>XTVf5lIC(>~PvvI+=P9OnPG}nYQ+Ja=}$hvV4=;d(K6H9BunvLau8VE^Zpzl^uK4)^I1djO@+OTe^#Z$(U6vd9#Bxw@$z!XpJc@xMaQ^$Zb_kq6USu&yW5@+PyMh*kE6qEHgKsYyHGUr#SEUoF@m*k!C-V zaT*;j8pm&JzvS{}tDGr~ZeZdf0=2W|Tf3j&z4g<1i ziKCmzrj32*mR}sa^^jFQg&d(N*`*SlO1G=?sbGs^`^#_t0H_6RZ>C}vSH7>b( z{eesxz)`|1j1lDSomxlg&h` z2Tgygg_H{q@6^6tTLRMAzTp62X#{`5?k&D$AS|y7F74=kVFCw_wKQ;F*z`H7PGxO4 z{{S@*s!QE+oZ?Q=*;9>_ud%0d2!#b{O%`u(wFRYccV5IOR9^o83L)d=TAb8vNh;h}&|E+=$!qdB_)K>SQ#wsbSG5+V~=@0pz{c zaV0H9WmT~#7jJriZO=70dQ>xhz;Gk3kCLLVhqA#mhXyCrockIIef&U=<%fJhP?fid zQ%bSL{5{Kn3b&VrJpnPd0rm~?6pp#Fj|k2wub)zA9{%7>ciTC+T<7e zm&9uI!N&m+N(IMS`vO_CzWn(bP!tts)b}H6`71w}x8N*y;S1?1#Yte;Rd9G> z63lc!ou9=p)J)4cu1HT2gTjcR;KC>Pl+3wpT203NJ?&2WV76+23O-?*{qgu}Ze0AdQ7k zPD^8iS~=e+*~kN51gLW;^qrO$VEcT>b@P3V}62HMgIVbh4KfN@a`pB*k8#q z6z4aXBAl1ZZPDbYc6m9c2ViQ)mq79&E0ps6lq_Jf;t-(GmGW4zQeJfm(autQ#feg@ zy*nTGDLMdtI=B`uQRXZ*?@pi^GBwe8&-Z1jkxKLXk*+lx2X?__B^9q^E-b5VU8`-b zMx{Wl;Y<~DpdkV(avky;R`To5Ax(oB%(qT(!SFG{zFYPcId%@Jf|jaPw1SW6AlO^7Nbh$qc_f(@E4`IL|?9te)idW)Y#RZM&+WRO;#eXpb1^)oluz;rYiM;nkO6yjhPhmw*A*!5gGTP)iNOrKQuJ@0O0YG0XEu%?%A7f)cM5?%Z;VQxgL3eMWEf^YC`>C1~SN9o-E!I}- zwu~)u^%l+!bt#p`N0y@7z+c#%y%#IElo}3>bEx7Lc7vOi%hK`e))9Py#^Ab670PnI z%%HAvui0p6s2^@RLCyaF*5wlK>Rfe4UJ<01UpbaZztlJjs!vFoS*#~q@fAV~$A%nX zzOpHsRm{M}d-Uon^cr}Wx>HBTxCJjb72M#yT9lgt*jw)q;5h|VFe>Qdxsb{o?Q;_I zP)*&lgz5?{R??;Ds+9&hEMe~vNDn$EkjkFUiddh^8o63?Ewn7`{LVE^Cfv|FTn?)F z)EsT`uW`E?*oKdgp+M5Fu~cj{w7**mJ~NKi$-EBssgk;t`9r zdeu$dl-lQ0K)!$V!%9Q&MGFo$W+7_Vl@{MjvmB1V0Is$w$*>8oPNx8>qk3V$QF`jn zAXr>XRisw$z9os;9vMJZcLWMNSw_OC1K*RKrMGM#JA0F`UsXF*bx>2l()Tv;cBwKd zy%zcMb9_E^1g13czI7;BU$4Ef{{V~b6gN3Rj+E8_iYhj@R6a@u-)b@CKr)J|tUH2G zUb^O^O-9Zu&t-GFp#2=naMJ2ofh!i^Y&mx2b+Ajr$UR`~bn#y$Sf?fsz8RRse%#0q zL9D1~t3Sh$(v4aEA=y8PYf#$$BX>n(E#Lvz>Qb5l9t+tK>%xGRpVd%Q$awEeI|hgtBpQg z)B}G%xGwrrQ-tv4C-z`&x}>2NpL>^zI`#-2J6SA(Dj-%dxBmbLy5KkOF*;`xS~iJ7EAq0qU56wUzAq|iz$y((R#nR`>+<_Jh5S5@@Xuyb&tg^{ z+4-FGQB!GdWy-8_63SGpgMkf$rW1uLBWHQoC)!DeKZ$J$*+&Cp1z}Q@*FHf100Se> zvs)-M{H1pb2lw_HM~8Euz~AaM)6#OT$ypUp>bUL=c)FAzFLDay>t^fFk)t?gWidH| zf#dzoF0_=2c#6G-!N}8GFdYeCdcbX;B7u;v40vNo%&mxApZOZel`D{d#Wqrfr4LY9 z7r){*j-uh`E8{jNPxmclYzj8@DfeT1pSpk>8o{+qdm5lSf~c-JnN5LDGUz~Z2ruFa z_}kW1Z$3n7uc#>6aN;KW-Wj#_F0jv#%&=+lX4~FWu}Ti^DpAEJ;uTB>rvl>8u+#YuqAMt4|3G5 zCZx0qHV?@2Yk*%_*#({6(dlLKf7m-y;(z%x?X$?GJ=YS_*rzocvW_YvxZ-YpJKPIG z)U_h-87ZQ^SCaDa^)hLrfY=91qi$nX?xn8$#-UGvigB?T0{Hc0Lv&EV8Ur1JrMctD zk;r36B+G+`;c8)H&c#bMf;0enxbV2W$S%=^4)esK!Ke3^lyb2=g-(L$4Q$Sfu6~dz z?V|T5AaP^Wu$p1QUm(r$A5ygQ@dGNi^AnfFwe~TywCm!=-b47urnG}%RX0n1+?tuomW?9!X)b zVZuO`Z~I~vx33Ods;UU@Ma*WOkXd{`_?9{E+n$W#q6127{1a%mhb3ue!IV*Y0sjE8 z)#NMq{K2JDF4UDn-QU@Ewmx+PNMY1K!2ght#xTP)gk2lx{O zSi8-nD&HyBr?HJzf4^oIk7D140nNt>H1o9?v#t}LB;@?cQG>^(rKsW|VR*$0EaTBJ z$Z$X?SPMtDH^omO97gl_OYqUagHnpCs5TyhW)0Tp_9sHE!S*2G(ibYIr_1Uzi&r%* zyUORk`cBS2%zBHRp+_pbX9#SnPy#`x9m9Daot3! zXd3Vj{DD@wbH+lcbYsXMD7)y=BD3HM{{S-K5cY6EsJ*C2RVqSKzN!*lrjPCUN;I?= z&0}cS#_?X%E~E8TL->_f1zl#pX{{Sxt z4Mw@3`7psrffWMfb9Ka{Tet?-^W3~syWg_1*zMhM_?MEm?`Q4>CAs$h0KB1BNibb| zAijH4iJd>|4-VTzL|;4hJ?$YRc7E*iliXo6SVDQm@`mV7n>4 zjh2UBJn~Tf$G=!BrBe`?TI=Kh#Xvg07{{0M3XZSCq$x`1O^;LZ`>`8il_@o_3B`BC zb3{yNrzbFJYqLY_+Q-NGW1!vs?!2b&lN^RVYwF{twJJ6mKQ*aazk=$ysZB{{Whs z$_@`+t{U3Ft%U9lh2Zsp;I?!AXCk)y z-|;q1i%0p`hK?RNgH+&%<7Jq_*p~&e2AB0mK2r+EZXwhzFU;l?U5Q}Xq-hEO-Q|V_ zv_}z9V85LEzaWSaJd8rXq`5#9Lub1IO*ZhI{-c#|T=)8iLz)THu&zLVA7QFC)#RkW zQsF%~e!{<>9!1Nl?1|9)-c$zM`oQBk5VS590Xr8#Ib*SL!+u5KE;)OO$wA7z{{V1W zubMT#m_@-|*1#)Cuom4etBH7vo#qh~D7S#N6clyel82)irT6`J3|rH8oQ*auRn%7+ zDfzi=fyYlq$_FrFFdj@q`aY0RoukRGL6xOY=cFfwAr@_r?vAS@0w@>_GcDxsp zRx&KT{Fj0aj~B9^hHTKdq5lBFXRM>~8rWe){D}5@xLPmda~^Z}xnQCtJar484W7Rj zD08#FNW!OYcK*#GoFCp+6i*Yrw3}7V7yjXt;;FfysCbS9K5kS7iY&ibN~5O5$T>zQ zevtrlmnvs(j-9q`HXNQlOA|utf8r_|b62@=w|q8zg)RZP3Po1dcpk(87KMHX8k8a< zsWX?hpYkXs1zM^O!Lyz-*tjYKvcCjXz6uBO#w}i6br=a8-p|d0l0V@1#yk5(Tk8ih zX{~}y3w3?=P%TXv#~jX7CD?zH16w8Agd2ORUS5VGY`o3DlxjIH+Ig{_v|fr z?QsxP0YFyR(rV1fLf_NiM?p{l4=YRVF@3Js0Uf)itMXVaWt(N8KpmAyEn2_EaSq#X zrn8r>;uNv+R5jCfN~($m-}xzYDp&L5@us-zVs47>y_zL`@Ukn2{Rkxnh}l_j$1dVX z3rAo;;>BFQcX&lHDAn?QHsEL?xpyO07C%`Bho3641lRs%hr_|%%?}j{bi=C z7BHm* zy6I*Gy{@{6y;avQQuz2M=A~-`#43u_b^f5VExPagO)A3hgbfHvc!1Ms{h@A`zhClO z=D3IoIKR*Km%`!0C`IC;rELz$WpM1S*eQivi;!$qUfL)Wl0aJi)+9pjw1KxA+mHcx zFENCnZyPCS8xF!J%#}FYHYY zh;4rfBDH$I@dEBwd>>^?CEY)mP;52T;vx;0!OphXQ(&t#*Vr0PONWXV1X1Z2CalD` zP%^0IP#dk@<$}7s`Er8gL01fFxNyQFpUy=?eu#@8YY+zegMBI&`gR={J&xRQ_9D?Qx5>nE&*D2myD49eAyg~%0D=Di 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 aflaok5$#AOu~ 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

      Corv6 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

      h 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 z zdeRv1=j>CyDj)huZ^;c?mv55Q@0nylvE}w6t2&1PXmvZ$@FiGsqVNa`{IQj7dG=Cn z>KjfMiA$%RpjCcCJo(HzFXjMFeI?eU1P1x$0$zW(pdKqC0R00I7P_y+&1`hxnyZeg z^S`8Tbm>vuYn+c;gOp0V@tHZfLk)VTnwX$7x9ku-yv8?XsW|&7a5e%I=)!Rbvh~hN z>(<}MgA`y~vnP(?g~1e7v7pjbqU-DeI>kMq_iVo7fdnL zj)`9?xQ2`4xvr%=U*;51St$bW>nN)peUzUM;v-ASM;96xKZm(ZZ|ZQShcNuXjfp51 zaC#%lZcJ0g1yn)3F%UqY`wCvy+W~0%8}Iuvm3ItZr1B55IwhAy+-cGKgH%Xdq&m1& zl}x^VN2S3;{6$}!mv>|i&?!>@I-29QBg>k76;p*(Tpnz?@s*f7cMUZ!d7ANmnaWW9 znO@`$0F?UF1+-VU7SQT60R${RycIa(BIP=QqT$_g&e+;OP&$QesIc;&AgL8ydR$M; z%vc~_r0BcuRuk|a;x7)O_dUz|8mK*pC@7{J7l#pA8(RihPMG^F)E}~=*CXN_P*p#f zO*|X71XW@06P?}3b{A$dP!Wt3TigLr>gr+l#EP&r)^^&iq9aPsdoW&{-;%)gaRa~_ zg-sjWT3c9Nfvym0HT-f%Hoaxbxi-gF*KpO=zvSp}e=)UhA%BTLcJRso^lc`TJ}?$` zDT3G-6;Yr$YI0$m1fsQvF?ZvYFUj?t$5PGtydu;PYq-+Oy5i*<9uJ($pp-iHb40fJ z_vFwb^BAu=SI4ywu*sZ98@b=>Q9(MZs3aa2UR+UlG?u2eo2RHPvhyWE=-vMXKnEY_K?*LO`RRJdRxBrcwfeC6kPxmZ|>$ zrgB?X89J8z$T;A&<6x?I|amTJUd2{&VM&rUL>3cdv3agbLb zV9>VnFnU}Hnk#OYjcQ*LOENt+Vgi1;h~cSGBBz~z2y$<`FbHt|VnX#G-=Xb?2nf4z z5UMSg72|gM5kj+Tm!2DYWKC^b~Vr8(3B`}xTM?5po0 zp$;8MM1B5C{{XQ96|63@%6Y9Kwpy*>4+cHTn0HT%&*@nuyj@0cjO(QDek05QI?e zROU6tOM!J)*DTxfxOFpLVXd#^1ns3!F9!a>6b%)=v#We-^%qUF#jro}BewJsj2b@~ z7r)o$Jzx3!u_;_JYyCXGo=X@en{DJ^*rgfLqEN0`#3%u7oRtIHB?>&eW!TW!Z{y@Gmf|l+ z@UJ0FM;O$I7q5P^5`^>qunyL&n6L%^01#P7L%(2q0*}j&;1c!}6uZ8B@)ce%*ZG`7 zZAbi~p$w>a+tMpY-w5DQU0<2b$@8J5z z>S0tp27iOXB&2O%y6m0|cB`)mTvcHb*!%b44{kwOErzLi4XLLeS6^bdjhcEyD=>3i z$0aR1c7B| z+dsP%3%D}5i zxSbkbnAh0YCD#uZFgWir$O6mQhP#oYpe2YzZ(b4f@IJzC( zZd2dkEC?J|mklD+*d2i`G5m1@1!%Xn{>O!HJmgHKCf8DxTZ*8$jW>M%0HcX`f>I~X z`xvxp!)CRb=;)=vi=ouLfp=bhYEh=`^DY#Yv_>U%=+o>nT2`*biV-Wj-V$EQ6k2e1 z>7=R|jwR^%1!z};$X4C1^ND?MEv{v$wz_6R6XT|?A#p5!e_)EGJs#IA0Pz|a24|xY z+E88|c+0v{%mLu>3I_7St^AQL7Vndo(~_}Whycq#G{3$=E&|-ka7tQ1xSEzqX`w!L zxq1lI0j+s)(?~pK{{Y4VXc1^Xk*bl-(s2b;qpX>}}&_nr+e=a1g$wgf`aukZd{O z_3|Ps5!SBbqAt|2v93hxiAsj$KlWZ!8nkQRLRU$cXYGRJa1Za)M;7NhiflwThb#6h z3#UJBEWJEke2WltThl}e3lg`_;uy*+lyguNIZ>m+B02yq@{ZR-@hgLOfpU*aJ?&tZ zKze=qF-o0V^om3Y1K zPqR>b8^Z=r**}u~hQZ`Hv5;#H6PTNvznx+*eook{*Dv9mp|Gl{m2IP73bAADHU9vR zzAP;rY^KQFIqq7hvbS}4DSI3jH7!c5dS8&RwluYq1r0fB0BLe5xe!Wa0B*iaDTO@3 zfR4A4#@xQ1!est`78ez~{u5#~{{SG?sopUy3Vx?4xIoyV#Rne#rL`>g7#J6F=-7Hr zp@Okh08-1v-8M!JZFkg3dmb(>Ccb3WTO9WOO9I09#sq|ZH*$;KKmD@F#qfNI6?{Qj zy2fApn**hz{*WoBCR8%?)TSWb`ut0Eg@=-bg?sX){XTt~7Fv{6R=i3&6wO~gu^2H{ zps>+p#K`0~tb~HDzQPpd-=yT-mG3Y+qrONz3=ww$jRY;eG7XNK>=k!)4t{fAnM_`t zMvQ!F`HRp8#pT&?_gPpc`W86w9a7wKe4eBP_FF%=4$FJgUn@2|1pX|oegQZbgL7~OU z7@YSS-58wrDW?mRD6r-kezQ3IZ!jRN@a_V-c)+1mr|}iR4OvN&+(5q|QDD2FS2kln`Gry9>^04cX&}SmV+c1Bq_Qnl9d< z@ZG|%`^#x(cV6IX&h4BAt8ihBUU-zk$N(N4bppn5b<`8z$k=@JhPvWn(*FIF48EZP zxDZPp-R) zv%iw`zs%75pUf04xrIQ9T}lJtQA)L}fTvH?v<-kC+*R8!sJW`@n0hzluGdq6h{CHP zL?c1R4^e}EIVb@NR^j9qf4<5vc=8RLgcU+M0M$U>Ind0%@Ic`2pOVyg4!VdhXs+dv zcPMdRm|0C#TFb*&!ZKl`<+u`}y?}c50)AyL^2hNI2ewUl@={sYQ;seRq3q^{iFj{N zuvrs({6M+Xu;y4O5`~7r3B(rlTdm7(@61u zVY11lx$Xw?Dk=?^2c(J>>`v_R*y|uU29C*Wqf%S;WUHoG zvjcnL2G;k1dixLnsyV*DiDfR8zhDmww8IYKQeSpk>`+lxiwD|pFR|@){{RttIuhU( zjWgI?DZ869M{!L!r-@jq<|VznI3g`vnFf|am<{JRKz9V2mf(pI5I)yJjU$9%{;nAH7U+(^5g1Y5D23UsqlFB%foQ9@ z5m|Fpb+B7c{9v0bcv*I!Z}<8_m2GoZDsx6+N-5yB0rYEqF-Y33p;om_-Ho8xPH7Y@ zl(8EqY|EF)&fl}8+F&c2&&0FCpD_AF)Gdw7H-kR1`rjp8VFOmO`{n>GaPmUS-Kz)* z0=LTLok!Q$!l=|$<=0Oc+;gBL4ooNTGN(Oi^XwK^@jIDsH{sl9iP--D>J1-GxsKU+ zcR6EgflhuA4Kyq3xk9uHBGB!;YAcs-OaB0J+M}De00#!-4LAoUkr=N&>(laBrT!(a zKO=VD%Vnuel-iZ@@FAl*073QJYa zZxgaLdd8OGx-CvrSmF2a2Fu(30OBQ->)w$>S){w+xab{DE@UNs$AKAs*Gva?k*cnx z7SihLvJL5JDoMZ(qjbJY7P_k3Hgi$OEZHLmhG`5+4^T(bHV(!#|br^rB9 z+r3v&)&|b`5?@z_&5LNKRB*%!4R1a`v)AGPZkPOA3%`&HYk6OYg|9TC@%qBGq7TFO z0|M&(=Af|k#erT#71Rdr@5lhXRu$wC$X=UpdUhtRhwx5o3>Vs3fI|wpMEO#f=i=#x zw(a7>BdDSZt7i&o*LZ(E#adLqh}N3Wzr^6W_zsES8{_l&>LmeT_4beUTJIR$msxEmHaUhOPcP{QDGXf9{WB?(JSen_AeUC@31r zUD!f1EHAO;3jY956KbDgE*x!quBN&UP-b}jfbw&})yla9TKjzw#H`d#pp(^6?fULj zR%hN}m0AZbO3 zU^Jmr*zk}K(5kQR6jE2$urxWLIBqq%tCi90Z8RTI^j9Du?$N zB`e%TDBsl3G@3Zs00F_w-l&22MgYTjzi(iQGet6H4idUzmGYajiJ${d)K*~XuW!g3 zXnB2!1+3bAl%cln*e^RX@c~~sJ)G!s)Jll5{t`4NT>B6}4YODCY!LI#Z=h#Bc z^l_1?7OUR`Xg1Wg0W?#Gm-YZzZTIh_qOP@;#VKiATS2Ebgi`Qd%}wU@m;L7nTED`? zq7miP*rf>gfCggs_9&p?lxo{Yi<@Ett;;jzuO)X;_be^QRaiXY{#>S}xV=9XJk5ug z*)4#l406YBA`NgDcf@V%u4Sqf?5B~2ht2sb!L7c-5eKkP!L777`2hE(#^9xRrbdrd zmys)+V1T!ay*XmVrr2odXGd_U0gP+NN0PH|5k2`kBl_lEkg-Bpn*s(s+t-L8s*j$8 zx}h8Nz<>p4Qgl==`}4%hTGLPA_5dw)zHBUgIR5~tXr(7>-%pUXoO2o)UJ5GAmW>6N zFA$y$La&eC$dR$Ud0x#06fmk8*QJA+kXevy(6@Y*vq#frIUKrYFBpv!E96U{I$}J4 z^zab9apBI_*-ZkhX)f*$9BJV^mICXR{CtHCjtKcHPRf3sL!3O?tc}kI>nI!7d_TvN zkQ{co`}mqb0sO!U7;(iv@^J@7UcZRxL1T#Y!j?-{;9kaJ=MOimEtq z0Kj}bvdfMukNAo_2ic1$U&0Or_(fc*1WMi@FG?-9j8+Ge_CPKciSdHK5%ubFqOX)0 zKvv02aI%(h>`-W-(I{LTSab3y(MAVxD5~!R?vj+cQr9~GIM%h(>>`4J+ja*6%B!kf zsbS`?BY?L0aUfECUlE`;&mPJ$RkxDq3lXEg)F@cnKmAT@Dc#>S6*tiRZ!s+>s9B^e zqWgEUmR=R^OyF;R2?E;Jz9kwG`-wsva*@HNn{6S(Zq@F(moZ<%H1-6%9Hll`8(+P~ zl((7=WrBRu@hF^|#A3ldcLqv6SW@lJSL9UI-nst(6MFfu%KI2J7AW~~KFjVU!$Vke zF@(D^8k~Hntu|egxmJlm&*$U};#!5j(@_*s`X8Sm=I|WPWm-{Z`MHCqn}q0~o`lhL zcjW}7*9BuJ!{g9?`=m^4#ytwI`{{RnvQqNz$;0#A#XC|uZ6kEqs%N-faHOK<5oGA;g&E!m7Le&Z~?D>@>bZkrD$Bcxn&D$x7&yU#@jBgrHW9-G#I~QZW`E;1=4f= zq7AeH{jy~Zl>Y#EWvp*skY5A-%IKn~;w|m6hzqN~+_w7H{OSq;PxlR=U7sRktTq+I zLg7L3R0pVK-#$*&1-k`+@f)dbx&6#T_!ugPWUv(8^%{IX>Q~i%d74n!s?MNU_=d%n ztAoRf1=wI{d)(zeavH-=dxopU*a5gz!=j})LWv1wx$S&*SkeS@?m|V&KI_ zBzrTEhHS&X$1@7FzGl~sIEKN0X+Yb1#Gp5o{$&g6a$iopl##Y`DL^xrXho{F3aACT z`%x6P-MG9L4aH5^T;v(dErf$V9Y+@csF4wNq8lC850S9Qk4RzZ=c!E|8Bn0N$o}dh z`6Zh`KCml}IliM?+W@+&*bTS!_<+#8_Z@cGN3c3+&Zj9vyEnP|yvcm*L{N4I&SP~c zw%?Id#atFYI}+9n@>xYRIcNBBQLW{7PiM!N5q_E+sW<8zCR#de+GJ)m8_GxaW z(^Zm-i}q<(Ikk6DT)aa>4ktxum=1l9j>z!oQ3Yo&VkylO7*)5;K}oJ-S5Pv>$X#;| zk_9?Ia^$@)$;nR+{$iGua*KJ225~K}E>YQSDerJ;WUe7ww0&cmU7un5;5m}Xs(EYn#!j^E5Gz}46B+yzisGU={rrW68*S9$?^#3}XvUya z7L5c}AE6gY*_346HlpfLJPMXdSx3)cFvp#Ot`=F`K-xUv0BT(&)@&0KX}+>u6|Qdh zj}13mkV^|%-^ItFZWZ4m{>v5vW(h?Wo1DG3kNSg<%ZC9ioVDYj2C%$1Jtcw0vVgn! z0Lpwv1yoCQ;M~Q{#@c}C)+YivUFrSe8p}<0$Z{`lQ>JXdMkQOv!8C)@e#e1trpv|^ z&+bvU$BXlr1g0~(C8n25yBj&;S{ksr$hWG}P!_r5tO5Y8TsRWyF2Sz9aix5Z1mWa) zAsT2fic2jk-@_Mz?NM7$VMPjP^oU#hB4ue^o1Q=dRvb&ibzMXXIsX7s@cLZMY4%#H zgMD=g7oh%x@AH+TdJK_S0`anPmIX#wzwAjT% zmL-+CxAhf~P+)Cf=Bvnrviy&ZM!wLoRG1|Jn8(y0ddS+)JtWYtr&sk#Qy*?^aa-t!114MAo0owh8!*b z0OUrj43@-0OZetG8Mji3VDKMhNyhDLQKIPczs#ww1Vxtfb!}V}hR?478!r|-0mW4) zEqmPHV~Vqe7e^h%GHu#d5ovgxHT=#KlJ2X?V$|VH{hvt9f4K^!S7QOY{YPl9D*nqv zqB&4RZp_}8(L@HT)B-h4^Xa{Dst3z7mR4li3z(h*jzT0Fl$Lxfc1MU2##MM)4KcKvCL@P%iRf zf`DH4BY0Oz9&5US%;K!8{eB_UWo#e&DSN8^Cm`j$Sp-nK0Qou9mqDj;c_D%RnaCB6 zU}|~nu<$28W+Fz4GmGvwN}=KAXeHor+yq9O+S~apqBNhu8v>hCpCuY4ia8XiJ!*0a zC?dcOEj8%wSVd;ryDSZRa_#i#id|`L>#m>;1IN}UmRbk;l2LRlJN%?H3*Go?ag{S# zxC#y60f?Z`*lavWMx+~DUZNPm>rqq^gO}}h1t{ga>f%%tt3cHTnmvP-h5i}0K|HG+ z3B$3Wr_bVEs@vrf+QqMUhm99}!^yC}&*C>)=s?gz*T2k4)Hn8iWq%iU=aR;+)qzM3 zh4!OH4N=@dLC+=3+UGZq>41g@@Z+Xh2zvyB%zx|zCDf&dN1K)K4MT;>HC$`AFtXXt z5*#Br&Bkd?1H?r@{p>xp!DDVK%8QOZR_8*EmM zH{X*>E&zDT^)E=0~C`v~~F=yHab~CMhiM z{{SLrFU&V(;2+OyyYTeV3o5htE?A9r?w)Lmh@|+lPOKQCt2!8Mw;YZ~1~H zF+Yff99{>og$2F*LWOHj#0IQa8Jx?}?yvsKKPL_dS#^0!$Lxz&JT+XhfCYs&+@!Iq z%N_X@u`Is2Clwr7ov3l}jfs1|f+z$7e=H3_de`}2qlKJ0j@vhhqNzX*LE?+6IW%R%X(yG{K%Pfk^ASDW9?Vfb%SX&r# z*2eJ2tU{xpQ*^#yp9)*yY31GuPgYLqeiqG(E)0<+9{7* zKvl%>Sao<|=gfH*b%MEI_5zs#`PY%TF*tA$dppCj3LE+mQPV|Ex%pntfm zw^>nAH*%UPqtT`o;dasdbr7~_Xv9OS;=TJQ8nJ5p2yVx`RHZ9dpn=icBgCb>D0brC zcI2DzKHM%lJsdzE&+jFcPLW*}@IFI~zG}|lygh$t@-n-9jdEl7r2Iiu7yZ8y+As50 z6T5o9u~00d#0ZIFP^XtMQKa_FiKqRNg5I$n=1WG|l7g%_@BaX*P_;$ScQ81+>NEn< zEf*H{Y~Vb?RJ*@>SaS7FrPH8b4KM5jISdM@gl{oN#tvnoCZN-JeC{9?lapwl2E6Z$(tu|iWgHJzf0M%|k z_8eGfdJ^VsFE8Xc{Ji$eTM?9SgIB>QR=*6;c*ZL-{r(`@G_lgIuvkTS{hL_bcPVn7 zkw7@UE;Th=1Q)o)!QWEaD4kDIu3JHN9)~8O!K#)4PHLlIwZ+Bn9I04PE-7!S&(D(O zbe&8w?}+(Jtu+FQ^HJPJ2}LXkV6<#3GONF`-FqWciUH^LsZBY=C7J`{{{Udvyh~YW zSw&Ox>^e$yNE=_R6%6$qPF_-CjIqE%(GR*qrqq(f@?KWn)ivHij83MW0d3obKQu$ z4jhYTOLZXphmYah&7SbOT%qRjeV*UA=u~Rx%oP2#G08N<^Wau&0)FJYVg zL6>zIW%#S1@zEp-$$-&kx5rP-7$IU|D0s8@|txI5&&73Of_0`W=# zlAg?{hfw8gvnJ^iFso%-1^Iw&%Mb~*%3J0~iA7vCwNPK;W#E>2!L2dgL<0kct(Kq=Qpv+CoE{SZna4yC$FF&mEa@qs&-wc)F%;~9x4}dJ z)Amp|vS{P{MQ$DD1ebL)eT6NH<%OUIJ@+Z;oKypAoc?0K#Z^MGiqKz>&^2EeC(yL{ z1Axec8OzHNb5;+`g{z9fS2N-QPw<#SP_U%_AI0nd=vnwDi>1v;1C-x8I( zYbPGL{eB}sb^3yyTXrUgqmwT+xp23ZIv+@mDU3%zfNMD7T9RWcfWWi& z6$YrfxO64ku|oKPV^)x=7W2#;G$_(a)lZ|{#+$(8iM&;L#43fYfaE8OExK`p7cQw~ z@u9!86JvYwrB#;wmY=5qaSfJOWussS#OYOekBy4^7%}07Ad?Alt;E zQ$Vd%{g-98PJNk5_s7}F@~OV%%QJyY04vL&_lcHtKZsVeuIx$%?uHO6)APxRRN$u< z^H3^xw1A;nOSUHm#a=;lU2;)lPtQ{-3II7(O+|6ys)9B|^{+7(VFVw~Y&varIN0eF zJrJ!~9Go(jLB6BGqRfn0knvSfIKFDB3oCDp!)1R9Tur$lL@tYs4RH~-o6K<>mn}IC zwrHTxfmkJ3P)eYvuGB98aR$vUbQE7rxyh}k5E#K|uI}JlZmyxAt@+A8Dx*j8_`z^> zEV@-bQmD|h=#I9;m#7{I^?=-1)oLHr`^lx@G5wal*NhMZ*R1tVh7 z2cJA3tMTFNhY%XN_bZrOe?(}2useB~nx@rdiL5J52xWH$R=RU)P!30ZL!lvX3tIaQ z5(jdH{mM5`s93iYS3Wr8ffvO&3cPJIp$({4hkrovE39cPN{(mHN(SuH< zX*b=PBB^7O-WYfg+f2 zQR$-YydzaD6Hg!#hi^aU$mp+1ePbOIirh^U3jXtA(T1QD46ffI+(Le~3vVmFe&v*b zOUV|W{bWi;xggy9gf@AsUH!8a2L>0uAZbIuc*|OU3HAd_Ac<&x2EWW1#ojxzane~z z+87iqBhoDgCf7u@8+@*&_33o^Il@z-`_$EwjQ(di&{8?1#tu*Z2#j}aqH8vnuk{X# zS5w+kuak*Jld#uM$ym+{9?wWBhQ4EwilcPzsbLjpv+tMoR`nNR(M-#1rI%2MfKphV zKp>czM+pFAqsX`o!~;uE%BU!(oKwkhF7zR1CCdVyVHCgFOqm%+ zXOdM#&O^ii0gpB8Q9b*WGTJTo85rH8yx8*Pe};D4S9NO}E*9u&B`6E>G$`6_u9!V( zd<0^eSG5`y^5cRFg$Z19QmJkZFH(U^^W>t6H1wMr&P*;2?{gpfIS%jf1r;}e^qUBC z0+Y_Yj<@~&3Y=GS3UnW{-kG0g=0e5j7M*dQ~YQ04ecvjE7 zK@_xT&&PEUYBsQoX+R@G-l2G)uJ|B;-PXu1-VRR`*$ZU;)Om!Rv(1+6uG^s#LPCx_&9Wzo^`_6!4T9uah37gyA~ z&YgP41i6*w`b;5jk5Zp%o>?(kr9X?9F=B%GIM~9Mr|u*de84z`*gZoSZ8h8uOb)w& zW!(q=03xVGMK$UP!#(RIR71-Lk4H1?M?VZ~;8%w%t=ezNW8Cy(TZ z0zC{01*26B+yPNt{eVL9o3BWKhw!|)tN<}}5DGU~m2htPwpCUu{%fLc!EIA#H?yC9 z{AC@S?1-?}RW7Qf)m#v--W^;dXG&IZ0531Ow?}tx`luu+Rc-S8Ae$%_m?*;JI3@}u)?6}!Y~R>wl>Sa1IT3{?(poup3#%^&Ir zg-9CmGqZyRW&*0=;fyj}a?K8lX_USZr`dYcOlh}TpJxy$#a)RJMHF>*BW(btcCiQp zzDG;)DZY_{jlOtI7dWqq&BMZvWrFj_03WcF5u)BNV2TQ%yN*1p;{;ad)Ml1xVeBhH zoT@ZJsCW7H8ZIE|+#N20$e;#~<@Q;QOG*S2M}4?-7XIybHK3}`G72eUULj{_7rc<7 z)5%axNM-p2tgHK_Hk{YKOKDSt?&S!(UtkP#Wl9dlCzzCV%cBc{@1~kSQ+6J|ycE?D zEe;H$eKXi;aeV&($*unNFO_<#DiqqTbMLan&73?x`zZm9+bb2B0I|C}Wvyl!e!)!k zI|2Uy;vH(gv4yx@*Yi@<6sL~GLWMg+m{fFV)TM!8F@6tN@<3Q^K-fHNe4N?&`7V-$ zjA9@ub@+&b%>yjF_J%g@%<_F`YhrNUw>fC>`-SZlRB@I5$y!8C8gPXc-?PH&=3EdX z&XBv|Up->#*j4B`?gT;QO0Q%5PMYt3Y)TNq_AL}T5?z&6)yk{W*i6>nP_&@oR=_IQ zqU&ww`yIS*pJ0V_UjG28RD-OPh=rxfVyyhZI~5u%Hyq<~<>{-BfrUXWO9yiZE#Pq# zi+ZU=_g|)4mde{{;w8qlFR4o$3)ir5mwxobZt0vjTzGr)$Q)6L0l5WM^K@LV6?&Pw z=Gi-{zqC52D|_Xvq7Zr5FE8slt8*+i3zoNk$inzMlxzU1Zs=khRhZ)kaW;CEa!QnF zpZhCClJ_~34`bL1xmr3QIW)iX5$lNf9y5ubB7uEQA014lt`|m^#4H3DGGBDYko?5` zy+;f>n?*>_8imrhxS{I(sPrB#CZ1Km14^PH!`vQZ^*ZKdX*}-xfVe`+;8tfmlO*W^ ziA*l+&&@@ac-x9}eZS6p_z0DLJ3=CA@{q9=UuHl7VlJD@%sxxO3Lpz5V0;6>^$XlFBs7@&(a(GAl!EsP@rsgN$ zm>EMfKAX504fzG6pgoid81(|Gs+_XHvx_2kP3zb#K^FEYp#1DjIVbm)c>CnQQAgQs z-xBE;M#7f+PdSTRmAw97gjdE?wGdV^)j#Ih3qB zrl6Fee!(HpDjM-iloYLcz9reby+YxfeU*C=7&_y^Dwcw_B%y7X3*PRh>6 z^lIK}b;W_f2y=Apn>MtwrFRgqqOX^@G%~B~C^YNW0TK$j_V|=ozgnouC^uZdmyt=V z`@Ky{G|&(f-Tpb>SR>Q&X>X7`<;EC9s^P`3MPY8stk%f|)AO)Uj-+bAcAfPCF)`YL z&dctR6c_1=QE#pGpl_Qt6oXZiN>H!FGz}8*&4>*;?jXuejqOGCUr|zX1kN>YlJANN z00ZoBz$~G5UE_Uv!4{1O;nZtxw}>0Vk6=1C1zeVINlpI%8FAq)wxAamm<9V#Rs`Co z~}0h?gs{-^ZAIQj#uTzG!5jk>xDm<(XGFx2E(Ep zZCWYVTUwS23OMuk0AAPEOa*A(eJ|LFLrOOSHC7g7U0?l2V!sZC4KJ-wVa+Zlk*Gf| zTn<=#c|O2U3DVT!mWh`cqtKdArcQyUKk8Evt1bm?O5ywR3&G0l{{Rs}(fR61YRYSC zg5|xIxE^*4Jn_pJ-lqoN(i=>m?gu0ra+s3KJIA*uL$u(ODdJq{9(sPju_z!W!1fN! zn}04Pn_Bz-0LYCNv-x7xYr7i4BBN=+7oF>3FEKkGv2pyty_Q<+z-XtBY9VN_2o=z8 zr?@6?Kk7Ru=TG?w=zHNWu1XpCfY~Vj02j(aiRDhZjfl&k?6%Nun-(WF`<2S!P3VH~ zXZXc!UbyNzw+4{dU#_3pI#YSI^_|T{=lCF*wA3NB?$F{M9hCYcc&!zc3(gCvX87)pox6UQkGajN>9b@e26K3*jI3*CR)EfO$<%_%Ar-ypU3W7c9pyA9Bcs3SREz2 zvVaGH=dZBowb*UI3%4etR-(Q^W(P+3e>0F&-{Pf0yMKFyHEV_Dzc4E8UP0SORiH&m zS+$d+7D_GI?ksp|uz0>Y`SJ}uH;@6ed^(2`nWz^-b$W%y2n33j6lr6{a#yo@ay&hm17){s@$B4itFFH?$rh#j-yjVo z7ybQ(@oDMot+k@jg#a{d6AtKdJ;Z5V-zHg9IzD;!Ud^eWNx?%`qwE7}m;6G<5P60+ zDR1%koiC@AZ~hd#tVTK#0M-S*xiRhMZNu@RcvCE0pdzX)gnZ+t(9 zp;=T?{{V?qiyOn9J%#DD-vkRR=N42(mCk#NVCPLlr;&AEJc-m=y20Sxi=IUm19@IR zw6#`|6$*!4z&O!c%Mxj=qOvR(317`k4e_r#1HOTlh|Wo{3XdKgN?2~F-<&|C_-Oeo zB?6DwrLF^eECIWA6z7YvORNW3_<~-+3!#7)+P7$0i*)Um8W8bUz{RzF0KWZ-Qeyh^ z$*c>%0$AdE7P{~ z_=#PiDQ+<)sx} z{$h1VUZi;2d7gcXg4A+nFm*YWHU42&PMdlen&KUB*`5N+Yx*lBgr=hz^<9L8d?RZyc>>dHNrLmlNM z*{0Uy_HrouP!K72fF(0&8@Wz5h9CAgR6aEVTRm&os&fs*Z5;rReu8Fu7wIe-0EPPl^Ot{ zrFAGzBtrOz3+~g0tijUz1t6nlFq(N9^Vp4960I{E=C8O~#aLg)3bj)HNF#u5o<-9T z_qYNMNAB|mnnu0qrO?DvMry&kUm{4X?f!014<9A$?%54lHnteIln0x4DebCaAMW@v zrT(1$Bf!p8{{WGQEy+<{K!C9+yNwW1c>`#9&mmJ9`SMvsGSa3R1^2`Y1FzZZ9Z*0zPU=pj(^Bp3@T%sw% z7+9sAq%7dWV4(g`5qSTlyv7cWVCt z+``Wtfp`Jw?V7xPkkvOV><%(;vfgGWb&~0Ji>&mNT(5cPia6zlmQ|*kutvh5!B>uH zh+K_>oaqWzBiC>q3(S3khhmr#9x4l@zvUGk*>!NM-R#vkE+}WccstDt2&*GAxloFv(zc!t|d^H zdHlgOThs~%9r3flMBo?CF#r?|sc%%mjg4l*!N)TzxkyIohw<_yiqqIOTFuyH+cTh) zIXKU#U0agF-O74Cen~=vBS2avwksD$_F_9_b>7NQ75JJ(-Y`(LwyPn}&RIt3E6K*8 ze5t)ni_sT*B#8{Rh~#y77j$ED-MG^*qi7^2!av?Yf$>`pDQYezJ+-U&JSx zO4R$XqXQnLT7?xgvryS|OFE07{KUV(1q`xYD6aW};*5)co6udyvx!E_-ibn-PBy2nIEXE}wqKH({$qndkfk7f zfYV&cD|h7OPn$28eqgi{jOuj-Zd(C&R|EMtm$&4uS5WS;zG$1b+#r>tqSy5^*<;4l zz*W7pLf;}37hfgv59Nhcz%26zU=oHJ&ZZyh*d!cg4Iu{MXNC$z=;slvg|E^JY)%2+^n%iBmQ*c*2a>I}fAb;3 zxg2OhDY^}c7cQDRgv9_=9 zMWKAlmMgb)7k)GM5}I>=xtUaf9v5+;U*=fyYFu%r;g?(${Gt@|UA?io=i)$q#i%@< zs;8yrNZHd%f0hW)3YMbo>QO>@%PDr>Um%0clI%A_U`kS+b&X>A$hvE>;s*Z!h?E*t zTa>W6Er?V*^QHo4a7-I&A{xTDm8>~94l7C}aNFN<#igy=i$gly$R4Bh4hQ363N-mp zFS_Fi!+bn5)}Amb*3oj#g@TvK^T@dY*b7Ar4scZ@)d1dvsA= z%ZA(PyO(v?I)jTjY6{qP=FYZ#mzWc{RauRL_t~umEgXLlS`=HS<|0byTCnyel{s7) zr>-)Hmk$2`a*0?L$oD1-#Pk0NzfEp1tt z#l_fF(F!m~XdrVRwU$7jI z;QIyHZppgx^BeNgK=9(@EOk!bD4ZOlHzA~kVTda%p&(Z~vv;Xuj~gs-9zB0CIv&?> z5DxY1;0N>~=}y>W@1j0j(&mTf!!RI5>Icw`0ABK6n|=Mw9Uc`f1$naF`%{JjuBh%` zdYzy40Yx?0=h8aZ4f~Aombu$}{6Oem!oi%k%eiKYYI!-cubIbksCc%o*_AJjE?BQf zkM3UlS6)~hE1mq!+cN!_3g965FxwFV3&6u--(gD8RseS*GVPUt-OHg=J$aNXMO{|} zYeKYsVyJTLzGFzJId>YPb+K*Ce}ozs4?meeyBshbTi)9$)S5Qr5Dn04FQA%*q|B7+s4v+U_W7ul=2jQN&`)_v{U9{>~sNDD`8J zq_d8rb+=D4mvZR+5{sl{p$#6tQPLc~A6Z2$EXBoIu<8KWwyW|tOuPMv2Uc4!TleD} zv|HZIB{{Yh4jU@t>ve0&l{;WBi;Y4TQMdLx!%+hObVmz}(i|(H=ct5I!PokVtP~v3e4|rX32KyBe3bX+xYM<| zqw_SipfI_gh|ON=>8D^#Q&ukkbp;Cjd9X+*tG~qBg#^Q>Ww>!qU;)-pviyU>Z;`B_ zG+A9_RV-_crJ@aY^8114^dp7iNA1c8W$`MK+TH5oLY4-sWwe^(*m7JyDp?VG~6>)gaoi9RC2wm6tDy<=B@jtF*4=o3KpxXDUIxRRb^=NgUHkPSE`AYY47nIDN_08p61fBaA zUAUTMIW1olqA+r6$5jI68dmAU5H70*{gzG%*CU2K7irvi1#(7WqP+JSdx^^Vt^Dr zz}Ptc$z=|Mk5LAutY#Jn6X&53*%Z_l2}|D7Qs|vcwBQXQPwbpr`cR$B))wQo{ud$-cClBxw8iYD_u4HTjuIB)++TDGMCe`n+{zS1y+bW5G z(_eKVbmTZQp%KeU5t=L8#vblJy&XW}qx>(1$_GRDa)J*{b8`Ky(k~$?7Y?5pq~I8F z9(p2@RX`1;zF|e{i+tEsT6OtnOvZj0bU1d8c4qE>XV^mUsr!xAp@RJKBIV#YeU)aH zH?L#3qs+U4wFPOi1Xl+uh*JusUq7}KwP5k+!~tIi)7B5}E8K%2;#Z#n|l2s zOR&BrsG#P4X22|7{QDlZj-jahKEYjGdgo=+PPbB^7S6vH7BnbQxtdwiZl_@NC$Jt1 z&&a6VJF229PCt!;zJGp2rP~-n!sw^Use8fA{6^BK#G)-K8@q^ik0LD%2owz??7?)M zSDwNAeEeJ$+EHb^K&nxtE7$BWIbBSBAKa7|r-!l~0w3?Ps0%kysEW9UkR^+H&ZcM< z{{XZo3jR9Sr4h#N$jb0qoHHMGQTZ->`4c$P9&$7e?;R4=jqU#cAW>?$e=l$=RFq=a_LxcDquFY{#!4qJJ4QRPVEa z7hI4grsM1QjdJ-!3pjayVTDs~o}%w1UP-(@=d*(-axikPmH`S>qkX*YYuP)GY&NrF z1JeMzV@g#iexN@AP!_X8gNvB5!|%vxU%$+&4xcAr3Lshn?f(EU$^h5SSQFMU#~+DQ zZyMi(4(VtvQ%*U4;0lR%v4>>^Z~2@6Lb>wgKA}VkCo$1bsFsB4?iWnwmy!>M{YI=j zSuc2Rr-+>me|wZky6Nm}YONWDUl#;!o}t^nKEMqe)yjg`4G9Zv$Ph1qE8=h0;uTeV7*O$f5qoaa9q;SzFLP%N?IS!9wnwU$c??Lx3O5D(a5*A;RqD7YF|U zVkk|qLY>MB7O%1;4j5v0{z%(Qt{~S26y#zkH4%FsBL!VIcRCH^0o9X`{{U#9 z`3IFtEHA6@m(?=`+fgW%S%kp2@@^^tO~vlNa;VBKczY@ZWyA!%iRqk88ziRdiOM&` zYj5)dSY^QB?~&Htyv!I@{$p($a`z3`yUs^GR93EwpO+c*#p#^Q=)3&Q2dPU>#76sN zvB-U3BaLi+mjO#(*HcuK?6I#O`#Tw6ExX*KX4@1wRIv~B+z!&qX(G9tp3BZ|<%bR2 zt(8Ht7fNv+LET5%WpvZnoLvy-U{&!4M`@NC_F{+IxB$jLIlr2Z;3nsU&CRGLlEwvF zn-#Az$!)nny5>-|!#M;>U>&&rBUg+9i?o1&YjvbTe4QlUK1Yw42lDqEIESAm8yEOt zZXTuQ2EZ4Z9;U?~{w0V|K203C;#sx(f`%xS_%1he7jrsx7y-`fzq3@;eS#vgxnVxn zQp?l4U1R|8rV5H3;#=aFS+_P9=UE3Y(U#k{=`jnZ@A!_CFCOCKdhf}lF9u2*Y4~>p zHk=wX+Z8x!wkvcNwR7=*wMtD9&P*Eo9hRDL#H2R6#m|zws1Gsa2%J zok2}(`S^(61-9Qe8Wmk;MqN!i^_D%G$Fl2{#(fD^luW1P{K`u%=Q7cmKdH_Gf#v;T z;0HBzI}YobnX7`qQkIw5zTzL^BK%zXf{j<^1@kFtVbM9NYho)sW;w#H%L{dU#+KI- zv&dNH`MJ<1D5xoIR-lynO%x7YeU$*Jc!e&?g?%)l3V<&;l-f(O)9lmh%KH@93Wnhe zyXQZM0ZQkYe2t?NRcgYDJ4nE~?&2z&E!9;r&0T(?X#$!1{K4QZ?eiK!IlyPbYsH;- z&XyGPdjvsM=erwzc?dSq^=Bnkdc?6Ac)ws(@m0jHDXV{pVwcT>T*?8pw_D8G-I#op z*CU|?FrnmzJJq;lX;oxKt*<(TT`#LYn1+__T-bdOLjzjMG(AtW8SJQ9_!FH8fuu2P z=lEem(PGP2*286Ar?)I3^!&?G-2wcnGdoP~Z@9|$~dM07dQHUMd^eo87iU(7zu z{Y+}X?zsK3*ca$SR^4?0R;#;s#B^ex9CtVbD8Z;TDgA$vav^UDD3)7k&T$P6XZDt~ zuwQ>+RjeJ|OHU2v&8gC@7(B}e@mt8)C0i5Orc5t7fCBb{E{CC1=P4b7hY1{7=DQ3`sm9C zA4pZz_fnPn?HFiicIx4BBP#%XLCK zETQEhvdTZV@hT+iAS?&N0cUr1^8y|=-`r?5E3RR7yh0g1ar>EG4nY;9>qo2bjYG8d z$_vYTuBFOtailR3=31ey(;u$BOKGOOen3QNMMbq7e9D#TuM73LLvIN#gM5cy;s7PL z0m;gmyV2|Ku~pMmS#r;kt38VFIQ|oWuoeQ%;gQ-4tu5*hRyM?Gd{$p@Lc;5V+G2nz z8u7#SG@7fF+^Ks|sarewQA^|~Z>eiGc2*U3%y=Pd$hw1R@8>X-0{n20m;V6A$S$Hd zrYe(BZIB1|aN|^egdK|a<-(e^T`U7(dEDw@uxp0kElS`e0n+u^D5SNr;#`)|Ron$( zxu0dR6ew&$vVp%yQF}=gp>4R!W2FYVV7R4K*TNPH^vwf&ys>Z7HxP;R0LQ+b# z;9JHN3przCRae@Kmr_LQLItCU*q4?FKZlaxy17gWisi%Px)v^x#5Q$tGp-dG&^>TK?^RGnExtQ8 zTCF4C7kT)I+gh^;bZNY`bBK`boW!Z+@oZ_rnp-%?P74k=v$=A33fKr!bZ^olTS}tV z1Iv8ZP&9-ePVNK&%_}Y1GL|2SL{?GxZ;*?{K&|I^jcVeX)Em(JWfH!Wb&;*p zDbs&=)f97&vei@v3mb7y$94Xq)S{k;?%0s_Afa6fdwdDDG->Ys#N*mi*xL-D+2ER&cx$5<|$||rRazjp?Ri#xGErVSM#zc z38#V3uYWNr0CTYjG(2gq#OexI*Y=#SbB71!SW}ZW=MjzP4~T{;DG z9an&2?k48H3uFPeJNUo_08jq_BZ|!ngQUC5{-6!@=fttI^d~he2LiZ(EC!JB{esl! z{wfqEp(vTl&-4M(!XKzyzL!y5oxj}w08+sPmw#h}K=I@hTb|BD_6tsyhl8wx6}T2k zMN)r}+`D$ibbu-Yjg_K>vzGv-4c2K^@en3@rwl~dFDmFehXu*+e_=|aZQqHzho5!; z()j&5Z?_>=&bH3lis!%recnA=#mc50O$8wMeQGfXmEpVCCpav3`#IORD!~*N- z_lZt-o0SS7MxXL+7W;jSY6brQu8C9yKZ#xTZZBe>asL2O2dd@{ZDTK{0v7prTGzQm zvn^WUpj-`h^`1-MWvZI+4o8(KBB@6#1C@MA4qWA$LvYJ`yvu}73h=BMfZmJ%A?RQBJfApm`j=wp<@m?cE!T3*mRm@O-2-Gm7B3&N&8mb@`6>|g zJ4T(KnWCzwp}BOgf~R=^+B996HO`~KpNNM!TW~#y%I-8PKKCAv8F9cM;C(w_0!%1V zvDbV6i~tHO_n0W79sDM%Eat08*?f&r$JSCCOahhP85799t|Z&RRrQRaEZsOg&58;;-4?_Ssd^rGeTMGLcDR}wFu_wopK@2FYgcv>6Wn9 zV5+eqWXm9 z=EMVS45T$WC?UTHh zG~yhHS>$l#WfiPOv&tb|6Nev}U)lz5^9JkH!s2x}v6SSdo0?MrdE6X$OgsF_tHw~d z)V>Ox9bQFUzh_-!we;5!w_am>17Dh#IxvNBXLKjnmfQovk`(^{3n-I?AppBr7_N*> zP@a?Z1k*p6d3@9i-F%Lsl||HQuJT$L&nj#d%v$m1^8-MCOK;>V`Ta(en3TGxy)vO@ zr8mXP9`mWRXLGGKe@! zwq4_&A}cpun22m0jZm)bXDb&Ru_;2RDVcCa!11h4d*O$7KN8TYjcAoRk8^KjTHS$e zYp$k88~)Oax_;nr4d!j0Hsw%h3d84XDW=zwt(!y-S|I_efBBXas(psW!#V0FLuqOY z7U-dvS~tDJc%^YDS5^0@4wds^*}}N|%^fju;+6m!xnw-6zT)gJdjL}J{h4cOT_=S_ zU>$Z#Kf=K%r|sI8Ls+jSn^a%}w&fR%lAT>%Q!9{M?KozV7VOJir0Xd1Xs7iD+c{Aj z9<$_b!KaKA7YFxtOSZ}=HW&Da?@cqKFDxj5aV{7jZ;{7EMuVMMQg6{V^VwfA@h~%eD#D&geYT-{F^BxK) zIlJOC-<#4q!;U7ds^*|LT^7pLH-9Gvl{O0bt9XGCIxJdIOc&VWHGG|sq2!miY=4g# z#j#^4u(f<_duNoMleb{)l=;Ee*cD=XL7?gX085s&Kc$Ej9FO+yR#5rWy0b@C0AhoZ z{{YD?M!%jI8e40+l{-Q}#?0>W&y2Gi*YAcC(Ocz~yszpm#a4^R&ar4S+fzkW_yDf z@hIb~mO|R-OtyE2##;HbypQF-^%q(5@b!r>M4?4oe1T)z%Q!knZWMK<2v@%Q1lAv! zYka6a+^3Yl-s;Dp+Vkr^YL}gpJ5`2})8u?|q@u0R`4&S}v)YWSA8)7$v!fR_I(vo& zxxPA>`tX2+y#7o@-s<3u7t8(_1S4Uf7Kqnd3%tv(CHV0Y6urR;C|h~lMI2;G6g1@m zi)DA*G!&v~MX>S#%?DzYOBFvZy+yFLdD_Zj_rLQUrGEW~5r-x{TBlRjPLDxF&E+l>h2 zMw?%lhBZ!|SLOm!`7Ty*#@ma61nv+WmM3JP8Y~v_7J7VoBG==3If4dO-|;B64N658 zZ1?^maCo=&RXw&Zo+Em0bQM6uywTy)W_P=sL!r-x{mAic{3JN!9#|tGevHk9XEt!1WlW zXT8K-tmNk6D#R^#gG-0c+JnUxW5|mUlDV-&0UkbRCiuWO4yt#f)MfY)ihxphdV$@kL zj%B46cwjmxY(sBXPca2c^qWvViKSpi_KQ{ri(VoMOO*gYU)KGidlQFvx`8J#v2I#` zaDte%e(q31lLhFAT3g+Ptu;>gR1~&%_*?{WfnP|05L17K09Vw{l@$f2!`N689UfPa zN%F36fo$Q7cz{(reqmSx%G^H)E4cTvy^E?*7NEfmxlj6(>B@HLAwjvFH}cCW^}`XZ z{{XkdC??V2q(N;5&Z;4*1MwD$t~xF}a;w%^xw`Oxz+G^5Uy;-={L~)Gl%gC!92zl& z;A+jax9oFJh4r++OEbf7P#94QE;jO!@5yDAPXXRd8^{O7Hcl^)nkmoYV`bS|m(5F# zDXPPUH7m8xG-)}b-{N?U3_@?7T==0NfU`*wVrP`c@eKyYUU`vJwG zh+7JzWeS?A_>0ojf&T!4R@he4_Wnj2rd#*q4W%5A?%-S%ef0!QGnhCiA+NDMhVwWj zE)BO5j0&h&aA{nd@^ENI1{UpSyX+8&W!QY~1^ET-azRD8yArQAgNT-cmC|+}?om2T zd*&)%J>JT#=LnL3ny=zBpz*&5JbAR|A!xW9aIdpyru0i2&K;dawoXXAz}>gX3XO%2 zdL~#KQ_e<`QSXo@mKr+zqAH8RzIMj&6gTV*-;G`BPhzmAB|=r)aFb4`x9QbI1BK1w zkN}Fa^Sv;x+$h^z%RvQP@2G;-vQc!@(2Kk)sk_v^^%Vf&q$a6StiP=0P8bI=?o_L~ zcpw1L;CK0!w4}Ol@g(dC&WeqZBToqP|o*j}bsHw0QI; zjq9I35`xW9e3QN(u)24z+*$%^^guRXr}^L_Epl=vWI7IB1LW10 z-!)P4v(5Yrc5+LnNcXxP5_l?NgBd0O6Y))t*x?2&hksaTiSv)KawKHs34d znjWRW>Are>hNiF4jxw+z=^S}CXMp5l)ny&NHe-SI{fKXl5w*7*o0g56DYyW3vtH(J z6LU6n*zVZ#$-qljUO*$$b=a9xlWZG|_5T2f0F74X$)S94YT3fM@8l`t$-vc*5|+9U zxuz8FFUY81scYRByaucFzhjK1xpG|ODA0jae-|1nx`<$}kve7m7%8PZ`c%WbaoCoe zq~|7HrjR14&`Pf2SY6iuPDO=mDArXqjmC~$JVgri?p_bAm@7WQmg@TQbO82{5QQsu zeXt4bYYN)DDG;KIYT{Nm`f(`&anz#<=PX{BR+ejCL7?q0MqTbiPI6uJl7=gE(&jV< zo%|W(!c=b|!F6TM7CO+jC<^{(I9a%)t4y^>3f{k#Aye02u>~ITPFGE&5#?7h)F-zB zlIqv!n0Q~~sZ<-*z%b;60bp5Uzw%hU0#SESqeJn(%+UNVxCXA;dX|x|B0-H@R0H{e z?U&TeS$xwh^p?54!u3~cPuOSIyXq)u=h7jURLWY}@^fn6IGXwV{oO;k=8kp~FIerWQl~8QD4CRT=aLsg-b_=1NPS`bHdyQ*( zI2C380EngG`h~bZ@?hh6C6pz`=$&vdS_ROpl$pTtTkIFNxmy1KGxA5QsNk)~VXJS5 zt=6s${G6=nJ*Qnm=aC!ds4;n(Ey^CCIYb@j5i$)Am-~WOS?n>3{vuMu+Ll@yY8CB| zeZjlxTjJIxZae0u0f@10h>F)|3?GQq<`5d^SZ04LUlP-zDjZZwFZ)Dp{kXnQf>njL zM;*Z6RgEH?)#p;hb|+#tEKYIYg79y6gnnCouyB?qa^0;Zgq3Plt$u&&0)b080K(i~ za{2?Y^@B!-<(b(kzojQ4#`s@Jc9#5!TnGL@)s-&X=H-AfCAELa0qM@-HBx9V4<`^U zH;A;~{zMk0{9wIRAFYM3!p^uN+j#8G<9Mz)iYsn5wmsf`gIf8B2?E}{sZ{jx`7vpK zzha_Fsb)ukIO#>6(m_+}vEr?zjG08c1fh3vdgG{zT6TPtD67u5ZAwA>#4V00x!Hbj z+Wf?`jNsxp0-V9(B{#r1c#Yj3A$_hml!Kll(zN1GuBmkaYdLKB9}YQ>BVQkn80%FA zer2i8kt@K;wp(VGX~Zmq7KEh~;;pc?9n03Ncx=3q7ufvf3ZlWFi*H}-gEYm<6E_Zc zh1Hq&{Su*K)Oq&h4V-qwd3`b{q_Z`0EPJz>fNLIzs9b1(Eq8IVAU@^AvxCd*0wUJm zzupUge%?Zq93SE?%1`?(?vGwj*<0AyMvJ`S*GYn#dO%A@34 zil;0nJyRLbw};4$R#r>B?SE+C3x&JH{#TTB5Ly;{E0&GSxOR8Bb)ckx{{Vz-3*D%+ zqww)aIaa*O4i~o+fvWQ{r~d#-gGO#|1=HB+Ep@|7qfrttB9x1t$tu$v~=&`BVAfTD#o~i&e>H}IaU|;>QDyO{4%?5zh$<- zaRm(mG-zpM2-;pKm~P&kKTsVxP^H8W0u6wC!aL`xCl$G{HcDcV(1T-Jaq+1;VSw+Rryufs(c?O(0pJQ5=V5n_O2E6V* z)cWMpBddHEam=u4n)8@tDBmApRYg9RIa#9IJSWbI+It6s@5AH`=&m-`qA!R*YqDLm ztM;-YEU$c=ygj%pHt_sQRi&x+;))Wv{$dO{s}15(BTat=fQ38MOEy(k{>n@^{{T{f z3VW_9GMZ!Okq9_9(F$)>d^{Hp_#MT4ICg6dhD?p$U^q4b0bds_MO81m+ZIV%4m_FD zUpJ2>-zDogp6%n)wrTWIr9q{)R3L0~%X$^ya@Q9nPEcO%* zSKWT)h1=Vc2JVT%o$oRMpl_Et@(q(~{$Q^ny9PE>D^0Da_8jkvCM=e+o+cYzfAY>P zpX7@aSa}#-s@+L?0Y_@<$gL3ev$z~>Z6|Xy8A?RZi(az`Snyzp;5qhL^czkSsH8S> zUdz_ipXT5lH0CagyoFas`XB%_T)aqx*-`%h%vJ`gc_VK5YT|BS4>|qBiz~(ZP%Z0P zoXn|D=gCkWenrg&sD%Snqpw-wDZ~b~RW^T!01pOv0bf?HUzjb|yU!D1){*djAgR!-u4)Jkx&8Jn zscrt15D{$m6G|@BJRlT7Rf=pi3miWPqLpie*@ZLcX>+!Gp39mFyBut8paJ))x=FcWVtCCcBI5Gg_V0eY1ZmwfkUl8LT!mejTe z_baO+i7TEb5AsfL*gkbvIsC*RpDE38OhGi%r16&A8m5WLRc8^=N9THgFyDW#vB`Eh z;oU=rn{1%vC_H^7g>4$E{{ZYIaVwag8`rUO(x|w(`;@Q4h}UYjs9MXg*sd%oIQta} zFF?ERxZqxjpy2xWKplj?8w#VcT-5NNB;oBF;45^9zvJDK0vDh5g0YPMF>A5ir9bg29%## zfWAZ5!Uw*y%ehTwJ$X-1J*_&A03 zJc7f*#5f4HwA^@v-os(C04qQ26xtsAin_aF^TqyURT`$>!`Wj>H*Ndm?A6}@t38&| z=N10|Fe!?;uHYxf;m6pufa$+T7I_1DE)lb3mkoDC7+w&X^Q4rj(e3vbCo-JUpr-j- z`}Sl+*mH=hoQ{9>+!COtcJ?vNn3t@vK9kjpBF>##64Sxs#wF_3tWu0P ze-g+C3-A2OEbx7NfSA?!5I{6%&*E)Xh=j1vI!LIlVBhDa001Z+dHlnISE-?)7GKmG zWwkz%T@6sQ(yQzn#A?CfC4LFH+)~nw8u`?A0QpZ|)BzaTo0F1Su2hy)%FZ=_8d6dZKN0lR==&{O zYu@)!Rp>Y>Ar!h3MGLw-v&f>VR_myloQsNk8xdOY-jw4|4!>B746Kb>M02>WRCkESj6&)b^pP5&TD=um^MSkN( zfV4_*Shjlm1Xe|~47Yd}61Y8E4V7RvzD{0?D+*InRobT=GXDT>qos>~+-l)tABR%5 zQE$kH1ptJ@TOQ!2IT|fL8#t9p8~Q()iAh6el9q?dD?5~JT37o;Mi;C90C80cyQ^DY ztacW+`~G98Z9%dW!*1od8rJmtElA(%*pZx>_(ZMyEbndWFpbec81Ny!J1GZV{{YmW zud3Nv-Ik2+47e_pOQgr{%dx5k>GBW^ZR{+!m%J((7vM3WT|eBR1G~G3Y}a#$7OXnT zuafwu4Mk1-%VxMnuW**IfpoK2P+H5mftF3-woh`u9Y-kg2gtAH8uOs`Zxg&At!(Bh z)!E!Wy5#xkjBXE-1CZ5KB7EoY^+v zyX3(mbYE}8r2hbGJeUU164)SGIrV0z~@sUEIq1~%XZx!5pV5wK|&iS z{@-DxwD#^){x%4QF9I85d(j1=C53%qW3q@*OsZ=!_E1>wKQh>3?aQ;{-xDpN@(r;3 zwQ`5yvftYAa}N+U;tJv!G;FHkBXxPvDckZ{Uw(HmH?QpjR`R<A4zq?-x0?5 z13I&q6yqw5<^?MTaPy%M+~y%(p$mgOMnG&P&%qx3Wc5I(yf90rzP0>UsC|^ zi93QXLP1l+G_r6E?%{*>6NQQNnl_g&+n6|!>k)~8d4nV5Tkw16o!M(N3y$Z z&W_+25vT{J_RQyqzO{0xs%qm?FK$xa@Wt{c_SE?5G$nSMGv4FT8C6`y-L)xK#BZqZ z#zlJUfDxmZ-LkzunN@4W!7k2UWtFLJJYoyUS+fd#KlW(HSy4sRdn(o`e|zo^8De(< zhuqmup?mow_=|`I5m`QA(PtNcr*3ck5z-xYdU zy=vMesYmi`LAvXh73=|`Xjd;~0Hd3}->_(8{^KQ{D=lMeA98Y9(TBtJa_YmH>t)AQ zoYVvOT|FhMjQ8XPDR+IazE|)f(N^uBAiGw<-oRZI1w?2aU6gXS01~d+^>BGt;w#cA zOLY}!LpT00aZ?+~VjQ#kN~`?5A%M-beEA9op46piADCw7u;z%V_b@=E2aqAaf%k2votdJg*@`g`w|UCx%7!qaCI3deq>6Cm-wZc*!Q#1=F zjw{ao!os=3^c>3tI8RGsvMdYPY09;?~VQ=#~ z3zt&Ln}9k9kxvcXZL#JZ`5N~x_=94lJ>sL}7V#3)^X28sAhF6u{_=*l{{ZB=7~#Lf zMRw;hmabC#;u`+|mh<)ub_O&beUF|*-;M1?TD&-`u>VJX-psHX}#R~wQT>$UH*fo=ef7Ea&vQ$y(*o_4P!!@Vy zC7$KzdE}+8%cE)#?Ednv;l})eN`G$X_I2l<)yJjXJAFWQZFg8)bOl}AF=BPdv?yBQ z;rtk#Ar=RLQ!WbT3rh3v;&Y&O->^_?Z0n|2;k>W?%iApPH2G1p9nVuA-!E_0cDwXE zveg{1o0mnSu|(iWtKDLE{+yE!AnzqsKuH*!^^3*4rKZSp;U zHL#USv{-n10)o_4axB)ez6Yh1I1;k!34+7dGiu(g#`!LuEsU&d*DxBRvVN^1|f^BPgIQ&X5bjiq$Z&ot8S`~3ppjy!L3B!B2&P%YT zE+w_4o(NDWD zODV;$QeEjD0dTYw!W^sBe27hz#Xa<~110_+?#4lNc`V`q{{YtpRaHfWHyvx6Gr7Qu zu3d)H(N_Y~G*i^IUKZCsC2|J2T{4w={ww6#{xj9-&K{kXC{ez`U7cc!i|KdtfuVITnSCjpK0sjfx7UziDD10hDIC`!JN1ZY7_@b-Y!#(&D~k3jh#aIz zbLG7Lh?}u(WU#BXw>gcQR89lV$+TI9@Pf*w{$|9x?+?jAY6|%Vfz!UAvc+3#!1h`( z&kL0#WwB%UmIO2hYlbOi{{Z$nq&~0qT&9M(;x|Q8^5vpeTI=x|ViJob^(7kirw&z5 zt(Jf&;$vLY9i1Ha`ui$@qw)@Pqj>4+SgFf9vIa#DYtmTtO??ls7sTEd%Qgw4zrNJ7 zWl@?!OxFkwPM7h`{$nw&pP00Qa=+48Q3y0OR}-!6yTL3Acikmk*KZF{Lk@0&Ehdm{ z?XheY{MSrJR0DnMh{2`scz0?|) zZo42hcl|?vC^htoTneq{J`owVD%aj30p*?8F3tVRM=$*#wz1p#fGn!A;EM2}aB3RC z`5T}uh;JRjgI9bXK1QPj`va1!OYlC*Y%N_kmi8X7(zg9S%&w@}dO@R)zRd`54K4^( z^UEpr14nD18FNy#=WR>T@8#wqs}A?A%XQGGI4;_%>4B^4{tS#A4yl*W3LD;_9h7Aq zF?Q@Qx`092hZ`DzWwIlDBO0Q#x$bV72%LpoSJG)kV(+09^)81Dp%rc{C*`Ks&ZA<8 zy(TU3{h;Vwy^|+!P2EFQ*7&tfRJM8Jaykm0-_a0;gtKOYlt{N7XlAdGYZ|Ydm zto|jMHQ&sLunA6)-Vs{En5_p~ePSzp6Xb1c^(fkK{$p+&bmHb5816YNcC{<)9m2UH zE%4yUU@KocfL-?b60exXu0`MnPp6FJIzNKqVMU|8%8CH}_68Rt^5jXfx0KvLHtRk5 z%BI-i_=V>a9bg zR6fgDba03wkQD>QV`Kr~RoNR^_BiGYm&6pDAdDea398yohb&4PVl6m`KBxkVcVyDZiDP{5(dDQw=t z4YbxgM$Lv$lN+quYFznVZ z5&r;8z*N8G6QJhqBirjUm{s2vY__Cu14H{NTi}3rF78}M81`M^IV7Do*oF#yXxDYL;KW9TPV?Zq-0>U~tFmtBdir+p>2=ic+P;E-MlXL;! zIWfVK!DpO%0?q5)L34OP7N}qptPgp<;;F~`flv43s&J!`Y-nf>FxUv);#eLmulFpq zBbyb`f3Ie4V|Ul_Em6k)x zMVwu85$fGc28G1}`elRoizsS~fiB4SD`U<$Xw*76xOehk)Gh^HSCdA931YyeXE!X@ zB)S}5F)$3hi%nFz=zq8|KFpj&?gZiHc`pa1CFPY2t9s_97f?dh(G!cpB{pvm_dd== ze`wnTbC0lYo=Y9#Sh`l!ylY5@>;4jRGiEC7tDv|<94xK zFm9NDotM9Prf5#V9DR*0rD}0qK(YWi&ytI(Cv$FXH~#=7s`&9X)Lla?tc5h+<0f_! z>pxTV%<7$#GNKgG3jYAIi!Bai6?u0y$d*~!tMM2vryWWHI;R*8w{c3iUfkgN!tM*R zD(iZkCpX3c3G7ylTMMD-fr~Bj2kYdms^WPpKS^GhYY!cD3#RV-^YI$e%7gu$r5TO8 zcNdvjSz47A>pb#RK0N;bY!iXsOj5hGdFlge{{Yeg*gSIv&iI46pO`m7jbrbSa`f^S zOMb>(Rz<+_)JQ42iF#wE?acQfQx}Q!Hz;-jU7Ii~@rVm9xQD%opc}Pybu3D&uKoJ~ zNn**sXA?({81lsb0KZ@>_+NVgEVQvffA&$xH|$PoutG2M0@rsD3JGr0un(UZVw7nD z-mNt*TAg8|d7Tdup0()+u6+A7`MU_Wp#K2&E;nv1(Y4ztMlY)1oLk2V2LoNdNTX{# z>t+{$?i3~PU^9DTvt_sVDy0p3dg5mqF zuA*4Id6ZAi=a6pkdxQd0_1cy@eD2VzH9|&Ir)^`j9pQ?6XF~IHr7Q7<$KwRIFDY$ zGKCH!+`Hu?#I~R>gRt|UUORzwvdCGW9QARoG1%N|OCQ`#D_ezV8P37N3|3kBnyC_sKM@oVTK@nLc=TSnjipOWg)cM;Nmaqm1ZdjpxLD9| z^8)-(^BS>k==nH1^!mkMa)DJFN`sBh;tExuc)mhBal$GQ{Ksj(gfYl9iQk@p9zCy4Hz4A+332e?M zMZ(_+p+>I?Y9^?y;571T2o=M;?6nWQ1+v1H!;LAT&=fLITn zFc=D3p%v=SkXBm*Q`QwpNY#%u_A3s6OT2rQ0@b^|rBp1Tza>d`!^sIpmt9IGtEH*2 z4&&@93cIz7VmF3t1p~Fo><@gWB(fj{C*_7#EP3GGWsEegh|=-nV#TJqe;Iw*{8f%$t1-{E37Eyo! z%cAmH*sSg1poY%qV@mOIhiMVaE~x0AfUjHlkf2*Yxqru#bS{aS{w`ZD%I-8fr?_1< ztLxO_72wn^u%*LpHTtLQ8T7^X*rJ_taSt?~jfc?Foy4M1wpHOPB^ojXg*W+> zPr?3WIOv~>g>6>9!6+)ZyXGfP8haO1;;%0K8h}@0K<|=@GOI3W2a4_ci-AMlC!q29 z_)4YLIb{K3D}!QUzm{Yz&w2jQ1BSz{lL5hU;0o9Ado8u$%lMWR>mtI`VQSpaxkWTs z)hFfFS8=an@1=Z=baz53)4FOFE8&?MB7piN&FH?$ELDhqtKpW?)4i{dRE0Tq7{vkpm=`Q$lGeV zSCJL+3ms*cXm!#MIS0C|KN5qmbKOc(yU1T&!G+{-_9Ct2yRE>2>n~SP3t5i2j4I!0 z?6ec`1ma@N3LCtQND6e`Uf2(3PkfOw)u(~v>ND?uBW!wgzswOV)m?M23u2>>#6lmz z<6mP{^x@@9iWb6`y6PIVG*bHcAIMq*ElUT3rU6B+8o6JPy*zwnn(erJfP=zDi~K-w5j8`;# zj<(B5d=rqbf%X84-8b9e84CTg7VL}=#H zQqeSFsU=YtgnM53pJ%WGT}5@HqB*HzSjJ{Cyf(GD4Q@}$2wQi}n+$v(ya1e+uH|*vnEpyov3k%qG?ev{w zq;O*nA~x|x<-tcjBPUmArNkF5@i8d2=gGRTC)myr#SHilPD*e&P#YW%s9y4W%0M z&Y9?2xBmc)wGVaX7Fl2X@-bdd0k;a?2dAtoqVN9zC8)Zz=H-i3{B<9Y&_UuwV(fSx zNmh5C*uZdLU0sl{bgkbc2I<1o?@!~&lbYKl5Xb!{?`5iq)wf;@$RN4Pm+sE%M%=vs zOUv=u&juAbiP~*qvZfpV0OX`z{(EJttH=+`ZH=@_7X1we-6s0lUsw*zjIU zs^`^LP<2#%dzq%bF?8{J7K>W%o1B&^y~^(G`OH@7#1z$KBUfP<6}ON8pc>Mp1-QT7 z;=2v~5OLfgaOQ#@55?&)7@jOBO$ROp)nFC)u>gh*mE-`n4*vi!cU}9$Rui%hYYMmk zQ>F_VUaPig4`WofSrVc_5#^L~Wv+aMXmwB(z8~Fy0}nlk_!EKWvbW8h!-PsTYxqql zn(8Khg@ITZIfbQvEyt5Uqwq2fYV^5zn_@`_HD#W>Q!6Ah-QnG zN^ks^gKw#;{a@JZ+2s=UnHo`B-M}z3Jh3&^6LF)7NaPc$7*n-t7g(2!pw*oH)Z zhG|wQ)E2bD)yhQe_F!yY_YhmsrUkij?gWKw%82?b`bOfv3n=8@8N{_J^V}-_e2E?L{K$*QsG|PEgSykE8>9J_ejjD9vxMbsxFY!lawa|%1V8PgxgWOQFKTyL3cJdOP znHLpu)+vX{YvKe|(cDa`fKiN~Sd~!H(?29t9Ry1QTe0SGw+>uE0eAQQMBh&815E=u znf_r;caBd~+WP{3aXD|{%v)zC3kz<*^>ah74MK(!dWzMiRwK_9D9Z0*A+hoRF8j>b zspww7&!6r!VO(SjpVGB4Zz0Lt=MY2Q-a9;P(J=%I?J zMgAhD(&}hh`uu;$q4&tzfF<$Y<`f_^vKG$DKbs|wBiNcP`xPW%+ z@7TF+VWCtB#rN#fL-+9$Wg4>%qgGZvWk#oA`k7WNd;b7zTd3!VXj?|-C0a`SY%fRg z2MC?2X$H@esbTk;haA1b{6}K3Dl0N-cfnC9ACecgYx%fgU*{!n8QkSwF8=^K78eJ(>-2x1T06K%mY>s9k>gLF-S17Wesxa$DV2LtY2Y zKObR*p%%6vKKk1q7*?aHEuGRF2RmoUFnhyDe z1F>Ui>8MI2LWodV(#5-Bb|6476iM1$fPh6)|9e z*XP(HYOX|!c0Dd{Q1INLZ5&;HVs6;+zT&q9{E!4SjJ~{iZb~n+*y9GSQWtL21TEUy z;rzzJEh&e{X3Z7l+%3`0E$SCVsbzT;wQkJ9sJdLW>DJ%grPV1=`mc;zo}F!hsTkpM-kan{yl?U$;w`#qB&punlOCeWxmh%1iFg-B#3lE%${vl)ISGGm83Y1r| z60`@sLRA{#$M}U5HoS%dr7SiH9(U{jr#DpbUJ<6`6X!K9N?Q-^!i~7DX*M+=WmtMe zWf_6SH*I%zAAOdyk`}<@%jb{*P5M+q+sE6xt;<3vLk^ju#IPtl!_(E-QS0&f%Ei$#uaed=13h3&cfBkf98cwdz|;ENSn0$d6OaxIeH7h~o_R+hT#DL(RmX>Nm? zfhaf{eZJ-0lUH7mRG>i%%1Ra)8buL)+!fyYDSK1hcQ1Rx!qNGIYTO_j0Kq^$zgFfKOmB2tzkWd`mUCSH z0C`sFV#^Y)0ZnVynFiT*v3Uy(*mLLFjwYV-kFwKRqElQD64u1$Q<2M~zszhF@n_qb z&v^992p@{fisUC}N6Fya;pFl<9>Hn+a}xuFG+jisW^MEG7*`>oYyHC16^^ET9O9a0 zphll%f{Yt(@&GAo;B{mjl;CeW)Bxn5uS@t{Q-k3=z=s*jC%e z{{Roji4eD)>THFFD&UnI7fFb}PD8;QD&njO$$LpE!^Ycv4l6DoPM%8X{K~Q8rr+vX z-)=*WdL~Y)w7y{mnUq&>Bm6E6qOW>FtF#O=L}p*F>h)x!-jQ)x0HztwkpaFZBhaZAJR?6K&pC<00yo3w(9d zC~WZ6C$R7r1U9>dmV%$`z-$+3Z~cnYS5Z}uF2-5iNtW{(%ZllESFHWZVC}Py@dOdj zW%E;GS}8|USxR=j`2fq+U96*lb!NZjQr92lQP()`J1i`+yo!T7@?x&S&(!7ZU-$_@ z0)v@acPg>h1o4Qbo?Dc$Npon8aHGic`JkNXrKed6j-YFBotmCBXc zB%Xv%Ac0-w^2p>h@zr+3>;WIKLu!0HAz)!gjS=vn?sN2l0H6z?>=NKjN}vIL-|-YH zwM(YkmL0w`xvO*O5L-V+DIg)FkH{r+Vksub*$y1LnYki28EZxQE!{-C-X zI=&)zjv2~M8U?#twUMOMb|#mAPYmbf-)r(J$vk=+8}kWrAxy>(!VVDM}u~p1TM(xj2l&o zYzynRKBHuKn+@B%E?rSkga{Xc=%G|GF zE`(iuhT~pqxGS?6ZeqLinP;5i^DhI9*pWh-DLaG8p<)ZynrA1M{G(A^jo(af`YG<^ z*$31*JT3Dst3kiylr5$8l(!#AKw+N1McwUR6B=$PT{LOpzDkfBUP9m{mCVgGrw~g5 z?pS;}CHBzjXn0T15YvkvwE~-Uf2qKGskHApn&tUYhB$_a0$*AjJ(R!w%%$pz<%n=8 z^09+%vz7csofD;{&V8BstAW*EaevxXFAXXnP&Uk8R4{Ie`%prNAmD;pagp^5f1zd0j3Cufa>mM2Ylx_eL&b#( zuH!>q;NKZ7ad_5Uy8IU#y% zxYFJ`m9qiQBn{c>?}! zGK*bu1J@qR@=#G0@IYMTFmG60{-SW)_by+gp2BKxkp+;BY6nZUzWp9K)uk!iiF%7AI zGeu1`AQb`p#5JoOV*$e2&J&daio3~e!mi_1xN{;UrIv((pFW``IPiO=@h1$Z z(x=anca4{IJKD2qQ^oCD8l^JNc!7p-*RZ2~aj{j&S}4VC-OF25gBZ}Vo+g%Mg*P>u zyU2houVmpywyam8!^yx_R2C(<C>n>H>=L{{CajD}OS(6m@wF1NN4| zbjU%X#ykspcl=7wAIjgjaVg7TbKqzl+1^O}I!9M?Q`Ei9tV_9a0nI*iJ;W1e7=ZR%YKj1(G-PL{*sGtzD8Ap{? z#+^#%@`;P59pt!x>iT^4DjI0wuHi|>X$=d^38KZ1U=?a!U2pW*DPd3IN1 zyUi`;ePUZsUgypr8n+Fk3id|-08r+ltDY^GU_3;j#aH?I&S~M@RlsTOK=}a`wQXD+ zXzR!Li`C&j@?DxL?!NSUHKe*Mc;mQzwQc@=ngf@27Q?IeKbf0*^RN7ZjayIu0AWnr zx?Ul94ovJK+8YJ$ka1P$$!iK%i-AN;&Ut)c$&LQlo55UBQMH}m+5FLj&W{{V!lD$RqH-pJ7RDhmvL{{V_+3vW5tiRwL$M#60lPmm54Q03u=G z)BYJxtGcGZyAHX9aplsumR(_6S){|>x*^|?U>tbq4GzYo{{Scpc7*5!)~qbE`Fp=* z?a(%UAxd2a${?@uaTEnzGwT{5MABtt^nADhsH0Jx6!!EF`va4cDE30ayPLOBL0Q}5 z$dzgbA3t)ehedTQG@|@NN>^%pV>SSA8T@+yjpu_R926aY?ZPdu>m`jfs${PnRUS$q zs{1Gi9Noun5v_t?uV7vjuPa#Ld9O0d>X*umpvv~H+=eSt#^bACd( zZsz7J;e|V9-3TBwRmBimbNNefaQ^@o1=ua`RKyk2^-xfuV$&|?;B|juGB%eW06972 z?~{NUIM_OJg@ZkN?m z2Hafo7>(O^@&_xbJH>d$jz(7=JdPG$G`fH%3a(wt1S*A|5o*q#keFfuXO?je0$G;v z0ju8+;PL?w`=n{iHSws7e;vXkuFlDI92XSs6;_s8z{(=H)z0D1CA(bgK)dTtJb-|> zDE?;AY&$xIi%^YNR2md5miGZxnmK9(W4bRRO9-r|*wwckGjnyd#S-c3`a@!~8Ku04}rq!7zv?@USnR+9QQ4-r$ovIZ`IH3c#kxg3s0B0lsj1R@Hs}a_D=n0x^ZAs8 zR<|exVpIifqK&7Rtq+FaJhH<3ASfs`M-eWzHv6}Q$BtKHz{h?KrUI7>vbw25Tjx9q zemje2FNVh;l$$BAqU>J9O`@utxZt6;eAHqJUmqiO0rj{yLJs=gAaP+w^Y&Y7s;ps4 z1UJCi&DyxK{Uu$Za#uGDUkcJOKR4s+G`m2eT}9K90HJuoHZ>OMb@l;+ZPv<$#S*QJ zd;ke^3UE*I*+S`tHKjq=4O|>ojvm=|sb%H-_EUiTjcer6)>{?0LSzam)3Ly?@>{bn z?+?j+rD1e!FawoUXJ!i?Yk?JBpBa=wrv3cFi+OdO5dzm(dlSiS_W8+r;9Xh3SX#y@ zV!7S!TEIVIi+`8G04&^fxy;aBoGo=zlhebsa+idlGMv+&ktzxuA(g_ozwrV?9Vp^5 zrkHv`j9CgGT0UbLLe*wqK`hkj+G4P+82{X?qa01;tDp6 z*Bzv#S*G~rFEB*!$H_~s4mj=Mn^hbZE~#sjG)*{Z%mbTt>+%XxlyH5N8YxHwhgxCHUJTkVF#b0v81E}DX=)=Dt z5DVs%6`2tl8Vilbpg&UIF-m=#TBF9@+#Cg1ZFO<0DAhuDC||E#!o`0F5Y&hr_Z?|? zX;n2HruTMITmE%$y)N7}%;Zf9`rHQ)twG`b;JA~Hxs|pfZt#_pMK9%oE{lCS6Ibo( zQM+xp-2m6O#N@s@sO+a-=;{CfgRkxYV*;=1_5y>+kW`K`Z&4dwE%GWGB%Qm?*20s#c|}L zARM50o_Z3%dooo8BW|H}_Adg5nN8z=UPWw_zeSz*f#V(jbOw<79L6;I68 z7aGnBD!4j_ThD(Wa29fju6UTW8>wPdSLRi_=`D7%lBY$t>;nx&QTj{#?*9N$s}SOG zZC35ZlXu90>IxB5zsuHi&Gt9NN2Nl;Wm}O#9y3&WkL6X2--*3?Tz*! zb-7j4=^C1Es9?FJ+20X1vT<3HY5o&?VP&jh%nmXfjecO2mjZ}VUFpFPr;Jb-U!l zLBh%_e?;$_EA~fd!0qPYqOyk2A=36>K(!v-?U~&L*|5;v&m> zoM=iNy6w1x-VFWzpuFNBx`A%1^D#xjtjmhq3?)_ZnN^m!@|GZ!#|K zV~29I{GS3)(l$4b_beZ@1|nk)$``!UD%9L3ner`%DlbQB2X~NI9Q>3zKQVYncj6!o zBV&6~fLHJkNf+m0%CdM+N40R3 zmzYZc{(B|Tz!$lt^hIsJKZ}UjhRO=KaDfx!9tQq#2Aiw+urivxB-?71Z!x*a3ehy} z#1GAcLd`Vk?ZLX|6|jx0aQ+4$(z;nVv1*9^C2f~o-PE#xIn%Zd4?q^b&fmaH_F6G&^f$Y3VFdybUV zU1!NiiI>m#g&8vRr*TrB3YTo`wQo`Guwd}h9cjQVg_`L3==@O9i(_8S6T3i(@B`CA)vaxClo05vkLo{*uoWNSMl7i;*%4Jdh{0h z=ZM%_Z>}bq8&_K2%s5IkSCOX$P*=zC7><+tpj>cn@v{*{X%4TNz1e3jjXjep7yeXh z@}0Oe14YM`HKEBVaaCbc1%D@4YAvDO_9YPUPv5au1r8N*m>jn|ACo!`QR+HvHN*o! zMi0(me5;21&f`bb!UvAB4K?kb#6`f3>?=>$grb{IcK}(}b+PO>MsTq>NkE{otNr8> zrv7>&6_^@-(=B*$D#bazbsFK}kWu0WiYs#Yg0j>6%ZL0NOde<-XCOx3)xToe2yJIV^YYGJS_ zkMez;C%CNW3PH~?GzUu?{c@DLxl$j!Y=m}_}4!NFsV5u*^QFH zcH#MeR;+pSaT|ip^Ock}X?2eW?gzLHd?BM+zF!XD?#wT=&N^uH7>jbK`iPK;10c#7dA(G~ppt*mPvi7UKY@cg-uF74~_WuC5T}k0jIz&~{)q@m` zk=Hn-18KMZC586zOp1-Rx|F_J4w+p5aJS61LiDM};vn(RxA81mSqhD!SMH^hrQ1ho z5>Q@M@lY#b27eCWvCFqR;1F{N9QrPTV!FSvFOa(88CNE+xoOTq-mB!ZdP@5XZDEHL z{erMsoH=z3Xw#~Ck9efsqftqNW$Z!Pn&!W>vaIHQVbfGCan$5m2Mj`?b)63zHaK8KGZ!eW6{5Jh-wpgDAP%NZ!-T^I#Q0E-b78hS7p zOElFrxpC0&4n6+>lAfxcj&`Lejg|h;*EWdbN;msU1J_%F6x-*)g{-UN{iQ6X&y@>D$Dc#0AZWmrq3m9;+{%y5F7shKE#Dx zJQW(WOKbW@s4lDf!AmLk=V2V=R}Ti0^gvfQcPNel--7{5=IB|>3%%o)>_ETp^9zl~+ z&B_MtZ*vx{HRM;gHOs(9XyCuxEL-#h4fTCjFy(u;gfM-Sh+6y1>X!ZB{6tF~1t}<6 zHQ{@grHb1B0N86y4!{vYxL%lo?}ori1(;Avd0v`hV)XV4s%7=|1tPcz)iAQ!R7(ye zPy&+*Y^Ce$(9m8geo5p5r#$QB#H1UdD%F9Xlc>s?U7>NH8(d1;ma)q2ULWQ#s#h$& z8j30b`ETM<@)0WBu<&tz{=(tK-Ad?Z@<98wMmm(!R_PXkSW=^~H+gye;TsMZei$w+ zs^FKmy8hlm^p0J5_>BNHTYkV?2!XB57P?Y*7>W^ti;j&e+tjw4ac6hjP?W)>HFYUU zXxrqfYn6Cc<(!D%BX$+f$(cHEhFq-Tuf4@;Swq$^4W3}A7SW%UY`*w;QxbtyV=QSn zHF7qsj`E|aKH1;aFH1i&3Y%^;3@#u&Pfa{c;mdM#kur4WEaE-9Cik zrVG&DWf#10+~g=ZIhrsBm(~14pcKCee)}weS!)ykkKdAnd2T%METu{i@r`WZcCDCb zqMUPVEsi-4M53*is^!af;kvfjDRzhDyYgI`UIloG(7dUYLfRXGrP)G$PDwxolVAB2 zp}g~-sH+cb1;(Mg3vdknAiTm>J;z1WcgCAe`+t8cVs{%R|qawNi+;zzf(oEd*n5~ zZ(iduj;!~XRjks5Ot?(giQ8FjMAd)6u{QVn=h=D@^-u&=_8vb`7iE^zTA?rB^9=)6 z?{^c?W}QQ4Mo>g`KBlU2WJ1+w2C9jAQQSr5yI`YjH_Y~~zvpDJTi5qx1`WTJFa@{f zgtx#0&d4nsg5(6?t-_$F%D&^t+T8V(eT$8XlD{wjt%lL;DMeOP^$+4zm~q6wtBGx0 zUGdawg6xW^M!8dt+di>ct+_>}JA8$@F!nT{H@v9=ObxEwEI`(4R)|D$o-t+PcTO3i={9x16 zAdqE3>qOR&6OY08fMKKT3}U^OT?G{a!}A?)#sIn8K|<$5KdO(##yb|LyEBzsJ6!9I zB5w|&D@^zC4lTdT>z~i`rMJv!%Cfd8kfB<*%PEUxaSUHmkI@$ za)2U#Xp7{l`vIj?r;}9o7DX3KQ;OP@U*m|Yhvovm(KS--_C*~H+Rg=W-?uLMf5?Mg zZN{d*_{t^Z(Z&{AUHpP>zh1>5&5aq!u;YYYJlKJK{>%C=*ebZ45l>Y8h0xM4zO1S_ z$If6ETWN-ZirIbz{{W$i0GDz2Zwv?v)Gc&_m|wpb*>6v0ASmW4a6Q;#vjyVwreoKU zRrUTLpl~I>U>pOFzRZd&?lcW2wnUCgux%bn)BDS`ujX-Q8~j3+xV=aUO~36^Y3+B{ z;$nl2J<2b~^DPb1oJWslfy*egJ3&Gva^GA-o{8DA*5@mB*U8r0HF7<937Li{mg~m= zm2~;KpN!@$TNezR2Z#3{HrlK`iuN|l3YXlswdo8e9t>#>XY*6A2mZlh!%>yX za@VuEN0(NWc~ds4$_tLJ-F*2d*~!Vwp?>lZF1Qz=)T$odvyrMboytJ>6dQ({?j?3|@cnEN;*f{C~Nn1BW~! z=o+Hmn9+f1aLX86iOo1CGV}bb!u#<-YP5}D)-fE4j+T7+H0@TbfiAoj zpB4RSlP|<*g!3|48OfhS{DU1>n$dJ*l{Oe~N7Q=6nQiZ%GI{8@#gM+uR>{vndg%DcOODFOJI8lQWwu;ds7{{Yw>Or^J|77)6X zSE*&E1GkbPzXlK}3!|3UmywSANLgE9UX^&-;$7tD{6VBCM-s4#G_!7zxu)^@N}!^% ze3%5Yudy&$U5_wa+j>$vW&M2Ft6eRmCdWu=%mVV%@Zu^Ov#HY(%>$gm!(~x``e#%@ zKvRQz6rzjsV^z9UW7!Qw-Y5zZ%f;#-gXQ=M#kE`qGSR{7*XAHtQ27jQ?tcA+sB1Az)wEoCeTdb`0bsykIL3XH#F8OLgbU)NEtW6Mr`_^$38% zHHS>VpuO!|6Cx&Q2DGa4{Z7eMUBLjYs2*wum$-1OX?v$|b$zb=JR*a2LaGeXk%o1b-O zVVOl&Gety6gz=g-v>my(|=l-RR)^Z+4>>BBB?yuQE=Xi4jTDZDD z``9g4IiwuaErw-Fw<4MqT=-W}P?cOY%N0d9a5#qlMRXbNAM0;fA8s#m}A zUw=F6Favj#C@1t|_?POw&rEuShOuW|b$reOW$(|Vd;?ci`72uNa!~nn@3~>nN^SC2 zLZ5kv-L?M!KEbD1Z+v83>1Q0%8YhzKiy;P&D(X?oW?3DYG$jSvq;9fa!K-2Nazy>M z;m=evf0$l&cf;`!YSXIo)6hSThzc>ZJg8$d;OPc7&?wN^6f|02p$0kfln7z+iM- zv$+lt$fh6zt~O9sigs%e{%&sVYlqKB3~KAH?3daWznAs}DAcyuIB|qUw_L>yoaf8# zUWNYvmj0 z3I(H3F$z@b8_-;IRpo&XUU!2B1HO~&k za_s|-VadW>MZ48Yhoj$zb4}XfD_8xJ>95X2DA>L3O?B0WkwlDJC?LB8SX)nc*2@;P zO1>boPJa=lw|Cd(79O5)5QfkWClR#0nNsS8b?g8|uyFiw8Lro|l5VokCZ+uEpRik% zVj!!Bqvb(YU|CPfa{{9PU_7$mvgppBL2x`j@=-@OKE$q#?~zk?p;1*UcYoig*eZ_* z3guJGT6!;MlFm*LtxoN!NuSIx%g!PmYJxZ$#G1LxK1Z|i)EDTjW`6remr(xz>xfga zbVj;d0J(leyP)b>vfe8!Fxm8yfq%xwXt0E*Q|gjHu^y1Zd3mNQ@K_()@5oazm8px16L^AFQ|LU^9I}FEmfal+s6}u(TLBPkp9aC>?-lrN)dzQ&vcaCc`tEkZW!0I)v~Ie z!8!5E0Jwu&Fwx`tz;_%ux!^>({?O$jDqD5LB4=GPt4n5{$FI#mtJrPUS(8hgJDzh6 zFrrYrb;R7}Tb}%fIB-hh=UnqLpaX?vHYeF$pW-ML>l>;X@=~Ig=fCL6v1(sjY&16$&0&@;wj(sDUlXu))7N zB8%*+V=4X*eVI6CQ94$_X#ly-CP7x#vVs!9_n20B7NH9(2gPhO?Z=l)mgSi?+wLZA z!6|ytnlfUym`9oKG6@##AM-MYCq4E`*-ct0VITq6{mieqwvZF)gB30%YD3&(; zl!nd5k7?!bf}fX?-~)Mgtlg(B+bE{ai}Usz2eH_R<((1Q`gnGtfUspy z-|G7!n&@=Y4c`}UVqKw(O1`R6+8};stL|&H@&#?3#ZvRfs)I$<^#40h#ip)UxdZ|gu zT81b~cVl)-Q~*G)daomAGupnQU&Z+lUadg6BU1Wve7#16FKSuGev_5fc6Tge*Zh5n zN~Dkp+wX9n`HtnK1y^vo&Ny7P9U{=LhA}2=h@LgwM1!JuPx@IXLwc0DSHno#j>|u zlp^RZ_$6;;9X`VVucx!CjiWFt>apiC-@uAk7&gD`RF6eNPX7QOFUDvWy`ZJjS5O7l zERKWgpY;X2cs~rK7MrL6FG#)>yI!g{Lf!uW5`qzP^1%on!|1`|M#lb;3%eKhE`_ao z_FpvpB4QkyV5(Y390Qtspqy>vxOT%Jl)X8LpI$Ghx9VELo^)>=Pi*Ah?_e~&LCY{8num1q5TwVu+6cXRdtY*B`Q{6_T`QH##8Xi|hB{fQH z{3Q+*b-$J%rr%j)fD&Xv)>CnTi+%A#Ts+f*8i<7y5mV=$$e$dO{?UJzoKR1wZti-s;XF8z^ZBX;J$qC?+j?&pK2Ed__;VaMQJM( zd93r8QFPoBq7+f-WsWZS-(}zsV$XJ-{2)aSw#8N6^MAx`A`5T)!iI{z<@bJE=k6SU zDo``loNO1v1{ZML7f%7(0^;o2i0b;(7OPe^SbF*7p)@#kD0yl~U5xgcu#{J4l}30p z{$-_c_`wQoTwV%qrW{JN{-cSQU&VU`YPmg!tQ665j~Q0^z7o z({|S_bpkY@;g(dxodO_bjbKF=bawd)AZyOaSP3>SGKIBW@4Ze#qBZ;ywz92ISB)F` zjtsB3+4e2`#sS;=%nyBh{J;b^__^5rd(kR_g?H>|qg3qTDuAK?0P1L4)^9KG>j9Ke9OYt}ptDKTwJeH_uSB>q8 z05;|TCt-K@W539?^_ojL#r#eO0^0##u4(Jo+gGms`B0+YBUTaW(N%oeWB&liy|`~w ziiB2fk1pkR)^u36uZT3fTO3W!uNv2bHNg3By$PGUIy+&nF7o9?A`@nOOFVxjPF zh$f}&6%bSw91lz_%O`&!&CR^!mU7C%RAR^~ksC>`;`wJCzGi-WSQYRw{> zjkOoHL1odx$6;%Wvv)~_1DOimQQk&bZ;Dtx?SoZkhXsk!;1d^+NbwHcq}NJyp}6;K)XzVrscb&rm8uh<_|B;dj;J7ok#h8+@Wy@ zn@1HC%GW;+q`Xtc{6^d1fBPjk082{D?8-jJbNGs$$D863sB3JVG=Lzt+b43TqAOJK z9SAJ0e3=xZ6uRbeTk_~22Jd?ApwTtmOt~!J`3gGDq-)!#1557D{g-9ya<$XpDeNcq z$aGGY*Anw>z*>enPHOSKy@^0p>Pp~ybdH}mU>b7%$`lo3M+5}0>(wVs#IpQ`#wxG| znxfxo+%Xxwz-$>g5S9)b%V!qTB}kh z-!h=D?3Rl9>ReX-VDp{9vu;}~qKm#R0mbBt1$pNDCQeGIlFRs%bpHU_l(p-&avPXb zWyHSi=i*qh&U=aj-gkmB`*jMiUGXZFwseTwS*nHc4VHOdVg0X}i$b6K5TWPf=sbih zc^eYBCH317UYT7*S9E)YC2=~w_c*boM5eEJ>K%_<%b_T*d5MIl;u`08xaw;waZsg# zj`AhiABX{Wj-g-|SzgO&+tzOs(ovleX|lV~k!rk4M{z&N+Z>Y_PhzpH8q4ce91JCk<`;Hiv#gTo|jh!r%tN>Ea=_ zADFd&k|}>ofJTHJf|~273$#e|c@92|%V>|~u%MJdptd>uRBni(f!P-;c31`R{ok{l zAGg?zQ>;z}{IdH=`JE3fM7_RlJX1@DBgF`o;mj+7*A>J^DC%0*vgu?4pxPs@@Voss z;PnzCULml3*>4@AWlzKP_E^;%!47&QZzST^a)sVpUPzw-FjxrWq<&7+)E@}Y-GPSk z3${h`qE_b114t&Rq-Yk94%1_P=YGm9S!J@E;-zc1Ib*N`M>(xqt3wRpI|qTby*vx{{W-ftYPHu?c4?5 z7D{PBJ((yAT6GJl!PFb9nBq3ol>;wg9X5QiM)6sQvyWayvSh5}DxT}Rjn8lUh@@`jjulx5iOClly>rr0WiI&Q{=hae`HT2@ltfD*VXxhD z6Be^aSLBDR=f3zl$`LdQ30fn z57oeTF>+gXX}bI*DuGP2OY>zB)p7p-V@}@oWv>2GI#*;Wrpn>@^psR_@z{a1R3_d! zOsNW5E#jtBoL)_Hbp_WitiTH7GO%d&UEW!)e43jdl`oqL=@4lCI+t`@^4AP3q5KCC ztfk9l7k&MXUb3j-8!y5kC0#(p&7x~lC8oQAC1C#mGObx+n{?jq`ke`ScPyWoVWYEP zxF5$*CB0$)04BuOaDc{fuF+9xcJpOY)2=F}0CU~?Kmm2NsHF{p;Vfkey1o`IC^q0o0C~Vy%wCbX~ax z;JW0vseEYP?EyVaY?RY?92&j;Bh3|lPAE6`cP&9cOVqaN3&F1c05Dee28l|jbxiPT z644h&`%PCwa`@w@l($$#H)HavsIZM^QNVw5GCF(IKvA@RRTHc1{$Um#at=pB`F)Dk zeeHv42A01Mtn5`ja}$EtUQPwx0G&z;9C8u2f`8cAu3J7cMax6|!~mS6G3KaY7PyZ= zta%(9!h*vO+floCRQ@hl>J?E%^5)B{$@n9S)pA&YYs|QOYFVTBp5PjsT-97au|xYR zHZ1EBVfIxw5G|!6#2TSx1{QM_DN$!7b|(m9$)j7n`v4_veR)q~9vUrtm8U-6*;(t; zwkoTyCuX|?nlKETEHFF0;W~ka?V^qtz$GAQ?@(~iF~3Mrpb~1Z z8@s7(sbGM-3v=XF0=mBws8tSiC93ha_>L;M4`#c8$r#jo3fjBjjSji`0nBKn;Gaoo zSQTHGHuMMOQq83We$28LRY$W!m7IADf%w7X<=ef9iY-61N(Yqv+!Bh>Wm(AlmJ!mn zbIuw%XHijZxmDzAma@%>h1q(5>RVav!eJ%bVnWt=0bARFS0_YJp`^QlG#nM`zuX9K zfyuWY0#fn#fQV1W`-+Wm$3D!oMF=L12N~V<6JV?7hEjNZxMP8f;7-VoI)zTO()q!VM~zX;f?VuW-ZJ12rof?aRArV^nd#Xnq>*> zR)b}Y@_nWtc5k1R6!hC{N?MoAe2l6BtxE-B@VD}^m5R=oP{lz*#Xd0tr2)?tF=_@P zn*cLGFsrx8z+rXdv?csYQi6#99#G5b<%=aVj8-)iIMQ8RK`mIAMK0Ym8Qt8Vf{zrg z;YY7G>}Xa#9m>xE!16}d``5xDY!(XUO8iPqGLn)jMPb*CjY74RJ@PiRrH8H~ZJf}R z>=1HwIvcue^u&TzZ4c>$qfTS-PbX$%5`%?fBH}NULzw^kH zz}1jUFM-{PS-1Y4%U<5q+RbO-X;!?DU(s#wk-k(ZF2;h~;qqE4nNOo0EE@6T zN_+rxHT=aIrE^|Ju7ji$Krj1B7J8Nnvc1ZW15$7u8s}^C5YmBzzqv))?_yC!owE|v zcizgPaO7)n+3#LTTIeEuM`NRD_?Y>mGF*8BjiMK{lm^y~wNw$-@w8e@2SC`8}SI{*YJ>!g-b>h?gD%?waLGQT)g`ij*E@o%I+Y`VJM z*y``$EZ+@2+~_FPv(gHb0(AYD0;Er9(Ok><AU3>Pu)Yf9SdKI$ z4Y!~6R2@}*;d^*seSj|3*6syrcC4`pwr)-0+KQbx+VWXvF3w`E78~u<73w!`*Xnc0 zMQpBO`zn!J{ai!-TILq3x^lk6&N@U?6ncU*91Z|17`Aa z@eWmPXpil!^Dz*In2agcQEd}*oSgu|Ks~>;oj|9bf7BL@+K5|ved172%dtI` zTX$tboy2Qo&K6B}>|^+eLHPSEutc4b0`m_zUCb2JjQ_V!uf%()Kp;WkABLa?e=nq^28}| zjl+Up>Nbg)EQ;%^pF)kfMc;kSgzD!+sMI4|VuR)dRIs&E)N2`-kuypx#3tZf=d0WrQh8o2Ud(Yo;%CZV8rWPgf5nhq*eim{EA0T6I zW7T^XL(SPaAXU8fz`hbRENPPIbpt@qg7%7=y1t-RVf2Ow=G>)cnE}fp!SX14g;7R* zmP!pCKF%9=QpytSI)%Nih+QZZd@z37d_#*gV7FVn$}Bx|DGR^B8YTAxTz(=l^T=CU zixMZu7K1JiZbBoK?qSs>@n*v9vRj6dD!jaohE&k@+KOqF6Ufn&PH10rKxZvsXpXe zrj~1Hz@e}NILlYO!hqrdR^%QGWpp^^T`w@MiI>c3ufOP^W&C9pg|5McJmr6qQrQX& zrtab6dn<)fnU-9n{Q1@@H6@*At%W>m%v`t|+TUt$si?w+d>vdDt-1Mf{IcKQJoB{bkrYEApMi&BsTQ z+~4L}Z75Dl?;qZxT_jK+pUH?a-gaKmm!E9*B9t{hWDt2RLXGOUeES77UEM~xFTL1u z9Ac-C_XWEc=Q#aCn(HBJ^2-ms#CS^Gj@Ey;YMWbw-%zImAKbqed9@1#>Dp8{5pD`@ z!1?{I6c2r0a?!kd?qA~W>zPVx$yrz(=D*tn8%c<1Sgt8;vArEtz0|db1LygI^?lBK z{X{paud%ld%~S>Q9w%#9WU%YX6=us!sc zi#-xmC9i)`qN=W8sGFef91F>Z;f0ztaZMtt%OBX}$#R54&aKaoMP+$xxGi@s?pEz% z7ln6GuMc0rE@OTEeVpoRnMIbe`SgzOe9+W2RST3>3Oqyu^ZEQj?WDTNXtZdw8V>lr z>DbuxT{iV8fbjrG*{+jxZatB7M;}ESLjFjlxbee-bihd98DM#f+Ks?tRRm-*! zNXsAMU8HKC{K`oOIb%w^Zv230G<4O$Shw%kXoFx4e1)DtS9V){!NvTJ@2Y}U{9()N z;_I(^jXAycL3R@i{{S(qj<~<~DxHJ;!p-=+h*}3@)l_t7G`j4T2S-rwUI$Xa{_E%Q zEhTD;eiFr(6`(mixKZrcr8`T=@+Z)JSh;Bx zSgf#NW|pc@t!3HG#9K6VUW@|N_>zY0zwuBT&;D{mXt$cqW$}&HBC_%=G>HEIpC>BH zbtnQ2TjTX91$6xa1=ao(LCLyZc=-|J zxAur|Dt-_Rtq4MZ_VQdG#I_2xi(k0HI{yHkVB2hV%jOG6)wGiI6h^PoW0gX~h&+f= z>@9Kf0Py$4K`;tkUy*KF${$i_FGabRWnwWd_*FFR`w)uZhfEOcLW}*4VG2lgBhC{I z)$4xCCkoH9-Us0S0NA0a-uqBr-d_z8z#23czh#EiLguQEA_mPbvg=;mmjo4L)M>-R z_A7piy!He17ff4=mfISD7>`l9+P~w7yj$IfF>1{CTMr=Ce=&Kb4Sker$)y~9h|0wGx^&PsU zsGJ`N9Q)vav@qB81&SpvPk4n(M4yt_Pwrq{_; zrxXzE&RguV)+*Mfjnesi=FiLw1BM*${DDPT)9C*IxyuI+9PA1P-jR7ZPE16qealh!6DCNi6iHmUA_=B;g?q2}c1K(zBy61VgpjT7nX);756n%hQ z7hFSn`AJMJzPvwR+pelEg7Lq4B@l;p-}4cO->HScD1L4t3!XLClEF%OQ^pjbcHjJp zjf&2{m;)PQ{QQO{mfFA?bQ~^0MUH!byDpjc@d~^Y1kO5$t|^DCS=|+#vi7IH+6unT zQ!#e>N1q2DmzDAs2;Sg;AS)WZ&O5E;;b3ZJdC&gMB-CHaC8pWU9FQ#4woYj}loY69 z>8uO|H?Lp0-f4aEYie7A8(Lrf@@EvjqNRqez1%7TNw_UL8Lnj^fL-{(V)esx{UvPh z$24&khC1VXkpS{Xf84ZkeVUIYRd*~#pA(pJy3$of;X#dF(J2*p!^vAx?*9M~t)(?w z!eREWyYd(kf9xx|-s|78%a*8l%qaC<2QdzfQt<#vvTuy3G0l!c$2Nd3;b=Ui-acxU}6*dy~tANb|TtuU&q~Cpt zK!Is!>DZbZ!{n{Bg5G5Y4l~jtap1TjT3qgcxx&EV}Gr7c2G6Tyv0@x_o{|b0*ia7{?xvpt!u%&kLtEH=o&q~;v7|q ze3k|5!>L5@aj?)s){eg39pu5L~qV5uyzkf8@Qn z;{APrS`B)}hQ+Smu%|hxb%gX{C2h2YilBIeNtdo9HNK9HfeI6|SPc>$&0 z%cO~AqH!qE?j`E`%7`u(xDcfW%pd}9zas9Y<4&*du`HlzwbZq)iH*w9e~j5QBhNAxfCvuh5(o6yTKbct4_H4Wg<|!$w%PA?& zCpvH>O4o^LYs%`*AFu&MHdnufSe%oVDY13(U3AHLQCk}cs9K64LQLRW#NdT3MV@9> z)x_i}s0AtXmbGdjeBE%$Ek_w#%dlJq-2P{FHmN}Id$$ka7T9sr((bOC8BbXax?HO~ z6tbL;AeYyFyhYiad}7cEZ69U2Dz{I65MHCeXi7l7Kp?I1SudW5Eo)&zhkf&M!B%?~ z48W8NK4iASrR^*Huz3auHFg$_ynwCkl~rK=B~eTk_#quyH})Ne&+#dzbr$>c2{=XhYyvfRF^$Yt zVSl@r+jJkqww@t?+kKLc`x<85_vC33Eb`x7&lTDXRQLil*UI=5Y<-!fT6V!3s{O{mRRL(ySt5nXqfE@&~Tv zS6n+V^mZaE&FV`Pe6VdYG_Ugx9(0sUuf;;|qElY6dS#Vue2Z%-TXU1tO4GFlnBWXf zYw;hIUCm}glM;-5V`Lf;KQW`I=|&MVsisq<+!}be8nC;c?o##Cwnck$Gi9ovQ=684 z50C;sW%GW{EZyK6t>;?ekxR68I`e~E11VUaBpJ)G2FJOrBelP!$9JI9&Lab%(1 zn3m}q=c!oA$U$AR@|A5-w+`36Mv=$>uM1&sM*EcPDgrL)_c;qIs|ORB2t1bMv^V~K z#KN(KR==A&fO35u zLe=v-1rL2h9&hkZv1I&()unT$aW_sQQFkv@g<7}&04F-&_Gj{1N$ElU@pN_Rvk;vf z_Zxcseq+$mb8yQPJmdh4gQt~{J1kszx`j5+$r>pfd8`a~#9N+zGCW?y+urN&Lz^8) zq_+lYwIK#Q3V)J(>m4;fmlriRHD9U%32xP;}#XmZ-lLUNopSi=EfV^h^a# z6kX_HY8%fUOAjQeLFU7_(Y{8PSAIvQNu_*&uWYs$KItv-Z_@D6RAKUU3C;b z#LbPCsGBQLh#ETo05cR2JnfbzC4>;V6_(2yI$Q-;f99j*L-yr&R`mwlbSX&52eiTF z(>Si+4yCQY;BBJHi^@bhD3{9srixxxG~jW0+;@`h_oyPdJE_~Qw3~pz_=T-kFU?9I zTCs|acII^uZJd83vY&GEuObJO^^*P)`jxeetnN`%VrdZG=x}6I13OqYZlY9BI-|d` z%?j?N4^StRyhY~d;R9yA(cDx(^ZF%CkiM(36gzFGI8X|N#g;+7;$0V!iFU8S*#ir!zx>M#R>XI5 zUie3Yu)XIYVhx$i%5e*%K7cYOQ8Lh%qZb3K9Er;E3P5r09d@o6sQfKsyAVR6#%n-!PbwA zy+@l|tlG#6%=Y4ug@S(Xs0*&GKGaVkLIJg?+5M1mX$F~U`WEoWh1w`(_&|$SFaBUx zb(QNhvzPO60d`ZCIZr#o+_<;AS8EV!;GRXMY#`bOJyfC0L{CPt!m|1!PSWmFt@*KR zx%YZu#&Ykj<=Daa=Ay5#lOR~#%L*uRxXe@S@MIFcJ^2!@C$BSrCH=O-!`X1i(xp>X?6$4pqEv(zQj2`NzYthehD!??U7bS+-B&fq1kv{!8!n3|X5&6g3m41L zEK#dvI2#L{qpspN?j%`()3(4+a40^$#8m09LaE&b;?e}SmTAqil;$L&_`h;3mcE#X zTHFtk;?WtdCnL5zffNc4ZrII)+r|F?nC!QuRJ1tZN7y-PD~pMwpN@SGOSvw1&FPuU%df!`!AWGQd1&pG0chL1_<&&u@OE6ItAl)8y#Yh06EtY~kQU^4Ir5^B z7hYq%5zrego7|$(?WKH(_5l7EQq}JJ6GafZcU5uoR$V3Sl;9|7{yxe|G8CT6h;`*o zQ?LT_kjaAjT3s<7*|c(A06J-!3Y)kPbS0aW(0T#yp?h)y#D|YLV%y@c4c{a+`>}nzeWoS zs{_S^8#Y}S@q`=uWgWyO#*Z9SMzvM^lEmMoc@7Iv*>CX*w;x*WCrc?$QK3qKsWO)Q z4tKPN4rx{JL>R@RUm{?@>bGGD!K#9f-pbG00M&NA@iy9a^r?F)!|zhIsKW*n+mp?v z01A}WJ^KYV35vvCxLfC%@9{9u2SHZHWkjYY0>=aFs@=9_4&dHlV%h2V{X3Mt#`EzC zw$pg7qQKD8xlr*$FZ}{6D$hLj3h1#h@0BnhQkvWO4K_tkRJf+Sh|yO?apO1uD6o5h zrL#lN(+^}RzmKxh$#Y+hq8sm}IAbtY^ASK0Me)sqTVVEt#&dS`$D*-3?g(7QusNLX z_IDPgIMbrO!Ztc(QerOH+P8c8V1S?}EE-XEeQ^~Oa5easLqTnB#0OxUeTu{dBX`U$ zio0KyT#j=6)W*vbiGr|NSFf={-W3(u7b5elfmN`q6t~1ekSbXUeojDYMJ(>7(46=3 zAhpr%HJlSs|{C%{ozjjGQmKzjUZ8W zUllU!@+toSSb#3Mz;fk+v+Id>maN}?#9w%m+?ITK0{{Zte7S@CERI#v@TEfqYgigG z>atXH1ux?$YK#8>k+qdj7}ArQ_FC~2ei&|!xb|Vn?%%LUSOw$^9w{C4%?j{gm6inX=e_7vw>v1GzwsJ!4G`bdzFn zQwl=!h>cy*d(?Ok{N^IL7xNo!aqw;vYh_kJRft{_h2-DjrpnoNOFu^Al{?JszLhMC zaNi{a>FNzpNs0bRmpojt60XCEU^J-HYgKz2G4Sz%7q;~q3Kra~&K_c2DMdg6EI*#3 zZ^)1<{dFCcb4QqP+)6FWJeO(UKEYS0aVsNhWvs9cUHs(6uTB0)D(vC`7Y3l}zi>*| zTuKie#8#q*-oC^vE{H(9#;ilcJ(|RtG2k0GOP zE-LIfB`EcL%H!)5r-BR7%qnw6tEhI=?paP$3J)^4UDx-H)D=dxEb>dY7OGIkva6ee zg;T*1tsh{b)S}4Zvl-nklMSvMi;|-(uQpc258N8yxpZ-I-N#0J{$dWhgTegDH(`k` zqj}7zZ0-U{S#?opCBm()WtSuzH*ld^2w8+n<37T#t2B$($aAX3*QtF#zAIsO$VPS0-E5rH`ej+?7K7@2y1%T>9#mXeEosFP+LbIj zmt3*m*E30Vp+1VZCmlsw$yo3VRXW!c!Ta5;#fVv*D|iQ4({NI{t>s5X2EZm z7TOH2{-`$22#eC$g`8xdJGiS(?@zHaHkqAqR*y>;K}UNBch=??^9a-3RN$&IUTTUXAIp_KgB^?bo13i%hboop;zcYqm|0iYLD|QUIBX@IYc4gq2#g< z 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

      SDM^IK4hj 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

      wEQ!~%2$L`4tMMgmg0nKdB+HVIX7Gn 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 z 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

      WN_AOhbDv$Zwe5JI2P-&Uy*eB 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

    5pS-A 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 z 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

  • {JSON.stringify(searchParams, null, 2)}

    + ); } diff --git a/packages/example-next-13-advanced/src/middleware.ts b/packages/example-next-13-advanced/src/middleware.ts index 841a68e75..ef25478d8 100644 --- a/packages/example-next-13-advanced/src/middleware.ts +++ b/packages/example-next-13-advanced/src/middleware.ts @@ -17,5 +17,5 @@ export default createIntlMiddleware({ export const config = { // Skip all non-content paths - matcher: ['/((?!api|_next|favicon.ico).*)'] + matcher: ['/((?!api|_next|assets|favicon.ico).*)'] }; diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 9bf1e9448..500a74805 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -102,7 +102,9 @@ export default createIntlMiddleware({ }); export const config = { - // Skip all non-content paths + // Skip all paths that aren't pages that you'd like to internationalize. + // If you use the `public` folder, make sure your static assets are ignored + // (e.g. by moving them to a shared folder that is referenced here). matcher: ['/((?!api|_next|favicon.ico).*)'] }; ``` From 5af108c1d21dda2407b6439386c64dfca6fb6c38 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Sun, 19 Feb 2023 08:06:40 +0100 Subject: [PATCH 140/312] 2.11.0-beta.13 --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 500a74805..df470570a 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -13,7 +13,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current beta version ``` -npm install next-intl@2.11.0-beta.12 +npm install next-intl@2.11.0-beta.13 ``` This beta version was tested with `next@13.1.6`. From 68786365ea6b609f2cd2da03f06e0cd8aef15bac Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Sun, 19 Feb 2023 09:09:17 +0100 Subject: [PATCH 141/312] Add test for localized API routes in latest beta --- .../example-next-13-advanced/messages/de.json | 3 + .../example-next-13-advanced/messages/en.json | 3 + .../example-next-13-advanced/next-env.d.ts | 1 + .../example-next-13-advanced/package.json | 2 +- .../src/app/[locale]/api/route.ts | 12 +++ .../src/app/api/route.ts | 5 - .../tests/main.spec.ts | 21 +++- packages/example-next-13/package.json | 2 +- yarn.lock | 95 +++++++++++++++++++ 9 files changed, 132 insertions(+), 12 deletions(-) create mode 100644 packages/example-next-13-advanced/src/app/[locale]/api/route.ts delete mode 100644 packages/example-next-13-advanced/src/app/api/route.ts diff --git a/packages/example-next-13-advanced/messages/de.json b/packages/example-next-13-advanced/messages/de.json index 34eea1b41..4040e7dcb 100644 --- a/packages/example-next-13-advanced/messages/de.json +++ b/packages/example-next-13-advanced/messages/de.json @@ -35,5 +35,8 @@ "ClientCounter": { "count": "Aktuell: {count}", "increment": "Erhöhen" + }, + "ApiRoute": { + "hello": "Hallo {name}!" } } diff --git a/packages/example-next-13-advanced/messages/en.json b/packages/example-next-13-advanced/messages/en.json index 1daa3410f..c5dc6a775 100644 --- a/packages/example-next-13-advanced/messages/en.json +++ b/packages/example-next-13-advanced/messages/en.json @@ -35,5 +35,8 @@ "ClientCounter": { "count": "Current count: {count}", "increment": "Increment" + }, + "ApiRoute": { + "hello": "Hello {name}!" } } diff --git a/packages/example-next-13-advanced/next-env.d.ts b/packages/example-next-13-advanced/next-env.d.ts index 4f11a03dc..7aa8e8ef7 100644 --- a/packages/example-next-13-advanced/next-env.d.ts +++ b/packages/example-next-13-advanced/next-env.d.ts @@ -1,5 +1,6 @@ /// /// +/// // NOTE: This file should not be edited // see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/packages/example-next-13-advanced/package.json b/packages/example-next-13-advanced/package.json index a0798e7df..7cdc7436c 100644 --- a/packages/example-next-13-advanced/package.json +++ b/packages/example-next-13-advanced/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "lodash": "^4.17.21", - "next": "13.1.7-canary.7", + "next": "13.1.7-canary.21", "next-intl": "*", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/example-next-13-advanced/src/app/[locale]/api/route.ts b/packages/example-next-13-advanced/src/app/[locale]/api/route.ts new file mode 100644 index 000000000..3fc03c640 --- /dev/null +++ b/packages/example-next-13-advanced/src/app/[locale]/api/route.ts @@ -0,0 +1,12 @@ +import {getTranslations} from 'next-intl/server'; +import {NextRequest, NextResponse} from 'next/server'; + +export async function GET(request: NextRequest) { + const name = request.nextUrl.searchParams.get('name'); + if (!name) { + return new Response('Search param `name` was not provided.', {status: 400}); + } + + const t = await getTranslations('ApiRoute'); + return NextResponse.json({message: t('hello', {name})}); +} diff --git a/packages/example-next-13-advanced/src/app/api/route.ts b/packages/example-next-13-advanced/src/app/api/route.ts deleted file mode 100644 index 3f385f4b4..000000000 --- a/packages/example-next-13-advanced/src/app/api/route.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {NextResponse} from 'next/server'; - -export async function GET() { - return NextResponse.json({message: 'Hello world'}); -} diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index 85f17de6e..7192ce242 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -337,9 +337,20 @@ it('keeps search params for redirects', async ({browser}) => { ); }); -it.skip('keeps route handlers intact', async ({request}) => { - const response = await request.get('/api'); - expect(response.status()).toBe(200); - const data = await response.json(); - expect(data).toEqual({message: 'Hello world'}); +it('can localize route handlers', async ({request}) => { + // Default + { + const response = await request.get('/api?name=world'); + expect(response.status()).toBe(200); + const data = await response.json(); + expect(data).toEqual({message: 'Hello world!'}); + } + + // German + { + const response = await request.get('/de/api?name=Welt'); + expect(response.status()).toBe(200); + const data = await response.json(); + expect(data).toEqual({message: 'Hallo Welt!'}); + } }); diff --git a/packages/example-next-13/package.json b/packages/example-next-13/package.json index e1b5ea2ef..21163342d 100644 --- a/packages/example-next-13/package.json +++ b/packages/example-next-13/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "lodash": "^4.17.21", - "next": "13.1.7-canary.7", + "next": "13.1.7-canary.21", "next-intl": "^2.10.2", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/yarn.lock b/yarn.lock index ea5272ba1..b024b2f29 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2313,6 +2313,11 @@ resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.6.tgz#c4925609f16142ded1a5cb833359ab17359b7a93" integrity sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg== +"@next/env@13.1.7-canary.21": + version "13.1.7-canary.21" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.7-canary.21.tgz#36db6a4e369c5967c9211382063508c477ee37c3" + integrity sha512-w5ZByxFUXzAC15KwVaOQ2/AkD9BgM6xXxCshr7M7qZDert7Z62SevuxIqrrIFTEj5psLPTT7WHlJufY8JXLGXg== + "@next/env@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.7-canary.7.tgz#0d32871cd2c9d30689ce7696f6ebd24c4dbaca54" @@ -2347,6 +2352,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.6.tgz#d766dfc10e27814d947b20f052067c239913dbcc" integrity sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ== +"@next/swc-android-arm-eabi@13.1.7-canary.21": + version "13.1.7-canary.21" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.7-canary.21.tgz#a82bdf7b189075c550104c8598b2286ebce98188" + integrity sha512-DPHm1aY/+1+TgZhRJXxspKExvwIdONC6ZHCLaU8xhqKEuojZbkwYiB8wG/qukhwy/6H2G8O9jD5qzbkWZQdt8w== + "@next/swc-android-arm-eabi@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.7-canary.7.tgz#ce9df22859489a3b098414601bbba4cd2f48b510" @@ -2367,6 +2377,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.6.tgz#f37a98d5f18927d8c9970d750d516ac779465176" integrity sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw== +"@next/swc-android-arm64@13.1.7-canary.21": + version "13.1.7-canary.21" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.7-canary.21.tgz#a651920e1c64babfa637e518936670195f078119" + integrity sha512-Oglp5AGW69iF0M7ELqzUSD2AJJZDYcF88EpxgnG43iE6NkylWZQl9aFW05C6lb4h28YALnopdN8NMQxexomXeQ== + "@next/swc-android-arm64@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.7-canary.7.tgz#0eb443cbb91946973a245793607a0e5093549d92" @@ -2387,6 +2402,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.6.tgz#ec1b90fd9bf809d8b81004c5182e254dced4ad96" integrity sha512-KKRQH4DDE4kONXCvFMNBZGDb499Hs+xcFAwvj+rfSUssIDrZOlyfJNy55rH5t2Qxed1e4K80KEJgsxKQN1/fyw== +"@next/swc-darwin-arm64@13.1.7-canary.21": + version "13.1.7-canary.21" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.7-canary.21.tgz#87bc8098671ba7ce44fc50096ee784df5f31f988" + integrity sha512-SAPqhUGAco0DIIGpV0Kr7bQ3IjbDISdvGoYcY38BB7xd2Gv2TynQezNcZtX2NZ7RI30tyxRxUspIQsf958d2oQ== + "@next/swc-darwin-arm64@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.7-canary.7.tgz#11925aa69fb6f3b00e4b93a6f5b6a9431e474f95" @@ -2407,6 +2427,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.6.tgz#e869ac75d16995eee733a7d1550322d9051c1eb4" integrity sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA== +"@next/swc-darwin-x64@13.1.7-canary.21": + version "13.1.7-canary.21" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.7-canary.21.tgz#64cdee1c1e30cdd38124110c2000f5c6bc59924e" + integrity sha512-OinLF0EP6xWCSq8CMgqCb0KdsrjkdPp/+CNURTjFEYMc9jkp5C6lLhjVK2hIs0b9vlcsdhDmDmYYr0kxenFiuQ== + "@next/swc-darwin-x64@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.7-canary.7.tgz#1b2825d7c1c06ef71a0559df4507cf929e8bbf2b" @@ -2422,6 +2447,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.6.tgz#84a7b2e423a2904afc2edca21c2f1ba6b53fa4c1" integrity sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw== +"@next/swc-freebsd-x64@13.1.7-canary.21": + version "13.1.7-canary.21" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.7-canary.21.tgz#36b2ff13cfb98e055687dd11df79da10e02ed7c7" + integrity sha512-OSvPwS0v9CuQQyX57stm+nGF5qXvOUISlR5HfrI4igP4dCRzJ9Fb4WSH12P75GV9fcjJxzJiDZlzaWzPh9ZJbA== + "@next/swc-freebsd-x64@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.7-canary.7.tgz#b11117a78ab2ee7ecb9d0431ecdff1d72a72ebe7" @@ -2442,6 +2472,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.6.tgz#980eed1f655ff8a72187d8a6ef9e73ac39d20d23" integrity sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw== +"@next/swc-linux-arm-gnueabihf@13.1.7-canary.21": + version "13.1.7-canary.21" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.7-canary.21.tgz#2fe5dc4a88d49002a88fe2005f0efd051f295de3" + integrity sha512-83Frp3/WIEOrzirGYR8aCwTYhtT23IgpOZyGOruZNic8JmCZruk/c5FvekYbE+UCglsNXllZEJJ7c/Vhe4lm0A== + "@next/swc-linux-arm-gnueabihf@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.7-canary.7.tgz#b35d654c6fe939e6b5a9b6f8e787b26ed15e668d" @@ -2462,6 +2497,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.6.tgz#87a71db21cded3f7c63d1d19079845c59813c53d" integrity sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ== +"@next/swc-linux-arm64-gnu@13.1.7-canary.21": + version "13.1.7-canary.21" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.7-canary.21.tgz#26eaec172178518d5ad4fde48d18660d1baf8b93" + integrity sha512-REKwi3MkTHnDwwxn2rl4RkiJ/vOs2+wP0U+p0hhZeSUfBh43a/+MShZ5BLUDlM+Uec25UHp1QWMBq/EQ5TQG+g== + "@next/swc-linux-arm64-gnu@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.7-canary.7.tgz#e30fa2e5ddece4964a385030c0da5a2ed18b712e" @@ -2482,6 +2522,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.6.tgz#c5aac8619331b9fd030603bbe2b36052011e11de" integrity sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ== +"@next/swc-linux-arm64-musl@13.1.7-canary.21": + version "13.1.7-canary.21" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.7-canary.21.tgz#71413b4492e91849612d004d46bb69f114930fcb" + integrity sha512-FCBfNRQc3GbHku/T33zMUV3e8WQwF4FK42t0hlW0sCckkJ+0r/7J/8/3uoX621msTtYiwrndIySqoqP+jbtSyg== + "@next/swc-linux-arm64-musl@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.7-canary.7.tgz#af2477dc977ffc8237d461c07eb1b6805aee5b22" @@ -2502,6 +2547,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.6.tgz#9513d36d540bbfea575576746736054c31aacdea" integrity sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q== +"@next/swc-linux-x64-gnu@13.1.7-canary.21": + version "13.1.7-canary.21" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.7-canary.21.tgz#22741be76b2b6bd749a1acf900e1d55205840de2" + integrity sha512-9+e/YU8kOGcKYqrDqSFztrSrF1BFoDnwn2wiev7egBRgOqYHGsG2ZScA+tZLn3at5wtCXyrbEO1NR0sFgrrHJA== + "@next/swc-linux-x64-gnu@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.7-canary.7.tgz#1d6fc813b06642ac000efb838e930c0f42e1d577" @@ -2522,6 +2572,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.6.tgz#d61fc6884899f5957251f4ce3f522e34a2c479b7" integrity sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ== +"@next/swc-linux-x64-musl@13.1.7-canary.21": + version "13.1.7-canary.21" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.7-canary.21.tgz#6d6b5a70f7557b1a262b6b6d2101708f5a5c5a9a" + integrity sha512-XF5y8WKUJHB5uDPYiHqQ7es27wV7lw1BC9DCIzS+TbGJgUhsiSue1w3cS1YYEqxdF7kbeYNOLRwsQ/3+NsPPow== + "@next/swc-linux-x64-musl@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.7-canary.7.tgz#837fecc52b255ea3e5c1fc1b66f1c08d49eae343" @@ -2542,6 +2597,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.6.tgz#fac2077a8ae9768e31444c9ae90807e64117cda7" integrity sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ== +"@next/swc-win32-arm64-msvc@13.1.7-canary.21": + version "13.1.7-canary.21" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.7-canary.21.tgz#1592626be2d0996479b8c8208256fffca06a574e" + integrity sha512-uJWP0qc2B+PBmedV/CF5sR9WRxrVQ1do2AV3mJLPPQqFFoG0UnTW7bRm+IT+u/MFWFmll2zsNFoXwL3utWFDEg== + "@next/swc-win32-arm64-msvc@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.7-canary.7.tgz#da869c79b6fee09b8c7ab74bea708ce63d87691d" @@ -2562,6 +2622,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.6.tgz#498bc11c91b4c482a625bf4b978f98ae91111e46" integrity sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w== +"@next/swc-win32-ia32-msvc@13.1.7-canary.21": + version "13.1.7-canary.21" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.7-canary.21.tgz#115c15788571ebc716cd488485870a5dcd914072" + integrity sha512-iz/kTKBQaDxxcP/qhddZF77DLj53I/JkLiSSnkseuRI7949tPOGfmTu9JHyR8xBP+d3Br/fj9/oIQ2ipQ/U6Aw== + "@next/swc-win32-ia32-msvc@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.7-canary.7.tgz#db19042755838506e013a05ae5a89b4d39127797" @@ -2582,6 +2647,11 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.6.tgz#17ed919c723426b7d0ce1cd73d40ce3dcd342089" integrity sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA== +"@next/swc-win32-x64-msvc@13.1.7-canary.21": + version "13.1.7-canary.21" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.7-canary.21.tgz#29030372bb9dd10036245ab957b2343320544af4" + integrity sha512-jSVNfA3cTAO+cBL8RMtiXJrk1G4eGMaYmtTRs1RS15QtIrbqExzeLlDkiGFKx/QGpakgxro3t+YefETSb9QDSA== + "@next/swc-win32-x64-msvc@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.7-canary.7.tgz#32e94f2cbb0d944e227ae9d6d04352ecf895b086" @@ -9237,6 +9307,31 @@ next-themes@^0.2.0-beta.0: resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.2.0-beta.0.tgz#4894b360116020dee9f89b8b8f01896f78caab11" integrity sha512-vzF6V1cWo6LVuMZkTpsP3+7roc14X8VTRgyiZT/6TWzcd7sLdE+y/6F1WiXEvKg+IqwdUb8g3KwC20Fo1yUYqw== +next@13.1.7-canary.21: + version "13.1.7-canary.21" + resolved "https://registry.yarnpkg.com/next/-/next-13.1.7-canary.21.tgz#eb795fe5c3d2393394cb67c3623f2a8db07a9e9d" + integrity sha512-uuPJG7XESnr5xupNumU61udF2ApiH+MP7Cc7CfL1zEzhqJGIEscI4BZZcv3QTSPgy9c3CNJoxuYxaa1DQ8tzmQ== + dependencies: + "@next/env" "13.1.7-canary.21" + "@swc/helpers" "0.4.14" + caniuse-lite "^1.0.30001406" + postcss "8.4.14" + styled-jsx "5.1.1" + optionalDependencies: + "@next/swc-android-arm-eabi" "13.1.7-canary.21" + "@next/swc-android-arm64" "13.1.7-canary.21" + "@next/swc-darwin-arm64" "13.1.7-canary.21" + "@next/swc-darwin-x64" "13.1.7-canary.21" + "@next/swc-freebsd-x64" "13.1.7-canary.21" + "@next/swc-linux-arm-gnueabihf" "13.1.7-canary.21" + "@next/swc-linux-arm64-gnu" "13.1.7-canary.21" + "@next/swc-linux-arm64-musl" "13.1.7-canary.21" + "@next/swc-linux-x64-gnu" "13.1.7-canary.21" + "@next/swc-linux-x64-musl" "13.1.7-canary.21" + "@next/swc-win32-arm64-msvc" "13.1.7-canary.21" + "@next/swc-win32-ia32-msvc" "13.1.7-canary.21" + "@next/swc-win32-x64-msvc" "13.1.7-canary.21" + next@13.1.7-canary.7: version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/next/-/next-13.1.7-canary.7.tgz#1526687ed0d765c49930ea378fb63a1e7ee45747" From 42c11551a7a52c65930f9475bf561df50c2706e4 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Sun, 19 Feb 2023 10:46:53 +0100 Subject: [PATCH 142/312] Remove `api` from matcher --- .../example-next-13-advanced/package.json | 1 + .../src/middleware.ts | 4 +- yarn.lock | 186 +++++++++++++++++- 3 files changed, 183 insertions(+), 8 deletions(-) diff --git a/packages/example-next-13-advanced/package.json b/packages/example-next-13-advanced/package.json index 7cdc7436c..8817de388 100644 --- a/packages/example-next-13-advanced/package.json +++ b/packages/example-next-13-advanced/package.json @@ -15,6 +15,7 @@ "next-intl": "*", "react": "^18.2.0", "react-dom": "^18.2.0", + "sharp": "0.31.3", "typescript": "^4.6.3" }, "devDependencies": { diff --git a/packages/example-next-13-advanced/src/middleware.ts b/packages/example-next-13-advanced/src/middleware.ts index ef25478d8..01c6ed697 100644 --- a/packages/example-next-13-advanced/src/middleware.ts +++ b/packages/example-next-13-advanced/src/middleware.ts @@ -16,6 +16,6 @@ export default createIntlMiddleware({ }); export const config = { - // Skip all non-content paths - matcher: ['/((?!api|_next|assets|favicon.ico).*)'] + // Skip all paths that should not be internationalized + matcher: ['/((?!_next|assets|favicon.ico).*)'] }; diff --git a/yarn.lock b/yarn.lock index b024b2f29..ba9532163 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4174,7 +4174,7 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== -bl@^4.1.0: +bl@^4.0.3, bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -4599,11 +4599,27 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.1.4, color-name@~1.1.4: +color-name@^1.0.0, color-name@^1.1.4, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + columnify@^1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" @@ -4964,11 +4980,23 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -5048,6 +5076,11 @@ detect-indent@^6.0.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== +detect-libc@^2.0.0, detect-libc@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" + integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== + detect-newline@3.1.0, detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -5262,7 +5295,7 @@ encoding@^0.1.12: dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.1.0: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -6073,6 +6106,11 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + expect@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" @@ -6299,6 +6337,11 @@ fraction.js@^4.1.1: resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.1.2.tgz#13e420a92422b6cf244dff8690ed89401029fbe8" integrity sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA== +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-extra@^10.0.0: version "10.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.1.tgz#27de43b4320e833f6867cc044bfce29fdf0ef3b8" @@ -6512,6 +6555,11 @@ gitconfiglocal@^1.0.0: dependencies: ini "^1.3.2" +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + github-slugger@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.4.0.tgz#206eb96cdb22ee56fdc53a28d5a302338463444e" @@ -6999,7 +7047,7 @@ inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^1.3.2, ini@^1.3.4: +ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== @@ -7094,6 +7142,11 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + is-bigint@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" @@ -9092,6 +9145,11 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" @@ -9123,6 +9181,11 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== +minimist@^1.2.3: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + minipass-collect@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" @@ -9200,6 +9263,11 @@ minizlib@^2.0.0, minizlib@^2.1.1: minipass "^3.0.0" yallist "^4.0.0" +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + mkdirp-infer-owner@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" @@ -9277,6 +9345,11 @@ nanoid@^3.3.4: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + natural-compare-lite@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" @@ -9471,6 +9544,18 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-abi@^3.3.0: + version "3.33.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.33.0.tgz#8b23a0cec84e1c5f5411836de6a9b84bccf26e7f" + integrity sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog== + dependencies: + semver "^7.3.5" + +node-addon-api@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" + integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== + node-fetch@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" @@ -10406,6 +10491,24 @@ postcss@^8.4.6: picocolors "^1.0.0" source-map-js "^1.0.2" +prebuild-install@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" + integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -10587,6 +10690,16 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + react-dom@^18.0.0, react-dom@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" @@ -10721,7 +10834,7 @@ read@1, read@~1.0.1: dependencies: mute-stream "~0.0.4" -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.4.0: +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -11249,7 +11362,7 @@ semver@^7.1.1, semver@^7.3.2: resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== -semver@^7.3.7: +semver@^7.3.7, semver@^7.3.8: version "7.3.8" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== @@ -11280,6 +11393,20 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" +sharp@0.31.3: + version "0.31.3" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.31.3.tgz#60227edc5c2be90e7378a210466c99aefcf32688" + integrity sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg== + dependencies: + color "^4.2.3" + detect-libc "^2.0.1" + node-addon-api "^5.0.0" + prebuild-install "^7.1.1" + semver "^7.3.8" + simple-get "^4.0.1" + tar-fs "^2.1.1" + tunnel-agent "^0.6.0" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -11345,6 +11472,27 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0, simple-get@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -11742,6 +11890,11 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + strong-log-transformer@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" @@ -11852,6 +12005,27 @@ tailwindcss@^3.2.4: quick-lru "^5.1.1" resolve "^1.22.1" +tar-fs@^2.0.0, tar-fs@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + tar@^4.4.12: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" From e0bd1775d3f6d70976b5c2b4760046cbcec852ef Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Sun, 19 Feb 2023 11:49:12 +0100 Subject: [PATCH 143/312] fix: Add tests to ensure links work and downgrade Next.js (#196) * Add tests to ensure links work * Disable route handlers test for now * Update lockfile --- .../example-next-13-advanced/next-env.d.ts | 1 - .../example-next-13-advanced/package.json | 2 +- .../src/components/LocaleSwitcher.tsx | 2 +- .../tests/main.spec.ts | 16 ++-- packages/example-next-13/package.json | 2 +- yarn.lock | 95 ------------------- 6 files changed, 12 insertions(+), 106 deletions(-) diff --git a/packages/example-next-13-advanced/next-env.d.ts b/packages/example-next-13-advanced/next-env.d.ts index 7aa8e8ef7..4f11a03dc 100644 --- a/packages/example-next-13-advanced/next-env.d.ts +++ b/packages/example-next-13-advanced/next-env.d.ts @@ -1,6 +1,5 @@ /// /// -/// // NOTE: This file should not be edited // see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/packages/example-next-13-advanced/package.json b/packages/example-next-13-advanced/package.json index 8817de388..3ff9bdcf0 100644 --- a/packages/example-next-13-advanced/package.json +++ b/packages/example-next-13-advanced/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "lodash": "^4.17.21", - "next": "13.1.7-canary.21", + "next": "13.1.7-canary.7", "next-intl": "*", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/example-next-13-advanced/src/components/LocaleSwitcher.tsx b/packages/example-next-13-advanced/src/components/LocaleSwitcher.tsx index f53e1bd6e..f3c6ba2fe 100644 --- a/packages/example-next-13-advanced/src/components/LocaleSwitcher.tsx +++ b/packages/example-next-13-advanced/src/components/LocaleSwitcher.tsx @@ -7,7 +7,7 @@ export default function LocaleSwitcher() { const otherLocale = locale === 'en' ? 'de' : 'en'; return ( - + {t('switchLocale', {locale: otherLocale})} ); diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index 7192ce242..ceca6f2e0 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -176,16 +176,18 @@ it('can use `Link` on the server', async ({page}) => { it('can use `Link` with an object as `href`', async ({page}) => { await page.goto('/en'); - await expect( - page.getByRole('link', {name: 'Go to home with query param'}) - ).toHaveAttribute('href', '/en?test=true'); + const link = page.getByRole('link', {name: 'Go to home with query param'}); + await expect(link).toHaveAttribute('href', '/en?test=true'); + await link.click(); + await expect(page).toHaveURL('/en?test=true'); }); it('can use `Link` to link to the root of another language', async ({page}) => { await page.goto('/en'); - await expect( - page.getByRole('link', {name: 'Switch to German'}) - ).toHaveAttribute('href', '/de'); + const link = page.getByRole('link', {name: 'Switch to German'}); + await expect(link).toHaveAttribute('href', '/de'); + await link.click(); + await expect(page).toHaveURL('/de'); }); it('can use `Link` on the client', async ({page}) => { @@ -337,7 +339,7 @@ it('keeps search params for redirects', async ({browser}) => { ); }); -it('can localize route handlers', async ({request}) => { +it.skip('can localize route handlers', async ({request}) => { // Default { const response = await request.get('/api?name=world'); diff --git a/packages/example-next-13/package.json b/packages/example-next-13/package.json index 21163342d..e1b5ea2ef 100644 --- a/packages/example-next-13/package.json +++ b/packages/example-next-13/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "lodash": "^4.17.21", - "next": "13.1.7-canary.21", + "next": "13.1.7-canary.7", "next-intl": "^2.10.2", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/yarn.lock b/yarn.lock index ba9532163..d8745f1e0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2313,11 +2313,6 @@ resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.6.tgz#c4925609f16142ded1a5cb833359ab17359b7a93" integrity sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg== -"@next/env@13.1.7-canary.21": - version "13.1.7-canary.21" - resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.7-canary.21.tgz#36db6a4e369c5967c9211382063508c477ee37c3" - integrity sha512-w5ZByxFUXzAC15KwVaOQ2/AkD9BgM6xXxCshr7M7qZDert7Z62SevuxIqrrIFTEj5psLPTT7WHlJufY8JXLGXg== - "@next/env@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.7-canary.7.tgz#0d32871cd2c9d30689ce7696f6ebd24c4dbaca54" @@ -2352,11 +2347,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.6.tgz#d766dfc10e27814d947b20f052067c239913dbcc" integrity sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ== -"@next/swc-android-arm-eabi@13.1.7-canary.21": - version "13.1.7-canary.21" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.7-canary.21.tgz#a82bdf7b189075c550104c8598b2286ebce98188" - integrity sha512-DPHm1aY/+1+TgZhRJXxspKExvwIdONC6ZHCLaU8xhqKEuojZbkwYiB8wG/qukhwy/6H2G8O9jD5qzbkWZQdt8w== - "@next/swc-android-arm-eabi@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.7-canary.7.tgz#ce9df22859489a3b098414601bbba4cd2f48b510" @@ -2377,11 +2367,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.6.tgz#f37a98d5f18927d8c9970d750d516ac779465176" integrity sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw== -"@next/swc-android-arm64@13.1.7-canary.21": - version "13.1.7-canary.21" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.7-canary.21.tgz#a651920e1c64babfa637e518936670195f078119" - integrity sha512-Oglp5AGW69iF0M7ELqzUSD2AJJZDYcF88EpxgnG43iE6NkylWZQl9aFW05C6lb4h28YALnopdN8NMQxexomXeQ== - "@next/swc-android-arm64@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.7-canary.7.tgz#0eb443cbb91946973a245793607a0e5093549d92" @@ -2402,11 +2387,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.6.tgz#ec1b90fd9bf809d8b81004c5182e254dced4ad96" integrity sha512-KKRQH4DDE4kONXCvFMNBZGDb499Hs+xcFAwvj+rfSUssIDrZOlyfJNy55rH5t2Qxed1e4K80KEJgsxKQN1/fyw== -"@next/swc-darwin-arm64@13.1.7-canary.21": - version "13.1.7-canary.21" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.7-canary.21.tgz#87bc8098671ba7ce44fc50096ee784df5f31f988" - integrity sha512-SAPqhUGAco0DIIGpV0Kr7bQ3IjbDISdvGoYcY38BB7xd2Gv2TynQezNcZtX2NZ7RI30tyxRxUspIQsf958d2oQ== - "@next/swc-darwin-arm64@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.7-canary.7.tgz#11925aa69fb6f3b00e4b93a6f5b6a9431e474f95" @@ -2427,11 +2407,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.6.tgz#e869ac75d16995eee733a7d1550322d9051c1eb4" integrity sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA== -"@next/swc-darwin-x64@13.1.7-canary.21": - version "13.1.7-canary.21" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.7-canary.21.tgz#64cdee1c1e30cdd38124110c2000f5c6bc59924e" - integrity sha512-OinLF0EP6xWCSq8CMgqCb0KdsrjkdPp/+CNURTjFEYMc9jkp5C6lLhjVK2hIs0b9vlcsdhDmDmYYr0kxenFiuQ== - "@next/swc-darwin-x64@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.7-canary.7.tgz#1b2825d7c1c06ef71a0559df4507cf929e8bbf2b" @@ -2447,11 +2422,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.6.tgz#84a7b2e423a2904afc2edca21c2f1ba6b53fa4c1" integrity sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw== -"@next/swc-freebsd-x64@13.1.7-canary.21": - version "13.1.7-canary.21" - resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.7-canary.21.tgz#36b2ff13cfb98e055687dd11df79da10e02ed7c7" - integrity sha512-OSvPwS0v9CuQQyX57stm+nGF5qXvOUISlR5HfrI4igP4dCRzJ9Fb4WSH12P75GV9fcjJxzJiDZlzaWzPh9ZJbA== - "@next/swc-freebsd-x64@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.7-canary.7.tgz#b11117a78ab2ee7ecb9d0431ecdff1d72a72ebe7" @@ -2472,11 +2442,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.6.tgz#980eed1f655ff8a72187d8a6ef9e73ac39d20d23" integrity sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw== -"@next/swc-linux-arm-gnueabihf@13.1.7-canary.21": - version "13.1.7-canary.21" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.7-canary.21.tgz#2fe5dc4a88d49002a88fe2005f0efd051f295de3" - integrity sha512-83Frp3/WIEOrzirGYR8aCwTYhtT23IgpOZyGOruZNic8JmCZruk/c5FvekYbE+UCglsNXllZEJJ7c/Vhe4lm0A== - "@next/swc-linux-arm-gnueabihf@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.7-canary.7.tgz#b35d654c6fe939e6b5a9b6f8e787b26ed15e668d" @@ -2497,11 +2462,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.6.tgz#87a71db21cded3f7c63d1d19079845c59813c53d" integrity sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ== -"@next/swc-linux-arm64-gnu@13.1.7-canary.21": - version "13.1.7-canary.21" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.7-canary.21.tgz#26eaec172178518d5ad4fde48d18660d1baf8b93" - integrity sha512-REKwi3MkTHnDwwxn2rl4RkiJ/vOs2+wP0U+p0hhZeSUfBh43a/+MShZ5BLUDlM+Uec25UHp1QWMBq/EQ5TQG+g== - "@next/swc-linux-arm64-gnu@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.7-canary.7.tgz#e30fa2e5ddece4964a385030c0da5a2ed18b712e" @@ -2522,11 +2482,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.6.tgz#c5aac8619331b9fd030603bbe2b36052011e11de" integrity sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ== -"@next/swc-linux-arm64-musl@13.1.7-canary.21": - version "13.1.7-canary.21" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.7-canary.21.tgz#71413b4492e91849612d004d46bb69f114930fcb" - integrity sha512-FCBfNRQc3GbHku/T33zMUV3e8WQwF4FK42t0hlW0sCckkJ+0r/7J/8/3uoX621msTtYiwrndIySqoqP+jbtSyg== - "@next/swc-linux-arm64-musl@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.7-canary.7.tgz#af2477dc977ffc8237d461c07eb1b6805aee5b22" @@ -2547,11 +2502,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.6.tgz#9513d36d540bbfea575576746736054c31aacdea" integrity sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q== -"@next/swc-linux-x64-gnu@13.1.7-canary.21": - version "13.1.7-canary.21" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.7-canary.21.tgz#22741be76b2b6bd749a1acf900e1d55205840de2" - integrity sha512-9+e/YU8kOGcKYqrDqSFztrSrF1BFoDnwn2wiev7egBRgOqYHGsG2ZScA+tZLn3at5wtCXyrbEO1NR0sFgrrHJA== - "@next/swc-linux-x64-gnu@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.7-canary.7.tgz#1d6fc813b06642ac000efb838e930c0f42e1d577" @@ -2572,11 +2522,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.6.tgz#d61fc6884899f5957251f4ce3f522e34a2c479b7" integrity sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ== -"@next/swc-linux-x64-musl@13.1.7-canary.21": - version "13.1.7-canary.21" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.7-canary.21.tgz#6d6b5a70f7557b1a262b6b6d2101708f5a5c5a9a" - integrity sha512-XF5y8WKUJHB5uDPYiHqQ7es27wV7lw1BC9DCIzS+TbGJgUhsiSue1w3cS1YYEqxdF7kbeYNOLRwsQ/3+NsPPow== - "@next/swc-linux-x64-musl@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.7-canary.7.tgz#837fecc52b255ea3e5c1fc1b66f1c08d49eae343" @@ -2597,11 +2542,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.6.tgz#fac2077a8ae9768e31444c9ae90807e64117cda7" integrity sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ== -"@next/swc-win32-arm64-msvc@13.1.7-canary.21": - version "13.1.7-canary.21" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.7-canary.21.tgz#1592626be2d0996479b8c8208256fffca06a574e" - integrity sha512-uJWP0qc2B+PBmedV/CF5sR9WRxrVQ1do2AV3mJLPPQqFFoG0UnTW7bRm+IT+u/MFWFmll2zsNFoXwL3utWFDEg== - "@next/swc-win32-arm64-msvc@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.7-canary.7.tgz#da869c79b6fee09b8c7ab74bea708ce63d87691d" @@ -2622,11 +2562,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.6.tgz#498bc11c91b4c482a625bf4b978f98ae91111e46" integrity sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w== -"@next/swc-win32-ia32-msvc@13.1.7-canary.21": - version "13.1.7-canary.21" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.7-canary.21.tgz#115c15788571ebc716cd488485870a5dcd914072" - integrity sha512-iz/kTKBQaDxxcP/qhddZF77DLj53I/JkLiSSnkseuRI7949tPOGfmTu9JHyR8xBP+d3Br/fj9/oIQ2ipQ/U6Aw== - "@next/swc-win32-ia32-msvc@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.7-canary.7.tgz#db19042755838506e013a05ae5a89b4d39127797" @@ -2647,11 +2582,6 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.6.tgz#17ed919c723426b7d0ce1cd73d40ce3dcd342089" integrity sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA== -"@next/swc-win32-x64-msvc@13.1.7-canary.21": - version "13.1.7-canary.21" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.7-canary.21.tgz#29030372bb9dd10036245ab957b2343320544af4" - integrity sha512-jSVNfA3cTAO+cBL8RMtiXJrk1G4eGMaYmtTRs1RS15QtIrbqExzeLlDkiGFKx/QGpakgxro3t+YefETSb9QDSA== - "@next/swc-win32-x64-msvc@13.1.7-canary.7": version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.7-canary.7.tgz#32e94f2cbb0d944e227ae9d6d04352ecf895b086" @@ -9380,31 +9310,6 @@ next-themes@^0.2.0-beta.0: resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.2.0-beta.0.tgz#4894b360116020dee9f89b8b8f01896f78caab11" integrity sha512-vzF6V1cWo6LVuMZkTpsP3+7roc14X8VTRgyiZT/6TWzcd7sLdE+y/6F1WiXEvKg+IqwdUb8g3KwC20Fo1yUYqw== -next@13.1.7-canary.21: - version "13.1.7-canary.21" - resolved "https://registry.yarnpkg.com/next/-/next-13.1.7-canary.21.tgz#eb795fe5c3d2393394cb67c3623f2a8db07a9e9d" - integrity sha512-uuPJG7XESnr5xupNumU61udF2ApiH+MP7Cc7CfL1zEzhqJGIEscI4BZZcv3QTSPgy9c3CNJoxuYxaa1DQ8tzmQ== - dependencies: - "@next/env" "13.1.7-canary.21" - "@swc/helpers" "0.4.14" - caniuse-lite "^1.0.30001406" - postcss "8.4.14" - styled-jsx "5.1.1" - optionalDependencies: - "@next/swc-android-arm-eabi" "13.1.7-canary.21" - "@next/swc-android-arm64" "13.1.7-canary.21" - "@next/swc-darwin-arm64" "13.1.7-canary.21" - "@next/swc-darwin-x64" "13.1.7-canary.21" - "@next/swc-freebsd-x64" "13.1.7-canary.21" - "@next/swc-linux-arm-gnueabihf" "13.1.7-canary.21" - "@next/swc-linux-arm64-gnu" "13.1.7-canary.21" - "@next/swc-linux-arm64-musl" "13.1.7-canary.21" - "@next/swc-linux-x64-gnu" "13.1.7-canary.21" - "@next/swc-linux-x64-musl" "13.1.7-canary.21" - "@next/swc-win32-arm64-msvc" "13.1.7-canary.21" - "@next/swc-win32-ia32-msvc" "13.1.7-canary.21" - "@next/swc-win32-x64-msvc" "13.1.7-canary.21" - next@13.1.7-canary.7: version "13.1.7-canary.7" resolved "https://registry.yarnpkg.com/next/-/next-13.1.7-canary.7.tgz#1526687ed0d765c49930ea378fb63a1e7ee45747" From f55424ac646e48009a1a214cf68aeaa5a64c780a Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Sun, 19 Feb 2023 12:22:59 +0100 Subject: [PATCH 144/312] feat: Return alternate language links as headers from middleware (#195) --- .../example-next-13-advanced/messages/es.json | 42 +++++++++++ .../src/middleware.ts | 2 +- .../tests/main.spec.ts | 26 +++++++ packages/next-intl/client.js | 1 - packages/next-intl/package.json | 4 +- packages/next-intl/server.js | 1 - .../NextIntlMiddlewareConfig.tsx | 3 + packages/next-intl/src/middleware/getHost.tsx | 7 ++ packages/next-intl/src/middleware/index.tsx | 1 + .../src/{ => middleware}/middleware.tsx | 13 ++-- .../{server => middleware}/resolveLocale.tsx | 7 +- .../middleware/setAlternateLinksHeader.tsx | 74 +++++++++++++++++++ .../pages/docs/next-13/server-components.mdx | 10 ++- 13 files changed, 173 insertions(+), 18 deletions(-) create mode 100644 packages/example-next-13-advanced/messages/es.json delete mode 100644 packages/next-intl/client.js delete mode 100644 packages/next-intl/server.js rename packages/next-intl/src/{server => middleware}/NextIntlMiddlewareConfig.tsx (69%) create mode 100644 packages/next-intl/src/middleware/getHost.tsx create mode 100644 packages/next-intl/src/middleware/index.tsx rename packages/next-intl/src/{ => middleware}/middleware.tsx (86%) rename packages/next-intl/src/{server => middleware}/resolveLocale.tsx (95%) create mode 100644 packages/next-intl/src/middleware/setAlternateLinksHeader.tsx diff --git a/packages/example-next-13-advanced/messages/es.json b/packages/example-next-13-advanced/messages/es.json new file mode 100644 index 000000000..25b6e04e5 --- /dev/null +++ b/packages/example-next-13-advanced/messages/es.json @@ -0,0 +1,42 @@ +{ + "Index": { + "title": "Inicio", + "description": "Esta es la página de inicio.", + "rich": "Este es un texto importante.", + "globalDefaults": "{globalString}" + }, + "LocaleLayout": { + "title": "Ejemplo next-intl", + "description": "Este es un ejemplo de cómo usar next-intl en el directorio app." + }, + "Client": { + "title": "Cliente", + "description": "Esta página se hidrata en el lado del cliente." + }, + "Nested": { + "title": "Anidado", + "description": "Esta es una página anidada." + }, + "Navigation": { + "home": "Inicio", + "client": "Página del cliente", + "nested": "Página anidada" + }, + "NotFound": { + "title": "Esta página no se encontró (404)" + }, + "LocaleSwitcher": { + "switchLocale": "Cambiar a {locale, select, de {Alemán} en {Inglés} other {Desconocido}}" + }, + "Counter": { + "count": "Conteo actual:", + "increment": "Incrementar" + }, + "ClientCounter": { + "count": "Conteo actual: {count}", + "increment": "Incrementar" + }, + "ApiRoute": { + "hello": "¡Hola {name}!" + } +} diff --git a/packages/example-next-13-advanced/src/middleware.ts b/packages/example-next-13-advanced/src/middleware.ts index 01c6ed697..845ecc5d0 100644 --- a/packages/example-next-13-advanced/src/middleware.ts +++ b/packages/example-next-13-advanced/src/middleware.ts @@ -1,7 +1,7 @@ import createIntlMiddleware from 'next-intl/middleware'; export default createIntlMiddleware({ - locales: ['en', 'de'], + locales: ['en', 'de', 'es'], defaultLocale: 'en', domains: [ { diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index ceca6f2e0..0b77d9037 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -339,6 +339,32 @@ it('keeps search params for redirects', async ({browser}) => { ); }); +it('sets alternate links', async ({request}) => { + for (const pathname of ['/', '/en', '/de']) { + expect((await request.get(pathname)).headers().link).toBe( + [ + '; rel="alternate"; hreflang="en"', + '; rel="alternate"; hreflang="de"', + '; rel="alternate"; hreflang="de"', + '; rel="alternate"; hreflang="es"', + '; rel="alternate"; hreflang="x-default"' + ].join(', ') + ); + } + + for (const pathname of ['/nested', '/en/nested', '/de/nested']) { + expect((await request.get(pathname)).headers().link).toBe( + [ + '; rel="alternate"; hreflang="en"', + '; rel="alternate"; hreflang="de"', + '; rel="alternate"; hreflang="de"', + '; rel="alternate"; hreflang="es"', + '; rel="alternate"; hreflang="x-default"' + ].join(', ') + ); + } +}); + it.skip('can localize route handlers', async ({request}) => { // Default { diff --git a/packages/next-intl/client.js b/packages/next-intl/client.js deleted file mode 100644 index 5d664cbda..000000000 --- a/packages/next-intl/client.js +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/src/client'; diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index a242b77df..78c29f54d 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -30,16 +30,14 @@ "./server": "./dist/src/server/index.js", "./client": "./dist/src/client/index.js", "./config": "./config.js", - "./middleware": "./dist/src/middleware.js", + "./middleware": "./dist/src/middleware/index.js", "./withNextIntl": "./withNextIntl.js", "./plugin": "./plugin.js" }, "files": [ "dist", "src", - "server.js", "server.d.ts", - "client.js", "client.d.ts", "config.js", "middleware.d.ts", diff --git a/packages/next-intl/server.js b/packages/next-intl/server.js deleted file mode 100644 index b940dac21..000000000 --- a/packages/next-intl/server.js +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/src/server'; diff --git a/packages/next-intl/src/server/NextIntlMiddlewareConfig.tsx b/packages/next-intl/src/middleware/NextIntlMiddlewareConfig.tsx similarity index 69% rename from packages/next-intl/src/server/NextIntlMiddlewareConfig.tsx rename to packages/next-intl/src/middleware/NextIntlMiddlewareConfig.tsx index 5e5f3239a..2408ba4ce 100644 --- a/packages/next-intl/src/server/NextIntlMiddlewareConfig.tsx +++ b/packages/next-intl/src/middleware/NextIntlMiddlewareConfig.tsx @@ -7,6 +7,9 @@ type NextIntlMiddlewareConfig = { /** Configure a list of domains where the `defaultLocale` is changed (e.g. `es.example.com/about`, `example.fr/about`). Note that the `x-forwarded-host` or alternatively the `host` header will be used to determine the requested domain. */ domains?: Array<{domain: string; defaultLocale: string}>; + + /** Sets the `Link` response header to notify search engines about content in other languages (defaults to `true`). See https://developers.google.com/search/docs/specialty/international/localized-versions#http */ + alternateLinks?: boolean; }; export default NextIntlMiddlewareConfig; diff --git a/packages/next-intl/src/middleware/getHost.tsx b/packages/next-intl/src/middleware/getHost.tsx new file mode 100644 index 000000000..9d420659e --- /dev/null +++ b/packages/next-intl/src/middleware/getHost.tsx @@ -0,0 +1,7 @@ +export default function getHost(requestHeaders: Headers) { + return ( + requestHeaders.get('x-forwarded-host') ?? + requestHeaders.get('host') ?? + undefined + ); +} diff --git a/packages/next-intl/src/middleware/index.tsx b/packages/next-intl/src/middleware/index.tsx new file mode 100644 index 000000000..db92141f5 --- /dev/null +++ b/packages/next-intl/src/middleware/index.tsx @@ -0,0 +1 @@ +export {default} from './middleware'; diff --git a/packages/next-intl/src/middleware.tsx b/packages/next-intl/src/middleware/middleware.tsx similarity index 86% rename from packages/next-intl/src/middleware.tsx rename to packages/next-intl/src/middleware/middleware.tsx index bc2a2cea2..eb37163aa 100644 --- a/packages/next-intl/src/middleware.tsx +++ b/packages/next-intl/src/middleware/middleware.tsx @@ -1,14 +1,13 @@ import {NextRequest, NextResponse} from 'next/server'; -import NextIntlMiddlewareConfig from './server/NextIntlMiddlewareConfig'; -import resolveLocale from './server/resolveLocale'; -import {COOKIE_LOCALE_NAME, HEADER_LOCALE_NAME} from './shared/constants'; +import {COOKIE_LOCALE_NAME, HEADER_LOCALE_NAME} from '../shared/constants'; +import NextIntlMiddlewareConfig from './NextIntlMiddlewareConfig'; +import resolveLocale from './resolveLocale'; +import setAlternateLinksHeader from './setAlternateLinksHeader'; const ROOT_URL = '/'; export default function createIntlMiddleware(config: NextIntlMiddlewareConfig) { return function middleware(request: NextRequest) { - // Ideally we could use the `headers()` and `cookies()` API here - // as well, but they are currently not available in middleware. const {domain, locale} = resolveLocale( config, request.headers, @@ -95,6 +94,10 @@ export default function createIntlMiddleware(config: NextIntlMiddlewareConfig) { response.cookies.set(COOKIE_LOCALE_NAME, locale); } + if ((config.alternateLinks ?? true) && config.locales.length > 1) { + setAlternateLinksHeader(config, request, response); + } + return response; }; } diff --git a/packages/next-intl/src/server/resolveLocale.tsx b/packages/next-intl/src/middleware/resolveLocale.tsx similarity index 95% rename from packages/next-intl/src/server/resolveLocale.tsx rename to packages/next-intl/src/middleware/resolveLocale.tsx index 5f41c853c..d9a8a585b 100644 --- a/packages/next-intl/src/server/resolveLocale.tsx +++ b/packages/next-intl/src/middleware/resolveLocale.tsx @@ -3,16 +3,13 @@ import Negotiator from 'negotiator'; import {RequestCookies} from 'next/dist/server/web/spec-extension/cookies'; import {COOKIE_LOCALE_NAME} from '../shared/constants'; import NextIntlMiddlewareConfig from './NextIntlMiddlewareConfig'; +import getHost from './getHost'; function findLocaleDomain( requestHeaders: Headers, i18n: NextIntlMiddlewareConfig ) { - let host = - requestHeaders.get('x-forwarded-host') ?? - requestHeaders.get('host') ?? - undefined; - + let host = getHost(requestHeaders); // Remove port host = host?.replace(/:\d+$/, ''); diff --git a/packages/next-intl/src/middleware/setAlternateLinksHeader.tsx b/packages/next-intl/src/middleware/setAlternateLinksHeader.tsx new file mode 100644 index 000000000..10e1252ca --- /dev/null +++ b/packages/next-intl/src/middleware/setAlternateLinksHeader.tsx @@ -0,0 +1,74 @@ +import {NextRequest, NextResponse} from 'next/server'; +import NextIntlMiddlewareConfig from './NextIntlMiddlewareConfig'; + +function getUnprefixedPathname( + config: NextIntlMiddlewareConfig, + request: NextRequest +) { + const url = new URL(request.url); + if (!url.pathname.endsWith('/')) { + url.pathname += '/'; + } + + url.pathname = url.pathname.replace( + new RegExp(`^/(${config.locales.join('|')})/`), + '/' + ); + + // Remove trailing slash + if (url.pathname !== '/') { + url.pathname = url.pathname.slice(0, -1); + } + + return url.toString(); +} + +function getAlternateEntry(url: string, locale: string) { + return `<${url}>; rel="alternate"; hreflang="${locale}"`; +} + +/** + * See https://developers.google.com/search/docs/specialty/international/localized-versions + */ +export default function setAlternateLinksHeader( + config: NextIntlMiddlewareConfig, + request: NextRequest, + response: NextResponse +) { + const unprefixedPathname = getUnprefixedPathname(config, request); + + const links = config.locales.flatMap((locale) => { + function localizePathname(url: URL) { + if (url.pathname === '/') { + url.pathname = `/${locale}`; + } else { + url.pathname = `/${locale}${url.pathname}`; + } + return url; + } + + let url; + + const domainConfigs = + config.domains?.filter((cur) => cur.defaultLocale === locale) || []; + + if (domainConfigs.length > 1) { + // Prio 1: Configured domain(s) + return domainConfigs.map((domainConfig) => { + url = new URL(unprefixedPathname); + url.host = domainConfig.domain; + return getAlternateEntry(url.toString(), locale); + }); + } else { + // Prio 2: Prefixed route + url = new URL(unprefixedPathname); + localizePathname(url); + } + + return getAlternateEntry(url.toString(), locale); + }); + + links.push(getAlternateEntry(unprefixedPathname, 'x-default')); + + response.headers.set('Link', links.join(', ')); +} diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index df470570a..c2e1ab5a3 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -85,6 +85,8 @@ module.exports = withNextIntl({ ```tsx import createIntlMiddleware from 'next-intl/middleware'; +// The middleware matches a locale for the user request +// and handles redirects and rewrites accordingly. export default createIntlMiddleware({ // A list of all locales that are supported locales: ['en', 'de'], @@ -98,14 +100,18 @@ export default createIntlMiddleware({ domain: 'example.de', defaultLocale: 'de' } - ] + ], + + // Sets the `Link` response header to notify search engines about + // links to the content in other languages (defaults to `true`). + alternateLinks: true }); export const config = { // Skip all paths that aren't pages that you'd like to internationalize. // If you use the `public` folder, make sure your static assets are ignored // (e.g. by moving them to a shared folder that is referenced here). - matcher: ['/((?!api|_next|favicon.ico).*)'] + matcher: ['/((?!api|_next|favicon.ico|assets).*)'] }; ``` From 8fc47fd545a2910035644a50d41ecf99405615f4 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Sun, 19 Feb 2023 12:51:33 +0100 Subject: [PATCH 145/312] 2.11.0-beta.15 --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index c2e1ab5a3..12038050f 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -13,7 +13,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current beta version ``` -npm install next-intl@2.11.0-beta.13 +npm install next-intl@2.11.0-beta.15 ``` This beta version was tested with `next@13.1.6`. From f849669e8044e9a076abf75ffffea57dfcfe47c2 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Sun, 19 Feb 2023 21:50:59 +0100 Subject: [PATCH 146/312] Styling improvements for RSC docs --- packages/website/components/Callout.js | 4 +-- .../pages/docs/next-13/server-components.mdx | 34 ++++++++++++++----- packages/website/styles.css | 25 ++++++++++++++ packages/website/theme.config.js | 2 +- 4 files changed, 53 insertions(+), 12 deletions(-) diff --git a/packages/website/components/Callout.js b/packages/website/components/Callout.js index d1f216d75..3daa0b691 100644 --- a/packages/website/components/Callout.js +++ b/packages/website/components/Callout.js @@ -7,10 +7,10 @@ const TypeToEmoji = { const classes = { default: cn( - 'border-green-700/20 bg-green-50 text-green-800 dark:border-green-400/30 dark:bg-green-400/20 dark:text-green-300' + 'border-green-700/20 bg-green-50 text-green-800 dark:border-green-400/20 dark:bg-green-600/10 dark:text-green-200' ), warning: cn( - 'nx-border-yellow-300 nx-bg-yellow-50 nx-text-yellow-900 dark:nx-border-yellow-200/30 dark:nx-bg-yellow-700/30 dark:nx-text-yellow-200' + 'border-yellow-300 bg-yellow-50 text-yellow-900 dark:border-yellow-200/20 dark:bg-yellow-700/20 dark:text-yellow-200' ) }; diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 364cfa976..ade0172f3 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -46,7 +46,13 @@ If you haven't done so already, [create a Next.js 13 app that uses the `app` dir **Now, set up the files as follows:** -1. Provide messages for a language, e.g. in `messages/en.json`. +
    + +### `messages/en.json` + +Messages can be provided locally or loaded from a remote data source (e.g. a translation management system). Use whatever suits your workflow best. + +The simplest option is to create JSON files locally that are separated by a [locale](). ```json filename="messages/en.json" { @@ -56,7 +62,9 @@ If you haven't done so already, [create a Next.js 13 app that uses the `app` dir } ``` -2. `next-intl` creates a configuration once per request and makes it available to all Server Components. Define this in `i18n.ts` (short for "internationalization"). +### `i18n.ts` + +`next-intl` creates a configuration once per request and makes it available to all Server Components. Here you can provide messages depending the locale of the user. ```tsx filename="i18n.ts" import {getRequestConfig} from 'next-intl/server'; @@ -66,7 +74,9 @@ export default getRequestConfig(async ({locale}) => ({ })); ``` -3. Set up the plugin and provide the path to your configuration in `next.config.js`. +### `next.config.js` + +Now, set up the plugin and provide the path to your configuration. ```js filename="next.config.js" const withNextIntl = require('next-intl/plugin')( @@ -80,13 +90,13 @@ module.exports = withNextIntl({ }); ``` -4. Create a [middleware](https://nextjs.org/docs/advanced-features/middleware) in `middleware.ts`. +### `middleware.ts` + +The middleware matches a locale for the user request and handles redirects and rewrites accordingly. ```tsx filename="middleware.ts" import createIntlMiddleware from 'next-intl/middleware'; -// The middleware matches a locale for the user request -// and handles redirects and rewrites accordingly. export default createIntlMiddleware({ // A list of all locales that are supported locales: ['en', 'de'], @@ -115,7 +125,9 @@ export const config = { }; ``` -5. Provide the matched `locale` to the document in `app/[locale]/layout.tsx`. +### `app/[locale]/layout.tsx` + +The `locale` that was matched by the middleware is available via `useLocale` everywhere in your app. As a first step, use it to configure the document language. ```tsx filename="app/[locale]/layout.tsx" import {useLocale} from 'next-intl'; @@ -143,7 +155,9 @@ export default function LocaleLayout({children, params}: Props) { } ``` -6. Use translations in your page component in `app/[locale]/page.tsx` or anywhere else! +### `app/[locale]/page.tsx` + +Use translations in your page components or anywhere else! ```tsx filename="app/[locale]/page.tsx" import {useTranslations} from 'next-intl'; @@ -154,7 +168,9 @@ export default function Index() { } ``` -That's all it takes! Now you can internationalize your apps purely on the server side. +
    + +That's all it takes! Now you can internationalize your apps on the server side. If you've encountered an issue, you can [explore the code for a working example](https://github.com/amannn/next-intl-example-next-13) ([demo](https://next-intl-example-next-13.vercel.app)). diff --git a/packages/website/styles.css b/packages/website/styles.css index b5c61c956..a19e88072 100644 --- a/packages/website/styles.css +++ b/packages/website/styles.css @@ -1,3 +1,28 @@ @tailwind base; @tailwind components; @tailwind utilities; + +/** + * Steps + */ + +.steps { + @apply ml-4 pl-6 border-l border-slate-200; + counter-reset: step; +} +.steps h3 { + counter-increment: step; + @apply text-lg; +} +.steps h3:before { + content: counter(step); + @apply inline-block absolute mt-[-6px] ml-[-44px] pt-[4px] w-10 h-10 text-center font-bold text-base text-slate-500 rounded-full border-4 border-white bg-slate-100; +} + +.dark .steps { + @apply border-slate-800; +} +.dark .steps h3:before { + @apply bg-slate-800 text-white/75; + border-color: rgba(17, 17, 17, var(--tw-bg-opacity)); /* nx-bg-dark */ +} diff --git a/packages/website/theme.config.js b/packages/website/theme.config.js index 61a0211f3..7355bba6f 100644 --- a/packages/website/theme.config.js +++ b/packages/website/theme.config.js @@ -74,7 +74,7 @@ export default { titleTemplate: '%s – next-intl' }; }, - primaryHue: 210, + primaryHue: {light: 210, dark: 195}, footer: { text: null, component: null From 2aee5eacdd8d3d61652f88020ada0efcb9a2d9a5 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Sun, 19 Feb 2023 22:08:06 +0100 Subject: [PATCH 147/312] Minor wording fixes --- .../website/pages/docs/getting-started.mdx | 2 +- .../pages/docs/next-13/client-components.mdx | 18 +++++++++--------- .../pages/docs/next-13/server-components.mdx | 12 +++--------- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/packages/website/pages/docs/getting-started.mdx b/packages/website/pages/docs/getting-started.mdx index 799489456..73107156d 100644 --- a/packages/website/pages/docs/getting-started.mdx +++ b/packages/website/pages/docs/getting-started.mdx @@ -86,7 +86,7 @@ export async function getStaticProps() {
  • Exploring `next-intl`? Check out the [usage guide](/docs/usage).
  • Decided you're sticking with `next-intl`? Consider the steps of the - [checklist for production](/docs/getting-started/production-checklist). + [checklist for production](/docs/production-checklist).
  • +
  • + Wondering how to link between internationalized pages? Have a look at [the + navigation docs](/docs/routing/navigation). +
  • +
  • + Are you transitioning from the Pages Router to the App Router? Check out the + migration example. +
  • diff --git a/docs/pages/docs/getting-started/pages-router.mdx b/docs/pages/docs/getting-started/pages-router.mdx index 0287542d3..bc1346933 100644 --- a/docs/pages/docs/getting-started/pages-router.mdx +++ b/docs/pages/docs/getting-started/pages-router.mdx @@ -1,7 +1,7 @@ import {Tab, Tabs} from 'nextra-theme-docs'; import Callout from 'components/Callout'; -# Next.js 13 internationalization (i18n) with the Pages Router +# Next.js internationalization (i18n) with the Pages Router While it's recommended to [use `next-intl` with the App Router](/docs/getting-started/app-router), the Pages Router is still fully supported. diff --git a/docs/pages/docs/routing/middleware.mdx b/docs/pages/docs/routing/middleware.mdx index 86e769dc2..9aa1f7ad9 100644 --- a/docs/pages/docs/routing/middleware.mdx +++ b/docs/pages/docs/routing/middleware.mdx @@ -1,6 +1,6 @@ import Callout from 'components/Callout'; -# Next.js 13 middleware for i18n routing +# Next.js middleware for i18n routing The middleware handles redirects and rewrites based on the detected user locale. @@ -479,7 +479,7 @@ export default function RootPage() { } ``` -You can explore a working demo by building [the Next.js 13 example](/examples/app-router) after enabling the static export: +You can explore a working demo by building [the Next.js App Router example](/examples/app-router) after enabling the static export: ```tsx filename="next.config.js" module.exports = { diff --git a/docs/pages/docs/routing/navigation.mdx b/docs/pages/docs/routing/navigation.mdx index 1ee242bf2..8f1937455 100644 --- a/docs/pages/docs/routing/navigation.mdx +++ b/docs/pages/docs/routing/navigation.mdx @@ -1,7 +1,7 @@ import Callout from 'components/Callout'; import {Tab, Tabs} from 'nextra-theme-docs'; -# Next.js 13 internationalized navigation +# Next.js App Router internationalized navigation `next-intl` provides drop-in replacements for common Next.js navigation APIs that automatically handle the user locale behind the scenes. diff --git a/docs/pages/docs/workflows/localization-management.mdx b/docs/pages/docs/workflows/localization-management.mdx index 2c25233f9..ea8855b0c 100644 --- a/docs/pages/docs/workflows/localization-management.mdx +++ b/docs/pages/docs/workflows/localization-management.mdx @@ -83,7 +83,7 @@ You can further simplify the process for translators by setting up diff --git a/examples/example-next-13-with-pages/README.md b/examples/example-next-13-with-pages/README.md index a3b5c1b63..07283c936 100644 --- a/examples/example-next-13-with-pages/README.md +++ b/examples/example-next-13-with-pages/README.md @@ -1,6 +1,6 @@ # example-next-13-with-pages -An example that showcases a basic installation of `next-intl` in a Next.js app that uses both the pages and the new app folder. +An example that showcases a basic installation of `next-intl` in a Next.js app that uses both the Pages as well as the App Router. **Important**: Do not add an `i18n` config to `next.config.js`, as it will cause the `app` directory to be ignored. From fd4b6a5bd9bac7f1b765cf997304869ee79220a1 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 8 Nov 2023 07:54:40 +0100 Subject: [PATCH 297/312] docs(RSC): Add Server Actions demo (#606) --- .../example-next-13-advanced/messages/de.json | 8 + .../example-next-13-advanced/messages/en.json | 3 + .../example-next-13-advanced/messages/es.json | 8 + .../example-next-13-advanced/package.json | 2 +- .../src/app/[locale]/actions/List.tsx | 38 +++++ .../src/app/[locale]/actions/ListItem.tsx | 6 + .../app/[locale]/actions/ListItemAsync.tsx | 6 + .../app/[locale]/actions/ListItemClient.tsx | 8 + .../src/app/[locale]/actions/page.tsx | 39 +++++ .../src/app/[locale]/opengraph-image.tsx | 2 +- .../example-next-13-with-pages/package.json | 2 +- pnpm-lock.yaml | 150 +----------------- 12 files changed, 125 insertions(+), 147 deletions(-) create mode 100644 examples/example-next-13-advanced/src/app/[locale]/actions/List.tsx create mode 100644 examples/example-next-13-advanced/src/app/[locale]/actions/ListItem.tsx create mode 100644 examples/example-next-13-advanced/src/app/[locale]/actions/ListItemAsync.tsx create mode 100644 examples/example-next-13-advanced/src/app/[locale]/actions/ListItemClient.tsx create mode 100644 examples/example-next-13-advanced/src/app/[locale]/actions/page.tsx diff --git a/examples/example-next-13-advanced/messages/de.json b/examples/example-next-13-advanced/messages/de.json index 86c12a2c3..f2c8a2254 100644 --- a/examples/example-next-13-advanced/messages/de.json +++ b/examples/example-next-13-advanced/messages/de.json @@ -5,6 +5,11 @@ "rich": "Das ist formatierter Test.", "globalDefaults": "{globalString}" }, + "AsyncComponent": { + "basic": "AsyncComponent", + "rich": "This is a rich text.", + "markup": "Markup with {globalString}" + }, "LocaleLayout": { "title": "next-intl Beispiel", "description": "Das ist ein Beispiel, wie next-intl im `app`-Verzeichnis verwendet werden kann." @@ -45,5 +50,8 @@ }, "OpenGraph": { "title": "next-intl Beispiel" + }, + "ServerActions": { + "item": "Element #{id}" } } diff --git a/examples/example-next-13-advanced/messages/en.json b/examples/example-next-13-advanced/messages/en.json index ff1babe11..cdbbdb93e 100644 --- a/examples/example-next-13-advanced/messages/en.json +++ b/examples/example-next-13-advanced/messages/en.json @@ -50,5 +50,8 @@ }, "OpenGraph": { "title": "next-intl example" + }, + "ServerActions": { + "item": "Item #{id}" } } diff --git a/examples/example-next-13-advanced/messages/es.json b/examples/example-next-13-advanced/messages/es.json index ed4c27356..dc4a979d9 100644 --- a/examples/example-next-13-advanced/messages/es.json +++ b/examples/example-next-13-advanced/messages/es.json @@ -5,6 +5,11 @@ "rich": "Este es un texto importante.", "globalDefaults": "{globalString}" }, + "AsyncComponent": { + "basic": "AsyncComponent", + "rich": "This is a rich text.", + "markup": "Markup with {globalString}" + }, "LocaleLayout": { "title": "Ejemplo next-intl", "description": "Este es un ejemplo de cómo usar next-intl en el directorio app." @@ -45,5 +50,8 @@ }, "OpenGraph": { "title": "Ejemplo next-intl" + }, + "ServerActions": { + "item": "Artículo #{id}" } } diff --git a/examples/example-next-13-advanced/package.json b/examples/example-next-13-advanced/package.json index 9ede48d02..2df98ac55 100644 --- a/examples/example-next-13-advanced/package.json +++ b/examples/example-next-13-advanced/package.json @@ -13,7 +13,7 @@ "dependencies": { "lodash": "^4.17.21", "ms": "2.1.3", - "next": "13.5.2", + "next": "14.0.1", "next-intl": "^2.13.2", "react": "^18.2.0", "react-dom": "^18.2.0" diff --git a/examples/example-next-13-advanced/src/app/[locale]/actions/List.tsx b/examples/example-next-13-advanced/src/app/[locale]/actions/List.tsx new file mode 100644 index 000000000..497317785 --- /dev/null +++ b/examples/example-next-13-advanced/src/app/[locale]/actions/List.tsx @@ -0,0 +1,38 @@ +'use client'; + +import {ReactNode, useEffect, useState} from 'react'; + +type Props = { + getNextItem(curLength: number): Promise; + title: string; +}; + +export default function List({getNextItem, title}: Props) { + const [isMounted, setIsMounted] = useState(false); + const [items, setItems] = useState>([]); + + function onAddItem() { + getNextItem(items.length).then((item) => { + setItems([...items, item]); + }); + } + + useEffect(() => { + setIsMounted(true); + }, []); + + return ( +
    +

    {title}

    +

    {isMounted && 'Mounted'}

    +
      + {items.map((item, index) => ( +
    • {item}
    • + ))} +
    + +
    + ); +} diff --git a/examples/example-next-13-advanced/src/app/[locale]/actions/ListItem.tsx b/examples/example-next-13-advanced/src/app/[locale]/actions/ListItem.tsx new file mode 100644 index 000000000..df1a9e5b7 --- /dev/null +++ b/examples/example-next-13-advanced/src/app/[locale]/actions/ListItem.tsx @@ -0,0 +1,6 @@ +import {useTranslations} from 'next-intl'; + +export default function ListItem({id}: {id: number}) { + const t = useTranslations('ServerActions'); + return t('item', {id}); +} diff --git a/examples/example-next-13-advanced/src/app/[locale]/actions/ListItemAsync.tsx b/examples/example-next-13-advanced/src/app/[locale]/actions/ListItemAsync.tsx new file mode 100644 index 000000000..801919ba3 --- /dev/null +++ b/examples/example-next-13-advanced/src/app/[locale]/actions/ListItemAsync.tsx @@ -0,0 +1,6 @@ +import {getTranslations} from 'next-intl/server'; + +export default async function ListItemAsync({id}: {id: number}) { + const t = await getTranslations('ServerActions'); + return t('item', {id}); +} diff --git a/examples/example-next-13-advanced/src/app/[locale]/actions/ListItemClient.tsx b/examples/example-next-13-advanced/src/app/[locale]/actions/ListItemClient.tsx new file mode 100644 index 000000000..b94cf8749 --- /dev/null +++ b/examples/example-next-13-advanced/src/app/[locale]/actions/ListItemClient.tsx @@ -0,0 +1,8 @@ +'use client'; + +import {useTranslations} from 'next-intl'; + +export default function ListItemClient({id}: {id: number}) { + const t = useTranslations('ServerActions'); + return t('item', {id}); +} diff --git a/examples/example-next-13-advanced/src/app/[locale]/actions/page.tsx b/examples/example-next-13-advanced/src/app/[locale]/actions/page.tsx new file mode 100644 index 000000000..8c875e923 --- /dev/null +++ b/examples/example-next-13-advanced/src/app/[locale]/actions/page.tsx @@ -0,0 +1,39 @@ +import {pick} from 'lodash'; +import {NextIntlClientProvider, useMessages} from 'next-intl'; +import List from './List'; +import ListItem from './ListItem'; +import ListItemAsync from './ListItemAsync'; +import ListItemClient from './ListItemClient'; + +export default function ServerActions() { + return ( + <> + { + 'use server'; + const id = curLength + 1; + return ; + }} + title="Shared Server Components" + /> + { + 'use server'; + const id = curLength + 1; + return ; + }} + title="Async Server Components" + /> + + { + 'use server'; + const id = curLength + 1; + return ; + }} + title="Client Components" + /> + + + ); +} diff --git a/examples/example-next-13-advanced/src/app/[locale]/opengraph-image.tsx b/examples/example-next-13-advanced/src/app/[locale]/opengraph-image.tsx index 345cbb46f..763972462 100644 --- a/examples/example-next-13-advanced/src/app/[locale]/opengraph-image.tsx +++ b/examples/example-next-13-advanced/src/app/[locale]/opengraph-image.tsx @@ -1,4 +1,4 @@ -import {ImageResponse} from 'next/server'; +import {ImageResponse} from 'next/og'; import {getTranslations} from 'next-intl/server'; type Props = { diff --git a/examples/example-next-13-with-pages/package.json b/examples/example-next-13-with-pages/package.json index ba0d0ac12..4329bdc24 100644 --- a/examples/example-next-13-with-pages/package.json +++ b/examples/example-next-13-with-pages/package.json @@ -10,7 +10,7 @@ "start": "next start" }, "dependencies": { - "next": "13.5.2", + "next": "14.0.1", "next-intl": "^2.13.2", "react": "^18.2.0", "react-dom": "^18.2.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 667230a7b..396426128 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -289,8 +289,8 @@ importers: specifier: 2.1.3 version: 2.1.3 next: - specifier: 13.5.2 - version: 13.5.2(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0) + specifier: 14.0.1 + version: 14.0.1(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0) next-intl: specifier: ^2.13.2 version: link:../../packages/next-intl @@ -378,8 +378,8 @@ importers: examples/example-next-13-with-pages: dependencies: next: - specifier: 13.5.2 - version: 13.5.2(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0) + specifier: 14.0.1 + version: 14.0.1(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0) next-intl: specifier: ^2.13.2 version: link:../../packages/next-intl @@ -5241,10 +5241,6 @@ packages: '@napi-rs/simple-git-win32-x64-msvc': 0.1.9 dev: false - /@next/env@13.5.2: - resolution: {integrity: sha512-dUseBIQVax+XtdJPzhwww4GetTjlkRSsXeQnisIJWBaHsnxYcN2RGzsPHi58D6qnkATjnhuAtQTJmR1hKYQQPg==} - dev: false - /@next/env@14.0.1: resolution: {integrity: sha512-Ms8ZswqY65/YfcjrlcIwMPD7Rg/dVjdLapMcSHG26W6O67EJDF435ShW4H4LXi1xKO1oRc97tLXUpx8jpLe86A==} @@ -5254,15 +5250,6 @@ packages: glob: 7.1.7 dev: true - /@next/swc-darwin-arm64@13.5.2: - resolution: {integrity: sha512-7eAyunAWq6yFwdSQliWMmGhObPpHTesiKxMw4DWVxhm5yLotBj8FCR4PXGkpRP2tf8QhaWuVba+/fyAYggqfQg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - /@next/swc-darwin-arm64@14.0.1: resolution: {integrity: sha512-JyxnGCS4qT67hdOKQ0CkgFTp+PXub5W1wsGvIq98TNbF3YEIN7iDekYhYsZzc8Ov0pWEsghQt+tANdidITCLaw==} engines: {node: '>= 10'} @@ -5271,15 +5258,6 @@ packages: requiresBuild: true optional: true - /@next/swc-darwin-x64@13.5.2: - resolution: {integrity: sha512-WxXYWE7zF1ch8rrNh5xbIWzhMVas6Vbw+9BCSyZvu7gZC5EEiyZNJsafsC89qlaSA7BnmsDXVWQmc+s1feSYbQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - /@next/swc-darwin-x64@14.0.1: resolution: {integrity: sha512-625Z7bb5AyIzswF9hvfZWa+HTwFZw+Jn3lOBNZB87lUS0iuCYDHqk3ujuHCkiyPtSC0xFBtYDLcrZ11mF/ap3w==} engines: {node: '>= 10'} @@ -5288,15 +5266,6 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-arm64-gnu@13.5.2: - resolution: {integrity: sha512-URSwhRYrbj/4MSBjLlefPTK3/tvg95TTm6mRaiZWBB6Za3hpHKi8vSdnCMw5D2aP6k0sQQIEG6Pzcfwm+C5vrg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-arm64-gnu@14.0.1: resolution: {integrity: sha512-iVpn3KG3DprFXzVHM09kvb//4CNNXBQ9NB/pTm8LO+vnnnaObnzFdS5KM+w1okwa32xH0g8EvZIhoB3fI3mS1g==} engines: {node: '>= 10'} @@ -5305,15 +5274,6 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-arm64-musl@13.5.2: - resolution: {integrity: sha512-HefiwAdIygFyNmyVsQeiJp+j8vPKpIRYDlmTlF9/tLdcd3qEL/UEBswa1M7cvO8nHcr27ZTKXz5m7dkd56/Esg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-arm64-musl@14.0.1: resolution: {integrity: sha512-mVsGyMxTLWZXyD5sen6kGOTYVOO67lZjLApIj/JsTEEohDDt1im2nkspzfV5MvhfS7diDw6Rp/xvAQaWZTv1Ww==} engines: {node: '>= 10'} @@ -5322,15 +5282,6 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-x64-gnu@13.5.2: - resolution: {integrity: sha512-htGVVroW0tdHgMYwKWkxWvVoG2RlAdDXRO1RQxYDvOBQsaV0nZsgKkw0EJJJ3urTYnwKskn/MXm305cOgRxD2w==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-x64-gnu@14.0.1: resolution: {integrity: sha512-wMqf90uDWN001NqCM/auRl3+qVVeKfjJdT9XW+RMIOf+rhUzadmYJu++tp2y+hUbb6GTRhT+VjQzcgg/QTD9NQ==} engines: {node: '>= 10'} @@ -5339,15 +5290,6 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-x64-musl@13.5.2: - resolution: {integrity: sha512-UBD333GxbHVGi7VDJPPDD1bKnx30gn2clifNJbla7vo5nmBV+x5adyARg05RiT9amIpda6yzAEEUu+s774ldkw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-x64-musl@14.0.1: resolution: {integrity: sha512-ol1X1e24w4j4QwdeNjfX0f+Nza25n+ymY0T2frTyalVczUmzkVD7QGgPTZMHfR1aLrO69hBs0G3QBYaj22J5GQ==} engines: {node: '>= 10'} @@ -5356,15 +5298,6 @@ packages: requiresBuild: true optional: true - /@next/swc-win32-arm64-msvc@13.5.2: - resolution: {integrity: sha512-Em9ApaSFIQnWXRT3K6iFnr9uBXymixLc65Xw4eNt7glgH0eiXpg+QhjmgI2BFyc7k4ZIjglfukt9saNpEyolWA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-arm64-msvc@14.0.1: resolution: {integrity: sha512-WEmTEeWs6yRUEnUlahTgvZteh5RJc4sEjCQIodJlZZ5/VJwVP8p2L7l6VhzQhT4h7KvLx/Ed4UViBdne6zpIsw==} engines: {node: '>= 10'} @@ -5373,15 +5306,6 @@ packages: requiresBuild: true optional: true - /@next/swc-win32-ia32-msvc@13.5.2: - resolution: {integrity: sha512-TBACBvvNYU+87X0yklSuAseqdpua8m/P79P0SG1fWUvWDDA14jASIg7kr86AuY5qix47nZLEJ5WWS0L20jAUNw==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-ia32-msvc@14.0.1: resolution: {integrity: sha512-oFpHphN4ygAgZUKjzga7SoH2VGbEJXZa/KL8bHCAwCjDWle6R1SpiGOdUdA8EJ9YsG1TYWpzY6FTbUA+iAJeww==} engines: {node: '>= 10'} @@ -5390,15 +5314,6 @@ packages: requiresBuild: true optional: true - /@next/swc-win32-x64-msvc@13.5.2: - resolution: {integrity: sha512-LfTHt+hTL8w7F9hnB3H4nRasCzLD/fP+h4/GUVBTxrkMJOnh/7OZ0XbYDKO/uuWwryJS9kZjhxcruBiYwc5UDw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-x64-msvc@14.0.1: resolution: {integrity: sha512-FFp3nOJ/5qSpeWT0BZQ+YE1pSMk4IMpkME/1DwKBwhg4mJLB9L+6EXuJi4JEwaJdl5iN+UUlmUD3IsR1kx5fAg==} engines: {node: '>= 10'} @@ -11952,7 +11867,7 @@ packages: tailwindcss: ^3.3.2 dependencies: fast-glob: 3.2.12 - postcss: 8.4.24 + postcss: 8.4.31 tailwindcss: 3.3.2 dev: true @@ -11963,7 +11878,7 @@ packages: tailwindcss: ^3.3.2 dependencies: fast-glob: 3.2.12 - postcss: 8.4.24 + postcss: 8.4.31 tailwindcss: 3.3.3 dev: true @@ -18043,46 +17958,6 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /next@13.5.2(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-vog4UhUaMYAzeqfiAAmgB/QWLW7p01/sg+2vn6bqc/CxHFYizMzLv6gjxKzl31EVFkfl/F+GbxlKizlkTE9RdA==} - engines: {node: '>=16.14.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - sass: - optional: true - dependencies: - '@next/env': 13.5.2 - '@swc/helpers': 0.5.2 - busboy: 1.6.0 - caniuse-lite: 1.0.30001509 - postcss: 8.4.14 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.22.5)(react@18.2.0) - watchpack: 2.4.0 - zod: 3.21.4 - optionalDependencies: - '@next/swc-darwin-arm64': 13.5.2 - '@next/swc-darwin-x64': 13.5.2 - '@next/swc-linux-arm64-gnu': 13.5.2 - '@next/swc-linux-arm64-musl': 13.5.2 - '@next/swc-linux-x64-gnu': 13.5.2 - '@next/swc-linux-x64-musl': 13.5.2 - '@next/swc-win32-arm64-msvc': 13.5.2 - '@next/swc-win32-ia32-msvc': 13.5.2 - '@next/swc-win32-x64-msvc': 13.5.2 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - dev: false - /next@14.0.1(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-s4YaLpE4b0gmb3ggtmpmV+wt+lPRuGtANzojMQ2+gmBpgX9w5fTbjsy6dXByBuENsdCX5pukZH/GxdFgO62+pA==} engines: {node: '>=18.17.0'} @@ -20043,15 +19918,6 @@ packages: source-map: 0.6.1 dev: false - /postcss@8.4.14: - resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.6 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: false - /postcss@8.4.23: resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==} engines: {node: ^10 || ^12 || >=14} @@ -24992,10 +24858,6 @@ packages: engines: {node: '>=12.20'} dev: true - /zod@3.21.4: - resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} - dev: false - /zod@3.22.4: resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} dev: false From 78bdcaad653866ecd4d660ad32a50a5c24f57109 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 8 Nov 2023 08:19:07 +0100 Subject: [PATCH 298/312] docs: Add note on `force-static` --- docs/pages/docs/routing/middleware.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/pages/docs/routing/middleware.mdx b/docs/pages/docs/routing/middleware.mdx index 9aa1f7ad9..ec265eb06 100644 --- a/docs/pages/docs/routing/middleware.mdx +++ b/docs/pages/docs/routing/middleware.mdx @@ -496,6 +496,7 @@ This can happen either because: 1. The middleware is not set up. 2. The middleware is set up in the wrong file (e.g. you're using the `src` folder, but `middleware.ts` was added in the root folder). 3. The middleware matcher didn't match a request, but you're using APIs from `next-intl` in a component. +4. You're attempting to implement static rendering via [`force-static`](https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config#dynamic). To recover from this error, please make sure that: @@ -503,3 +504,4 @@ To recover from this error, please make sure that: 2. You're using APIs from `next-intl` (including [the navigation APIs](/docs/routing/navigation)) exclusively within the `locale` segment. 3. Your [middleware matcher](#matcher-config) matches all routes of your application, including dynamic segments with potentially unexpected characters like dots (e.g. `/users/jane.doe`). 4. If you're using [`localePrefix: 'as-needed'`](#locale-prefix-as-needed), the `locale` segment effectively acts like a catch-all for all unknown routes. You should make sure that `params.locale` is [validated](/docs/getting-started/app-router#applocalelayouttsx) before it's used by any APIs from `next-intl`. +5. To implement static rendering properly, make sure to [provide a static locale](/docs/getting-started/app-router#static-rendering) to `next-intl`. From e8c981808270d03000c0befe457879c2ee7a7d9d Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 9 Nov 2023 19:54:24 +0100 Subject: [PATCH 299/312] docs: Fix typos, include more background info on `unstable_setRequestLocale` --- docs/components/CodeSnippets.tsx | 2 +- docs/components/Hero.tsx | 2 +- docs/components/HeroCode.tsx | 2 +- docs/pages/docs/getting-started/app-router.mdx | 13 +++++++++++++ 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/docs/components/CodeSnippets.tsx b/docs/components/CodeSnippets.tsx index 6193863de..5bb02eb52 100644 --- a/docs/components/CodeSnippets.tsx +++ b/docs/components/CodeSnippets.tsx @@ -19,7 +19,7 @@ function icu() { : - "{'{'}username{'}'}'s profile" + "{'{'}firstName{'}'}'s profile" , diff --git a/docs/components/Hero.tsx b/docs/components/Hero.tsx index c99fceb37..81773972f 100644 --- a/docs/components/Hero.tsx +++ b/docs/components/Hero.tsx @@ -47,7 +47,7 @@ export default function Hero({
  • Ran into an issue? Have a look at [the minimal setup diff --git a/packages/website/pages/docs/next-13/client-components.mdx b/packages/website/pages/docs/next-13/client-components.mdx index b4ab9dc77..91c4e44c8 100644 --- a/packages/website/pages/docs/next-13/client-components.mdx +++ b/packages/website/pages/docs/next-13/client-components.mdx @@ -106,14 +106,14 @@ If you've encountered an issue, you can [explore the code for a working example] In the `pages` folder, Next.js automatically considers the current locale for `next/link`. Since this is no longer the case for the `app` directory, you can add a component that wraps `next/link` accordingly as a drop-in replacement. -```tsx filename="LocalizedLink.tsx" +```tsx filename="Link.tsx" import {useLocale} from 'next-intl'; -import Link from 'next/link'; +import NextLink from 'next/link'; import {ComponentProps, forwardRef} from 'react'; -type Props = ComponentProps; +type Props = ComponentProps; -function LocalizedLink({href, ...rest}: Props, ref: Props['ref']) { +function Link({href, ...rest}: Props, ref: Props['ref']) { const locale = useLocale(); function getLocalizedHref(originalHref: string) { @@ -127,17 +127,17 @@ function LocalizedLink({href, ...rest}: Props, ref: Props['ref']) { ? {...href, pathname: getLocalizedHref(href.pathname)} : href; - return ; + return ; } -export default forwardRef(LocalizedLink); +export default forwardRef(Link); ``` ```tsx // Usage while being on `/en` -Goes to `/en` -Goes to `/en/nested` -Goes to `/en/nested` +Goes to `/en` +Goes to `/en/nested` +Goes to `/en/nested` ``` diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index ade0172f3..ca924f07c 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -127,19 +127,13 @@ export const config = { ### `app/[locale]/layout.tsx` -The `locale` that was matched by the middleware is available via `useLocale` everywhere in your app. As a first step, use it to configure the document language. +The `locale` that was matched by the middleware is available via `useLocale` and can be used to configure the document language. ```tsx filename="app/[locale]/layout.tsx" import {useLocale} from 'next-intl'; import {notFound} from 'next/navigation'; -import {ReactNode} from 'react'; -type Props = { - children: ReactNode; - params: {locale: string}; -}; - -export default function LocaleLayout({children, params}: Props) { +export default function LocaleLayout({children, params}) { const locale = useLocale(); // Show a 404 error if the user requests an unknown locale @@ -174,7 +168,7 @@ That's all it takes! Now you can internationalize your apps on the server side. If you've encountered an issue, you can [explore the code for a working example](https://github.com/amannn/next-intl-example-next-13) ([demo](https://next-intl-example-next-13.vercel.app)). -If you're in a transitioning phase, either from the `pages` directory to the `app` directory, or from Client Components to the Server Components beta, you can apply `NextIntlClientProvider` additionally. +If you're in a transitioning phase, either from the `pages` directory to the `app` directory, or from Client Components to the Server Components beta, you can apply [`NextIntlClientProvider`](/docs/next-13/client-components) additionally. ## Routing From 1e77472b444288f31f21a3e3fec185a9fe2521c3 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 21 Feb 2023 16:37:40 +0100 Subject: [PATCH 148/312] Fix not-found example --- .../src/app/[locale]/[...rest]/page.tsx | 7 +++++++ .../src/app/[locale]/not-found.tsx | 7 +++++++ .../example-next-13-advanced/src/app/not-found.tsx | 14 -------------- .../example-next-13-advanced/tests/main.spec.ts | 4 +++- 4 files changed, 17 insertions(+), 15 deletions(-) create mode 100644 packages/example-next-13-advanced/src/app/[locale]/[...rest]/page.tsx create mode 100644 packages/example-next-13-advanced/src/app/[locale]/not-found.tsx delete mode 100644 packages/example-next-13-advanced/src/app/not-found.tsx diff --git a/packages/example-next-13-advanced/src/app/[locale]/[...rest]/page.tsx b/packages/example-next-13-advanced/src/app/[locale]/[...rest]/page.tsx new file mode 100644 index 000000000..44dc6ff15 --- /dev/null +++ b/packages/example-next-13-advanced/src/app/[locale]/[...rest]/page.tsx @@ -0,0 +1,7 @@ +import {notFound} from 'next/navigation'; + +export default function CatchAll() { + // `not-found` currently only renders when triggered by the `notFound` function + // https://beta.nextjs.org/docs/api-reference/file-conventions/not-found + notFound(); +} diff --git a/packages/example-next-13-advanced/src/app/[locale]/not-found.tsx b/packages/example-next-13-advanced/src/app/[locale]/not-found.tsx new file mode 100644 index 000000000..77ad0ea1d --- /dev/null +++ b/packages/example-next-13-advanced/src/app/[locale]/not-found.tsx @@ -0,0 +1,7 @@ +import {useTranslations} from 'next-intl'; +import PageLayout from '../../components/PageLayout'; + +export default function NotFound() { + const t = useTranslations('NotFound'); + return ; +} diff --git a/packages/example-next-13-advanced/src/app/not-found.tsx b/packages/example-next-13-advanced/src/app/not-found.tsx deleted file mode 100644 index 5c04b266b..000000000 --- a/packages/example-next-13-advanced/src/app/not-found.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import {useLocale, useTranslations} from 'next-intl'; - -export default function NotFound() { - const locale = useLocale(); - const t = useTranslations('NotFound'); - - return ( - - -

    {t('title')}

    - - - ); -} diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index 0b77d9037..a775175d3 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -4,7 +4,9 @@ it('handles unknown locales', async ({page}) => { const response = await page.goto('/unknown'); expect(response?.status()).toBe(404); await expect(page).toHaveURL('/unknown'); - page.getByRole('heading', {name: 'This page was not found (404)'}); + await expect( + page.getByRole('heading', {name: 'This page was not found (404)'}) + ).toBeVisible(); }); it('redirects to a matched locale at the root for non-default locales', async ({ From 6bae9cf072aa6211f88d79e45efca865d52992f3 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 21 Feb 2023 17:01:08 +0100 Subject: [PATCH 149/312] Fix build --- .../src/app/[locale]/[...rest]/page.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/example-next-13-advanced/src/app/[locale]/[...rest]/page.tsx b/packages/example-next-13-advanced/src/app/[locale]/[...rest]/page.tsx index 44dc6ff15..4c9f4064a 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/[...rest]/page.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/[...rest]/page.tsx @@ -4,4 +4,6 @@ export default function CatchAll() { // `not-found` currently only renders when triggered by the `notFound` function // https://beta.nextjs.org/docs/api-reference/file-conventions/not-found notFound(); + + return null; } From 3d25ca55b1d287298b217bdbbaf98d962b313d07 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 21 Feb 2023 17:48:00 +0100 Subject: [PATCH 150/312] Improve middleware docs --- .../pages/docs/next-13/server-components.mdx | 65 ++++++++++++++----- 1 file changed, 48 insertions(+), 17 deletions(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index f76fb9964..f110d035a 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -92,7 +92,7 @@ module.exports = withNextIntl({ ### `middleware.ts` -The middleware matches a locale for the user request and handles redirects and rewrites accordingly. +The middleware matches a locale for the request and handles redirects and rewrites accordingly. ```tsx filename="middleware.ts" import createIntlMiddleware from 'next-intl/middleware'; @@ -102,25 +102,11 @@ export default createIntlMiddleware({ locales: ['en', 'de'], // If this locale is matched, pathnames work without a prefix (e.g. `/about`) - defaultLocale: 'en', - - // Optionally configure a list of domains where the `defaultLocale` is changed - domains: [ - { - domain: 'example.de', - defaultLocale: 'de' - } - ], - - // Sets the `Link` response header to notify search engines about - // links to the content in other languages (defaults to `true`). - alternateLinks: true + defaultLocale: 'en' }); export const config = { - // Skip all paths that aren't pages that you'd like to internationalize. - // If you use the `public` folder, make sure your static assets are ignored - // (e.g. by moving them to a shared folder that is referenced here). + // Skip all paths that aren't pages that you'd like to internationalize matcher: ['/((?!api|_next|favicon.ico|assets).*)'] }; ``` @@ -249,6 +235,51 @@ export default getRequestConfig(async ({locale}) => ({ })); ``` +## Middleware configuration + +The middleware handles rewrites and redirects based on the detected user locale. + +```tsx filename="middleware.ts" +import createIntlMiddleware from 'next-intl/middleware'; + +export default createIntlMiddleware({ + // A list of all locales that are supported + locales: ['en', 'de'], + + // If this locale is matched, pathnames work without a prefix (e.g. `/about`) + defaultLocale: 'en', + + // Optionally configure a list of domains where the `defaultLocale` is changed + domains: [ + { + domain: 'example.de', + defaultLocale: 'de' + } + ], + + // Sets the `Link` response header to notify search engines about + // links to the content in other languages (defaults to `true`). + alternateLinks: true +}); + +export const config = { + // Skip all paths that aren't pages that you'd like to internationalize. + // If you use the `public` folder, make sure your static assets are ignored + // (e.g. by moving them to a shared folder that is referenced here). + matcher: ['/((?!api|_next|favicon.ico|assets).*)'] +}; +``` + +The locale is matched based on this priority order: + +1. **Locale prefix**: The pathname is prefixed with a configured locale (e.g. `/en`). +2. **Domain**: The host of the requested URL matches against an item in the `domains` list. The host is read from the `x-forwarded-host` or alternatively the `host` header. +3. **Cookie**: There's an existing cookie that contains the locale that was matched from a previous request. +4. **`accept-language` header**: The available `locales` are matched against the [`accept-language` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language). +5. **Default fallback**: If nothing else matches, then the `defaultLocale` is used. + +If the default locale matches, the request will be **rewritten** to the corresponding sub path (e.g. `/about` to `/en/about`). If a non-default locale is matched and the user requests the root pathname, then the user is **redirected** to to the respective sub path (e.g. `/` to `/de`). + ## Using internationalization outside of components If you need to use translated messages in functions like `generateMetadata`, you can import awaitable versions of the functions that you usually call as hooks from `next-intl/server`. From c8566d67f322c0dae95061403e8c8c467e93720a Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 21 Feb 2023 18:08:33 +0100 Subject: [PATCH 151/312] Add docs about localized rewrites --- .../example-next-13-advanced/next.config.js | 10 ++++++++- .../tests/main.spec.ts | 15 +++++++++++++ .../pages/docs/next-13/server-components.mdx | 22 +++++++++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/packages/example-next-13-advanced/next.config.js b/packages/example-next-13-advanced/next.config.js index 948a68283..3bf0c1b96 100644 --- a/packages/example-next-13-advanced/next.config.js +++ b/packages/example-next-13-advanced/next.config.js @@ -1,5 +1,13 @@ const withNextIntl = require('next-intl/plugin')(); module.exports = withNextIntl({ - experimental: {appDir: true} + experimental: {appDir: true}, + rewrites() { + return [ + { + source: '/de/verschachtelt', + destination: '/de/nested' + } + ]; + } }); diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index a775175d3..dfbc59f1a 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -367,6 +367,21 @@ it('sets alternate links', async ({request}) => { } }); +it('can use rewrites to handle localized pathnames', async ({ + page, + request +}) => { + await page.goto('/de/verschachtelt'); + page.getByRole('heading', {name: 'Verschachtelt'}); + + // Also available + await page.goto('/de/nested'); + page.getByRole('heading', {name: 'Verschachtelt'}); + + const response = await request.get('/en/verschachtelt'); + expect(response.status()).toBe(404); +}); + it.skip('can localize route handlers', async ({request}) => { // Default { diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index f110d035a..57d5ca0e3 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -348,6 +348,28 @@ This way your messages never leave the server and the client only needs to load If you absolutely need to use functionality from `next-intl` on the client side, you can wrap the respective components with `NextIntlClientProvider` ([example code](https://github.com/amannn/next-intl/blob/feat/next-13-rsc/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx)). Note however that this will increase your client bundle size. +## Localizing pathnames + +If you want to localize the pathnames of your app, you can accomplish this by using appropriate [rewrites](https://nextjs.org/docs/api-reference/next.config.js/rewrites). + +```js filename="next.config.js" +const withNextIntl = require('next-intl/plugin')(); + +module.exports = withNextIntl({ + experimental: {appDir: true}, + rewrites() { + return [ + { + source: '/de/über', + destination: '/de/about' + } + ]; + } +}); +``` + +Note that you want to turn off the `alternateLinks` option in [the middleware](#middleware-configuration) in this case and provide [search engine hints about localized versions of your content](https://developers.google.com/search/docs/specialty/international/localized-versions) by yourself, as `next-intl` isn't aware of your rewrites. + ## Providing feedback If you have feedback about using `next-intl` in the `app` directory, feel free to leave feedback in [the PR which implements the React Server Components support](https://github.com/amannn/next-intl/pull/149). From 298dea8bbfe19135143686013bbc2761ea5ae1a1 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 21 Feb 2023 18:18:48 +0100 Subject: [PATCH 152/312] Wording --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 57d5ca0e3..9ebc61784 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -368,7 +368,7 @@ module.exports = withNextIntl({ }); ``` -Note that you want to turn off the `alternateLinks` option in [the middleware](#middleware-configuration) in this case and provide [search engine hints about localized versions of your content](https://developers.google.com/search/docs/specialty/international/localized-versions) by yourself, as `next-intl` isn't aware of your rewrites. +Note that you want to turn off the `alternateLinks` option in [the middleware](#middleware-configuration) in this case and provide [search engine hints about localized versions of your content](https://developers.google.com/search/docs/specialty/international/localized-versions) by yourself, as the middleware isn't aware of your rewrites. ## Providing feedback From 9112475cb652909bdda19683d984d471f15f0f4e Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 21 Feb 2023 19:05:54 +0100 Subject: [PATCH 153/312] Gracefully handle invalid locales saved in the cookie --- packages/example-next-13-advanced/tests/main.spec.ts | 12 ++++++++++++ packages/next-intl/src/middleware/resolveLocale.tsx | 5 ++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index dfbc59f1a..3dfdb8ae8 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -382,6 +382,18 @@ it('can use rewrites to handle localized pathnames', async ({ expect(response.status()).toBe(404); }); +it('replaces invalid cookie locales', async ({request}) => { + const response = await request.get('/', { + maxRedirects: 0, + headers: { + cookie: 'NEXT_LOCALE=zh' + } + }); + expect(new URL(response.url()).pathname).toBe('/'); + expect(response.status()).toBe(200); + expect(response.headers()['set-cookie']).toBe('NEXT_LOCALE=en; Path=/'); +}); + it.skip('can localize route handlers', async ({request}) => { // Default { diff --git a/packages/next-intl/src/middleware/resolveLocale.tsx b/packages/next-intl/src/middleware/resolveLocale.tsx index d9a8a585b..ef96ec05d 100644 --- a/packages/next-intl/src/middleware/resolveLocale.tsx +++ b/packages/next-intl/src/middleware/resolveLocale.tsx @@ -60,7 +60,10 @@ export default function resolveLocale( // Prio 3: Use existing cookie if (!locale && requestCookies) { if (requestCookies.has(COOKIE_LOCALE_NAME)) { - locale = requestCookies.get(COOKIE_LOCALE_NAME)?.value; + const value = requestCookies.get(COOKIE_LOCALE_NAME)?.value; + if (value && i18n.locales.includes(value)) { + locale = value; + } } } From b5cd0da81344693754aa50f421acc8b65821742c Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 21 Feb 2023 21:20:25 +0100 Subject: [PATCH 154/312] Named routes example for localized pathnames --- .../example-next-13-advanced/messages/de.json | 5 + .../example-next-13-advanced/messages/en.json | 5 + .../example-next-13-advanced/messages/es.json | 7 +- .../example-next-13-advanced/next.config.js | 4 + .../src/components/Navigation.tsx | 8 +- .../src/hooks/useNamedRoute.tsx | 5 + .../tests/main.spec.ts | 18 ++- .../pages/docs/next-13/server-components.mdx | 127 +++++++++--------- 8 files changed, 109 insertions(+), 70 deletions(-) create mode 100644 packages/example-next-13-advanced/src/hooks/useNamedRoute.tsx diff --git a/packages/example-next-13-advanced/messages/de.json b/packages/example-next-13-advanced/messages/de.json index 4040e7dcb..eb63e250b 100644 --- a/packages/example-next-13-advanced/messages/de.json +++ b/packages/example-next-13-advanced/messages/de.json @@ -38,5 +38,10 @@ }, "ApiRoute": { "hello": "Hallo {name}!" + }, + "useNamedRoute": { + "home": "/", + "client": "/client", + "nested": "/verschachtelt" } } diff --git a/packages/example-next-13-advanced/messages/en.json b/packages/example-next-13-advanced/messages/en.json index c5dc6a775..0b07b33e2 100644 --- a/packages/example-next-13-advanced/messages/en.json +++ b/packages/example-next-13-advanced/messages/en.json @@ -38,5 +38,10 @@ }, "ApiRoute": { "hello": "Hello {name}!" + }, + "useNamedRoute": { + "home": "/", + "client": "/client", + "nested": "/nested" } } diff --git a/packages/example-next-13-advanced/messages/es.json b/packages/example-next-13-advanced/messages/es.json index 25b6e04e5..7d45c2819 100644 --- a/packages/example-next-13-advanced/messages/es.json +++ b/packages/example-next-13-advanced/messages/es.json @@ -14,7 +14,7 @@ "description": "Esta página se hidrata en el lado del cliente." }, "Nested": { - "title": "Anidado", + "title": "Anidada", "description": "Esta es una página anidada." }, "Navigation": { @@ -38,5 +38,10 @@ }, "ApiRoute": { "hello": "¡Hola {name}!" + }, + "useNamedRoute": { + "home": "/", + "client": "/client", + "nested": "/anidada" } } diff --git a/packages/example-next-13-advanced/next.config.js b/packages/example-next-13-advanced/next.config.js index 3bf0c1b96..2e08e4cf8 100644 --- a/packages/example-next-13-advanced/next.config.js +++ b/packages/example-next-13-advanced/next.config.js @@ -7,6 +7,10 @@ module.exports = withNextIntl({ { source: '/de/verschachtelt', destination: '/de/nested' + }, + { + source: '/es/anidada', + destination: '/es/nested' } ]; } diff --git a/packages/example-next-13-advanced/src/components/Navigation.tsx b/packages/example-next-13-advanced/src/components/Navigation.tsx index 8cd65eff9..8941023bc 100644 --- a/packages/example-next-13-advanced/src/components/Navigation.tsx +++ b/packages/example-next-13-advanced/src/components/Navigation.tsx @@ -1,14 +1,16 @@ import {useTranslations} from 'next-intl'; +import useNamedRoute from '../hooks/useNamedRoute'; import NavigationLink from './NavigationLink'; export default function Navigation() { const t = useTranslations('Navigation'); + const getHref = useNamedRoute(); return ( ); } diff --git a/packages/example-next-13-advanced/src/hooks/useNamedRoute.tsx b/packages/example-next-13-advanced/src/hooks/useNamedRoute.tsx new file mode 100644 index 000000000..7be83e33a --- /dev/null +++ b/packages/example-next-13-advanced/src/hooks/useNamedRoute.tsx @@ -0,0 +1,5 @@ +import {useTranslations} from 'next-intl'; + +export default function useNamedRoute() { + return useTranslations('useNamedRoute'); +} diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index 3dfdb8ae8..b1fab5bd7 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -367,10 +367,7 @@ it('sets alternate links', async ({request}) => { } }); -it('can use rewrites to handle localized pathnames', async ({ - page, - request -}) => { +it('can use rewrites to localize pathnames', async ({page, request}) => { await page.goto('/de/verschachtelt'); page.getByRole('heading', {name: 'Verschachtelt'}); @@ -382,6 +379,19 @@ it('can use rewrites to handle localized pathnames', async ({ expect(response.status()).toBe(404); }); +it('can use named routes to localize pathnames', async ({page}) => { + await page.goto('/en'); + await expect(page.getByRole('link', {name: 'Nested page'})).toHaveAttribute( + 'href', + '/en/nested' + ); + + await page.goto('/de'); + await expect( + page.getByRole('link', {name: 'Verschachtelte Seite'}) + ).toHaveAttribute('href', '/de/verschachtelt'); +}); + it('replaces invalid cookie locales', async ({request}) => { const response = await request.get('/', { maxRedirects: 0, diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 9ebc61784..8a11fcb85 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -160,7 +160,7 @@ If you're in a transitioning phase, either from the `pages` directory to the `ap ### `Link` -In the `pages` folder, Next.js automatically considers the current locale for `next/link`. Since this is no longer the case for the `app` directory, `next-intl` provides a drop-in replacement for this use case. +`next-intl` provides a drop-in replacement for `next/link` that will automatically prefix the `href` with the current locale as necessary. If the default locale is matched, the `href` remains unchanged and no prefix is added. ```tsx import {Link} from 'next-intl'; @@ -219,6 +219,45 @@ export default async function Profile() { } ``` +## Switching to Client Components + +If you need to use translations in Client Components, the best approach is to pass the generated labels as props. + +```tsx filename="[locale]/faq/page.tsx" {6} +import {useTranslations} from 'next-intl'; +import Expandable from './Expandable'; + +export default function FAQ() { + const t = useTranslations('FAQ'); + return {t('description')}; +} +``` + +```tsx filename="Expandable.tsx" {5,14-15} +'use client'; + +import {useState} from 'react'; + +function Expandable({title, children}) { + const [expanded, setExpanded] = useState(false); + + function onToggle() { + setExpanded(!expanded); + } + + return ( +
    + + {expanded &&

    {children}

    } +
    + ); +} +``` + +This way your messages never leave the server and the client only needs to load the code that is necessary for initializing your interactive components. + +If you absolutely need to use functionality from `next-intl` on the client side, you can wrap the respective components with `NextIntlClientProvider` ([example code](https://github.com/amannn/next-intl/blob/feat/next-13-rsc/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx)). Note however that this will increase your client bundle size. + ## Global request configuration If you'd like to apply [global configuration](/docs/usage/configuration) like `formats`, `defaultTranslationValues`, `timeZone`, `now`, or [error handling functions](/docs/usage/error-handling) like `onError` and `getMessageFallback`, you can provide these in `i18n.ts`. @@ -280,6 +319,31 @@ The locale is matched based on this priority order: If the default locale matches, the request will be **rewritten** to the corresponding sub path (e.g. `/about` to `/en/about`). If a non-default locale is matched and the user requests the root pathname, then the user is **redirected** to to the respective sub path (e.g. `/` to `/de`). +## Localizing pathnames + +If you want to localize the pathnames of your app, you can accomplish this by using appropriate [rewrites](https://nextjs.org/docs/api-reference/next.config.js/rewrites). + +```js filename="next.config.js" +const withNextIntl = require('next-intl/plugin')(); + +module.exports = withNextIntl({ + experimental: {appDir: true}, + rewrites() { + return [ + { + source: '/de/über', + destination: '/de/about' + } + ]; + } +}); +``` + +Since `next-intl` isn't aware of the rewrites you've configured, you likely want to make some adjustments: + +1. Turn off the `alternateLinks` option in [the middleware](#middleware-configuration) and provide [search engine hints about localized versions of your content](https://developers.google.com/search/docs/specialty/international/localized-versions) by yourself. +2. Translate the pathnames you're passing to the [routing APIs from `next-intl`](#routing) ([example](https://github.com/amannn/next-intl/blob/feat/next-13-rsc/packages/example-next-13-advanced/src/hooks/useNamedRoute.tsx)). + ## Using internationalization outside of components If you need to use translated messages in functions like `generateMetadata`, you can import awaitable versions of the functions that you usually call as hooks from `next-intl/server`. @@ -309,67 +373,6 @@ import { } from 'next-intl/server'; ``` -## Switching to Client Components - -If you need to use translations in Client Components, the best approach is to pass the generated labels as props. - -```tsx filename="[locale]/faq/page.tsx" {6} -import {useTranslations} from 'next-intl'; -import Expandable from './Expandable'; - -export default function FAQ() { - const t = useTranslations('FAQ'); - return {t('description')}; -} -``` - -```tsx filename="Expandable.tsx" {5,14-15} -'use client'; - -import {useState} from 'react'; - -function Expandable({title, children}) { - const [expanded, setExpanded] = useState(false); - - function onToggle() { - setExpanded(!expanded); - } - - return ( -
    - - {expanded &&

    {children}

    } -
    - ); -} -``` - -This way your messages never leave the server and the client only needs to load the code that is necessary for initializing your interactive components. - -If you absolutely need to use functionality from `next-intl` on the client side, you can wrap the respective components with `NextIntlClientProvider` ([example code](https://github.com/amannn/next-intl/blob/feat/next-13-rsc/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx)). Note however that this will increase your client bundle size. - -## Localizing pathnames - -If you want to localize the pathnames of your app, you can accomplish this by using appropriate [rewrites](https://nextjs.org/docs/api-reference/next.config.js/rewrites). - -```js filename="next.config.js" -const withNextIntl = require('next-intl/plugin')(); - -module.exports = withNextIntl({ - experimental: {appDir: true}, - rewrites() { - return [ - { - source: '/de/über', - destination: '/de/about' - } - ]; - } -}); -``` - -Note that you want to turn off the `alternateLinks` option in [the middleware](#middleware-configuration) in this case and provide [search engine hints about localized versions of your content](https://developers.google.com/search/docs/specialty/international/localized-versions) by yourself, as the middleware isn't aware of your rewrites. - ## Providing feedback If you have feedback about using `next-intl` in the `app` directory, feel free to leave feedback in [the PR which implements the React Server Components support](https://github.com/amannn/next-intl/pull/149). From ab594513007b261d0eadbd26ec6f804d64a6b4f5 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 21 Feb 2023 21:26:33 +0100 Subject: [PATCH 155/312] Improve link --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 8a11fcb85..f008e435f 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -342,7 +342,7 @@ module.exports = withNextIntl({ Since `next-intl` isn't aware of the rewrites you've configured, you likely want to make some adjustments: 1. Turn off the `alternateLinks` option in [the middleware](#middleware-configuration) and provide [search engine hints about localized versions of your content](https://developers.google.com/search/docs/specialty/international/localized-versions) by yourself. -2. Translate the pathnames you're passing to the [routing APIs from `next-intl`](#routing) ([example](https://github.com/amannn/next-intl/blob/feat/next-13-rsc/packages/example-next-13-advanced/src/hooks/useNamedRoute.tsx)). +2. Translate the pathnames you're passing to the [routing APIs from `next-intl`](#routing) ([example](https://github.com/amannn/next-intl/blob/feat/next-13-rsc/packages/example-next-13-advanced/src/components/Navigation.tsx)). ## Using internationalization outside of components From 1b2f3b213bbe4a90488356aec0a81b4844c94855 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 22 Feb 2023 09:24:44 +0100 Subject: [PATCH 156/312] Improve styling for callouts --- packages/website/components/Callout.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/website/components/Callout.js b/packages/website/components/Callout.js index 3daa0b691..4648b9fdf 100644 --- a/packages/website/components/Callout.js +++ b/packages/website/components/Callout.js @@ -7,10 +7,10 @@ const TypeToEmoji = { const classes = { default: cn( - 'border-green-700/20 bg-green-50 text-green-800 dark:border-green-400/20 dark:bg-green-600/10 dark:text-green-200' + 'border-green-700/20 bg-green-50 text-green-800 dark:border-green-400/40 dark:bg-green-700/30 dark:text-white/90' ), warning: cn( - 'border-yellow-300 bg-yellow-50 text-yellow-900 dark:border-yellow-200/20 dark:bg-yellow-700/20 dark:text-yellow-200' + 'border-yellow-700/20 bg-yellow-50 text-yellow-900 dark:border-yellow-400/40 dark:bg-yellow-700/30 dark:text-white/90' ) }; From 984a47a8cc24988e9bde796e9522145149ece558 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 23 Feb 2023 00:50:13 +0100 Subject: [PATCH 157/312] docs: Improve landing page design (#200) --- packages/website/components/Callout.js | 4 +- packages/website/components/FeaturePanel.js | 9 + packages/website/components/Hero.js | 51 +++ packages/website/components/HeroCode.js | 472 ++++++++++++++++++++ packages/website/components/LinkButton.js | 16 + packages/website/components/Section.js | 18 + packages/website/package.json | 5 +- packages/website/pages/_app.js | 9 +- packages/website/pages/_meta.json | 3 +- packages/website/pages/index.mdx | 106 ++--- packages/website/prettier.config.js | 6 + packages/website/styles.css | 8 +- packages/website/tailwind.config.js | 23 +- packages/website/theme.config.js | 8 +- yarn.lock | 38 ++ 15 files changed, 704 insertions(+), 72 deletions(-) create mode 100644 packages/website/components/FeaturePanel.js create mode 100644 packages/website/components/Hero.js create mode 100644 packages/website/components/HeroCode.js create mode 100644 packages/website/components/LinkButton.js create mode 100644 packages/website/components/Section.js create mode 100644 packages/website/prettier.config.js diff --git a/packages/website/components/Callout.js b/packages/website/components/Callout.js index 4648b9fdf..abd98f394 100644 --- a/packages/website/components/Callout.js +++ b/packages/website/components/Callout.js @@ -17,12 +17,14 @@ const classes = { export default function Callout({ children, type = 'default', + className, emoji = TypeToEmoji[type] }) { return (
    + {icon &&
    {icon}
    } +

    {title}

    +

    {description}

    +
    + ); +} diff --git a/packages/website/components/Hero.js b/packages/website/components/Hero.js new file mode 100644 index 000000000..a51585dad --- /dev/null +++ b/packages/website/components/Hero.js @@ -0,0 +1,51 @@ +import Link from 'next/link'; +import HeroCode from './HeroCode'; +import LinkButton from './LinkButton'; + +export default function Hero() { + return ( +
    +
    +
    +
    +
    +
    +

    + + Internationalization for Next.js + {' '} + that gets out of your way. +

    +
    +

    + Support multiple languages, with your app code becoming simpler + instead of more complex. +

    +
    + Get started + + View on GitHub + +
    + {/* eslint-disable-next-line @next/next/link-passhref */} + + 📣 Support for + Next.js 13 and the app directory is coming → + +
    +
    +
    + +
    +
    +
    +
    + ); +} diff --git a/packages/website/components/HeroCode.js b/packages/website/components/HeroCode.js new file mode 100644 index 000000000..6f0b353e9 --- /dev/null +++ b/packages/website/components/HeroCode.js @@ -0,0 +1,472 @@ +/* eslint-disable react/no-unescaped-entities */ +import clsx from 'clsx'; +import {useState} from 'react'; + +function Tab({active, children, onClick}) { + return ( + + ); +} + +const files = [ + { + name: 'UserDetails.tsx', + code: ( + + + import + + {' '} + {'{'}useTranslations + + , + useIntl{'}'} + from + + + 'next-intl' + + ; + + + + function + + + UserDetails + + + ({'{'}user{'}'}) {'{'} + + + + {' '} + const + + t + + = + + + useTranslations + + ( + + 'UserDetails' + + ); + + + {' '} + const + + intl + + = + + useIntl + (); + + + + {' '} + return + ( + + + + {' '} + < + + + section + + > + + + + {' '} + < + + + h2 + + >{'{'} + t + ( + + 'title' + + ){'}'}</ + + h2 + + > + + + + {' '} + < + + + p + + >{'{'} + t + ( + + 'followers' + + , + {'{'}count + : + + user + . + followers + . + length + + {'}'}){'}'}</ + + + p + + > + + + + {' '} + < + + + p + + >{'{'} + t + ( + + 'lastSeen' + + , + {'{'}time + : + + intl + + .formatRelativeTime + + ( + user + + .lastSeen){'}'}) + + </ + p + > + + + + {' '} + < + + + Image + + + alt + = + {'{'} + t + ( + + 'portrait' + + , + {'{'}username + : + + user + + .name{'}'}){'} '} + + src + = + {'{'} + user + + .portrait{'}'}{' '} + + /> + + + {' '} + </ + + section + + > + + + {' '}); + + + {'}'} + + + ) + }, + { + name: 'en.json', + code: ( + + + {'{'} + + + {' '} + + "UserDetails" + + : {'{'} + + + {' '} + + "title" + + : + + + "User details" + + , + + + {' '} + + "followers" + + : + + + "{'{'}count, plural, =0 {'{'}No followers yet{'}'} =1 {'{'}One + friend{'}'} other {'{'}# followers{'}'} + {'}'}" + + , + + + {' '} + + "lastSeen" + + : + + + "Last seen {'{'}time{'}'}" + + , + + + {' '} + + "portrait" + + : + + + "Portrait of {'{'}username{'}'}" + + + + {' }'} + + + {'}'} + + + ) + }, + { + name: 'Output', + code: ( + + + < + + section + + > + + + {' '}< + + h2 + + + >User details</ + + + h2 + + > + + + {' '}< + p + + >1,481 followers</ + + p + > + + + {' '}< + p + + >Last seen 2h ago</ + + p + > + + + {' '}< + + img + + + alt + = + + "Portrait of Jane" + + + src + = + + "/media/jane.png" + + /> + + + </ + + section + + > + + + ) + } +]; + +export default function HeroCode() { + const [fileIndex, setFileIndex] = useState(0); + + return ( +
    +
    +
    +
    +
    +
    +
    + +
    + {files.map((file) => ( + setFileIndex(files.indexOf(file))} + > + {file.name} + + ))} +
    +
    +
    +              {files[fileIndex].code}
    +            
    +
    +
    +
    +
    + ); +} diff --git a/packages/website/components/LinkButton.js b/packages/website/components/LinkButton.js new file mode 100644 index 000000000..058d879d0 --- /dev/null +++ b/packages/website/components/LinkButton.js @@ -0,0 +1,16 @@ +import clsx from 'clsx'; +import Link from 'next/link'; + +export default function LinkButton({variant = 'primary', ...rest}) { + return ( + + ); +} diff --git a/packages/website/components/Section.js b/packages/website/components/Section.js new file mode 100644 index 000000000..d628f9b23 --- /dev/null +++ b/packages/website/components/Section.js @@ -0,0 +1,18 @@ +export default function Section({children, description, title}) { + return ( + <> +
    +
    +
    +

    + {title} +

    +
    + {description} +
    +
    +
    {children}
    +
    + + ); +} diff --git a/packages/website/package.json b/packages/website/package.json index 7fd929cb8..31182139e 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -10,6 +10,8 @@ "start": "next start" }, "dependencies": { + "@next/font": "13.1.6", + "@tailwindcss/typography": "0.5.9", "clsx": "1.2.1", "next": "^13.1.0", "nextra": "^2.0.0", @@ -22,6 +24,7 @@ "autoprefixer": "10.4.0", "eslint": "8.12.0", "eslint-config-molindo": "6.0.0", - "eslint-config-next": "^12.0.0" + "eslint-config-next": "^12.0.0", + "prettier-plugin-tailwindcss": "0.2.3" } } diff --git a/packages/website/pages/_app.js b/packages/website/pages/_app.js index 9d842be38..89685a5a5 100644 --- a/packages/website/pages/_app.js +++ b/packages/website/pages/_app.js @@ -1,7 +1,14 @@ +import {Inter} from '@next/font/google'; import 'nextra-theme-docs/style.css'; import '../styles.css'; +const inter = Inter({subsets: ['latin']}); + export default function App({Component, pageProps}) { const getLayout = Component.getLayout || ((page) => page); - return getLayout(); + return ( +
    + {getLayout()} +
    + ); } diff --git a/packages/website/pages/_meta.json b/packages/website/pages/_meta.json index e3795d8d3..562cbce96 100644 --- a/packages/website/pages/_meta.json +++ b/packages/website/pages/_meta.json @@ -2,7 +2,8 @@ "index": { "title": "Introduction", "type": "page", - "display": "hidden" + "display": "hidden", + "theme": {"layout": "raw"} }, "docs": { "title": "Docs", diff --git a/packages/website/pages/index.mdx b/packages/website/pages/index.mdx index 27efbd13c..42780cfd7 100644 --- a/packages/website/pages/index.mdx +++ b/packages/website/pages/index.mdx @@ -3,67 +3,51 @@ title: Internationalization for Next.js --- import Callout from 'components/Callout'; - -
    -

    - next-intl -

    -
    -
    - - A minimal, but complete solution for internationalization in Next.js - apps. - +import Section from 'components/Section'; +import Link from 'next/link'; +import LinkButton from 'components/LinkButton'; +import FeaturePanel from 'components/FeaturePanel'; +import Hero from 'components/Hero'; + +
    + + +
    +
    + + + + + + +
    +
    +
    + Get started with next-intl +
    + Usage guide + Examples
    -
    - - - -**✨ New ✨** `next-intl` is adding support for **Next.js 13** and the `app` directory. A beta version with support for React Server Components is [now available](/docs/next-13) for early adopters. - - - -## Features - -This library complements the [internationalized routing](https://nextjs.org/docs/advanced-features/i18n-routing) capabilities of Next.js by managing translations and providing them to components. - -- 🌟 **Proven ICU syntax**: This covers interpolation, plurals, ordinal pluralization, label selection based on enums and rich text. I18n is an essential part of the user experience, therefore this library doesn't compromise on flexibility and never leaves you behind when you need to fine tune a translation. -- 📅 **Built-in date, time and number formatting**: You can use global formats for a consistent look & feel of your app and integrate them with translations. -- 💡 **Hooks-only API**: This ensures that you can use the same API for `children` as well as for attributes which expect strings. -- ✅ **Type-safe**: If you're using TypeScript, you'll benefit from autocompletion for available message keys and compile-time errors for typos. -- 🚀 **Fast**: By integrating with both static as well as server side rendering you always get the best possible performance from your app. -- ⚔️ **Battle-tested building blocks**: This library is a minimal wrapper around built-in browser APIs and supplemental lower-level APIs from Format.JS. - -## What does it look like? - -This library is based on the premise that messages can be grouped by namespaces (typically a component name). - -```js -// LatestFollower.js -function LatestFollower({user}) { - const t = useTranslations('LatestFollower'); - - return ( - <> - {t('latestFollower', {username: user.name})} - } /> - - ); -} -``` - -```js -// en.json -{ - "LatestFollower": { - "latestFollower": "{username} started following you", - "followBack": "Follow back" - } -} -``` - -
    - [Getting started](/docs/getting-started) · [Usage guide](/docs/usage) · - [Examples](/examples)
    diff --git a/packages/website/prettier.config.js b/packages/website/prettier.config.js new file mode 100644 index 000000000..8924fbb09 --- /dev/null +++ b/packages/website/prettier.config.js @@ -0,0 +1,6 @@ +/* eslint-env node */ +/* eslint-disable import/no-extraneous-dependencies */ + +module.exports = { + plugins: [require('prettier-plugin-tailwindcss')] +}; diff --git a/packages/website/styles.css b/packages/website/styles.css index 64e9a6f76..185d0a0a7 100644 --- a/packages/website/styles.css +++ b/packages/website/styles.css @@ -2,12 +2,16 @@ @tailwind components; @tailwind utilities; +.dark { + --shiki-token-string-expression: #10b981; +} + /** * Steps */ .steps { - @apply ml-4 pl-8 border-l border-slate-200; + @apply ml-4 border-l border-slate-200 pl-8; counter-reset: step; } .steps h3 { @@ -16,7 +20,7 @@ } .steps h3:before { content: counter(step); - @apply inline-block absolute mt-[-6px] ml-[-52px] pt-[4px] w-10 h-10 text-center font-bold text-base text-slate-500 rounded-full border-4 border-white bg-slate-100; + @apply absolute mt-[-6px] ml-[-52px] inline-block h-10 w-10 rounded-full border-4 border-white bg-slate-100 pt-[4px] text-center text-base font-bold text-slate-500; } .dark .steps { diff --git a/packages/website/tailwind.config.js b/packages/website/tailwind.config.js index 01f71caf9..8fd808242 100644 --- a/packages/website/tailwind.config.js +++ b/packages/website/tailwind.config.js @@ -1,3 +1,5 @@ +const colors = require('tailwindcss/colors'); + /** @type {import('tailwindcss').Config} */ module.exports = { darkMode: 'class', @@ -5,5 +7,24 @@ module.exports = { './components/**/*.js', './pages/**/*.{md,mdx}', './theme.config.js' - ] + ], + theme: { + fontFamily: { + sans: ['Inter', 'sans-serif'], + mono: [ + 'Monaco', + 'ui-monospace', + 'SFMono-Regular', + 'Menlo', + 'Consolas', + 'Liberation Mono', + 'Courier New', + 'monospace' + ] + }, + colors: { + ...colors, + primary: '#5fc3e7' + } + } }; diff --git a/packages/website/theme.config.js b/packages/website/theme.config.js index 7355bba6f..1e1287705 100644 --- a/packages/website/theme.config.js +++ b/packages/website/theme.config.js @@ -1,6 +1,6 @@ const logo = ( @@ -74,7 +74,7 @@ export default { titleTemplate: '%s – next-intl' }; }, - primaryHue: {light: 210, dark: 195}, + primaryHue: { light: 210, dark: 195 }, footer: { text: null, component: null @@ -112,7 +112,7 @@ export default { @@ -127,7 +127,7 @@ export default { name="og:image" /> diff --git a/yarn.lock b/yarn.lock index ad180c95c..32b26a3da 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2394,6 +2394,11 @@ dependencies: glob "7.1.7" +"@next/font@13.1.6": + version "13.1.6" + resolved "https://registry.yarnpkg.com/@next/font/-/font-13.1.6.tgz#2bf99e3321ec9b4d65781c0d0ebff072e8752e1a" + integrity sha512-AITjmeb1RgX1HKMCiA39ztx2mxeAyxl4ljv2UoSBUGAbFFMg8MO7YAvjHCgFhD39hL7YTbFjol04e/BPBH5RzQ== + "@next/swc-android-arm-eabi@13.0.0": version "13.0.0" resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.0.tgz#15cd89d19d3c00d123fdfe367bab38c362f6c515" @@ -2908,6 +2913,16 @@ dependencies: tslib "^2.4.0" +"@tailwindcss/typography@0.5.9": + version "0.5.9" + resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.9.tgz#027e4b0674929daaf7c921c900beee80dbad93e8" + integrity sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg== + dependencies: + lodash.castarray "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.merge "^4.6.2" + postcss-selector-parser "6.0.10" + "@testing-library/dom@^8.5.0": version "8.13.0" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.13.0.tgz#bc00bdd64c7d8b40841e27a70211399ad3af46f5" @@ -8362,6 +8377,11 @@ lodash._reinterpolate@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= +lodash.castarray@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz#c02513515e309daddd4c24c60cfddcf5976d9115" + integrity sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q== + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -8377,6 +8397,11 @@ lodash.ismatch@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + lodash.memoize@4.x: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -10527,6 +10552,14 @@ postcss-nested@6.0.0: dependencies: postcss-selector-parser "^6.0.10" +postcss-selector-parser@6.0.10: + version "6.0.10" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" + integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11: version "6.0.11" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" @@ -10602,6 +10635,11 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" +prettier-plugin-tailwindcss@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.2.3.tgz#b68a1de10056fc84055426af132c2697bea0955c" + integrity sha512-s2N5Dh7Ao5KTV1mao5ZBnn8EKtUcDPJEkGViZIjI0Ij9TTI5zgTz4IHOxW33jOdjHKa8CSjM88scelUiC5TNRQ== + prettier@^2.5.1: version "2.6.0" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.0.tgz#12f8f504c4d8ddb76475f441337542fa799207d4" From dfa82ef909bd4cb8fcb321d2869fc55c1aa193e5 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 27 Feb 2023 16:34:46 +0100 Subject: [PATCH 158/312] chore: Upgrade to Next.js 13.2 (#201) * Upgrade to Next.js 13.2 * Add types * Improve docs * De-opt locale switching with `Link` * Design tweaks for docs --- .../example-next-13-advanced/next-env.d.ts | 1 + .../example-next-13-advanced/package.json | 2 +- .../tests/main.spec.ts | 2 +- packages/example-next-13/package.json | 2 +- packages/next-intl/next-env.d.ts | 6 + packages/next-intl/package.json | 2 +- .../next-intl/src/client/localizeHref.tsx | 17 +- packages/next-intl/src/shared/Link.tsx | 43 +++-- packages/next-intl/tsconfig.json | 2 +- packages/website/components/Hero.js | 29 ++-- packages/website/components/HeroCode.js | 4 +- packages/website/components/Link.js | 10 ++ packages/website/components/LinkButton.js | 4 +- .../pages/docs/next-13/server-components.mdx | 2 +- packages/website/pages/index.mdx | 26 +-- packages/website/styles.css | 4 + packages/website/tailwind.config.js | 5 + packages/website/theme.config.js | 23 ++- yarn.lock | 148 +++++++++--------- 19 files changed, 210 insertions(+), 122 deletions(-) create mode 100644 packages/next-intl/next-env.d.ts create mode 100644 packages/website/components/Link.js diff --git a/packages/example-next-13-advanced/next-env.d.ts b/packages/example-next-13-advanced/next-env.d.ts index 4f11a03dc..7aa8e8ef7 100644 --- a/packages/example-next-13-advanced/next-env.d.ts +++ b/packages/example-next-13-advanced/next-env.d.ts @@ -1,5 +1,6 @@ /// /// +/// // NOTE: This file should not be edited // see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/packages/example-next-13-advanced/package.json b/packages/example-next-13-advanced/package.json index 3ff9bdcf0..2c9484f8b 100644 --- a/packages/example-next-13-advanced/package.json +++ b/packages/example-next-13-advanced/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "lodash": "^4.17.21", - "next": "13.1.7-canary.7", + "next": "13.2.0", "next-intl": "*", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index b1fab5bd7..9ab07c83b 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -404,7 +404,7 @@ it('replaces invalid cookie locales', async ({request}) => { expect(response.headers()['set-cookie']).toBe('NEXT_LOCALE=en; Path=/'); }); -it.skip('can localize route handlers', async ({request}) => { +it('can localize route handlers', async ({request}) => { // Default { const response = await request.get('/api?name=world'); diff --git a/packages/example-next-13/package.json b/packages/example-next-13/package.json index 5d9ce9717..d5d05238e 100644 --- a/packages/example-next-13/package.json +++ b/packages/example-next-13/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "lodash": "^4.17.21", - "next": "13.1.7-canary.7", + "next": "13.2.0", "next-intl": "^2.10.4", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/next-intl/next-env.d.ts b/packages/next-intl/next-env.d.ts new file mode 100644 index 000000000..b963623f8 --- /dev/null +++ b/packages/next-intl/next-env.d.ts @@ -0,0 +1,6 @@ +// Normally Next.js creates this file when the build runs. Seems like from +// Next.js 13.2 on this is mandatory to be able to import `usePathname`. + +/// +/// +/// diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index aea26f3d5..3aea3e69f 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -79,7 +79,7 @@ "dts-cli": "1.4.0", "eslint": "8.12.0", "eslint-config-molindo": "6.0.0", - "next": "13.1.7-canary.7", + "next": "13.2.0", "react": "^18.2.0", "react-dom": "^18.2.0", "typescript": "^4.4.4" diff --git a/packages/next-intl/src/client/localizeHref.tsx b/packages/next-intl/src/client/localizeHref.tsx index 7a9bac39d..82f48ccfa 100644 --- a/packages/next-intl/src/client/localizeHref.tsx +++ b/packages/next-intl/src/client/localizeHref.tsx @@ -3,19 +3,28 @@ import localizePathname from '../shared/localizePathname'; import getCookieLocale from './getCookieLocale'; import hasPathnamePrefixed from './hasPathnamePrefixed'; -export default function localizeHref(href: string, locale?: string): string; +export default function localizeHref( + href: string, + locale?: string, + pathname?: string +): string; export default function localizeHref( href: UrlObject | string, - locale?: string + locale?: string, + pathname?: string ): UrlObject | string; export default function localizeHref( href: UrlObject | string, - locale?: string + locale?: string, + pathname?: string ) { const cookieLocale = getCookieLocale(); if (!locale) locale = cookieLocale; - const {pathname} = window.location; + if (!pathname) { + pathname = window.location.pathname; + } + const isSwitchingLocale = locale !== cookieLocale; const isPathnamePrefixed = hasPathnamePrefixed(locale, pathname); diff --git a/packages/next-intl/src/shared/Link.tsx b/packages/next-intl/src/shared/Link.tsx index 5cfc886c3..d30120a04 100644 --- a/packages/next-intl/src/shared/Link.tsx +++ b/packages/next-intl/src/shared/Link.tsx @@ -11,23 +11,48 @@ type Props = Omit, 'locale'> & { /** * Wraps `next/link` and prefixes the `href` with the current locale. + * + * Note that when a `locale` prop is passed, two de-optimizations are made: + * + * 1. The `prefetch` prop is not supported. This is because Next.js prefetches + * the page and the `set-cookie` response header will cause the locale cookie + * on the current page to be overwritten. + * 2. A regular anchor tag is used instead of `next/link`. This is to avoid a + * bug with Server Components where the markup wouldn't be updated correctly + * otherwise. */ function Link({href, locale, prefetch, ...rest}: Props, ref: Props['ref']) { const [localizedHref, setLocalizedHref] = useState(href); const pathname = usePathname(); - // When the user renders a link to another locale, Next.js might prefetch it - // and the `set-cookie` response header will cause the locale cookie on the - // current page to be overwritten. Therefore default to disabling prefetching - // when the user passes a `locale` prop. - if (prefetch === undefined && locale !== undefined) { - prefetch = false; - } - useEffect(() => { - setLocalizedHref(localizeHref(href, locale)); + setLocalizedHref(localizeHref(href, locale, pathname)); }, [href, locale, pathname]); + if (locale !== undefined) { + // If Next.js fixes the bug where the markup isn't updated correctly when + // the locale changes, we can remove this check. Note however that we still + // need to disable prefetching (see comment above). + + if (prefetch && process.env.NODE_ENV !== 'production') { + console.error( + 'The `prefetch` prop is currently not supported when using the `locale` prop on `Link`.`' + ); + } + + let localizedHrefString; + if (typeof localizedHref === 'string') { + localizedHrefString = localizedHref; + } else if (localizedHref) { + localizedHrefString = localizedHref.toString(); + } + + return ( + // eslint-disable-next-line jsx-a11y/anchor-has-content +
    + ); + } + return ( ); diff --git a/packages/next-intl/tsconfig.json b/packages/next-intl/tsconfig.json index 218e76ddf..38e5dd371 100644 --- a/packages/next-intl/tsconfig.json +++ b/packages/next-intl/tsconfig.json @@ -1,5 +1,5 @@ { - "include": ["src", "test", "types"], + "include": ["src", "test", "types", "next-env.d.ts"], "compilerOptions": { "module": "esnext", "lib": ["dom", "esnext"], diff --git a/packages/website/components/Hero.js b/packages/website/components/Hero.js index a51585dad..61a3305ee 100644 --- a/packages/website/components/Hero.js +++ b/packages/website/components/Hero.js @@ -2,7 +2,14 @@ import Link from 'next/link'; import HeroCode from './HeroCode'; import LinkButton from './LinkButton'; -export default function Hero() { +export default function Hero({ + description, + getStarted, + rscAnnouncement, + titleRegular, + titleStrong, + viewOnGithub +}) { return (
    @@ -11,24 +18,21 @@ export default function Hero() {

    - - Internationalization for Next.js - {' '} - that gets out of your way. + {titleStrong}{' '} + {titleRegular}

    -

    - Support multiple languages, with your app code becoming simpler - instead of more complex. +

    + {description}

    -
    - Get started +
    + {getStarted} - View on GitHub + {viewOnGithub}
    {/* eslint-disable-next-line @next/next/link-passhref */} @@ -36,8 +40,7 @@ export default function Hero() { className="mt-10 inline-block border border-green-300/50 px-4 py-3 font-semibold text-green-300 transition-colors hover:border-white/50 hover:text-white lg:mt-16" href="/docs/next-13" > - 📣 Support for - Next.js 13 and the app directory is coming → + 📣 {rscAnnouncement}
    diff --git a/packages/website/components/HeroCode.js b/packages/website/components/HeroCode.js index 6f0b353e9..dd57c8f4b 100644 --- a/packages/website/components/HeroCode.js +++ b/packages/website/components/HeroCode.js @@ -6,7 +6,7 @@ function Tab({active, children, onClick}) { return (
    diff --git a/packages/website/styles.css b/packages/website/styles.css index 185d0a0a7..22fb3145c 100644 --- a/packages/website/styles.css +++ b/packages/website/styles.css @@ -6,6 +6,10 @@ --shiki-token-string-expression: #10b981; } +.navbar-home .nextra-nav-container-blur { + display: none; +} + /** * Steps */ diff --git a/packages/website/tailwind.config.js b/packages/website/tailwind.config.js index 8fd808242..2022bcba1 100644 --- a/packages/website/tailwind.config.js +++ b/packages/website/tailwind.config.js @@ -1,4 +1,5 @@ const colors = require('tailwindcss/colors'); +const defaults = require('tailwindcss/defaultConfig'); /** @type {import('tailwindcss').Config} */ module.exports = { @@ -22,6 +23,10 @@ module.exports = { 'monospace' ] }, + fontSize: { + ...defaults.theme.fontSize, + '5xl': ['3rem', {lineHeight: '1.2'}] + }, colors: { ...colors, primary: '#5fc3e7' diff --git a/packages/website/theme.config.js b/packages/website/theme.config.js index 1e1287705..e8d8f015e 100644 --- a/packages/website/theme.config.js +++ b/packages/website/theme.config.js @@ -1,10 +1,14 @@ +import {useRouter} from 'next/router'; +import {Navbar} from 'nextra-theme-docs'; + const logo = ( - + ; + + return ( +
    + +
    + ); + } + }, head: () => ( <> Date: Mon, 27 Feb 2023 16:41:37 +0100 Subject: [PATCH 159/312] 2.11.0-beta.16 --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- packages/website/prettier.config.js | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 8c8062a23..08a98b8b5 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -13,7 +13,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current beta version ``` -npm install next-intl@2.11.0-beta.15 +npm install next-intl@2.11.0-beta.16 ``` This beta version was tested with `next@13.2.0`. diff --git a/packages/website/prettier.config.js b/packages/website/prettier.config.js index 8924fbb09..4938cbc9f 100644 --- a/packages/website/prettier.config.js +++ b/packages/website/prettier.config.js @@ -2,5 +2,8 @@ /* eslint-disable import/no-extraneous-dependencies */ module.exports = { + singleQuote: true, + trailingComma: 'none', + bracketSpacing: false, plugins: [require('prettier-plugin-tailwindcss')] }; From 0eaeefa79c51d7df3fdbf96713b5dfaeb3de0245 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 27 Feb 2023 16:58:57 +0100 Subject: [PATCH 160/312] Landing page finetuning --- packages/website/components/HeroCode.js | 38 +++++++++++++++++++++++-- packages/website/pages/index.mdx | 16 +++++------ 2 files changed, 44 insertions(+), 10 deletions(-) diff --git a/packages/website/components/HeroCode.js b/packages/website/components/HeroCode.js index dd57c8f4b..746852a15 100644 --- a/packages/website/components/HeroCode.js +++ b/packages/website/components/HeroCode.js @@ -317,8 +317,42 @@ const files = [ : - "{'{'}count, plural, =0 {'{'}No followers yet{'}'} =1 {'{'}One - follower{'}'} other {'{'}# followers{'}'} + "{'{'}count, plural, + + + + + + {' '} + + + =0 {'{'}No followers yet + + + + + + {' '} + + + =1 {'{'}One follower{'}'} + + + + + + {' '} + + + other {'{'}# followers{'}'} + + + + + + {' '} + + {'}'}" , diff --git a/packages/website/pages/index.mdx b/packages/website/pages/index.mdx index dfb55ae3f..1d2a28719 100644 --- a/packages/website/pages/index.mdx +++ b/packages/website/pages/index.mdx @@ -2,12 +2,12 @@ title: Internationalization for Next.js --- -import Callout from "components/Callout"; -import Section from "components/Section"; -import LinkButton from "components/LinkButton"; -import Link from "components/Link"; -import FeaturePanel from "components/FeaturePanel"; -import Hero from "components/Hero"; +import Callout from 'components/Callout'; +import Section from 'components/Section'; +import LinkButton from 'components/LinkButton'; +import Link from 'components/Link'; +import FeaturePanel from 'components/FeaturePanel'; +import Hero from 'components/Hero';
    @@ -30,8 +30,8 @@ import Hero from "components/Hero"; description="Localize your messages with interpolation, plurals, ordinal pluralization, label selection based on enums and rich text." /> Date: Mon, 27 Feb 2023 21:12:27 +0100 Subject: [PATCH 161/312] Code samples for features on landing page --- packages/website/components/CodeSnippets.js | 335 ++++++++++++++++++ packages/website/components/FeaturePanel.js | 20 +- packages/website/components/HeroCode.js | 4 +- packages/website/components/Section.js | 4 +- .../pages/docs/usage/configuration.mdx | 11 +- .../website/pages/docs/usage/dates-times.mdx | 8 +- .../website/pages/docs/usage/messages.mdx | 2 +- packages/website/pages/index.mdx | 21 +- packages/website/styles.css | 1 + 9 files changed, 386 insertions(+), 20 deletions(-) create mode 100644 packages/website/components/CodeSnippets.js diff --git a/packages/website/components/CodeSnippets.js b/packages/website/components/CodeSnippets.js new file mode 100644 index 000000000..e0b1a19cd --- /dev/null +++ b/packages/website/components/CodeSnippets.js @@ -0,0 +1,335 @@ +/* eslint-disable react/no-unescaped-entities */ +/* eslint-disable react/jsx-no-comment-textnodes */ +const CodeSnippets = {}; + +CodeSnippets.icu = () => ( + + + {'{'} + + + {' '} + + "UserDetails" + + : {'{'} + + + {' '} + + "title" + + : + + + "User details" + + , + + + {' '} + + "followers" + + : + + + "{'{'}count, plural, + + + + + + {' '} + + + =0 {'{'}No followers yet{'}'} + + + + + + {' '} + + + =1 {'{'}One follower{'}'} + + + + + + {' '} + + + other {'{'}# followers{'}'} + + + + + + {' '} + + + {'}'}" + + , + + +); + +CodeSnippets.datesTimesNumbers = () => ( + + + + // "Feb 27, 2022" + + + + intl + + .formatDateTime + + (lastSeen + , + + + 'short' + + ); + + + + // "3:36 PM" + + + intl + + .formatDateTime + + (lastSeen + , + {'{'}hour + : + + + 'numeric' + + , + minute + : + + + 'numeric' + + {'}'}); + + + + + // "2 hours ago" + + + + intl + + .formatRelativeTime + + (lastSeen); + + +); + +CodeSnippets.typeSafe = () => ( + + + Found 1 error in + + src/components/UserDetails.tsx:13 + + + + + {' '} + < + + h1> + + + {'{'}t('titel'){'}'} + + </ + h1 + > + + + + {' '}~~~~~~~ + + + + Argument of type + + + "titel" + + is not assignable + + + + to parameter of type{' '} + + + "title" | "description" + + . + + +); + +CodeSnippets.hooks = () => ( + + + const + + t + + = + + + useTranslations + + ( + + 'UserDetails' + + ); + + + const + + intl + + = + + useIntl + (); + + + + const + + timeZone + + = + + useTimeZone + (); + + + const + + locale + + = + + useLocale + (); + + + const + + now + + = + + useNow + (); + + +); + +CodeSnippets.buildOutput = () => ( + + + $ + + next build + + + + + + Route (pages){' '}Size{' '}First Load JS + + + + ┌ ● / + + {' '}637 + B + {' '} + + 90.1 kB + + + + ├ ● /about + {' '} + 512 + B + {' '} + + 92.5 kB + + + + └ ● /contact + {' '} + 931 + B + {' '} + + 91.2 kB + + + + + + ● (SSG) automatically generated as static HTML + JSON + + + +); + +CodeSnippets.standards = () => ( + + + Intl + .Locale + + + Intl + .DateTimeFormat + + + Intl + .NumberFormat + + + Intl + .PluralRules + + + Intl + + .RelativeTimeFormat + + + + + IntlMessageformat + + +); + +export default CodeSnippets; diff --git a/packages/website/components/FeaturePanel.js b/packages/website/components/FeaturePanel.js index 56a10dce1..f56f81363 100644 --- a/packages/website/components/FeaturePanel.js +++ b/packages/website/components/FeaturePanel.js @@ -1,9 +1,19 @@ -export default function FeaturePanel({description, icon, title}) { +export default function FeaturePanel({code, description, title}) { return ( -
    - {icon &&
    {icon}
    } -

    {title}

    -

    {description}

    +
    + {code && ( +
    +
    {code}
    +
    + )} +
    +

    + {title} +

    +

    + {description} +

    +
    ); } diff --git a/packages/website/components/HeroCode.js b/packages/website/components/HeroCode.js index 746852a15..64bac0fc7 100644 --- a/packages/website/components/HeroCode.js +++ b/packages/website/components/HeroCode.js @@ -326,7 +326,7 @@ const files = [ {' '} - =0 {'{'}No followers yet + =0 {'{'}No followers yet{'}'} @@ -426,7 +426,7 @@ const files = [ {' '}< p - >Last seen 2h ago</ + >Last seen 2 hours ago</ p > diff --git a/packages/website/components/Section.js b/packages/website/components/Section.js index d628f9b23..d2b7a0446 100644 --- a/packages/website/components/Section.js +++ b/packages/website/components/Section.js @@ -2,7 +2,7 @@ export default function Section({children, description, title}) { return ( <>
    -
    +

    {title} @@ -11,7 +11,7 @@ export default function Section({children, description, title}) { {description}

    -
    {children}
    +
    {children}
    ); diff --git a/packages/website/pages/docs/usage/configuration.mdx b/packages/website/pages/docs/usage/configuration.mdx index 46db8fdac..1975572d5 100644 --- a/packages/website/pages/docs/usage/configuration.mdx +++ b/packages/website/pages/docs/usage/configuration.mdx @@ -66,6 +66,13 @@ To achieve consistent date, time and number formatting across your app, you can ``` +```js +intl.formatDateTime(new Date('2020-11-20T10:36:01.516Z'), 'short'); +intl.formatNumber(new Date('2020-11-20T10:36:01.516Z'), 'short'); +``` + +Global formats can also be referenced in messages. + ```js { "ordered": "You've ordered this product on {orderDate, date, short}", @@ -80,7 +87,7 @@ t('latitude', {latitude: 47.414329182}); ## Default translation values -To achieve consistent usage of translation values and reduce redundancy, you can define a set of global default values and pass them to the provider. This configuration also can be used to apply consistent styling to commonly used rich text elements. The defaults will be overridden by locally provided values. +To achieve consistent usage of translation values and reduce redundancy, you can define a set of global default values and pass them to the provider. This configuration also can be used to apply consistent styling to commonly used rich text elements. ```js ``` +The defaults will be overridden by locally provided values. + ## Retrieve provider config As a convenience, two hooks exist that allow to read configuration that was passed to the provider: diff --git a/packages/website/pages/docs/usage/dates-times.mdx b/packages/website/pages/docs/usage/dates-times.mdx index b21448b84..bc20daf1f 100644 --- a/packages/website/pages/docs/usage/dates-times.mdx +++ b/packages/website/pages/docs/usage/dates-times.mdx @@ -20,12 +20,18 @@ function Component() { month: 'numeric', day: 'numeric' }); + intl.formatDateTime(dateTime, {hour: 'numeric', minute: 'numeric'}); } ``` See [the MDN docs about `DateTimeFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat#Using_options) to learn more about the options you can provide to `formatDateTime` ([interactive explorer](https://www.intl-explorer.com/DateTimeFormat)). + + To reuse date and time formats for multiple components, you can configure + [global formats](/docs/usage/configuration#global-formats). + + ## Formatting relative time Relative time durations can be formatted with a separate function: @@ -108,5 +114,3 @@ t( } ); ``` - -To reuse date and time formats for multiple components, you can configure [global formats](/docs/usage/configuration#global-formats). diff --git a/packages/website/pages/docs/usage/messages.mdx b/packages/website/pages/docs/usage/messages.mdx index 288d2ef71..7ac4f1cf1 100644 --- a/packages/website/pages/docs/usage/messages.mdx +++ b/packages/website/pages/docs/usage/messages.mdx @@ -128,7 +128,7 @@ You can interpolate values from your components into your messages with a specia "plural": "You have {numMessages, plural, =0 {no messages} =1 {one message} other {# messages}}.", // See https://formatjs.io/docs/core-concepts/icu-syntax/#select-format - "select": "{gender, select, male {He} female {She} other {They}} is online.", + "select": "{gender, select, female {She} male {He} other {They}} is online.", // See https://formatjs.io/docs/core-concepts/icu-syntax/#selectordinal-format "selectordinal": "It's my cat's {year, selectordinal, one {#st} two {#nd} few {#rd} other {#th}} birthday!", diff --git a/packages/website/pages/index.mdx b/packages/website/pages/index.mdx index 1d2a28719..0dd22eddc 100644 --- a/packages/website/pages/index.mdx +++ b/packages/website/pages/index.mdx @@ -3,6 +3,7 @@ title: Internationalization for Next.js --- import Callout from 'components/Callout'; +import CodeSnippets from 'components/CodeSnippets'; import Section from 'components/Section'; import LinkButton from 'components/LinkButton'; import Link from 'components/Link'; @@ -24,29 +25,35 @@ import Hero from 'components/Hero'; title="Minimalistic, yet complete" description="next-intl complements the internationalized routing capabilities of Next.js by managing translations and providing them to components." > -
    +
    } + title="ICU message syntax" description="Localize your messages with interpolation, plurals, ordinal pluralization, label selection based on enums and rich text." /> } title="Dates, times & numbers" description="Use global formats for a consistent look & feel of your app and apply fine tuning as necessary." /> - } title="Type-safe" description="Develop faster with autocompletion for message keys and catch errors early with compile-time errors." /> } + title="Hooks-only API" + description="Learn a single API that can be used across your code base, from components accepting children to string attributes." + /> + } title="Fast" description="Get the best performance from your app by supporting internationalization on static as well as dynamic pages." /> } + title="Based on standards" description="Use the best parts of built-in browser APIs and supplemental lower-level APIs from Format.JS." />
    diff --git a/packages/website/styles.css b/packages/website/styles.css index 22fb3145c..a76993162 100644 --- a/packages/website/styles.css +++ b/packages/website/styles.css @@ -4,6 +4,7 @@ .dark { --shiki-token-string-expression: #10b981; + --shiki-token-punctuation: rgba(255, 255, 255, 0.5); } .navbar-home .nextra-nav-container-blur { From bc1a5a6ec568052d8efc8d8f900934a73a5419dd Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 28 Feb 2023 14:32:57 +0100 Subject: [PATCH 162/312] Improve landing page --- packages/website/components/CodeSnippets.js | 33 ++++++++++++++++++--- packages/website/components/FeaturePanel.js | 8 ++--- packages/website/components/HeroCode.js | 6 ++-- packages/website/components/Section.js | 2 +- packages/website/pages/index.mdx | 4 +-- packages/website/styles.css | 4 +++ packages/website/theme.config.js | 4 +-- 7 files changed, 45 insertions(+), 16 deletions(-) diff --git a/packages/website/components/CodeSnippets.js b/packages/website/components/CodeSnippets.js index e0b1a19cd..dcf7305ba 100644 --- a/packages/website/components/CodeSnippets.js +++ b/packages/website/components/CodeSnippets.js @@ -142,9 +142,8 @@ CodeSnippets.datesTimesNumbers = () => ( CodeSnippets.typeSafe = () => ( - Found 1 error in - - src/components/UserDetails.tsx:13 + + Found 1 error in UserDetails.tsx:13 @@ -166,6 +165,9 @@ CodeSnippets.typeSafe = () => ( {' '}~~~~~~~ + + + Argument of type @@ -204,6 +206,30 @@ CodeSnippets.hooks = () => ( ); + + t + ( + + 'title' + + ); + // string + + + t + . + rich + ( + 'bio' + ); + + {' '} + // ReactNode + + + + + const @@ -214,7 +240,6 @@ CodeSnippets.hooks = () => ( useIntl (); - const diff --git a/packages/website/components/FeaturePanel.js b/packages/website/components/FeaturePanel.js index f56f81363..152c44544 100644 --- a/packages/website/components/FeaturePanel.js +++ b/packages/website/components/FeaturePanel.js @@ -1,12 +1,12 @@ export default function FeaturePanel({code, description, title}) { return ( -
    +
    {code && ( -
    -
    {code}
    +
    +
    {code}
    )} -
    +

    {title}

    diff --git a/packages/website/components/HeroCode.js b/packages/website/components/HeroCode.js index 64bac0fc7..37270768c 100644 --- a/packages/website/components/HeroCode.js +++ b/packages/website/components/HeroCode.js @@ -467,9 +467,9 @@ export default function HeroCode() { return (
    -
    -
    -
    +
    +
    +
    diff --git a/packages/website/components/Section.js b/packages/website/components/Section.js index d2b7a0446..46dcbbb06 100644 --- a/packages/website/components/Section.js +++ b/packages/website/components/Section.js @@ -2,7 +2,7 @@ export default function Section({children, description, title}) { return ( <>
    -
    +

    {title} diff --git a/packages/website/pages/index.mdx b/packages/website/pages/index.mdx index 0dd22eddc..b70bbf056 100644 --- a/packages/website/pages/index.mdx +++ b/packages/website/pages/index.mdx @@ -23,7 +23,7 @@ import Hero from 'components/Hero';
    -
    +
    Get started with next-intl
    Usage guide diff --git a/packages/website/styles.css b/packages/website/styles.css index a76993162..37250bb69 100644 --- a/packages/website/styles.css +++ b/packages/website/styles.css @@ -2,6 +2,10 @@ @tailwind components; @tailwind utilities; +:root { + --shiki-token-punctuation: rgba(0, 0, 0, 0.5); +} + .dark { --shiki-token-string-expression: #10b981; --shiki-token-punctuation: rgba(255, 255, 255, 0.5); diff --git a/packages/website/theme.config.js b/packages/website/theme.config.js index e8d8f015e..cdaf440ad 100644 --- a/packages/website/theme.config.js +++ b/packages/website/theme.config.js @@ -129,7 +129,7 @@ export default { @@ -144,7 +144,7 @@ export default { name="og:image" /> From ed64e22f8af9c746cfa19da68858463ee651ad84 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 28 Feb 2023 17:37:28 +0100 Subject: [PATCH 163/312] Improve phrasing of landing page --- packages/website/pages/index.mdx | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/packages/website/pages/index.mdx b/packages/website/pages/index.mdx index b70bbf056..c058b1cbd 100644 --- a/packages/website/pages/index.mdx +++ b/packages/website/pages/index.mdx @@ -23,23 +23,25 @@ import Hero from 'components/Hero';
    Internationalization is an essential part of the user experience. next-intl gives you everything you need to get language subtleties right and has always got your back whenever you need to fine-tune a translation. + } >
    } title="ICU message syntax" - description="Localize your messages with interpolation, plurals, ordinal pluralization, label selection based on enums and rich text." + description="Localize your messages with interpolation, plurals, ordinal pluralization, enum-based label selection, and rich text." /> } title="Dates, times & numbers" - description="Use global formats for a consistent look & feel of your app and apply fine tuning as necessary." + description="Use global formats for a consistent look & feel of your app and apply fine-tuning as necessary." /> } title="Type-safe" - description="Develop faster with autocompletion for message keys and catch errors early with compile-time errors." + description="Speed up development with autocompletion for message keys and catch typos early with compile-time checks." /> } @@ -49,12 +51,12 @@ import Hero from 'components/Hero'; } title="Fast" - description="Get the best performance from your app by supporting internationalization on static as well as dynamic pages." + description="Get the best performance from your app by supporting internationalization on both static and dynamic pages." /> } - title="Based on standards" - description="Use the best parts of built-in browser APIs and supplemental lower-level APIs from Format.JS." + title="Standards-based" + description="Use the best parts of built-in JavaScript APIs and supplemental lower-level APIs from Format.JS." />
    From e3514442d93020ef5e69b26b213a4fc2c88ca2b1 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 28 Feb 2023 17:56:44 +0100 Subject: [PATCH 164/312] Add number example to landing page --- packages/website/components/CodeSnippets.js | 44 +++++++++------------ 1 file changed, 18 insertions(+), 26 deletions(-) diff --git a/packages/website/components/CodeSnippets.js b/packages/website/components/CodeSnippets.js index dcf7305ba..2c72f8bc1 100644 --- a/packages/website/components/CodeSnippets.js +++ b/packages/website/components/CodeSnippets.js @@ -81,7 +81,7 @@ CodeSnippets.datesTimesNumbers = () => ( - // "Feb 27, 2022" + // "Feb 28, 2023" @@ -93,48 +93,40 @@ CodeSnippets.datesTimesNumbers = () => ( , - 'short' + 'medium' ); - // "3:36 PM" + + // "2 hours ago" + intl - .formatDateTime - - (lastSeen - , - {'{'}hour - : - - - 'numeric' - - , - minute - : - - - 'numeric' + .formatRelativeTime - {'}'}); + (lastSeen); - - // "2 hours ago" - + // "$1,499.90" intl - - .formatRelativeTime + .formatNumber + ( + 1499.9, + {' {'} + style: + + 'currency' - (lastSeen); + , currency: + 'USD' + {'}'}); ); From a52a74d102b2828ed94bf2f55c8f2c01406af470 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 2 Mar 2023 13:39:20 +0100 Subject: [PATCH 165/312] Add caching docs and test --- .../example-next-13-advanced/next.config.js | 23 ++++++++++ .../example-next-13-advanced/package.json | 1 + .../tests/main.spec.ts | 14 +++++++ .../pages/docs/next-13/server-components.mdx | 42 ++++++++++++++++++- yarn.lock | 2 +- 5 files changed, 80 insertions(+), 2 deletions(-) diff --git a/packages/example-next-13-advanced/next.config.js b/packages/example-next-13-advanced/next.config.js index 2e08e4cf8..80bb8a702 100644 --- a/packages/example-next-13-advanced/next.config.js +++ b/packages/example-next-13-advanced/next.config.js @@ -1,3 +1,4 @@ +const ms = require('ms'); const withNextIntl = require('next-intl/plugin')(); module.exports = withNextIntl({ @@ -13,5 +14,27 @@ module.exports = withNextIntl({ destination: '/es/nested' } ]; + }, + headers() { + return [ + { + source: '/((?!_next|assets|favicon.ico).*)', + missing: [ + { + type: 'header', + key: 'Next-Router-Prefetch' + } + ], + headers: [ + { + key: 'Cache-Control', + value: [ + `s-maxage=` + ms('1d') / 1000, + `stale-while-revalidate=` + ms('1y') / 1000 + ].join(', ') + } + ] + } + ]; } }); diff --git a/packages/example-next-13-advanced/package.json b/packages/example-next-13-advanced/package.json index 2c9484f8b..5365d8608 100644 --- a/packages/example-next-13-advanced/package.json +++ b/packages/example-next-13-advanced/package.json @@ -11,6 +11,7 @@ }, "dependencies": { "lodash": "^4.17.21", + "ms": "2.1.3", "next": "13.2.0", "next-intl": "*", "react": "^18.2.0", diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index 9ab07c83b..89a35d845 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -421,3 +421,17 @@ it('can localize route handlers', async ({request}) => { expect(data).toEqual({message: 'Hallo Welt!'}); } }); + +it('can use caching headers', async ({request}) => { + for (const pathname of [ + '/', + '/en', + '/en/nested', + '/de', + '/de/verschachtelt' + ]) { + expect((await request.get(pathname)).headers()['cache-control']).toBe( + 's-maxage=86400, stale-while-revalidate=31557600' + ); + } +}); diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 08a98b8b5..a6a766ea1 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -21,7 +21,7 @@ This beta version was tested with `next@13.2.0`. ## Roadmap - ✅ All APIs from `next-intl` can be used in Server Components. -- 💡 Currently SSR-only (i.e. no `generateStaticParams`). You can use [CDN caching](https://vercel.com/docs/concepts/edge-network/caching#stale-while-revalidate) via [`headers` in `next.config.js`](https://nextjs.org/docs/api-reference/next.config.js/headers) to to get the same level of performance from SSR'd pages ([learn more](https://youtu.be/bfLFHp7Sbkg?t=490)). +- 💡 Currently SSR-only (i.e. no `generateStaticParams`), therefore use [CDN caching](#cdn-caching). For details, see the [pending pull request for Server Components support](https://github.com/amannn/next-intl/pull/149). @@ -373,6 +373,46 @@ import { } from 'next-intl/server'; ``` +## CDN caching + +Since `next-intl` is currently SSR-only, it's a good idea to use [CDN caching](https://vercel.com/docs/concepts/edge-network/caching#stale-while-revalidate) via [`headers`](https://nextjs.org/docs/api-reference/next.config.js/headers) in `next.config.js` to get the same level of performance from SSR'd pages ([learn more](https://youtu.be/bfLFHp7Sbkg?t=490)). + +```js filename="next.config.js" +const ms = require('ms'); +const withNextIntl = require('next-intl/plugin')(); + +module.exports = withNextIntl({ + // ... Other config + + headers() { + return [ + { + // Cache all content pages + source: '/((?!_next|assets|favicon.ico).*)', + headers: [ + { + key: 'Cache-Control', + value: [ + `s-maxage=` + ms('1d') / 1000, + `stale-while-revalidate=` + ms('1y') / 1000 + ].join(', ') + } + ], + + // If you're deploying on a host that doesn't support the `vary` header (e.g. Vercel), + // make sure to disable caching for prefetch requests for Server Components. + missing: [ + { + type: 'header', + key: 'Next-Router-Prefetch' + } + ] + } + ]; + } +}); +``` + ## Providing feedback If you have feedback about using `next-intl` in the `app` directory, feel free to leave feedback in [the PR which implements the React Server Components support](https://github.com/amannn/next-intl/pull/149). diff --git a/yarn.lock b/yarn.lock index cbddb8955..a78ef98bf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9431,7 +9431,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.0.0, ms@^2.1.1: +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== From e07618247984cda5213d6fb787302122f917af54 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 3 Mar 2023 15:55:34 +0100 Subject: [PATCH 166/312] feat: Improve landing page design (#207) --- packages/website/components/FeaturePanel.js | 4 +- packages/website/components/Hero.js | 61 ++++++++++----------- packages/website/components/HeroCode.js | 3 +- packages/website/components/LinkButton.js | 2 +- packages/website/components/Section.js | 2 +- packages/website/pages/index.mdx | 4 +- packages/website/styles.css | 31 +++++++++++ packages/website/tailwind.config.js | 4 ++ packages/website/theme.config.js | 2 +- 9 files changed, 73 insertions(+), 40 deletions(-) diff --git a/packages/website/components/FeaturePanel.js b/packages/website/components/FeaturePanel.js index 152c44544..29af44eca 100644 --- a/packages/website/components/FeaturePanel.js +++ b/packages/website/components/FeaturePanel.js @@ -1,12 +1,12 @@ export default function FeaturePanel({code, description, title}) { return ( -
    +
    {code && (
    {code}
    )} -
    +

    {title}

    diff --git a/packages/website/components/Hero.js b/packages/website/components/Hero.js index 61a3305ee..6908e118d 100644 --- a/packages/website/components/Hero.js +++ b/packages/website/components/Hero.js @@ -11,40 +11,39 @@ export default function Hero({ viewOnGithub }) { return ( -
    -
    -
    -
    -
    -
    -

    - {titleStrong}{' '} - {titleRegular} -

    -
    -

    - {description} -

    -
    - {getStarted} - - {viewOnGithub} - -
    - {/* eslint-disable-next-line @next/next/link-passhref */} - +
    +
    +
    +
    +

    + {titleStrong}{' '} + {titleRegular} +

    + +

    + {description} +

    +
    + {getStarted} + - 📣 {rscAnnouncement} - + {viewOnGithub} +
    + {/* eslint-disable-next-line @next/next/link-passhref */} + + 📣{' '} + {rscAnnouncement} +
    -
    +
    diff --git a/packages/website/components/HeroCode.js b/packages/website/components/HeroCode.js index 37270768c..1a7af8783 100644 --- a/packages/website/components/HeroCode.js +++ b/packages/website/components/HeroCode.js @@ -470,8 +470,7 @@ export default function HeroCode() {
    -
    -
    +
    +

    diff --git a/packages/website/pages/index.mdx b/packages/website/pages/index.mdx index c058b1cbd..eced4d8f4 100644 --- a/packages/website/pages/index.mdx +++ b/packages/website/pages/index.mdx @@ -10,7 +10,7 @@ import Link from 'components/Link'; import FeaturePanel from 'components/FeaturePanel'; import Hero from 'components/Hero'; -
    +
    Internationalization is an essential part of the user experience. next-intl gives you everything you need to get language subtleties right and has always got your back whenever you need to fine-tune a translation. } > -
    +
    } title="ICU message syntax" diff --git a/packages/website/styles.css b/packages/website/styles.css index 37250bb69..87cf9af99 100644 --- a/packages/website/styles.css +++ b/packages/website/styles.css @@ -11,6 +11,37 @@ --shiki-token-punctuation: rgba(255, 255, 255, 0.5); } +/** + * Navbar on home + */ +.navbar-home { + @apply bg-slate-850 text-white dark:bg-slate-850; +} + +/* Hamburger */ +.navbar-home svg.open { + @apply !text-slate-900 dark:!text-white; +} + +.navbar-home nav > a { + @apply !text-white/80 transition-opacity hover:opacity-70; +} +.navbar-home *:not(.nextra-scrollbar) a, +.navbar-home *:not(.nextra-scrollbar) button { + @apply !text-inherit; +} + +html:not(.dark) .navbar-home .nextra-scrollbar { + @apply !bg-white; +} + +.navbar-home input::placeholder { + @apply !text-white/50; +} +.navbar-home input { + @apply !bg-slate-900 !text-white; +} + .navbar-home .nextra-nav-container-blur { display: none; } diff --git a/packages/website/tailwind.config.js b/packages/website/tailwind.config.js index 2022bcba1..c3bed5f7d 100644 --- a/packages/website/tailwind.config.js +++ b/packages/website/tailwind.config.js @@ -29,6 +29,10 @@ module.exports = { }, colors: { ...colors, + slate: { + ...colors.slate, + 850: 'hsl(222deg 47% 16%)' + }, primary: '#5fc3e7' } } diff --git a/packages/website/theme.config.js b/packages/website/theme.config.js index cdaf440ad..b3a94da8a 100644 --- a/packages/website/theme.config.js +++ b/packages/website/theme.config.js @@ -93,7 +93,7 @@ export default { if (!isRoot) return ; return ( -
    +
    ); From f24919a84f741b9d1d4ab1ca2518b9f5d9b6bd72 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 6 Mar 2023 11:35:22 +0100 Subject: [PATCH 167/312] chore: Rebase Next.js 13 RSC (#211) --- README.md | 51 ++- packages/example-advanced/package.json | 1 - packages/example-advanced/src/pages/about.tsx | 9 +- .../example-advanced/src/pages/api/hello.tsx | 8 +- .../src/app/[locale]/page.tsx | 20 +- .../src/components/CurrentTime.tsx | 13 - .../tests/main.spec.ts | 6 + packages/next-intl/src/react-server/index.tsx | 1 + .../src/react-server/useFormatter.tsx | 6 + .../next-intl/src/server/getFormatter.tsx | 10 + packages/next-intl/src/shared/Link.tsx | 2 +- packages/use-intl/README.md | 50 +- .../use-intl/src/core/createFormatter.tsx | 181 ++++++++ packages/use-intl/src/core/createIntl.tsx | 192 +------- packages/use-intl/src/core/index.tsx | 3 + packages/use-intl/src/react/index.tsx | 5 +- packages/use-intl/src/react/useFormatter.tsx | 19 + packages/use-intl/src/react/useIntl.tsx | 10 + .../test/core/createFormatter.test.tsx | 27 ++ .../use-intl/test/react/useFormatter.test.tsx | 430 ++++++++++++++++++ packages/use-intl/test/react/useIntl.test.tsx | 2 +- packages/website/components/CodeSnippets.js | 58 ++- packages/website/components/Hero.js | 4 +- packages/website/components/HeroCode.js | 15 +- packages/website/components/Section.js | 2 +- .../pages/docs/next-13/server-components.mdx | 2 +- .../pages/docs/usage/configuration.mdx | 22 +- .../website/pages/docs/usage/core-library.mdx | 8 +- .../website/pages/docs/usage/dates-times.mdx | 26 +- packages/website/pages/docs/usage/numbers.mdx | 8 +- packages/website/pages/index.mdx | 8 +- 31 files changed, 890 insertions(+), 309 deletions(-) delete mode 100644 packages/example-next-13-advanced/src/components/CurrentTime.tsx create mode 100644 packages/next-intl/src/react-server/useFormatter.tsx create mode 100644 packages/next-intl/src/server/getFormatter.tsx create mode 100644 packages/use-intl/src/core/createFormatter.tsx create mode 100644 packages/use-intl/src/react/useFormatter.tsx create mode 100644 packages/use-intl/test/core/createFormatter.test.tsx create mode 100644 packages/use-intl/test/react/useFormatter.test.tsx diff --git a/README.md b/README.md index 63af02e4e..985667ccd 100644 --- a/README.md +++ b/README.md @@ -7,41 +7,46 @@

    -> A minimal, but complete solution for internationalization in Next.js apps. +> Internationalization for Next.js that gets out of your way. ![Gzipped size](https://badgen.net/bundlephobia/minzip/next-intl) ![Tree shaking supported](https://badgen.net/bundlephobia/tree-shaking/next-intl) [](https://www.npmjs.com/package/next-intl)
    -**🚀 New ✨**: `next-intl` is adding support for **Next.js 13** and the `app` directory. A preview version with support for React Server Components is [now available](https://next-intl-docs.vercel.app/docs/next-13) for early adopters. +📣 [Support for Next.js 13 and the app directory is coming →](https://next-intl-docs.vercel.app/docs/next-13)
    ## Features -This library complements the [internationalized routing](https://nextjs.org/docs/advanced-features/i18n-routing) capabilities of Next.js by managing translations and providing them to components. +Internationalization is an essential part of the user experience. next-intl gives you everything you need to get language subtleties right and has always got your back whenever you need to fine-tune a translation. -- 🌟 **Proven ICU syntax**: This covers interpolation, plurals, ordinal pluralization, label selection based on enums and rich text. I18n is an essential part of the user experience, therefore this library doesn't compromise on flexibility and never leaves you behind when you need to fine tune a translation. -- 📅 **Built-in date, time and number formatting**: You can use global formats for a consistent look & feel of your app and integrate them with translations. -- 💡 **Hooks-only API**: This ensures that you can use the same API for `children` as well as for attributes which expect strings. -- ✅ **Type-safe**: If you're using TypeScript, you'll benefit from autocompletion for available message keys and compile-time errors for typos. -- ⚔️ **Battle-tested building blocks**: This library is a minimal wrapper around built-in browser APIs and supplemental lower-level APIs from Format.JS. -- 🚀 **Fast**: By integrating with both static as well as server side rendering you always get the best possible performance from your app. +- 🌟 **ICU message syntax**: Localize your messages with interpolation, plurals, ordinal pluralization, enum-based label selection, and rich text. +- 📅 **Dates, times & numbers**: Use global formats for a consistent look & feel of your app and apply fine-tuning as necessary. +- ✅ **Type-safe**: Speed up development with autocompletion for message keys and catch typos early with compile-time checks. +- 💡 **Hooks-only API**: Learn a single API that can be used across your code base to turn translations into plain strings or rich text. +- 🚀 **Fast**: Get the best performance from your app by supporting internationalization on both static and dynamic pages. +- ⚔️ **Standards-based**: Use the best parts of built-in JavaScript APIs and supplemental lower-level APIs from Format.JS. ## What does it look like? This library is based on the premise that messages can be grouped by namespaces (typically a component name). ```jsx -// LatestFollower.js -function LatestFollower({user}) { - const t = useTranslations('LatestFollower'); - +// UserDetails.tsx +import {useTranslations, useFormatter} from 'next-intl'; + +function UserDetails({user}) { + const t = useTranslations('UserDetails'); + const format = useFormatter(); + return ( - <> - {t('latestFollower', {username: user.name})} - } /> - +
    +

    {t('title')}

    +

    {t('followers', {count: user.followers.length})}

    +

    {t('lastSeen', {time: format.relativeTime(user.lastSeen)})

    + {t('portrait', +
    ); } ``` @@ -49,9 +54,15 @@ function LatestFollower({user}) { ```js // en.json { - "LatestFollower": { - "latestFollower": "{username} started following you", - "followBack": "Follow back" + "UserDetails": { + "title": "User details", + "followers": "{count, plural, ↵ + =0 {No followers yet} ↵ + =1 {One follower} ↵ + other {# followers} ↵ + }", + "lastSeen": "Last seen {time}", + "portrait": "Portrait of {username}" } } ``` diff --git a/packages/example-advanced/package.json b/packages/example-advanced/package.json index 5f273d01c..34035c1da 100644 --- a/packages/example-advanced/package.json +++ b/packages/example-advanced/package.json @@ -11,7 +11,6 @@ }, "dependencies": { "accept-language-parser": "1.5.0", - "date-fns": "^2.16.1", "lodash": "^4.17.21", "next": "^13.0.0", "next-intl": "^2.10.4", diff --git a/packages/example-advanced/src/pages/about.tsx b/packages/example-advanced/src/pages/about.tsx index f11eae088..8115c2c38 100644 --- a/packages/example-advanced/src/pages/about.tsx +++ b/packages/example-advanced/src/pages/about.tsx @@ -1,20 +1,19 @@ -import {parseISO} from 'date-fns'; import pick from 'lodash/pick'; import {GetServerSidePropsContext} from 'next'; -import {useIntl, useTranslations} from 'next-intl'; +import {useFormatter, useTranslations} from 'next-intl'; import PageLayout from 'components/PageLayout'; export default function About() { const t = useTranslations('About'); - const intl = useIntl(); - const lastUpdated = parseISO('2021-12-23T10:04:45.567Z'); + const format = useFormatter(); + const lastUpdated = new Date('2021-12-23T10:04:45.567Z'); return (

    {t('lastUpdated', { lastUpdated, - lastUpdatedRelative: intl.formatRelativeTime(lastUpdated) + lastUpdatedRelative: format.relativeTime(lastUpdated) })}

    diff --git a/packages/example-advanced/src/pages/api/hello.tsx b/packages/example-advanced/src/pages/api/hello.tsx index 2373632d4..1abee1bce 100644 --- a/packages/example-advanced/src/pages/api/hello.tsx +++ b/packages/example-advanced/src/pages/api/hello.tsx @@ -1,6 +1,6 @@ import acceptLanguageParser from 'accept-language-parser'; import type {NextApiRequest, NextApiResponse} from 'next'; -import {createIntl, createTranslator} from 'next-intl'; +import {createFormatter, createTranslator} from 'next-intl'; import nextConfig from '../../../next.config'; // This file demonstrates how `next-intl` can @@ -26,14 +26,14 @@ export default async function handler( namespace: 'Index' }); - // Creates the same object that is returned by `useIntl`. - const intl = createIntl({locale}); + // Creates the same object that is returned by `useFormatter`. + const format = createFormatter({locale}); res.status(200).json({ locale, key: 'Index.title', message: t('title'), - date: intl.formatDateTime(new Date(), {dateStyle: 'medium'}) + date: format.dateTime(new Date(), {dateStyle: 'medium'}) }); } diff --git a/packages/example-next-13-advanced/src/app/[locale]/page.tsx b/packages/example-next-13-advanced/src/app/[locale]/page.tsx index 0c616163c..a853ad999 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/page.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/page.tsx @@ -1,8 +1,13 @@ -import {Link, useTranslations} from 'next-intl'; +import { + Link, + useFormatter, + useNow, + useTimeZone, + useTranslations +} from 'next-intl'; import Image from 'next/image'; import ClientRouterWithoutProvider from '../../components/ClientRouterWithoutProvider'; import CoreLibrary from '../../components/CoreLibrary'; -import CurrentTime from '../../components/CurrentTime'; import LocaleSwitcher from '../../components/LocaleSwitcher'; import PageLayout from '../../components/PageLayout'; import MessagesAsPropsCounter from '../../components/client/01-MessagesAsPropsCounter'; @@ -14,6 +19,9 @@ type Props = { export default function Index({searchParams}: Props) { const t = useTranslations('Index'); + const format = useFormatter(); + const now = useNow(); + const timeZone = useTimeZone(); return ( @@ -28,7 +36,13 @@ export default function Index({searchParams}: Props) {

    {t.rich('globalDefaults')}

    {/* @ts-expect-error Purposefully trigger an error */}

    {t('missing')}

    - +

    + {format.dateTime(now, 'medium')} ({timeZone || 'N/A'}) +

    +

    {format.relativeTime(now)}

    +

    + {format.number(23102, {style: 'currency', currency: 'EUR'})} +

    {/* @ts-expect-error RSC are not supported yet by TypeScript */} diff --git a/packages/example-next-13-advanced/src/components/CurrentTime.tsx b/packages/example-next-13-advanced/src/components/CurrentTime.tsx deleted file mode 100644 index c298294f5..000000000 --- a/packages/example-next-13-advanced/src/components/CurrentTime.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import {useIntl, useNow, useTimeZone} from 'next-intl'; - -export default function CurrentTime() { - const intl = useIntl(); - const now = useNow(); - const timeZone = useTimeZone(); - - return ( -

    - {intl.formatDateTime(now, 'medium')} ({timeZone || 'N/A'}) -

    - ); -} diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index 89a35d845..38a6d3d32 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -435,3 +435,9 @@ it('can use caching headers', async ({request}) => { ); } }); + +it('can use the formatter', async ({page}) => { + await page.goto('/en'); + await expect(page.getByTestId('CurrentTimeRelative')).toHaveText('now'); + await expect(page.getByTestId('Number')).toHaveText('€23,102.00'); +}); diff --git a/packages/next-intl/src/react-server/index.tsx b/packages/next-intl/src/react-server/index.tsx index bae9bc192..6c35e3a30 100644 --- a/packages/next-intl/src/react-server/index.tsx +++ b/packages/next-intl/src/react-server/index.tsx @@ -9,6 +9,7 @@ import Link from '../shared/Link'; export {default as useLocale} from './useLocale'; export {default as useTranslations} from './useTranslations'; export {default as useIntl} from './useIntl'; +export {default as useFormatter} from './useFormatter'; export {default as useNow} from './useNow'; export {default as useTimeZone} from './useTimeZone'; diff --git a/packages/next-intl/src/react-server/useFormatter.tsx b/packages/next-intl/src/react-server/useFormatter.tsx new file mode 100644 index 000000000..77d539e7a --- /dev/null +++ b/packages/next-intl/src/react-server/useFormatter.tsx @@ -0,0 +1,6 @@ +import getFormatter from '../server/getFormatter'; +import useHook from './useHook'; + +export default function useFormatter() { + return useHook('useFormatter', getFormatter()); +} diff --git a/packages/next-intl/src/server/getFormatter.tsx b/packages/next-intl/src/server/getFormatter.tsx new file mode 100644 index 000000000..c0c0b3a3e --- /dev/null +++ b/packages/next-intl/src/server/getFormatter.tsx @@ -0,0 +1,10 @@ +import {cache} from 'react'; +import {createFormatter} from 'use-intl/dist/src/core'; +import getConfig from './getConfig'; + +const getFormatter = cache(async () => { + const config = await getConfig(); + return createFormatter(config); +}); + +export default getFormatter; diff --git a/packages/next-intl/src/shared/Link.tsx b/packages/next-intl/src/shared/Link.tsx index d30120a04..fd951909c 100644 --- a/packages/next-intl/src/shared/Link.tsx +++ b/packages/next-intl/src/shared/Link.tsx @@ -26,7 +26,7 @@ function Link({href, locale, prefetch, ...rest}: Props, ref: Props['ref']) { const pathname = usePathname(); useEffect(() => { - setLocalizedHref(localizeHref(href, locale, pathname)); + setLocalizedHref(localizeHref(href, locale, pathname ?? undefined)); }, [href, locale, pathname]); if (locale !== undefined) { diff --git a/packages/use-intl/README.md b/packages/use-intl/README.md index c5a5d28bc..cf74a5b7b 100644 --- a/packages/use-intl/README.md +++ b/packages/use-intl/README.md @@ -2,32 +2,37 @@ ![Gzipped size](https://badgen.net/bundlephobia/minzip/use-intl) ![Tree shaking supported](https://badgen.net/bundlephobia/tree-shaking/use-intl) [](https://www.npmjs.com/package/use-intl) -> A minimal, but complete solution for managing translations, date, time and number formatting in React apps. +> Internationalization for React that gets out of your way. ## Features -- 🌟 **Proven [ICU syntax](https://formatjs.io/docs/core-concepts/icu-syntax)**: This covers interpolation, plurals, ordinal pluralization, label selection based on enums and rich text. I18n is an essential part of the user experience, therefore this library doesn't compromise on flexibility and never leaves you behind when you need to fine tune a translation. -- 📅 **Built-in date, time and number formatting**: You can use global formats for a consistent look & feel of your app and integrate them with translations. -- 💡 **Hooks-only API**: This ensures that you can use the same API for `children` as well as for attributes which expect strings. -- ✅ **Type-safe**: If you're using TypeScript, you'll benefit from autocompletion for available message keys and compile-time errors for typos. -- ⚔️ **Battle-tested building blocks**: This library is a minimal wrapper around built-in browser APIs and supplemental lower-level APIs from [Format.JS](https://formatjs.io/) (used by `react-intl`). +Internationalization is an essential part of the user experience. use-intl gives you everything you need to get language subtleties right and has always got your back whenever you need to fine-tune a translation. + +- 🌟 **ICU message syntax**: Localize your messages with interpolation, plurals, ordinal pluralization, enum-based label selection and rich text. +- 📅 **Dates, times & numbers**: Use global formats for a consistent look & feel of your app and apply fine-tuning as necessary. +- ✅ **Type-safe**: Speed up development with autocompletion for message keys and catch typos early with compile-time checks. +- 💡 **Hooks-only API**: Learn a single API that can be used across your code base to turn translations into plain strings or rich text. +- ⚔️ **Standards-based**: Use the best parts of built-in JavaScript APIs and supplemental lower-level APIs from Format.JS. ## What does it look like? This library is based on the premise that messages can be grouped by namespaces (typically a component name). ```jsx -// LatestFollower.js -import {useTranslations} from 'use-intl'; - -function LatestFollower({user}) { - const t = useTranslations('LatestFollower'); - +// UserDetails.tsx +import {useTranslations, useFormatter} from 'next-intl'; + +function UserDetails({user}) { + const t = useTranslations('UserDetails'); + const format = useFormatter(); + return ( - <> - {t('latestFollower', {username: user.name})} - } /> - +
    +

    {t('title')}

    +

    {t('followers', {count: user.followers.length})}

    +

    {t('lastSeen', {time: format.relativeTime(user.lastSeen)})

    + {t('portrait', +
    ); } ``` @@ -35,9 +40,15 @@ function LatestFollower({user}) { ```js // en.json { - "LatestFollower": { - "latestFollower": "{username} started following you", - "followBack": "Follow back" + "UserDetails": { + "title": "User details", + "followers": "{count, plural, ↵ + =0 {No followers yet} ↵ + =1 {One follower} ↵ + other {# followers} ↵ + }", + "lastSeen": "Last seen {time}", + "portrait": "Portrait of {username}" } } ``` @@ -46,6 +57,7 @@ function LatestFollower({user}) { 1. `npm install use-intl` 2. Add the provider + ```jsx import {IntlProvider} from 'use-intl'; diff --git a/packages/use-intl/src/core/createFormatter.tsx b/packages/use-intl/src/core/createFormatter.tsx new file mode 100644 index 000000000..2bf0e54c9 --- /dev/null +++ b/packages/use-intl/src/core/createFormatter.tsx @@ -0,0 +1,181 @@ +import DateTimeFormatOptions from './DateTimeFormatOptions'; +import Formats from './Formats'; +import IntlError, {IntlErrorCode} from './IntlError'; +import NumberFormatOptions from './NumberFormatOptions'; +import {defaultOnError} from './defaults'; + +const MINUTE = 60; +const HOUR = MINUTE * 60; +const DAY = HOUR * 24; +const WEEK = DAY * 7; +const MONTH = DAY * (365 / 12); // Approximation +const YEAR = DAY * 365; + +function getRelativeTimeFormatConfig(seconds: number) { + const absValue = Math.abs(seconds); + let value, unit: Intl.RelativeTimeFormatUnit; + + // We have to round the resulting values, as `Intl.RelativeTimeFormat` + // will include fractions like '2.1 hours ago'. + + if (absValue < MINUTE) { + unit = 'second'; + value = Math.round(seconds); + } else if (absValue < HOUR) { + unit = 'minute'; + value = Math.round(seconds / MINUTE); + } else if (absValue < DAY) { + unit = 'hour'; + value = Math.round(seconds / HOUR); + } else if (absValue < WEEK) { + unit = 'day'; + value = Math.round(seconds / DAY); + } else if (absValue < MONTH) { + unit = 'week'; + value = Math.round(seconds / WEEK); + } else if (absValue < YEAR) { + unit = 'month'; + value = Math.round(seconds / MONTH); + } else { + unit = 'year'; + value = Math.round(seconds / YEAR); + } + + return {value, unit}; +} + +type Props = { + locale: string; + timeZone?: string; + onError?(error: IntlError): void; + formats?: Partial; + now?: Date; +}; + +export default function createFormatter({ + formats, + locale, + now: globalNow, + onError = defaultOnError, + timeZone +}: Props) { + function resolveFormatOrOptions( + typeFormats: Record | undefined, + formatOrOptions?: string | Options + ) { + let options; + if (typeof formatOrOptions === 'string') { + const formatName = formatOrOptions; + options = typeFormats?.[formatName]; + + if (!options) { + const error = new IntlError( + IntlErrorCode.MISSING_FORMAT, + process.env.NODE_ENV !== 'production' + ? `Format \`${formatName}\` is not available. You can configure it on the provider or provide custom options.` + : undefined + ); + onError(error); + throw error; + } + } else { + options = formatOrOptions; + } + + return options; + } + + function getFormattedValue( + value: Value, + formatOrOptions: string | Options | undefined, + typeFormats: Record | undefined, + formatter: (options?: Options) => string + ) { + let options; + try { + options = resolveFormatOrOptions(typeFormats, formatOrOptions); + } catch (error) { + return String(value); + } + + try { + return formatter(options); + } catch (error) { + onError( + new IntlError(IntlErrorCode.FORMATTING_ERROR, (error as Error).message) + ); + return String(value); + } + } + + function dateTime( + /** If a number is supplied, this is interpreted as a UTC timestamp. */ + value: Date | number, + /** If a time zone is supplied, the `value` is converted to that time zone. + * Otherwise the user time zone will be used. */ + formatOrOptions?: string | DateTimeFormatOptions + ) { + return getFormattedValue( + value, + formatOrOptions, + formats?.dateTime, + (options) => { + if (timeZone && !options?.timeZone) { + options = {...options, timeZone}; + } + + return new Intl.DateTimeFormat(locale, options).format(value); + } + ); + } + + function number( + value: number, + formatOrOptions?: string | NumberFormatOptions + ) { + return getFormattedValue( + value, + formatOrOptions, + formats?.number, + (options) => new Intl.NumberFormat(locale, options).format(value) + ); + } + + function relativeTime( + /** The date time that needs to be formatted. */ + date: number | Date, + /** The reference point in time to which `date` will be formatted in relation to. */ + now?: number | Date + ) { + try { + if (!now) { + if (globalNow) { + now = globalNow; + } else { + throw new Error( + process.env.NODE_ENV !== 'production' + ? `The \`now\` parameter wasn't provided and there was no global fallback configured on the provider.` + : undefined + ); + } + } + + const dateDate = date instanceof Date ? date : new Date(date); + const nowDate = now instanceof Date ? now : new Date(now); + + const seconds = (dateDate.getTime() - nowDate.getTime()) / 1000; + const {unit, value} = getRelativeTimeFormatConfig(seconds); + + return new Intl.RelativeTimeFormat(locale, { + numeric: 'auto' + }).format(value, unit); + } catch (error) { + onError( + new IntlError(IntlErrorCode.FORMATTING_ERROR, (error as Error).message) + ); + return String(date); + } + } + + return {dateTime, number, relativeTime}; +} diff --git a/packages/use-intl/src/core/createIntl.tsx b/packages/use-intl/src/core/createIntl.tsx index 74c023cbd..9c34b36a9 100644 --- a/packages/use-intl/src/core/createIntl.tsx +++ b/packages/use-intl/src/core/createIntl.tsx @@ -1,181 +1,13 @@ -import DateTimeFormatOptions from './DateTimeFormatOptions'; -import Formats from './Formats'; -import IntlError, {IntlErrorCode} from './IntlError'; -import NumberFormatOptions from './NumberFormatOptions'; -import {defaultOnError} from './defaults'; - -const MINUTE = 60; -const HOUR = MINUTE * 60; -const DAY = HOUR * 24; -const WEEK = DAY * 7; -const MONTH = DAY * (365 / 12); // Approximation -const YEAR = DAY * 365; - -function getRelativeTimeFormatConfig(seconds: number) { - const absValue = Math.abs(seconds); - let value, unit: Intl.RelativeTimeFormatUnit; - - // We have to round the resulting values, as `Intl.RelativeTimeFormat` - // will include fractions like '2.1 hours ago'. - - if (absValue < MINUTE) { - unit = 'second'; - value = Math.round(seconds); - } else if (absValue < HOUR) { - unit = 'minute'; - value = Math.round(seconds / MINUTE); - } else if (absValue < DAY) { - unit = 'hour'; - value = Math.round(seconds / HOUR); - } else if (absValue < WEEK) { - unit = 'day'; - value = Math.round(seconds / DAY); - } else if (absValue < MONTH) { - unit = 'week'; - value = Math.round(seconds / WEEK); - } else if (absValue < YEAR) { - unit = 'month'; - value = Math.round(seconds / MONTH); - } else { - unit = 'year'; - value = Math.round(seconds / YEAR); - } - - return {value, unit}; -} - -type Props = { - locale: string; - timeZone?: string; - onError?(error: IntlError): void; - formats?: Partial; - now?: Date; -}; - -export default function createIntl({ - formats, - locale, - now: globalNow, - onError = defaultOnError, - timeZone -}: Props) { - function resolveFormatOrOptions( - typeFormats: Record | undefined, - formatOrOptions?: string | Options - ) { - let options; - if (typeof formatOrOptions === 'string') { - const formatName = formatOrOptions; - options = typeFormats?.[formatName]; - - if (!options) { - const error = new IntlError( - IntlErrorCode.MISSING_FORMAT, - process.env.NODE_ENV !== 'production' - ? `Format \`${formatName}\` is not available. You can configure it on the provider or provide custom options.` - : undefined - ); - onError(error); - throw error; - } - } else { - options = formatOrOptions; - } - - return options; - } - - function getFormattedValue( - value: Value, - formatOrOptions: string | Options | undefined, - typeFormats: Record | undefined, - formatter: (options?: Options) => string - ) { - let options; - try { - options = resolveFormatOrOptions(typeFormats, formatOrOptions); - } catch (error) { - return String(value); - } - - try { - return formatter(options); - } catch (error) { - onError( - new IntlError(IntlErrorCode.FORMATTING_ERROR, (error as Error).message) - ); - return String(value); - } - } - - function formatDateTime( - /** If a number is supplied, this is interpreted as a UTC timestamp. */ - value: Date | number, - /** If a time zone is supplied, the `value` is converted to that time zone. - * Otherwise the user time zone will be used. */ - formatOrOptions?: string | DateTimeFormatOptions - ) { - return getFormattedValue( - value, - formatOrOptions, - formats?.dateTime, - (options) => { - if (timeZone && !options?.timeZone) { - options = {...options, timeZone}; - } - - return new Intl.DateTimeFormat(locale, options).format(value); - } - ); - } - - function formatNumber( - value: number, - formatOrOptions?: string | NumberFormatOptions - ) { - return getFormattedValue( - value, - formatOrOptions, - formats?.number, - (options) => new Intl.NumberFormat(locale, options).format(value) - ); - } - - function formatRelativeTime( - /** The date time that needs to be formatted. */ - date: number | Date, - /** The reference point in time to which `date` will be formatted in relation to. */ - now?: number | Date - ) { - try { - if (!now) { - if (globalNow) { - now = globalNow; - } else { - throw new Error( - process.env.NODE_ENV !== 'production' - ? `The \`now\` parameter wasn't provided to \`formatRelativeTime\` and there was no global fallback configured on the provider.` - : undefined - ); - } - } - - const dateDate = date instanceof Date ? date : new Date(date); - const nowDate = now instanceof Date ? now : new Date(now); - - const seconds = (dateDate.getTime() - nowDate.getTime()) / 1000; - const {unit, value} = getRelativeTimeFormatConfig(seconds); - - return new Intl.RelativeTimeFormat(locale, { - numeric: 'auto' - }).format(value, unit); - } catch (error) { - onError( - new IntlError(IntlErrorCode.FORMATTING_ERROR, (error as Error).message) - ); - return String(date); - } - } - - return {formatDateTime, formatNumber, formatRelativeTime}; +import createFormatter from './createFormatter'; + +/** @deprecated Switch to `createFormatter` */ +export default function createIntl( + ...args: Parameters +) { + const formatter = createFormatter(...args); + return { + formatDateTime: formatter.dateTime, + formatNumber: formatter.number, + formatRelativeTime: formatter.relativeTime + }; } diff --git a/packages/use-intl/src/core/index.tsx b/packages/use-intl/src/core/index.tsx index b86994312..a0f670d42 100644 --- a/packages/use-intl/src/core/index.tsx +++ b/packages/use-intl/src/core/index.tsx @@ -8,4 +8,7 @@ export {default as DateTimeFormatOptions} from './DateTimeFormatOptions'; export {default as NumberFormatOptions} from './NumberFormatOptions'; export {default as IntlError, IntlErrorCode} from './IntlError'; export {default as createTranslator} from './createTranslator'; +export {default as createFormatter} from './createFormatter'; + +// TODO: Remove in next major version export {default as createIntl} from './createIntl'; diff --git a/packages/use-intl/src/react/index.tsx b/packages/use-intl/src/react/index.tsx index 6ac540755..69a80cca9 100644 --- a/packages/use-intl/src/react/index.tsx +++ b/packages/use-intl/src/react/index.tsx @@ -1,6 +1,9 @@ export {default as IntlProvider} from './IntlProvider'; export {default as useTranslations} from './useTranslations'; -export {default as useIntl} from './useIntl'; export {default as useLocale} from './useLocale'; export {default as useNow} from './useNow'; export {default as useTimeZone} from './useTimeZone'; +export {default as useFormatter} from './useFormatter'; + +// TODO: Remove in next major version +export {default as useIntl} from './useIntl'; diff --git a/packages/use-intl/src/react/useFormatter.tsx b/packages/use-intl/src/react/useFormatter.tsx new file mode 100644 index 000000000..4e281359b --- /dev/null +++ b/packages/use-intl/src/react/useFormatter.tsx @@ -0,0 +1,19 @@ +import {useMemo} from 'react'; +import createFormatter from '../core/createFormatter'; +import useIntlContext from './useIntlContext'; + +export default function useFormatter() { + const {formats, locale, now: globalNow, onError, timeZone} = useIntlContext(); + + return useMemo( + () => + createFormatter({ + formats, + locale, + now: globalNow, + onError, + timeZone + }), + [formats, globalNow, locale, onError, timeZone] + ); +} diff --git a/packages/use-intl/src/react/useIntl.tsx b/packages/use-intl/src/react/useIntl.tsx index 82074757c..e3a4549ea 100644 --- a/packages/use-intl/src/react/useIntl.tsx +++ b/packages/use-intl/src/react/useIntl.tsx @@ -2,9 +2,19 @@ import {useMemo} from 'react'; import createIntl from '../core/createIntl'; import useIntlContext from './useIntlContext'; +let hasWarned = false; + +/** @deprecated Switch to `useFormatter` */ export default function useIntl() { const {formats, locale, now: globalNow, onError, timeZone} = useIntlContext(); + if (!hasWarned) { + hasWarned = true; + console.warn( + '`useIntl()` is deprecated and will be removed in the next major version. Please switch to `useFormatter()`.' + ); + } + return useMemo( () => createIntl({ diff --git a/packages/use-intl/test/core/createFormatter.test.tsx b/packages/use-intl/test/core/createFormatter.test.tsx new file mode 100644 index 000000000..ad9585749 --- /dev/null +++ b/packages/use-intl/test/core/createFormatter.test.tsx @@ -0,0 +1,27 @@ +import {parseISO} from 'date-fns'; +import {createFormatter} from '../../src'; + +const intl = createFormatter({locale: 'en'}); + +it('formats a date and time', () => { + expect( + intl.dateTime(parseISO('2020-11-20T10:36:01.516Z'), { + dateStyle: 'medium' + }) + ).toBe('Nov 20, 2020'); +}); + +it('formats a number', () => { + expect(intl.number(123456.789, {style: 'currency', currency: 'USD'})).toBe( + '$123,456.79' + ); +}); + +it('formats a relative time', () => { + expect( + intl.relativeTime( + parseISO('2020-11-20T10:36:01.516Z'), + parseISO('2020-11-20T12:30:01.516Z') + ) + ).toBe('2 hours ago'); +}); diff --git a/packages/use-intl/test/react/useFormatter.test.tsx b/packages/use-intl/test/react/useFormatter.test.tsx new file mode 100644 index 000000000..8dc4dab2f --- /dev/null +++ b/packages/use-intl/test/react/useFormatter.test.tsx @@ -0,0 +1,430 @@ +import {render, screen} from '@testing-library/react'; +import {parseISO} from 'date-fns'; +import React, {ComponentProps, ReactNode} from 'react'; +import { + DateTimeFormatOptions, + NumberFormatOptions, + IntlError, + IntlErrorCode, + IntlProvider, + useFormatter +} from '../../src'; + +function MockProvider( + props: Partial> & {children: ReactNode} +) { + return ; +} + +describe('dateTime', () => { + const mockDate = parseISO('2020-11-20T10:36:01.516Z'); + + function renderDateTime( + value: Date | number, + options?: DateTimeFormatOptions + ) { + function Component() { + const format = useFormatter(); + return <>{format.dateTime(value, options)}; + } + + render( + + + + ); + } + + it('formats a date', () => { + renderDateTime(mockDate); + screen.getByText('11/20/2020'); + }); + + it('formats a time', () => { + renderDateTime(mockDate, {minute: 'numeric', hour: 'numeric'}); + screen.getByText('11:36 AM'); + }); + + it('accepts options', () => { + renderDateTime(mockDate, {month: 'long'}); + screen.getByText('November'); + }); + + it('formats time', () => { + renderDateTime(mockDate, {hour: 'numeric', minute: 'numeric'}); + screen.getByText('11:36 AM'); + }); + + it('can use a global date format', () => { + function Component() { + const format = useFormatter(); + return <>{format.dateTime(mockDate, 'onlyYear')}; + } + + render( + + + + ); + + screen.getByText('2020'); + }); + + it('can use a global time format', () => { + function Component() { + const format = useFormatter(); + return <>{format.dateTime(mockDate, 'onlyHours')}; + } + + render( + + + + ); + + screen.getByText('11 AM'); + }); + + describe('time zones', () => { + it('converts a date to the target time zone', () => { + renderDateTime(mockDate, { + timeZone: 'Asia/Shanghai', + hour: 'numeric', + minute: 'numeric' + }); + screen.getByText('6:36 PM'); + }); + + it('can use a global time zone', () => { + function Component() { + const format = useFormatter(); + return ( + <> + {format.dateTime(mockDate, { + hour: 'numeric', + minute: 'numeric' + })} + + ); + } + + render( + + + + ); + + screen.getByText('6:36 PM'); + }); + + it('can override a global time zone', () => { + function Component() { + const format = useFormatter(); + return ( + <> + {format.dateTime(mockDate, { + timeZone: 'Australia/Sydney', + hour: 'numeric', + minute: 'numeric' + })} + + ); + } + + render( + + + + ); + + screen.getByText('9:36 PM'); + }); + }); + + describe('error handling', () => { + it('handles missing formats', () => { + const onError = jest.fn(); + + function Component() { + const format = useFormatter(); + return <>{format.dateTime(mockDate, 'onlyYear')}; + } + + const {container} = render( + + + + ); + + const error: IntlError = onError.mock.calls[0][0]; + expect(error.message).toBe( + 'MISSING_FORMAT: Format `onlyYear` is not available. You can configure it on the provider or provide custom options.' + ); + expect(error.code).toBe(IntlErrorCode.MISSING_FORMAT); + expect(container.textContent).toMatch(/Nov 20 2020/); + }); + + it('handles formatting errors', () => { + const onError = jest.fn(); + + function Component() { + const format = useFormatter(); + + // @ts-expect-error + return <>{format.dateTime(mockDate, {year: 'very long'})}; + } + + const {container} = render( + + + + ); + + const error: IntlError = onError.mock.calls[0][0]; + expect(error.message).toBe( + 'FORMATTING_ERROR: Value very long out of range for Intl.DateTimeFormat options property year' + ); + expect(error.code).toBe(IntlErrorCode.FORMATTING_ERROR); + expect(container.textContent).toMatch(/Nov 20 2020/); + }); + }); +}); + +describe('number', () => { + function renderNumber(value: number, options?: NumberFormatOptions) { + function Component() { + const format = useFormatter(); + return <>{format.number(value, options)}; + } + + render( + + + + ); + } + + it('formats a number', () => { + renderNumber(2948192329.12312); + screen.getByText('2,948,192,329.123'); + }); + + it('accepts options', () => { + renderNumber(299.99, {currency: 'EUR', style: 'currency'}); + screen.getByText('€299.99'); + }); + + it('can use a global format', () => { + function Component() { + const format = useFormatter(); + return <>{format.number(10000, 'noGrouping')}; + } + + render( + + + + ); + + screen.getByText('10000'); + }); + + describe('error handling', () => { + const mockNumber = 10000; + + it('handles missing formats', () => { + const onError = jest.fn(); + + function Component() { + const format = useFormatter(); + return <>{format.number(mockNumber, 'missing')}; + } + + const {container} = render( + + + + ); + + const error: IntlError = onError.mock.calls[0][0]; + expect(error.message).toBe( + 'MISSING_FORMAT: Format `missing` is not available. You can configure it on the provider or provide custom options.' + ); + expect(error.code).toBe(IntlErrorCode.MISSING_FORMAT); + expect(container.textContent).toBe('10000'); + }); + + it('handles formatting errors', () => { + const onError = jest.fn(); + + function Component() { + const format = useFormatter(); + return <>{format.number(mockNumber, {currency: 'unknown'})}; + } + + const {container} = render( + + + + ); + + const error: IntlError = onError.mock.calls[0][0]; + expect(error.message).toBe( + 'FORMATTING_ERROR: Invalid currency code : unknown' + ); + expect(error.code).toBe(IntlErrorCode.FORMATTING_ERROR); + expect(container.textContent).toBe('10000'); + }); + }); +}); + +describe('relativeTime', () => { + function renderNumber(date: Date | number, now: Date | number) { + function Component() { + const format = useFormatter(); + return <>{format.relativeTime(date, now)}; + } + + render( + + + + ); + } + + it('can format now', () => { + renderNumber( + parseISO('2020-11-20T10:36:00.000Z'), + parseISO('2020-11-20T10:36:00.100Z') + ); + screen.getByText('now'); + }); + + it('can format seconds', () => { + renderNumber( + parseISO('2020-11-20T10:35:31.000Z'), + parseISO('2020-11-20T10:36:00.000Z') + ); + screen.getByText('29 seconds ago'); + }); + + it('can format minutes', () => { + renderNumber( + parseISO('2020-11-20T10:12:00.000Z'), + parseISO('2020-11-20T10:36:00.000Z') + ); + screen.getByText('24 minutes ago'); + }); + + it('uses the lowest unit possible', () => { + renderNumber( + parseISO('2020-11-20T09:37:00.000Z'), + parseISO('2020-11-20T10:36:00.000Z') + ); + screen.getByText('59 minutes ago'); + }); + + it('can format hours', () => { + renderNumber( + parseISO('2020-11-20T08:30:00.000Z'), + parseISO('2020-11-20T10:36:00.000Z') + ); + screen.getByText('2 hours ago'); + }); + + it('can format days', () => { + renderNumber( + parseISO('2020-11-17T10:36:00.000Z'), + parseISO('2020-11-20T10:36:00.000Z') + ); + screen.getByText('3 days ago'); + }); + + it('can format weeks', () => { + renderNumber( + parseISO('2020-11-02T10:36:00.000Z'), + parseISO('2020-11-20T10:36:00.000Z') + ); + screen.getByText('3 weeks ago'); + }); + + it('can format months', () => { + renderNumber( + parseISO('2020-03-02T10:36:00.000Z'), + parseISO('2020-11-20T10:36:00.000Z') + ); + screen.getByText('9 months ago'); + }); + + it('can format years', () => { + renderNumber( + parseISO('1984-11-20T10:36:00.000Z'), + parseISO('2020-11-20T10:36:00.000Z') + ); + screen.getByText('36 years ago'); + }); + + it('can use a global `now` fallback', () => { + function Component() { + const format = useFormatter(); + const mockDate = parseISO('1984-11-20T10:36:00.000Z'); + return <>{format.relativeTime(mockDate)}; + } + + render( + + + + ); + + screen.getByText('34 years ago'); + }); + + describe('error handling', () => { + it('handles formatting errors', () => { + const onError = jest.fn(); + + function Component() { + const format = useFormatter(); + // @ts-ignore Provoke an error + const date = 'not a number' as number; + return <>{format.relativeTime(date, -20)}; + } + + const {container} = render( + + + + ); + + const error: IntlError = onError.mock.calls[0][0]; + expect(error.message).toBe( + 'FORMATTING_ERROR: Value need to be finite number for Intl.RelativeTimeFormat.prototype.format()' + ); + expect(error.code).toBe(IntlErrorCode.FORMATTING_ERROR); + expect(container.textContent).toBe('not a number'); + }); + + it('throws when no `now` value is available', () => { + const onError = jest.fn(); + + function Component() { + const format = useFormatter(); + const mockDate = parseISO('1984-11-20T10:36:00.000Z'); + return <>{format.relativeTime(mockDate)}; + } + + render( + + + + ); + + const error: IntlError = onError.mock.calls[0][0]; + expect(error.message).toBe( + "FORMATTING_ERROR: The `now` parameter wasn't provided and there was no global fallback configured on the provider." + ); + expect(error.code).toBe(IntlErrorCode.FORMATTING_ERROR); + }); + }); +}); diff --git a/packages/use-intl/test/react/useIntl.test.tsx b/packages/use-intl/test/react/useIntl.test.tsx index b5e2389d8..1b8b9a27d 100644 --- a/packages/use-intl/test/react/useIntl.test.tsx +++ b/packages/use-intl/test/react/useIntl.test.tsx @@ -422,7 +422,7 @@ describe('formatRelativeTime', () => { const error: IntlError = onError.mock.calls[0][0]; expect(error.message).toBe( - "FORMATTING_ERROR: The `now` parameter wasn't provided to `formatRelativeTime` and there was no global fallback configured on the provider." + "FORMATTING_ERROR: The `now` parameter wasn't provided and there was no global fallback configured on the provider." ); expect(error.code).toBe(IntlErrorCode.FORMATTING_ERROR); }); diff --git a/packages/website/components/CodeSnippets.js b/packages/website/components/CodeSnippets.js index 2c72f8bc1..bebe2b016 100644 --- a/packages/website/components/CodeSnippets.js +++ b/packages/website/components/CodeSnippets.js @@ -85,10 +85,8 @@ CodeSnippets.datesTimesNumbers = () => ( - intl - - .formatDateTime - + format + .dateTime (lastSeen , @@ -104,10 +102,8 @@ CodeSnippets.datesTimesNumbers = () => ( - intl - - .formatRelativeTime - + format + .relativeTime (lastSeen); @@ -115,8 +111,8 @@ CodeSnippets.datesTimesNumbers = () => ( // "$1,499.90" - intl - .formatNumber + format + .number ( 1499.9, {' {'} @@ -198,26 +194,46 @@ CodeSnippets.hooks = () => ( ); + + + t ( - 'title' + 'followers' - ); - // string + , + {'{'}count + : + + user + . + followers + . + length + {'}'}); + // string t - . - rich + .rich ( 'bio' - ); - - {' '} - // ReactNode + , + {'{'} + b + : + (chunks) + => + < + b + + >{'{'}chunks{'}'}</ + b + >{'}'}); + // ReactNode @@ -225,11 +241,11 @@ CodeSnippets.hooks = () => ( const - intl + format = - useIntl + useFormatter (); diff --git a/packages/website/components/Hero.js b/packages/website/components/Hero.js index 6908e118d..1069dcfeb 100644 --- a/packages/website/components/Hero.js +++ b/packages/website/components/Hero.js @@ -14,7 +14,7 @@ export default function Hero({
    -
    +

    {titleStrong}{' '} @@ -36,7 +36,7 @@ export default function Hero({

    {/* eslint-disable-next-line @next/next/link-passhref */} 📣{' '} diff --git a/packages/website/components/HeroCode.js b/packages/website/components/HeroCode.js index 1a7af8783..a5154141a 100644 --- a/packages/website/components/HeroCode.js +++ b/packages/website/components/HeroCode.js @@ -31,7 +31,10 @@ const files = [ {'{'}useTranslations , - useIntl{'}'} + + {' '} + useFormatter{'}'}{' '} + from {' '} const - intl + format = - useIntl + + useFormatter + (); @@ -207,9 +212,9 @@ const files = [ {'{'}time : - intl + format - .formatRelativeTime + .relativeTime ( user diff --git a/packages/website/components/Section.js b/packages/website/components/Section.js index 591c16160..dc3df4d79 100644 --- a/packages/website/components/Section.js +++ b/packages/website/components/Section.js @@ -2,7 +2,7 @@ export default function Section({children, description, title}) { return ( <>
    -
    +

    {title} diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index a6a766ea1..d8c873f05 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -366,7 +366,7 @@ These functions are available from `next-intl/server` for usage outside of compo ```tsx import { getTranslations, // like `useTranslations` - getIntl, // like `useIntl` + getFormatter, // like `useFormatter` getLocale, // like `useLocale` getNow, // like `useNow` getTimeZone // like `useTimeZone` diff --git a/packages/website/pages/docs/usage/configuration.mdx b/packages/website/pages/docs/usage/configuration.mdx index 1975572d5..6e4a5398e 100644 --- a/packages/website/pages/docs/usage/configuration.mdx +++ b/packages/website/pages/docs/usage/configuration.mdx @@ -29,7 +29,7 @@ To avoid mismatches between the server and client environment, it is recommended ``` -This value will be used as the default for the `formatRelativeTime` function as well as for the initial render of `useNow`. +This value will be used as the default for the `relativeTime` function as well as for the initial render of `useNow`. **Important:** When you use `getStaticProps` and no `updateInterval`, this @@ -67,8 +67,14 @@ To achieve consistent date, time and number formatting across your app, you can ``` ```js -intl.formatDateTime(new Date('2020-11-20T10:36:01.516Z'), 'short'); -intl.formatNumber(new Date('2020-11-20T10:36:01.516Z'), 'short'); +import {useFormatter} from 'next-intl'; + +function Component() { + const format = useFormatter(); + + format.dateTime(new Date('2020-11-20T10:36:01.516Z'), 'short'); + format.number(new Date('2020-11-20T10:36:01.516Z'), 'short'); +} ``` Global formats can also be referenced in messages. @@ -81,8 +87,14 @@ Global formats can also be referenced in messages. ``` ```js -t('ordered', {orderDate: new Date('2020-11-20T10:36:01.516Z')}); -t('latitude', {latitude: 47.414329182}); +import {useTranslations} from 'next-intl'; + +function Component() { + const t = useTranslations(); + + t('ordered', {orderDate: new Date('2020-11-20T10:36:01.516Z')}); + t('latitude', {latitude: 47.414329182}); +} ``` ## Default translation values diff --git a/packages/website/pages/docs/usage/core-library.mdx b/packages/website/pages/docs/usage/core-library.mdx index 1362c8dac..57142ce0c 100644 --- a/packages/website/pages/docs/usage/core-library.mdx +++ b/packages/website/pages/docs/usage/core-library.mdx @@ -29,13 +29,13 @@ t.rich('rich', { For date, time and number formatting, the `intl` object can be created outside of React as well: ```js -import {createIntl} from 'next-intl'; +import {createFormatter} from 'next-intl'; -// Creates the same object that is returned by `useIntl`. -const intl = createIntl({locale: 'en'}); +// Creates the same object that is returned by `useFormatter`. +const format = createFormatter({locale: 'en'}); // Result: "Oct 17, 2022" -intl.formatDateTime(new Date(2022, 9, 17), {dateStyle: 'medium'}); +format.dateTime(new Date(2022, 9, 17), {dateStyle: 'medium'}); ``` A common example for the usage of the core library is to use messages in [Next.js API routes](https://nextjs.org/docs/api-routes/introduction). See the [advanced example](/examples/advanced) for a working implementation. diff --git a/packages/website/pages/docs/usage/dates-times.mdx b/packages/website/pages/docs/usage/dates-times.mdx index bc20daf1f..dc7f8a687 100644 --- a/packages/website/pages/docs/usage/dates-times.mdx +++ b/packages/website/pages/docs/usage/dates-times.mdx @@ -6,26 +6,26 @@ If you're formatting dates and times, you should [set up a global time zone](#to ## Formatting plain dates -You can format plain dates and times that are not part of a message with the `useIntl` hook: +You can format plain dates and times that are not part of a message with the `useFormatter` hook: ```js -import {useIntl} from 'next-intl'; +import {useFormatter} from 'next-intl'; function Component() { - const intl = useIntl(); + const format = useFormatter(); const dateTime = new Date('2020-11-20T10:36:01.516Z'); - intl.formatDateTime(dateTime, { + format.dateTime(dateTime, { year: 'numeric', month: 'numeric', day: 'numeric' }); - intl.formatDateTime(dateTime, {hour: 'numeric', minute: 'numeric'}); + format.dateTime(dateTime, {hour: 'numeric', minute: 'numeric'}); } ``` -See [the MDN docs about `DateTimeFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat#Using_options) to learn more about the options you can provide to `formatDateTime` ([interactive explorer](https://www.intl-explorer.com/DateTimeFormat)). +See [the MDN docs about `DateTimeFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat#Using_options) to learn more about the options that you can provide to `dateTime` ([interactive explorer](https://www.intl-explorer.com/DateTimeFormat)). To reuse date and time formats for multiple components, you can configure @@ -37,15 +37,15 @@ See [the MDN docs about `DateTimeFormat`](https://developer.mozilla.org/en-US/do Relative time durations can be formatted with a separate function: ```js -import {useIntl} from 'next-intl'; +import {useFormatter} from 'next-intl'; function Component() { - const intl = useIntl(); + const format = useFormatter(); const dateTime = new Date('2020-11-20T08:30:00.000Z'); const now = new Date('2020-11-20T10:36:00.000Z'); // Renders "2 hours ago" - intl.formatRelativeTime(dateTime, now); + format.relativeTime(dateTime, now); } ``` @@ -54,23 +54,23 @@ Note that values are rounded, so e.g. if 100 seconds have passed, "2 minutes ago Supplying `now` is necessary for the function to return consistent results. If you have [configured a global value for `now` on the provider](/docs/usage/configuration#global-now-value), you can omit the second argument: ```js -intl.formatRelativeTime(dateTime); +format.relativeTime(dateTime); ``` If you want the value to update over time, you can do so with the `useNow` hook: ```js -import {useNow, useIntl} from 'next-intl'; +import {useNow, useFormatter} from 'next-intl'; function Component() { const now = useNow({ // Update every 10 seconds updateInterval: 1000 * 10 }); - const intl = useIntl(); + const format = useFormatter(); const dateTime = new Date('2020-11-20T10:36:01.516Z'); - intl.formatRelativeTime(dateTime, now); + format.relativeTime(dateTime, now); } ``` diff --git a/packages/website/pages/docs/usage/numbers.mdx b/packages/website/pages/docs/usage/numbers.mdx index cb8edb410..c9a327424 100644 --- a/packages/website/pages/docs/usage/numbers.mdx +++ b/packages/website/pages/docs/usage/numbers.mdx @@ -7,16 +7,16 @@ import Callout from 'components/Callout'; When you're formatting plain numbers that are not part of a message, you can use a separate hook: ```js -import {useIntl} from 'next-intl'; +import {useFormatter} from 'next-intl'; function Component() { - const intl = useIntl(); + const format = useFormatter(); - intl.formatNumber(499.9, {style: 'currency', currency: 'USD'}); + format.number(499.9, {style: 'currency', currency: 'USD'}); } ``` -See [the MDN docs about `NumberFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat#Using_options) to learn more about the options you can pass to `formatNumber` ([interactive explorer](https://www.intl-explorer.com/NumberFormat/Currency)). +See [the MDN docs about `NumberFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat#Using_options) to learn more about the options you can pass to `number` ([interactive explorer](https://www.intl-explorer.com/NumberFormat/Currency)). ## Numbers within messages diff --git a/packages/website/pages/index.mdx b/packages/website/pages/index.mdx index eced4d8f4..1015eb369 100644 --- a/packages/website/pages/index.mdx +++ b/packages/website/pages/index.mdx @@ -23,15 +23,13 @@ import Hero from 'components/Hero';
    Internationalization is an essential part of the user experience. next-intl gives you everything you need to get language subtleties right and has always got your back whenever you need to fine-tune a translation. - } + description="Internationalization is an essential part of the user experience. next-intl gives you everything you need to get language subtleties right and has always got your back whenever you need to fine-tune a translation." >
    } title="ICU message syntax" - description="Localize your messages with interpolation, plurals, ordinal pluralization, enum-based label selection, and rich text." + description="Localize your messages with interpolation, plurals, ordinal pluralization, enum-based label selection and rich text." /> } @@ -46,7 +44,7 @@ import Hero from 'components/Hero'; } title="Hooks-only API" - description="Learn a single API that can be used across your code base, from components accepting children to string attributes." + description="Learn a single API that can be used across your code base to turn translations into plain strings or rich text." /> } From a60851242631466c20a16bf59c07a67a47ed37df Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 6 Mar 2023 11:47:48 +0100 Subject: [PATCH 168/312] v2.12.0-alpha.1 --- packages/use-intl/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/use-intl/package.json b/packages/use-intl/package.json index 2fa21b61f..5940da78c 100644 --- a/packages/use-intl/package.json +++ b/packages/use-intl/package.json @@ -1,6 +1,6 @@ { "name": "use-intl", - "version": "2.11.0", + "version": "2.12.0-alpha.1", "sideEffects": false, "author": "Jan Amann ", "description": "Minimal, but complete solution for managing internationalization in React apps.", From b6f720a5e7fb0a6cb07f89c0fd2c1e68a8231538 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 6 Mar 2023 11:49:52 +0100 Subject: [PATCH 169/312] v2.12.0-beta.1 --- packages/use-intl/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/use-intl/package.json b/packages/use-intl/package.json index 5940da78c..2fa21b61f 100644 --- a/packages/use-intl/package.json +++ b/packages/use-intl/package.json @@ -1,6 +1,6 @@ { "name": "use-intl", - "version": "2.12.0-alpha.1", + "version": "2.11.0", "sideEffects": false, "author": "Jan Amann ", "description": "Minimal, but complete solution for managing internationalization in React apps.", From 94e0a37dccda6b423eee8cba742293a6ee4e6141 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 6 Mar 2023 11:52:52 +0100 Subject: [PATCH 170/312] 2.12.0-beta.1 --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index d8c873f05..99dd96896 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -13,7 +13,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current beta version ``` -npm install next-intl@2.11.0-beta.16 +npm install next-intl@2.12.0-beta.1 ``` This beta version was tested with `next@13.2.0`. From 42a9b79536874b464f2262c50512f3d8ce160b0d Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 6 Mar 2023 12:05:54 +0100 Subject: [PATCH 171/312] Include deprecation warning for `useIntl` in RSC --- packages/next-intl/src/react-server/useIntl.tsx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/next-intl/src/react-server/useIntl.tsx b/packages/next-intl/src/react-server/useIntl.tsx index e4859384c..65c4d083a 100644 --- a/packages/next-intl/src/react-server/useIntl.tsx +++ b/packages/next-intl/src/react-server/useIntl.tsx @@ -1,6 +1,15 @@ import getIntl from '../server/getIntl'; import useHook from './useHook'; +let hasWarned = false; + export default function useIntl() { + if (!hasWarned) { + hasWarned = true; + console.warn( + '`useIntl()` is deprecated and will be removed in the next major version. Please switch to `useFormatter()`.' + ); + } + return useHook('useIntl', getIntl()); } From c8b61b54485d529be8a87f7f930c113523d32715 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 6 Mar 2023 12:23:45 +0100 Subject: [PATCH 172/312] Simplify code snippet and get rid of tailwind warning --- packages/website/components/CodeSnippets.js | 2 +- packages/website/tailwind.config.js | 27 ++++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/packages/website/components/CodeSnippets.js b/packages/website/components/CodeSnippets.js index bebe2b016..6b83bbd9b 100644 --- a/packages/website/components/CodeSnippets.js +++ b/packages/website/components/CodeSnippets.js @@ -292,7 +292,7 @@ CodeSnippets.buildOutput = () => ( - Route (pages){' '}Size{' '}First Load JS + Route{' '}Size{' '}First Load JS diff --git a/packages/website/tailwind.config.js b/packages/website/tailwind.config.js index c3bed5f7d..98aac5e00 100644 --- a/packages/website/tailwind.config.js +++ b/packages/website/tailwind.config.js @@ -28,7 +28,32 @@ module.exports = { '5xl': ['3rem', {lineHeight: '1.2'}] }, colors: { - ...colors, + inherit: colors.inherit, + current: colors.current, + transparent: colors.transparent, + black: colors.black, + white: colors.white, + gray: colors.gray, + zinc: colors.zinc, + neutral: colors.neutral, + stone: colors.stone, + red: colors.red, + orange: colors.orange, + amber: colors.amber, + yellow: colors.yellow, + lime: colors.lime, + green: colors.green, + emerald: colors.emerald, + teal: colors.teal, + cyan: colors.cyan, + sky: colors.sky, + blue: colors.blue, + indigo: colors.indigo, + violet: colors.violet, + purple: colors.purple, + fuchsia: colors.fuchsia, + pink: colors.pink, + rose: colors.rose, slate: { ...colors.slate, 850: 'hsl(222deg 47% 16%)' From 9d2e0251267a69303eee2d0f0e97f776b4ad545c Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 10 Mar 2023 11:56:28 +0100 Subject: [PATCH 173/312] Compile to ES2019 --- packages/next-intl/tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/next-intl/tsconfig.json b/packages/next-intl/tsconfig.json index 38e5dd371..3e96fb7bf 100644 --- a/packages/next-intl/tsconfig.json +++ b/packages/next-intl/tsconfig.json @@ -3,7 +3,7 @@ "compilerOptions": { "module": "esnext", "lib": ["dom", "esnext"], - "target": "ES2020", + "target": "ES2019", "importHelpers": false, "declaration": true, "sourceMap": true, From 2e9288eef550b9eee15e04a227f628d2bbe06c5a Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 10 Mar 2023 14:21:59 +0100 Subject: [PATCH 174/312] 2.12.0-beta.2 --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 99dd96896..8abafcda9 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -13,7 +13,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current beta version ``` -npm install next-intl@2.12.0-beta.1 +npm install next-intl@2.12.0-beta.2 ``` This beta version was tested with `next@13.2.0`. From cc6c9b844b0058b66b821f1aee5187276b2c0d69 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 13 Mar 2023 13:36:43 +0100 Subject: [PATCH 175/312] feat: Next.js 13 RSC middleware improvements (#212) Improvements: - Switch to a new API in the middleware to configure advanced routing patterns (please see [the updated docs](https://next-intl-git-feat-next-13-rsc-middleware-improvements-amann.vercel.app/docs/next-13/server-components#middleware-configuration)) - Support mode to always prefix the current route with the locale - Improve domain-based routing to allow redirects from one domain to another and better integrate with alternate links (only show domain-alternatives) --- .../example-next-13-advanced/package.json | 2 + .../src/middleware.ts | 12 +- .../tests/main.spec.ts | 116 +++---- packages/example-next-13/next-env.d.ts | 1 + packages/next-intl/plugin.js | 6 + packages/next-intl/src/client/usePathname.tsx | 10 +- .../middleware/NextIntlMiddlewareConfig.tsx | 37 ++- ...r.tsx => getAlternateLinksHeaderValue.tsx} | 47 +-- .../next-intl/src/middleware/middleware.tsx | 135 +++++++- .../src/middleware/resolveLocale.tsx | 96 ++++-- .../getAlternateLinksHeaderValue.test.tsx | 117 +++++++ .../test/middleware/middleware.test.tsx | 293 ++++++++++++++++++ .../pages/docs/next-13/server-components.mdx | 126 ++++++-- yarn.lock | 134 +++++++- 14 files changed, 950 insertions(+), 182 deletions(-) rename packages/next-intl/src/middleware/{setAlternateLinksHeader.tsx => getAlternateLinksHeaderValue.tsx} (52%) create mode 100644 packages/next-intl/test/middleware/getAlternateLinksHeaderValue.test.tsx create mode 100644 packages/next-intl/test/middleware/middleware.test.tsx diff --git a/packages/example-next-13-advanced/package.json b/packages/example-next-13-advanced/package.json index 5365d8608..ee1606d16 100644 --- a/packages/example-next-13-advanced/package.json +++ b/packages/example-next-13-advanced/package.json @@ -6,6 +6,7 @@ "dev": "next dev", "lint": "eslint src && tsc", "test": "playwright test", + "test:watch": "chokidar 'tests/main.spec.ts' -c 'npm run test'", "build": "next build", "start": "next start" }, @@ -24,6 +25,7 @@ "@types/lodash": "^4.14.176", "@types/node": "^17.0.23", "@types/react": "^18.0.23", + "chokidar-cli": "3.0.0", "eslint": "^8.12.0", "eslint-config-molindo": "^6.0.0", "eslint-config-next": "^13.0.0" diff --git a/packages/example-next-13-advanced/src/middleware.ts b/packages/example-next-13-advanced/src/middleware.ts index 845ecc5d0..0c5f4a079 100644 --- a/packages/example-next-13-advanced/src/middleware.ts +++ b/packages/example-next-13-advanced/src/middleware.ts @@ -2,17 +2,7 @@ import createIntlMiddleware from 'next-intl/middleware'; export default createIntlMiddleware({ locales: ['en', 'de', 'es'], - defaultLocale: 'en', - domains: [ - { - domain: 'example.de', - defaultLocale: 'de' - }, - { - domain: 'de.example.com', - defaultLocale: 'de' - } - ] + defaultLocale: 'en' }); export const config = { diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index 38a6d3d32..eae8be298 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -20,7 +20,17 @@ it('redirects to a matched locale at the root for non-default locales', async ({ page.getByRole('heading', {name: 'Start'}); }); -it('can redirect a more specific locale to a more generic one', async ({ +it('redirects a prefixed pathname for the default locale to the unprefixed version', async ({ + request +}) => { + const response = await request.get('/en', { + maxRedirects: 0 + }); + expect(response.status()).toBe(307); + expect(response.headers().location).toEqual('/'); +}); + +it('redirects a more specific locale to a more generic one', async ({ browser }) => { const context = await browser.newContext({locale: 'de-DE'}); @@ -40,6 +50,12 @@ it('does not redirect on the root if the default locale is matched', async ({ }); it('supports unprefixed routing for the default locale', async ({page}) => { + await page.goto('/de/verschachtelt'); + await expect(page).toHaveURL('/de/verschachtelt'); + page.getByRole('heading', {name: 'Verschachtelt'}); +}); + +it('supports prefixed routing for non-default locales', async ({page}) => { await page.goto('/nested'); await expect(page).toHaveURL('/nested'); page.getByRole('heading', {name: 'Nested'}); @@ -54,25 +70,6 @@ it('redirects unprefixed paths for non-default locales', async ({browser}) => { page.getByRole('heading', {name: 'Verschachtelt'}); }); -it('supports domain-based locale detection', async ({page}) => { - page.setExtraHTTPHeaders({ - 'x-forwarded-host': 'example.de' - }); - await page.goto('/nested'); - page.getByRole('heading', {name: 'Verschachtelt'}); - - page.setExtraHTTPHeaders({ - 'x-forwarded-host': 'de.example.com' - }); - await page.goto('/nested'); - page.getByRole('heading', {name: 'Verschachtelt'}); - - await expect(page.getByRole('link', {name: 'Client-Seite'})).toHaveAttribute( - 'href', - '/client' - ); -}); - it('remembers the last locale', async ({page}) => { await page.goto('/de'); @@ -165,27 +162,27 @@ it('can use the core library', async ({page}) => { }); it('can use `Link` on the server', async ({page}) => { - await page.goto('/en'); + await page.goto('/'); await expect(page.getByRole('link', {name: /^Home$/})).toHaveAttribute( 'href', - '/en' + '/' ); await expect(page.getByRole('link', {name: 'Nested page'})).toHaveAttribute( 'href', - '/en/nested' + '/nested' ); }); it('can use `Link` with an object as `href`', async ({page}) => { - await page.goto('/en'); + await page.goto('/'); const link = page.getByRole('link', {name: 'Go to home with query param'}); - await expect(link).toHaveAttribute('href', '/en?test=true'); + await expect(link).toHaveAttribute('href', '/?test=true'); await link.click(); - await expect(page).toHaveURL('/en?test=true'); + await expect(page).toHaveURL('/?test=true'); }); it('can use `Link` to link to the root of another language', async ({page}) => { - await page.goto('/en'); + await page.goto('/'); const link = page.getByRole('link', {name: 'Switch to German'}); await expect(link).toHaveAttribute('href', '/de'); await link.click(); @@ -193,10 +190,10 @@ it('can use `Link` to link to the root of another language', async ({page}) => { }); it('can use `Link` on the client', async ({page}) => { - await page.goto('/en/client'); + await page.goto('/client'); await expect(page.getByRole('link', {name: 'Go to home'})).toHaveAttribute( 'href', - '/en' + '/' ); }); @@ -217,11 +214,11 @@ it('prefixes as necessary with `Link`', async ({page}) => { await page.goto('/en'); await expect(page.getByRole('link', {name: /^Home$/})).toHaveAttribute( 'href', - '/en' + '/' ); await expect(page.getByRole('link', {name: 'Client page'})).toHaveAttribute( 'href', - '/en/client' + '/client' ); await expect( page.getByRole('link', {name: 'Switch to German'}) @@ -268,12 +265,11 @@ it('can use `usePathname`', async ({page}) => { }); it('can use `redirect`', async ({page}) => { - await page.goto('/en/redirect'); - await expect(page).toHaveURL('/en/client'); + await page.goto('/redirect'); + await expect(page).toHaveURL('/client'); await page.goto('/redirect'); - // Currently we can't detect unprefixed routing in the `redirect` function - await expect(page).toHaveURL('/en/client'); + await expect(page).toHaveURL('/client'); await page.goto('/de/redirect'); await expect(page).toHaveURL('/de/client'); @@ -282,11 +278,11 @@ it('can use `redirect`', async ({page}) => { it('can navigate between sibling pages that share a parent layout', async ({ page }) => { - await page.goto('/en/nested'); + await page.goto('/nested'); await page.getByRole('link', {name: 'Client page'}).click(); - await expect(page).toHaveURL('/en/client'); + await expect(page).toHaveURL('/client'); await page.getByRole('link', {name: 'Nested page'}).click(); - await expect(page).toHaveURL('/en/nested'); + await expect(page).toHaveURL('/nested'); }); it('prefixes routes as necessary with the router', async ({page}) => { @@ -296,7 +292,7 @@ it('prefixes routes as necessary with the router', async ({page}) => { await page.goto('/en'); page.getByTestId('ClientRouterWithoutProvider-link').click(); - await expect(page).toHaveURL('/en/nested'); + await expect(page).toHaveURL('/nested'); await page.goto('/de'); page.getByTestId('ClientRouterWithoutProvider-link').click(); @@ -343,27 +339,21 @@ it('keeps search params for redirects', async ({browser}) => { it('sets alternate links', async ({request}) => { for (const pathname of ['/', '/en', '/de']) { - expect((await request.get(pathname)).headers().link).toBe( - [ - '; rel="alternate"; hreflang="en"', - '; rel="alternate"; hreflang="de"', - '; rel="alternate"; hreflang="de"', - '; rel="alternate"; hreflang="es"', - '; rel="alternate"; hreflang="x-default"' - ].join(', ') - ); + expect((await request.get(pathname)).headers().link.split(', ')).toEqual([ + '; rel="alternate"; hreflang="en"', + '; rel="alternate"; hreflang="de"', + '; rel="alternate"; hreflang="es"', + '; rel="alternate"; hreflang="x-default"' + ]); } for (const pathname of ['/nested', '/en/nested', '/de/nested']) { - expect((await request.get(pathname)).headers().link).toBe( - [ - '; rel="alternate"; hreflang="en"', - '; rel="alternate"; hreflang="de"', - '; rel="alternate"; hreflang="de"', - '; rel="alternate"; hreflang="es"', - '; rel="alternate"; hreflang="x-default"' - ].join(', ') - ); + expect((await request.get(pathname)).headers().link.split(', ')).toEqual([ + '; rel="alternate"; hreflang="en"', + '; rel="alternate"; hreflang="de"', + '; rel="alternate"; hreflang="es"', + '; rel="alternate"; hreflang="x-default"' + ]); } }); @@ -380,10 +370,10 @@ it('can use rewrites to localize pathnames', async ({page, request}) => { }); it('can use named routes to localize pathnames', async ({page}) => { - await page.goto('/en'); + await page.goto('/'); await expect(page.getByRole('link', {name: 'Nested page'})).toHaveAttribute( 'href', - '/en/nested' + '/nested' ); await page.goto('/de'); @@ -423,13 +413,7 @@ it('can localize route handlers', async ({request}) => { }); it('can use caching headers', async ({request}) => { - for (const pathname of [ - '/', - '/en', - '/en/nested', - '/de', - '/de/verschachtelt' - ]) { + for (const pathname of ['/', '/nested', '/de', '/de/verschachtelt']) { expect((await request.get(pathname)).headers()['cache-control']).toBe( 's-maxage=86400, stale-while-revalidate=31557600' ); diff --git a/packages/example-next-13/next-env.d.ts b/packages/example-next-13/next-env.d.ts index 4f11a03dc..7aa8e8ef7 100644 --- a/packages/example-next-13/next-env.d.ts +++ b/packages/example-next-13/next-env.d.ts @@ -1,5 +1,6 @@ /// /// +/// // NOTE: This file should not be edited // see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/packages/next-intl/plugin.js b/packages/next-intl/plugin.js index 230a0d496..82b5dd5c6 100644 --- a/packages/next-intl/plugin.js +++ b/packages/next-intl/plugin.js @@ -39,6 +39,12 @@ module.exports = withNextIntl({ } } + if ('i18n' in nextConfig) { + console.warn( + "\nnext-intl has found an `i18n` config in your next.config.js. This likely causes conflicts and should therefore be removed if you use the React Server Components integration.\n\nIf you're in progress of migrating from the `pages` folder, you can refer to this example: https://github.com/amannn/next-intl/tree/feat/next-13-rsc/packages/example-next-13-with-pages\n" + ); + } + return Object.assign({}, nextConfig, { webpack(config, options) { config.resolve.alias['next-intl/config'] = require.resolve(i18nPath); diff --git a/packages/next-intl/src/client/usePathname.tsx b/packages/next-intl/src/client/usePathname.tsx index 22b9f7250..98a96265f 100644 --- a/packages/next-intl/src/client/usePathname.tsx +++ b/packages/next-intl/src/client/usePathname.tsx @@ -12,14 +12,18 @@ export function unlocalizePathname(pathname: string) { /** * Returns the pathname without a potential locale prefix. * - * Note that on the server side `null` is returned, only on - * the client side the correct pathname will be returned. - * * This can be helpful e.g. to implement navigation links, * where the active link is highlighted. + * + * Note that on the server side `null` is returned, only on + * the client side the correct pathname will be returned. */ export default function usePathname() { const pathname = useNextPathname(); + + // TODO: Once `useParams` is a thing, we can set this on the initial render. + // The `pathname` can either be prefixed with a locale or not, since we don't + // know the matched locale during SSR, we can't safely remove the prefix. const [unlocalizedPathname, setUnlocalizedPathname] = useState( null ); diff --git a/packages/next-intl/src/middleware/NextIntlMiddlewareConfig.tsx b/packages/next-intl/src/middleware/NextIntlMiddlewareConfig.tsx index 2408ba4ce..acf1bc327 100644 --- a/packages/next-intl/src/middleware/NextIntlMiddlewareConfig.tsx +++ b/packages/next-intl/src/middleware/NextIntlMiddlewareConfig.tsx @@ -1,15 +1,44 @@ +export type RoutingConfigPrefix = { + type: 'prefix'; + + /** The default locale can be used without a prefix (e.g. `/about`). If you prefer to have a prefix for the default locale as well (e.g. `/en/about`), you can switch this option to `always`. + */ + prefix?: 'as-needed' | 'always'; +}; + +export type DomainConfig = { + /** The domain name (e.g. "example.de" or "de.example.com"). */ + domain: string; + + locale: string; +}; + +export type RoutingConfigDomain = { + type: 'domain'; + + /** Provide a list of mappings between domains and locales. Note that the `x-forwarded-host` or alternatively the `host` header will be used to determine the requested domain. */ + domains: Array<{domain: string; locale: string}>; +}; + type NextIntlMiddlewareConfig = { /** A list of all locales that are supported. */ locales: Array; - /* If this locale is matched, pathnames work without a prefix (e.g. `/about`) */ + /* Used by default if none of the defined locales match. */ defaultLocale: string; - /** Configure a list of domains where the `defaultLocale` is changed (e.g. `es.example.com/about`, `example.fr/about`). Note that the `x-forwarded-host` or alternatively the `host` header will be used to determine the requested domain. */ - domains?: Array<{domain: string; defaultLocale: string}>; - /** Sets the `Link` response header to notify search engines about content in other languages (defaults to `true`). See https://developers.google.com/search/docs/specialty/international/localized-versions#http */ alternateLinks?: boolean; + + /** @deprecated Deprecated in favour of `routing`. */ + domains?: Array<{domain: string; defaultLocale: string}>; + + routing?: RoutingConfigPrefix | RoutingConfigDomain; +}; + +export type NextIntlMiddlewareConfigWithDefaults = NextIntlMiddlewareConfig & { + alternateLinks: boolean; + routing: RoutingConfigPrefix | RoutingConfigDomain; }; export default NextIntlMiddlewareConfig; diff --git a/packages/next-intl/src/middleware/setAlternateLinksHeader.tsx b/packages/next-intl/src/middleware/getAlternateLinksHeaderValue.tsx similarity index 52% rename from packages/next-intl/src/middleware/setAlternateLinksHeader.tsx rename to packages/next-intl/src/middleware/getAlternateLinksHeaderValue.tsx index 10e1252ca..ac174c426 100644 --- a/packages/next-intl/src/middleware/setAlternateLinksHeader.tsx +++ b/packages/next-intl/src/middleware/getAlternateLinksHeaderValue.tsx @@ -1,7 +1,9 @@ -import {NextRequest, NextResponse} from 'next/server'; -import NextIntlMiddlewareConfig from './NextIntlMiddlewareConfig'; +import {NextRequest} from 'next/server'; +import NextIntlMiddlewareConfig, { + NextIntlMiddlewareConfigWithDefaults +} from './NextIntlMiddlewareConfig'; -function getUnprefixedPathname( +function getUnprefixedUrl( config: NextIntlMiddlewareConfig, request: NextRequest ) { @@ -30,12 +32,11 @@ function getAlternateEntry(url: string, locale: string) { /** * See https://developers.google.com/search/docs/specialty/international/localized-versions */ -export default function setAlternateLinksHeader( - config: NextIntlMiddlewareConfig, - request: NextRequest, - response: NextResponse +export default function getAlternateLinksHeaderValue( + config: NextIntlMiddlewareConfigWithDefaults, + request: NextRequest ) { - const unprefixedPathname = getUnprefixedPathname(config, request); + const unprefixedUrl = getUnprefixedUrl(config, request); const links = config.locales.flatMap((locale) => { function localizePathname(url: URL) { @@ -49,26 +50,36 @@ export default function setAlternateLinksHeader( let url; - const domainConfigs = - config.domains?.filter((cur) => cur.defaultLocale === locale) || []; + if (config.routing.type === 'domain') { + const domainConfigs = + config.routing.domains.filter((cur) => cur.locale === locale) || []; - if (domainConfigs.length > 1) { - // Prio 1: Configured domain(s) return domainConfigs.map((domainConfig) => { - url = new URL(unprefixedPathname); + url = new URL(unprefixedUrl); + url.port = ''; url.host = domainConfig.domain; return getAlternateEntry(url.toString(), locale); }); } else { - // Prio 2: Prefixed route - url = new URL(unprefixedPathname); - localizePathname(url); + url = new URL(unprefixedUrl); + if ( + locale !== config.defaultLocale || + config.routing.prefix === 'always' + ) { + localizePathname(url); + } } return getAlternateEntry(url.toString(), locale); }); - links.push(getAlternateEntry(unprefixedPathname, 'x-default')); + // Add x-default entry + if (config.routing.type === 'prefix') { + const url = new URL(unprefixedUrl); + links.push(getAlternateEntry(url.toString(), 'x-default')); + } else { + // For `type: domain` there is no reasonable x-default + } - response.headers.set('Link', links.join(', ')); + return links.join(', '); } diff --git a/packages/next-intl/src/middleware/middleware.tsx b/packages/next-intl/src/middleware/middleware.tsx index eb37163aa..77bfb7257 100644 --- a/packages/next-intl/src/middleware/middleware.tsx +++ b/packages/next-intl/src/middleware/middleware.tsx @@ -1,15 +1,68 @@ import {NextRequest, NextResponse} from 'next/server'; import {COOKIE_LOCALE_NAME, HEADER_LOCALE_NAME} from '../shared/constants'; -import NextIntlMiddlewareConfig from './NextIntlMiddlewareConfig'; +import NextIntlMiddlewareConfig, { + NextIntlMiddlewareConfigWithDefaults +} from './NextIntlMiddlewareConfig'; +import getAlternateLinksHeaderValue from './getAlternateLinksHeaderValue'; import resolveLocale from './resolveLocale'; -import setAlternateLinksHeader from './setAlternateLinksHeader'; const ROOT_URL = '/'; +function receiveConfig( + config: NextIntlMiddlewareConfig +): NextIntlMiddlewareConfigWithDefaults { + const result = { + ...config, + alternateLinks: config.alternateLinks ?? true + }; + + if (!result.routing) { + result.routing = { + type: 'prefix' + }; + } + + if (result.routing.type === 'prefix') { + result.routing.prefix = result.routing.prefix ?? 'as-needed'; + } + + return result as NextIntlMiddlewareConfigWithDefaults; +} + export default function createIntlMiddleware(config: NextIntlMiddlewareConfig) { + // TODO: Remove before stable release + if (config.domains != null) { + console.error( + 'The `domains` option is deprecated. Please use `routing` instead.' + ); + config = { + ...config, + routing: { + type: 'domain', + domains: config.domains.map((cur) => ({ + domain: cur.domain, + locale: cur.defaultLocale + })) + } + }; + delete config.domains; + } + + const configWithDefaults = receiveConfig(config); + + if (configWithDefaults.routing.type === 'domain') { + const {domains} = configWithDefaults.routing; + const hasMatchingDomainForEveryLocale = configWithDefaults.locales.every( + (locale) => domains.find((cur) => cur.locale === locale) != null + ); + if (!hasMatchingDomainForEveryLocale) { + throw new Error('Every locale must have a matching domain'); + } + } + return function middleware(request: NextRequest) { const {domain, locale} = resolveLocale( - config, + configWithDefaults, request.headers, request.cookies, request.nextUrl.pathname @@ -19,8 +72,14 @@ export default function createIntlMiddleware(config: NextIntlMiddlewareConfig) { const hasOutdatedCookie = request.cookies.get(COOKIE_LOCALE_NAME)?.value !== locale; const hasMatchedDefaultLocale = domain - ? domain.defaultLocale === locale - : locale === config.defaultLocale; + ? domain.locale === locale + : locale === configWithDefaults.defaultLocale; + const domainConfigs = + configWithDefaults.routing.type === 'domain' + ? configWithDefaults.routing.domains.filter( + (cur) => cur.locale === locale + ) ?? [] + : []; function getResponseInit() { let responseInit; @@ -47,8 +106,20 @@ export default function createIntlMiddleware(config: NextIntlMiddlewareConfig) { return NextResponse.next(getResponseInit()); } - function redirect(url: string) { - return NextResponse.redirect(new URL(url, request.url)); + function redirect(url: string, host?: string) { + const urlObj = new URL(url, request.url); + + if (domainConfigs.length > 0) { + urlObj.pathname = url.replace(`/${locale}`, ''); + if (domainConfigs[0].domain && !host) { + host = domainConfigs[0].domain; + } + } + if (host) { + urlObj.host = host; + } + + return NextResponse.redirect(urlObj.toString()); } let response; @@ -58,13 +129,18 @@ export default function createIntlMiddleware(config: NextIntlMiddlewareConfig) { pathWithSearch += request.nextUrl.search; } - if (hasMatchedDefaultLocale) { + if ( + hasMatchedDefaultLocale && + ((configWithDefaults.routing.type === 'prefix' && + configWithDefaults.routing.prefix === 'as-needed') || + configWithDefaults.routing.type === 'domain') + ) { response = rewrite(pathWithSearch); } else { response = redirect(pathWithSearch); } } else { - const pathLocale = config.locales.find((cur) => + const pathLocale = configWithDefaults.locales.find((cur) => request.nextUrl.pathname.startsWith(`/${cur}`) ); const hasLocalePrefix = pathLocale != null; @@ -75,14 +151,35 @@ export default function createIntlMiddleware(config: NextIntlMiddlewareConfig) { } if (hasLocalePrefix) { - if (pathLocale === locale) { - response = next(); + const basePath = pathWithSearch.replace(`/${pathLocale}`, '') || '/'; + + if (configWithDefaults.routing.type === 'domain') { + const pathDomain = configWithDefaults.routing.domains.find( + (cur) => pathLocale === cur.locale + ); + + response = redirect(basePath, pathDomain?.domain); } else { - const basePath = pathWithSearch.replace(`/${pathLocale}`, ''); - response = redirect(`/${locale}${basePath}`); + if (pathLocale === locale) { + if ( + hasMatchedDefaultLocale && + configWithDefaults.routing.prefix === 'as-needed' + ) { + response = redirect(basePath); + } else { + response = next(); + } + } else { + response = redirect(`/${locale}${basePath}`); + } } } else { - if (hasMatchedDefaultLocale) { + if ( + hasMatchedDefaultLocale && + ((configWithDefaults.routing.type === 'prefix' && + configWithDefaults.routing.prefix === 'as-needed') || + configWithDefaults.routing.type === 'domain') + ) { response = rewrite(`/${locale}${pathWithSearch}`); } else { response = redirect(`/${locale}${pathWithSearch}`); @@ -94,8 +191,14 @@ export default function createIntlMiddleware(config: NextIntlMiddlewareConfig) { response.cookies.set(COOKIE_LOCALE_NAME, locale); } - if ((config.alternateLinks ?? true) && config.locales.length > 1) { - setAlternateLinksHeader(config, request, response); + if ( + configWithDefaults.alternateLinks && + configWithDefaults.locales.length > 1 + ) { + response.headers.set( + 'Link', + getAlternateLinksHeaderValue(configWithDefaults, request) + ); } return response; diff --git a/packages/next-intl/src/middleware/resolveLocale.tsx b/packages/next-intl/src/middleware/resolveLocale.tsx index ef96ec05d..f2b47dee5 100644 --- a/packages/next-intl/src/middleware/resolveLocale.tsx +++ b/packages/next-intl/src/middleware/resolveLocale.tsx @@ -2,19 +2,23 @@ import {match} from '@formatjs/intl-localematcher'; import Negotiator from 'negotiator'; import {RequestCookies} from 'next/dist/server/web/spec-extension/cookies'; import {COOKIE_LOCALE_NAME} from '../shared/constants'; -import NextIntlMiddlewareConfig from './NextIntlMiddlewareConfig'; +import { + DomainConfig, + NextIntlMiddlewareConfigWithDefaults, + RoutingConfigDomain +} from './NextIntlMiddlewareConfig'; import getHost from './getHost'; function findLocaleDomain( requestHeaders: Headers, - i18n: NextIntlMiddlewareConfig + routingConfig: RoutingConfigDomain ) { let host = getHost(requestHeaders); - // Remove port + // Remove port (easier for local development) host = host?.replace(/:\d+$/, ''); // Consider optional www subdomain - const domains = i18n.domains?.flatMap((cur) => { + const domains = routingConfig.domains.flatMap((cur) => { if (cur.domain.startsWith('www.')) { return cur; } @@ -22,52 +26,43 @@ function findLocaleDomain( }); if (host && domains) { - const domain = domains.find((cur) => cur.domain === host); - return domain; + return domains.find((cur) => cur.domain === host); } return undefined; } -export default function resolveLocale( - i18n: NextIntlMiddlewareConfig, +function resolveLocaleFromPrefix( + locales: Array, + defaultLocale: string, requestHeaders: Headers, requestCookies: RequestCookies, pathname: string ) { - let locale, domain; + let locale; // Prio 1: Use route prefix if (pathname) { const segments = pathname.split('/'); if (segments.length > 1) { const segment = segments[1]; - if (i18n.locales.includes(segment)) { + if (locales.includes(segment)) { locale = segment; } } } - // Prio 2: Use a domain - if (!locale && i18n.domains) { - domain = findLocaleDomain(requestHeaders, i18n); - - if (domain) { - locale = domain.defaultLocale; - } - } - - // Prio 3: Use existing cookie + // Prio 2: Use existing cookie if (!locale && requestCookies) { if (requestCookies.has(COOKIE_LOCALE_NAME)) { const value = requestCookies.get(COOKIE_LOCALE_NAME)?.value; - if (value && i18n.locales.includes(value)) { + if (value && locales.includes(value)) { locale = value; } } } - // Prio 4: Use the `accept-language` header + // Prio 3: Use the `accept-language` header if (!locale && requestHeaders) { const languages = new Negotiator({ headers: { @@ -75,16 +70,67 @@ export default function resolveLocale( } }).languages(); try { - locale = match(languages, i18n.locales, i18n.defaultLocale); + locale = match(languages, locales, defaultLocale); } catch (e) { // Invalid language } } - // Prio 5: Use default locale + // Prio 4: Use default locale + if (!locale) { + locale = defaultLocale; + } + + return locale; +} + +function resolveLocaleFromDomain( + routingConfig: RoutingConfigDomain, + requestHeaders: Headers, + defaultLocale: string +) { + let locale, domain; + + // Prio 1: Use a domain + if (routingConfig.domains) { + domain = findLocaleDomain(requestHeaders, routingConfig); + + if (domain) { + locale = domain.locale; + } else { + // Might be localhost + } + } + + // Prio 2: Use default locale if (!locale) { - locale = i18n.defaultLocale; + locale = defaultLocale; } return {locale, domain}; } + +export default function resolveLocale( + config: NextIntlMiddlewareConfigWithDefaults, + requestHeaders: Headers, + requestCookies: RequestCookies, + pathname: string +): {locale: string; domain?: DomainConfig} { + if (config.routing.type === 'domain') { + return resolveLocaleFromDomain( + config.routing, + requestHeaders, + config.defaultLocale + ); + } else { + return { + locale: resolveLocaleFromPrefix( + config.locales, + config.defaultLocale, + requestHeaders, + requestCookies, + pathname + ) + }; + } +} diff --git a/packages/next-intl/test/middleware/getAlternateLinksHeaderValue.test.tsx b/packages/next-intl/test/middleware/getAlternateLinksHeaderValue.test.tsx new file mode 100644 index 000000000..b275d5342 --- /dev/null +++ b/packages/next-intl/test/middleware/getAlternateLinksHeaderValue.test.tsx @@ -0,0 +1,117 @@ +import {NextRequest} from 'next/server'; +import {NextIntlMiddlewareConfigWithDefaults} from '../../src/middleware/NextIntlMiddlewareConfig'; +import getAlternateLinksHeaderValue from '../../src/middleware/getAlternateLinksHeaderValue'; + +function getRequest(url = 'https://example.com/') { + return {url} as NextRequest; +} + +it('works for type prefix (as-needed)', () => { + const config: NextIntlMiddlewareConfigWithDefaults = { + defaultLocale: 'en', + locales: ['en', 'es'], + alternateLinks: true, + routing: { + type: 'prefix', + prefix: 'as-needed' + } + }; + + expect( + getAlternateLinksHeaderValue(config, getRequest()).split(', ') + ).toEqual([ + '; rel="alternate"; hreflang="en"', + '; rel="alternate"; hreflang="es"', + '; rel="alternate"; hreflang="x-default"' + ]); + + expect( + getAlternateLinksHeaderValue( + config, + getRequest('https://example.com/about') + ).split(', ') + ).toEqual([ + '; rel="alternate"; hreflang="en"', + '; rel="alternate"; hreflang="es"', + '; rel="alternate"; hreflang="x-default"' + ]); +}); + +it('works for type prefix (always)', () => { + const config: NextIntlMiddlewareConfigWithDefaults = { + defaultLocale: 'en', + locales: ['en', 'es'], + alternateLinks: true, + routing: { + type: 'prefix', + prefix: 'always' + } + }; + + expect( + getAlternateLinksHeaderValue(config, getRequest()).split(', ') + ).toEqual([ + '; rel="alternate"; hreflang="en"', + '; rel="alternate"; hreflang="es"', + '; rel="alternate"; hreflang="x-default"' + ]); + + expect( + getAlternateLinksHeaderValue( + config, + getRequest('https://example.com/about') + ).split(', ') + ).toEqual([ + '; rel="alternate"; hreflang="en"', + '; rel="alternate"; hreflang="es"', + '; rel="alternate"; hreflang="x-default"' + ]); +}); + +it('works for type domain', () => { + const config: NextIntlMiddlewareConfigWithDefaults = { + defaultLocale: 'en', + locales: ['en', 'es'], + alternateLinks: true, + routing: { + type: 'domain', + domains: [ + { + domain: 'example.com', + locale: 'en' + }, + { + domain: 'example.es', + locale: 'es' + } + ] + } + }; + + expect( + getAlternateLinksHeaderValue(config, getRequest()).split(', ') + ).toEqual([ + '; rel="alternate"; hreflang="en"', + '; rel="alternate"; hreflang="es"' + ]); + + expect( + getAlternateLinksHeaderValue( + config, + getRequest('https://example.es/') + ).split(', ') + ).toEqual([ + '; rel="alternate"; hreflang="en"', + '; rel="alternate"; hreflang="es"' + ]); + + expect( + getAlternateLinksHeaderValue( + config, + getRequest('https://example.com/about') + ).split(', ') + ).toEqual([ + '; rel="alternate"; hreflang="en"', + '; rel="alternate"; hreflang="es"' + ]); +}); diff --git a/packages/next-intl/test/middleware/middleware.test.tsx b/packages/next-intl/test/middleware/middleware.test.tsx new file mode 100644 index 000000000..3e0f8b9b7 --- /dev/null +++ b/packages/next-intl/test/middleware/middleware.test.tsx @@ -0,0 +1,293 @@ +import {RequestCookies} from 'next/dist/compiled/@edge-runtime/cookies'; +import {NextRequest, NextResponse} from 'next/server'; +import createIntlMiddleware from '../../src/middleware'; + +(global as any).Request = class Request {}; + +type MockResponse = NextResponse & { + args: Array; +}; + +jest.mock('next/server', () => { + const response = { + headers: new Headers(), + cookies: new RequestCookies(new Headers()) + }; + return { + NextResponse: { + next: jest.fn((...args) => ({...response, args})), + rewrite: jest.fn((...args) => ({...response, args})), + redirect: jest.fn((...args) => ({...response, args})) + } + }; +}); + +function createMockRequest( + pathname = '/', + locale: 'en' | 'de' = 'en', + host = 'http://localhost:3000' +) { + const headers = new Headers({ + 'accept-language': + locale === 'en' ? 'en-US,en;q=0.9,de;q=0.8' : 'de-DE,de;q=0.9,en;q=0.8', + host: new URL(host).host + }); + + return { + headers, + cookies: new RequestCookies(headers), + url: host + pathname, + nextUrl: { + pathname, + search: '' + } + } as NextRequest; +} + +const MockedNextResponse = NextResponse as unknown as { + next: jest.Mock; + rewrite: jest.Mock; + redirect: jest.Mock; +}; + +beforeEach(() => { + MockedNextResponse.next.mockClear(); + MockedNextResponse.rewrite.mockClear(); + MockedNextResponse.redirect.mockClear(); +}); + +describe('type: prefix', () => { + describe('prefix: as-needed', () => { + const middleware = createIntlMiddleware({ + defaultLocale: 'en', + locales: ['en', 'de'] + }) as (request: NextRequest) => MockResponse; + + it('rewrites requests for the default locale', () => { + middleware(createMockRequest('/')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://localhost:3000/en' + ); + }); + + it('redirects requests for the default locale when prefixed at the root', () => { + middleware(createMockRequest('/en')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( + 'http://localhost:3000/' + ); + }); + + it('redirects requests for the default locale when prefixed at sub paths', () => { + middleware(createMockRequest('/en/about')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( + 'http://localhost:3000/about' + ); + }); + + it('redirects requests for other locales', () => { + middleware(createMockRequest('/', 'de')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( + 'http://localhost:3000/de' + ); + }); + + it('sets a cookie', () => { + const response = middleware(createMockRequest('/')); + expect(response.cookies.get('NEXT_LOCALE')).toEqual({ + name: 'NEXT_LOCALE', + value: 'en' + }); + }); + }); + + describe('prefix: always', () => { + const middleware = createIntlMiddleware({ + defaultLocale: 'en', + locales: ['en', 'de'], + routing: { + type: 'prefix', + prefix: 'always' + } + }) as (request: NextRequest) => MockResponse; + + it('redirects non-prefixed requests for the default locale', () => { + middleware(createMockRequest('/')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( + 'http://localhost:3000/en' + ); + }); + + it('redirects requests for other locales', () => { + middleware(createMockRequest('/', 'de')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( + 'http://localhost:3000/de' + ); + }); + + it('serves requests for the default locale', () => { + middleware(createMockRequest('/en')); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.next).toHaveBeenCalled(); + }); + + it('serves requests for non-default locales', () => { + middleware(createMockRequest('/de')); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.next).toHaveBeenCalled(); + }); + }); +}); + +describe('type: domain', () => { + const middleware = createIntlMiddleware({ + defaultLocale: 'en', + locales: ['en', 'de'], + routing: { + type: 'domain', + domains: [ + {locale: 'en', domain: 'en.example.com'}, + {locale: 'de', domain: 'de.example.com'} + ] + } + }) as (request: NextRequest) => MockResponse; + + it('serves requests for matching locales at the root', () => { + middleware(createMockRequest('/', 'en', 'http://en.example.com')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://en.example.com/en' + ); + }); + + it('serves requests for matching locales at nested paths', () => { + middleware(createMockRequest('/about', 'en', 'http://en.example.com')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://en.example.com/en/about' + ); + }); + + it('serves requests for not matching locales at the root', () => { + middleware(createMockRequest('/', 'de', 'http://en.example.com')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://en.example.com/en' + ); + }); + + it('serves requests for not matching locales at nested paths', () => { + middleware(createMockRequest('/about', 'de', 'http://en.example.com')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://en.example.com/en/about' + ); + }); + + it('serves requests for matching locales at unknown hosts', () => { + middleware(createMockRequest('/', 'en', 'http://localhost:3000')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://localhost:3000/en' + ); + }); + + describe('redirects for locale prefixes', () => { + it('redirects for the locale root when the locale matches', () => { + middleware(createMockRequest('/en/about', 'en', 'http://en.example.com')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( + 'http://en.example.com/about' + ); + }); + + it('redirects for sub paths when the locale matches', () => { + middleware(createMockRequest('/en/about', 'en', 'http://en.example.com')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( + 'http://en.example.com/about' + ); + }); + + it("redirects for the locale root when the locale doesn't match", () => { + middleware(createMockRequest('/de/about', 'de', 'http://en.example.com')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( + 'http://de.example.com/about' + ); + }); + + it("redirects for sub paths when the locale doesn't match", () => { + middleware(createMockRequest('/de/about', 'de', 'http://en.example.com')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( + 'http://de.example.com/about' + ); + }); + }); +}); + +describe('deprecated domain config', () => { + const middleware = createIntlMiddleware({ + defaultLocale: 'en', + locales: ['en', 'de'], + domains: [ + { + defaultLocale: 'en', + domain: 'en.example.com' + }, + { + defaultLocale: 'de', + domain: 'de.example.com' + } + ] + }) as (request: NextRequest) => MockResponse; + + it('accepts deprecated config', () => { + middleware(createMockRequest('/', 'en', 'http://en.example.com')); + middleware(createMockRequest('/about', 'en', 'http://en.example.com')); + + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://en.example.com/en' + ); + expect(MockedNextResponse.rewrite.mock.calls[1][0].toString()).toBe( + 'http://en.example.com/en/about' + ); + + middleware(createMockRequest('/en/about', 'en', 'http://en.example.com')); + expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( + 'http://en.example.com/about' + ); + + middleware(createMockRequest('/de/help', 'de', 'http://en.example.com')); + + expect(MockedNextResponse.redirect.mock.calls[1][0].toString()).toBe( + 'http://de.example.com/help' + ); + }); +}); diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 8abafcda9..606e035f9 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -52,7 +52,7 @@ If you haven't done so already, [create a Next.js 13 app that uses the `app` dir Messages can be provided locally or loaded from a remote data source (e.g. a translation management system). Use whatever suits your workflow best. -The simplest option is to create JSON files locally based on [locales](). +The simplest option is to create JSON files locally based on locales, e.g. `en.json`. ```json filename="messages/en.json" { @@ -276,48 +276,110 @@ export default getRequestConfig(async ({locale}) => ({ ## Middleware configuration -The middleware handles rewrites and redirects based on the detected user locale. +The middleware handles redirects and rewrites based on the detected user locale. -```tsx filename="middleware.ts" +### Routing with a locale prefix (default) + +By default, `next-intl` will map the incoming requests to your defined routes. To keep the URL short, requests for the default locale are rewritten internally to work without a locale prefix. + +**Examples for rewrites:** + +- `/` → `/en` +- `/about` → `/en/about` +- `/de/about` → `/de/about` + +When the user visits a route without an explicit locale, `next-intl` matches the [`accept-language` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language) of the request against the available locales and optionally redirects the user to a prefixed route. The matched locale is saved in a cookie. + +#### Changing locales + +To change the locale, the user can visit a prefixed route. This will always take precedence over a previously matched locale that is saved in a cookie or the `accept-language` header. + +**Example workflow:** + +1. The user requests `/` and based on the `accept-language` header, the `de` locale is matched. +2. The `de` locale is saved in a cookie and the user is redirected to `/de`. +3. In your app code, you render `Switch to English` to allow the user to change the locale to `en`. +4. When the user clicks on the link, a request to `/en` is initiated. +5. The middleware will update the cookie value to `en` and will redirect the user to `/`. + +#### Always use a locale prefix + +If you want to include a prefix for the default locale as well, you can configure the middleware accordingly. + +```tsx {7-10} import createIntlMiddleware from 'next-intl/middleware'; export default createIntlMiddleware({ - // A list of all locales that are supported locales: ['en', 'de'], - - // If this locale is matched, pathnames work without a prefix (e.g. `/about`) defaultLocale: 'en', - // Optionally configure a list of domains where the `defaultLocale` is changed - domains: [ - { - domain: 'example.de', - defaultLocale: 'de' - } - ], - - // Sets the `Link` response header to notify search engines about - // links to the content in other languages (defaults to `true`). - alternateLinks: true + routing: { + type: 'prefix', + prefix: 'always' // Defaults to 'as-needed' + } }); +``` -export const config = { - // Skip all paths that aren't pages that you'd like to internationalize. - // If you use the `public` folder, make sure your static assets are ignored - // (e.g. by moving them to a shared folder that is referenced here). - matcher: ['/((?!api|_next|favicon.ico|assets).*)'] -}; +In this case, requests without a prefix will be redirected accordingly (e.g. `/about` to `/en/about`). + +### Routing with domains + +If you want to serve your localized content based on separate domains, you can provide a list of mappings between domains and locales to the middleware. + +```tsx {7-19} +import createIntlMiddleware from 'next-intl/middleware'; + +export default createIntlMiddleware({ + locales: ['en', 'de'], + defaultLocale: 'en', + + routing: { + type: 'domain', + domains: [ + { + domain: 'en.example.com', + locale: 'en' + }, + { + domain: 'de.example.com', + locale: 'de' + } + ] + } +}); ``` -The locale is matched based on this priority order: +In this case, your content will be available without a locale prefix based on the domain since `next-intl` rewrites the request internally (e.g. `de.example.com/about` → `/de/about`). + +The domain that is needed to match the locale is read from the `x-forwarded-host` header, with a fallback to the `host` header. If no domain matches (e.g. on localhost), the `defaultLocale` is used. + +#### Changing locales -1. **Locale prefix**: The pathname is prefixed with a configured locale (e.g. `/en`). -2. **Domain**: The host of the requested URL matches against an item in the `domains` list. The host is read from the `x-forwarded-host` or alternatively the `host` header. -3. **Cookie**: There's an existing cookie that contains the locale that was matched from a previous request. -4. **`accept-language` header**: The available `locales` are matched against the [`accept-language` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language). -5. **Default fallback**: If nothing else matches, then the `defaultLocale` is used. +Since the middleware is aware of all your domains, `next-intl` will automatically switch the domain when the user requests to change the locale. -If the default locale matches, the request will be **rewritten** to the corresponding sub path (e.g. `/about` to `/en/about`). If a non-default locale is matched and the user requests the root pathname, then the user is **redirected** to to the respective sub path (e.g. `/` to `/de`). +**Example workflow:** + +1. The user is on `en.example.com`. +2. The app renders `Switch to German` to allow the user to change the locale to `de`. +3. When the link is clicked, a request to `en.example.com/de` is initiated. +4. The middleware recognizes that the user wants to switch to another domain and responds with a redirect to `de.example.com`. + +### Alternate links + +`next-intl` automatically sets [the `link` header](https://developers.google.com/search/docs/specialty/international/localized-versions#http) to inform search engines that your content is available in different languages. Note that this automatically integrates with your routing strategy and will generate the correct links based on your configuration (`prefix` or `domain`). + +If you prefer to include these links yourself, you can opt-out of this behaviour. + +```tsx filename="middleware.ts" +import createIntlMiddleware from 'next-intl/middleware'; + +export default createIntlMiddleware({ + // ... other config + + // Default: `true` + alternateLinks: false +}); +``` ## Localizing pathnames @@ -341,7 +403,7 @@ module.exports = withNextIntl({ Since `next-intl` isn't aware of the rewrites you've configured, you likely want to make some adjustments: -1. Turn off the `alternateLinks` option in [the middleware](#middleware-configuration) and provide [search engine hints about localized versions of your content](https://developers.google.com/search/docs/specialty/international/localized-versions) by yourself. +1. Turn off [the `alternateLinks` option](#alternate-links) in the middleware and provide [search engine hints about localized versions of your content](https://developers.google.com/search/docs/specialty/international/localized-versions) by yourself. 2. Translate the pathnames you're passing to the [routing APIs from `next-intl`](#routing) ([example](https://github.com/amannn/next-intl/blob/feat/next-13-rsc/packages/example-next-13-advanced/src/components/Navigation.tsx)). ## Using internationalization outside of components @@ -375,7 +437,7 @@ import { ## CDN caching -Since `next-intl` is currently SSR-only, it's a good idea to use [CDN caching](https://vercel.com/docs/concepts/edge-network/caching#stale-while-revalidate) via [`headers`](https://nextjs.org/docs/api-reference/next.config.js/headers) in `next.config.js` to get the same level of performance from SSR'd pages ([learn more](https://youtu.be/bfLFHp7Sbkg?t=490)). +Since `next-intl` is currently SSR-only, it's a good idea to use [CDN caching](https://vercel.com/docs/concepts/edge-network/caching#stale-while-revalidate) via [`headers`](https://nextjs.org/docs/api-reference/next.config.js/headers) in `next.config.js` to get the same level of performance from SSR'd pages as you'd get from SSG ([learn more](https://youtu.be/bfLFHp7Sbkg?t=490)). ```js filename="next.config.js" const ms = require('ms'); diff --git a/yarn.lock b/yarn.lock index a78ef98bf..9da2a4e4b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3698,6 +3698,11 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= +ansi-regex@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" @@ -3708,7 +3713,7 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.1.0, ansi-styles@^3.2.1: +ansi-styles@^3.1.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -4293,7 +4298,7 @@ camelcase@^2.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= -camelcase@^5.3.1: +camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -4384,7 +4389,17 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -chokidar@^3.5.3: +chokidar-cli@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chokidar-cli/-/chokidar-cli-3.0.0.tgz#29283666063b9e167559d30f247ff8fc48794eb7" + integrity sha512-xVW+Qeh7z15uZRxHOkP93Ux8A0xbPzwK4GaqD8dQOYc34TlkqUhVSS59fK36DOp5WdJlrRzlYSy02Ht99FjZqQ== + dependencies: + chokidar "^3.5.2" + lodash.debounce "^4.0.8" + lodash.throttle "^4.1.1" + yargs "^13.3.0" + +chokidar@^3.5.2, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -4478,6 +4493,15 @@ clipboardy@1.2.2: arch "^2.1.0" execa "^0.8.0" +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -4916,7 +4940,7 @@ decamelize-keys@^1.1.0: decamelize "^1.1.0" map-obj "^1.0.0" -decamelize@^1.1.0, decamelize@^1.1.2: +decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -5231,6 +5255,11 @@ emittery@^0.8.1: resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -6244,6 +6273,13 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -6403,7 +6439,7 @@ gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.5: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -8358,6 +8394,14 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -8427,6 +8471,11 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== + lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.2: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" @@ -10112,7 +10161,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.2.0: +p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -10133,6 +10182,13 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -11269,6 +11325,11 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -11558,7 +11619,7 @@ server-only@0.0.1: resolved "https://registry.yarnpkg.com/server-only/-/server-only-0.0.1.tgz#0f366bb6afb618c37c9255a314535dc412cd1c9e" integrity sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA== -set-blocking@~2.0.0: +set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -11918,6 +11979,15 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + string-width@^4.1.0, string-width@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" @@ -12009,6 +12079,13 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" @@ -13043,6 +13120,11 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== + which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -13082,6 +13164,15 @@ wrap-ansi@^3.0.1: string-width "^2.1.1" strip-ansi "^4.0.0" +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -13168,6 +13259,11 @@ xtend@^4.0.2, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" @@ -13203,6 +13299,30 @@ yargs-parser@20.x, yargs-parser@^20.2.2: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.0: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" From 1ae18c1c288b6b874c70e38f0ae266dedaa7c3ab Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 13 Mar 2023 13:42:18 +0100 Subject: [PATCH 176/312] next-intl@2.12.0-beta.3 --- .../example-next-13-advanced/package.json | 2 +- packages/example-next-13/package.json | 2 +- packages/next-intl/package.json | 2 +- .../pages/docs/next-13/server-components.mdx | 4 +- yarn.lock | 148 +++++++++--------- 5 files changed, 79 insertions(+), 79 deletions(-) diff --git a/packages/example-next-13-advanced/package.json b/packages/example-next-13-advanced/package.json index ee1606d16..09aa4c60e 100644 --- a/packages/example-next-13-advanced/package.json +++ b/packages/example-next-13-advanced/package.json @@ -13,7 +13,7 @@ "dependencies": { "lodash": "^4.17.21", "ms": "2.1.3", - "next": "13.2.0", + "next": "13.2.4", "next-intl": "*", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/example-next-13/package.json b/packages/example-next-13/package.json index f6c95e107..41e903984 100644 --- a/packages/example-next-13/package.json +++ b/packages/example-next-13/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "lodash": "^4.17.21", - "next": "13.2.0", + "next": "13.2.4", "next-intl": "^2.11.0", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index ade8a063d..0ded47b23 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -79,7 +79,7 @@ "dts-cli": "1.4.0", "eslint": "8.12.0", "eslint-config-molindo": "6.0.0", - "next": "13.2.0", + "next": "13.2.4", "react": "^18.2.0", "react-dom": "^18.2.0", "typescript": "^4.4.4" diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 606e035f9..ed4c73512 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -13,10 +13,10 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current beta version ``` -npm install next-intl@2.12.0-beta.2 +npm install next-intl@2.12.0-beta.3 ``` -This beta version was tested with `next@13.2.0`. +This beta version was tested with `next@13.2.4`. ## Roadmap diff --git a/yarn.lock b/yarn.lock index 9da2a4e4b..819a1e61b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2375,10 +2375,10 @@ resolved "https://registry.yarnpkg.com/@next/env/-/env-13.1.6.tgz#c4925609f16142ded1a5cb833359ab17359b7a93" integrity sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg== -"@next/env@13.2.0": - version "13.2.0" - resolved "https://registry.yarnpkg.com/@next/env/-/env-13.2.0.tgz#1a597a885ce11860446c88e1098fd517dc0e84b1" - integrity sha512-yv9oaRVa+AxFa27uQOVecS931NrE+GcQSqcL2HaRxL8NunStLtPiyNm/VixvdzfiWLabMz4dXvbXfwCNaECzcw== +"@next/env@13.2.4": + version "13.2.4" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.2.4.tgz#8b763700262b2445140a44a8c8d088cef676dbae" + integrity sha512-+Mq3TtpkeeKFZanPturjcXt+KHfKYnLlX6jMLyCrmpq6OOs4i1GqBOAauSkii9QeKCMTYzGppar21JU57b/GEA== "@next/eslint-plugin-next@12.0.1": version "12.0.1" @@ -2409,10 +2409,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.6.tgz#d766dfc10e27814d947b20f052067c239913dbcc" integrity sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ== -"@next/swc-android-arm-eabi@13.2.0": - version "13.2.0" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.2.0.tgz#241d007fdb2f06f70ab21d5a333e08a29de9cd7f" - integrity sha512-VMetUwBWtDBGzNiOkhiWTP+99ZYW5NVRpIGlUsldEtY8IQIqleaUgW9iamsO0kDSjhWNdCQCB+xu5HcCvmDTww== +"@next/swc-android-arm-eabi@13.2.4": + version "13.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.2.4.tgz#758d0403771e549f9cee71cbabc0cb16a6c947c0" + integrity sha512-DWlalTSkLjDU11MY11jg17O1gGQzpRccM9Oes2yTqj2DpHndajrXHGxj9HGtJ+idq2k7ImUdJVWS2h2l/EDJOw== "@next/swc-android-arm64@13.0.0": version "13.0.0" @@ -2424,10 +2424,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.1.6.tgz#f37a98d5f18927d8c9970d750d516ac779465176" integrity sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw== -"@next/swc-android-arm64@13.2.0": - version "13.2.0" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.2.0.tgz#924e79197f094a12ac3409b6a416f84c2f74341d" - integrity sha512-fAiP54Om3fSj5aKntxEvW5fWzyMUzLzjFrHuUt5jBnTRWM4QikhLy547OZDoxycyk4GoQVHmNMSA3hILsrV/dQ== +"@next/swc-android-arm64@13.2.4": + version "13.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.2.4.tgz#834d586523045110d5602e0c8aae9028835ac427" + integrity sha512-sRavmUImUCf332Gy+PjIfLkMhiRX1Ez4SI+3vFDRs1N5eXp+uNzjFUK/oLMMOzk6KFSkbiK/3Wt8+dHQR/flNg== "@next/swc-darwin-arm64@13.0.0": version "13.0.0" @@ -2439,10 +2439,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.6.tgz#ec1b90fd9bf809d8b81004c5182e254dced4ad96" integrity sha512-KKRQH4DDE4kONXCvFMNBZGDb499Hs+xcFAwvj+rfSUssIDrZOlyfJNy55rH5t2Qxed1e4K80KEJgsxKQN1/fyw== -"@next/swc-darwin-arm64@13.2.0": - version "13.2.0" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.2.0.tgz#bfd3dfe90903b3bbf81f617f2b1d4f8b9e20e8aa" - integrity sha512-F4zbvPnq3zCTqyyM6WN8ledazzJx3OrxIdc2ewnqnfk6tjBZ/aq1M27GhEfylGjZG1KvbtJCxUqi7dR/6R94bA== +"@next/swc-darwin-arm64@13.2.4": + version "13.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.2.4.tgz#5006fca179a36ef3a24d293abadec7438dbb48c6" + integrity sha512-S6vBl+OrInP47TM3LlYx65betocKUUlTZDDKzTiRDbsRESeyIkBtZ6Qi5uT2zQs4imqllJznVjFd1bXLx3Aa6A== "@next/swc-darwin-x64@13.0.0": version "13.0.0" @@ -2454,10 +2454,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.6.tgz#e869ac75d16995eee733a7d1550322d9051c1eb4" integrity sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA== -"@next/swc-darwin-x64@13.2.0": - version "13.2.0" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.2.0.tgz#3d159bb2889f093d173546a6e5edd6260df7e156" - integrity sha512-Y9+fB7TLAAnkCZQXWjwJg5bi1pT5NuNkI+HoKYp26U1J0SxW5vZWFGc31WFmmHIz3wA0zlaQfRa4mF7cpZL5yw== +"@next/swc-darwin-x64@13.2.4": + version "13.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.2.4.tgz#6549c7c04322766acc3264ccdb3e1b43fcaf7946" + integrity sha512-a6LBuoYGcFOPGd4o8TPo7wmv5FnMr+Prz+vYHopEDuhDoMSHOnC+v+Ab4D7F0NMZkvQjEJQdJS3rqgFhlZmKlw== "@next/swc-freebsd-x64@13.0.0": version "13.0.0" @@ -2469,10 +2469,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.6.tgz#84a7b2e423a2904afc2edca21c2f1ba6b53fa4c1" integrity sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw== -"@next/swc-freebsd-x64@13.2.0": - version "13.2.0" - resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.2.0.tgz#33877ad933e1b3d7776dfb060f4e3b55f675523e" - integrity sha512-b9bCLlfznbV6e6Vg9wKYZJs7Uz8z/Py9105MYq95a3JlHiI3e/fvBpm1c7fe5QlvWJlqyNav6Clyu1W+lDk+IQ== +"@next/swc-freebsd-x64@13.2.4": + version "13.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.2.4.tgz#0bbe28979e3e868debc2cc06e45e186ce195b7f4" + integrity sha512-kkbzKVZGPaXRBPisoAQkh3xh22r+TD+5HwoC5bOkALraJ0dsOQgSMAvzMXKsN3tMzJUPS0tjtRf1cTzrQ0I5vQ== "@next/swc-linux-arm-gnueabihf@13.0.0": version "13.0.0" @@ -2484,10 +2484,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.6.tgz#980eed1f655ff8a72187d8a6ef9e73ac39d20d23" integrity sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw== -"@next/swc-linux-arm-gnueabihf@13.2.0": - version "13.2.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.2.0.tgz#31b81ff368e5337019f858c4a0d7ae7f80310728" - integrity sha512-jY/2JjDVVyktzRtMclAIVLgOxk5Ut9NKu8kKMCPdKMf9/ila37UpRfIh2fOXtRhv8AK7Lq/iSI/v2vjopZxZgQ== +"@next/swc-linux-arm-gnueabihf@13.2.4": + version "13.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.2.4.tgz#1d28d2203f5a7427d6e7119d7bcb5fc40959fb3e" + integrity sha512-7qA1++UY0fjprqtjBZaOA6cas/7GekpjVsZn/0uHvquuITFCdKGFCsKNBx3S0Rpxmx6WYo0GcmhNRM9ru08BGg== "@next/swc-linux-arm64-gnu@13.0.0": version "13.0.0" @@ -2499,10 +2499,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.6.tgz#87a71db21cded3f7c63d1d19079845c59813c53d" integrity sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ== -"@next/swc-linux-arm64-gnu@13.2.0": - version "13.2.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.2.0.tgz#e46bd73d1ccc38be46009b88dc87df88d8c44fa1" - integrity sha512-EKjWU3/lSBhOwPQRQLbySUnATnXygCjGd8ag3rP6d7kTIhfuPO4pY+DYW+wHOt5qB1ULNRmW0sXZ/ZKnQrVszw== +"@next/swc-linux-arm64-gnu@13.2.4": + version "13.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.2.4.tgz#eb26448190948cdf4c44b8f34110a3ecea32f1d0" + integrity sha512-xzYZdAeq883MwXgcwc72hqo/F/dwUxCukpDOkx/j1HTq/J0wJthMGjinN9wH5bPR98Mfeh1MZJ91WWPnZOedOg== "@next/swc-linux-arm64-musl@13.0.0": version "13.0.0" @@ -2514,10 +2514,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.6.tgz#c5aac8619331b9fd030603bbe2b36052011e11de" integrity sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ== -"@next/swc-linux-arm64-musl@13.2.0": - version "13.2.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.2.0.tgz#54a4f0cc1431f3e4e24a5e017e473a5fc761b33b" - integrity sha512-T5R9r23Docwo6PYZRzndeFB5WUN3+smMbyk25K50MAngCiSydr82/YfAetcp7Ov7Shp4a8xXP9DHDIsBas6wbQ== +"@next/swc-linux-arm64-musl@13.2.4": + version "13.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.2.4.tgz#c4227c0acd94a420bb14924820710e6284d234d3" + integrity sha512-8rXr3WfmqSiYkb71qzuDP6I6R2T2tpkmf83elDN8z783N9nvTJf2E7eLx86wu2OJCi4T05nuxCsh4IOU3LQ5xw== "@next/swc-linux-x64-gnu@13.0.0": version "13.0.0" @@ -2529,10 +2529,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.6.tgz#9513d36d540bbfea575576746736054c31aacdea" integrity sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q== -"@next/swc-linux-x64-gnu@13.2.0": - version "13.2.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.2.0.tgz#1c17a6121846decac2d701a040649f8f764ac671" - integrity sha512-FeXTc2KFvUSnTJmkpNMKoBHmNA1Ujr3QdfcKnVm/gXWqK+rfuEhAiRNOo+6mPcQ0noEge1j8Ai+W1LTbdDwPZQ== +"@next/swc-linux-x64-gnu@13.2.4": + version "13.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.2.4.tgz#6bcb540944ee9b0209b33bfc23b240c2044dfc3e" + integrity sha512-Ngxh51zGSlYJ4EfpKG4LI6WfquulNdtmHg1yuOYlaAr33KyPJp4HeN/tivBnAHcZkoNy0hh/SbwDyCnz5PFJQQ== "@next/swc-linux-x64-musl@13.0.0": version "13.0.0" @@ -2544,10 +2544,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.6.tgz#d61fc6884899f5957251f4ce3f522e34a2c479b7" integrity sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ== -"@next/swc-linux-x64-musl@13.2.0": - version "13.2.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.2.0.tgz#a4f39cfeb19123196a2ebc2061e60897b29ffa3f" - integrity sha512-7Y0XMUzWDWI94pxC0xWGMWrgTFKHu/myc+GTNVEwvLtI9WA0brKqZrL1tCQW/+t6J+5XqS7w+AHbViaF+muu1A== +"@next/swc-linux-x64-musl@13.2.4": + version "13.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.2.4.tgz#ce21e43251eaf09a09df39372b2c3e38028c30ff" + integrity sha512-gOvwIYoSxd+j14LOcvJr+ekd9fwYT1RyMAHOp7znA10+l40wkFiMONPLWiZuHxfRk+Dy7YdNdDh3ImumvL6VwA== "@next/swc-win32-arm64-msvc@13.0.0": version "13.0.0" @@ -2559,10 +2559,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.6.tgz#fac2077a8ae9768e31444c9ae90807e64117cda7" integrity sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ== -"@next/swc-win32-arm64-msvc@13.2.0": - version "13.2.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.2.0.tgz#d21ef0d0c2757cee9b1d723aafb9e02ca25852eb" - integrity sha512-NM5h2gEMe8EtvOeRU3vRM83tq1xo6Qvhuz0xJem/176SAMxbqzAz4LLP3l9VyUI3SIzGyiztvF/1c0jqeq7UEA== +"@next/swc-win32-arm64-msvc@13.2.4": + version "13.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.2.4.tgz#68220063d8e5e082f5465498675640dedb670ff1" + integrity sha512-q3NJzcfClgBm4HvdcnoEncmztxrA5GXqKeiZ/hADvC56pwNALt3ngDC6t6qr1YW9V/EPDxCYeaX4zYxHciW4Dw== "@next/swc-win32-ia32-msvc@13.0.0": version "13.0.0" @@ -2574,10 +2574,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.6.tgz#498bc11c91b4c482a625bf4b978f98ae91111e46" integrity sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w== -"@next/swc-win32-ia32-msvc@13.2.0": - version "13.2.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.2.0.tgz#529852721e3f00afb9385640cbac1a899342c6ba" - integrity sha512-G7YEJZX9wkcUaBOvXQSCF9Wb2sqP8hhsmFXF6po7M3llw4b+2ut2DXLf+UMdthOdUK0u+Ijhy5F7SbW9HOn2ig== +"@next/swc-win32-ia32-msvc@13.2.4": + version "13.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.2.4.tgz#7c120ab54a081be9566df310bed834f168252990" + integrity sha512-/eZ5ncmHUYtD2fc6EUmAIZlAJnVT2YmxDsKs1Ourx0ttTtvtma/WKlMV5NoUsyOez0f9ExLyOpeCoz5aj+MPXw== "@next/swc-win32-x64-msvc@13.0.0": version "13.0.0" @@ -2589,10 +2589,10 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.6.tgz#17ed919c723426b7d0ce1cd73d40ce3dcd342089" integrity sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA== -"@next/swc-win32-x64-msvc@13.2.0": - version "13.2.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.2.0.tgz#49bc50b1865d20b29892a415fcbaab84217112a5" - integrity sha512-QTAjSuPevnZnlHfC4600+4NvxRuPar6tWdYbPum9vnk3OIH1xu9YLK+2ArPGFd0bB2K8AoY2SIMbs1dhK0GjQQ== +"@next/swc-win32-x64-msvc@13.2.4": + version "13.2.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.2.4.tgz#5abda92fe12b9829bf7951c4a221282c56041144" + integrity sha512-0MffFmyv7tBLlji01qc0IaPP/LVExzvj7/R5x1Jph1bTAIj4Vu81yFQWHHQAP6r4ff9Ukj1mBK6MDNVXm7Tcvw== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -9566,30 +9566,30 @@ next-themes@^0.2.1: resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.2.1.tgz#0c9f128e847979daf6c67f70b38e6b6567856e45" integrity sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A== -next@13.2.0: - version "13.2.0" - resolved "https://registry.yarnpkg.com/next/-/next-13.2.0.tgz#100b2d1dca120a3460c767ccdad80fc8e2463e31" - integrity sha512-vhByvKHedsaMwNTwXKzK4IMmNp7XI7vN4etcGUoIpLrIuDfoYA3bS0ImS4X9F6lKzopG5aVp7a1CjuzF2NGkvA== +next@13.2.4: + version "13.2.4" + resolved "https://registry.yarnpkg.com/next/-/next-13.2.4.tgz#2363330392b0f7da02ab41301f60857ffa7f67d6" + integrity sha512-g1I30317cThkEpvzfXujf0O4wtaQHtDCLhlivwlTJ885Ld+eOgcz7r3TGQzeU+cSRoNHtD8tsJgzxVdYojFssw== dependencies: - "@next/env" "13.2.0" + "@next/env" "13.2.4" "@swc/helpers" "0.4.14" caniuse-lite "^1.0.30001406" postcss "8.4.14" styled-jsx "5.1.1" optionalDependencies: - "@next/swc-android-arm-eabi" "13.2.0" - "@next/swc-android-arm64" "13.2.0" - "@next/swc-darwin-arm64" "13.2.0" - "@next/swc-darwin-x64" "13.2.0" - "@next/swc-freebsd-x64" "13.2.0" - "@next/swc-linux-arm-gnueabihf" "13.2.0" - "@next/swc-linux-arm64-gnu" "13.2.0" - "@next/swc-linux-arm64-musl" "13.2.0" - "@next/swc-linux-x64-gnu" "13.2.0" - "@next/swc-linux-x64-musl" "13.2.0" - "@next/swc-win32-arm64-msvc" "13.2.0" - "@next/swc-win32-ia32-msvc" "13.2.0" - "@next/swc-win32-x64-msvc" "13.2.0" + "@next/swc-android-arm-eabi" "13.2.4" + "@next/swc-android-arm64" "13.2.4" + "@next/swc-darwin-arm64" "13.2.4" + "@next/swc-darwin-x64" "13.2.4" + "@next/swc-freebsd-x64" "13.2.4" + "@next/swc-linux-arm-gnueabihf" "13.2.4" + "@next/swc-linux-arm64-gnu" "13.2.4" + "@next/swc-linux-arm64-musl" "13.2.4" + "@next/swc-linux-x64-gnu" "13.2.4" + "@next/swc-linux-x64-musl" "13.2.4" + "@next/swc-win32-arm64-msvc" "13.2.4" + "@next/swc-win32-ia32-msvc" "13.2.4" + "@next/swc-win32-x64-msvc" "13.2.4" next@^13.0.0: version "13.0.0" From 666c1dfab8c8000347f6d227e362076dc09a5c1b Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 14 Mar 2023 10:24:48 +0100 Subject: [PATCH 177/312] feat: Improve named routes implementation (#213) --- .github/workflows/main.yml | 1 + lerna.json | 1 + package.json | 1 + packages/example-advanced/package.json | 4 +- packages/example-next-13-advanced/README.md | 2 +- .../example-next-13-advanced/messages/de.json | 5 - .../example-next-13-advanced/messages/en.json | 5 - .../example-next-13-advanced/messages/es.json | 5 - .../example-next-13-advanced/next-env.d.ts | 1 - .../example-next-13-advanced/package.json | 5 +- .../src/components/Navigation.tsx | 8 +- .../src/hooks/useNamedRoute.tsx | 5 - .../tests/main.spec.ts | 13 -- .../example-next-13-named-routes/.eslintrc.js | 15 ++ .../example-next-13-named-routes/.gitignore | 4 + .../example-next-13-named-routes/README.md | 9 + .../example-next-13-named-routes/global.d.ts | 3 + .../messages/de.json | 11 ++ .../messages/en.json | 11 ++ .../next-env.d.ts | 5 + .../next.config.js | 21 ++ .../example-next-13-named-routes/package.json | 30 +++ .../playwright.config.ts | 20 ++ .../public/favicon.ico | Bin 0 -> 15086 bytes .../routesByLocale.json | 10 + .../src/app/[locale]/guitars/[slug]/page.tsx | 25 +++ .../src/app/[locale]/layout.tsx | 35 ++++ .../src/app/[locale]/page.tsx | 24 +++ .../src/components/LocaleSwitcher.tsx | 15 ++ .../src/components/NamedLink.tsx | 38 ++++ .../example-next-13-named-routes/src/db.tsx | 37 ++++ .../example-next-13-named-routes/src/i18n.tsx | 5 + .../src/middleware.ts | 16 ++ .../tests/main.spec.ts | 29 +++ .../tsconfig.json | 35 ++++ .../example-next-13-with-pages/package.json | 5 +- packages/example-next-13/package.json | 6 +- packages/example/package.json | 6 +- .../pages/docs/next-13/server-components.mdx | 22 ++- yarn.lock | 186 +----------------- 40 files changed, 435 insertions(+), 244 deletions(-) delete mode 100644 packages/example-next-13-advanced/src/hooks/useNamedRoute.tsx create mode 100644 packages/example-next-13-named-routes/.eslintrc.js create mode 100644 packages/example-next-13-named-routes/.gitignore create mode 100644 packages/example-next-13-named-routes/README.md create mode 100644 packages/example-next-13-named-routes/global.d.ts create mode 100644 packages/example-next-13-named-routes/messages/de.json create mode 100644 packages/example-next-13-named-routes/messages/en.json create mode 100644 packages/example-next-13-named-routes/next-env.d.ts create mode 100644 packages/example-next-13-named-routes/next.config.js create mode 100644 packages/example-next-13-named-routes/package.json create mode 100644 packages/example-next-13-named-routes/playwright.config.ts create mode 100644 packages/example-next-13-named-routes/public/favicon.ico create mode 100644 packages/example-next-13-named-routes/routesByLocale.json create mode 100644 packages/example-next-13-named-routes/src/app/[locale]/guitars/[slug]/page.tsx create mode 100644 packages/example-next-13-named-routes/src/app/[locale]/layout.tsx create mode 100644 packages/example-next-13-named-routes/src/app/[locale]/page.tsx create mode 100644 packages/example-next-13-named-routes/src/components/LocaleSwitcher.tsx create mode 100644 packages/example-next-13-named-routes/src/components/NamedLink.tsx create mode 100644 packages/example-next-13-named-routes/src/db.tsx create mode 100644 packages/example-next-13-named-routes/src/i18n.tsx create mode 100644 packages/example-next-13-named-routes/src/middleware.ts create mode 100644 packages/example-next-13-named-routes/tests/main.spec.ts create mode 100644 packages/example-next-13-named-routes/tsconfig.json diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index be60ed348..1db9404e7 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,6 +22,7 @@ jobs: - run: yarn workspace example-advanced run build - run: yarn workspace example-next-13 run build - run: yarn workspace example-next-13-advanced run build + - run: yarn workspace example-next-13-named-routes run build - run: yarn workspace example-next-13-with-pages run build - run: yarn workspaces run lint diff --git a/lerna.json b/lerna.json index d78611ae8..889b00226 100644 --- a/lerna.json +++ b/lerna.json @@ -7,6 +7,7 @@ "packages/example-advanced", "packages/example-next-13", "packages/example-next-13-advanced", + "packages/example-next-13-named-routes", "packages/example-next-13-with-pages", "packages/website" ], diff --git a/package.json b/package.json index 0083cc664..ccd06777f 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "packages/example", "packages/example-next-13", "packages/example-next-13-advanced", + "packages/example-next-13-named-routes", "packages/example-next-13-with-pages", "packages/example-advanced", "packages/website" diff --git a/packages/example-advanced/package.json b/packages/example-advanced/package.json index ced142156..fe0fe5bcc 100644 --- a/packages/example-advanced/package.json +++ b/packages/example-advanced/package.json @@ -15,10 +15,10 @@ "next": "^13.0.0", "next-intl": "^2.11.0", "react": "^18.2.0", - "react-dom": "^18.2.0", - "typescript": "^4.6.3" + "react-dom": "^18.2.0" }, "devDependencies": { + "typescript": "^4.6.3", "@testing-library/react": "^13.0.0", "@types/accept-language-parser": "^1.5.3", "@types/lodash": "^4.14.176", diff --git a/packages/example-next-13-advanced/README.md b/packages/example-next-13-advanced/README.md index f8de937db..73bdf62b8 100644 --- a/packages/example-next-13-advanced/README.md +++ b/packages/example-next-13-advanced/README.md @@ -1,3 +1,3 @@ -# example-next-13 +# example-next-13-advanced An example that showcases usage of `next-intl` in the `app` folder of Next.js 13. diff --git a/packages/example-next-13-advanced/messages/de.json b/packages/example-next-13-advanced/messages/de.json index eb63e250b..4040e7dcb 100644 --- a/packages/example-next-13-advanced/messages/de.json +++ b/packages/example-next-13-advanced/messages/de.json @@ -38,10 +38,5 @@ }, "ApiRoute": { "hello": "Hallo {name}!" - }, - "useNamedRoute": { - "home": "/", - "client": "/client", - "nested": "/verschachtelt" } } diff --git a/packages/example-next-13-advanced/messages/en.json b/packages/example-next-13-advanced/messages/en.json index 0b07b33e2..c5dc6a775 100644 --- a/packages/example-next-13-advanced/messages/en.json +++ b/packages/example-next-13-advanced/messages/en.json @@ -38,10 +38,5 @@ }, "ApiRoute": { "hello": "Hello {name}!" - }, - "useNamedRoute": { - "home": "/", - "client": "/client", - "nested": "/nested" } } diff --git a/packages/example-next-13-advanced/messages/es.json b/packages/example-next-13-advanced/messages/es.json index 7d45c2819..23beb7a2f 100644 --- a/packages/example-next-13-advanced/messages/es.json +++ b/packages/example-next-13-advanced/messages/es.json @@ -38,10 +38,5 @@ }, "ApiRoute": { "hello": "¡Hola {name}!" - }, - "useNamedRoute": { - "home": "/", - "client": "/client", - "nested": "/anidada" } } diff --git a/packages/example-next-13-advanced/next-env.d.ts b/packages/example-next-13-advanced/next-env.d.ts index 7aa8e8ef7..4f11a03dc 100644 --- a/packages/example-next-13-advanced/next-env.d.ts +++ b/packages/example-next-13-advanced/next-env.d.ts @@ -1,6 +1,5 @@ /// /// -/// // NOTE: This file should not be edited // see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/packages/example-next-13-advanced/package.json b/packages/example-next-13-advanced/package.json index 09aa4c60e..0cd7ccb78 100644 --- a/packages/example-next-13-advanced/package.json +++ b/packages/example-next-13-advanced/package.json @@ -16,11 +16,10 @@ "next": "13.2.4", "next-intl": "*", "react": "^18.2.0", - "react-dom": "^18.2.0", - "sharp": "0.31.3", - "typescript": "^4.6.3" + "react-dom": "^18.2.0" }, "devDependencies": { + "typescript": "^4.6.3", "@playwright/test": "^1.29.0", "@types/lodash": "^4.14.176", "@types/node": "^17.0.23", diff --git a/packages/example-next-13-advanced/src/components/Navigation.tsx b/packages/example-next-13-advanced/src/components/Navigation.tsx index 8941023bc..8cd65eff9 100644 --- a/packages/example-next-13-advanced/src/components/Navigation.tsx +++ b/packages/example-next-13-advanced/src/components/Navigation.tsx @@ -1,16 +1,14 @@ import {useTranslations} from 'next-intl'; -import useNamedRoute from '../hooks/useNamedRoute'; import NavigationLink from './NavigationLink'; export default function Navigation() { const t = useTranslations('Navigation'); - const getHref = useNamedRoute(); return ( ); } diff --git a/packages/example-next-13-advanced/src/hooks/useNamedRoute.tsx b/packages/example-next-13-advanced/src/hooks/useNamedRoute.tsx deleted file mode 100644 index 7be83e33a..000000000 --- a/packages/example-next-13-advanced/src/hooks/useNamedRoute.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import {useTranslations} from 'next-intl'; - -export default function useNamedRoute() { - return useTranslations('useNamedRoute'); -} diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index eae8be298..c9d475a41 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -369,19 +369,6 @@ it('can use rewrites to localize pathnames', async ({page, request}) => { expect(response.status()).toBe(404); }); -it('can use named routes to localize pathnames', async ({page}) => { - await page.goto('/'); - await expect(page.getByRole('link', {name: 'Nested page'})).toHaveAttribute( - 'href', - '/nested' - ); - - await page.goto('/de'); - await expect( - page.getByRole('link', {name: 'Verschachtelte Seite'}) - ).toHaveAttribute('href', '/de/verschachtelt'); -}); - it('replaces invalid cookie locales', async ({request}) => { const response = await request.get('/', { maxRedirects: 0, diff --git a/packages/example-next-13-named-routes/.eslintrc.js b/packages/example-next-13-named-routes/.eslintrc.js new file mode 100644 index 000000000..3d3a6276c --- /dev/null +++ b/packages/example-next-13-named-routes/.eslintrc.js @@ -0,0 +1,15 @@ +require('eslint-config-molindo/setupPlugins'); + +module.exports = { + env: { + node: true + }, + extends: [ + 'molindo/typescript', + 'molindo/react', + 'plugin:@next/next/recommended' + ], + rules: { + 'react/react-in-jsx-scope': 'off' + } +}; diff --git a/packages/example-next-13-named-routes/.gitignore b/packages/example-next-13-named-routes/.gitignore new file mode 100644 index 000000000..04239e7d0 --- /dev/null +++ b/packages/example-next-13-named-routes/.gitignore @@ -0,0 +1,4 @@ +/node_modules +/.next/ +.DS_Store +tsconfig.tsbuildinfo diff --git a/packages/example-next-13-named-routes/README.md b/packages/example-next-13-named-routes/README.md new file mode 100644 index 000000000..bffb4be1c --- /dev/null +++ b/packages/example-next-13-named-routes/README.md @@ -0,0 +1,9 @@ +# example-next-13-named-routes + +An example that showcases how named routes can be used to localize pathname segments. + +See: + - `next.config.js`: Maps localized pathnames to internal paths. + - `NamedLink.tsx`: Maps named routes to localized pathnames. + +Note that `alternateLinks` is turned off. Providing alternate links for all localized routes is currently missing in the example. diff --git a/packages/example-next-13-named-routes/global.d.ts b/packages/example-next-13-named-routes/global.d.ts new file mode 100644 index 000000000..0e9a1a3de --- /dev/null +++ b/packages/example-next-13-named-routes/global.d.ts @@ -0,0 +1,3 @@ +// Declaring this interface provides type safety for message keys +type Messages = typeof import('./messages/en.json'); +declare interface IntlMessages extends Messages {} diff --git a/packages/example-next-13-named-routes/messages/de.json b/packages/example-next-13-named-routes/messages/de.json new file mode 100644 index 000000000..3bca46d63 --- /dev/null +++ b/packages/example-next-13-named-routes/messages/de.json @@ -0,0 +1,11 @@ +{ + "LocaleLayout": { + "title": "Gitarren" + }, + "Index": { + "title": "Gitarren" + }, + "LocaleSwitcher": { + "switchLocale": "Zu {locale, select, de {Deutsch} en {Englisch} other {Unbekannt}} wechseln" + } +} diff --git a/packages/example-next-13-named-routes/messages/en.json b/packages/example-next-13-named-routes/messages/en.json new file mode 100644 index 000000000..159a295ea --- /dev/null +++ b/packages/example-next-13-named-routes/messages/en.json @@ -0,0 +1,11 @@ +{ + "LocaleLayout": { + "title": "Guitars" + }, + "Index": { + "title": "Guitars" + }, + "LocaleSwitcher": { + "switchLocale": "Switch to {locale, select, de {German} en {English} other {Unknown}}" + } +} diff --git a/packages/example-next-13-named-routes/next-env.d.ts b/packages/example-next-13-named-routes/next-env.d.ts new file mode 100644 index 000000000..4f11a03dc --- /dev/null +++ b/packages/example-next-13-named-routes/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/packages/example-next-13-named-routes/next.config.js b/packages/example-next-13-named-routes/next.config.js new file mode 100644 index 000000000..e4321e788 --- /dev/null +++ b/packages/example-next-13-named-routes/next.config.js @@ -0,0 +1,21 @@ +const withNextIntl = require('next-intl/plugin')(); +const routesByLocale = require('./routesByLocale.json'); + +module.exports = withNextIntl({ + experimental: {appDir: true}, + + rewrites() { + // Routes are set up for the default locale (en) in the app. This + // rewrites all non-en routes to their internal equivalent. + const locales = Object.keys(routesByLocale).filter( + (locale) => locale !== 'en' + ); + + return locales.flatMap((locale) => + Object.keys(routesByLocale[locale]).map((routeName) => ({ + source: `/${locale}${routesByLocale[locale][routeName]}`, + destination: `/${locale}${routesByLocale.en[routeName]}` + })) + ); + } +}); diff --git a/packages/example-next-13-named-routes/package.json b/packages/example-next-13-named-routes/package.json new file mode 100644 index 000000000..052f7d3db --- /dev/null +++ b/packages/example-next-13-named-routes/package.json @@ -0,0 +1,30 @@ +{ + "name": "example-next-13-named-routes", + "version": "2.9.1", + "private": true, + "scripts": { + "dev": "next dev", + "lint": "eslint src && tsc", + "test": "playwright test", + "test:watch": "chokidar 'tests/main.spec.ts' -c 'npm run test'", + "build": "next build", + "start": "next start" + }, + "dependencies": { + "next": "13.2.4", + "next-intl": "*", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "typescript": "^4.6.3", + "@playwright/test": "^1.29.0", + "@types/lodash": "^4.14.176", + "@types/node": "^17.0.23", + "@types/react": "^18.0.23", + "chokidar-cli": "3.0.0", + "eslint": "^8.12.0", + "eslint-config-molindo": "^6.0.0", + "eslint-config-next": "^13.0.0" + } +} diff --git a/packages/example-next-13-named-routes/playwright.config.ts b/packages/example-next-13-named-routes/playwright.config.ts new file mode 100644 index 000000000..88d081ee1 --- /dev/null +++ b/packages/example-next-13-named-routes/playwright.config.ts @@ -0,0 +1,20 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import type {PlaywrightTestConfig} from '@playwright/test'; +import {devices} from '@playwright/test'; + +const config: PlaywrightTestConfig = { + testDir: './tests', + projects: [ + { + name: 'chromium', + use: devices['Desktop Chrome'] + } + ], + webServer: { + reuseExistingServer: true, + command: 'yarn start', + port: 3000 + } +}; + +export default config; diff --git a/packages/example-next-13-named-routes/public/favicon.ico b/packages/example-next-13-named-routes/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4ddd8fff7086c240ed21438ca7d96f1b8dae0bc0 GIT binary patch literal 15086 zcmdU$O=uNY6vrnYO%#n9m0G$<)C8)FRuGb41&a%z2%-zOrYkKQ7LVcV8tZ8{r_I(J}2Xwd3WZ$*OwePxifd}IsgB? z@7{AiX5x7@UY)mPi>I{JyV~w~9iHd4w)*$0Jnt9fty0SKPwPGJD;0Q8Wn|)gA|*d3 zZJyV>ZcgVi%JR2KUOJ_pNiRu%l#WaPk^bu|*W~exGL*#z+iFOiKxv{cq~A-QNoSnvZWVz$%y2 z$kB(=jC597D#v2>V1NZC*rkY~fpzbN^>mc9}aM-le$W`3Rbh-!*zlSeaS_(t57xidzf?h9!_wJ6XMpeG;F(2?%@^} zTZz5QCkusdm&t8;0X=2;v z=4NyA=FO7%Pfbmky?gg2#`ihHeJl-sYxshdXBjsq7mY z8_mUw7gO^e8yhp7ot>$$ea>(%X}z;`>sB*5I-05ur%#_Y#Iv;R=W{QKf7*DOB3>4% zC)`u_AKPw8<7vuxS%^Q}Q;%QEpEOB4Eg@cp>j3vu@iWMsYu9*MV!RCVhdXmXI6u|B zOFS(xUWR$WJ@NV>s=meIX&K^WkiT6&bc&Dj`YnpP&5w(xWr&wS{&xM=By8vPv*j6; zM#a-I#mgXnIKv%r-oL19&_}`Ra6BzzybR*m{R{jzNz1x_B%V%BPv_?4GR8~GAFgn= z!d{p?v3*{0N<1AJ8Zs|lyeMUT8O4LM2F@IU!kI)_e}g@H_L#xJL9=w}(kLEj^5Mu? zPa!Gm`4#bW_3G7WI7ZpTonKL(#c+POu291V^0w=Gv7X=BY8=qTLOVb2w&WaA-W4pg z_ZPfVNg|8+{gJIFb*3*>V?2NfcG7m2$vk0h`@i3x4*QtFGv;}uQrr+*nI9_oTi_dv zxOXgioLZQ(?e_y}6iZ{#ZwxL^&=9>|`hvL_vv zayCHQqFj^5GrQ-*#;)IWnNEy;<($6sycVvrp4Uj4(FrcKN zvwpkUcIKIsPTVT}NSgmnYgOv+w20N4r9IMbr9Vq2rL(?rO&-rELs@J}6~-g|aZs9- zPD^QmIHgQhiVe2-NF(pcs9(zWSaEo9&#=V@zLH3X3Xe$n+2j1XJi`aR@aZBuRp=+F zi|-_5@QLp@fnz1GEl+$$wFAG=4^msUQYjeW{!ptt`bniQ!+ya6(@K{v%63*JUtzrP zJy>8OjL&bR;WD}Vy1F`(R_p8QS z3)aiW1e0>+L40 z-*@!(_U7itD4r4d!TA^bRO^q1h6b~2*|K1rT(A3mOt7s~bNyvGRCE1lIqcL$qL`%e zF71v_e7gwkz@DKR`wz>H{y;x@CUvP_p)%OwBfQ>LmXi=0*h5xh{~07$vHiE{t1C-pXV!RjLzkh$YPT0;{WAHuhnKNhJu)lWgTA}x{_V=CVx2>(su;#M@ zA9w|M`q$Xc<8RBbW@GJ!#C#`=ZNB}iEh&4Pk&zMe=+Pt7-riman>=juzhBUvYv%ET z2M +

    {guitar.name}

    +

    {guitar.description}

    +
    + ); +} diff --git a/packages/example-next-13-named-routes/src/app/[locale]/layout.tsx b/packages/example-next-13-named-routes/src/app/[locale]/layout.tsx new file mode 100644 index 000000000..a381e7398 --- /dev/null +++ b/packages/example-next-13-named-routes/src/app/[locale]/layout.tsx @@ -0,0 +1,35 @@ +import {useLocale} from 'next-intl'; +import {getTranslations} from 'next-intl/server'; +import {notFound} from 'next/navigation'; +import {ReactNode} from 'react'; +import LocaleSwitcher from '../../components/LocaleSwitcher'; + +type Props = { + children: ReactNode; + params: {locale: string}; +}; + +export async function generateMetadata() { + const t = await getTranslations('LocaleLayout'); + return {title: t('title')}; +} + +export default function LocaleLayout({children, params}: Props) { + const locale = useLocale(); + + // Show a 404 error for unknown locales + if (params.locale !== locale) { + notFound(); + } + + return ( + + +
    + {children} + +
    + + + ); +} diff --git a/packages/example-next-13-named-routes/src/app/[locale]/page.tsx b/packages/example-next-13-named-routes/src/app/[locale]/page.tsx new file mode 100644 index 000000000..649e06c14 --- /dev/null +++ b/packages/example-next-13-named-routes/src/app/[locale]/page.tsx @@ -0,0 +1,24 @@ +import {useLocale, useTranslations} from 'next-intl'; +import NamedLink from '../../components/NamedLink'; +import {getAllGuitars} from '../../db'; + +export default function Index() { + const t = useTranslations('Index'); + const locale = useLocale(); + const guitars = getAllGuitars(locale); + + return ( +
    +

    {t('title')}

    +
      + {guitars.map((guitar) => ( +
    • + + {guitar.name} + +
    • + ))} +
    +
    + ); +} diff --git a/packages/example-next-13-named-routes/src/components/LocaleSwitcher.tsx b/packages/example-next-13-named-routes/src/components/LocaleSwitcher.tsx new file mode 100644 index 000000000..ad4c196b6 --- /dev/null +++ b/packages/example-next-13-named-routes/src/components/LocaleSwitcher.tsx @@ -0,0 +1,15 @@ +import {useLocale, useTranslations} from 'next-intl'; +import NamedLink from './NamedLink'; + +export default function LocaleSwitcher() { + const t = useTranslations('LocaleSwitcher'); + + const locale = useLocale(); + const otherLocale = locale === 'en' ? 'de' : 'en'; + + return ( + + {t('switchLocale', {locale: otherLocale})} + + ); +} diff --git a/packages/example-next-13-named-routes/src/components/NamedLink.tsx b/packages/example-next-13-named-routes/src/components/NamedLink.tsx new file mode 100644 index 000000000..caa0b1a72 --- /dev/null +++ b/packages/example-next-13-named-routes/src/components/NamedLink.tsx @@ -0,0 +1,38 @@ +import {Link, useLocale} from 'next-intl'; +import {ComponentProps} from 'react'; +import routesByLocale from '../../routesByLocale.json'; + +type Routes = + | { + name: 'home'; + params?: never; + } + | { + name: 'detail'; + params: {slug: string}; + }; + +type Props = Omit, 'href'> & Routes; + +export default function NamedLink({name, params, ...rest}: Props) { + const locale = useLocale(); + + const localeRoutes = (routesByLocale as any)[locale]; + if (!localeRoutes) { + throw new Error(`No routes found for locale "${locale}"`); + } + + const routePath = (localeRoutes as any)[name]; + if (!routePath) { + throw new Error(`No route found for name "${name}"`); + } + + let href = routePath; + if (params) { + Object.keys(params).forEach((param) => { + href = href.replace(new RegExp(':' + param, 'g'), (params as any)[param]); + }); + } + + return ; +} diff --git a/packages/example-next-13-named-routes/src/db.tsx b/packages/example-next-13-named-routes/src/db.tsx new file mode 100644 index 000000000..7d1118ca3 --- /dev/null +++ b/packages/example-next-13-named-routes/src/db.tsx @@ -0,0 +1,37 @@ +const guitars = [ + { + id: 1, + name: 'Fender Stratocaster', + slug: 'fender-stratocaster', + description: { + en: 'The Fender Stratocaster, colloquially known as the Strat, is a model of electric guitar designed in 1952 by Leo Fender, Bill Carson, George Fullerton, and Freddie Tavares. The Fender Musical Instruments Corporation has continuously manufactured the Stratocaster from 1954 to the present. The guitar has been manufactured in Mexico, Japan, and the United States.', + de: 'Die Fender Stratocaster, auch bekannt als Strat, ist ein Modell einer E-Gitarre, das 1952 von Leo Fender, Bill Carson, George Fullerton und Freddie Tavares entworfen wurde. Die Fender Musical Instruments Corporation hat die Stratocaster seit 1954 ununterbrochen hergestellt. Die Gitarre wurde in Mexiko, Japan und den Vereinigten Staaten hergestellt.' + } + }, + { + id: 2, + name: 'Gibson Les Paul', + slug: 'gibson-les-paul', + description: { + en: 'The Gibson Les Paul is a solid body electric guitar that was first sold by the Gibson Guitar Corporation in 1952. It is Les Pauls signature model and is among the most popular electric guitars of all time. The Les Paul is a direct descendent of the Gibson ES-335, which was introduced in 1958. The Les Paul is a double-cutaway guitar with a solid mahogany body and a carved maple top. The neck is a one-piece mahogany neck with a rosewood fingerboard. The Les Paul has two humbucking pickups, one at the neck and one at the bridge. The Les Paul is available in a variety of finishes, including sunburst, cherry, and black. The Les Paul is available in a variety of body styles, including the Les Paul Standard, the Les Paul Custom, the Les Paul Junior, the Les Paul Special, and the Les Paul Studio.', + de: 'Die Gibson Les Paul ist eine E-Gitarre mit festem Korpus, die 1952 von der Gibson Guitar Corporation zum ersten Mal verkauft wurde. Es ist Les Pauls Signaturmodell und gehört zu den beliebtesten E-Gitarren aller Zeiten. Die Les Paul ist ein direkter Nachkomme der Gibson ES-335, die 1958 eingeführt wurde. Die Les Paul ist eine Doppel-Cutaway-Gitarre mit einem festen Mahagonikörper und einer gehobelten Ahornoberfläche. Der Hals ist ein einstückiger Mahagonihals mit einem Palisandergriffbrett. Die Les Paul hat zwei Humbucker-Pickups, einen am Hals und einen am Brücke. Die Les Paul ist in einer Vielzahl von Ausführungen erhältlich, darunter Sonnenuntergang, Kirsche und Schwarz. Die Les Paul ist in einer Vielzahl von Körperformen erhältlich, darunter die Les Paul Standard, die Les Paul Custom, die Les Paul Junior, die Les Paul Special und die Les Paul Studio.' + } + } +]; + +export function getAllGuitars(locale: string) { + return guitars.map((guitar) => ({ + ...guitar, + description: (guitar.description as any)[locale] + })); +} + +export function getGuitarBySlug(slug: string, locale: string) { + const guitar = guitars.find((cur) => cur.slug === slug); + + if (!guitar) { + return undefined; + } + + return {...guitar, description: (guitar.description as any)[locale]}; +} diff --git a/packages/example-next-13-named-routes/src/i18n.tsx b/packages/example-next-13-named-routes/src/i18n.tsx new file mode 100644 index 000000000..c45ddee14 --- /dev/null +++ b/packages/example-next-13-named-routes/src/i18n.tsx @@ -0,0 +1,5 @@ +import {getRequestConfig} from 'next-intl/server'; + +export default getRequestConfig(async ({locale}) => ({ + messages: (await import(`../messages/${locale}.json`)).default +})); diff --git a/packages/example-next-13-named-routes/src/middleware.ts b/packages/example-next-13-named-routes/src/middleware.ts new file mode 100644 index 000000000..1307af882 --- /dev/null +++ b/packages/example-next-13-named-routes/src/middleware.ts @@ -0,0 +1,16 @@ +import createIntlMiddleware from 'next-intl/middleware'; + +export default createIntlMiddleware({ + locales: ['en', 'de'], + defaultLocale: 'en', + + // TODO: Here a mapping needs to be created where the incoming request is + // resolved to a named route and based on that, all localized routes are + // linked to from the `Link` response header. + alternateLinks: false +}); + +export const config = { + // Skip all paths that should not be internationalized + matcher: ['/((?!_next|assets|favicon.ico).*)'] +}; diff --git a/packages/example-next-13-named-routes/tests/main.spec.ts b/packages/example-next-13-named-routes/tests/main.spec.ts new file mode 100644 index 000000000..6408e8e8a --- /dev/null +++ b/packages/example-next-13-named-routes/tests/main.spec.ts @@ -0,0 +1,29 @@ +import {test as it, expect} from '@playwright/test'; + +it('works for en', async ({page}) => { + await page.goto('/'); + + const link = page.getByRole('link', {name: 'Fender Stratocaster'}); + expect(link).toHaveAttribute('href', '/guitars/fender-stratocaster'); + await link.click(); + + await expect(page).toHaveURL('/guitars/fender-stratocaster'); + page.getByRole('heading', {name: 'Fender Stratocaster'}); + page.getByText( + 'The Fender Stratocaster, colloquially known as the Strat, is a model of electric guitar designed in 1952 by Leo Fender, Bill Carson, George Fullerton, and Freddie Tavares. The Fender Musical Instruments Corporation has continuously manufactured the Stratocaster from 1954 to the present. The guitar has been manufactured in Mexico, Japan, and the United States.' + ); +}); + +it('works for de', async ({page}) => { + await page.goto('/de'); + + const link = page.getByRole('link', {name: 'Fender Stratocaster'}); + expect(link).toHaveAttribute('href', '/de/gitarren/fender-stratocaster'); + await link.click(); + + await expect(page).toHaveURL('/de/gitarren/fender-stratocaster'); + page.getByRole('heading', {name: 'Fender Stratocaster'}); + page.getByText( + 'Die Fender Stratocaster, auch bekannt als Strat, ist ein Modell einer E-Gitarre, das 1952 von Leo Fender, Bill Carson, George Fullerton und Freddie Tavares entworfen wurde. Die Fender Musical Instruments Corporation hat die Stratocaster seit 1954 ununterbrochen hergestellt. Die Gitarre wurde in Mexiko, Japan und den Vereinigten Staaten hergestellt.' + ); +}); diff --git a/packages/example-next-13-named-routes/tsconfig.json b/packages/example-next-13-named-routes/tsconfig.json new file mode 100644 index 000000000..1c6c979ae --- /dev/null +++ b/packages/example-next-13-named-routes/tsconfig.json @@ -0,0 +1,35 @@ +{ + "extends": "eslint-config-molindo/tsconfig.json", + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ] + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/packages/example-next-13-with-pages/package.json b/packages/example-next-13-with-pages/package.json index 4ce1a6a2f..83529bb32 100644 --- a/packages/example-next-13-with-pages/package.json +++ b/packages/example-next-13-with-pages/package.json @@ -10,14 +10,13 @@ "start": "next start" }, "dependencies": { - "lodash": "^4.17.21", "next": "^13.1.1", "next-intl": "^2.10.2", "react": "^18.2.0", - "react-dom": "^18.2.0", - "typescript": "^4.6.3" + "react-dom": "^18.2.0" }, "devDependencies": { + "typescript": "^4.6.3", "@types/lodash": "^4.14.176", "@types/node": "^17.0.23", "@types/react": "^18.0.23", diff --git a/packages/example-next-13/package.json b/packages/example-next-13/package.json index 41e903984..44e65aad4 100644 --- a/packages/example-next-13/package.json +++ b/packages/example-next-13/package.json @@ -10,15 +10,13 @@ "start": "next start" }, "dependencies": { - "lodash": "^4.17.21", "next": "13.2.4", "next-intl": "^2.11.0", "react": "^18.2.0", - "react-dom": "^18.2.0", - "typescript": "^4.6.3" + "react-dom": "^18.2.0" }, "devDependencies": { - "@types/lodash": "^4.14.176", + "typescript": "^4.6.3", "@types/node": "^17.0.23", "@types/react": "^18.0.23", "eslint": "^8.12.0", diff --git a/packages/example/package.json b/packages/example/package.json index 8bd896f4c..a2a5beb5f 100644 --- a/packages/example/package.json +++ b/packages/example/package.json @@ -11,15 +11,13 @@ }, "dependencies": { "date-fns": "^2.16.1", - "lodash": "^4.17.21", "next": "^13.0.0", "next-intl": "^2.11.0", "react": "^18.2.0", - "react-dom": "^18.2.0", - "typescript": "^4.6.3" + "react-dom": "^18.2.0" }, "devDependencies": { - "@types/lodash": "^4.14.176", + "typescript": "^4.6.3", "@types/node": "^17.0.23", "@types/react": "^18.0.23", "eslint": "^8.12.0", diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index ed4c73512..cd6ec2689 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -7,7 +7,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. The `app` directory is currently in beta, patterns are still emerging and APIs may change. Please **use this at your own risk**, knowing that you might have - to face a migration effort when the `app` directory becomes stable. + to face a migration effort as the `app` directory becomes stable. ## Current beta version @@ -280,9 +280,9 @@ The middleware handles redirects and rewrites based on the detected user locale. ### Routing with a locale prefix (default) -By default, `next-intl` will map the incoming requests to your defined routes. To keep the URL short, requests for the default locale are rewritten internally to work without a locale prefix. +Since your pages are nested within a `[locale]` folder, all routes are prefixed with one of your supported locales (e.g. `/de/about`). To keep the URL short, requests for the default locale are rewritten internally to work without a locale prefix. -**Examples for rewrites:** +**Request examples:** - `/` → `/en` - `/about` → `/en/about` @@ -292,15 +292,15 @@ When the user visits a route without an explicit locale, `next-intl` matches the #### Changing locales -To change the locale, the user can visit a prefixed route. This will always take precedence over a previously matched locale that is saved in a cookie or the `accept-language` header. +To change the locale, users can visit a prefixed route. This will always take precedence over a previously matched locale that is saved in a cookie or the `accept-language` header. **Example workflow:** -1. The user requests `/` and based on the `accept-language` header, the `de` locale is matched. +1. A user requests `/` and based on the `accept-language` header, the `de` locale is matched. 2. The `de` locale is saved in a cookie and the user is redirected to `/de`. 3. In your app code, you render `Switch to English` to allow the user to change the locale to `en`. 4. When the user clicks on the link, a request to `/en` is initiated. -5. The middleware will update the cookie value to `en` and will redirect the user to `/`. +5. The middleware will update the cookie value to `en` and subsequently redirects the user to `/`. #### Always use a locale prefix @@ -351,7 +351,13 @@ export default createIntlMiddleware({ In this case, your content will be available without a locale prefix based on the domain since `next-intl` rewrites the request internally (e.g. `de.example.com/about` → `/de/about`). -The domain that is needed to match the locale is read from the `x-forwarded-host` header, with a fallback to the `host` header. If no domain matches (e.g. on localhost), the `defaultLocale` is used. +The domain that is needed to match the locale is read from the `x-forwarded-host` header, with a fallback to `host`. If no domain matches (e.g. on localhost), the `defaultLocale` is used. + + + +Note that you might want to turn on domain-based routing only in production, since the middleware will try to redirect to one of the configured domains based on the matched locale. + + #### Changing locales @@ -404,7 +410,7 @@ module.exports = withNextIntl({ Since `next-intl` isn't aware of the rewrites you've configured, you likely want to make some adjustments: 1. Turn off [the `alternateLinks` option](#alternate-links) in the middleware and provide [search engine hints about localized versions of your content](https://developers.google.com/search/docs/specialty/international/localized-versions) by yourself. -2. Translate the pathnames you're passing to the [routing APIs from `next-intl`](#routing) ([example](https://github.com/amannn/next-intl/blob/feat/next-13-rsc/packages/example-next-13-advanced/src/components/Navigation.tsx)). +2. Translate the pathnames you're passing to the [routing APIs from `next-intl`](#routing) ([example](https://github.com/amannn/next-intl/blob/feat/next-13-rsc/packages/example-next-13-named-routes/)). ## Using internationalization outside of components diff --git a/yarn.lock b/yarn.lock index 819a1e61b..e26065c1e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4132,7 +4132,7 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== -bl@^4.0.3, bl@^4.1.0: +bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -4571,27 +4571,11 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.0.0, color-name@^1.1.4, color-name@~1.1.4: +color-name@^1.1.4, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" - integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" - integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== - dependencies: - color-convert "^2.0.1" - color-string "^1.9.0" - columnify@^1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" @@ -4962,23 +4946,11 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -5058,11 +5030,6 @@ detect-indent@^6.0.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== -detect-libc@^2.0.0, detect-libc@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" - integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== - detect-newline@3.1.0, detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -5282,7 +5249,7 @@ encoding@^0.1.12: dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -6109,11 +6076,6 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - expect@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" @@ -6347,11 +6309,6 @@ fraction.js@^4.1.1: resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.1.2.tgz#13e420a92422b6cf244dff8690ed89401029fbe8" integrity sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA== -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - fs-extra@^10.0.0: version "10.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.1.tgz#27de43b4320e833f6867cc044bfce29fdf0ef3b8" @@ -6580,11 +6537,6 @@ gitconfiglocal@^1.0.0: dependencies: ini "^1.3.2" -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - github-slugger@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-2.0.0.tgz#52cf2f9279a21eb6c59dd385b410f0c0adda8f1a" @@ -7130,7 +7082,7 @@ inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: +ini@^1.3.2, ini@^1.3.4: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== @@ -7225,11 +7177,6 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - is-bigint@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" @@ -9316,11 +9263,6 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" @@ -9352,11 +9294,6 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== -minimist@^1.2.3: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - minipass-collect@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" @@ -9434,11 +9371,6 @@ minizlib@^2.0.0, minizlib@^2.1.1: minipass "^3.0.0" yallist "^4.0.0" -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - mkdirp-infer-owner@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" @@ -9516,11 +9448,6 @@ nanoid@^4.0.0: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-4.0.1.tgz#398d7ccfdbf9faf2231b2ca7e8fff5dbca6a509b" integrity sha512-udKGtCCUafD3nQtJg9wBhRP3KMbPglUsgV5JVsXhvyBs/oefqb4sqMEhKBBgqZncYowu58p1prsZQBYvAj/Gww== -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - natural-compare-lite@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" @@ -9694,18 +9621,6 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-abi@^3.3.0: - version "3.33.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.33.0.tgz#8b23a0cec84e1c5f5411836de6a9b84bccf26e7f" - integrity sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog== - dependencies: - semver "^7.3.5" - -node-addon-api@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" - integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== - node-fetch@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" @@ -10656,24 +10571,6 @@ postcss@^8.4.6: picocolors "^1.0.0" source-map-js "^1.0.2" -prebuild-install@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" - integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^3.3.0" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -10865,16 +10762,6 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - react-dom@^18.0.0, react-dom@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" @@ -11009,7 +10896,7 @@ read@1, read@~1.0.1: dependencies: mute-stream "~0.0.4" -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0: +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.4.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -11600,7 +11487,7 @@ semver@^7.1.1, semver@^7.3.2: resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== -semver@^7.3.7, semver@^7.3.8: +semver@^7.3.7: version "7.3.8" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== @@ -11631,20 +11518,6 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -sharp@0.31.3: - version "0.31.3" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.31.3.tgz#60227edc5c2be90e7378a210466c99aefcf32688" - integrity sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg== - dependencies: - color "^4.2.3" - detect-libc "^2.0.1" - node-addon-api "^5.0.0" - prebuild-install "^7.1.1" - semver "^7.3.8" - simple-get "^4.0.1" - tar-fs "^2.1.1" - tunnel-agent "^0.6.0" - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -11710,27 +11583,6 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^4.0.0, simple-get@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== - dependencies: - is-arrayish "^0.3.1" - sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -12151,11 +12003,6 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - strong-log-transformer@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" @@ -12261,27 +12108,6 @@ tailwindcss@^3.2.4: quick-lru "^5.1.1" resolve "^1.22.1" -tar-fs@^2.0.0, tar-fs@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - tar@^4.4.12: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" From 0472497ab1070cba0fba7c77d499ff6d1f4623fe Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 14 Mar 2023 11:38:46 +0100 Subject: [PATCH 178/312] Export `getFormatter` --- .../src/app/[locale]/layout.tsx | 11 ++++++++--- .../example-next-13-advanced/tests/main.spec.ts | 13 +++++++++++++ packages/next-intl/src/server/getIntl.tsx | 10 ++++++++++ packages/next-intl/src/server/index.tsx | 1 + 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/packages/example-next-13-advanced/src/app/[locale]/layout.tsx b/packages/example-next-13-advanced/src/app/[locale]/layout.tsx index 76bdc91c6..49c5cc5af 100644 --- a/packages/example-next-13-advanced/src/app/[locale]/layout.tsx +++ b/packages/example-next-13-advanced/src/app/[locale]/layout.tsx @@ -1,5 +1,6 @@ +import {Metadata} from 'next'; import {useLocale} from 'next-intl'; -import {getTranslations} from 'next-intl/server'; +import {getTranslations, getFormatter} from 'next-intl/server'; import {notFound} from 'next/navigation'; import {ReactNode} from 'react'; @@ -8,12 +9,16 @@ type Props = { params: {locale: string}; }; -export async function generateMetadata() { +export async function generateMetadata(): Promise { const t = await getTranslations('LocaleLayout'); + const formatter = await getFormatter(); return { title: t('title'), - description: t('description') + description: t('description'), + other: { + currentYear: formatter.dateTime(new Date(), {year: 'numeric'}) + } }; } diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index c9d475a41..256b65b89 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -412,3 +412,16 @@ it('can use the formatter', async ({page}) => { await expect(page.getByTestId('CurrentTimeRelative')).toHaveText('now'); await expect(page.getByTestId('Number')).toHaveText('€23,102.00'); }); + +it('populates metadata', async ({page}) => { + await page.goto('/en'); + await expect(page).toHaveTitle('next-intl example'); + await expect(page.locator('meta[name="description"]')).toHaveAttribute( + 'content', + 'This is an example of using next-intl in the `app` directory.' + ); + await expect(page.locator('meta[name="currentYear"]')).toHaveAttribute( + 'content', + '2023' + ); +}); diff --git a/packages/next-intl/src/server/getIntl.tsx b/packages/next-intl/src/server/getIntl.tsx index 48e6e496d..ab701e956 100644 --- a/packages/next-intl/src/server/getIntl.tsx +++ b/packages/next-intl/src/server/getIntl.tsx @@ -2,7 +2,17 @@ import {cache} from 'react'; import {createIntl} from 'use-intl/dist/src/core'; import getConfig from './getConfig'; +let hasWarned = false; + +/** @deprecated Please switch to `getFormatter`. */ const getIntl = cache(async () => { + if (!hasWarned) { + hasWarned = true; + console.warn( + '`getIntl()` is deprecated and will be removed in the next major version. Please switch to `getFormatter()`.' + ); + } + const config = await getConfig(); return createIntl(config); }); diff --git a/packages/next-intl/src/server/index.tsx b/packages/next-intl/src/server/index.tsx index c4b5a2383..c114754ef 100644 --- a/packages/next-intl/src/server/index.tsx +++ b/packages/next-intl/src/server/index.tsx @@ -11,6 +11,7 @@ export function createIntlMiddleware() { export {default as getRequestConfig} from './getRequestConfig'; export {default as getIntl} from './getIntl'; +export {default as getFormatter} from './getFormatter'; export {default as getLocale} from './getLocale'; export {default as getNow} from './getNow'; export {default as getTimeZone} from './getTimeZone'; From fe46d95a136ed4b8fd4c71d93265abab59a10d50 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 14 Mar 2023 11:46:13 +0100 Subject: [PATCH 179/312] 2.12.0-beta.4 --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index cd6ec2689..ac8ebc11c 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -13,7 +13,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current beta version ``` -npm install next-intl@2.12.0-beta.3 +npm install next-intl@2.12.0-beta.4 ``` This beta version was tested with `next@13.2.4`. From 3d7cc1deca6aa397b6e6e3baa3208a9c5283ef79 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 14 Mar 2023 17:35:33 +0100 Subject: [PATCH 180/312] feat: Improve locale detection for prefixed routing (#214) --- .../src/middleware/getLocaleFromPathname.tsx | 3 + .../next-intl/src/middleware/middleware.tsx | 10 +- .../src/middleware/resolveLocale.tsx | 10 +- .../test/middleware/middleware.test.tsx | 94 +++++++++++++++++-- 4 files changed, 100 insertions(+), 17 deletions(-) create mode 100644 packages/next-intl/src/middleware/getLocaleFromPathname.tsx diff --git a/packages/next-intl/src/middleware/getLocaleFromPathname.tsx b/packages/next-intl/src/middleware/getLocaleFromPathname.tsx new file mode 100644 index 000000000..410326ca3 --- /dev/null +++ b/packages/next-intl/src/middleware/getLocaleFromPathname.tsx @@ -0,0 +1,3 @@ +export default function getLocaleFromPathname(pathname: string) { + return pathname.split('/')[1]; +} diff --git a/packages/next-intl/src/middleware/middleware.tsx b/packages/next-intl/src/middleware/middleware.tsx index 77bfb7257..42b4217b6 100644 --- a/packages/next-intl/src/middleware/middleware.tsx +++ b/packages/next-intl/src/middleware/middleware.tsx @@ -4,6 +4,7 @@ import NextIntlMiddlewareConfig, { NextIntlMiddlewareConfigWithDefaults } from './NextIntlMiddlewareConfig'; import getAlternateLinksHeaderValue from './getAlternateLinksHeaderValue'; +import getLocaleFromPathname from './getLocaleFromPathname'; import resolveLocale from './resolveLocale'; const ROOT_URL = '/'; @@ -140,9 +141,14 @@ export default function createIntlMiddleware(config: NextIntlMiddlewareConfig) { response = redirect(pathWithSearch); } } else { - const pathLocale = configWithDefaults.locales.find((cur) => - request.nextUrl.pathname.startsWith(`/${cur}`) + const pathLocaleCandidate = getLocaleFromPathname( + request.nextUrl.pathname ); + const pathLocale = configWithDefaults.locales.includes( + pathLocaleCandidate + ) + ? pathLocaleCandidate + : undefined; const hasLocalePrefix = pathLocale != null; let pathWithSearch = request.nextUrl.pathname; diff --git a/packages/next-intl/src/middleware/resolveLocale.tsx b/packages/next-intl/src/middleware/resolveLocale.tsx index f2b47dee5..a7285f92b 100644 --- a/packages/next-intl/src/middleware/resolveLocale.tsx +++ b/packages/next-intl/src/middleware/resolveLocale.tsx @@ -8,6 +8,7 @@ import { RoutingConfigDomain } from './NextIntlMiddlewareConfig'; import getHost from './getHost'; +import getLocaleFromPathname from './getLocaleFromPathname'; function findLocaleDomain( requestHeaders: Headers, @@ -43,12 +44,9 @@ function resolveLocaleFromPrefix( // Prio 1: Use route prefix if (pathname) { - const segments = pathname.split('/'); - if (segments.length > 1) { - const segment = segments[1]; - if (locales.includes(segment)) { - locale = segment; - } + const pathLocale = getLocaleFromPathname(pathname); + if (locales.includes(pathLocale)) { + locale = pathLocale; } } diff --git a/packages/next-intl/test/middleware/middleware.test.tsx b/packages/next-intl/test/middleware/middleware.test.tsx index 3e0f8b9b7..aab0aba03 100644 --- a/packages/next-intl/test/middleware/middleware.test.tsx +++ b/packages/next-intl/test/middleware/middleware.test.tsx @@ -2,8 +2,6 @@ import {RequestCookies} from 'next/dist/compiled/@edge-runtime/cookies'; import {NextRequest, NextResponse} from 'next/server'; import createIntlMiddleware from '../../src/middleware'; -(global as any).Request = class Request {}; - type MockResponse = NextResponse & { args: Array; }; @@ -15,15 +13,15 @@ jest.mock('next/server', () => { }; return { NextResponse: { - next: jest.fn((...args) => ({...response, args})), - rewrite: jest.fn((...args) => ({...response, args})), - redirect: jest.fn((...args) => ({...response, args})) + next: jest.fn(() => response), + rewrite: jest.fn(() => response), + redirect: jest.fn(() => response) } }; }); function createMockRequest( - pathname = '/', + pathnameWithSearch = '/', locale: 'en' | 'de' = 'en', host = 'http://localhost:3000' ) { @@ -32,14 +30,18 @@ function createMockRequest( locale === 'en' ? 'en-US,en;q=0.9,de;q=0.8' : 'de-DE,de;q=0.9,en;q=0.8', host: new URL(host).host }); + const url = host + pathnameWithSearch; return { headers, cookies: new RequestCookies(headers), - url: host + pathname, + url, nextUrl: { - pathname, - search: '' + pathname: pathnameWithSearch.replace(/\?.*$/, ''), + href: url, + search: pathnameWithSearch.includes('?') + ? '?' + pathnameWithSearch.split('?')[1] + : '' } } as NextRequest; } @@ -72,6 +74,33 @@ describe('type: prefix', () => { ); }); + it('rewrites requests for the default locale with query params at the root', () => { + middleware(createMockRequest('/?sort=asc')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://localhost:3000/en?sort=asc' + ); + }); + + it('rewrites requests for the default locale with query params at a nested path', () => { + middleware(createMockRequest('/list?sort=asc')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://localhost:3000/en/list?sort=asc' + ); + }); + + it('handles hashes for the default locale', () => { + middleware(createMockRequest('/#asdf')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://localhost:3000/en/#asdf' + ); + }); + it('redirects requests for the default locale when prefixed at the root', () => { middleware(createMockRequest('/en')); expect(MockedNextResponse.next).not.toHaveBeenCalled(); @@ -99,6 +128,34 @@ describe('type: prefix', () => { ); }); + it('serves requests for other locales when prefixed', () => { + middleware(createMockRequest('/de')); + expect(MockedNextResponse.next).toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + }); + + it('serves requests for other locales when prefixed with a trailing slash', () => { + middleware(createMockRequest('/de/')); + expect(MockedNextResponse.next).toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + }); + + it('serves requests for other locales with query params at the root', () => { + middleware(createMockRequest('/de?sort=asc')); + expect(MockedNextResponse.next).toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + }); + + it('serves requests for other locales with query params at a nested path', () => { + middleware(createMockRequest('/de/list?sort=asc')); + expect(MockedNextResponse.next).toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + }); + it('sets a cookie', () => { const response = middleware(createMockRequest('/')); expect(response.cookies.get('NEXT_LOCALE')).toEqual({ @@ -136,6 +193,25 @@ describe('type: prefix', () => { ); }); + it('redirects when a pathname starts with the locale characters', () => { + middleware(createMockRequest('/engage')); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( + 'http://localhost:3000/en/engage' + ); + + middleware(createMockRequest('/engage?test')); + expect(MockedNextResponse.redirect.mock.calls[1][0].toString()).toBe( + 'http://localhost:3000/en/engage?test' + ); + + middleware(createMockRequest('/engage/test')); + expect(MockedNextResponse.redirect.mock.calls[2][0].toString()).toBe( + 'http://localhost:3000/en/engage/test' + ); + }); + it('serves requests for the default locale', () => { middleware(createMockRequest('/en')); expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); From b965568b46bacfd76338c35b8802f4f25d0981c9 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 14 Mar 2023 17:38:18 +0100 Subject: [PATCH 181/312] 2.12.0-beta.5 --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index ac8ebc11c..c158d053c 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -13,7 +13,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current beta version ``` -npm install next-intl@2.12.0-beta.4 +npm install next-intl@2.12.0-beta.5 ``` This beta version was tested with `next@13.2.4`. From 8a30f81d778adcb050a047aba863d3234a6cab10 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 17 Mar 2023 09:56:13 +0100 Subject: [PATCH 182/312] Link to article on Smashing Magazine --- .../next.config.js | 19 +++++++++---- .../pages/docs/next-13/server-components.mdx | 28 ++++++++++++++----- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/packages/example-next-13-named-routes/next.config.js b/packages/example-next-13-named-routes/next.config.js index e4321e788..bb18cbb4e 100644 --- a/packages/example-next-13-named-routes/next.config.js +++ b/packages/example-next-13-named-routes/next.config.js @@ -5,17 +5,24 @@ module.exports = withNextIntl({ experimental: {appDir: true}, rewrites() { - // Routes are set up for the default locale (en) in the app. This - // rewrites all non-en routes to their internal equivalent. + // Routes are set up for the default locale ("en") in the app. This + // rewrites all non-English routes to their internal equivalent. + // E.g. `/gitarren/gibson-les-paul` → `/guitars/gibson-les-paul` const locales = Object.keys(routesByLocale).filter( (locale) => locale !== 'en' ); return locales.flatMap((locale) => - Object.keys(routesByLocale[locale]).map((routeName) => ({ - source: `/${locale}${routesByLocale[locale][routeName]}`, - destination: `/${locale}${routesByLocale.en[routeName]}` - })) + Object.entries(routesByLocale[locale]) + + // No need to rewrite the root route + .filter(([, routePath]) => routePath !== '/') + + // Rewrite the localized pathname to the equivalent route from "en" + .map(([routeName, routePath]) => ({ + source: `/${locale}${routePath}`, + destination: `/${locale}${routesByLocale.en[routeName]}` + })) ); } }); diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index c158d053c..67b623560 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -219,17 +219,21 @@ export default async function Profile() { } ``` -## Switching to Client Components +## Using translations in Client Components -If you need to use translations in Client Components, the best approach is to pass the generated labels as props. +If you need to use translations or other functionality from `next-intl` in Client Components, the best approach is to pass the labels as props or `children` from a Server Component. -```tsx filename="[locale]/faq/page.tsx" {6} +```tsx filename="[locale]/faq/page.tsx" {7-9} import {useTranslations} from 'next-intl'; import Expandable from './Expandable'; -export default function FAQ() { - const t = useTranslations('FAQ'); - return {t('description')}; +export default function FAQEntry() { + const t = useTranslations('FAQEntry'); + return ( + + + + ); } ``` @@ -248,7 +252,7 @@ function Expandable({title, children}) { return (
    - {expanded &&

    {children}

    } + {expanded &&
    {children}
    }
    ); } @@ -256,6 +260,16 @@ function Expandable({title, children}) { This way your messages never leave the server and the client only needs to load the code that is necessary for initializing your interactive components. +If you need to integrate your translations with interactively-controlled state, you can still manage your translations on the server side by using one of the following techniques. + +**Examples for state that can be read on the server side:** + +- [Page- or search params](https://beta.nextjs.org/docs/api-reference/file-conventions/page) +- [Cookies](https://beta.nextjs.org/docs/api-reference/cookies) +- [Database state](https://beta.nextjs.org/docs/data-fetching/fundamentals) + +There's [an article about using `next-intl` in Server Components](https://www.smashingmagazine.com/2023/03/internationalization-nextjs-13-react-server-components) which explores this topic in more detail, specifically [the section about adding interactivity](https://www.smashingmagazine.com/2023/03/internationalization-nextjs-13-react-server-components/#adding-interactivity-dynamic-ordering-of-photos). + If you absolutely need to use functionality from `next-intl` on the client side, you can wrap the respective components with `NextIntlClientProvider` ([example code](https://github.com/amannn/next-intl/blob/feat/next-13-rsc/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx)). Note however that this will increase your client bundle size. ## Global request configuration From d60e63f9e49c9852e44e4193f528ed3be8a1e85a Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 17 Mar 2023 10:11:55 +0100 Subject: [PATCH 183/312] Improve wording about usage in Client Components --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 67b623560..2bfbf2f66 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -270,7 +270,7 @@ If you need to integrate your translations with interactively-controlled state, There's [an article about using `next-intl` in Server Components](https://www.smashingmagazine.com/2023/03/internationalization-nextjs-13-react-server-components) which explores this topic in more detail, specifically [the section about adding interactivity](https://www.smashingmagazine.com/2023/03/internationalization-nextjs-13-react-server-components/#adding-interactivity-dynamic-ordering-of-photos). -If you absolutely need to use functionality from `next-intl` on the client side, you can wrap the respective components with `NextIntlClientProvider` ([example code](https://github.com/amannn/next-intl/blob/feat/next-13-rsc/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx)). Note however that this will increase your client bundle size. +If you absolutely need to use functionality from `next-intl` on the client side, you can wrap the respective components with `NextIntlClientProvider` ([example code](https://github.com/amannn/next-intl/blob/feat/next-13-rsc/packages/example-next-13-advanced/src/components/client/02-MessagesOnClientCounter/Counter.tsx)). Note however that this is a performance tradeoff since the relevant messages need to be serialized into the document and the used APIs from `next-intl` need to be included in the client-side bundle. ## Global request configuration From 17b245e78f7a1539ba874ecc9c7697a6053190e5 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 17 Mar 2023 10:38:46 +0100 Subject: [PATCH 184/312] Improve error message for static rendering --- packages/next-intl/src/server/getLocale.tsx | 28 ++++++++++++++----- .../pages/docs/next-13/server-components.mdx | 4 +-- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/packages/next-intl/src/server/getLocale.tsx b/packages/next-intl/src/server/getLocale.tsx index db968e1bd..2d95e2c62 100644 --- a/packages/next-intl/src/server/getLocale.tsx +++ b/packages/next-intl/src/server/getLocale.tsx @@ -5,13 +5,27 @@ import {COOKIE_LOCALE_NAME, HEADER_LOCALE_NAME} from '../shared/constants'; const getLocale = cache(() => { let locale; - // A header is only set when we're changing the locale, - // otherwise we reuse an existing one from a cookie. - const requestHeaders = headers(); - if (requestHeaders.has(HEADER_LOCALE_NAME)) { - locale = requestHeaders.get(HEADER_LOCALE_NAME); - } else { - locale = cookies().get(COOKIE_LOCALE_NAME)?.value; + try { + // A header is only set when we're changing the locale, + // otherwise we reuse an existing one from the cookie. + const requestHeaders = headers(); + if (requestHeaders.has(HEADER_LOCALE_NAME)) { + locale = requestHeaders.get(HEADER_LOCALE_NAME); + } else { + locale = cookies().get(COOKIE_LOCALE_NAME)?.value; + } + } catch (error) { + if ( + error instanceof Error && + (error as any).digest === 'DYNAMIC_SERVER_USAGE' + ) { + throw new Error( + 'Usage of next-intl APIs in Server Components is currently only available for dynamic rendering (i.e. no `generateStaticParams`).\n\nSupport for static rendering is under consideration, please refer to the roadmap: https://next-intl-docs.vercel.app/docs/next-13/server-components#roadmap', + {cause: error} + ); + } else { + throw error; + } } if (!locale) { diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 2bfbf2f66..57e6d17fa 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -21,7 +21,7 @@ This beta version was tested with `next@13.2.4`. ## Roadmap - ✅ All APIs from `next-intl` can be used in Server Components. -- 💡 Currently SSR-only (i.e. no `generateStaticParams`), therefore use [CDN caching](#cdn-caching). +- 💡 Currently SSR-only (i.e. no `generateStaticParams`), therefore consider [CDN caching](#cdn-caching). For details, see the [pending pull request for Server Components support](https://github.com/amannn/next-intl/pull/149). @@ -457,7 +457,7 @@ import { ## CDN caching -Since `next-intl` is currently SSR-only, it's a good idea to use [CDN caching](https://vercel.com/docs/concepts/edge-network/caching#stale-while-revalidate) via [`headers`](https://nextjs.org/docs/api-reference/next.config.js/headers) in `next.config.js` to get the same level of performance from SSR'd pages as you'd get from SSG ([learn more](https://youtu.be/bfLFHp7Sbkg?t=490)). +Since `next-intl` is currently SSR-only, it's a good idea to use [CDN caching](https://vercel.com/docs/concepts/edge-network/caching#stale-while-revalidate) via [`headers`](https://nextjs.org/docs/api-reference/next.config.js/headers) in `next.config.js` to get the same level of performance from dynamic rendering as you'd get from static rendering ([learn more](https://youtu.be/bfLFHp7Sbkg?t=490)). Also note that [the Next.js Cache](https://nextjs.org/blog/next-13-2#nextjs-cache) improves the performance for dynamically rendered pages. ```js filename="next.config.js" const ms = require('ms'); From 89e90e2fe7a5e39a4d473b1bce2a7c54ea0935db Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 17 Mar 2023 11:31:06 +0100 Subject: [PATCH 185/312] Upgrade example-next-13-with-pages to latest Next.js version --- packages/example-next-13-with-pages/next-env.d.ts | 1 + packages/example-next-13-with-pages/package.json | 4 ++-- .../example-next-13-with-pages/src/app/[locale]/page.tsx | 6 +++--- packages/example-next-13-with-pages/tsconfig.json | 3 ++- yarn.lock | 2 +- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/packages/example-next-13-with-pages/next-env.d.ts b/packages/example-next-13-with-pages/next-env.d.ts index 4f11a03dc..fd36f9494 100644 --- a/packages/example-next-13-with-pages/next-env.d.ts +++ b/packages/example-next-13-with-pages/next-env.d.ts @@ -1,5 +1,6 @@ /// /// +/// // NOTE: This file should not be edited // see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/packages/example-next-13-with-pages/package.json b/packages/example-next-13-with-pages/package.json index 83529bb32..0741be8a4 100644 --- a/packages/example-next-13-with-pages/package.json +++ b/packages/example-next-13-with-pages/package.json @@ -10,8 +10,8 @@ "start": "next start" }, "dependencies": { - "next": "^13.1.1", - "next-intl": "^2.10.2", + "next": "13.2.4", + "next-intl": "*", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/packages/example-next-13-with-pages/src/app/[locale]/page.tsx b/packages/example-next-13-with-pages/src/app/[locale]/page.tsx index 1597cd40b..083d9aed5 100644 --- a/packages/example-next-13-with-pages/src/app/[locale]/page.tsx +++ b/packages/example-next-13-with-pages/src/app/[locale]/page.tsx @@ -1,4 +1,4 @@ -import {LocalizedLink, useLocale, useTranslations} from 'next-intl'; +import {Link, useLocale, useTranslations} from 'next-intl'; import LocaleSwitcher from '../../components/LocaleSwitcher'; import PageLayout from '../../components/PageLayout'; @@ -11,9 +11,9 @@ export default function Index() {

    {t('description')}

    - + {t('navigateToAbout')} - +

    ); diff --git a/packages/example-next-13-with-pages/tsconfig.json b/packages/example-next-13-with-pages/tsconfig.json index 1c6c979ae..fbc267007 100644 --- a/packages/example-next-13-with-pages/tsconfig.json +++ b/packages/example-next-13-with-pages/tsconfig.json @@ -21,7 +21,8 @@ { "name": "next" } - ] + ], + "strictNullChecks": true }, "include": [ "next-env.d.ts", diff --git a/yarn.lock b/yarn.lock index e26065c1e..bf8ba6133 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9544,7 +9544,7 @@ next@^13.0.0: "@next/swc-win32-ia32-msvc" "13.0.0" "@next/swc-win32-x64-msvc" "13.0.0" -next@^13.1.0, next@^13.1.1: +next@^13.1.0: version "13.1.6" resolved "https://registry.yarnpkg.com/next/-/next-13.1.6.tgz#054babe20b601f21f682f197063c9b0b32f1a27c" integrity sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw== From 79d95cc7792577fcd7eb3d17f5338ed8c90d57cc Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 21 Mar 2023 18:52:35 +0100 Subject: [PATCH 186/312] Add Vercel Analytics --- packages/website/package.json | 1 + packages/website/pages/_app.js | 3 +++ packages/website/pages/docs/next-13/index.mdx | 2 +- packages/website/pages/docs/usage/messages.mdx | 4 ++-- packages/website/pages/index.mdx | 2 +- yarn.lock | 5 +++++ 6 files changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/website/package.json b/packages/website/package.json index 3706a002f..8add065a1 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -12,6 +12,7 @@ "dependencies": { "@next/font": "13.1.6", "@tailwindcss/typography": "0.5.9", + "@vercel/analytics": "0.1.11", "clsx": "1.2.1", "next": "^13.1.0", "nextra": "^2.0.0", diff --git a/packages/website/pages/_app.js b/packages/website/pages/_app.js index 89685a5a5..8581ef9ea 100644 --- a/packages/website/pages/_app.js +++ b/packages/website/pages/_app.js @@ -1,4 +1,6 @@ import {Inter} from '@next/font/google'; +// eslint-disable-next-line import/no-unresolved +import {Analytics} from '@vercel/analytics/react'; import 'nextra-theme-docs/style.css'; import '../styles.css'; @@ -9,6 +11,7 @@ export default function App({Component, pageProps}) { return (
    {getLayout()} +
    ); } diff --git a/packages/website/pages/docs/next-13/index.mdx b/packages/website/pages/docs/next-13/index.mdx index 7c81847a6..88602bce6 100644 --- a/packages/website/pages/docs/next-13/index.mdx +++ b/packages/website/pages/docs/next-13/index.mdx @@ -4,7 +4,7 @@ With the introduction of [the `app` directory](https://beta.nextjs.org/docs/rout There are two major changes that affect `next-intl`: -1. Next.js is removing their built-in [internationalized routing](https://nextjs.org/docs/advanced-features/i18n-routing), leaving the implementation of this up to the user. To fill in the gap, `next-intl` provides a **drop-in replacement for i18n routing**, handling the locale negotiation, redirects and cookies. +1. Next.js is removing their built-in [internationalized routing](https://nextjs.org/docs/advanced-features/i18n-routing), leaving the implementation of this up to the user. To fill in the gap, `next-intl` provides a **drop-in middleware replacement for i18n routing**, handling the locale negotiation, redirects and cookies. 2. Next.js now supports **React Server Components**. There are currently two ways how you can set your app up with `next-intl` in the `app` directory: diff --git a/packages/website/pages/docs/usage/messages.mdx b/packages/website/pages/docs/usage/messages.mdx index 7c3b0efbd..73ce37dd8 100644 --- a/packages/website/pages/docs/usage/messages.mdx +++ b/packages/website/pages/docs/usage/messages.mdx @@ -84,7 +84,7 @@ export async function getStaticProps({locale}) { // You can get the messages from anywhere you like. The recommended // pattern is to put them in JSON files separated by language and read // the desired one based on the `locale` received from Next.js. - messages: (await import(`../../messages/index/${locale}.json`)).default + messages: (await import(`../../messages/${locale}.json`)).default } }; } @@ -101,7 +101,7 @@ export async function getStaticProps({locale}) { return { props: { messages: pick( - (await import(`../../messages/index/${locale}.json`)).default, + (await import(`../../messages/${locale}.json`)).default, namespaces ) } diff --git a/packages/website/pages/index.mdx b/packages/website/pages/index.mdx index 1015eb369..13538f9a3 100644 --- a/packages/website/pages/index.mdx +++ b/packages/website/pages/index.mdx @@ -23,7 +23,7 @@ import Hero from 'components/Hero';
    Date: Mon, 3 Apr 2023 17:31:40 +0200 Subject: [PATCH 187/312] Fix typo (thanks to @frans-slabbekoorn!) --- packages/example-next-13-advanced/src/i18n.tsx | 2 +- packages/example-next-13-advanced/tests/main.spec.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/example-next-13-advanced/src/i18n.tsx b/packages/example-next-13-advanced/src/i18n.tsx index fad565fc2..2240fce02 100644 --- a/packages/example-next-13-advanced/src/i18n.tsx +++ b/packages/example-next-13-advanced/src/i18n.tsx @@ -37,7 +37,7 @@ export default getRequestConfig(async ({locale}) => { }, getMessageFallback({key, namespace}) { return ( - '`getMessageFalback` called for ' + + '`getMessageFallback` called for ' + [namespace, key].filter((part) => part != null).join('.') ); } diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index 256b65b89..f58bad79f 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -151,7 +151,7 @@ it('can use `getMessageFallback`', async ({page}) => { await page.goto('/en'); const element = page.getByTestId('MissingMessage'); expect(await element.innerHTML()).toBe( - '`getMessageFalback` called for Index.missing' + '`getMessageFallback` called for Index.missing' ); }); From 36ae25df76468431c50d9bc18aa24f8127687d09 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 5 Apr 2023 15:23:55 +0200 Subject: [PATCH 188/312] feat: Next.js 13 RSC Domain middleware improvements (#223) **Changes:** - Allow domain-based routing to handle multiple locales (e.g. `ca.example.com/fr`) - Support `localePrefix` for domain-based routing - Handle unknown hosts like `localhost` gracefully with domain-based routing - Add `localeDetection: false` option - Improve matcher suggestion in docs Please see the updated docs to learn more. --- .../src/middleware.ts | 2 +- packages/next-intl/.eslintrc.js | 11 +- packages/next-intl/package.json | 1 + .../middleware/NextIntlMiddlewareConfig.tsx | 51 +- .../getAlternateLinksHeaderValue.tsx | 33 +- packages/next-intl/src/middleware/getHost.tsx | 7 - .../src/middleware/getLocaleFromPathname.tsx | 3 - .../next-intl/src/middleware/middleware.tsx | 178 ++++--- .../src/middleware/resolveLocale.tsx | 114 +++-- packages/next-intl/src/middleware/utils.tsx | 61 +++ .../client/NextIntlClientProvider.test.tsx | 3 +- .../getAlternateLinksHeaderValue.test.tsx | 142 ++++-- .../test/middleware/middleware.test.tsx | 438 ++++++++++++++---- packages/website/.gitignore | 1 + .../pages/docs/next-13/server-components.mdx | 157 +++++-- yarn.lock | 76 +++ 16 files changed, 933 insertions(+), 345 deletions(-) delete mode 100644 packages/next-intl/src/middleware/getHost.tsx delete mode 100644 packages/next-intl/src/middleware/getLocaleFromPathname.tsx create mode 100644 packages/next-intl/src/middleware/utils.tsx diff --git a/packages/example-next-13-advanced/src/middleware.ts b/packages/example-next-13-advanced/src/middleware.ts index 0c5f4a079..4c8d64e98 100644 --- a/packages/example-next-13-advanced/src/middleware.ts +++ b/packages/example-next-13-advanced/src/middleware.ts @@ -7,5 +7,5 @@ export default createIntlMiddleware({ export const config = { // Skip all paths that should not be internationalized - matcher: ['/((?!_next|assets|favicon.ico).*)'] + matcher: ['/((?!_next|.*\\..*).*)'] }; diff --git a/packages/next-intl/.eslintrc.js b/packages/next-intl/.eslintrc.js index 05fd65010..8c14d5eb9 100644 --- a/packages/next-intl/.eslintrc.js +++ b/packages/next-intl/.eslintrc.js @@ -1,5 +1,14 @@ require('eslint-config-molindo/setupPlugins'); module.exports = { - extends: ['molindo/typescript', 'molindo/react'] + extends: ['molindo/typescript', 'molindo/react', 'molindo/jest'], + plugins: ['deprecation'], + overrides: [ + { + files: ['test/**/*.tsx'], + rules: { + 'deprecation/deprecation': 'error' + } + } + ] }; diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 0ded47b23..63fe8f381 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -79,6 +79,7 @@ "dts-cli": "1.4.0", "eslint": "8.12.0", "eslint-config-molindo": "6.0.0", + "eslint-plugin-deprecation": "1.4.0", "next": "13.2.4", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/next-intl/src/middleware/NextIntlMiddlewareConfig.tsx b/packages/next-intl/src/middleware/NextIntlMiddlewareConfig.tsx index acf1bc327..023738fd8 100644 --- a/packages/next-intl/src/middleware/NextIntlMiddlewareConfig.tsx +++ b/packages/next-intl/src/middleware/NextIntlMiddlewareConfig.tsx @@ -1,4 +1,4 @@ -export type RoutingConfigPrefix = { +type RoutingConfigPrefix = { type: 'prefix'; /** The default locale can be used without a prefix (e.g. `/about`). If you prefer to have a prefix for the default locale as well (e.g. `/en/about`), you can switch this option to `always`. @@ -6,39 +6,58 @@ export type RoutingConfigPrefix = { prefix?: 'as-needed' | 'always'; }; -export type DomainConfig = { - /** The domain name (e.g. "example.de" or "de.example.com"). */ - domain: string; - - locale: string; -}; - -export type RoutingConfigDomain = { +type RoutingConfigDomain = { type: 'domain'; /** Provide a list of mappings between domains and locales. Note that the `x-forwarded-host` or alternatively the `host` header will be used to determine the requested domain. */ domains: Array<{domain: string; locale: string}>; }; -type NextIntlMiddlewareConfig = { +type LocalePrefix = 'as-needed' | 'always'; + +type RoutingBaseConfig = { /** A list of all locales that are supported. */ locales: Array; /* Used by default if none of the defined locales match. */ defaultLocale: string; + /** The default locale can be used without a prefix (e.g. `/about`). If you prefer to have a prefix for the default locale as well (e.g. `/en/about`), you can switch this option to `always`. + */ + localePrefix?: LocalePrefix; +}; + +export type DomainConfig = Omit< + RoutingBaseConfig, + 'locales' | 'localePrefix' +> & { + /** The domain name (e.g. "example.com", "www.example.com" or "fr.example.com"). Note that the `x-forwarded-host` or alternatively the `host` header will be used to determine the requested domain. */ + domain: string; + // Optional here + locales?: RoutingBaseConfig['locales']; + + /** @deprecated Use `defaultLocale` instead. */ + locale?: string; +}; + +type MiddlewareConfig = RoutingBaseConfig & { + /** Can be used to change the locale handling per domain. */ + domains?: Array; + + /** By setting this to `false`, the `accept-language` header will no longer be used for locale detection. */ + localeDetection?: boolean; + /** Sets the `Link` response header to notify search engines about content in other languages (defaults to `true`). See https://developers.google.com/search/docs/specialty/international/localized-versions#http */ alternateLinks?: boolean; - /** @deprecated Deprecated in favour of `routing`. */ - domains?: Array<{domain: string; defaultLocale: string}>; - + /** @deprecated Deprecated in favor of `localePrefix` and `domains`. */ routing?: RoutingConfigPrefix | RoutingConfigDomain; }; -export type NextIntlMiddlewareConfigWithDefaults = NextIntlMiddlewareConfig & { +export type MiddlewareConfigWithDefaults = MiddlewareConfig & { alternateLinks: boolean; - routing: RoutingConfigPrefix | RoutingConfigDomain; + localePrefix: LocalePrefix; + localeDetection: boolean; }; -export default NextIntlMiddlewareConfig; +export default MiddlewareConfig; diff --git a/packages/next-intl/src/middleware/getAlternateLinksHeaderValue.tsx b/packages/next-intl/src/middleware/getAlternateLinksHeaderValue.tsx index ac174c426..bb948ce95 100644 --- a/packages/next-intl/src/middleware/getAlternateLinksHeaderValue.tsx +++ b/packages/next-intl/src/middleware/getAlternateLinksHeaderValue.tsx @@ -1,12 +1,10 @@ import {NextRequest} from 'next/server'; -import NextIntlMiddlewareConfig, { - NextIntlMiddlewareConfigWithDefaults +import MiddlewareConfig, { + MiddlewareConfigWithDefaults } from './NextIntlMiddlewareConfig'; +import {isLocaleSupportedOnDomain} from './utils'; -function getUnprefixedUrl( - config: NextIntlMiddlewareConfig, - request: NextRequest -) { +function getUnprefixedUrl(config: MiddlewareConfig, request: NextRequest) { const url = new URL(request.url); if (!url.pathname.endsWith('/')) { url.pathname += '/'; @@ -33,7 +31,7 @@ function getAlternateEntry(url: string, locale: string) { * See https://developers.google.com/search/docs/specialty/international/localized-versions */ export default function getAlternateLinksHeaderValue( - config: NextIntlMiddlewareConfigWithDefaults, + config: MiddlewareConfigWithDefaults, request: NextRequest ) { const unprefixedUrl = getUnprefixedUrl(config, request); @@ -50,22 +48,29 @@ export default function getAlternateLinksHeaderValue( let url; - if (config.routing.type === 'domain') { + if (config.domains) { const domainConfigs = - config.routing.domains.filter((cur) => cur.locale === locale) || []; + config.domains.filter((cur) => + isLocaleSupportedOnDomain(locale, cur) + ) || []; return domainConfigs.map((domainConfig) => { url = new URL(unprefixedUrl); url.port = ''; url.host = domainConfig.domain; + + if ( + locale !== domainConfig.defaultLocale || + config.localePrefix === 'always' + ) { + localizePathname(url); + } + return getAlternateEntry(url.toString(), locale); }); } else { url = new URL(unprefixedUrl); - if ( - locale !== config.defaultLocale || - config.routing.prefix === 'always' - ) { + if (locale !== config.defaultLocale || config.localePrefix === 'always') { localizePathname(url); } } @@ -74,7 +79,7 @@ export default function getAlternateLinksHeaderValue( }); // Add x-default entry - if (config.routing.type === 'prefix') { + if (!config.domains) { const url = new URL(unprefixedUrl); links.push(getAlternateEntry(url.toString(), 'x-default')); } else { diff --git a/packages/next-intl/src/middleware/getHost.tsx b/packages/next-intl/src/middleware/getHost.tsx deleted file mode 100644 index 9d420659e..000000000 --- a/packages/next-intl/src/middleware/getHost.tsx +++ /dev/null @@ -1,7 +0,0 @@ -export default function getHost(requestHeaders: Headers) { - return ( - requestHeaders.get('x-forwarded-host') ?? - requestHeaders.get('host') ?? - undefined - ); -} diff --git a/packages/next-intl/src/middleware/getLocaleFromPathname.tsx b/packages/next-intl/src/middleware/getLocaleFromPathname.tsx deleted file mode 100644 index 410326ca3..000000000 --- a/packages/next-intl/src/middleware/getLocaleFromPathname.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function getLocaleFromPathname(pathname: string) { - return pathname.split('/')[1]; -} diff --git a/packages/next-intl/src/middleware/middleware.tsx b/packages/next-intl/src/middleware/middleware.tsx index 42b4217b6..9ce4f50de 100644 --- a/packages/next-intl/src/middleware/middleware.tsx +++ b/packages/next-intl/src/middleware/middleware.tsx @@ -1,65 +1,77 @@ import {NextRequest, NextResponse} from 'next/server'; import {COOKIE_LOCALE_NAME, HEADER_LOCALE_NAME} from '../shared/constants'; -import NextIntlMiddlewareConfig, { - NextIntlMiddlewareConfigWithDefaults +import MiddlewareConfig, { + MiddlewareConfigWithDefaults } from './NextIntlMiddlewareConfig'; import getAlternateLinksHeaderValue from './getAlternateLinksHeaderValue'; -import getLocaleFromPathname from './getLocaleFromPathname'; import resolveLocale from './resolveLocale'; +import { + getBestMatchingDomain, + getLocaleFromPathname, + isLocaleSupportedOnDomain +} from './utils'; const ROOT_URL = '/'; -function receiveConfig( - config: NextIntlMiddlewareConfig -): NextIntlMiddlewareConfigWithDefaults { - const result = { - ...config, - alternateLinks: config.alternateLinks ?? true - }; +function handleConfigDeprecations(config: MiddlewareConfig) { + if (config.routing) { + const {routing} = config; + config = {...config}; + delete config.routing; + + if (routing.type === 'prefix') { + config.localePrefix = routing.prefix; + } else if (routing.type === 'domain') { + config.domains = routing.domains.map((cur) => ({ + domain: cur.domain, + defaultLocale: cur.locale, + locales: [cur.locale] + })); + } - if (!result.routing) { - result.routing = { - type: 'prefix' - }; + console.error( + "\n\nThe `routing` option is deprecated, please use `localePrefix` and `domains` instead. Here's your updated configuration:\n\n" + + JSON.stringify(config, null, 2) + + '\n\nThank you so much for following along with the Server Components beta and sorry for the inconvenience!\n\n' + ); } - if (result.routing.type === 'prefix') { - result.routing.prefix = result.routing.prefix ?? 'as-needed'; + if (config.domains) { + const {domains} = config; + config = {...config}; + config.domains = domains.map((cur) => { + if (cur.locale) { + console.error( + '\n\nThe `domain.locale` option is deprecated, please use `domain.defaultLocale` instead.' + ); + } + return { + ...cur, + defaultLocale: cur.locale || cur.defaultLocale, + ...(cur.locale && {locales: [cur.locale]}) + }; + }); } - return result as NextIntlMiddlewareConfigWithDefaults; + return config; } -export default function createIntlMiddleware(config: NextIntlMiddlewareConfig) { +function receiveConfig(config: MiddlewareConfig) { // TODO: Remove before stable release - if (config.domains != null) { - console.error( - 'The `domains` option is deprecated. Please use `routing` instead.' - ); - config = { - ...config, - routing: { - type: 'domain', - domains: config.domains.map((cur) => ({ - domain: cur.domain, - locale: cur.defaultLocale - })) - } - }; - delete config.domains; - } + config = handleConfigDeprecations(config); - const configWithDefaults = receiveConfig(config); + const result: MiddlewareConfigWithDefaults = { + ...config, + alternateLinks: config.alternateLinks ?? true, + localePrefix: config.localePrefix ?? 'as-needed', + localeDetection: config.localeDetection ?? true + }; - if (configWithDefaults.routing.type === 'domain') { - const {domains} = configWithDefaults.routing; - const hasMatchingDomainForEveryLocale = configWithDefaults.locales.every( - (locale) => domains.find((cur) => cur.locale === locale) != null - ); - if (!hasMatchingDomainForEveryLocale) { - throw new Error('Every locale must have a matching domain'); - } - } + return result; +} + +export default function createIntlMiddleware(config: MiddlewareConfig) { + const configWithDefaults = receiveConfig(config); return function middleware(request: NextRequest) { const {domain, locale} = resolveLocale( @@ -73,14 +85,14 @@ export default function createIntlMiddleware(config: NextIntlMiddlewareConfig) { const hasOutdatedCookie = request.cookies.get(COOKIE_LOCALE_NAME)?.value !== locale; const hasMatchedDefaultLocale = domain - ? domain.locale === locale + ? domain.defaultLocale === locale : locale === configWithDefaults.defaultLocale; + const domainConfigs = - configWithDefaults.routing.type === 'domain' - ? configWithDefaults.routing.domains.filter( - (cur) => cur.locale === locale - ) ?? [] - : []; + configWithDefaults.domains?.filter((curDomain) => + isLocaleSupportedOnDomain(locale, curDomain) + ) || []; + const hasUnknownHost = configWithDefaults.domains != null && !domain; function getResponseInit() { let responseInit; @@ -111,11 +123,26 @@ export default function createIntlMiddleware(config: NextIntlMiddlewareConfig) { const urlObj = new URL(url, request.url); if (domainConfigs.length > 0) { - urlObj.pathname = url.replace(`/${locale}`, ''); - if (domainConfigs[0].domain && !host) { - host = domainConfigs[0].domain; + if (!host) { + const bestMatchingDomain = getBestMatchingDomain( + domain, + locale, + domainConfigs + ); + + if (bestMatchingDomain) { + host = bestMatchingDomain.domain; + + if ( + bestMatchingDomain.defaultLocale === locale && + configWithDefaults.localePrefix === 'as-needed' + ) { + urlObj.pathname = urlObj.pathname.replace(`/${locale}`, ''); + } + } } } + if (host) { urlObj.host = host; } @@ -132,9 +159,7 @@ export default function createIntlMiddleware(config: NextIntlMiddlewareConfig) { if ( hasMatchedDefaultLocale && - ((configWithDefaults.routing.type === 'prefix' && - configWithDefaults.routing.prefix === 'as-needed') || - configWithDefaults.routing.type === 'domain') + configWithDefaults.localePrefix === 'as-needed' ) { response = rewrite(pathWithSearch); } else { @@ -159,32 +184,37 @@ export default function createIntlMiddleware(config: NextIntlMiddlewareConfig) { if (hasLocalePrefix) { const basePath = pathWithSearch.replace(`/${pathLocale}`, '') || '/'; - if (configWithDefaults.routing.type === 'domain') { - const pathDomain = configWithDefaults.routing.domains.find( - (cur) => pathLocale === cur.locale - ); - - response = redirect(basePath, pathDomain?.domain); - } else { - if (pathLocale === locale) { - if ( - hasMatchedDefaultLocale && - configWithDefaults.routing.prefix === 'as-needed' - ) { - response = redirect(basePath); + if (pathLocale === locale) { + if ( + hasMatchedDefaultLocale && + configWithDefaults.localePrefix === 'as-needed' + ) { + response = redirect(basePath); + } else { + if (configWithDefaults.domains) { + const pathDomain = getBestMatchingDomain( + domain, + pathLocale, + domainConfigs + ); + + if (domain?.domain !== pathDomain?.domain && !hasUnknownHost) { + response = redirect(basePath, pathDomain?.domain); + } else { + response = next(); + } } else { response = next(); } - } else { - response = redirect(`/${locale}${basePath}`); } + } else { + response = redirect(`/${locale}${basePath}`); } } else { if ( hasMatchedDefaultLocale && - ((configWithDefaults.routing.type === 'prefix' && - configWithDefaults.routing.prefix === 'as-needed') || - configWithDefaults.routing.type === 'domain') + (configWithDefaults.localePrefix === 'as-needed' || + configWithDefaults.domains) ) { response = rewrite(`/${locale}${pathWithSearch}`); } else { diff --git a/packages/next-intl/src/middleware/resolveLocale.tsx b/packages/next-intl/src/middleware/resolveLocale.tsx index a7285f92b..3d9451acf 100644 --- a/packages/next-intl/src/middleware/resolveLocale.tsx +++ b/packages/next-intl/src/middleware/resolveLocale.tsx @@ -4,28 +4,23 @@ import {RequestCookies} from 'next/dist/server/web/spec-extension/cookies'; import {COOKIE_LOCALE_NAME} from '../shared/constants'; import { DomainConfig, - NextIntlMiddlewareConfigWithDefaults, - RoutingConfigDomain + MiddlewareConfigWithDefaults } from './NextIntlMiddlewareConfig'; -import getHost from './getHost'; -import getLocaleFromPathname from './getLocaleFromPathname'; +import { + getLocaleFromPathname, + getHost, + isLocaleSupportedOnDomain +} from './utils'; -function findLocaleDomain( +function findDomainFromHost( requestHeaders: Headers, - routingConfig: RoutingConfigDomain + domains: Array ) { let host = getHost(requestHeaders); + // Remove port (easier for local development) host = host?.replace(/:\d+$/, ''); - // Consider optional www subdomain - const domains = routingConfig.domains.flatMap((cur) => { - if (cur.domain.startsWith('www.')) { - return cur; - } - return [cur, {...cur, domain: `www.${cur.domain}`}]; - }); - if (host && domains) { return domains.find((cur) => cur.domain === host); } @@ -33,9 +28,29 @@ function findLocaleDomain( return undefined; } -function resolveLocaleFromPrefix( +function getAcceptLanguageLocale( + requestHeaders: Headers, locales: Array, - defaultLocale: string, + defaultLocale: string +) { + let locale; + + const languages = new Negotiator({ + headers: { + 'accept-language': requestHeaders.get('accept-language') || undefined + } + }).languages(); + try { + locale = match(languages, locales, defaultLocale); + } catch (e) { + // Invalid language + } + + return locale; +} + +function resolveLocaleFromPrefix( + {defaultLocale, localeDetection, locales}: MiddlewareConfigWithDefaults, requestHeaders: Headers, requestCookies: RequestCookies, pathname: string @@ -61,17 +76,8 @@ function resolveLocaleFromPrefix( } // Prio 3: Use the `accept-language` header - if (!locale && requestHeaders) { - const languages = new Negotiator({ - headers: { - 'accept-language': requestHeaders.get('accept-language') || undefined - } - }).languages(); - try { - locale = match(languages, locales, defaultLocale); - } catch (e) { - // Invalid language - } + if (!locale && localeDetection && requestHeaders) { + locale = getAcceptLanguageLocale(requestHeaders, locales, defaultLocale); } // Prio 4: Use default locale @@ -83,48 +89,62 @@ function resolveLocaleFromPrefix( } function resolveLocaleFromDomain( - routingConfig: RoutingConfigDomain, + config: MiddlewareConfigWithDefaults, requestHeaders: Headers, - defaultLocale: string + requestCookies: RequestCookies, + pathname: string ) { - let locale, domain; + const {domains} = config; + + const localeFromPrefixStrategy = resolveLocaleFromPrefix( + config, + requestHeaders, + requestCookies, + pathname + ); // Prio 1: Use a domain - if (routingConfig.domains) { - domain = findLocaleDomain(requestHeaders, routingConfig); + if (domains) { + const domain = findDomainFromHost(requestHeaders, domains); + const hasLocalePrefix = + pathname && pathname.startsWith(`/${localeFromPrefixStrategy}`); if (domain) { - locale = domain.locale; - } else { - // Might be localhost + if (localeFromPrefixStrategy) { + return { + locale: + isLocaleSupportedOnDomain(localeFromPrefixStrategy, domain) || + hasLocalePrefix + ? localeFromPrefixStrategy + : domain.defaultLocale, + localeFromPrefix: localeFromPrefixStrategy, + domain + }; + } } } - // Prio 2: Use default locale - if (!locale) { - locale = defaultLocale; - } - - return {locale, domain}; + // Prio 2: Use prefix strategy + return {locale: localeFromPrefixStrategy}; } export default function resolveLocale( - config: NextIntlMiddlewareConfigWithDefaults, + config: MiddlewareConfigWithDefaults, requestHeaders: Headers, requestCookies: RequestCookies, pathname: string ): {locale: string; domain?: DomainConfig} { - if (config.routing.type === 'domain') { + if (config.domains) { return resolveLocaleFromDomain( - config.routing, + config, requestHeaders, - config.defaultLocale + requestCookies, + pathname ); } else { return { locale: resolveLocaleFromPrefix( - config.locales, - config.defaultLocale, + config, requestHeaders, requestCookies, pathname diff --git a/packages/next-intl/src/middleware/utils.tsx b/packages/next-intl/src/middleware/utils.tsx new file mode 100644 index 000000000..33228ba35 --- /dev/null +++ b/packages/next-intl/src/middleware/utils.tsx @@ -0,0 +1,61 @@ +import {DomainConfig} from './NextIntlMiddlewareConfig'; + +export function getLocaleFromPathname(pathname: string) { + return pathname.split('/')[1]; +} + +export function getHost(requestHeaders: Headers) { + return ( + requestHeaders.get('x-forwarded-host') ?? + requestHeaders.get('host') ?? + undefined + ); +} + +export function isLocaleSupportedOnDomain( + locale: string, + domain: DomainConfig +) { + return ( + domain.defaultLocale === locale || + !domain.locales || + domain.locales.includes(locale) + ); +} + +export function getBestMatchingDomain( + curHostDomain: DomainConfig | undefined, + locale: string, + domainConfigs: Array +) { + let domainConfig; + + // Prio 1: Stay on current domain + if (curHostDomain && isLocaleSupportedOnDomain(locale, curHostDomain)) { + domainConfig = curHostDomain; + } + + // Prio 2: Use alternative domain with matching default locale + if (!domainConfig) { + domainConfig = domainConfigs.find((cur) => cur.defaultLocale === locale); + } + + // Prio 3: Use alternative domain with restricted matching locale + if (!domainConfig) { + domainConfig = domainConfigs.find( + (cur) => cur.locales != null && cur.locales.includes(locale) + ); + } + + // Prio 4: Stay on the current domain if it supports all locales + if (!domainConfig && curHostDomain?.locales == null) { + domainConfig = curHostDomain; + } + + // Prio 5: Use alternative domain that supports all locales + if (!domainConfig) { + domainConfig = domainConfigs.find((cur) => !cur.locales); + } + + return domainConfig; +} diff --git a/packages/next-intl/test/client/NextIntlClientProvider.test.tsx b/packages/next-intl/test/client/NextIntlClientProvider.test.tsx index df301000c..3ebc956da 100644 --- a/packages/next-intl/test/client/NextIntlClientProvider.test.tsx +++ b/packages/next-intl/test/client/NextIntlClientProvider.test.tsx @@ -1,7 +1,6 @@ import {render, screen} from '@testing-library/react'; import React from 'react'; -import {useTranslations} from '../../src'; -import {NextIntlClientProvider} from '../../src/client'; +import {useTranslations, NextIntlClientProvider} from '../../src'; jest.mock('next/router', () => ({ useRouter: () => ({locale: 'en'}) diff --git a/packages/next-intl/test/middleware/getAlternateLinksHeaderValue.test.tsx b/packages/next-intl/test/middleware/getAlternateLinksHeaderValue.test.tsx index b275d5342..10cdc8bee 100644 --- a/packages/next-intl/test/middleware/getAlternateLinksHeaderValue.test.tsx +++ b/packages/next-intl/test/middleware/getAlternateLinksHeaderValue.test.tsx @@ -1,20 +1,18 @@ import {NextRequest} from 'next/server'; -import {NextIntlMiddlewareConfigWithDefaults} from '../../src/middleware/NextIntlMiddlewareConfig'; +import {MiddlewareConfigWithDefaults} from '../../src/middleware/NextIntlMiddlewareConfig'; import getAlternateLinksHeaderValue from '../../src/middleware/getAlternateLinksHeaderValue'; function getRequest(url = 'https://example.com/') { return {url} as NextRequest; } -it('works for type prefix (as-needed)', () => { - const config: NextIntlMiddlewareConfigWithDefaults = { +it('works for prefixed routing (as-needed)', () => { + const config: MiddlewareConfigWithDefaults = { defaultLocale: 'en', locales: ['en', 'es'], alternateLinks: true, - routing: { - type: 'prefix', - prefix: 'as-needed' - } + localePrefix: 'as-needed', + localeDetection: true }; expect( @@ -37,15 +35,13 @@ it('works for type prefix (as-needed)', () => { ]); }); -it('works for type prefix (always)', () => { - const config: NextIntlMiddlewareConfigWithDefaults = { +it('works for prefixed routing (always)', () => { + const config: MiddlewareConfigWithDefaults = { defaultLocale: 'en', locales: ['en', 'es'], alternateLinks: true, - routing: { - type: 'prefix', - prefix: 'always' - } + localePrefix: 'always', + localeDetection: true }; expect( @@ -68,42 +64,106 @@ it('works for type prefix (always)', () => { ]); }); -it('works for type domain', () => { - const config: NextIntlMiddlewareConfigWithDefaults = { +it("works for type domain with `localePrefix: 'as-needed'`", () => { + const config: MiddlewareConfigWithDefaults = { defaultLocale: 'en', - locales: ['en', 'es'], + locales: ['en', 'es', 'fr'], alternateLinks: true, - routing: { - type: 'domain', - domains: [ - { - domain: 'example.com', - locale: 'en' - }, - { - domain: 'example.es', - locale: 'es' - } - ] - } + localePrefix: 'as-needed', + localeDetection: true, + domains: [ + { + domain: 'example.com', + defaultLocale: 'en' + // (supports all locales) + }, + { + domain: 'example.es', + defaultLocale: 'es', + locales: ['es'] + }, + { + domain: 'example.ca', + defaultLocale: 'en', + locales: ['en', 'fr'] + } + ] }; + [ + getAlternateLinksHeaderValue(config, getRequest()).split(', '), + getAlternateLinksHeaderValue( + config, + getRequest('https://example.es/') + ).split(', ') + ].forEach((links) => { + expect(links).toEqual([ + '; rel="alternate"; hreflang="en"', + '; rel="alternate"; hreflang="en"', + '; rel="alternate"; hreflang="es"', + '; rel="alternate"; hreflang="es"', + '; rel="alternate"; hreflang="fr"', + '; rel="alternate"; hreflang="fr"' + ]); + }); + expect( - getAlternateLinksHeaderValue(config, getRequest()).split(', ') + getAlternateLinksHeaderValue( + config, + getRequest('https://example.com/about') + ).split(', ') ).toEqual([ - '; rel="alternate"; hreflang="en"', - '; rel="alternate"; hreflang="es"' + '; rel="alternate"; hreflang="en"', + '; rel="alternate"; hreflang="en"', + '; rel="alternate"; hreflang="es"', + '; rel="alternate"; hreflang="es"', + '; rel="alternate"; hreflang="fr"', + '; rel="alternate"; hreflang="fr"' ]); +}); - expect( +it("works for type domain with `localePrefix: 'always'`", () => { + const config: MiddlewareConfigWithDefaults = { + defaultLocale: 'en', + locales: ['en', 'es', 'fr'], + alternateLinks: true, + localePrefix: 'always', + localeDetection: true, + domains: [ + { + domain: 'example.com', + defaultLocale: 'en' + // (supports all locales) + }, + { + domain: 'example.es', + defaultLocale: 'es', + locales: ['es'] + }, + { + domain: 'example.ca', + defaultLocale: 'en', + locales: ['en', 'fr'] + } + ] + }; + + [ + getAlternateLinksHeaderValue(config, getRequest()).split(', '), getAlternateLinksHeaderValue( config, getRequest('https://example.es/') ).split(', ') - ).toEqual([ - '; rel="alternate"; hreflang="en"', - '; rel="alternate"; hreflang="es"' - ]); + ].forEach((links) => { + expect(links).toEqual([ + '; rel="alternate"; hreflang="en"', + '; rel="alternate"; hreflang="en"', + '; rel="alternate"; hreflang="es"', + '; rel="alternate"; hreflang="es"', + '; rel="alternate"; hreflang="fr"', + '; rel="alternate"; hreflang="fr"' + ]); + }); expect( getAlternateLinksHeaderValue( @@ -111,7 +171,11 @@ it('works for type domain', () => { getRequest('https://example.com/about') ).split(', ') ).toEqual([ - '; rel="alternate"; hreflang="en"', - '; rel="alternate"; hreflang="es"' + '; rel="alternate"; hreflang="en"', + '; rel="alternate"; hreflang="en"', + '; rel="alternate"; hreflang="es"', + '; rel="alternate"; hreflang="es"', + '; rel="alternate"; hreflang="fr"', + '; rel="alternate"; hreflang="fr"' ]); }); diff --git a/packages/next-intl/test/middleware/middleware.test.tsx b/packages/next-intl/test/middleware/middleware.test.tsx index aab0aba03..324c60c74 100644 --- a/packages/next-intl/test/middleware/middleware.test.tsx +++ b/packages/next-intl/test/middleware/middleware.test.tsx @@ -1,6 +1,7 @@ import {RequestCookies} from 'next/dist/compiled/@edge-runtime/cookies'; import {NextRequest, NextResponse} from 'next/server'; import createIntlMiddleware from '../../src/middleware'; +import {DomainConfig} from '../../src/middleware/NextIntlMiddlewareConfig'; type MockResponse = NextResponse & { args: Array; @@ -22,12 +23,11 @@ jest.mock('next/server', () => { function createMockRequest( pathnameWithSearch = '/', - locale: 'en' | 'de' = 'en', + locale = 'en', host = 'http://localhost:3000' ) { const headers = new Headers({ - 'accept-language': - locale === 'en' ? 'en-US,en;q=0.9,de;q=0.8' : 'de-DE,de;q=0.9,en;q=0.8', + 'accept-language': `${locale};q=0.9,en;q=0.8`, host: new URL(host).host }); const url = host + pathnameWithSearch; @@ -46,6 +46,14 @@ function createMockRequest( } as NextRequest; } +function createMockMiddleware( + ...args: Parameters +) { + return createIntlMiddleware(...args) as ( + request: NextRequest + ) => MockResponse; +} + const MockedNextResponse = NextResponse as unknown as { next: jest.Mock; rewrite: jest.Mock; @@ -58,12 +66,12 @@ beforeEach(() => { MockedNextResponse.redirect.mockClear(); }); -describe('type: prefix', () => { - describe('prefix: as-needed', () => { - const middleware = createIntlMiddleware({ +describe('prefix-based routing', () => { + describe('localePrefix: as-needed', () => { + const middleware = createMockMiddleware({ defaultLocale: 'en', locales: ['en', 'de'] - }) as (request: NextRequest) => MockResponse; + }); it('rewrites requests for the default locale', () => { middleware(createMockRequest('/')); @@ -165,15 +173,30 @@ describe('type: prefix', () => { }); }); - describe('prefix: always', () => { - const middleware = createIntlMiddleware({ + describe('localePrefix: as-needed, localeDetection: false', () => { + const middleware = createMockMiddleware({ defaultLocale: 'en', locales: ['en', 'de'], - routing: { - type: 'prefix', - prefix: 'always' - } - }) as (request: NextRequest) => MockResponse; + localePrefix: 'as-needed', + localeDetection: false + }); + + it('serves non-prefixed requests with the default locale and ignores the accept-language header', () => { + middleware(createMockRequest('/', 'de')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://localhost:3000/en' + ); + }); + }); + + describe('localePrefix: always', () => { + const middleware = createMockMiddleware({ + defaultLocale: 'en', + locales: ['en', 'de'], + localePrefix: 'always' + }); it('redirects non-prefixed requests for the default locale', () => { middleware(createMockRequest('/')); @@ -228,120 +251,353 @@ describe('type: prefix', () => { }); }); -describe('type: domain', () => { - const middleware = createIntlMiddleware({ - defaultLocale: 'en', - locales: ['en', 'de'], - routing: { - type: 'domain', +describe('domain-based routing', () => { + describe('localePrefix: as-needed', () => { + const middleware = createMockMiddleware({ + defaultLocale: 'en', + locales: ['en', 'fr'], domains: [ - {locale: 'en', domain: 'en.example.com'}, - {locale: 'de', domain: 'de.example.com'} + {defaultLocale: 'en', domain: 'en.example.com', locales: ['en']}, + {defaultLocale: 'en', domain: 'ca.example.com', locales: ['en', 'fr']}, + {defaultLocale: 'fr', domain: 'fr.example.com', locales: ['fr']} ] - } - }) as (request: NextRequest) => MockResponse; + }); - it('serves requests for matching locales at the root', () => { - middleware(createMockRequest('/', 'en', 'http://en.example.com')); - expect(MockedNextResponse.next).not.toHaveBeenCalled(); - expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); - expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( - 'http://en.example.com/en' - ); - }); + it('serves requests for the default locale at the root', () => { + middleware(createMockRequest('/', 'en', 'http://en.example.com')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://en.example.com/en' + ); + }); - it('serves requests for matching locales at nested paths', () => { - middleware(createMockRequest('/about', 'en', 'http://en.example.com')); - expect(MockedNextResponse.next).not.toHaveBeenCalled(); - expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); - expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( - 'http://en.example.com/en/about' - ); - }); + it('serves requests for the default locale at sub paths', () => { + middleware(createMockRequest('/about', 'en', 'http://en.example.com')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://en.example.com/en/about' + ); + }); - it('serves requests for not matching locales at the root', () => { - middleware(createMockRequest('/', 'de', 'http://en.example.com')); - expect(MockedNextResponse.next).not.toHaveBeenCalled(); - expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); - expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( - 'http://en.example.com/en' - ); - }); + it('serves requests for the default locale at unknown hosts', () => { + middleware(createMockRequest('/', 'en', 'http://localhost:3000')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://localhost:3000/en' + ); + }); - it('serves requests for not matching locales at nested paths', () => { - middleware(createMockRequest('/about', 'de', 'http://en.example.com')); - expect(MockedNextResponse.next).not.toHaveBeenCalled(); - expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); - expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( - 'http://en.example.com/en/about' - ); - }); + it('serves requests for non-default locales at the locale root', () => { + middleware(createMockRequest('/fr', 'fr', 'http://ca.example.com')); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.next).toHaveBeenCalled(); + }); - it('serves requests for matching locales at unknown hosts', () => { - middleware(createMockRequest('/', 'en', 'http://localhost:3000')); - expect(MockedNextResponse.next).not.toHaveBeenCalled(); - expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); - expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( - 'http://localhost:3000/en' - ); + it('serves requests for non-default locales at the locale root when the accept-language header points to the default locale', () => { + middleware(createMockRequest('/fr', 'en', 'http://ca.example.com')); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.next).toHaveBeenCalled(); + }); + + it('serves requests for non-default locales at sub paths', () => { + middleware(createMockRequest('/fr/about', 'fr', 'http://ca.example.com')); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.next).toHaveBeenCalled(); + }); + + describe('unknown hosts', () => { + it('serves requests for unknown hosts at the root', () => { + middleware(createMockRequest('/', 'en', 'http://localhost')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://localhost/en' + ); + }); + + it('serves requests for unknown hosts at sub paths', () => { + middleware(createMockRequest('/about', 'en', 'http://localhost')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://localhost/en/about' + ); + }); + + it('serves requests for unknown hosts and non-default locales at the locale root', () => { + middleware(createMockRequest('/fr', 'fr', 'http://localhost')); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.next).toHaveBeenCalled(); + }); + + it('serves requests for unknown hosts and non-default locales at sub paths', () => { + middleware(createMockRequest('/fr/about', 'fr', 'http://localhost')); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.next).toHaveBeenCalled(); + }); + }); + + describe('locales-restricted domain', () => { + it('serves requests for the default locale at the root when the accept-language header matches', () => { + middleware(createMockRequest('/', 'en', 'http://ca.example.com')); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://ca.example.com/en' + ); + }); + + it('serves requests for the default locale at the root when the accept-language header matches the top-level locale', () => { + middleware(createMockRequest('/', 'en-CA', 'http://ca.example.com')); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://ca.example.com/en' + ); + }); + + it("serves requests for the default locale at the root when the accept-language header doesn't match", () => { + middleware(createMockRequest('/', 'en', 'http://fr.example.com')); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://fr.example.com/fr' + ); + }); + + it('serves requests for the default locale at sub paths when the accept-langauge header matches', () => { + middleware(createMockRequest('/about', 'en', 'http://ca.example.com')); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://ca.example.com/en/about' + ); + }); + + it("serves requests for the default locale at sub paths when the accept-langauge header doesn't match", () => { + middleware(createMockRequest('/about', 'en', 'http://fr.example.com')); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://fr.example.com/fr/about' + ); + }); + + it('serves requests for non-default locales at the locale root', () => { + middleware(createMockRequest('/fr', 'fr', 'http://ca.example.com')); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.next).toHaveBeenCalled(); + }); + + it('serves requests for non-default locales at sub paths', () => { + middleware( + createMockRequest('/fr/about', 'fr', 'http://ca.example.com') + ); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.next).toHaveBeenCalled(); + }); + }); + + describe('redirects for locale prefixes', () => { + it('redirects for the locale root when the locale matches', () => { + middleware( + createMockRequest('/en/about', 'en', 'http://en.example.com') + ); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( + 'http://en.example.com/about' + ); + }); + + it('redirects for sub paths when the locale matches', () => { + middleware( + createMockRequest('/en/about', 'en', 'http://en.example.com') + ); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( + 'http://en.example.com/about' + ); + }); + + it("redirects to another domain for the locale root when the locale doesn't match", () => { + middleware( + createMockRequest('/fr/about', 'fr', 'http://en.example.com') + ); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( + 'http://fr.example.com/about' + ); + }); + + it("redirects to another domain for sub paths when the locale doesn't match", () => { + middleware( + createMockRequest('/fr/about', 'fr', 'http://en.example.com') + ); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( + 'http://fr.example.com/about' + ); + }); + }); }); - describe('redirects for locale prefixes', () => { - it('redirects for the locale root when the locale matches', () => { - middleware(createMockRequest('/en/about', 'en', 'http://en.example.com')); + describe("localePrefix: 'always'", () => { + const middleware = createMockMiddleware({ + defaultLocale: 'en', + locales: ['en', 'fr'], + localePrefix: 'always', + domains: [ + {defaultLocale: 'en', domain: 'example.com', locales: ['en']}, + {defaultLocale: 'en', domain: 'ca.example.com', locales: ['en', 'fr']} + ] + }); + + it('redirects non-prefixed requests for the default locale', () => { + middleware(createMockRequest('/', 'en', 'http://example.com')); expect(MockedNextResponse.next).not.toHaveBeenCalled(); expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( - 'http://en.example.com/about' + 'http://example.com/en' ); }); - it('redirects for sub paths when the locale matches', () => { - middleware(createMockRequest('/en/about', 'en', 'http://en.example.com')); + it('redirects requests for other locales', () => { + middleware(createMockRequest('/', 'fr', 'http://ca.example.com')); expect(MockedNextResponse.next).not.toHaveBeenCalled(); expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( - 'http://en.example.com/about' + 'http://ca.example.com/fr' ); }); - it("redirects for the locale root when the locale doesn't match", () => { - middleware(createMockRequest('/de/about', 'de', 'http://en.example.com')); - expect(MockedNextResponse.next).not.toHaveBeenCalled(); + it('serves requests for the default locale', () => { + middleware(createMockRequest('/en', 'en', 'http://ca.example.com')); expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); - expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( - 'http://de.example.com/about' - ); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.next).toHaveBeenCalledTimes(1); + + middleware(createMockRequest('/en/about', 'en', 'http://ca.example.com')); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.next).toHaveBeenCalledTimes(2); }); - it("redirects for sub paths when the locale doesn't match", () => { - middleware(createMockRequest('/de/about', 'de', 'http://en.example.com')); - expect(MockedNextResponse.next).not.toHaveBeenCalled(); + it('serves requests for non-default locales', () => { + middleware(createMockRequest('/fr', 'fr', 'http://ca.example.com')); expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); - expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( - 'http://de.example.com/about' - ); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.next).toHaveBeenCalled(); + + middleware(createMockRequest('/fr/about', 'fr', 'http://ca.example.com')); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.next).toHaveBeenCalledTimes(2); }); }); }); describe('deprecated domain config', () => { - const middleware = createIntlMiddleware({ - defaultLocale: 'en', - locales: ['en', 'de'], - domains: [ + it("accepts deprecated config with `routing.type: 'prefix'`", () => { + const middleware = createMockMiddleware({ + defaultLocale: 'en', + locales: ['en', 'de'], + routing: { + type: 'prefix', + prefix: 'always' + } + }); + + middleware(createMockRequest('/', 'en', 'http://example.com')); + middleware(createMockRequest('/about', 'en', 'http://example.com')); + + expect(MockedNextResponse.redirect).toHaveBeenCalledTimes(2); + expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( + 'http://example.com/en' + ); + expect(MockedNextResponse.redirect.mock.calls[1][0].toString()).toBe( + 'http://example.com/en/about' + ); + + middleware(createMockRequest('/de/about', 'de', 'http://example.com')); + expect(MockedNextResponse.next).toHaveBeenCalled(); + }); + + it("accepts deprecated config with `routing.type: 'domain'`", () => { + const middleware = createMockMiddleware({ + defaultLocale: 'en', + locales: ['en', 'de'], + routing: { + type: 'domain', + domains: [ + { + locale: 'en', + domain: 'en.example.com' + }, + { + locale: 'de', + domain: 'de.example.com' + } + ] + } + }); + + middleware(createMockRequest('/', 'en', 'http://en.example.com')); + middleware(createMockRequest('/about', 'en', 'http://en.example.com')); + + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://en.example.com/en' + ); + expect(MockedNextResponse.rewrite.mock.calls[1][0].toString()).toBe( + 'http://en.example.com/en/about' + ); + + middleware(createMockRequest('/en/about', 'en', 'http://en.example.com')); + expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( + 'http://en.example.com/about' + ); + + middleware(createMockRequest('/de/help', 'de', 'http://en.example.com')); + + expect(MockedNextResponse.redirect.mock.calls[1][0].toString()).toBe( + 'http://de.example.com/help' + ); + }); + + it('accepts deprecated config with `domain.locale`', () => { + const domains = [ { - defaultLocale: 'en', + locale: 'en', domain: 'en.example.com' }, { - defaultLocale: 'de', + locale: 'de', domain: 'de.example.com' } - ] - }) as (request: NextRequest) => MockResponse; + ] as Array; + + const middleware = createMockMiddleware({ + defaultLocale: 'en', + locales: ['en', 'de'], + domains + }); - it('accepts deprecated config', () => { middleware(createMockRequest('/', 'en', 'http://en.example.com')); middleware(createMockRequest('/about', 'en', 'http://en.example.com')); diff --git a/packages/website/.gitignore b/packages/website/.gitignore index de57f0462..71fc295fc 100644 --- a/packages/website/.gitignore +++ b/packages/website/.gitignore @@ -5,3 +5,4 @@ .vercel public/.nextra tsconfig.tsbuildinfo +.env diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 57e6d17fa..ccd427d75 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -106,8 +106,8 @@ export default createIntlMiddleware({ }); export const config = { - // Skip all paths that aren't pages that you'd like to internationalize - matcher: ['/((?!api|_next|favicon.ico|assets).*)'] + // Skip all paths that should not be internationalized + matcher: ['/((?!api|_next|.*\\..*).*)'] }; ``` @@ -274,7 +274,16 @@ If you absolutely need to use functionality from `next-intl` on the client side, ## Global request configuration -If you'd like to apply [global configuration](/docs/usage/configuration) like `formats`, `defaultTranslationValues`, `timeZone`, `now`, or [error handling functions](/docs/usage/error-handling) like `onError` and `getMessageFallback`, you can provide these in `i18n.ts`. +`next-intl` supports the following [global configuration](/docs/usage/configuration): + +- `formats` +- `defaultTranslationValues` +- `timeZone` +- `now` +- `onError` +- `getMessageFallback` + +For the usage in Server Components, these can be configured in `i18n.ts`. ```tsx filename="i18n.ts" import {headers} from 'next/headers'; @@ -288,11 +297,20 @@ export default getRequestConfig(async ({locale}) => ({ })); ``` +Note that the configuration object will be created once for each request and will then be made available to all of Server Components in your app. + ## Middleware configuration The middleware handles redirects and rewrites based on the detected user locale. -### Routing with a locale prefix (default) +There are two strategies for detecting the locale: + +1. [Prefix-based routing (default)](#prefix-based-routing-default) +2. [Domain-based routing](#domain-based-routing) + +Once a locale is detected, it will be saved in a cookie. + +### Prefix-based routing (default) Since your pages are nested within a `[locale]` folder, all routes are prefixed with one of your supported locales (e.g. `/de/about`). To keep the URL short, requests for the default locale are rewritten internally to work without a locale prefix. @@ -302,91 +320,130 @@ Since your pages are nested within a `[locale]` folder, all routes are prefixed - `/about` → `/en/about` - `/de/about` → `/de/about` -When the user visits a route without an explicit locale, `next-intl` matches the [`accept-language` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language) of the request against the available locales and optionally redirects the user to a prefixed route. The matched locale is saved in a cookie. +#### Locale detection -#### Changing locales +The locale is detected based on these priorities: -To change the locale, users can visit a prefixed route. This will always take precedence over a previously matched locale that is saved in a cookie or the `accept-language` header. +1. A locale prefix is present in the pathname (e.g. `/de/about`) +2. A cookie is present that contains a previously detected locale +3. The [`accept-language` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language) is matched against the available `locales` +4. The `defaultLocale` is used + +To change the locale, users can visit a prefixed route. This will take precedence over a previously matched locale that is saved in a cookie or the `accept-language` header. **Example workflow:** 1. A user requests `/` and based on the `accept-language` header, the `de` locale is matched. 2. The `de` locale is saved in a cookie and the user is redirected to `/de`. -3. In your app code, you render `Switch to English` to allow the user to change the locale to `en`. +3. The app renders `Switch to English` to allow the user to change the locale to `en`. 4. When the user clicks on the link, a request to `/en` is initiated. 5. The middleware will update the cookie value to `en` and subsequently redirects the user to `/`. -#### Always use a locale prefix +### Domain-based routing -If you want to include a prefix for the default locale as well, you can configure the middleware accordingly. +If you want to serve your localized content based on different domains, you can provide a list of mappings between domains and locales to the middleware. -```tsx {7-10} +**Example:** + +- `us.example.com` (default: `en`) +- `ca.example.com` (default: `en`) +- `ca.example.com/fr` (`fr`) + +```tsx import createIntlMiddleware from 'next-intl/middleware'; export default createIntlMiddleware({ - locales: ['en', 'de'], + // All locales across all domains + locales: ['en', 'fr'], + + // Used when no domain matches (e.g. on localhost) defaultLocale: 'en', - routing: { - type: 'prefix', - prefix: 'always' // Defaults to 'as-needed' - } + domains: [ + { + domain: 'us.example.com', + defaultLocale: 'en', + // Optionally restrict the locales managed by this domain. If this + // domain receives requests for another locale (e.g. us.example.com/fr), + // then the middleware will redirect to a domain that supports it. + locales: ['en'] + }, + { + domain: 'ca.example.com', + defaultLocale: 'en' + // If there are no `locales` specified on a domain, + // all global locales will be supported here. + } + ] }); ``` -In this case, requests without a prefix will be redirected accordingly (e.g. `/about` to `/en/about`). +The middleware rewrites the requests internally, so that requests for the `defaultLocale` on a given domain work without a locale prefix (e.g. `us.example.com/about` → `/en/about`). If you want to include a prefix for the default locale as well, you can add [`localePrefix: 'always'`](#always-use-a-locale-prefix). + +#### Locale detection + +To match the request against the available domains, the host is read from the `x-forwarded-host` header, with a fallback to `host`. + +The locale is detected based on these priorities: + +1. A locale prefix is present in the pathname and the domain supports it (e.g. `ca.example.com/fr`) +2. If the host of the request is configured in `domains`, the `defaultLocale` of the domain is used +3. As a fallback, the [locale detection of prefix-based routing](#locale-detection) applies + + + +Since unknown domains will be handled with [prefix-based routing](#prefix-based-routing-default), this strategy can be used for local development where the host is `localhost`. + + + +Since the middleware is aware of all your domains, the domain will automatically be switched when the user requests to change the locale. + +**Example workflow:** + +1. The user requests `us.example.com` and based on the `defaultLocale` of this domain, the `en` locale is matched. +2. The app renders `Switch to French` to allow the user to change the locale to `fr`. +3. When the link is clicked, a request to `us.example.com/fr` is initiated. +4. The middleware recognizes that the user wants to switch to another domain and responds with a redirect to `ca.example.com/fr`. + +### Further configuration -### Routing with domains +#### Always use a locale prefix -If you want to serve your localized content based on separate domains, you can provide a list of mappings between domains and locales to the middleware. +If you want to include a prefix for the default locale as well, you can configure the middleware accordingly. -```tsx {7-19} +```tsx {6} import createIntlMiddleware from 'next-intl/middleware'; export default createIntlMiddleware({ locales: ['en', 'de'], defaultLocale: 'en', - - routing: { - type: 'domain', - domains: [ - { - domain: 'en.example.com', - locale: 'en' - }, - { - domain: 'de.example.com', - locale: 'de' - } - ] - } + localePrefix: 'always' // Defaults to 'as-needed' }); ``` -In this case, your content will be available without a locale prefix based on the domain since `next-intl` rewrites the request internally (e.g. `de.example.com/about` → `/de/about`). - -The domain that is needed to match the locale is read from the `x-forwarded-host` header, with a fallback to `host`. If no domain matches (e.g. on localhost), the `defaultLocale` is used. +In this case, requests without a prefix will be redirected accordingly (e.g. `/about` to `/en/about`). - - -Note that you might want to turn on domain-based routing only in production, since the middleware will try to redirect to one of the configured domains based on the matched locale. +Note that this will affect both prefix-based as well as domain-based routing. - +#### Disable automatic locale detection -#### Changing locales +If you want to disable locale detection based on the `accept-language` header, you can opt-out of this mechanism. -Since the middleware is aware of all your domains, `next-intl` will automatically switch the domain when the user requests to change the locale. +```tsx {6} +import createIntlMiddleware from 'next-intl/middleware'; -**Example workflow:** +export default createIntlMiddleware({ + locales: ['en', 'de'], + defaultLocale: 'en', + localeDetection: false // Defaults to `true` +}); +``` -1. The user is on `en.example.com`. -2. The app renders `Switch to German` to allow the user to change the locale to `de`. -3. When the link is clicked, a request to `en.example.com/de` is initiated. -4. The middleware recognizes that the user wants to switch to another domain and responds with a redirect to `de.example.com`. +Note that in this case other detection mechanisms will remain in place regardless (e.g. based on a locale prefix in the pathname or a matched domain). -### Alternate links +#### Disable alternate links -`next-intl` automatically sets [the `link` header](https://developers.google.com/search/docs/specialty/international/localized-versions#http) to inform search engines that your content is available in different languages. Note that this automatically integrates with your routing strategy and will generate the correct links based on your configuration (`prefix` or `domain`). +The middleware automatically sets [the `link` header](https://developers.google.com/search/docs/specialty/international/localized-versions#http) to inform search engines that your content is available in different languages. Note that this automatically integrates with your routing strategy and will generate the correct links based on your configuration. If you prefer to include these links yourself, you can opt-out of this behaviour. diff --git a/yarn.lock b/yarn.lock index a9208980c..52dad2b39 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1277,6 +1277,13 @@ dependencies: "@cspotcode/source-map-consumer" "0.8.0" +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + "@eslint/eslintrc@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.1.tgz#8b5e1c49f4077235516bc9ec7d41378c0f69b8c6" @@ -3271,6 +3278,11 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" @@ -3323,6 +3335,13 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/experimental-utils@^5.57.0": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.57.1.tgz#da521391f16379b396896b120919c63f24fa78c2" + integrity sha512-5F5s8mpM1Y0RQ5iWzKQPQm5cmhARgcMfUwyHX1ZZFL8Tm0PyzyQ+9jgYSMaW74XXvpDg9/KdmMICLlwNwKtO7w== + dependencies: + "@typescript-eslint/utils" "5.57.1" + "@typescript-eslint/parser@^4.20.0": version "4.27.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.27.0.tgz#85447e573364bce4c46c7f64abaa4985aadf5a94" @@ -3395,6 +3414,14 @@ "@typescript-eslint/types" "5.41.0" "@typescript-eslint/visitor-keys" "5.41.0" +"@typescript-eslint/scope-manager@5.57.1": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.57.1.tgz#5d28799c0fc8b501a29ba1749d827800ef22d710" + integrity sha512-N/RrBwEUKMIYxSKl0oDK5sFVHd6VI7p9K5MyUlVYAY6dyNb/wHUqndkTd3XhpGlXgnQsBkRZuu4f9kAHghvgPw== + dependencies: + "@typescript-eslint/types" "5.57.1" + "@typescript-eslint/visitor-keys" "5.57.1" + "@typescript-eslint/type-utils@5.15.0": version "5.15.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.15.0.tgz#d2c02eb2bdf54d0a645ba3a173ceda78346cf248" @@ -3433,6 +3460,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.41.0.tgz#6800abebc4e6abaf24cdf220fb4ce28f4ab09a85" integrity sha512-5BejraMXMC+2UjefDvrH0Fo/eLwZRV6859SXRg+FgbhA0R0l6lDqDGAQYhKbXhPN2ofk2kY5sgGyLNL907UXpA== +"@typescript-eslint/types@5.57.1": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.57.1.tgz#d9989c7a9025897ea6f0550b7036027f69e8a603" + integrity sha512-bSs4LOgyV3bJ08F5RDqO2KXqg3WAdwHCu06zOqcQ6vqbTJizyBhuh1o1ImC69X4bV2g1OJxbH71PJqiO7Y1RuA== + "@typescript-eslint/typescript-estree@4.27.0": version "4.27.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.27.0.tgz#189a7b9f1d0717d5cccdcc17247692dedf7a09da" @@ -3485,6 +3517,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.57.1": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.1.tgz#10d9643e503afc1ca4f5553d9bbe672ea4050b71" + integrity sha512-A2MZqD8gNT0qHKbk2wRspg7cHbCDCk2tcqt6ScCFLr5Ru8cn+TCfM786DjPhqwseiS+PrYwcXht5ztpEQ6TFTw== + dependencies: + "@typescript-eslint/types" "5.57.1" + "@typescript-eslint/visitor-keys" "5.57.1" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/utils@5.15.0", "@typescript-eslint/utils@^5.10.0", "@typescript-eslint/utils@^5.13.0": version "5.15.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.15.0.tgz#468510a0974d3ced8342f37e6c662778c277f136" @@ -3509,6 +3554,20 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" +"@typescript-eslint/utils@5.57.1": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.57.1.tgz#0f97b0bbd88c2d5e2036869f26466be5f4c69475" + integrity sha512-kN6vzzf9NkEtawECqze6v99LtmDiUJCVpvieTFA1uL7/jDghiJGubGZ5csicYHU1Xoqb3oH/R5cN5df6W41Nfg== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.57.1" + "@typescript-eslint/types" "5.57.1" + "@typescript-eslint/typescript-estree" "5.57.1" + eslint-scope "^5.1.1" + semver "^7.3.7" + "@typescript-eslint/visitor-keys@4.27.0": version "4.27.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.27.0.tgz#f56138b993ec822793e7ebcfac6ffdce0a60cb81" @@ -3541,6 +3600,14 @@ "@typescript-eslint/types" "5.41.0" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.57.1": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.1.tgz#585e5fa42a9bbcd9065f334fd7c8a4ddfa7d905e" + integrity sha512-RjQrAniDU0CEk5r7iphkm731zKlFiUjvcBS2yHAg8WWqFMCaCrD0rKEVOMUyMMcbGPZ0bPp56srkGWrgfZqLRA== + dependencies: + "@typescript-eslint/types" "5.57.1" + eslint-visitor-keys "^3.3.0" + "@vercel/analytics@0.1.11": version "0.1.11" resolved "https://registry.yarnpkg.com/@vercel/analytics/-/analytics-0.1.11.tgz#727a0ac655a4a89104cdea3e6925476470299428" @@ -5520,6 +5587,15 @@ eslint-plugin-css-modules@^2.11.0: gonzales-pe "^4.0.3" lodash "^4.17.2" +eslint-plugin-deprecation@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.4.0.tgz#7c3194603cb7199ed7f3c4f12dae8db758835a71" + integrity sha512-ghFrjqdtwL4sUWjcmPu0J1HTXPDonFJLFdlPwzlvUMkoJNzR9R8Ua/J10mA4vFX9p1ggf/HWvmWBwew2XMTzmQ== + dependencies: + "@typescript-eslint/experimental-utils" "^5.57.0" + tslib "^2.3.1" + tsutils "^3.21.0" + eslint-plugin-flowtype@^8.0.3: version "8.0.3" resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz#e1557e37118f24734aa3122e7536a038d34a4912" From da977143c2c3cdad5ff27ff3132bf35e130e3f1a Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 5 Apr 2023 15:43:25 +0200 Subject: [PATCH 189/312] v2.13.0-beta.1 --- packages/use-intl/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/use-intl/package.json b/packages/use-intl/package.json index 43d37ea5e..1b16b95e6 100644 --- a/packages/use-intl/package.json +++ b/packages/use-intl/package.json @@ -1,6 +1,6 @@ { "name": "use-intl", - "version": "2.12.0", + "version": "2.13.0-beta.1", "sideEffects": false, "author": "Jan Amann ", "description": "Minimal, but complete solution for managing internationalization in React apps.", From eb4fd676ffff25d58ea992a52c8ab79a47e5f1a2 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 5 Apr 2023 15:48:44 +0200 Subject: [PATCH 190/312] Wording & latest beta --- packages/website/pages/docs/next-13/index.mdx | 2 +- .../pages/docs/next-13/server-components.mdx | 27 +++++++++++++------ yarn.lock | 18 ++++++++++++- 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/packages/website/pages/docs/next-13/index.mdx b/packages/website/pages/docs/next-13/index.mdx index 88602bce6..62ec440f7 100644 --- a/packages/website/pages/docs/next-13/index.mdx +++ b/packages/website/pages/docs/next-13/index.mdx @@ -1,6 +1,6 @@ # Next.js 13 -With the introduction of [the `app` directory](https://beta.nextjs.org/docs/routing/fundamentals), Next.js 13 provides a new level of flexibility for React apps. +With the introduction of [the App Router](https://beta.nextjs.org/docs/routing/fundamentals), Next.js 13 provides a new level of flexibility for React apps. There are two major changes that affect `next-intl`: diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index ccd427d75..cf0035715 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -2,32 +2,43 @@ import Callout from 'components/Callout'; # Usage in Server Components (beta) -Next.js 13 introduces support for [React Server Components](https://beta.nextjs.org/docs/rendering/server-and-client-components) in the `app` directory. `next-intl` is adopting the new capabilities and is currently offering a beta version to early adopters, who are already building apps with the `app` directory. +Next.js 13 introduces support for [React Server Components](https://beta.nextjs.org/docs/rendering/server-and-client-components) with the App Router. `next-intl` is adopting the new capabilities and is currently offering a beta version to early adopters, who are already building apps within the `app` directory. - The `app` directory is currently in beta, patterns are still emerging and APIs - may change. Please **use this at your own risk**, knowing that you might have - to face a migration effort as the `app` directory becomes stable. + The App Router is currently in beta, patterns are still emerging and APIs may + change. Please **use this at your own risk**, knowing that you might have to + face a migration effort as the App Router becomes stable. ## Current beta version ``` -npm install next-intl@2.12.0-beta.5 +npm install next-intl@2.13.0-beta.1 ``` This beta version was tested with `next@13.2.4`. ## Roadmap -- ✅ All APIs from `next-intl` can be used in Server Components. -- 💡 Currently SSR-only (i.e. no `generateStaticParams`), therefore consider [CDN caching](#cdn-caching). +| Feature | Status | +| :------------------------------------------------- | :----: | +| Usage of all `next-intl` APIs in Server Components | ✅ | +| Middleware for i18n routing | ✅ | +| Dynamic rendering | ✅ | +| Static rendering (i.e. `generateStaticParams`) | 🏗️ | + + + While the support for static rendering is pending, consider [CDN + caching](#cdn-caching) to get the same performance characteristics from + dynamic rendering or [use Client Components](/docs/next-13/client-components) + for the time being. + For details, see the [pending pull request for Server Components support](https://github.com/amannn/next-intl/pull/149). ## Getting started -If you haven't done so already, [create a Next.js 13 app that uses the `app` directory](https://beta.nextjs.org/docs/installation). All pages should be moved within a `[locale]` folder so that we can use this segment to provide content in different languages (e.g. `/en`, `/en/about`, etc.). +If you haven't done so already, [create a Next.js 13 app that uses the App Router](https://beta.nextjs.org/docs/installation). All pages should be moved within a `[locale]` folder so that we can use this segment to provide content in different languages (e.g. `/en`, `/en/about`, etc.). **Start by creating the following file structure:** diff --git a/yarn.lock b/yarn.lock index 52dad2b39..e335c6d40 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3640,7 +3640,7 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -accept-language-parser@1.5.0: +accept-language-parser@1.5.0, accept-language-parser@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/accept-language-parser/-/accept-language-parser-1.5.0.tgz#8877c54040a8dcb59e0a07d9c1fde42298334791" integrity sha512-QhyTbMLYo0BBGg1aWbeMG4ekWtds/31BrEU+DONOg/7ax23vxpL03Pb7/zBmha2v7vdD3AyzZVWBVGEZxKOXWw== @@ -9554,6 +9554,14 @@ neo-async@^2.6.0: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +next-intl@*, next-intl@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/next-intl/-/next-intl-2.12.0.tgz#36c57a31381479ebc8eddf3e10d3ffdcd266bc68" + integrity sha512-UWKLA3BIsezFo/OJelGYmJL3BsztApo2mgvmwHMDbTsuBJx0x4SaIIPapnPHPzMhUbppZIbY70xNIULHwn++hg== + dependencies: + accept-language-parser "^1.5.0" + use-intl "^2.12.0" + next-mdx-remote@^4.2.1: version "4.3.0" resolved "https://registry.yarnpkg.com/next-mdx-remote/-/next-mdx-remote-4.3.0.tgz#34c5223c8a6465ab4484e8b22efff840c510316a" @@ -12812,6 +12820,14 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +use-intl@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/use-intl/-/use-intl-2.12.0.tgz#66f39d1ab387b4562caff66aee0927ae6564bbc4" + integrity sha512-LcmAqn78o6Ii9wsLERKAXI9QfiSVBzY3u+mSh6YCLUKhDhr7WHqTBfhEV1gZvdwy7mydhwWQUyQ9Zy5XHuUOAQ== + dependencies: + "@formatjs/ecma402-abstract" "^1.11.4" + intl-messageformat "^9.3.18" + use-sync-external-store@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" From dfb33fa0a62778149b24a3ec912d1d1ed60bff8e Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 5 Apr 2023 16:07:43 +0200 Subject: [PATCH 191/312] Fix link --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index cf0035715..9890cd647 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -491,7 +491,7 @@ module.exports = withNextIntl({ Since `next-intl` isn't aware of the rewrites you've configured, you likely want to make some adjustments: -1. Turn off [the `alternateLinks` option](#alternate-links) in the middleware and provide [search engine hints about localized versions of your content](https://developers.google.com/search/docs/specialty/international/localized-versions) by yourself. +1. Turn off [the `alternateLinks` option](#disable-alternate-links) in the middleware and provide [search engine hints about localized versions of your content](https://developers.google.com/search/docs/specialty/international/localized-versions) by yourself. 2. Translate the pathnames you're passing to the [routing APIs from `next-intl`](#routing) ([example](https://github.com/amannn/next-intl/blob/feat/next-13-rsc/packages/example-next-13-named-routes/)). ## Using internationalization outside of components From 30232d627d8de6ccb190d7a3966853b564ac7214 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 5 Apr 2023 16:16:26 +0200 Subject: [PATCH 192/312] Improve code samples --- .../pages/docs/next-13/server-components.mdx | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 9890cd647..6ffc4d616 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -360,7 +360,7 @@ If you want to serve your localized content based on different domains, you can - `ca.example.com` (default: `en`) - `ca.example.com/fr` (`fr`) -```tsx +```tsx filename="middleware.ts" import createIntlMiddleware from 'next-intl/middleware'; export default createIntlMiddleware({ @@ -422,12 +422,12 @@ Since the middleware is aware of all your domains, the domain will automatically If you want to include a prefix for the default locale as well, you can configure the middleware accordingly. -```tsx {6} +```tsx filename="middleware.ts" {6} import createIntlMiddleware from 'next-intl/middleware'; export default createIntlMiddleware({ - locales: ['en', 'de'], - defaultLocale: 'en', + // ... other config + localePrefix: 'always' // Defaults to 'as-needed' }); ``` @@ -440,12 +440,12 @@ Note that this will affect both prefix-based as well as domain-based routing. If you want to disable locale detection based on the `accept-language` header, you can opt-out of this mechanism. -```tsx {6} +```tsx filename="middleware.ts" {6} import createIntlMiddleware from 'next-intl/middleware'; export default createIntlMiddleware({ - locales: ['en', 'de'], - defaultLocale: 'en', + // ... other config + localeDetection: false // Defaults to `true` }); ``` @@ -458,14 +458,13 @@ The middleware automatically sets [the `link` header](https://developers.google. If you prefer to include these links yourself, you can opt-out of this behaviour. -```tsx filename="middleware.ts" +```tsx filename="middleware.ts" {6} import createIntlMiddleware from 'next-intl/middleware'; export default createIntlMiddleware({ // ... other config - // Default: `true` - alternateLinks: false + alternateLinks: false // Defaults to `true` }); ``` From cf87920ab6629f8d2e9753eaab42b25772e58bcd Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 6 Apr 2023 10:57:31 +0200 Subject: [PATCH 193/312] Use type-signatures from client-side in Server Component hooks to ensure consistency and add a warning for `useNow({updateInterval: number})` --- packages/next-intl/src/react-server/useFormatter.tsx | 6 +++++- packages/next-intl/src/react-server/useLocale.tsx | 6 +++++- packages/next-intl/src/react-server/useNow.tsx | 11 ++++++++++- packages/next-intl/src/react-server/useTimeZone.tsx | 6 +++++- .../next-intl/src/react-server/useTranslations.tsx | 11 +++++++++-- packages/use-intl/src/react/getIntlContextValue.tsx | 11 +++++------ yarn.lock | 10 +--------- 7 files changed, 40 insertions(+), 21 deletions(-) diff --git a/packages/next-intl/src/react-server/useFormatter.tsx b/packages/next-intl/src/react-server/useFormatter.tsx index 77d539e7a..1770846d2 100644 --- a/packages/next-intl/src/react-server/useFormatter.tsx +++ b/packages/next-intl/src/react-server/useFormatter.tsx @@ -1,6 +1,10 @@ +import type {useFormatter as useFormatterType} from 'use-intl'; import getFormatter from '../server/getFormatter'; import useHook from './useHook'; -export default function useFormatter() { +export default function useFormatter( + // eslint-disable-next-line no-empty-pattern + ...[]: Parameters +): ReturnType { return useHook('useFormatter', getFormatter()); } diff --git a/packages/next-intl/src/react-server/useLocale.tsx b/packages/next-intl/src/react-server/useLocale.tsx index e39b3c88b..31a685242 100644 --- a/packages/next-intl/src/react-server/useLocale.tsx +++ b/packages/next-intl/src/react-server/useLocale.tsx @@ -1,5 +1,9 @@ +import type {useLocale as useLocaleType} from 'use-intl'; import getLocale from '../server/getLocale'; -export default function useLocale() { +export default function useLocale( + // eslint-disable-next-line no-empty-pattern + ...[]: Parameters +): ReturnType { return getLocale(); } diff --git a/packages/next-intl/src/react-server/useNow.tsx b/packages/next-intl/src/react-server/useNow.tsx index 4b49b36b4..9e5653724 100644 --- a/packages/next-intl/src/react-server/useNow.tsx +++ b/packages/next-intl/src/react-server/useNow.tsx @@ -1,6 +1,15 @@ +import type {useNow as useNowType} from 'use-intl'; import getNow from '../server/getNow'; import useHook from './useHook'; -export default function useNow() { +export default function useNow( + ...[options]: Parameters +): ReturnType { + if (options?.updateInterval != null) { + console.error( + "`useNow` doesn't support the `updateInterval` option in Server Components, the value will be ignored. If you need the value to update, you can convert the component to a Client Component." + ); + } + return useHook('useNow', getNow()); } diff --git a/packages/next-intl/src/react-server/useTimeZone.tsx b/packages/next-intl/src/react-server/useTimeZone.tsx index 04c2b5350..1ae16da2c 100644 --- a/packages/next-intl/src/react-server/useTimeZone.tsx +++ b/packages/next-intl/src/react-server/useTimeZone.tsx @@ -1,6 +1,10 @@ +import type {useTimeZone as useTimeZoneType} from 'use-intl'; import getTimeZone from '../server/getTimeZone'; import useHook from './useHook'; -export default function useTimeZone() { +export default function useTimeZone( + // eslint-disable-next-line no-empty-pattern + ...[]: Parameters +): ReturnType { return useHook('useTimeZone', getTimeZone()); } diff --git a/packages/next-intl/src/react-server/useTranslations.tsx b/packages/next-intl/src/react-server/useTranslations.tsx index c4b503802..dde70957c 100644 --- a/packages/next-intl/src/react-server/useTranslations.tsx +++ b/packages/next-intl/src/react-server/useTranslations.tsx @@ -1,6 +1,13 @@ +import type {useTranslations as useTranslationsType} from 'use-intl'; import getTranslations from '../server/getTranslations'; import useHook from './useHook'; -export default function useTranslations(namespace?: string) { - return useHook('useTranslations', getTranslations(namespace)); +export default function useTranslations( + ...[namespace]: Parameters +): ReturnType { + const result = useHook('useTranslations', getTranslations(namespace)); + + // The types are slightly off here and indicate that rich text formatting + // doesn't integrate with React - this is not the case. + return result as any; } diff --git a/packages/use-intl/src/react/getIntlContextValue.tsx b/packages/use-intl/src/react/getIntlContextValue.tsx index 476a40b59..324df6426 100644 --- a/packages/use-intl/src/react/getIntlContextValue.tsx +++ b/packages/use-intl/src/react/getIntlContextValue.tsx @@ -5,12 +5,11 @@ import IntlProviderProps from './IntlProviderProps'; /** * Enhances the incoming props with defaults. */ -export default function getIntlContextValue({ - getMessageFallback, - messages, - onError, - ...rest -}: Omit) { +export default function getIntlContextValue< + // This is a generic to allow for stricter typing. E.g. + // the RSC integration always provides a `now` value. + Props extends Omit +>({getMessageFallback, messages, onError, ...rest}: Props) { const finalOnError = onError || defaultOnError; const finalGetMessageFallback = getMessageFallback || defaultGetMessageFallback; diff --git a/yarn.lock b/yarn.lock index e335c6d40..ae94eaeaf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3640,7 +3640,7 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -accept-language-parser@1.5.0, accept-language-parser@^1.5.0: +accept-language-parser@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/accept-language-parser/-/accept-language-parser-1.5.0.tgz#8877c54040a8dcb59e0a07d9c1fde42298334791" integrity sha512-QhyTbMLYo0BBGg1aWbeMG4ekWtds/31BrEU+DONOg/7ax23vxpL03Pb7/zBmha2v7vdD3AyzZVWBVGEZxKOXWw== @@ -9554,14 +9554,6 @@ neo-async@^2.6.0: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -next-intl@*, next-intl@^2.12.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/next-intl/-/next-intl-2.12.0.tgz#36c57a31381479ebc8eddf3e10d3ffdcd266bc68" - integrity sha512-UWKLA3BIsezFo/OJelGYmJL3BsztApo2mgvmwHMDbTsuBJx0x4SaIIPapnPHPzMhUbppZIbY70xNIULHwn++hg== - dependencies: - accept-language-parser "^1.5.0" - use-intl "^2.12.0" - next-mdx-remote@^4.2.1: version "4.3.0" resolved "https://registry.yarnpkg.com/next-mdx-remote/-/next-mdx-remote-4.3.0.tgz#34c5223c8a6465ab4484e8b22efff840c510316a" From bce9480c6d851793567f22e22d9c23b94004497c Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 6 Apr 2023 12:10:36 +0200 Subject: [PATCH 194/312] Include note about locales support in Polyfill.io (h/t to @alvarlagerlof) --- .../pages/docs/usage/runtime-requirements-polyfills.mdx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/website/pages/docs/usage/runtime-requirements-polyfills.mdx b/packages/website/pages/docs/usage/runtime-requirements-polyfills.mdx index ad7a9ab5c..be66ba26c 100644 --- a/packages/website/pages/docs/usage/runtime-requirements-polyfills.mdx +++ b/packages/website/pages/docs/usage/runtime-requirements-polyfills.mdx @@ -1,3 +1,5 @@ +import Callout from 'components/Callout'; + # Runtime requirements This page outlines requirements for your environment to use `next-intl`. @@ -48,6 +50,13 @@ function IntlPolyfills() { } ``` + + Note that Polyfill.io doesn't support every locale. You can find a list of the + available polyfills in the [`polyfill-service` GitHub + repository](https://github.com/Financial-Times/polyfill-service/tree/main/app/polyfill-libraries/polyfill-library/polyfills/__dist) + (e.g. search for `Intl.DateTimeFormat.~locale.de-AT`). + + ## Node The minimum required version is **Node.js 13**. Starting from this version, all required APIs are available. From 5e3fb47c112bce6b239e153d246642b6adc81786 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 6 Apr 2023 13:53:56 +0200 Subject: [PATCH 195/312] `localeDetection: false` should ignore the cookie too --- .../src/middleware/resolveLocale.tsx | 21 ++++++-------- .../test/middleware/middleware.test.tsx | 28 +++++++++++++++++-- .../pages/docs/next-13/server-components.mdx | 2 +- 3 files changed, 36 insertions(+), 15 deletions(-) diff --git a/packages/next-intl/src/middleware/resolveLocale.tsx b/packages/next-intl/src/middleware/resolveLocale.tsx index 3d9451acf..2698f2443 100644 --- a/packages/next-intl/src/middleware/resolveLocale.tsx +++ b/packages/next-intl/src/middleware/resolveLocale.tsx @@ -66,7 +66,7 @@ function resolveLocaleFromPrefix( } // Prio 2: Use existing cookie - if (!locale && requestCookies) { + if (!locale && localeDetection && requestCookies) { if (requestCookies.has(COOKIE_LOCALE_NAME)) { const value = requestCookies.get(COOKIE_LOCALE_NAME)?.value; if (value && locales.includes(value)) { @@ -110,17 +110,14 @@ function resolveLocaleFromDomain( pathname && pathname.startsWith(`/${localeFromPrefixStrategy}`); if (domain) { - if (localeFromPrefixStrategy) { - return { - locale: - isLocaleSupportedOnDomain(localeFromPrefixStrategy, domain) || - hasLocalePrefix - ? localeFromPrefixStrategy - : domain.defaultLocale, - localeFromPrefix: localeFromPrefixStrategy, - domain - }; - } + return { + locale: + isLocaleSupportedOnDomain(localeFromPrefixStrategy, domain) || + hasLocalePrefix + ? localeFromPrefixStrategy + : domain.defaultLocale, + domain + }; } } diff --git a/packages/next-intl/test/middleware/middleware.test.tsx b/packages/next-intl/test/middleware/middleware.test.tsx index 324c60c74..1cba4b06d 100644 --- a/packages/next-intl/test/middleware/middleware.test.tsx +++ b/packages/next-intl/test/middleware/middleware.test.tsx @@ -2,6 +2,7 @@ import {RequestCookies} from 'next/dist/compiled/@edge-runtime/cookies'; import {NextRequest, NextResponse} from 'next/server'; import createIntlMiddleware from '../../src/middleware'; import {DomainConfig} from '../../src/middleware/NextIntlMiddlewareConfig'; +import {COOKIE_LOCALE_NAME} from '../../src/shared/constants'; type MockResponse = NextResponse & { args: Array; @@ -24,11 +25,15 @@ jest.mock('next/server', () => { function createMockRequest( pathnameWithSearch = '/', locale = 'en', - host = 'http://localhost:3000' + host = 'http://localhost:3000', + localeCookieValue?: string ) { const headers = new Headers({ 'accept-language': `${locale};q=0.9,en;q=0.8`, - host: new URL(host).host + host: new URL(host).host, + ...(localeCookieValue && { + cookie: `${COOKIE_LOCALE_NAME}=${localeCookieValue}` + }) }); const url = host + pathnameWithSearch; @@ -136,6 +141,15 @@ describe('prefix-based routing', () => { ); }); + it('redirects requests for the root if a cookie exists with a non-default locale', () => { + middleware(createMockRequest('/', 'en', 'http://localhost:3000', 'de')); + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect.mock.calls[0][0].toString()).toBe( + 'http://localhost:3000/de' + ); + }); + it('serves requests for other locales when prefixed', () => { middleware(createMockRequest('/de')); expect(MockedNextResponse.next).toHaveBeenCalled(); @@ -189,6 +203,16 @@ describe('prefix-based routing', () => { 'http://localhost:3000/en' ); }); + + it('serves non-prefixed requests with the default locale and ignores an existing cookie value', () => { + middleware(createMockRequest('/', 'de', 'http://localhost:3000', 'de')); + + expect(MockedNextResponse.next).not.toHaveBeenCalled(); + expect(MockedNextResponse.redirect).not.toHaveBeenCalled(); + expect(MockedNextResponse.rewrite.mock.calls[0][0].toString()).toBe( + 'http://localhost:3000/en' + ); + }); }); describe('localePrefix: always', () => { diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index 6ffc4d616..c70d9595c 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -438,7 +438,7 @@ Note that this will affect both prefix-based as well as domain-based routing. #### Disable automatic locale detection -If you want to disable locale detection based on the `accept-language` header, you can opt-out of this mechanism. +If you want to rely entirely on the URL to resolve the locale, you can disable locale detection based on the `accept-language` header and a potentially existing cookie value from a previous visit. ```tsx filename="middleware.ts" {6} import createIntlMiddleware from 'next-intl/middleware'; From f7ce3ea184de1b958912359c81577026678777d3 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 6 Apr 2023 14:04:32 +0200 Subject: [PATCH 196/312] v2.13.0-beta.2 --- packages/use-intl/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/use-intl/package.json b/packages/use-intl/package.json index 1b16b95e6..5056d22ee 100644 --- a/packages/use-intl/package.json +++ b/packages/use-intl/package.json @@ -1,6 +1,6 @@ { "name": "use-intl", - "version": "2.13.0-beta.1", + "version": "2.13.0-beta.2", "sideEffects": false, "author": "Jan Amann ", "description": "Minimal, but complete solution for managing internationalization in React apps.", From 7cc3b6c43afb1593a5e2ac8e17391bcb36cbfdfc Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 6 Apr 2023 14:06:24 +0200 Subject: [PATCH 197/312] 2.13.0-beta.2 --- packages/website/pages/docs/next-13/server-components.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index c70d9595c..e780b54a1 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -13,7 +13,7 @@ Next.js 13 introduces support for [React Server Components](https://beta.nextjs. ## Current beta version ``` -npm install next-intl@2.13.0-beta.1 +npm install next-intl@2.13.0-beta.2 ``` This beta version was tested with `next@13.2.4`. From 21e9eae56f2bb002abbdff9cb4d510ffe2d28e0a Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 6 Apr 2023 14:22:58 +0200 Subject: [PATCH 198/312] Wording --- packages/website/pages/docs/next-13/index.mdx | 9 ++++++++- .../website/pages/docs/next-13/server-components.mdx | 6 +++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/website/pages/docs/next-13/index.mdx b/packages/website/pages/docs/next-13/index.mdx index 62ec440f7..355eff301 100644 --- a/packages/website/pages/docs/next-13/index.mdx +++ b/packages/website/pages/docs/next-13/index.mdx @@ -1,13 +1,20 @@ +import Callout from 'components/Callout'; + # Next.js 13 With the introduction of [the App Router](https://beta.nextjs.org/docs/routing/fundamentals), Next.js 13 provides a new level of flexibility for React apps. There are two major changes that affect `next-intl`: -1. Next.js is removing their built-in [internationalized routing](https://nextjs.org/docs/advanced-features/i18n-routing), leaving the implementation of this up to the user. To fill in the gap, `next-intl` provides a **drop-in middleware replacement for i18n routing**, handling the locale negotiation, redirects and cookies. +1. Next.js is removing their built-in [internationalized routing](https://nextjs.org/docs/advanced-features/i18n-routing), leaving the implementation of this up to the user. To fill in the gap, `next-intl` provides a **drop-in middleware replacement for i18n routing**, handling the locale negotiation, redirects, rewrites and cookies. 2. Next.js now supports **React Server Components**. There are currently two ways how you can set your app up with `next-intl` in the `app` directory: 1. [Deferring the usage of `next-intl` to Client Components](/docs/next-13/client-components) (stable, recommended when you migrate) 2. [Using `next-intl` in Server Components](/docs/next-13/server-components) (beta) + + + The [Server Components beta](/docs/next-13/server-components) also contains + many improvements for the i18n middleware. + diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index e780b54a1..e40e4c4d7 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -2,7 +2,7 @@ import Callout from 'components/Callout'; # Usage in Server Components (beta) -Next.js 13 introduces support for [React Server Components](https://beta.nextjs.org/docs/rendering/server-and-client-components) with the App Router. `next-intl` is adopting the new capabilities and is currently offering a beta version to early adopters, who are already building apps within the `app` directory. +Next.js 13 introduces support for [React Server Components](https://beta.nextjs.org/docs/rendering/server-and-client-components) with the App Router. `next-intl` is adopting the new capabilities and is currently offering a beta version to early adopters, who are already building apps with the `app` directory. The App Router is currently in beta, patterns are still emerging and APIs may @@ -303,12 +303,12 @@ import {getRequestConfig} from 'next-intl/server'; export default getRequestConfig(async ({locale}) => ({ messages: (await import(`../messages/${locale}.json`)).default, - // You can read from headers or cookies here if necessary + // You can read from headers or cookies here timeZone: headers().get('x-time-zone') ?? 'Europe/Berlin' })); ``` -Note that the configuration object will be created once for each request and will then be made available to all of Server Components in your app. +Note that the configuration object will be created once for each request and will then be made available to all Server Components in your app. ## Middleware configuration From 52195bec18322403512d77aa969fc07b9ec444ff Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 11 Apr 2023 12:07:40 +0200 Subject: [PATCH 199/312] Add Google site verification to docs --- packages/website/public/google2a52d47b4884506c.html | 1 + 1 file changed, 1 insertion(+) create mode 100644 packages/website/public/google2a52d47b4884506c.html diff --git a/packages/website/public/google2a52d47b4884506c.html b/packages/website/public/google2a52d47b4884506c.html new file mode 100644 index 000000000..8029fff0e --- /dev/null +++ b/packages/website/public/google2a52d47b4884506c.html @@ -0,0 +1 @@ +google-site-verification: google2a52d47b4884506c.html \ No newline at end of file From 1c6553896d121679fc73e6c424a28fccdf5f07f9 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 11 Apr 2023 12:32:30 +0200 Subject: [PATCH 200/312] Add sitemap --- packages/website/next-sitemap.config.js | 5 +++++ packages/website/package.json | 2 ++ packages/website/public/robots.txt | 9 +++++++++ packages/website/public/sitemap-0.xml | 22 ++++++++++++++++++++++ packages/website/public/sitemap.xml | 4 ++++ yarn.lock | 18 ++++++++++++++++++ 6 files changed, 60 insertions(+) create mode 100644 packages/website/next-sitemap.config.js create mode 100644 packages/website/public/robots.txt create mode 100644 packages/website/public/sitemap-0.xml create mode 100644 packages/website/public/sitemap.xml diff --git a/packages/website/next-sitemap.config.js b/packages/website/next-sitemap.config.js new file mode 100644 index 000000000..64cb22e20 --- /dev/null +++ b/packages/website/next-sitemap.config.js @@ -0,0 +1,5 @@ +/** @type {import('next-sitemap').IConfig} */ +module.exports = { + siteUrl: 'https://' + (process.env.VERCEL_URL || 'next-intl-docs.vercel.app'), + generateRobotsTxt: true +}; diff --git a/packages/website/package.json b/packages/website/package.json index 34c58590e..37b3295cf 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -7,6 +7,7 @@ "lint": "eslint pages components", "test": "echo 'No tests yet'", "build": "next build", + "postbuild": "next-sitemap", "start": "next start" }, "dependencies": { @@ -27,6 +28,7 @@ "eslint": "8.12.0", "eslint-config-molindo": "6.0.0", "eslint-config-next": "^12.0.0", + "next-sitemap": "4.0.7", "prettier-plugin-tailwindcss": "0.2.3" } } diff --git a/packages/website/public/robots.txt b/packages/website/public/robots.txt new file mode 100644 index 000000000..c09517d55 --- /dev/null +++ b/packages/website/public/robots.txt @@ -0,0 +1,9 @@ +# * +User-agent: * +Allow: / + +# Host +Host: https://next-intl-docs.vercel.app + +# Sitemaps +Sitemap: https://next-intl-docs.vercel.app/sitemap.xml diff --git a/packages/website/public/sitemap-0.xml b/packages/website/public/sitemap-0.xml new file mode 100644 index 000000000..abded4a57 --- /dev/null +++ b/packages/website/public/sitemap-0.xml @@ -0,0 +1,22 @@ + + +https://next-intl-docs.vercel.app2023-04-11T10:31:28.402Zdaily0.7 +https://next-intl-docs.vercel.app/docs/faq2023-04-11T10:31:28.402Zdaily0.7 +https://next-intl-docs.vercel.app/docs/getting-started2023-04-11T10:31:28.402Zdaily0.7 +https://next-intl-docs.vercel.app/docs/localization-management2023-04-11T10:31:28.402Zdaily0.7 +https://next-intl-docs.vercel.app/docs/next-132023-04-11T10:31:28.402Zdaily0.7 +https://next-intl-docs.vercel.app/docs/next-13/client-components2023-04-11T10:31:28.402Zdaily0.7 +https://next-intl-docs.vercel.app/docs/next-13/server-components2023-04-11T10:31:28.402Zdaily0.7 +https://next-intl-docs.vercel.app/docs/usage2023-04-11T10:31:28.402Zdaily0.7 +https://next-intl-docs.vercel.app/docs/usage/configuration2023-04-11T10:31:28.402Zdaily0.7 +https://next-intl-docs.vercel.app/docs/usage/core-library2023-04-11T10:31:28.402Zdaily0.7 +https://next-intl-docs.vercel.app/docs/usage/dates-times2023-04-11T10:31:28.402Zdaily0.7 +https://next-intl-docs.vercel.app/docs/usage/error-handling2023-04-11T10:31:28.402Zdaily0.7 +https://next-intl-docs.vercel.app/docs/usage/messages2023-04-11T10:31:28.402Zdaily0.7 +https://next-intl-docs.vercel.app/docs/usage/numbers2023-04-11T10:31:28.402Zdaily0.7 +https://next-intl-docs.vercel.app/docs/usage/production-checklist2023-04-11T10:31:28.402Zdaily0.7 +https://next-intl-docs.vercel.app/docs/usage/runtime-requirements-polyfills2023-04-11T10:31:28.402Zdaily0.7 +https://next-intl-docs.vercel.app/docs/usage/typescript2023-04-11T10:31:28.402Zdaily0.7 +https://next-intl-docs.vercel.app/examples/advanced2023-04-11T10:31:28.402Zdaily0.7 +https://next-intl-docs.vercel.app/examples/minimal2023-04-11T10:31:28.402Zdaily0.7 + \ No newline at end of file diff --git a/packages/website/public/sitemap.xml b/packages/website/public/sitemap.xml new file mode 100644 index 000000000..3d9c305f3 --- /dev/null +++ b/packages/website/public/sitemap.xml @@ -0,0 +1,4 @@ + + +https://next-intl-docs.vercel.app/sitemap-0.xml + \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index c7508334b..0be03214b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1265,6 +1265,11 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@corex/deepmerge@^4.0.37": + version "4.0.37" + resolved "https://registry.yarnpkg.com/@corex/deepmerge/-/deepmerge-4.0.37.tgz#873dcf71aee46596d7e385437b0d94770ef4c85f" + integrity sha512-PX90bEnrLdxd5e6rSFWsghExMuSw0Uov3fWJuuaoFuUQIS/446diu/4seExK5b+43L+SOBbd2uBGwYUkG1JfCw== + "@cspotcode/source-map-consumer@0.8.0": version "0.8.0" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" @@ -9315,6 +9320,11 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== +minimist@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + minipass-collect@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" @@ -9504,6 +9514,14 @@ next-seo@^5.5.0: resolved "https://registry.yarnpkg.com/next-seo/-/next-seo-5.15.0.tgz#b1a90508599774982909ea44803323c6fb7b50f4" integrity sha512-LGbcY91yDKGMb7YI+28n3g+RuChUkt6pXNpa8FkfKkEmNiJkeRDEXTnnjVtwT9FmMhG6NH8qwHTelGrlYm9rgg== +next-sitemap@4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/next-sitemap/-/next-sitemap-4.0.7.tgz#a8e7ffc1b8ec976b61171f4cb2d1d5384a2c4eb4" + integrity sha512-S2g5IwJeO0+ecmFq981fb+Mw9YWmntOuN/qTCxclSkUibOJ8qKIOye0vn6NEJ1S4tKhbY+MTYKgJpNdFZYxLoA== + dependencies: + "@corex/deepmerge" "^4.0.37" + minimist "^1.2.8" + next-themes@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.2.1.tgz#0c9f128e847979daf6c67f70b38e6b6567856e45" From b06d985fb5cf032638829f0158331e953df5c722 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 11 Apr 2023 12:36:06 +0200 Subject: [PATCH 201/312] Static sitemap domain --- packages/website/next-sitemap.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/next-sitemap.config.js b/packages/website/next-sitemap.config.js index 64cb22e20..eb0f706e3 100644 --- a/packages/website/next-sitemap.config.js +++ b/packages/website/next-sitemap.config.js @@ -1,5 +1,5 @@ /** @type {import('next-sitemap').IConfig} */ module.exports = { - siteUrl: 'https://' + (process.env.VERCEL_URL || 'next-intl-docs.vercel.app'), + siteUrl: 'https://next-intl-docs.vercel.app', generateRobotsTxt: true }; From 5ae58bb60a169294987315ea9c93f2bf79e4a4cb Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 12 Apr 2023 16:03:40 +0200 Subject: [PATCH 202/312] chore: Rebase Next.js 13 RSC integration (#239) --- CHANGELOG.md | 11 + lerna.json | 2 +- packages/example-advanced/CHANGELOG.md | 11 + packages/example-advanced/global.d.ts | 2 +- packages/example-advanced/package.json | 10 +- .../example-next-13-advanced/next.config.js | 2 +- .../example-next-13-advanced/package.json | 6 +- .../playwright.config.ts | 3 + .../src/middleware.ts | 4 +- .../tests/main.spec.ts | 14 +- .../example-next-13-named-routes/package.json | 6 +- .../playwright.config.ts | 4 +- .../example-next-13-with-pages/package.json | 6 +- .../src/middleware.ts | 8 +- packages/example-next-13/.eslintrc.js | 3 - packages/example-next-13/CHANGELOG.md | 11 + packages/example-next-13/README.md | 2 - packages/example-next-13/global.d.ts | 3 + packages/example-next-13/messages/de.json | 3 + packages/example-next-13/messages/en.json | 3 + packages/example-next-13/next-env.d.ts | 1 - packages/example-next-13/package.json | 10 +- .../src/app/[locale]/layout.tsx | 12 + packages/example-next-13/src/middleware.ts | 8 +- packages/example/CHANGELOG.md | 11 + packages/example/global.d.ts | 3 + packages/example/package.json | 11 +- packages/next-intl/CHANGELOG.md | 11 + packages/next-intl/package.json | 6 +- packages/next-intl/src/index.tsx | 10 +- .../next-intl/src/middleware/middleware.tsx | 11 +- .../next-intl/src/server/NextIntlConfig.tsx | 16 - .../src/server/createRequestConfig.tsx | 4 +- packages/next-intl/src/server/getConfig.tsx | 4 +- .../next-intl/src/server/getRequestConfig.tsx | 9 +- packages/next-intl/src/server/index.tsx | 14 +- .../src/shared/NextIntlClientProvider.tsx | 2 - .../NextIntlClientProvider.test.tsx | 0 packages/use-intl/CHANGELOG.md | 11 + packages/use-intl/package.json | 2 +- .../{IntlConfiguration.tsx => IntlConfig.tsx} | 20 +- .../src/core/createBaseTranslator.tsx | 15 +- .../use-intl/src/core/createTranslator.tsx | 6 +- .../src/core/createTranslatorImpl.tsx | 14 +- packages/use-intl/src/react/IntlContext.tsx | 4 +- .../use-intl/src/react/IntlContextValue.tsx | 21 - packages/use-intl/src/react/IntlProvider.tsx | 14 +- .../use-intl/src/react/IntlProviderProps.tsx | 17 - ...textValue.tsx => getInitializedConfig.tsx} | 6 +- packages/use-intl/src/react/useIntl.tsx | 2 +- packages/website/.gitignore | 3 + packages/website/CHANGELOG.md | 11 + packages/website/package.json | 4 +- .../pages/docs/next-13/client-components.mdx | 13 +- .../pages/docs/next-13/server-components.mdx | 20 +- .../public/google2a52d47b4884506c.html | 2 +- packages/website/public/robots.txt | 9 - packages/website/public/sitemap-0.xml | 22 -- packages/website/public/sitemap.xml | 4 - yarn.lock | 366 ++++++------------ 60 files changed, 387 insertions(+), 456 deletions(-) create mode 100644 packages/example-next-13/global.d.ts create mode 100644 packages/example/global.d.ts delete mode 100644 packages/next-intl/src/server/NextIntlConfig.tsx rename packages/next-intl/test/{client => shared}/NextIntlClientProvider.test.tsx (100%) rename packages/use-intl/src/core/{IntlConfiguration.tsx => IntlConfig.tsx} (72%) delete mode 100644 packages/use-intl/src/react/IntlContextValue.tsx delete mode 100644 packages/use-intl/src/react/IntlProviderProps.tsx rename packages/use-intl/src/react/{getIntlContextValue.tsx => getInitializedConfig.tsx} (83%) delete mode 100644 packages/website/public/robots.txt delete mode 100644 packages/website/public/sitemap-0.xml delete mode 100644 packages/website/public/sitemap.xml diff --git a/CHANGELOG.md b/CHANGELOG.md index 6366d641d..37ff5d5a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# 2.13.0 (2023-04-12) + + +### Features + +* Sync improvements from RSC branch to main ([#238](https://github.com/amannn/next-intl/issues/238)) ([1d12ba2](https://github.com/amannn/next-intl/commit/1d12ba219afdbca77663c9d20f18db746de033fd)), closes [#149](https://github.com/amannn/next-intl/issues/149) [#237](https://github.com/amannn/next-intl/issues/237) + + + + + # 2.12.0 (2023-03-25) diff --git a/lerna.json b/lerna.json index 6b1cf37f4..e1db32e82 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "2.12.0", + "version": "2.13.0", "packages": [ "packages/use-intl", "packages/next-intl", diff --git a/packages/example-advanced/CHANGELOG.md b/packages/example-advanced/CHANGELOG.md index ea2c662d0..e95973f76 100644 --- a/packages/example-advanced/CHANGELOG.md +++ b/packages/example-advanced/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# 2.13.0 (2023-04-12) + + +### Features + +* Sync improvements from RSC branch to main ([#238](https://github.com/amannn/next-intl/issues/238)) ([1d12ba2](https://github.com/amannn/next-intl/commit/1d12ba219afdbca77663c9d20f18db746de033fd)), closes [#149](https://github.com/amannn/next-intl/issues/149) [#237](https://github.com/amannn/next-intl/issues/237) + + + + + # 2.12.0 (2023-03-25) diff --git a/packages/example-advanced/global.d.ts b/packages/example-advanced/global.d.ts index 0e9a1a3de..977f99282 100644 --- a/packages/example-advanced/global.d.ts +++ b/packages/example-advanced/global.d.ts @@ -1,3 +1,3 @@ -// Declaring this interface provides type safety for message keys +// Use type safe message keys with `next-intl` type Messages = typeof import('./messages/en.json'); declare interface IntlMessages extends Messages {} diff --git a/packages/example-advanced/package.json b/packages/example-advanced/package.json index 4fa14ef30..5a51962d0 100644 --- a/packages/example-advanced/package.json +++ b/packages/example-advanced/package.json @@ -1,6 +1,6 @@ { "name": "example-advanced", - "version": "2.12.0", + "version": "2.13.0", "private": true, "scripts": { "dev": "next dev", @@ -12,13 +12,12 @@ "dependencies": { "accept-language-parser": "1.5.0", "lodash": "^4.17.21", - "next": "^13.0.0", - "next-intl": "^2.12.0", + "next": "^13.3.0", + "next-intl": "^2.13.0", "react": "^18.2.0", "react-dom": "^18.2.0" }, "devDependencies": { - "typescript": "^4.6.3", "@testing-library/react": "^13.0.0", "@types/accept-language-parser": "^1.5.3", "@types/lodash": "^4.14.176", @@ -27,6 +26,7 @@ "eslint": "^8.12.0", "eslint-config-molindo": "^6.0.0", "eslint-config-next": "^13.0.0", - "jest": "^27.4.5" + "jest": "^27.4.5", + "typescript": "^4.6.3" } } diff --git a/packages/example-next-13-advanced/next.config.js b/packages/example-next-13-advanced/next.config.js index 80bb8a702..c3dc46ecf 100644 --- a/packages/example-next-13-advanced/next.config.js +++ b/packages/example-next-13-advanced/next.config.js @@ -18,7 +18,7 @@ module.exports = withNextIntl({ headers() { return [ { - source: '/((?!_next|assets|favicon.ico).*)', + source: '/((?!_next|.*\\..*).*)', missing: [ { type: 'header', diff --git a/packages/example-next-13-advanced/package.json b/packages/example-next-13-advanced/package.json index 0cd7ccb78..e25775fb4 100644 --- a/packages/example-next-13-advanced/package.json +++ b/packages/example-next-13-advanced/package.json @@ -13,13 +13,12 @@ "dependencies": { "lodash": "^4.17.21", "ms": "2.1.3", - "next": "13.2.4", + "next": "13.3.0", "next-intl": "*", "react": "^18.2.0", "react-dom": "^18.2.0" }, "devDependencies": { - "typescript": "^4.6.3", "@playwright/test": "^1.29.0", "@types/lodash": "^4.14.176", "@types/node": "^17.0.23", @@ -27,6 +26,7 @@ "chokidar-cli": "3.0.0", "eslint": "^8.12.0", "eslint-config-molindo": "^6.0.0", - "eslint-config-next": "^13.0.0" + "eslint-config-next": "^13.0.0", + "typescript": "^4.6.3" } } diff --git a/packages/example-next-13-advanced/playwright.config.ts b/packages/example-next-13-advanced/playwright.config.ts index 88d081ee1..a9af2e430 100644 --- a/packages/example-next-13-advanced/playwright.config.ts +++ b/packages/example-next-13-advanced/playwright.config.ts @@ -10,6 +10,9 @@ const config: PlaywrightTestConfig = { use: devices['Desktop Chrome'] } ], + use: { + baseURL: 'http://localhost:3000' + }, webServer: { reuseExistingServer: true, command: 'yarn start', diff --git a/packages/example-next-13-advanced/src/middleware.ts b/packages/example-next-13-advanced/src/middleware.ts index 4c8d64e98..9a620120c 100644 --- a/packages/example-next-13-advanced/src/middleware.ts +++ b/packages/example-next-13-advanced/src/middleware.ts @@ -1,6 +1,6 @@ -import createIntlMiddleware from 'next-intl/middleware'; +import createMiddleware from 'next-intl/middleware'; -export default createIntlMiddleware({ +export default createMiddleware({ locales: ['en', 'de', 'es'], defaultLocale: 'en' }); diff --git a/packages/example-next-13-advanced/tests/main.spec.ts b/packages/example-next-13-advanced/tests/main.spec.ts index f58bad79f..1a7734365 100644 --- a/packages/example-next-13-advanced/tests/main.spec.ts +++ b/packages/example-next-13-advanced/tests/main.spec.ts @@ -338,8 +338,18 @@ it('keeps search params for redirects', async ({browser}) => { }); it('sets alternate links', async ({request}) => { + async function getLinks(pathname: string) { + return ( + (await request.get(pathname)) + .headers() + .link.split(', ') + // On CI, Playwright uses a different host somehow + .map((cur) => cur.replace(/0\.0\.0\.0/g, 'localhost')) + ); + } + for (const pathname of ['/', '/en', '/de']) { - expect((await request.get(pathname)).headers().link.split(', ')).toEqual([ + expect(await getLinks(pathname)).toEqual([ '; rel="alternate"; hreflang="en"', '; rel="alternate"; hreflang="de"', '; rel="alternate"; hreflang="es"', @@ -348,7 +358,7 @@ it('sets alternate links', async ({request}) => { } for (const pathname of ['/nested', '/en/nested', '/de/nested']) { - expect((await request.get(pathname)).headers().link.split(', ')).toEqual([ + expect(await getLinks(pathname)).toEqual([ '; rel="alternate"; hreflang="en"', '; rel="alternate"; hreflang="de"', '; rel="alternate"; hreflang="es"', diff --git a/packages/example-next-13-named-routes/package.json b/packages/example-next-13-named-routes/package.json index 052f7d3db..2ae50d555 100644 --- a/packages/example-next-13-named-routes/package.json +++ b/packages/example-next-13-named-routes/package.json @@ -11,13 +11,12 @@ "start": "next start" }, "dependencies": { - "next": "13.2.4", + "next": "13.3.0", "next-intl": "*", "react": "^18.2.0", "react-dom": "^18.2.0" }, "devDependencies": { - "typescript": "^4.6.3", "@playwright/test": "^1.29.0", "@types/lodash": "^4.14.176", "@types/node": "^17.0.23", @@ -25,6 +24,7 @@ "chokidar-cli": "3.0.0", "eslint": "^8.12.0", "eslint-config-molindo": "^6.0.0", - "eslint-config-next": "^13.0.0" + "eslint-config-next": "^13.0.0", + "typescript": "^4.6.3" } } diff --git a/packages/example-next-13-named-routes/playwright.config.ts b/packages/example-next-13-named-routes/playwright.config.ts index 88d081ee1..fe80bd553 100644 --- a/packages/example-next-13-named-routes/playwright.config.ts +++ b/packages/example-next-13-named-routes/playwright.config.ts @@ -11,9 +11,9 @@ const config: PlaywrightTestConfig = { } ], webServer: { - reuseExistingServer: true, command: 'yarn start', - port: 3000 + port: 3000, + reuseExistingServer: true } }; diff --git a/packages/example-next-13-with-pages/package.json b/packages/example-next-13-with-pages/package.json index 0741be8a4..2498b35eb 100644 --- a/packages/example-next-13-with-pages/package.json +++ b/packages/example-next-13-with-pages/package.json @@ -10,18 +10,18 @@ "start": "next start" }, "dependencies": { - "next": "13.2.4", + "next": "13.3.0", "next-intl": "*", "react": "^18.2.0", "react-dom": "^18.2.0" }, "devDependencies": { - "typescript": "^4.6.3", "@types/lodash": "^4.14.176", "@types/node": "^17.0.23", "@types/react": "^18.0.23", "eslint": "^8.12.0", "eslint-config-molindo": "^6.0.0", - "eslint-config-next": "^13.0.0" + "eslint-config-next": "^13.0.0", + "typescript": "^4.6.3" } } diff --git a/packages/example-next-13-with-pages/src/middleware.ts b/packages/example-next-13-with-pages/src/middleware.ts index b419c4ac0..b1b90e4a2 100644 --- a/packages/example-next-13-with-pages/src/middleware.ts +++ b/packages/example-next-13-with-pages/src/middleware.ts @@ -1,11 +1,11 @@ -import createIntlMiddleware from 'next-intl/middleware'; +import createMiddleware from 'next-intl/middleware'; -export default createIntlMiddleware({ +export default createMiddleware({ locales: ['en', 'de'], defaultLocale: 'en' }); export const config = { - // Skip all non-content paths - matcher: ['/((?!api|_next|favicon.ico).*)'] + // Skip all paths that should not be internationalized + matcher: ['/((?!_next|.*\\..*).*)'] }; diff --git a/packages/example-next-13/.eslintrc.js b/packages/example-next-13/.eslintrc.js index 3d3a6276c..b5d86dcc2 100644 --- a/packages/example-next-13/.eslintrc.js +++ b/packages/example-next-13/.eslintrc.js @@ -1,9 +1,6 @@ require('eslint-config-molindo/setupPlugins'); module.exports = { - env: { - node: true - }, extends: [ 'molindo/typescript', 'molindo/react', diff --git a/packages/example-next-13/CHANGELOG.md b/packages/example-next-13/CHANGELOG.md index 1890df4a0..4a6c97211 100644 --- a/packages/example-next-13/CHANGELOG.md +++ b/packages/example-next-13/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# 2.13.0 (2023-04-12) + + +### Features + +* Sync improvements from RSC branch to main ([#238](https://github.com/amannn/next-intl/issues/238)) ([1d12ba2](https://github.com/amannn/next-intl/commit/1d12ba219afdbca77663c9d20f18db746de033fd)), closes [#149](https://github.com/amannn/next-intl/issues/149) [#237](https://github.com/amannn/next-intl/issues/237) + + + + + # 2.12.0 (2023-03-25) diff --git a/packages/example-next-13/README.md b/packages/example-next-13/README.md index f7ad22c31..f8de937db 100644 --- a/packages/example-next-13/README.md +++ b/packages/example-next-13/README.md @@ -1,5 +1,3 @@ # example-next-13 An example that showcases usage of `next-intl` in the `app` folder of Next.js 13. - -[Demo](https://csb-k2ien9-7ytkomg4x-amann.vercel.app/en) diff --git a/packages/example-next-13/global.d.ts b/packages/example-next-13/global.d.ts new file mode 100644 index 000000000..977f99282 --- /dev/null +++ b/packages/example-next-13/global.d.ts @@ -0,0 +1,3 @@ +// Use type safe message keys with `next-intl` +type Messages = typeof import('./messages/en.json'); +declare interface IntlMessages extends Messages {} diff --git a/packages/example-next-13/messages/de.json b/packages/example-next-13/messages/de.json index 5a94eb059..c180bb26c 100644 --- a/packages/example-next-13/messages/de.json +++ b/packages/example-next-13/messages/de.json @@ -3,6 +3,9 @@ "title": "Start", "description": "Das ist die Startseite." }, + "LocaleLayout": { + "title": "next-intl Beispiel" + }, "LocaleSwitcher": { "switchLocale": "Zu {locale, select, de {Deutsch} en {Englisch} other {Unbekannt}} wechseln" } diff --git a/packages/example-next-13/messages/en.json b/packages/example-next-13/messages/en.json index f712b9bdb..320f677e1 100644 --- a/packages/example-next-13/messages/en.json +++ b/packages/example-next-13/messages/en.json @@ -3,6 +3,9 @@ "title": "Home", "description": "This is the home page." }, + "LocaleLayout": { + "title": "next-intl example" + }, "LocaleSwitcher": { "switchLocale": "Switch to {locale, select, de {German} en {English} other {Unknown}}" } diff --git a/packages/example-next-13/next-env.d.ts b/packages/example-next-13/next-env.d.ts index 7aa8e8ef7..4f11a03dc 100644 --- a/packages/example-next-13/next-env.d.ts +++ b/packages/example-next-13/next-env.d.ts @@ -1,6 +1,5 @@ /// /// -/// // NOTE: This file should not be edited // see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/packages/example-next-13/package.json b/packages/example-next-13/package.json index be00e8b32..e8255d764 100644 --- a/packages/example-next-13/package.json +++ b/packages/example-next-13/package.json @@ -1,6 +1,6 @@ { "name": "example-next-13", - "version": "2.12.0", + "version": "2.13.0", "private": true, "scripts": { "dev": "next dev", @@ -10,17 +10,17 @@ "start": "next start" }, "dependencies": { - "next": "13.2.4", - "next-intl": "^2.12.0", + "next": "^13.3.0", + "next-intl": "^2.13.0", "react": "^18.2.0", "react-dom": "^18.2.0" }, "devDependencies": { - "typescript": "^4.6.3", "@types/node": "^17.0.23", "@types/react": "^18.0.23", "eslint": "^8.12.0", "eslint-config-molindo": "^6.0.0", - "eslint-config-next": "^13.0.0" + "eslint-config-next": "^13.0.0", + "typescript": "^4.6.3" } } diff --git a/packages/example-next-13/src/app/[locale]/layout.tsx b/packages/example-next-13/src/app/[locale]/layout.tsx index 167035ac5..44ff7afc1 100644 --- a/packages/example-next-13/src/app/[locale]/layout.tsx +++ b/packages/example-next-13/src/app/[locale]/layout.tsx @@ -1,4 +1,5 @@ import {useLocale} from 'next-intl'; +import {getTranslations} from 'next-intl/server'; import {ReactNode} from 'react'; type Props = { @@ -6,6 +7,17 @@ type Props = { params: {locale: string}; }; +export async function generateMetadata() { + // You can use the core (non-React) APIs when you have to use next-intl + // outside of components. Potentially this will be simplified in the future + // (see https://next-intl-docs.vercel.app/docs/next-13/server-components). + const t = await getTranslations(); + + return { + title: t('LocaleLayout.title') + }; +} + export default async function LocaleLayout({children}: Props) { const locale = useLocale(); return ( diff --git a/packages/example-next-13/src/middleware.ts b/packages/example-next-13/src/middleware.ts index b419c4ac0..0c1479934 100644 --- a/packages/example-next-13/src/middleware.ts +++ b/packages/example-next-13/src/middleware.ts @@ -1,11 +1,11 @@ -import createIntlMiddleware from 'next-intl/middleware'; +import createMiddleware from 'next-intl/middleware'; -export default createIntlMiddleware({ +export default createMiddleware({ locales: ['en', 'de'], defaultLocale: 'en' }); export const config = { - // Skip all non-content paths - matcher: ['/((?!api|_next|favicon.ico).*)'] + // Skip all paths that should not be internationalized + matcher: ['/((?!api|_next|.*\\..*).*)'] }; diff --git a/packages/example/CHANGELOG.md b/packages/example/CHANGELOG.md index a28764496..52035b948 100644 --- a/packages/example/CHANGELOG.md +++ b/packages/example/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# 2.13.0 (2023-04-12) + + +### Features + +* Sync improvements from RSC branch to main ([#238](https://github.com/amannn/next-intl/issues/238)) ([1d12ba2](https://github.com/amannn/next-intl/commit/1d12ba219afdbca77663c9d20f18db746de033fd)), closes [#149](https://github.com/amannn/next-intl/issues/149) [#237](https://github.com/amannn/next-intl/issues/237) + + + + + # 2.12.0 (2023-03-25) diff --git a/packages/example/global.d.ts b/packages/example/global.d.ts new file mode 100644 index 000000000..977f99282 --- /dev/null +++ b/packages/example/global.d.ts @@ -0,0 +1,3 @@ +// Use type safe message keys with `next-intl` +type Messages = typeof import('./messages/en.json'); +declare interface IntlMessages extends Messages {} diff --git a/packages/example/package.json b/packages/example/package.json index 7e7c68ea8..09bb2a78a 100644 --- a/packages/example/package.json +++ b/packages/example/package.json @@ -1,6 +1,6 @@ { "name": "example", - "version": "2.12.0", + "version": "2.13.0", "private": true, "scripts": { "dev": "next dev", @@ -11,17 +11,18 @@ }, "dependencies": { "date-fns": "^2.16.1", - "next": "^13.0.0", - "next-intl": "^2.12.0", + "next": "^13.3.0", + "next-intl": "^2.13.0", "react": "^18.2.0", "react-dom": "^18.2.0" }, "devDependencies": { - "typescript": "^4.6.3", + "@types/lodash": "^4.14.176", "@types/node": "^17.0.23", "@types/react": "^18.0.23", "eslint": "^8.12.0", "eslint-config-molindo": "^6.0.0", - "eslint-config-next": "^13.0.0" + "eslint-config-next": "^13.0.0", + "typescript": "^4.6.3" } } diff --git a/packages/next-intl/CHANGELOG.md b/packages/next-intl/CHANGELOG.md index 2be91e393..fb0709f7f 100644 --- a/packages/next-intl/CHANGELOG.md +++ b/packages/next-intl/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# 2.13.0 (2023-04-12) + + +### Features + +* Sync improvements from RSC branch to main ([#238](https://github.com/amannn/next-intl/issues/238)) ([1d12ba2](https://github.com/amannn/next-intl/commit/1d12ba219afdbca77663c9d20f18db746de033fd)), closes [#149](https://github.com/amannn/next-intl/issues/149) [#237](https://github.com/amannn/next-intl/issues/237) + + + + + # 2.12.0 (2023-03-25) diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 36c3e313b..e61d93830 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -1,6 +1,6 @@ { "name": "next-intl", - "version": "2.12.0", + "version": "2.13.0", "sideEffects": false, "author": "Jan Amann ", "description": "A minimal, but complete solution for internationalization in Next.js apps.", @@ -66,7 +66,7 @@ "@formatjs/intl-localematcher": "0.2.32", "negotiator": "0.6.3", "server-only": "0.0.1", - "use-intl": "^2.12.0" + "use-intl": "^2.13.0" }, "peerDependencies": { "next": "^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0", @@ -80,7 +80,7 @@ "eslint": "8.12.0", "eslint-config-molindo": "6.0.0", "eslint-plugin-deprecation": "1.4.0", - "next": "13.2.4", + "next": "13.3.0", "react": "^18.2.0", "react-dom": "^18.2.0", "typescript": "^4.4.4" diff --git a/packages/next-intl/src/index.tsx b/packages/next-intl/src/index.tsx index 83129545b..b1aab3536 100644 --- a/packages/next-intl/src/index.tsx +++ b/packages/next-intl/src/index.tsx @@ -4,16 +4,16 @@ */ import Link from './shared/Link'; -import NextIntlClientProvider from './shared/NextIntlClientProvider'; export * from 'use-intl'; export {default as useLocalizedRouter} from './react-client/useLocalizedRouter'; export {default as Link} from './shared/Link'; -export {default as NextIntlClientProvider} from './shared/NextIntlClientProvider'; - -/** @deprecated Is called `NextIntlClientProvider` now. */ -export const NextIntlProvider = NextIntlClientProvider; /** @deprecated Is called `Link` now. */ export const LocalizedLink = Link; + +export {default as NextIntlClientProvider} from './shared/NextIntlClientProvider'; + +// Legacy export for compatibility +export {default as NextIntlProvider} from './shared/NextIntlClientProvider'; diff --git a/packages/next-intl/src/middleware/middleware.tsx b/packages/next-intl/src/middleware/middleware.tsx index 9ce4f50de..1df3e3a91 100644 --- a/packages/next-intl/src/middleware/middleware.tsx +++ b/packages/next-intl/src/middleware/middleware.tsx @@ -70,10 +70,19 @@ function receiveConfig(config: MiddlewareConfig) { return result; } -export default function createIntlMiddleware(config: MiddlewareConfig) { +export default function createMiddleware(config: MiddlewareConfig) { const configWithDefaults = receiveConfig(config); + // Currently only in use to enable a seamless upgrade path from the + // `{createIntlMiddleware} from 'next-intl/server'` API. + const matcher: Array | undefined = (config as any)._matcher; + return function middleware(request: NextRequest) { + const matches = + !matcher || + matcher.some((pattern) => request.nextUrl.pathname.match(pattern)); + if (!matches) return NextResponse.next(); + const {domain, locale} = resolveLocale( configWithDefaults, request.headers, diff --git a/packages/next-intl/src/server/NextIntlConfig.tsx b/packages/next-intl/src/server/NextIntlConfig.tsx deleted file mode 100644 index c99794c31..000000000 --- a/packages/next-intl/src/server/NextIntlConfig.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import AbstractIntlMessages from 'use-intl/dist/core/AbstractIntlMessages'; -import IntlProviderProps from 'use-intl/dist/react/IntlProviderProps'; - -type NextIntlConfig = { - messages?: AbstractIntlMessages; -} & Pick< - IntlProviderProps, - | 'defaultTranslationValues' - | 'formats' - | 'onError' - | 'getMessageFallback' - | 'now' - | 'timeZone' ->; - -export default NextIntlConfig; diff --git a/packages/next-intl/src/server/createRequestConfig.tsx b/packages/next-intl/src/server/createRequestConfig.tsx index 67056ea82..5986cebc5 100644 --- a/packages/next-intl/src/server/createRequestConfig.tsx +++ b/packages/next-intl/src/server/createRequestConfig.tsx @@ -1,9 +1,9 @@ // @ts-expect-error // eslint-disable-next-line import/no-extraneous-dependencies import getRuntimeConfig from 'next-intl/config'; -import NextIntlConfig from './NextIntlConfig'; +import IntlConfig from 'use-intl/dist/core/IntlConfig'; import {GetRequestConfigParams} from './getRequestConfig'; export default getRuntimeConfig as ( params: GetRequestConfigParams -) => NextIntlConfig | Promise; +) => IntlConfig | Promise; diff --git a/packages/next-intl/src/server/getConfig.tsx b/packages/next-intl/src/server/getConfig.tsx index 12c6b4f89..483883b44 100644 --- a/packages/next-intl/src/server/getConfig.tsx +++ b/packages/next-intl/src/server/getConfig.tsx @@ -1,5 +1,5 @@ import {cache} from 'react'; -import getIntlContextValue from 'use-intl/dist/src/react/getIntlContextValue'; +import getInitializedConfig from 'use-intl/dist/src/react/getInitializedConfig'; import createRequestConfig from '../server/createRequestConfig'; import getLocale from './getLocale'; @@ -21,7 +21,7 @@ const getConfig = cache(async () => { const locale = getLocale(); const runtimeConfig = await receiveRuntimeConfig(locale, createRequestConfig); const opts = {...runtimeConfig, locale}; - return getIntlContextValue(opts); + return getInitializedConfig(opts); }); export default getConfig; diff --git a/packages/next-intl/src/server/getRequestConfig.tsx b/packages/next-intl/src/server/getRequestConfig.tsx index d1d4b0950..00e1c7db0 100644 --- a/packages/next-intl/src/server/getRequestConfig.tsx +++ b/packages/next-intl/src/server/getRequestConfig.tsx @@ -1,13 +1,18 @@ -import NextIntlConfig from './NextIntlConfig'; +import IntlConfig from 'use-intl/dist/core/IntlConfig'; + +type RequestConfig = Omit; export type GetRequestConfigParams = { locale: string; }; +/** + * Should be called in `i18n.ts` to create the configuration for the current request. + */ export default function getRequestConfig( createRequestConfig: ({ locale - }: GetRequestConfigParams) => NextIntlConfig | Promise + }: GetRequestConfigParams) => RequestConfig | Promise ) { return createRequestConfig; } diff --git a/packages/next-intl/src/server/index.tsx b/packages/next-intl/src/server/index.tsx index c114754ef..2d6adba82 100644 --- a/packages/next-intl/src/server/index.tsx +++ b/packages/next-intl/src/server/index.tsx @@ -5,7 +5,19 @@ /** @deprecated */ export function createIntlMiddleware() { throw new Error( - "DEPRECATION ERROR: `import {createIntlMiddleware} from 'next-intl';` is deprecated and needs to be replaced with `import createIntlMiddleware from 'next-intl/middleware'`." + ` + Importing \`createMiddleware\` from \`next-intl/server\` is deprecated and no longer supported. Please update the import and add a \`matcher\`: + + // middleware.ts + import createMiddleware from 'next-intl/middleware'; + + // ... + + export const config = { + // Skip all paths that should not be internationalized + matcher: ['/((?!api|_next|.*\\\\..*).*)'] + }; + ` ); } diff --git a/packages/next-intl/src/shared/NextIntlClientProvider.tsx b/packages/next-intl/src/shared/NextIntlClientProvider.tsx index 30afbbef1..c566bc9ee 100644 --- a/packages/next-intl/src/shared/NextIntlClientProvider.tsx +++ b/packages/next-intl/src/shared/NextIntlClientProvider.tsx @@ -10,8 +10,6 @@ type Props = Omit, 'locale' | 'now'> & { now?: Date | string; }; -// Move this from /client to default - export default function NextIntlClientProvider({ children, locale, diff --git a/packages/next-intl/test/client/NextIntlClientProvider.test.tsx b/packages/next-intl/test/shared/NextIntlClientProvider.test.tsx similarity index 100% rename from packages/next-intl/test/client/NextIntlClientProvider.test.tsx rename to packages/next-intl/test/shared/NextIntlClientProvider.test.tsx diff --git a/packages/use-intl/CHANGELOG.md b/packages/use-intl/CHANGELOG.md index afb80a1f3..f6f19d825 100644 --- a/packages/use-intl/CHANGELOG.md +++ b/packages/use-intl/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# 2.13.0 (2023-04-12) + + +### Features + +* Sync improvements from RSC branch to main ([#238](https://github.com/amannn/next-intl/tree/main/packages/use-intl/issues/238)) ([1d12ba2](https://github.com/amannn/next-intl/tree/main/packages/use-intl/commit/1d12ba219afdbca77663c9d20f18db746de033fd)), closes [#149](https://github.com/amannn/next-intl/tree/main/packages/use-intl/issues/149) [#237](https://github.com/amannn/next-intl/tree/main/packages/use-intl/issues/237) + + + + + # 2.12.0 (2023-03-25) diff --git a/packages/use-intl/package.json b/packages/use-intl/package.json index 5056d22ee..250dced14 100644 --- a/packages/use-intl/package.json +++ b/packages/use-intl/package.json @@ -1,6 +1,6 @@ { "name": "use-intl", - "version": "2.13.0-beta.2", + "version": "2.13.0", "sideEffects": false, "author": "Jan Amann ", "description": "Minimal, but complete solution for managing internationalization in React apps.", diff --git a/packages/use-intl/src/core/IntlConfiguration.tsx b/packages/use-intl/src/core/IntlConfig.tsx similarity index 72% rename from packages/use-intl/src/core/IntlConfiguration.tsx rename to packages/use-intl/src/core/IntlConfig.tsx index e64948e89..3f986c6a1 100644 --- a/packages/use-intl/src/core/IntlConfiguration.tsx +++ b/packages/use-intl/src/core/IntlConfig.tsx @@ -1,11 +1,12 @@ import Formats from './Formats'; import IntlError from './IntlError'; +import {AbstractIntlMessages, RichTranslationValues} from '.'; /** * Should be used for entry points that configure the library. */ -type IntlConfiguration = { +type IntlConfig = { /** A valid Unicode locale tag (e.g. "en" or "en-GB"). */ locale: string; /** Global formats can be provided to achieve consistent @@ -36,15 +37,22 @@ type IntlConfiguration = { * afterwards the current date will be returned continuously. */ now?: Date; + /** All messages that will be available. */ + messages?: Messages; + /** Global default values for translation values and rich text elements. + * Can be used for consistent usage or styling of rich text elements. + * Defaults will be overidden by locally provided values. */ + defaultTranslationValues?: RichTranslationValues; }; /** * A stricter set of the configuration that should be used internally * once defaults are assigned to `IntlConfiguration`. */ -export type InitializedIntlConfiguration = IntlConfiguration & { - onError: NonNullable; - getMessageFallback: NonNullable; -}; +export type InitializedIntlConfig = + IntlConfig & { + onError: NonNullable['onError']>; + getMessageFallback: NonNullable['getMessageFallback']>; + }; -export default IntlConfiguration; +export default IntlConfig; diff --git a/packages/use-intl/src/core/createBaseTranslator.tsx b/packages/use-intl/src/core/createBaseTranslator.tsx index f93253713..f077aa48d 100644 --- a/packages/use-intl/src/core/createBaseTranslator.tsx +++ b/packages/use-intl/src/core/createBaseTranslator.tsx @@ -9,7 +9,7 @@ import { } from 'react'; import AbstractIntlMessages from './AbstractIntlMessages'; import Formats from './Formats'; -import {InitializedIntlConfiguration} from './IntlConfiguration'; +import {InitializedIntlConfig} from './IntlConfig'; import IntlError, {IntlErrorCode} from './IntlError'; import TranslationValues, {RichTranslationValues} from './TranslationValues'; import convertFormatsToIntlMessageFormat from './convertFormatsToIntlMessageFormat'; @@ -121,13 +121,12 @@ export function getMessagesOrError({ } } -export type CreateBaseTranslatorProps = - InitializedIntlConfiguration & { - cachedFormatsByLocale?: Record>; - defaultTranslationValues?: RichTranslationValues; - namespace?: string; - messagesOrError: Messages | IntlError; - }; +export type CreateBaseTranslatorProps = InitializedIntlConfig & { + cachedFormatsByLocale?: Record>; + defaultTranslationValues?: RichTranslationValues; + namespace?: string; + messagesOrError: Messages | IntlError; +}; export default function createBaseTranslator< Messages extends AbstractIntlMessages, diff --git a/packages/use-intl/src/core/createTranslator.tsx b/packages/use-intl/src/core/createTranslator.tsx index 87eed54ca..437edc839 100644 --- a/packages/use-intl/src/core/createTranslator.tsx +++ b/packages/use-intl/src/core/createTranslator.tsx @@ -1,5 +1,5 @@ import Formats from './Formats'; -import IntlConfiguration from './IntlConfiguration'; +import IntlConfig from './IntlConfig'; import TranslationValues from './TranslationValues'; import createTranslatorImpl, { CoreRichTranslationValues @@ -29,8 +29,8 @@ export default function createTranslator< messages, namespace, ...rest -}: IntlConfiguration & { - messages: IntlMessages; +}: Omit, 'defaultTranslationValues' | 'messages'> & { + messages: NonNullable['messages']>; namespace?: NestedKey; }): // Explicitly defining the return type is necessary as TypeScript would get it wrong { diff --git a/packages/use-intl/src/core/createTranslatorImpl.tsx b/packages/use-intl/src/core/createTranslatorImpl.tsx index db897b2a0..999f3141d 100644 --- a/packages/use-intl/src/core/createTranslatorImpl.tsx +++ b/packages/use-intl/src/core/createTranslatorImpl.tsx @@ -1,5 +1,5 @@ import AbstractIntlMessages from './AbstractIntlMessages'; -import {InitializedIntlConfiguration} from './IntlConfiguration'; +import {InitializedIntlConfig} from './IntlConfig'; import IntlError, {IntlErrorCode} from './IntlError'; import {RichTranslationValues, TranslationValue} from './TranslationValues'; import createBaseTranslator, {getMessagesOrError} from './createBaseTranslator'; @@ -11,11 +11,13 @@ export type CoreRichTranslationValues = Record< TranslationValue | ((chunks: string) => string) >; -export type CreateTranslatorImplProps = - InitializedIntlConfiguration & { - namespace: string; - messages: Messages; - }; +export type CreateTranslatorImplProps = Omit< + InitializedIntlConfig, + 'messages' +> & { + namespace: string; + messages: Messages; +}; export default function createTranslatorImpl< Messages extends AbstractIntlMessages, diff --git a/packages/use-intl/src/react/IntlContext.tsx b/packages/use-intl/src/react/IntlContext.tsx index ea6fa20d1..33ad89c41 100644 --- a/packages/use-intl/src/react/IntlContext.tsx +++ b/packages/use-intl/src/react/IntlContext.tsx @@ -1,6 +1,6 @@ import {createContext} from 'react'; -import IntlContextValue from './IntlContextValue'; +import {InitializedIntlConfig} from '../core/IntlConfig'; -const IntlContext = createContext(undefined); +const IntlContext = createContext(undefined); export default IntlContext; diff --git a/packages/use-intl/src/react/IntlContextValue.tsx b/packages/use-intl/src/react/IntlContextValue.tsx deleted file mode 100644 index e7f757f9d..000000000 --- a/packages/use-intl/src/react/IntlContextValue.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import AbstractIntlMessages from '../core/AbstractIntlMessages'; -import Formats from '../core/Formats'; -import IntlError from '../core/IntlError'; -import {RichTranslationValues} from '../core/TranslationValues'; - -type IntlContextValue = { - messages?: AbstractIntlMessages; - locale: string; - formats?: Partial; - timeZone?: string; - onError(error: IntlError): void; - getMessageFallback(info: { - error: IntlError; - key: string; - namespace?: string; - }): string; - now?: Date; - defaultTranslationValues?: RichTranslationValues; -}; - -export default IntlContextValue; diff --git a/packages/use-intl/src/react/IntlProvider.tsx b/packages/use-intl/src/react/IntlProvider.tsx index a0d20395b..2bba440e5 100644 --- a/packages/use-intl/src/react/IntlProvider.tsx +++ b/packages/use-intl/src/react/IntlProvider.tsx @@ -1,11 +1,15 @@ -import React from 'react'; +import React, {ReactNode} from 'react'; +import IntlConfig from '../core/IntlConfig'; import IntlContext from './IntlContext'; -import IntlProviderProps from './IntlProviderProps'; -import getIntlContextValue from './getIntlContextValue'; +import getInitializedConfig from './getInitializedConfig'; -export default function IntlProvider({children, ...props}: IntlProviderProps) { +type Props = IntlConfig & { + children: ReactNode; +}; + +export default function IntlProvider({children, ...props}: Props) { return ( - + {children} ); diff --git a/packages/use-intl/src/react/IntlProviderProps.tsx b/packages/use-intl/src/react/IntlProviderProps.tsx deleted file mode 100644 index e11b0a9aa..000000000 --- a/packages/use-intl/src/react/IntlProviderProps.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import {ReactNode} from 'react'; -import {AbstractIntlMessages} from '../core'; -import IntlConfiguration from '../core/IntlConfiguration'; -import {RichTranslationValues} from '../core/TranslationValues'; - -type IntlProviderProps = IntlConfiguration & { - /** All components that use the provided hooks should be within this tree. */ - children: ReactNode; - /** Global default values for translation values and rich text elements. - * Can be used for consistent usage or styling of rich text elements. - * Defaults will be overidden by locally provided values. */ - defaultTranslationValues?: RichTranslationValues; - /** All messages that will be available in your components. */ - messages?: AbstractIntlMessages; -}; - -export default IntlProviderProps; diff --git a/packages/use-intl/src/react/getIntlContextValue.tsx b/packages/use-intl/src/react/getInitializedConfig.tsx similarity index 83% rename from packages/use-intl/src/react/getIntlContextValue.tsx rename to packages/use-intl/src/react/getInitializedConfig.tsx index 324df6426..88f08b77f 100644 --- a/packages/use-intl/src/react/getIntlContextValue.tsx +++ b/packages/use-intl/src/react/getInitializedConfig.tsx @@ -1,14 +1,14 @@ +import IntlConfig from '../core/IntlConfig'; import {defaultGetMessageFallback, defaultOnError} from '../core/defaults'; import validateMessages from '../core/validateMessages'; -import IntlProviderProps from './IntlProviderProps'; /** * Enhances the incoming props with defaults. */ -export default function getIntlContextValue< +export default function getInitializedConfig< // This is a generic to allow for stricter typing. E.g. // the RSC integration always provides a `now` value. - Props extends Omit + Props extends Omit >({getMessageFallback, messages, onError, ...rest}: Props) { const finalOnError = onError || defaultOnError; const finalGetMessageFallback = diff --git a/packages/use-intl/src/react/useIntl.tsx b/packages/use-intl/src/react/useIntl.tsx index e3a4549ea..0dcbbf27b 100644 --- a/packages/use-intl/src/react/useIntl.tsx +++ b/packages/use-intl/src/react/useIntl.tsx @@ -4,7 +4,7 @@ import useIntlContext from './useIntlContext'; let hasWarned = false; -/** @deprecated Switch to `useFormatter` */ +/** @deprecated Switch to `useFormatter` instead. */ export default function useIntl() { const {formats, locale, now: globalNow, onError, timeZone} = useIntlContext(); diff --git a/packages/website/.gitignore b/packages/website/.gitignore index 71fc295fc..7108aaabb 100644 --- a/packages/website/.gitignore +++ b/packages/website/.gitignore @@ -6,3 +6,6 @@ public/.nextra tsconfig.tsbuildinfo .env +public/robots.txt +public/sitemap.xml +public/sitemap-0.xml diff --git a/packages/website/CHANGELOG.md b/packages/website/CHANGELOG.md index be006d7a4..0016c1fe1 100644 --- a/packages/website/CHANGELOG.md +++ b/packages/website/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# 2.13.0 (2023-04-12) + + +### Features + +* Sync improvements from RSC branch to main ([#238](https://github.com/amannn/next-intl/issues/238)) ([1d12ba2](https://github.com/amannn/next-intl/commit/1d12ba219afdbca77663c9d20f18db746de033fd)), closes [#149](https://github.com/amannn/next-intl/issues/149) [#237](https://github.com/amannn/next-intl/issues/237) + + + + + # 2.12.0 (2023-03-25) diff --git a/packages/website/package.json b/packages/website/package.json index 37b3295cf..05a69f195 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -1,6 +1,6 @@ { "name": "website", - "version": "2.12.0", + "version": "2.13.0", "private": true, "scripts": { "dev": "next dev", @@ -16,7 +16,7 @@ "@vercel/analytics": "0.1.11", "clsx": "1.2.1", "http-status-codes": "2.2.0", - "next": "^13.2.4", + "next": "^13.3.0", "nextra": "^2.2.19", "nextra-theme-docs": "^2.2.19", "react": "^18.0.0", diff --git a/packages/website/pages/docs/next-13/client-components.mdx b/packages/website/pages/docs/next-13/client-components.mdx index 91c4e44c8..7bfb4e27c 100644 --- a/packages/website/pages/docs/next-13/client-components.mdx +++ b/packages/website/pages/docs/next-13/client-components.mdx @@ -6,7 +6,7 @@ import Callout from 'components/Callout'; ## Getting started -If you haven't done so already, [create a Next.js 13 app that uses the `app` directory](https://beta.nextjs.org/docs/installation). The goal is to prefix all routes with the `locale`, so we can retrieve it as a [dynamic segment](https://beta.nextjs.org/docs/routing/defining-routes#dynamic-segments) and use it to configure `next-intl`. +If you haven't done so already, [create a Next.js 13 app that uses the `app` directory](https://beta.nextjs.org/docs/installation). The goal is to prefix all routes with the `locale`, so that we can retrieve it as a [dynamic segment](https://beta.nextjs.org/docs/routing/defining-routes#dynamic-segments) and use it to configure `next-intl`. **Start by creating the following file structure:** @@ -79,16 +79,21 @@ export default function Index() { 4. Create a [middleware](https://nextjs.org/docs/advanced-features/middleware) in `middleware.ts` that handles redirects. ```tsx filename="middleware.ts" -import {createIntlMiddleware} from 'next-intl/server'; +import createMiddleware from 'next-intl/middleware'; -// This middleware intercepts requests to `/` and will redirect +// The middleware intercepts requests to `/` and will redirect // to the best matching locale instead (e.g. `/en`). A cookie // is set in the background, so if the user switches to a new // language, this will take precedence from now on. -export default createIntlMiddleware({ +export default createMiddleware({ locales: ['en', 'de'], defaultLocale: 'en' }); + +export const config = { + // Skip all paths that should not be internationalized + matcher: ['/((?!api|_next|.*\\..*).*)'] +}; ``` That's all you need to do to start using translations in the `app` directory! diff --git a/packages/website/pages/docs/next-13/server-components.mdx b/packages/website/pages/docs/next-13/server-components.mdx index caa843426..83ce4c39b 100644 --- a/packages/website/pages/docs/next-13/server-components.mdx +++ b/packages/website/pages/docs/next-13/server-components.mdx @@ -106,9 +106,9 @@ module.exports = withNextIntl({ The middleware matches a locale for the request and handles redirects and rewrites accordingly. ```tsx filename="middleware.ts" -import createIntlMiddleware from 'next-intl/middleware'; +import createMiddleware from 'next-intl/middleware'; -export default createIntlMiddleware({ +export default createMiddleware({ // A list of all locales that are supported locales: ['en', 'de'], @@ -361,9 +361,9 @@ If you want to serve your localized content based on different domains, you can - `ca.example.com/fr` (`fr`) ```tsx filename="middleware.ts" -import createIntlMiddleware from 'next-intl/middleware'; +import createMiddleware from 'next-intl/middleware'; -export default createIntlMiddleware({ +export default createMiddleware({ // All locales across all domains locales: ['en', 'fr'], @@ -423,9 +423,9 @@ Since the middleware is aware of all your domains, the domain will automatically If you want to include a prefix for the default locale as well, you can configure the middleware accordingly. ```tsx filename="middleware.ts" {6} -import createIntlMiddleware from 'next-intl/middleware'; +import createMiddleware from 'next-intl/middleware'; -export default createIntlMiddleware({ +export default createMiddleware({ // ... other config localePrefix: 'always' // Defaults to 'as-needed' @@ -441,9 +441,9 @@ Note that this will affect both prefix-based as well as domain-based routing. If you want to rely entirely on the URL to resolve the locale, you can disable locale detection based on the `accept-language` header and a potentially existing cookie value from a previous visit. ```tsx filename="middleware.ts" {6} -import createIntlMiddleware from 'next-intl/middleware'; +import createMiddleware from 'next-intl/middleware'; -export default createIntlMiddleware({ +export default createMiddleware({ // ... other config localeDetection: false // Defaults to `true` @@ -459,9 +459,9 @@ The middleware automatically sets [the `link` header](https://developers.google. If you prefer to include these links yourself, you can opt-out of this behaviour. ```tsx filename="middleware.ts" {6} -import createIntlMiddleware from 'next-intl/middleware'; +import createMiddleware from 'next-intl/middleware'; -export default createIntlMiddleware({ +export default createMiddleware({ // ... other config alternateLinks: false // Defaults to `true` diff --git a/packages/website/public/google2a52d47b4884506c.html b/packages/website/public/google2a52d47b4884506c.html index 8029fff0e..eb5966238 100644 --- a/packages/website/public/google2a52d47b4884506c.html +++ b/packages/website/public/google2a52d47b4884506c.html @@ -1 +1 @@ -google-site-verification: google2a52d47b4884506c.html \ No newline at end of file +google-site-verification: google2a52d47b4884506c.html diff --git a/packages/website/public/robots.txt b/packages/website/public/robots.txt deleted file mode 100644 index c09517d55..000000000 --- a/packages/website/public/robots.txt +++ /dev/null @@ -1,9 +0,0 @@ -# * -User-agent: * -Allow: / - -# Host -Host: https://next-intl-docs.vercel.app - -# Sitemaps -Sitemap: https://next-intl-docs.vercel.app/sitemap.xml diff --git a/packages/website/public/sitemap-0.xml b/packages/website/public/sitemap-0.xml deleted file mode 100644 index abded4a57..000000000 --- a/packages/website/public/sitemap-0.xml +++ /dev/null @@ -1,22 +0,0 @@ - - -https://next-intl-docs.vercel.app2023-04-11T10:31:28.402Zdaily0.7 -https://next-intl-docs.vercel.app/docs/faq2023-04-11T10:31:28.402Zdaily0.7 -https://next-intl-docs.vercel.app/docs/getting-started2023-04-11T10:31:28.402Zdaily0.7 -https://next-intl-docs.vercel.app/docs/localization-management2023-04-11T10:31:28.402Zdaily0.7 -https://next-intl-docs.vercel.app/docs/next-132023-04-11T10:31:28.402Zdaily0.7 -https://next-intl-docs.vercel.app/docs/next-13/client-components2023-04-11T10:31:28.402Zdaily0.7 -https://next-intl-docs.vercel.app/docs/next-13/server-components2023-04-11T10:31:28.402Zdaily0.7 -https://next-intl-docs.vercel.app/docs/usage2023-04-11T10:31:28.402Zdaily0.7 -https://next-intl-docs.vercel.app/docs/usage/configuration2023-04-11T10:31:28.402Zdaily0.7 -https://next-intl-docs.vercel.app/docs/usage/core-library2023-04-11T10:31:28.402Zdaily0.7 -https://next-intl-docs.vercel.app/docs/usage/dates-times2023-04-11T10:31:28.402Zdaily0.7 -https://next-intl-docs.vercel.app/docs/usage/error-handling2023-04-11T10:31:28.402Zdaily0.7 -https://next-intl-docs.vercel.app/docs/usage/messages2023-04-11T10:31:28.402Zdaily0.7 -https://next-intl-docs.vercel.app/docs/usage/numbers2023-04-11T10:31:28.402Zdaily0.7 -https://next-intl-docs.vercel.app/docs/usage/production-checklist2023-04-11T10:31:28.402Zdaily0.7 -https://next-intl-docs.vercel.app/docs/usage/runtime-requirements-polyfills2023-04-11T10:31:28.402Zdaily0.7 -https://next-intl-docs.vercel.app/docs/usage/typescript2023-04-11T10:31:28.402Zdaily0.7 -https://next-intl-docs.vercel.app/examples/advanced2023-04-11T10:31:28.402Zdaily0.7 -https://next-intl-docs.vercel.app/examples/minimal2023-04-11T10:31:28.402Zdaily0.7 - \ No newline at end of file diff --git a/packages/website/public/sitemap.xml b/packages/website/public/sitemap.xml deleted file mode 100644 index 3d9c305f3..000000000 --- a/packages/website/public/sitemap.xml +++ /dev/null @@ -1,4 +0,0 @@ - - -https://next-intl-docs.vercel.app/sitemap-0.xml - \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 0be03214b..12621725f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2377,15 +2377,10 @@ "@napi-rs/simple-git-win32-arm64-msvc" "0.1.8" "@napi-rs/simple-git-win32-x64-msvc" "0.1.8" -"@next/env@13.0.0": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@next/env/-/env-13.0.0.tgz#38527956680693c90b4522ab4ab9a2fbe3a17f67" - integrity sha512-65v9BVuah2Mplohm4+efsKEnoEuhmlGm8B2w6vD1geeEP2wXtlSJCvR/cCRJ3fD8wzCQBV41VcMBQeYET6MRkg== - -"@next/env@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/env/-/env-13.2.4.tgz#8b763700262b2445140a44a8c8d088cef676dbae" - integrity sha512-+Mq3TtpkeeKFZanPturjcXt+KHfKYnLlX6jMLyCrmpq6OOs4i1GqBOAauSkii9QeKCMTYzGppar21JU57b/GEA== +"@next/env@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.3.0.tgz#cc2e49f03060a4684ce7ec7fd617a21bc5b9edba" + integrity sha512-AjppRV4uG3No7L1plinoTQETH+j2F10TEnrMfzbTUYwze5sBUPveeeBAPZPm8OkJZ1epq9OyYKhZrvbD6/9HCQ== "@next/eslint-plugin-next@12.0.1": version "12.0.1" @@ -2406,135 +2401,50 @@ resolved "https://registry.yarnpkg.com/@next/font/-/font-13.1.6.tgz#2bf99e3321ec9b4d65781c0d0ebff072e8752e1a" integrity sha512-AITjmeb1RgX1HKMCiA39ztx2mxeAyxl4ljv2UoSBUGAbFFMg8MO7YAvjHCgFhD39hL7YTbFjol04e/BPBH5RzQ== -"@next/swc-android-arm-eabi@13.0.0": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.0.tgz#15cd89d19d3c00d123fdfe367bab38c362f6c515" - integrity sha512-+DUQkYF93gxFjWY+CYWE1QDX6gTgnUiWf+W4UqZjM1Jcef8U97fS6xYh+i+8rH4MM0AXHm7OSakvfOMzmjU6VA== - -"@next/swc-android-arm-eabi@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.2.4.tgz#758d0403771e549f9cee71cbabc0cb16a6c947c0" - integrity sha512-DWlalTSkLjDU11MY11jg17O1gGQzpRccM9Oes2yTqj2DpHndajrXHGxj9HGtJ+idq2k7ImUdJVWS2h2l/EDJOw== - -"@next/swc-android-arm64@13.0.0": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.0.0.tgz#9410365bb07097268d4773a46b02cfe6b3fe3ab7" - integrity sha512-RW9Uy3bMSc0zVGCa11klFuwfP/jdcdkhdruqnrJ7v+7XHm6OFKkSRzX6ee7yGR1rdDZvTnP4GZSRSpzjLv/N0g== - -"@next/swc-android-arm64@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.2.4.tgz#834d586523045110d5602e0c8aae9028835ac427" - integrity sha512-sRavmUImUCf332Gy+PjIfLkMhiRX1Ez4SI+3vFDRs1N5eXp+uNzjFUK/oLMMOzk6KFSkbiK/3Wt8+dHQR/flNg== - -"@next/swc-darwin-arm64@13.0.0": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.0.tgz#caf262fb5cb8bb335f6f344fd67a44dc8bf6a084" - integrity sha512-APA26nps1j4qyhOIzkclW/OmgotVHj1jBxebSpMCPw2rXfiNvKNY9FA0TcuwPmUCNqaTnm703h6oW4dvp73A4Q== - -"@next/swc-darwin-arm64@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.2.4.tgz#5006fca179a36ef3a24d293abadec7438dbb48c6" - integrity sha512-S6vBl+OrInP47TM3LlYx65betocKUUlTZDDKzTiRDbsRESeyIkBtZ6Qi5uT2zQs4imqllJznVjFd1bXLx3Aa6A== - -"@next/swc-darwin-x64@13.0.0": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.0.tgz#6b214753410e1d8512a1491045acea1e188df7d6" - integrity sha512-qsUhUdoFuRJiaJ7LnvTQ6GZv1QnMDcRXCIjxaN0FNVXwrjkq++U7KjBUaxXkRzLV4C7u0NHLNOp0iZwNNE7ypw== - -"@next/swc-darwin-x64@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.2.4.tgz#6549c7c04322766acc3264ccdb3e1b43fcaf7946" - integrity sha512-a6LBuoYGcFOPGd4o8TPo7wmv5FnMr+Prz+vYHopEDuhDoMSHOnC+v+Ab4D7F0NMZkvQjEJQdJS3rqgFhlZmKlw== - -"@next/swc-freebsd-x64@13.0.0": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.0.tgz#eeb176bdb585f48882bdac1d04271b918ca87590" - integrity sha512-sCdyCbboS7CwdnevKH9J6hkJI76LUw1jVWt4eV7kISuLiPba3JmehZSWm80oa4ADChRVAwzhLAo2zJaYRrInbg== - -"@next/swc-freebsd-x64@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.2.4.tgz#0bbe28979e3e868debc2cc06e45e186ce195b7f4" - integrity sha512-kkbzKVZGPaXRBPisoAQkh3xh22r+TD+5HwoC5bOkALraJ0dsOQgSMAvzMXKsN3tMzJUPS0tjtRf1cTzrQ0I5vQ== - -"@next/swc-linux-arm-gnueabihf@13.0.0": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.0.tgz#2c2a9622c93f87a8baca94e068f674da4cae6018" - integrity sha512-/X/VxfFA41C9jrEv+sUsPLQ5vbDPVIgG0CJrzKvrcc+b+4zIgPgtfsaWq9ockjHFQi3ycvlZK4TALOXO8ovQ6Q== - -"@next/swc-linux-arm-gnueabihf@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.2.4.tgz#1d28d2203f5a7427d6e7119d7bcb5fc40959fb3e" - integrity sha512-7qA1++UY0fjprqtjBZaOA6cas/7GekpjVsZn/0uHvquuITFCdKGFCsKNBx3S0Rpxmx6WYo0GcmhNRM9ru08BGg== - -"@next/swc-linux-arm64-gnu@13.0.0": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.0.tgz#69505827e2928fb18034150fd4d754d54c4a1c4b" - integrity sha512-x6Oxr1GIi0ZtNiT6jbw+JVcbEi3UQgF7mMmkrgfL4mfchOwXtWSHKTSSPnwoJWJfXYa0Vy1n8NElWNTGAqoWFw== - -"@next/swc-linux-arm64-gnu@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.2.4.tgz#eb26448190948cdf4c44b8f34110a3ecea32f1d0" - integrity sha512-xzYZdAeq883MwXgcwc72hqo/F/dwUxCukpDOkx/j1HTq/J0wJthMGjinN9wH5bPR98Mfeh1MZJ91WWPnZOedOg== - -"@next/swc-linux-arm64-musl@13.0.0": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.0.tgz#487a88f2583a046e882328fe0665b37eca4fd0f6" - integrity sha512-SnMH9ngI+ipGh3kqQ8+mDtWunirwmhQnQeZkEq9e/9Xsgjf04OetqrqRHKM1HmJtG2qMUJbyXFJ0F81TPuT+3g== - -"@next/swc-linux-arm64-musl@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.2.4.tgz#c4227c0acd94a420bb14924820710e6284d234d3" - integrity sha512-8rXr3WfmqSiYkb71qzuDP6I6R2T2tpkmf83elDN8z783N9nvTJf2E7eLx86wu2OJCi4T05nuxCsh4IOU3LQ5xw== - -"@next/swc-linux-x64-gnu@13.0.0": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.0.tgz#29e89c7e4fd2e2b16ad059076f6261998aee53df" - integrity sha512-VSQwTX9EmdbotArtA1J67X8964oQfe0xHb32x4tu+JqTR+wOHyG6wGzPMdXH2oKAp6rdd7BzqxUXXf0J+ypHlw== - -"@next/swc-linux-x64-gnu@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.2.4.tgz#6bcb540944ee9b0209b33bfc23b240c2044dfc3e" - integrity sha512-Ngxh51zGSlYJ4EfpKG4LI6WfquulNdtmHg1yuOYlaAr33KyPJp4HeN/tivBnAHcZkoNy0hh/SbwDyCnz5PFJQQ== - -"@next/swc-linux-x64-musl@13.0.0": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.0.tgz#2f63aae922d2b2829aec21bf8f9adda8b6c16365" - integrity sha512-xBCP0nnpO0q4tsytXkvIwWFINtbFRyVY5gxa1zB0vlFtqYR9lNhrOwH3CBrks3kkeaePOXd611+8sjdUtrLnXA== - -"@next/swc-linux-x64-musl@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.2.4.tgz#ce21e43251eaf09a09df39372b2c3e38028c30ff" - integrity sha512-gOvwIYoSxd+j14LOcvJr+ekd9fwYT1RyMAHOp7znA10+l40wkFiMONPLWiZuHxfRk+Dy7YdNdDh3ImumvL6VwA== - -"@next/swc-win32-arm64-msvc@13.0.0": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.0.tgz#4117bad96c2a6775f70294fba45c63951a8a21ac" - integrity sha512-NutwDafqhGxqPj/eiUixJq9ImS/0sgx6gqlD7jRndCvQ2Q8AvDdu1+xKcGWGNnhcDsNM/n1avf1e62OG1GaqJg== - -"@next/swc-win32-arm64-msvc@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.2.4.tgz#68220063d8e5e082f5465498675640dedb670ff1" - integrity sha512-q3NJzcfClgBm4HvdcnoEncmztxrA5GXqKeiZ/hADvC56pwNALt3ngDC6t6qr1YW9V/EPDxCYeaX4zYxHciW4Dw== - -"@next/swc-win32-ia32-msvc@13.0.0": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.0.tgz#5914eb86f9ea92a00d76cb094dd9734b3bf2012c" - integrity sha512-zNaxaO+Kl/xNz02E9QlcVz0pT4MjkXGDLb25qxtAzyJL15aU0+VjjbIZAYWctG59dvggNIUNDWgoBeVTKB9xLg== - -"@next/swc-win32-ia32-msvc@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.2.4.tgz#7c120ab54a081be9566df310bed834f168252990" - integrity sha512-/eZ5ncmHUYtD2fc6EUmAIZlAJnVT2YmxDsKs1Ourx0ttTtvtma/WKlMV5NoUsyOez0f9ExLyOpeCoz5aj+MPXw== - -"@next/swc-win32-x64-msvc@13.0.0": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.0.tgz#c54a5a739dee04b20338d305226a2acdf701f67f" - integrity sha512-FFOGGWwTCRMu9W7MF496Urefxtuo2lttxF1vwS+1rIRsKvuLrWhVaVTj3T8sf2EBL6gtJbmh4TYlizS+obnGKA== - -"@next/swc-win32-x64-msvc@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.2.4.tgz#5abda92fe12b9829bf7951c4a221282c56041144" - integrity sha512-0MffFmyv7tBLlji01qc0IaPP/LVExzvj7/R5x1Jph1bTAIj4Vu81yFQWHHQAP6r4ff9Ukj1mBK6MDNVXm7Tcvw== +"@next/swc-darwin-arm64@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.3.0.tgz#38f18e0639cd4c7edc6a38d4b83fe00f38eea4f2" + integrity sha512-DmIQCNq6JtccLPPBzf0dgh2vzMWt5wjxbP71pCi5EWpWYE3MsP6FcRXi4MlAmFNDQOfcFXR2r7kBeG1LpZUh1w== + +"@next/swc-darwin-x64@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.3.0.tgz#b670ed1fd1d231aa21279173ec52e3ad56dc6aeb" + integrity sha512-oQoqFa88OGgwnYlnAGHVct618FRI/749se0N3S8t9Bzdv5CRbscnO0RcX901+YnNK4Q6yeiizfgO3b7kogtsZg== + +"@next/swc-linux-arm64-gnu@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.3.0.tgz#b114935f6b4c94c123f6cac55a4823d483209ba5" + integrity sha512-Wzz2p/WqAJUqTVoLo6H18WMeAXo3i+9DkPDae4oQG8LMloJ3if4NEZTnOnTUlro6cq+S/W4pTGa97nWTrOjbGw== + +"@next/swc-linux-arm64-musl@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.3.0.tgz#67a57309f8761c7d00d629d6785d56ed0567a0d2" + integrity sha512-xPVrIQOQo9WXJYgmoTlMnAD/HlR/1e1ZIWGbwIzEirXBVBqMARUulBEIKdC19zuvoJ477qZJgBDCKtKEykCpyQ== + +"@next/swc-linux-x64-gnu@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.3.0.tgz#11bd2bea7c00b40be111c0dd16e71171f3792086" + integrity sha512-jOFlpGuPD7W2tuXVJP4wt9a3cpNxWAPcloq5EfMJRiXsBBOjLVFZA7boXYxEBzSVgUiVVr1V9T0HFM7pULJ1qA== + +"@next/swc-linux-x64-musl@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.3.0.tgz#d57e99f85890799b78719c3ea32a4624de8d701b" + integrity sha512-2OwKlzaBgmuet9XYHc3KwsEilzb04F540rlRXkAcjMHL7eCxB7uZIGtsVvKOnQLvC/elrUegwSw1+5f7WmfyOw== + +"@next/swc-win32-arm64-msvc@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.3.0.tgz#0c209aa35d1c88b01e78259a89cd68f4139b5093" + integrity sha512-OeHiA6YEvndxT46g+rzFK/MQTfftKxJmzslERMu9LDdC6Kez0bdrgEYed5eXFK2Z1viKZJCGRlhd06rBusyztA== + +"@next/swc-win32-ia32-msvc@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.3.0.tgz#52ae74da1dd6d840c3743923367d27ed013803dd" + integrity sha512-4aB7K9mcVK1lYEzpOpqWrXHEZympU3oK65fnNcY1Qc4HLJFLJj8AViuqQd4jjjPNuV4sl8jAwTz3gN5VNGWB7w== + +"@next/swc-win32-x64-msvc@13.3.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.3.0.tgz#db7b55fee834dc8c2c484c696469e65bae2ee770" + integrity sha512-Reer6rkLLcoOvB0dd66+Y7WrWVFH7sEEkF/4bJCIfsSKnTStTYaHtwIJAwbqnt9I392Tqvku0KkoqZOryWV9LQ== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -2841,13 +2751,6 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@swc/helpers@0.4.11": - version "0.4.11" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.11.tgz#db23a376761b3d31c26502122f349a21b592c8de" - integrity sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw== - dependencies: - tslib "^2.4.0" - "@swc/helpers@0.4.14": version "0.4.14" resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" @@ -3271,11 +3174,11 @@ tsutils "^3.21.0" "@typescript-eslint/experimental-utils@^5.57.0": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.57.1.tgz#da521391f16379b396896b120919c63f24fa78c2" - integrity sha512-5F5s8mpM1Y0RQ5iWzKQPQm5cmhARgcMfUwyHX1ZZFL8Tm0PyzyQ+9jgYSMaW74XXvpDg9/KdmMICLlwNwKtO7w== + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.58.0.tgz#157af1376add1a945c4559eef25114f0a29f49e1" + integrity sha512-LA/sRPaynZlrlYxdefrZbMx8dqs/1Kc0yNG+XOk5CwwZx7tTv263ix3AJNioF0YBVt7hADpAUR20owl6pv4MIQ== dependencies: - "@typescript-eslint/utils" "5.57.1" + "@typescript-eslint/utils" "5.58.0" "@typescript-eslint/parser@^4.20.0": version "4.27.0" @@ -3349,13 +3252,13 @@ "@typescript-eslint/types" "5.41.0" "@typescript-eslint/visitor-keys" "5.41.0" -"@typescript-eslint/scope-manager@5.57.1": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.57.1.tgz#5d28799c0fc8b501a29ba1749d827800ef22d710" - integrity sha512-N/RrBwEUKMIYxSKl0oDK5sFVHd6VI7p9K5MyUlVYAY6dyNb/wHUqndkTd3XhpGlXgnQsBkRZuu4f9kAHghvgPw== +"@typescript-eslint/scope-manager@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.58.0.tgz#5e023a48352afc6a87be6ce3c8e763bc9e2f0bc8" + integrity sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA== dependencies: - "@typescript-eslint/types" "5.57.1" - "@typescript-eslint/visitor-keys" "5.57.1" + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/visitor-keys" "5.58.0" "@typescript-eslint/type-utils@5.15.0": version "5.15.0" @@ -3395,10 +3298,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.41.0.tgz#6800abebc4e6abaf24cdf220fb4ce28f4ab09a85" integrity sha512-5BejraMXMC+2UjefDvrH0Fo/eLwZRV6859SXRg+FgbhA0R0l6lDqDGAQYhKbXhPN2ofk2kY5sgGyLNL907UXpA== -"@typescript-eslint/types@5.57.1": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.57.1.tgz#d9989c7a9025897ea6f0550b7036027f69e8a603" - integrity sha512-bSs4LOgyV3bJ08F5RDqO2KXqg3WAdwHCu06zOqcQ6vqbTJizyBhuh1o1ImC69X4bV2g1OJxbH71PJqiO7Y1RuA== +"@typescript-eslint/types@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.58.0.tgz#54c490b8522c18986004df7674c644ffe2ed77d8" + integrity sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g== "@typescript-eslint/typescript-estree@4.27.0": version "4.27.0" @@ -3452,13 +3355,13 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.57.1": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.1.tgz#10d9643e503afc1ca4f5553d9bbe672ea4050b71" - integrity sha512-A2MZqD8gNT0qHKbk2wRspg7cHbCDCk2tcqt6ScCFLr5Ru8cn+TCfM786DjPhqwseiS+PrYwcXht5ztpEQ6TFTw== +"@typescript-eslint/typescript-estree@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.58.0.tgz#4966e6ff57eaf6e0fce2586497edc097e2ab3e61" + integrity sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q== dependencies: - "@typescript-eslint/types" "5.57.1" - "@typescript-eslint/visitor-keys" "5.57.1" + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/visitor-keys" "5.58.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -3489,17 +3392,17 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/utils@5.57.1": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.57.1.tgz#0f97b0bbd88c2d5e2036869f26466be5f4c69475" - integrity sha512-kN6vzzf9NkEtawECqze6v99LtmDiUJCVpvieTFA1uL7/jDghiJGubGZ5csicYHU1Xoqb3oH/R5cN5df6W41Nfg== +"@typescript-eslint/utils@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.58.0.tgz#430d7c95f23ec457b05be5520c1700a0dfd559d5" + integrity sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.57.1" - "@typescript-eslint/types" "5.57.1" - "@typescript-eslint/typescript-estree" "5.57.1" + "@typescript-eslint/scope-manager" "5.58.0" + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/typescript-estree" "5.58.0" eslint-scope "^5.1.1" semver "^7.3.7" @@ -3535,12 +3438,12 @@ "@typescript-eslint/types" "5.41.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@5.57.1": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.1.tgz#585e5fa42a9bbcd9065f334fd7c8a4ddfa7d905e" - integrity sha512-RjQrAniDU0CEk5r7iphkm731zKlFiUjvcBS2yHAg8WWqFMCaCrD0rKEVOMUyMMcbGPZ0bPp56srkGWrgfZqLRA== +"@typescript-eslint/visitor-keys@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.58.0.tgz#eb9de3a61d2331829e6761ce7fd13061781168b4" + integrity sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA== dependencies: - "@typescript-eslint/types" "5.57.1" + "@typescript-eslint/types" "5.58.0" eslint-visitor-keys "^3.3.0" "@vercel/analytics@0.1.11": @@ -4237,6 +4140,13 @@ builtins@^1.0.3: resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= +busboy@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + byline@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" @@ -4331,9 +4241,9 @@ caniuse-lite@^1.0.30001317: integrity sha512-xjlIAFHucBRSMUo1kb5D4LYgcN1M45qdKP++lhqowDpwJwGkpIRTt5qQqnhxjj1vHcI7nrJxWhCC1ATrCEBTcw== caniuse-lite@^1.0.30001406: - version "1.0.30001426" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001426.tgz#58da20446ccd0cb1dfebd11d2350c907ee7c2eaa" - integrity sha512-n7cosrHLl8AWt0wwZw/PJZgUg3lV0gk9LMI7ikGJwhyhgsd2Nb65vKvmSexCqq/J7rbH3mFG6yZZiPR5dLPW5A== + version "1.0.30001478" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001478.tgz#0ef8a1cf8b16be47a0f9fc4ecfc952232724b32a" + integrity sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw== caseless@~0.12.0: version "0.12.0" @@ -9470,9 +9380,9 @@ nanoid@^3.3.1: integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== nanoid@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" - integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== natural-compare-lite@^1.4.0: version "1.4.0" @@ -9527,56 +9437,27 @@ next-themes@^0.2.1: resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.2.1.tgz#0c9f128e847979daf6c67f70b38e6b6567856e45" integrity sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A== -next@13.2.4, next@^13.2.4: - version "13.2.4" - resolved "https://registry.yarnpkg.com/next/-/next-13.2.4.tgz#2363330392b0f7da02ab41301f60857ffa7f67d6" - integrity sha512-g1I30317cThkEpvzfXujf0O4wtaQHtDCLhlivwlTJ885Ld+eOgcz7r3TGQzeU+cSRoNHtD8tsJgzxVdYojFssw== +next@13.3.0, next@^13.3.0: + version "13.3.0" + resolved "https://registry.yarnpkg.com/next/-/next-13.3.0.tgz#40632d303d74fc8521faa0a5bf4a033a392749b1" + integrity sha512-OVTw8MpIPa12+DCUkPqRGPS3thlJPcwae2ZL4xti3iBff27goH024xy4q2lhlsdoYiKOi8Kz6uJoLW/GXwgfOA== dependencies: - "@next/env" "13.2.4" + "@next/env" "13.3.0" "@swc/helpers" "0.4.14" + busboy "1.6.0" caniuse-lite "^1.0.30001406" postcss "8.4.14" styled-jsx "5.1.1" optionalDependencies: - "@next/swc-android-arm-eabi" "13.2.4" - "@next/swc-android-arm64" "13.2.4" - "@next/swc-darwin-arm64" "13.2.4" - "@next/swc-darwin-x64" "13.2.4" - "@next/swc-freebsd-x64" "13.2.4" - "@next/swc-linux-arm-gnueabihf" "13.2.4" - "@next/swc-linux-arm64-gnu" "13.2.4" - "@next/swc-linux-arm64-musl" "13.2.4" - "@next/swc-linux-x64-gnu" "13.2.4" - "@next/swc-linux-x64-musl" "13.2.4" - "@next/swc-win32-arm64-msvc" "13.2.4" - "@next/swc-win32-ia32-msvc" "13.2.4" - "@next/swc-win32-x64-msvc" "13.2.4" - -next@^13.0.0: - version "13.0.0" - resolved "https://registry.yarnpkg.com/next/-/next-13.0.0.tgz#6f07064a4f374562cf58677bef4dd06326ca648b" - integrity sha512-puH1WGM6rGeFOoFdXXYfUxN9Sgi4LMytCV5HkQJvVUOhHfC1DoVqOfvzaEteyp6P04IW+gbtK2Q9pInVSrltPA== - dependencies: - "@next/env" "13.0.0" - "@swc/helpers" "0.4.11" - caniuse-lite "^1.0.30001406" - postcss "8.4.14" - styled-jsx "5.1.0" - use-sync-external-store "1.2.0" - optionalDependencies: - "@next/swc-android-arm-eabi" "13.0.0" - "@next/swc-android-arm64" "13.0.0" - "@next/swc-darwin-arm64" "13.0.0" - "@next/swc-darwin-x64" "13.0.0" - "@next/swc-freebsd-x64" "13.0.0" - "@next/swc-linux-arm-gnueabihf" "13.0.0" - "@next/swc-linux-arm64-gnu" "13.0.0" - "@next/swc-linux-arm64-musl" "13.0.0" - "@next/swc-linux-x64-gnu" "13.0.0" - "@next/swc-linux-x64-musl" "13.0.0" - "@next/swc-win32-arm64-msvc" "13.0.0" - "@next/swc-win32-ia32-msvc" "13.0.0" - "@next/swc-win32-x64-msvc" "13.0.0" + "@next/swc-darwin-arm64" "13.3.0" + "@next/swc-darwin-x64" "13.3.0" + "@next/swc-linux-arm64-gnu" "13.3.0" + "@next/swc-linux-arm64-musl" "13.3.0" + "@next/swc-linux-x64-gnu" "13.3.0" + "@next/swc-linux-x64-musl" "13.3.0" + "@next/swc-win32-arm64-msvc" "13.3.0" + "@next/swc-win32-ia32-msvc" "13.3.0" + "@next/swc-win32-x64-msvc" "13.3.0" nextra-theme-docs@^2.2.19: version "2.2.19" @@ -11805,6 +11686,11 @@ stack-utils@^2.0.3: dependencies: escape-string-regexp "^2.0.0" +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" @@ -12028,13 +11914,6 @@ style-to-object@^0.3.0: dependencies: inline-style-parser "0.1.1" -styled-jsx@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.0.tgz#4a5622ab9714bd3fcfaeec292aa555871f057563" - integrity sha512-/iHaRJt9U7T+5tp6TRelLnqBqiaIT0HsO0+vgyj8hK2KUk7aejFqRrumqPUlAqDwAj8IbS/1hk3IhBAAK/FCUQ== - dependencies: - client-only "0.0.1" - styled-jsx@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f" @@ -12390,9 +12269,9 @@ tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1: integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== tslib@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== tsutils@^3.21.0: version "3.21.0" @@ -12740,19 +12619,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -use-intl@^2.12.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/use-intl/-/use-intl-2.12.0.tgz#66f39d1ab387b4562caff66aee0927ae6564bbc4" - integrity sha512-LcmAqn78o6Ii9wsLERKAXI9QfiSVBzY3u+mSh6YCLUKhDhr7WHqTBfhEV1gZvdwy7mydhwWQUyQ9Zy5XHuUOAQ== - dependencies: - "@formatjs/ecma402-abstract" "^1.11.4" - intl-messageformat "^9.3.18" - -use-sync-external-store@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== - util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" From de5115c12abb2afd55fc3f3c46dc9bbcee446091 Mon Sep 17 00:00:00 2001 From: narakhan Date: Thu, 13 Apr 2023 17:00:52 +1000 Subject: [PATCH 203/312] fix: Fix type signature of the plugin and improve condition for printing a warning in case a legacy i18n config is in use (#241) Co-authored-by: Nicholas Mobbs --- packages/next-intl/plugin.d.ts | 2 +- packages/next-intl/plugin.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/next-intl/plugin.d.ts b/packages/next-intl/plugin.d.ts index 66dc33376..7483965dc 100644 --- a/packages/next-intl/plugin.d.ts +++ b/packages/next-intl/plugin.d.ts @@ -1,3 +1,3 @@ import {NextConfig} from 'next'; -export default function withNextIntl(i18nPath: string): ((config: NextConfig) => unknown); +export default function withNextIntl(i18nPath?: string): ((config: NextConfig) => unknown); diff --git a/packages/next-intl/plugin.js b/packages/next-intl/plugin.js index 82b5dd5c6..1ce73defc 100644 --- a/packages/next-intl/plugin.js +++ b/packages/next-intl/plugin.js @@ -39,7 +39,7 @@ module.exports = withNextIntl({ } } - if ('i18n' in nextConfig) { + if (nextConfig.i18n != null) { console.warn( "\nnext-intl has found an `i18n` config in your next.config.js. This likely causes conflicts and should therefore be removed if you use the React Server Components integration.\n\nIf you're in progress of migrating from the `pages` folder, you can refer to this example: https://github.com/amannn/next-intl/tree/feat/next-13-rsc/packages/example-next-13-with-pages\n" ); From d60307b8b0fe64853aa5d92abe3ce7e4ae92de79 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 14 Apr 2023 10:04:11 +0200 Subject: [PATCH 204/312] Unnecessary destructuring --- packages/next-intl/src/server/getRequestConfig.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/next-intl/src/server/getRequestConfig.tsx b/packages/next-intl/src/server/getRequestConfig.tsx index 00e1c7db0..b883b5926 100644 --- a/packages/next-intl/src/server/getRequestConfig.tsx +++ b/packages/next-intl/src/server/getRequestConfig.tsx @@ -10,9 +10,9 @@ export type GetRequestConfigParams = { * Should be called in `i18n.ts` to create the configuration for the current request. */ export default function getRequestConfig( - createRequestConfig: ({ - locale - }: GetRequestConfigParams) => RequestConfig | Promise + createRequestConfig: ( + params: GetRequestConfigParams + ) => RequestConfig | Promise ) { return createRequestConfig; } From c49dc2f8edf5c88c330b9b8bca816a85011cbb87 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 27 Apr 2023 14:51:25 +0200 Subject: [PATCH 205/312] Fix lockfile --- yarn.lock | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/yarn.lock b/yarn.lock index 79695e123..00c008d28 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10058,24 +10058,10 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -<<<<<<< HEAD -pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= - dependencies: - find-up "^2.1.0" - playwright-core@1.29.1: version "1.29.1" resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.29.1.tgz#9ec15d61c4bd2f386ddf6ce010db53a030345a47" integrity sha512-20Ai3d+lMkWpI9YZYlxk8gxatfgax5STW8GaMozAHwigLiyiKQrdkt7gaoT9UQR8FIVDg6qVXs9IoZUQrDjIIg== -======= -playwright-core@1.28.1: - version "1.28.1" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.28.1.tgz#8400be9f4a8d1c0489abdb9e75a4cc0ffc3c00cb" - integrity sha512-3PixLnGPno0E8rSBJjtwqTwJe3Yw72QwBBBxNoukIj3lEeBNXwbNiKrNuB1oyQgTBw5QHUhNO3SteEtHaMK6ag== ->>>>>>> origin/main pluralize@^8.0.0: version "8.0.0" From a08b91b52c8dd78b368003de4e99955aa66c2894 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 27 Apr 2023 15:18:06 +0200 Subject: [PATCH 206/312] feat: Improvements for localized `Link` (#257) Handle external links in localized `Link` and fix formatting of url objects --- packages/next-intl/src/shared/Link.tsx | 16 +++-- .../next-intl/src/shared/LocalizedLink.tsx | 26 ------- packages/next-intl/src/shared/isLocalUrl.tsx | 13 ++++ packages/next-intl/test/shared/Link.test.tsx | 71 +++++++++++++++++++ 4 files changed, 95 insertions(+), 31 deletions(-) delete mode 100644 packages/next-intl/src/shared/LocalizedLink.tsx create mode 100644 packages/next-intl/src/shared/isLocalUrl.tsx create mode 100644 packages/next-intl/test/shared/Link.test.tsx diff --git a/packages/next-intl/src/shared/Link.tsx b/packages/next-intl/src/shared/Link.tsx index fd951909c..4901bb51e 100644 --- a/packages/next-intl/src/shared/Link.tsx +++ b/packages/next-intl/src/shared/Link.tsx @@ -1,9 +1,11 @@ 'use client'; +import url from 'url'; import NextLink from 'next/link'; import {usePathname} from 'next/navigation'; import React, {ComponentProps, forwardRef, useEffect, useState} from 'react'; import localizeHref from '../client/localizeHref'; +import isLocalURL from './isLocalUrl'; type Props = Omit, 'locale'> & { locale?: string; @@ -26,7 +28,9 @@ function Link({href, locale, prefetch, ...rest}: Props, ref: Props['ref']) { const pathname = usePathname(); useEffect(() => { - setLocalizedHref(localizeHref(href, locale, pathname ?? undefined)); + if (isLocalURL(href)) { + setLocalizedHref(localizeHref(href, locale, pathname ?? undefined)); + } }, [href, locale, pathname]); if (locale !== undefined) { @@ -41,10 +45,12 @@ function Link({href, locale, prefetch, ...rest}: Props, ref: Props['ref']) { } let localizedHrefString; - if (typeof localizedHref === 'string') { - localizedHrefString = localizedHref; - } else if (localizedHref) { - localizedHrefString = localizedHref.toString(); + if (localizedHref) { + if (typeof localizedHref === 'string') { + localizedHrefString = localizedHref; + } else { + localizedHrefString = url.format(localizedHref); + } } return ( diff --git a/packages/next-intl/src/shared/LocalizedLink.tsx b/packages/next-intl/src/shared/LocalizedLink.tsx deleted file mode 100644 index d92427732..000000000 --- a/packages/next-intl/src/shared/LocalizedLink.tsx +++ /dev/null @@ -1,26 +0,0 @@ -'use client'; - -import Link from 'next/link'; -import {usePathname} from 'next/navigation'; -import React, {ComponentProps, forwardRef, useEffect, useState} from 'react'; -import localizeHref from '../client/localizeHref'; - -type Props = Omit, 'locale'> & { - locale?: string; -}; - -/** - * Wraps `next/link` and prefixes the `href` with the current locale. - */ -function LocalizedLink({href, locale, ...rest}: Props, ref: Props['ref']) { - const [localizedHref, setLocalizedHref] = useState(href); - const pathname = usePathname(); - - useEffect(() => { - setLocalizedHref(localizeHref(href, locale)); - }, [href, locale, pathname]); - - return ; -} - -export default forwardRef(LocalizedLink); diff --git a/packages/next-intl/src/shared/isLocalUrl.tsx b/packages/next-intl/src/shared/isLocalUrl.tsx new file mode 100644 index 000000000..76a1f6502 --- /dev/null +++ b/packages/next-intl/src/shared/isLocalUrl.tsx @@ -0,0 +1,13 @@ +import NextLink from 'next/link'; +import {ComponentProps} from 'react'; + +type Url = ComponentProps['href']; + +export default function isLocalUrl(url: Url) { + if (typeof url === 'object') { + return url.host == null && url.hostname == null; + } else { + const hasProtocol = /^[a-z]+:/i.test(url); + return !hasProtocol; + } +} diff --git a/packages/next-intl/test/shared/Link.test.tsx b/packages/next-intl/test/shared/Link.test.tsx new file mode 100644 index 000000000..c50456fc9 --- /dev/null +++ b/packages/next-intl/test/shared/Link.test.tsx @@ -0,0 +1,71 @@ +import {render, screen} from '@testing-library/react'; +import React from 'react'; +import {Link} from '../../src'; + +beforeEach(() => { + document.cookie = 'NEXT_LOCALE=en'; +}); + +it('renders an href without a locale if the locale matches', () => { + render(Test); + expect(screen.getByRole('link', {name: 'Test'}).getAttribute('href')).toBe( + '/test' + ); +}); + +it('renders an href without a locale if the locale matches for an object href', () => { + render(Test); + expect(screen.getByRole('link', {name: 'Test'}).getAttribute('href')).toBe( + '/test' + ); +}); + +it('renders an href with a locale if the locale changes', () => { + render( + + Test + + ); + expect(screen.getByRole('link', {name: 'Test'}).getAttribute('href')).toBe( + '/de/test' + ); +}); + +it('renders an href with a locale if the locale changes for an object href', () => { + render( + + Test + + ); + expect(screen.getByRole('link', {name: 'Test'}).getAttribute('href')).toBe( + '/de/test' + ); +}); + +it('works for external urls', () => { + render(Test); + expect(screen.getByRole('link', {name: 'Test'}).getAttribute('href')).toBe( + 'https://example.com' + ); +}); + +it('works for external urls with an object href', () => { + render( + + Test + + ); + expect(screen.getByRole('link', {name: 'Test'}).getAttribute('href')).toBe( + 'https://example.com/test' + ); +}); + +afterEach(() => { + document.cookie = ''; +}); From bb9c7c25c91497dd729cdffe3ed792342602a752 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 2 May 2023 18:51:58 +0200 Subject: [PATCH 207/312] Single playwright version --- packages/example-next-13-next-auth/package.json | 2 +- yarn.lock | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/packages/example-next-13-next-auth/package.json b/packages/example-next-13-next-auth/package.json index 570c5faec..f9c4b39b5 100644 --- a/packages/example-next-13-next-auth/package.json +++ b/packages/example-next-13-next-auth/package.json @@ -17,7 +17,7 @@ "react-dom": "^18.2.0" }, "devDependencies": { - "@playwright/test": "1.28.1", + "@playwright/test": "^1.29.0", "@types/lodash": "^4.14.176", "@types/node": "^17.0.23", "@types/react": "^18.0.23", diff --git a/yarn.lock b/yarn.lock index f66eb88ba..de21f7e8a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4459,14 +4459,6 @@ tiny-glob "^0.2.9" tslib "^2.4.0" -"@playwright/test@1.28.1": - version "1.28.1" - resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.28.1.tgz#e5be297e024a3256610cac2baaa9347fd57c7860" - integrity sha512-xN6spdqrNlwSn9KabIhqfZR7IWjPpFK1835tFNgjrlysaSezuX8PYUwaz38V/yI8TJLG9PkAMEXoHRXYXlpTPQ== - dependencies: - "@types/node" "*" - playwright-core "1.28.1" - "@playwright/test@^1.29.0": version "1.29.1" resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.29.1.tgz#f2ed4dc143b9c7825a7ad2703b2f1ac4354e1145" From 344762fccfdc43e144a325d5cc67c4fcb8685f21 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 3 May 2023 16:48:36 +0200 Subject: [PATCH 208/312] Update next and playwright to match versions --- .../example-next-13-advanced/package.json | 4 +- .../example-next-13-named-routes/package.json | 4 +- .../example-next-13-next-auth/package.json | 2 +- .../example-next-13-with-pages/package.json | 2 +- packages/next-intl/package.json | 2 +- yarn.lock | 117 +++--------------- 6 files changed, 27 insertions(+), 104 deletions(-) diff --git a/packages/example-next-13-advanced/package.json b/packages/example-next-13-advanced/package.json index e25775fb4..cd32ed2dc 100644 --- a/packages/example-next-13-advanced/package.json +++ b/packages/example-next-13-advanced/package.json @@ -13,13 +13,13 @@ "dependencies": { "lodash": "^4.17.21", "ms": "2.1.3", - "next": "13.3.0", + "next": "^13.3.4", "next-intl": "*", "react": "^18.2.0", "react-dom": "^18.2.0" }, "devDependencies": { - "@playwright/test": "^1.29.0", + "@playwright/test": "^1.33.0", "@types/lodash": "^4.14.176", "@types/node": "^17.0.23", "@types/react": "^18.0.23", diff --git a/packages/example-next-13-named-routes/package.json b/packages/example-next-13-named-routes/package.json index 2ae50d555..47088c65f 100644 --- a/packages/example-next-13-named-routes/package.json +++ b/packages/example-next-13-named-routes/package.json @@ -11,13 +11,13 @@ "start": "next start" }, "dependencies": { - "next": "13.3.0", + "next": "^13.3.4", "next-intl": "*", "react": "^18.2.0", "react-dom": "^18.2.0" }, "devDependencies": { - "@playwright/test": "^1.29.0", + "@playwright/test": "^1.33.0", "@types/lodash": "^4.14.176", "@types/node": "^17.0.23", "@types/react": "^18.0.23", diff --git a/packages/example-next-13-next-auth/package.json b/packages/example-next-13-next-auth/package.json index 7557e1209..16d8c510f 100644 --- a/packages/example-next-13-next-auth/package.json +++ b/packages/example-next-13-next-auth/package.json @@ -17,7 +17,7 @@ "react-dom": "^18.2.0" }, "devDependencies": { - "@playwright/test": "^1.29.0", + "@playwright/test": "^1.33.0", "@types/lodash": "^4.14.176", "@types/node": "^17.0.23", "@types/react": "^18.0.23", diff --git a/packages/example-next-13-with-pages/package.json b/packages/example-next-13-with-pages/package.json index 2498b35eb..94ee52b4f 100644 --- a/packages/example-next-13-with-pages/package.json +++ b/packages/example-next-13-with-pages/package.json @@ -10,7 +10,7 @@ "start": "next start" }, "dependencies": { - "next": "13.3.0", + "next": "^13.3.4", "next-intl": "*", "react": "^18.2.0", "react-dom": "^18.2.0" diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 70b0cf5e1..072ee12e4 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -80,7 +80,7 @@ "eslint": "8.39.0", "eslint-config-molindo": "6.0.0", "eslint-plugin-deprecation": "1.4.1", - "next": "13.3.4", + "next": "^13.3.4", "react": "^18.2.0", "react-dom": "^18.2.0", "ts-jest": "29.1.0", diff --git a/yarn.lock b/yarn.lock index c3c31f0d5..41f46c306 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4165,11 +4165,6 @@ "@napi-rs/simple-git-win32-arm64-msvc" "0.1.8" "@napi-rs/simple-git-win32-x64-msvc" "0.1.8" -"@next/env@13.3.0": - version "13.3.0" - resolved "https://registry.yarnpkg.com/@next/env/-/env-13.3.0.tgz#cc2e49f03060a4684ce7ec7fd617a21bc5b9edba" - integrity sha512-AjppRV4uG3No7L1plinoTQETH+j2F10TEnrMfzbTUYwze5sBUPveeeBAPZPm8OkJZ1epq9OyYKhZrvbD6/9HCQ== - "@next/env@13.3.4": version "13.3.4" resolved "https://registry.yarnpkg.com/@next/env/-/env-13.3.4.tgz#419bc4aaf67dff0060abcfb0ca097acb23e17a77" @@ -4194,91 +4189,46 @@ resolved "https://registry.yarnpkg.com/@next/font/-/font-13.1.6.tgz#2bf99e3321ec9b4d65781c0d0ebff072e8752e1a" integrity sha512-AITjmeb1RgX1HKMCiA39ztx2mxeAyxl4ljv2UoSBUGAbFFMg8MO7YAvjHCgFhD39hL7YTbFjol04e/BPBH5RzQ== -"@next/swc-darwin-arm64@13.3.0": - version "13.3.0" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.3.0.tgz#38f18e0639cd4c7edc6a38d4b83fe00f38eea4f2" - integrity sha512-DmIQCNq6JtccLPPBzf0dgh2vzMWt5wjxbP71pCi5EWpWYE3MsP6FcRXi4MlAmFNDQOfcFXR2r7kBeG1LpZUh1w== - "@next/swc-darwin-arm64@13.3.4": version "13.3.4" resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.3.4.tgz#33a84042f6498398d99bf4aa091d7e2f1a3f5df3" integrity sha512-vux7RWfzxy1lD21CMwZsy9Ej+0+LZdIIj1gEhVmzOQqQZ5N56h8JamrjIVCfDL+Lpj8KwOmFZbPHE8qaYnL2pg== -"@next/swc-darwin-x64@13.3.0": - version "13.3.0" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.3.0.tgz#b670ed1fd1d231aa21279173ec52e3ad56dc6aeb" - integrity sha512-oQoqFa88OGgwnYlnAGHVct618FRI/749se0N3S8t9Bzdv5CRbscnO0RcX901+YnNK4Q6yeiizfgO3b7kogtsZg== - "@next/swc-darwin-x64@13.3.4": version "13.3.4" resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.3.4.tgz#47bc98c575ab82ed4d220802ed2609e930702469" integrity sha512-1tb+6JT98+t7UIhVQpKL7zegKnCs9RKU6cKNyj+DYKuC/NVl49/JaIlmwCwK8Ibl+RXxJrK7uSXSIO71feXsgw== -"@next/swc-linux-arm64-gnu@13.3.0": - version "13.3.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.3.0.tgz#b114935f6b4c94c123f6cac55a4823d483209ba5" - integrity sha512-Wzz2p/WqAJUqTVoLo6H18WMeAXo3i+9DkPDae4oQG8LMloJ3if4NEZTnOnTUlro6cq+S/W4pTGa97nWTrOjbGw== - "@next/swc-linux-arm64-gnu@13.3.4": version "13.3.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.3.4.tgz#7f9e89554b5410148b5c3640db58ff8b25002de6" integrity sha512-UqcKkYTKslf5YAJNtZ5XV1D5MQJIkVtDHL8OehDZERHzqOe7jvy41HFto33IDPPU8gJiP5eJb3V9U26uifqHjw== -"@next/swc-linux-arm64-musl@13.3.0": - version "13.3.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.3.0.tgz#67a57309f8761c7d00d629d6785d56ed0567a0d2" - integrity sha512-xPVrIQOQo9WXJYgmoTlMnAD/HlR/1e1ZIWGbwIzEirXBVBqMARUulBEIKdC19zuvoJ477qZJgBDCKtKEykCpyQ== - "@next/swc-linux-arm64-musl@13.3.4": version "13.3.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.3.4.tgz#b282180d64580eae95e05e2ea7c7e1a9b717d7ea" integrity sha512-HE/FmE8VvstAfehyo/XsrhGgz97cEr7uf9IfkgJ/unqSXE0CDshDn/4as6rRid74eDR8/exi7c2tdo49Tuqxrw== -"@next/swc-linux-x64-gnu@13.3.0": - version "13.3.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.3.0.tgz#11bd2bea7c00b40be111c0dd16e71171f3792086" - integrity sha512-jOFlpGuPD7W2tuXVJP4wt9a3cpNxWAPcloq5EfMJRiXsBBOjLVFZA7boXYxEBzSVgUiVVr1V9T0HFM7pULJ1qA== - "@next/swc-linux-x64-gnu@13.3.4": version "13.3.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.3.4.tgz#645192393eecd1cd4f19f61f9415458e4f3789f0" integrity sha512-xU+ugaupGA4SL5aK1ZYEqVHrW3TPOhxVcpaJLfpANm2443J4GfxCmOacu9XcSgy5c51Mq7C9uZ1LODKHfZosRQ== -"@next/swc-linux-x64-musl@13.3.0": - version "13.3.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.3.0.tgz#d57e99f85890799b78719c3ea32a4624de8d701b" - integrity sha512-2OwKlzaBgmuet9XYHc3KwsEilzb04F540rlRXkAcjMHL7eCxB7uZIGtsVvKOnQLvC/elrUegwSw1+5f7WmfyOw== - "@next/swc-linux-x64-musl@13.3.4": version "13.3.4" resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.3.4.tgz#25e2f63e29f2723fa9ec658089d6e3a0e78e0992" integrity sha512-cZvmf5KcYeTfIK6bCypfmxGUjme53Ep7hx94JJtGrYgCA1VwEuYdh+KouubJaQCH3aqnNE7+zGnVEupEKfoaaA== -"@next/swc-win32-arm64-msvc@13.3.0": - version "13.3.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.3.0.tgz#0c209aa35d1c88b01e78259a89cd68f4139b5093" - integrity sha512-OeHiA6YEvndxT46g+rzFK/MQTfftKxJmzslERMu9LDdC6Kez0bdrgEYed5eXFK2Z1viKZJCGRlhd06rBusyztA== - "@next/swc-win32-arm64-msvc@13.3.4": version "13.3.4" resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.3.4.tgz#9a4b7ab348b4a2000aa6e36de1b180ca97461356" integrity sha512-7dL+CAUAjmgnVbjXPIpdj7/AQKFqEUL3bKtaOIE1JzJ5UMHHAXCPwzQtibrsvQpf9MwcAmiv8aburD3xH1xf8w== -"@next/swc-win32-ia32-msvc@13.3.0": - version "13.3.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.3.0.tgz#52ae74da1dd6d840c3743923367d27ed013803dd" - integrity sha512-4aB7K9mcVK1lYEzpOpqWrXHEZympU3oK65fnNcY1Qc4HLJFLJj8AViuqQd4jjjPNuV4sl8jAwTz3gN5VNGWB7w== - "@next/swc-win32-ia32-msvc@13.3.4": version "13.3.4" resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.3.4.tgz#c3e245784b9f0002f00f5046e472ba77322d617c" integrity sha512-qplTyzEl1vPkS+/DRK3pKSL0HeXrPHkYsV7U6gboHYpfqoHY+bcLUj3gwVUa9PEHRIoq4vXvPzx/WtzE6q52ng== -"@next/swc-win32-x64-msvc@13.3.0": - version "13.3.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.3.0.tgz#db7b55fee834dc8c2c484c696469e65bae2ee770" - integrity sha512-Reer6rkLLcoOvB0dd66+Y7WrWVFH7sEEkF/4bJCIfsSKnTStTYaHtwIJAwbqnt9I392Tqvku0KkoqZOryWV9LQ== - "@next/swc-win32-x64-msvc@13.3.4": version "13.3.4" resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.3.4.tgz#a7a488e9a47b7ca726b7d458f1dcf09f5377b791" @@ -4514,13 +4464,15 @@ tiny-glob "^0.2.9" tslib "^2.4.0" -"@playwright/test@^1.29.0": - version "1.29.1" - resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.29.1.tgz#f2ed4dc143b9c7825a7ad2703b2f1ac4354e1145" - integrity sha512-iQxk2DX5U9wOGV3+/Jh9OHPsw5H3mleUL2S4BgQuwtlAfK3PnKvn38m4Rg9zIViGHVW24opSm99HQm/UFLEy6w== +"@playwright/test@^1.33.0": + version "1.33.0" + resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.33.0.tgz#669ef859efb81b143dfc624eef99d1dd92a81b67" + integrity sha512-YunBa2mE7Hq4CfPkGzQRK916a4tuZoVx/EpLjeWlTVOnD4S2+fdaQZE0LJkbfhN5FTSKNLdcl7MoT5XB37bTkg== dependencies: "@types/node" "*" - playwright-core "1.29.1" + playwright-core "1.33.0" + optionalDependencies: + fsevents "2.3.2" "@popperjs/core@^2.11.6": version "2.11.6" @@ -5024,13 +4976,6 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@swc/helpers@0.4.14": - version "0.4.14" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" - integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== - dependencies: - tslib "^2.4.0" - "@swc/helpers@0.5.1": version "0.5.1" resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.1.tgz#e9031491aa3f26bfcc974a67f48bd456c8a5357a" @@ -7576,9 +7521,9 @@ caniuse-lite@^1.0.30001317: integrity sha512-xjlIAFHucBRSMUo1kb5D4LYgcN1M45qdKP++lhqowDpwJwGkpIRTt5qQqnhxjj1vHcI7nrJxWhCC1ATrCEBTcw== caniuse-lite@^1.0.30001406: - version "1.0.30001478" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001478.tgz#0ef8a1cf8b16be47a0f9fc4ecfc952232724b32a" - integrity sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw== + version "1.0.30001482" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001482.tgz#8b3fad73dc35b2674a5c96df2d4f9f1c561435de" + integrity sha512-F1ZInsg53cegyjroxLNW9DmrEQ1SuGRTO1QlpA0o2/6OpQ0gFeDRoq1yFmnr8Sakn9qwwt9DmbxHB6w167OSuQ== caseless@~0.12.0: version "0.12.0" @@ -11150,6 +11095,11 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +fsevents@2.3.2, fsevents@^2.1.2, fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + fsevents@^1.2.7: version "1.2.13" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" @@ -11158,11 +11108,6 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@^2.1.2, fsevents@^2.3.2, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - ftp@^0.3.10: version "0.3.10" resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" @@ -16099,29 +16044,7 @@ next-themes@^0.2.1: resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.2.1.tgz#0c9f128e847979daf6c67f70b38e6b6567856e45" integrity sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A== -next@13.3.0: - version "13.3.0" - resolved "https://registry.yarnpkg.com/next/-/next-13.3.0.tgz#40632d303d74fc8521faa0a5bf4a033a392749b1" - integrity sha512-OVTw8MpIPa12+DCUkPqRGPS3thlJPcwae2ZL4xti3iBff27goH024xy4q2lhlsdoYiKOi8Kz6uJoLW/GXwgfOA== - dependencies: - "@next/env" "13.3.0" - "@swc/helpers" "0.4.14" - busboy "1.6.0" - caniuse-lite "^1.0.30001406" - postcss "8.4.14" - styled-jsx "5.1.1" - optionalDependencies: - "@next/swc-darwin-arm64" "13.3.0" - "@next/swc-darwin-x64" "13.3.0" - "@next/swc-linux-arm64-gnu" "13.3.0" - "@next/swc-linux-arm64-musl" "13.3.0" - "@next/swc-linux-x64-gnu" "13.3.0" - "@next/swc-linux-x64-musl" "13.3.0" - "@next/swc-win32-arm64-msvc" "13.3.0" - "@next/swc-win32-ia32-msvc" "13.3.0" - "@next/swc-win32-x64-msvc" "13.3.0" - -next@13.3.4, next@^13.3.4: +next@^13.3.4: version "13.3.4" resolved "https://registry.yarnpkg.com/next/-/next-13.3.4.tgz#ce2d96053cabfca092cc829941efe5dfbe015d16" integrity sha512-sod7HeokBSvH5QV0KB+pXeLfcXUlLrGnVUXxHpmhilQ+nQYT3Im2O8DswD5e4uqbR8Pvdu9pcWgb1CbXZQZlmQ== @@ -17525,10 +17448,10 @@ pkg-up@3.1.0, pkg-up@^3.1.0: dependencies: find-up "^3.0.0" -playwright-core@1.29.1: - version "1.29.1" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.29.1.tgz#9ec15d61c4bd2f386ddf6ce010db53a030345a47" - integrity sha512-20Ai3d+lMkWpI9YZYlxk8gxatfgax5STW8GaMozAHwigLiyiKQrdkt7gaoT9UQR8FIVDg6qVXs9IoZUQrDjIIg== +playwright-core@1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.33.0.tgz#269efe29a927cd6d144d05f3c2d2f72bd72447a1" + integrity sha512-aizyPE1Cj62vAECdph1iaMILpT0WUDCq3E6rW6I+dleSbBoGbktvJtzS6VHkZ4DKNEOG9qJpiom/ZxO+S15LAw== plist@^3.0.5: version "3.0.6" From 3f64a4fbdf281298e13a2ad8e6510a1aece07ded Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 4 May 2023 16:31:22 +0200 Subject: [PATCH 209/312] Fix playwright install --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 71707c9e4..7a6083cb2 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -32,7 +32,7 @@ jobs: key: playwright-browsers-${{ env.PLAYWRIGHT_VERSION }} - if: steps.cache-playwright-browsers.outputs.cache-hit != 'true' # Setting up playwright in one example is sufficient - run: pnpm --filter example-next-13 exec playwright install --with-deps + run: pnpm --filter example-next-13-advanced exec playwright install --with-deps - run: pnpm run build - run: pnpm run lint From 61e200b2666dc5051978b4761a625832b52ccb38 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 4 May 2023 17:07:10 +0200 Subject: [PATCH 210/312] Distinct ports --- examples/example-next-13-named-routes/playwright.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/example-next-13-named-routes/playwright.config.ts b/examples/example-next-13-named-routes/playwright.config.ts index 6515d6b31..34a5aef2a 100644 --- a/examples/example-next-13-named-routes/playwright.config.ts +++ b/examples/example-next-13-named-routes/playwright.config.ts @@ -3,7 +3,7 @@ import type {PlaywrightTestConfig} from '@playwright/test'; import {devices} from '@playwright/test'; // Use a distinct port on CI to avoid conflicts during concurrent tests -const PORT = process.env.CI ? 3002 : 3000; +const PORT = process.env.CI ? 3003 : 3000; const config: PlaywrightTestConfig = { testDir: './tests', From 782d103d7c7afc9ab0b2ce2b47ed98cfb4d71e4d Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 4 May 2023 20:25:11 +0200 Subject: [PATCH 211/312] Update Next.js for newer examples --- examples/example-next-13-advanced/package.json | 4 ++-- examples/example-next-13-advanced/tests/main.spec.ts | 2 ++ examples/example-next-13-named-routes/package.json | 4 ++-- examples/example-next-13-with-pages/package.json | 4 ++-- pnpm-lock.yaml | 12 ++++++------ 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/examples/example-next-13-advanced/package.json b/examples/example-next-13-advanced/package.json index 7159b09bd..c8cce688c 100644 --- a/examples/example-next-13-advanced/package.json +++ b/examples/example-next-13-advanced/package.json @@ -13,7 +13,7 @@ "dependencies": { "lodash": "^4.17.21", "ms": "2.1.3", - "next": "^13.3.4", + "next": "^13.4.0", "next-intl": "*", "react": "^18.2.0", "react-dom": "^18.2.0" @@ -26,7 +26,7 @@ "chokidar-cli": "3.0.0", "eslint": "^8.12.0", "eslint-config-molindo": "^6.0.0", - "eslint-config-next": "^13.0.0", + "eslint-config-next": "^13.4.0", "typescript": "^4.6.3" } } diff --git a/examples/example-next-13-advanced/tests/main.spec.ts b/examples/example-next-13-advanced/tests/main.spec.ts index 1a7734365..9b7e8f7bc 100644 --- a/examples/example-next-13-advanced/tests/main.spec.ts +++ b/examples/example-next-13-advanced/tests/main.spec.ts @@ -345,6 +345,8 @@ it('sets alternate links', async ({request}) => { .link.split(', ') // On CI, Playwright uses a different host somehow .map((cur) => cur.replace(/0\.0\.0\.0/g, 'localhost')) + // Normalize ports + .map((cur) => cur.replace(/localhost:\d{4}/g, 'localhost:3000')) ); } diff --git a/examples/example-next-13-named-routes/package.json b/examples/example-next-13-named-routes/package.json index b5ee9f2f1..2600940b4 100644 --- a/examples/example-next-13-named-routes/package.json +++ b/examples/example-next-13-named-routes/package.json @@ -11,7 +11,7 @@ "start": "next start" }, "dependencies": { - "next": "^13.3.4", + "next": "^13.4.0", "next-intl": "*", "react": "^18.2.0", "react-dom": "^18.2.0" @@ -24,7 +24,7 @@ "chokidar-cli": "3.0.0", "eslint": "^8.12.0", "eslint-config-molindo": "^6.0.0", - "eslint-config-next": "^13.0.0", + "eslint-config-next": "^13.4.0", "typescript": "^4.6.3" } } diff --git a/examples/example-next-13-with-pages/package.json b/examples/example-next-13-with-pages/package.json index c695c18dc..122738e3c 100644 --- a/examples/example-next-13-with-pages/package.json +++ b/examples/example-next-13-with-pages/package.json @@ -10,7 +10,7 @@ "start": "next start" }, "dependencies": { - "next": "^13.3.4", + "next": "^13.4.0", "next-intl": "*", "react": "^18.2.0", "react-dom": "^18.2.0" @@ -21,7 +21,7 @@ "@types/react": "^18.2.5", "eslint": "^8.12.0", "eslint-config-molindo": "^6.0.0", - "eslint-config-next": "^13.0.0", + "eslint-config-next": "^13.4.0", "typescript": "^4.6.3" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9c0bb772..86050b9ff 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -213,7 +213,7 @@ importers: specifier: 2.1.3 version: 2.1.3 next: - specifier: ^13.3.4 + specifier: ^13.4.0 version: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) next-intl: specifier: '*' @@ -247,7 +247,7 @@ importers: specifier: ^6.0.0 version: 6.0.0(eslint@8.39.0)(jest@29.5.0) eslint-config-next: - specifier: ^13.0.0 + specifier: ^13.4.0 version: 13.4.0(eslint@8.39.0)(typescript@4.9.5) typescript: specifier: ^4.6.3 @@ -256,7 +256,7 @@ importers: examples/example-next-13-named-routes: dependencies: next: - specifier: ^13.3.4 + specifier: ^13.4.0 version: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) next-intl: specifier: '*' @@ -290,7 +290,7 @@ importers: specifier: ^6.0.0 version: 6.0.0(eslint@8.39.0)(jest@29.5.0) eslint-config-next: - specifier: ^13.0.0 + specifier: ^13.4.0 version: 13.4.0(eslint@8.39.0)(typescript@4.9.5) typescript: specifier: ^4.6.3 @@ -342,7 +342,7 @@ importers: examples/example-next-13-with-pages: dependencies: next: - specifier: ^13.3.4 + specifier: ^13.4.0 version: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) next-intl: specifier: '*' @@ -370,7 +370,7 @@ importers: specifier: ^6.0.0 version: 6.0.0(eslint@8.39.0)(jest@29.5.0) eslint-config-next: - specifier: ^13.0.0 + specifier: ^13.4.0 version: 13.4.0(eslint@8.39.0)(typescript@4.9.5) typescript: specifier: ^4.6.3 From 25b22e419e4941c7f44b60786bd25e70c5fc2e0e Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 4 May 2023 21:27:13 +0200 Subject: [PATCH 212/312] Skip broken test --- examples/example-next-13-advanced/package.json | 2 +- examples/example-next-13-advanced/tests/main.spec.ts | 3 ++- examples/example-next-13-named-routes/package.json | 2 +- examples/example-next-13-with-pages/package.json | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/examples/example-next-13-advanced/package.json b/examples/example-next-13-advanced/package.json index c8cce688c..0be4f3aa9 100644 --- a/examples/example-next-13-advanced/package.json +++ b/examples/example-next-13-advanced/package.json @@ -14,7 +14,7 @@ "lodash": "^4.17.21", "ms": "2.1.3", "next": "^13.4.0", - "next-intl": "*", + "next-intl": "^2.13.2", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/example-next-13-advanced/tests/main.spec.ts b/examples/example-next-13-advanced/tests/main.spec.ts index 9b7e8f7bc..1299e3877 100644 --- a/examples/example-next-13-advanced/tests/main.spec.ts +++ b/examples/example-next-13-advanced/tests/main.spec.ts @@ -411,7 +411,8 @@ it('can localize route handlers', async ({request}) => { } }); -it('can use caching headers', async ({request}) => { +// Unfortunately broken in newer Next.js versions (probably somewhere around ~13.3) +it.skip('can use caching headers', async ({request}) => { for (const pathname of ['/', '/nested', '/de', '/de/verschachtelt']) { expect((await request.get(pathname)).headers()['cache-control']).toBe( 's-maxage=86400, stale-while-revalidate=31557600' diff --git a/examples/example-next-13-named-routes/package.json b/examples/example-next-13-named-routes/package.json index 2600940b4..66f6f22f4 100644 --- a/examples/example-next-13-named-routes/package.json +++ b/examples/example-next-13-named-routes/package.json @@ -12,7 +12,7 @@ }, "dependencies": { "next": "^13.4.0", - "next-intl": "*", + "next-intl": "^2.13.2", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/examples/example-next-13-with-pages/package.json b/examples/example-next-13-with-pages/package.json index 122738e3c..a62e5e22d 100644 --- a/examples/example-next-13-with-pages/package.json +++ b/examples/example-next-13-with-pages/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "next": "^13.4.0", - "next-intl": "*", + "next-intl": "^2.13.2", "react": "^18.2.0", "react-dom": "^18.2.0" }, From 4b8b6ba845e060b96d25c8bbb6bf8d12436484a1 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 4 May 2023 21:32:43 +0200 Subject: [PATCH 213/312] Update lockfile --- pnpm-lock.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 86050b9ff..21d0e1f09 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -216,7 +216,7 @@ importers: specifier: ^13.4.0 version: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) next-intl: - specifier: '*' + specifier: ^2.13.2 version: link:../../packages/next-intl react: specifier: ^18.2.0 @@ -259,7 +259,7 @@ importers: specifier: ^13.4.0 version: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) next-intl: - specifier: '*' + specifier: ^2.13.2 version: link:../../packages/next-intl react: specifier: ^18.2.0 @@ -345,7 +345,7 @@ importers: specifier: ^13.4.0 version: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) next-intl: - specifier: '*' + specifier: ^2.13.2 version: link:../../packages/next-intl react: specifier: ^18.2.0 From 23f44e2840c3a4ac14bc32be27228920b4a98e93 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 9 May 2023 16:48:02 +0200 Subject: [PATCH 214/312] fix(Next.js 13 RSC): Improvements for routing APIs (#277) **Changes:** - Improve heuristic for initial `href` of `Link` on the server side to default to prefixed hrefs. On the client side, the prefix is potentially removed in case we're in unprefixed routing mode. - Return correct value for `usePathname` on the initial render - Allow to use `Link` on the client side without a provider - Don't rely on cookie presence for client-side routing APIs (tested with the latest Next.js version) --- .../src/app/[locale]/page.tsx | 2 + .../src/components/ClientLink.tsx | 10 ++ .../tests/main.spec.ts | 116 ++++++++++++++++-- package.json | 2 +- .../next-intl/src/client/getCookieLocale.tsx | 19 --- .../next-intl/src/client/localizeHref.tsx | 39 +++--- .../next-intl/src/client/useClientLocale.tsx | 17 +++ packages/next-intl/src/client/usePathname.tsx | 40 ++---- packages/next-intl/src/client/useRouter.tsx | 10 +- packages/next-intl/src/index.tsx | 4 +- packages/next-intl/src/react-client/Link.tsx | 21 ++++ packages/next-intl/src/react-server/Link.tsx | 12 ++ packages/next-intl/src/react-server/index.tsx | 6 +- packages/next-intl/src/shared/BaseLink.tsx | 56 +++++++++ packages/next-intl/src/shared/Link.tsx | 67 ---------- packages/next-intl/src/shared/constants.tsx | 3 + packages/next-intl/src/shared/prefixHref.tsx | 21 ++++ .../src/shared/unlocalizePathname.tsx | 3 + .../test/{shared => client}/Link.test.tsx | 11 +- .../test/client/usePathname.test.tsx | 13 -- .../test/shared/unlocalizePathname.test.tsx | 13 ++ 21 files changed, 302 insertions(+), 183 deletions(-) create mode 100644 examples/example-next-13-advanced/src/components/ClientLink.tsx delete mode 100644 packages/next-intl/src/client/getCookieLocale.tsx create mode 100644 packages/next-intl/src/client/useClientLocale.tsx create mode 100644 packages/next-intl/src/react-client/Link.tsx create mode 100644 packages/next-intl/src/react-server/Link.tsx create mode 100644 packages/next-intl/src/shared/BaseLink.tsx delete mode 100644 packages/next-intl/src/shared/Link.tsx create mode 100644 packages/next-intl/src/shared/prefixHref.tsx create mode 100644 packages/next-intl/src/shared/unlocalizePathname.tsx rename packages/next-intl/test/{shared => client}/Link.test.tsx (92%) delete mode 100644 packages/next-intl/test/client/usePathname.test.tsx create mode 100644 packages/next-intl/test/shared/unlocalizePathname.test.tsx diff --git a/examples/example-next-13-advanced/src/app/[locale]/page.tsx b/examples/example-next-13-advanced/src/app/[locale]/page.tsx index 2a1caa6c9..415449ebc 100644 --- a/examples/example-next-13-advanced/src/app/[locale]/page.tsx +++ b/examples/example-next-13-advanced/src/app/[locale]/page.tsx @@ -6,6 +6,7 @@ import { useTimeZone, useTranslations } from 'next-intl'; +import ClientLink from '../../components/ClientLink'; import ClientRouterWithoutProvider from '../../components/ClientRouterWithoutProvider'; import CoreLibrary from '../../components/CoreLibrary'; import LocaleSwitcher from '../../components/LocaleSwitcher'; @@ -54,6 +55,7 @@ export default function Index({searchParams}: Props) { Go to home with query param
    + Link on client without provider

    {JSON.stringify(searchParams, null, 2)}

    diff --git a/examples/example-next-13-advanced/src/components/ClientLink.tsx b/examples/example-next-13-advanced/src/components/ClientLink.tsx new file mode 100644 index 000000000..c0bbc941f --- /dev/null +++ b/examples/example-next-13-advanced/src/components/ClientLink.tsx @@ -0,0 +1,10 @@ +'use client'; + +import {Link} from 'next-intl'; +import {ComponentProps} from 'react'; + +type Props = ComponentProps; + +export default function ClientLink(props: Props) { + return ; +} diff --git a/examples/example-next-13-advanced/tests/main.spec.ts b/examples/example-next-13-advanced/tests/main.spec.ts index 1299e3877..5728d2ef0 100644 --- a/examples/example-next-13-advanced/tests/main.spec.ts +++ b/examples/example-next-13-advanced/tests/main.spec.ts @@ -1,4 +1,29 @@ -import {test as it, expect} from '@playwright/test'; +import {test as it, expect, Page, BrowserContext} from '@playwright/test'; + +async function assertLocaleCookieValue(page: Page, value: string) { + await expect(async () => { + const cookie = (await page.context().cookies()).find( + (cur) => cur.name === 'NEXT_LOCALE' + ); + expect(cookie).toMatchObject({ + name: 'NEXT_LOCALE', + value + }); + }).toPass(); +} + +function getPageLoadTracker(context: BrowserContext) { + const state = {numPageLoads: 0}; + + context.on('request', (request) => { + // Is the same in dev and prod + if (request.url().includes('/chunks/main-app')) { + state.numPageLoads++; + } + }); + + return state; +} it('handles unknown locales', async ({page}) => { const response = await page.goto('/unknown'); @@ -74,15 +99,7 @@ it('remembers the last locale', async ({page}) => { await page.goto('/de'); // Wait for the cookie to be set on the client side - await expect(async () => { - const cookie = (await page.context().cookies()).find( - (cur) => cur.name === 'NEXT_LOCALE' - ); - expect(cookie).toMatchObject({ - name: 'NEXT_LOCALE', - value: 'de' - }); - }).toPass(); + await assertLocaleCookieValue(page, 'de'); await page.goto('/'); await expect(page).toHaveURL('/de'); @@ -187,6 +204,68 @@ it('can use `Link` to link to the root of another language', async ({page}) => { await expect(link).toHaveAttribute('href', '/de'); await link.click(); await expect(page).toHaveURL('/de'); + await page.getByRole('link', {name: 'Zu Englisch wechseln'}).click(); + await expect(page).toHaveURL('/'); +}); + +it('uses client-side transitions when using link', async ({context, page}) => { + const tracker = getPageLoadTracker(context); + + await page.goto('/'); + expect(tracker.numPageLoads).toBe(1); + + await page.getByRole('link', {name: 'Nested page'}).click(); + await expect(page).toHaveURL('/nested'); + expect(tracker.numPageLoads).toBe(1); + + await page.getByRole('link', {name: 'Client page'}).click(); + await expect(page).toHaveURL('/client'); + expect(tracker.numPageLoads).toBe(1); + + await page.goBack(); + await expect(page).toHaveURL('/nested'); + expect(tracker.numPageLoads).toBe(1); + + await page.goForward(); + await expect(page).toHaveURL('/client'); + expect(tracker.numPageLoads).toBe(1); +}); + +it('keeps the locale cookie updated when changing the locale and uses soft navigation when changing the locale', async ({ + context, + page +}) => { + const tracker = getPageLoadTracker(context); + + await page.goto('/'); + await assertLocaleCookieValue(page, 'en'); + expect(tracker.numPageLoads).toBe(1); + + const link = page.getByRole('link', {name: 'Switch to German'}); + await link.hover(); + await assertLocaleCookieValue(page, 'en'); + await link.click(); + + await expect(page).toHaveURL('/de'); + await assertLocaleCookieValue(page, 'de'); + + // Somehow Next.js performs a hard refresh when + // a non-preloaded route is being navigated to. + expect(tracker.numPageLoads).toBe(2); +}); + +it('can use `Link` in client components without using a provider', async ({ + page +}) => { + await page.goto('/'); + await expect( + page.getByRole('link', {name: 'Link on client without provider'}) + ).toHaveAttribute('href', '/'); + + await page.goto('/de'); + await expect( + page.getByRole('link', {name: 'Link on client without provider'}) + ).toHaveAttribute('href', '/de'); }); it('can use `Link` on the client', async ({page}) => { @@ -195,6 +274,12 @@ it('can use `Link` on the client', async ({page}) => { 'href', '/' ); + + await page.goto('/de/client'); + await expect(page.getByRole('link', {name: 'Go to home'})).toHaveAttribute( + 'href', + '/de' + ); }); it('prefixes as necessary with `Link`', async ({page}) => { @@ -264,6 +349,17 @@ it('can use `usePathname`', async ({page}) => { await expect(page.getByTestId('UnlocalizedPathname')).toHaveText('/client'); }); +it('returns the correct value from `usePathname` in the initial render', async ({ + request +}) => { + expect(await (await request.get('/client')).text()).toContain( + '

    /client

    ' + ); + expect(await (await request.get('/de/client')).text()).toContain( + '

    /client

    ' + ); +}); + it('can use `redirect`', async ({page}) => { await page.goto('/redirect'); await expect(page).toHaveURL('/client'); diff --git a/package.json b/package.json index 8aa637df5..5621875b7 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "private": true, "scripts": { "build": "turbo run build", - "test": "turbo run test", + "test": "turbo run test --concurrency 1", "lint": "turbo run lint", "prepare": "turbo run build --filter './packages/**'", "publish": "lerna publish --yes --no-verify-access" diff --git a/packages/next-intl/src/client/getCookieLocale.tsx b/packages/next-intl/src/client/getCookieLocale.tsx deleted file mode 100644 index 5f207d636..000000000 --- a/packages/next-intl/src/client/getCookieLocale.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import {COOKIE_LOCALE_NAME} from '../shared/constants'; - -function getCookieValueByName(name: string) { - // https://stackoverflow.com/a/15724300/343045 - const value = `; ${document.cookie}`; - const parts = value.split(`; ${name}=`); - if (parts.length === 2) { - const part = parts.pop()?.split(';').shift(); - if (part) return part; - } - - throw new Error( - `Unable to find next-intl cookie, have you configured the middleware?` - ); -} - -export default function getCookieLocale() { - return getCookieValueByName(COOKIE_LOCALE_NAME); -} diff --git a/packages/next-intl/src/client/localizeHref.tsx b/packages/next-intl/src/client/localizeHref.tsx index 82f48ccfa..e208aab8b 100644 --- a/packages/next-intl/src/client/localizeHref.tsx +++ b/packages/next-intl/src/client/localizeHref.tsx @@ -1,46 +1,37 @@ import {UrlObject} from 'url'; -import localizePathname from '../shared/localizePathname'; -import getCookieLocale from './getCookieLocale'; +import prefixHref from '../shared/prefixHref'; import hasPathnamePrefixed from './hasPathnamePrefixed'; export default function localizeHref( href: string, - locale?: string, + locale: string, + defaultLocale?: string, pathname?: string ): string; export default function localizeHref( href: UrlObject | string, - locale?: string, + locale: string, + defaultLocale?: string, pathname?: string ): UrlObject | string; export default function localizeHref( href: UrlObject | string, - locale?: string, + locale: string, + defaultLocale: string = locale, pathname?: string ) { - const cookieLocale = getCookieLocale(); - if (!locale) locale = cookieLocale; - if (!pathname) { pathname = window.location.pathname; } - const isSwitchingLocale = locale !== cookieLocale; - const isPathnamePrefixed = hasPathnamePrefixed(locale, pathname); - - if (isPathnamePrefixed || isSwitchingLocale) { - let prefixedHref; - if (typeof href === 'string') { - prefixedHref = localizePathname(locale, href); - } else { - prefixedHref = {...href}; - if (href.pathname) { - prefixedHref.pathname = localizePathname(locale, href.pathname); - } - } + const isSwitchingLocale = locale !== defaultLocale; + const isPathnamePrefixed = + locale == null || hasPathnamePrefixed(locale, pathname); + const shouldPrefix = isPathnamePrefixed || isSwitchingLocale; - return prefixedHref; - } else { - return href; + if (shouldPrefix && locale != null) { + return prefixHref(href, locale); } + + return href; } diff --git a/packages/next-intl/src/client/useClientLocale.tsx b/packages/next-intl/src/client/useClientLocale.tsx new file mode 100644 index 000000000..8a3d0d5b1 --- /dev/null +++ b/packages/next-intl/src/client/useClientLocale.tsx @@ -0,0 +1,17 @@ +import {useParams} from 'next/navigation'; +import {useLocale} from 'use-intl'; +import {LOCALE_SEGMENT_NAME} from '../shared/constants'; + +export default function useClientLocale(): string { + let locale; + + const params = useParams(); + if (params[LOCALE_SEGMENT_NAME]) { + locale = params[LOCALE_SEGMENT_NAME]; + } else { + // eslint-disable-next-line react-hooks/rules-of-hooks -- Reading from context conditionally is fine + locale = useLocale(); + } + + return locale; +} diff --git a/packages/next-intl/src/client/usePathname.tsx b/packages/next-intl/src/client/usePathname.tsx index 98a96265f..f03a4565a 100644 --- a/packages/next-intl/src/client/usePathname.tsx +++ b/packages/next-intl/src/client/usePathname.tsx @@ -1,48 +1,24 @@ 'use client'; import {usePathname as useNextPathname} from 'next/navigation'; -import {useEffect, useState} from 'react'; -import getCookieLocale from './getCookieLocale'; +import unlocalizePathname from '../shared/unlocalizePathname'; import hasPathnamePrefixed from './hasPathnamePrefixed'; - -export function unlocalizePathname(pathname: string) { - return pathname.replace(/^\/[\w_-]+/, '') || '/'; -} +import useClientLocale from './useClientLocale'; /** * Returns the pathname without a potential locale prefix. * * This can be helpful e.g. to implement navigation links, * where the active link is highlighted. - * - * Note that on the server side `null` is returned, only on - * the client side the correct pathname will be returned. */ -export default function usePathname() { +export default function usePathname(): string { const pathname = useNextPathname(); + const locale = useClientLocale(); - // TODO: Once `useParams` is a thing, we can set this on the initial render. - // The `pathname` can either be prefixed with a locale or not, since we don't - // know the matched locale during SSR, we can't safely remove the prefix. - const [unlocalizedPathname, setUnlocalizedPathname] = useState( - null - ); - - useEffect(() => { - if (pathname == null) { - setUnlocalizedPathname(pathname); - return; - } - - const cookieLocale = getCookieLocale(); - const isPathnamePrefixed = hasPathnamePrefixed(cookieLocale, pathname); - - if (isPathnamePrefixed) { - setUnlocalizedPathname(unlocalizePathname(pathname)); - } else { - setUnlocalizedPathname(pathname); - } - }, [pathname]); + const isPathnamePrefixed = hasPathnamePrefixed(locale, pathname); + const unlocalizedPathname = isPathnamePrefixed + ? unlocalizePathname(pathname, locale) + : pathname; return unlocalizedPathname; } diff --git a/packages/next-intl/src/client/useRouter.tsx b/packages/next-intl/src/client/useRouter.tsx index 93fd5eac9..dea04552c 100644 --- a/packages/next-intl/src/client/useRouter.tsx +++ b/packages/next-intl/src/client/useRouter.tsx @@ -1,23 +1,25 @@ import {useRouter as useNextRouter} from 'next/navigation'; import {useMemo} from 'react'; import localizeHref from './localizeHref'; +import useClientLocale from './useClientLocale'; export default function useRouter() { const router = useNextRouter(); + const locale = useClientLocale(); return useMemo( () => ({ ...router, push(href: string) { - return router.push(localizeHref(href)); + return router.push(localizeHref(href, locale)); }, replace(href: string) { - return router.replace(localizeHref(href)); + return router.replace(localizeHref(href, locale)); }, prefetch(href: string) { - return router.prefetch(localizeHref(href)); + return router.prefetch(localizeHref(href, locale)); } }), - [router] + [locale, router] ); } diff --git a/packages/next-intl/src/index.tsx b/packages/next-intl/src/index.tsx index b1aab3536..30276896b 100644 --- a/packages/next-intl/src/index.tsx +++ b/packages/next-intl/src/index.tsx @@ -3,12 +3,12 @@ * from 'next-intl'. Make sure this mirrors the API from 'react-server'. */ -import Link from './shared/Link'; +import Link from './react-client/Link'; export * from 'use-intl'; export {default as useLocalizedRouter} from './react-client/useLocalizedRouter'; -export {default as Link} from './shared/Link'; +export {default as Link} from './react-client/Link'; /** @deprecated Is called `Link` now. */ export const LocalizedLink = Link; diff --git a/packages/next-intl/src/react-client/Link.tsx b/packages/next-intl/src/react-client/Link.tsx new file mode 100644 index 000000000..308c2c3d0 --- /dev/null +++ b/packages/next-intl/src/react-client/Link.tsx @@ -0,0 +1,21 @@ +import React, {ComponentProps} from 'react'; +import useClientLocale from '../client/useClientLocale'; +import BaseLink from '../shared/BaseLink'; + +type Props = Omit, 'locale'> & { + locale?: string; +}; + +/** + * Wraps `next/link` and prefixes the `href` with the current locale if + * necessary. + * + * Note that when a `locale` prop is passed to switch the locale, the `prefetch` + * prop is not supported. This is because Next.js would prefetch the page and + * the `set-cookie` response header would cause the locale cookie on the current + * page to be overwritten before the user even decides to change the locale. + */ +export default function Link({locale, ...rest}: Props) { + const defaultLocale = useClientLocale(); + return ; +} diff --git a/packages/next-intl/src/react-server/Link.tsx b/packages/next-intl/src/react-server/Link.tsx new file mode 100644 index 000000000..86354d746 --- /dev/null +++ b/packages/next-intl/src/react-server/Link.tsx @@ -0,0 +1,12 @@ +import React, {ComponentProps} from 'react'; +import BaseLink from '../shared/BaseLink'; +import useLocale from './useLocale'; + +type Props = Omit, 'locale'> & { + locale?: string; +}; + +export default function Link({locale, ...rest}: Props) { + const defaultLocale = useLocale(); + return ; +} diff --git a/packages/next-intl/src/react-server/index.tsx b/packages/next-intl/src/react-server/index.tsx index 6c35e3a30..f89d0c6b3 100644 --- a/packages/next-intl/src/react-server/index.tsx +++ b/packages/next-intl/src/react-server/index.tsx @@ -3,7 +3,7 @@ * from 'next-intl'. Make sure this mirrors the API from the main entry. */ -import Link from '../shared/Link'; +import Link from './Link'; // Replaced exports from the `react` package export {default as useLocale} from './useLocale'; @@ -12,9 +12,7 @@ export {default as useIntl} from './useIntl'; export {default as useFormatter} from './useFormatter'; export {default as useNow} from './useNow'; export {default as useTimeZone} from './useTimeZone'; - -// We don't offer a server-only variant of this component currently -export {default as Link} from '../shared/Link'; +export {default as Link} from './Link'; export {default as NextIntlClientProvider} from '../shared/NextIntlClientProvider'; diff --git a/packages/next-intl/src/shared/BaseLink.tsx b/packages/next-intl/src/shared/BaseLink.tsx new file mode 100644 index 000000000..db4f36dc8 --- /dev/null +++ b/packages/next-intl/src/shared/BaseLink.tsx @@ -0,0 +1,56 @@ +'use client'; + +import NextLink from 'next/link'; +import {usePathname} from 'next/navigation'; +import React, {ComponentProps, forwardRef, useEffect, useState} from 'react'; +import localizeHref from '../client/localizeHref'; +import useClientLocale from '../client/useClientLocale'; +import isLocalURL from './isLocalUrl'; +import prefixHref from './prefixHref'; + +type Props = Omit, 'locale'> & { + locale: string; +}; + +function BaseLink({href, locale, prefetch, ...rest}: Props, ref: Props['ref']) { + const pathname = usePathname(); + const defaultLocale = useClientLocale(); + const isChangingLocale = locale !== defaultLocale; + + const [localizedHref, setLocalizedHref] = useState(() => + isLocalURL(href) && locale + ? // Potentially the href shouldn't be prefixed, but to determine this we + // need a) the default locale and b) the information if we use prefixed + // routing. During the server side render (both in RSC as well as SSR), + // we don't have this information. Therefore we always prefix the href + // since this will always result in a valid URL, even if it might cause + // a redirect. This is better than pointing to a non-localized href + // during the server render, which would potentially be wrong. The final + // href is determined in the effect below. + prefixHref(href, locale) + : href + ); + + useEffect(() => { + if (isLocalURL(href)) { + setLocalizedHref( + localizeHref(href, locale, defaultLocale, pathname ?? undefined) + ); + } + }, [defaultLocale, href, locale, pathname]); + + if (isChangingLocale) { + if (prefetch && process.env.NODE_ENV !== 'production') { + console.error( + 'The `prefetch` prop is currently not supported when using the `locale` prop on `Link` to switch the locale.`' + ); + } + prefetch = false; + } + + return ( + + ); +} + +export default forwardRef(BaseLink); diff --git a/packages/next-intl/src/shared/Link.tsx b/packages/next-intl/src/shared/Link.tsx deleted file mode 100644 index 4901bb51e..000000000 --- a/packages/next-intl/src/shared/Link.tsx +++ /dev/null @@ -1,67 +0,0 @@ -'use client'; - -import url from 'url'; -import NextLink from 'next/link'; -import {usePathname} from 'next/navigation'; -import React, {ComponentProps, forwardRef, useEffect, useState} from 'react'; -import localizeHref from '../client/localizeHref'; -import isLocalURL from './isLocalUrl'; - -type Props = Omit, 'locale'> & { - locale?: string; -}; - -/** - * Wraps `next/link` and prefixes the `href` with the current locale. - * - * Note that when a `locale` prop is passed, two de-optimizations are made: - * - * 1. The `prefetch` prop is not supported. This is because Next.js prefetches - * the page and the `set-cookie` response header will cause the locale cookie - * on the current page to be overwritten. - * 2. A regular anchor tag is used instead of `next/link`. This is to avoid a - * bug with Server Components where the markup wouldn't be updated correctly - * otherwise. - */ -function Link({href, locale, prefetch, ...rest}: Props, ref: Props['ref']) { - const [localizedHref, setLocalizedHref] = useState(href); - const pathname = usePathname(); - - useEffect(() => { - if (isLocalURL(href)) { - setLocalizedHref(localizeHref(href, locale, pathname ?? undefined)); - } - }, [href, locale, pathname]); - - if (locale !== undefined) { - // If Next.js fixes the bug where the markup isn't updated correctly when - // the locale changes, we can remove this check. Note however that we still - // need to disable prefetching (see comment above). - - if (prefetch && process.env.NODE_ENV !== 'production') { - console.error( - 'The `prefetch` prop is currently not supported when using the `locale` prop on `Link`.`' - ); - } - - let localizedHrefString; - if (localizedHref) { - if (typeof localizedHref === 'string') { - localizedHrefString = localizedHref; - } else { - localizedHrefString = url.format(localizedHref); - } - } - - return ( - // eslint-disable-next-line jsx-a11y/anchor-has-content - - ); - } - - return ( - - ); -} - -export default forwardRef(Link); diff --git a/packages/next-intl/src/shared/constants.tsx b/packages/next-intl/src/shared/constants.tsx index c509bca9f..e80fad277 100644 --- a/packages/next-intl/src/shared/constants.tsx +++ b/packages/next-intl/src/shared/constants.tsx @@ -4,3 +4,6 @@ export const COOKIE_LOCALE_NAME = 'NEXT_LOCALE'; // Should take precedence over the cookie export const HEADER_LOCALE_NAME = 'X-NEXT-INTL-LOCALE'; + +// In a URL like "/en-US/about", the locale segment is "en-US" +export const LOCALE_SEGMENT_NAME = 'locale'; diff --git a/packages/next-intl/src/shared/prefixHref.tsx b/packages/next-intl/src/shared/prefixHref.tsx new file mode 100644 index 000000000..000c740b8 --- /dev/null +++ b/packages/next-intl/src/shared/prefixHref.tsx @@ -0,0 +1,21 @@ +import {UrlObject} from 'url'; +import localizePathname from './localizePathname'; + +export default function prefixHref(href: string, locale: string): string; +export default function prefixHref( + href: UrlObject | string, + locale: string +): UrlObject | string; +export default function prefixHref(href: UrlObject | string, locale: string) { + let prefixedHref; + if (typeof href === 'string') { + prefixedHref = localizePathname(locale, href); + } else { + prefixedHref = {...href}; + if (href.pathname) { + prefixedHref.pathname = localizePathname(locale, href.pathname); + } + } + + return prefixedHref; +} diff --git a/packages/next-intl/src/shared/unlocalizePathname.tsx b/packages/next-intl/src/shared/unlocalizePathname.tsx new file mode 100644 index 000000000..64077f12d --- /dev/null +++ b/packages/next-intl/src/shared/unlocalizePathname.tsx @@ -0,0 +1,3 @@ +export default function unlocalizePathname(pathname: string, locale: string) { + return pathname.replace(new RegExp(`^/${locale}`), '') || '/'; +} diff --git a/packages/next-intl/test/shared/Link.test.tsx b/packages/next-intl/test/client/Link.test.tsx similarity index 92% rename from packages/next-intl/test/shared/Link.test.tsx rename to packages/next-intl/test/client/Link.test.tsx index c50456fc9..ea3a792b3 100644 --- a/packages/next-intl/test/shared/Link.test.tsx +++ b/packages/next-intl/test/client/Link.test.tsx @@ -2,9 +2,10 @@ import {render, screen} from '@testing-library/react'; import React from 'react'; import {Link} from '../../src'; -beforeEach(() => { - document.cookie = 'NEXT_LOCALE=en'; -}); +jest.mock('next/navigation', () => ({ + useParams: jest.fn(() => ({locale: 'en'})), + usePathname: jest.fn(() => '/') +})); it('renders an href without a locale if the locale matches', () => { render(Test); @@ -65,7 +66,3 @@ it('works for external urls with an object href', () => { 'https://example.com/test' ); }); - -afterEach(() => { - document.cookie = ''; -}); diff --git a/packages/next-intl/test/client/usePathname.test.tsx b/packages/next-intl/test/client/usePathname.test.tsx deleted file mode 100644 index e8b9765f8..000000000 --- a/packages/next-intl/test/client/usePathname.test.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import {unlocalizePathname} from '../../src/client/usePathname'; - -it('works for the root', () => { - expect(unlocalizePathname('/en')).toEqual('/'); -}); - -it('works for nested pages', () => { - expect(unlocalizePathname('/en/nested')).toEqual('/nested'); -}); - -it('works with sub-tags', () => { - expect(unlocalizePathname('/en-UK/nested')).toEqual('/nested'); -}); diff --git a/packages/next-intl/test/shared/unlocalizePathname.test.tsx b/packages/next-intl/test/shared/unlocalizePathname.test.tsx new file mode 100644 index 000000000..38c5ef75b --- /dev/null +++ b/packages/next-intl/test/shared/unlocalizePathname.test.tsx @@ -0,0 +1,13 @@ +import unlocalizePathname from '../../src/shared/unlocalizePathname'; + +it('works for the root', () => { + expect(unlocalizePathname('/en', 'en')).toEqual('/'); +}); + +it('works for nested pages', () => { + expect(unlocalizePathname('/en/nested', 'en')).toEqual('/nested'); +}); + +it('works with sub-tags', () => { + expect(unlocalizePathname('/en-UK/nested', 'en-UK')).toEqual('/nested'); +}); From 0ffb615cc1e0e72ac0c42dc4eb309b82c80adc2f Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 10 May 2023 17:51:47 +0200 Subject: [PATCH 215/312] Fix lint --- examples/example-next-13/src/components/NavigationLink.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/example-next-13/src/components/NavigationLink.tsx b/examples/example-next-13/src/components/NavigationLink.tsx index 78c569c46..559bf6664 100644 --- a/examples/example-next-13/src/components/NavigationLink.tsx +++ b/examples/example-next-13/src/components/NavigationLink.tsx @@ -1,4 +1,4 @@ -'use client' +'use client'; import clsx from 'clsx'; import {Link} from 'next-intl'; From f18e46766c32d4305f45fc78ab565b4e2826e9d1 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 10 May 2023 17:59:36 +0200 Subject: [PATCH 216/312] Remove unused files --- .../src/client/hasPathnamePrefixed.tsx | 7 ---- .../next-intl/src/client/localizeHref.tsx | 37 ------------------- packages/next-intl/src/server/redirect.tsx | 2 +- packages/next-intl/src/shared/isLocalUrl.tsx | 13 ------- .../next-intl/src/shared/localizePathname.tsx | 9 ----- packages/next-intl/src/shared/prefixHref.tsx | 21 ----------- .../src/shared/unlocalizePathname.tsx | 3 -- .../test/client/hasPathnamePrefixed.test.tsx | 7 ---- .../test/shared/unlocalizePathname.test.tsx | 13 ------- 9 files changed, 1 insertion(+), 111 deletions(-) delete mode 100644 packages/next-intl/src/client/hasPathnamePrefixed.tsx delete mode 100644 packages/next-intl/src/client/localizeHref.tsx delete mode 100644 packages/next-intl/src/shared/isLocalUrl.tsx delete mode 100644 packages/next-intl/src/shared/localizePathname.tsx delete mode 100644 packages/next-intl/src/shared/prefixHref.tsx delete mode 100644 packages/next-intl/src/shared/unlocalizePathname.tsx delete mode 100644 packages/next-intl/test/client/hasPathnamePrefixed.test.tsx delete mode 100644 packages/next-intl/test/shared/unlocalizePathname.test.tsx diff --git a/packages/next-intl/src/client/hasPathnamePrefixed.tsx b/packages/next-intl/src/client/hasPathnamePrefixed.tsx deleted file mode 100644 index 1649a281a..000000000 --- a/packages/next-intl/src/client/hasPathnamePrefixed.tsx +++ /dev/null @@ -1,7 +0,0 @@ -export default function hasPathnamePrefixed(locale: string, pathname: string) { - const prefix = `/${locale}`; - return ( - pathname === prefix || - (pathname.startsWith(`${prefix}/`) && pathname.length > prefix.length) - ); -} diff --git a/packages/next-intl/src/client/localizeHref.tsx b/packages/next-intl/src/client/localizeHref.tsx deleted file mode 100644 index e208aab8b..000000000 --- a/packages/next-intl/src/client/localizeHref.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import {UrlObject} from 'url'; -import prefixHref from '../shared/prefixHref'; -import hasPathnamePrefixed from './hasPathnamePrefixed'; - -export default function localizeHref( - href: string, - locale: string, - defaultLocale?: string, - pathname?: string -): string; -export default function localizeHref( - href: UrlObject | string, - locale: string, - defaultLocale?: string, - pathname?: string -): UrlObject | string; -export default function localizeHref( - href: UrlObject | string, - locale: string, - defaultLocale: string = locale, - pathname?: string -) { - if (!pathname) { - pathname = window.location.pathname; - } - - const isSwitchingLocale = locale !== defaultLocale; - const isPathnamePrefixed = - locale == null || hasPathnamePrefixed(locale, pathname); - const shouldPrefix = isPathnamePrefixed || isSwitchingLocale; - - if (shouldPrefix && locale != null) { - return prefixHref(href, locale); - } - - return href; -} diff --git a/packages/next-intl/src/server/redirect.tsx b/packages/next-intl/src/server/redirect.tsx index da1074b56..e72d2a22a 100644 --- a/packages/next-intl/src/server/redirect.tsx +++ b/packages/next-intl/src/server/redirect.tsx @@ -1,5 +1,5 @@ import {redirect as nextRedirect} from 'next/navigation'; -import localizePathname from '../shared/localizePathname'; +import {localizePathname} from '../shared/utils'; import getLocale from './getLocale'; export default function redirect(pathname: string) { diff --git a/packages/next-intl/src/shared/isLocalUrl.tsx b/packages/next-intl/src/shared/isLocalUrl.tsx deleted file mode 100644 index 76a1f6502..000000000 --- a/packages/next-intl/src/shared/isLocalUrl.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import NextLink from 'next/link'; -import {ComponentProps} from 'react'; - -type Url = ComponentProps['href']; - -export default function isLocalUrl(url: Url) { - if (typeof url === 'object') { - return url.host == null && url.hostname == null; - } else { - const hasProtocol = /^[a-z]+:/i.test(url); - return !hasProtocol; - } -} diff --git a/packages/next-intl/src/shared/localizePathname.tsx b/packages/next-intl/src/shared/localizePathname.tsx deleted file mode 100644 index dcb1a5179..000000000 --- a/packages/next-intl/src/shared/localizePathname.tsx +++ /dev/null @@ -1,9 +0,0 @@ -export default function localizePathname(locale: string, pathname: string) { - let localizedHref = '/' + locale; - - if (pathname !== '/') { - localizedHref += pathname; - } - - return localizedHref; -} diff --git a/packages/next-intl/src/shared/prefixHref.tsx b/packages/next-intl/src/shared/prefixHref.tsx deleted file mode 100644 index 000c740b8..000000000 --- a/packages/next-intl/src/shared/prefixHref.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import {UrlObject} from 'url'; -import localizePathname from './localizePathname'; - -export default function prefixHref(href: string, locale: string): string; -export default function prefixHref( - href: UrlObject | string, - locale: string -): UrlObject | string; -export default function prefixHref(href: UrlObject | string, locale: string) { - let prefixedHref; - if (typeof href === 'string') { - prefixedHref = localizePathname(locale, href); - } else { - prefixedHref = {...href}; - if (href.pathname) { - prefixedHref.pathname = localizePathname(locale, href.pathname); - } - } - - return prefixedHref; -} diff --git a/packages/next-intl/src/shared/unlocalizePathname.tsx b/packages/next-intl/src/shared/unlocalizePathname.tsx deleted file mode 100644 index 64077f12d..000000000 --- a/packages/next-intl/src/shared/unlocalizePathname.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function unlocalizePathname(pathname: string, locale: string) { - return pathname.replace(new RegExp(`^/${locale}`), '') || '/'; -} diff --git a/packages/next-intl/test/client/hasPathnamePrefixed.test.tsx b/packages/next-intl/test/client/hasPathnamePrefixed.test.tsx deleted file mode 100644 index a9e0c1e55..000000000 --- a/packages/next-intl/test/client/hasPathnamePrefixed.test.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import hasPathnamePrefixed from '../../src/client/hasPathnamePrefixed'; - -it('works', () => { - expect(hasPathnamePrefixed('en', '/en')).toEqual(true); - expect(hasPathnamePrefixed('en', '/en/client')).toEqual(true); - expect(hasPathnamePrefixed('en', '/client')).toEqual(false); -}); diff --git a/packages/next-intl/test/shared/unlocalizePathname.test.tsx b/packages/next-intl/test/shared/unlocalizePathname.test.tsx deleted file mode 100644 index 38c5ef75b..000000000 --- a/packages/next-intl/test/shared/unlocalizePathname.test.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import unlocalizePathname from '../../src/shared/unlocalizePathname'; - -it('works for the root', () => { - expect(unlocalizePathname('/en', 'en')).toEqual('/'); -}); - -it('works for nested pages', () => { - expect(unlocalizePathname('/en/nested', 'en')).toEqual('/nested'); -}); - -it('works with sub-tags', () => { - expect(unlocalizePathname('/en-UK/nested', 'en-UK')).toEqual('/nested'); -}); From 46b01221a83d7f5ce08251b7de5e96ba64211860 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 15 May 2023 10:07:08 +0200 Subject: [PATCH 217/312] Add workaround to example-next-13-advanced to enable soft navigation for links where preload is set to `false` --- examples/example-next-13-advanced/src/app/layout.tsx | 12 ++++++++++++ examples/example-next-13-advanced/tests/main.spec.ts | 8 ++++---- examples/example-next-13/src/app/[locale]/layout.tsx | 9 ++++++++- 3 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 examples/example-next-13-advanced/src/app/layout.tsx diff --git a/examples/example-next-13-advanced/src/app/layout.tsx b/examples/example-next-13-advanced/src/app/layout.tsx new file mode 100644 index 000000000..b11c9e38b --- /dev/null +++ b/examples/example-next-13-advanced/src/app/layout.tsx @@ -0,0 +1,12 @@ +import {ReactNode} from 'react'; + +type Props = { + children: ReactNode; +}; + +// Even though this component is just passing its children through, the presence +// of this file fixes an issue in Next.js 13.4 where link clicks that switch +// the locale would otherwise cause a full reload. +export default function RootLayout({children}: Props) { + return children; +} diff --git a/examples/example-next-13-advanced/tests/main.spec.ts b/examples/example-next-13-advanced/tests/main.spec.ts index 5728d2ef0..12d3b9c91 100644 --- a/examples/example-next-13-advanced/tests/main.spec.ts +++ b/examples/example-next-13-advanced/tests/main.spec.ts @@ -231,7 +231,7 @@ it('uses client-side transitions when using link', async ({context, page}) => { expect(tracker.numPageLoads).toBe(1); }); -it('keeps the locale cookie updated when changing the locale and uses soft navigation when changing the locale', async ({ +it('keeps the locale cookie updated when changing the locale and uses soft navigation (no reloads)', async ({ context, page }) => { @@ -249,9 +249,9 @@ it('keeps the locale cookie updated when changing the locale and uses soft navig await expect(page).toHaveURL('/de'); await assertLocaleCookieValue(page, 'de'); - // Somehow Next.js performs a hard refresh when - // a non-preloaded route is being navigated to. - expect(tracker.numPageLoads).toBe(2); + // Currently, a root layout outside of the `[locale]` + // folder is required for this to work. + expect(tracker.numPageLoads).toBe(1); }); it('can use `Link` in client components without using a provider', async ({ diff --git a/examples/example-next-13/src/app/[locale]/layout.tsx b/examples/example-next-13/src/app/[locale]/layout.tsx index 53f3888c9..7934a0ab2 100644 --- a/examples/example-next-13/src/app/[locale]/layout.tsx +++ b/examples/example-next-13/src/app/[locale]/layout.tsx @@ -1,5 +1,6 @@ import {Inter} from '@next/font/google'; import clsx from 'clsx'; +import {notFound} from 'next/navigation'; import {useLocale} from 'next-intl'; import {getTranslations} from 'next-intl/server'; import {ReactNode} from 'react'; @@ -20,8 +21,14 @@ export async function generateMetadata() { }; } -export default async function LocaleLayout({children}: Props) { +export default async function LocaleLayout({children, params}: Props) { const locale = useLocale(); + + // Show a 404 error if the user requests an unknown locale + if (params.locale !== locale) { + notFound(); + } + return ( From fa98d0fa5f96043d826362be8011710882932884 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 15 May 2023 10:48:39 +0200 Subject: [PATCH 218/312] Improve error message for calling hooks in async components --- packages/next-intl/src/react-server/useHook.tsx | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/next-intl/src/react-server/useHook.tsx b/packages/next-intl/src/react-server/useHook.tsx index 8d0dbfa90..ce9f8efe7 100644 --- a/packages/next-intl/src/react-server/useHook.tsx +++ b/packages/next-intl/src/react-server/useHook.tsx @@ -12,15 +12,19 @@ export default function useHook( error.message.includes("Cannot read properties of null (reading 'use')") ) { throw new Error( - `\`${hookName}\` is not callable within an async component. + `\`${hookName}\` is not callable within an async component. To resolve this, you can split your component into two, leaving the async code in the first one and moving the usage of \`${hookName}\` to the second one. -You can either: +Example: -1. Split your component into two, leaving the async code in the first - one and moving the usage of \`${hookName}\` to the second one. +async function Profile() { + const user = await getUser(); + return ; +} -2. Use an awaitable version of the hook, see - https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components`, +function ProfileContent({user}) { + // Call \`${hookName}\` here and use the \`user\` prop + return ...; +}`, {cause: error} ); } else { From 4b61c06466b2e9a158a02e281c07f82e309a5deb Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 25 May 2023 14:13:47 +0200 Subject: [PATCH 219/312] feat(RSC): Add support for `redirect` in Client Components --- .../src/app/[locale]/client/redirect/page.tsx | 7 +++++++ .../example-next-13-advanced/tests/main.spec.ts | 11 ++++++++--- packages/next-intl/package.json | 5 ++++- .../next-intl/src/server/react-client/index.tsx | 16 ++++++++++++++++ .../src/server/react-client/redirect.tsx | 8 ++++++++ packages/next-intl/src/server/redirect.tsx | 7 ++----- packages/next-intl/src/shared/redirect.tsx | 7 +++++++ 7 files changed, 52 insertions(+), 9 deletions(-) create mode 100644 examples/example-next-13-advanced/src/app/[locale]/client/redirect/page.tsx create mode 100644 packages/next-intl/src/server/react-client/index.tsx create mode 100644 packages/next-intl/src/server/react-client/redirect.tsx create mode 100644 packages/next-intl/src/shared/redirect.tsx diff --git a/examples/example-next-13-advanced/src/app/[locale]/client/redirect/page.tsx b/examples/example-next-13-advanced/src/app/[locale]/client/redirect/page.tsx new file mode 100644 index 000000000..4ddee65f9 --- /dev/null +++ b/examples/example-next-13-advanced/src/app/[locale]/client/redirect/page.tsx @@ -0,0 +1,7 @@ +'use client'; + +import {redirect} from 'next-intl/server'; + +export default function ClientRedirectPage() { + redirect('/client'); +} diff --git a/examples/example-next-13-advanced/tests/main.spec.ts b/examples/example-next-13-advanced/tests/main.spec.ts index 12d3b9c91..ba6db0b29 100644 --- a/examples/example-next-13-advanced/tests/main.spec.ts +++ b/examples/example-next-13-advanced/tests/main.spec.ts @@ -360,14 +360,19 @@ it('returns the correct value from `usePathname` in the initial render', async ( ); }); -it('can use `redirect`', async ({page}) => { +it('can use `redirect` in Server Components', async ({page}) => { await page.goto('/redirect'); await expect(page).toHaveURL('/client'); - await page.goto('/redirect'); + await page.goto('/de/redirect'); + await expect(page).toHaveURL('/de/client'); +}); + +it('can use `redirect` in Client Components', async ({page}) => { + await page.goto('/client/redirect'); await expect(page).toHaveURL('/client'); - await page.goto('/de/redirect'); + await page.goto('/de/client/redirect'); await expect(page).toHaveURL('/de/client'); }); diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index fb6f25155..a2b9baff4 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -27,7 +27,10 @@ "react-server": "./dist/src/react-server/index.js", "default": "./dist/index.js" }, - "./server": "./dist/src/server/index.js", + "./server": { + "react-server": "./dist/src/server/index.js", + "default": "./dist/src/server/react-client/index.js" + }, "./client": "./dist/src/client/index.js", "./link": { "react-server": "./dist/src/link/react-server/index.js", diff --git a/packages/next-intl/src/server/react-client/index.tsx b/packages/next-intl/src/server/react-client/index.tsx new file mode 100644 index 000000000..c881bf684 --- /dev/null +++ b/packages/next-intl/src/server/react-client/index.tsx @@ -0,0 +1,16 @@ +function notSupported(name: string) { + throw new Error(`\`${name}\` is not supported in Client Components.`); +} + +export const getRequestConfig = notSupported('getRequestConfig'); +export const getIntl = notSupported('getIntl'); +export const getFormatter = notSupported('getFormatter'); +export const getLocale = notSupported('getLocale'); +export const getNow = notSupported('getNow'); +export const getTimeZone = notSupported('getTimeZone'); +export const getTranslations = notSupported('getTranslations'); + +// TODO: Since this is available in Client Comonents too, we should really +// consider exporting this from `next-intl/navigation` instead. For now, for +// compatibility, we'll add a client entry point for `next-intl/server`. +export {default as redirect} from './redirect'; diff --git a/packages/next-intl/src/server/react-client/redirect.tsx b/packages/next-intl/src/server/react-client/redirect.tsx new file mode 100644 index 000000000..f7aa069eb --- /dev/null +++ b/packages/next-intl/src/server/react-client/redirect.tsx @@ -0,0 +1,8 @@ +import useClientLocale from '../../client/useClientLocale'; +import baseRedirect from '../../shared/redirect'; + +export default function redirect(pathname: string) { + // eslint-disable-next-line react-hooks/rules-of-hooks + const locale = useClientLocale(); + return baseRedirect(pathname, locale); +} diff --git a/packages/next-intl/src/server/redirect.tsx b/packages/next-intl/src/server/redirect.tsx index e72d2a22a..6358fde83 100644 --- a/packages/next-intl/src/server/redirect.tsx +++ b/packages/next-intl/src/server/redirect.tsx @@ -1,10 +1,7 @@ -import {redirect as nextRedirect} from 'next/navigation'; -import {localizePathname} from '../shared/utils'; +import baseRedirect from '../shared/redirect'; import getLocale from './getLocale'; export default function redirect(pathname: string) { const locale = getLocale(); - const localizedPathname = localizePathname(locale, pathname); - - return nextRedirect(localizedPathname); + return baseRedirect(pathname, locale); } diff --git a/packages/next-intl/src/shared/redirect.tsx b/packages/next-intl/src/shared/redirect.tsx new file mode 100644 index 000000000..563e3627c --- /dev/null +++ b/packages/next-intl/src/shared/redirect.tsx @@ -0,0 +1,7 @@ +import {redirect as nextRedirect} from 'next/navigation'; +import {localizePathname} from '../shared/utils'; + +export default function redirect(pathname: string, locale: string) { + const localizedPathname = localizePathname(locale, pathname); + return nextRedirect(localizedPathname); +} From 2dff0b6b13c82d3f9744e956fe330bb686fc14e4 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 25 May 2023 14:42:14 +0200 Subject: [PATCH 220/312] Fix tests --- examples/example-next-13-advanced/tests/main.spec.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/example-next-13-advanced/tests/main.spec.ts b/examples/example-next-13-advanced/tests/main.spec.ts index ba6db0b29..8145b8b8c 100644 --- a/examples/example-next-13-advanced/tests/main.spec.ts +++ b/examples/example-next-13-advanced/tests/main.spec.ts @@ -491,7 +491,9 @@ it('replaces invalid cookie locales', async ({request}) => { }); expect(new URL(response.url()).pathname).toBe('/'); expect(response.status()).toBe(200); - expect(response.headers()['set-cookie']).toBe('NEXT_LOCALE=en; Path=/'); + expect(response.headers()['set-cookie']).toBe( + 'NEXT_LOCALE=en; Path=/; SameSite=strict' + ); }); it('can localize route handlers', async ({request}) => { From b4831096bf73c9557cc3ebdc460820e80519fbcb Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 25 May 2023 15:01:08 +0200 Subject: [PATCH 221/312] Disable test for now [skip ci] --- examples/example-next-13/tests/main.spec.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/example-next-13/tests/main.spec.ts b/examples/example-next-13/tests/main.spec.ts index 456449468..152ca3c66 100644 --- a/examples/example-next-13/tests/main.spec.ts +++ b/examples/example-next-13/tests/main.spec.ts @@ -24,7 +24,9 @@ it('handles not found pages', async ({page}) => { page.getByRole('heading', {name: 'Seite nicht gefunden'}); }); -it("handles not found pages for routes that don't match the middleware", async ({ +// TODO: Once we no longer retrieve the locale from a +// header, there's probably a better way to do this +it.skip("handles not found pages for routes that don't match the middleware", async ({ page }) => { await page.goto('/test.png'); From 8523dba9a0d4c1207b65e99f4f4dfc116637d0a9 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Sat, 27 May 2023 09:56:32 +0200 Subject: [PATCH 222/312] Make config passed to plugin optional --- packages/next-intl/plugin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/next-intl/plugin.js b/packages/next-intl/plugin.js index 1ce73defc..0972ebaed 100644 --- a/packages/next-intl/plugin.js +++ b/packages/next-intl/plugin.js @@ -39,7 +39,7 @@ module.exports = withNextIntl({ } } - if (nextConfig.i18n != null) { + if (nextConfig?.i18n != null) { console.warn( "\nnext-intl has found an `i18n` config in your next.config.js. This likely causes conflicts and should therefore be removed if you use the React Server Components integration.\n\nIf you're in progress of migrating from the `pages` folder, you can refer to this example: https://github.com/amannn/next-intl/tree/feat/next-13-rsc/packages/example-next-13-with-pages\n" ); From 017fd9341709940d31a4a0f30b6855cabd4a66a2 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Sat, 27 May 2023 10:18:37 +0200 Subject: [PATCH 223/312] feat(RSC): Add CDN caching patch (#311) --- .../example-next-13-advanced/next.config.js | 23 ----------- package.json | 5 +++ patches/next@13.4.0.patch | 22 +++++++++++ pnpm-lock.yaml | 38 +++++++++++-------- 4 files changed, 49 insertions(+), 39 deletions(-) create mode 100644 patches/next@13.4.0.patch diff --git a/examples/example-next-13-advanced/next.config.js b/examples/example-next-13-advanced/next.config.js index c3dc46ecf..2e08e4cf8 100644 --- a/examples/example-next-13-advanced/next.config.js +++ b/examples/example-next-13-advanced/next.config.js @@ -1,4 +1,3 @@ -const ms = require('ms'); const withNextIntl = require('next-intl/plugin')(); module.exports = withNextIntl({ @@ -14,27 +13,5 @@ module.exports = withNextIntl({ destination: '/es/nested' } ]; - }, - headers() { - return [ - { - source: '/((?!_next|.*\\..*).*)', - missing: [ - { - type: 'header', - key: 'Next-Router-Prefetch' - } - ], - headers: [ - { - key: 'Cache-Control', - value: [ - `s-maxage=` + ms('1d') / 1000, - `stale-while-revalidate=` + ms('1y') / 1000 - ].join(', ') - } - ] - } - ]; } }); diff --git a/package.json b/package.json index 0d70cdf49..c49f38eff 100644 --- a/package.json +++ b/package.json @@ -11,5 +11,10 @@ "devDependencies": { "lerna": "^6.6.2", "turbo": "^1.9.3" + }, + "pnpm": { + "patchedDependencies": { + "next@13.4.0": "patches/next@13.4.0.patch" + } } } diff --git a/patches/next@13.4.0.patch b/patches/next@13.4.0.patch new file mode 100644 index 000000000..977cf2f9f --- /dev/null +++ b/patches/next@13.4.0.patch @@ -0,0 +1,22 @@ +diff --git a/dist/server/send-payload/revalidate-headers.js b/dist/server/send-payload/revalidate-headers.js +index eae390d4927601057e38e95d6cda615342e9674e..b83df25eebfee4db68049f8bdf267dd0cd22dd2c 100644 +--- a/dist/server/send-payload/revalidate-headers.js ++++ b/dist/server/send-payload/revalidate-headers.js +@@ -10,9 +10,14 @@ Object.defineProperty(exports, "setRevalidateHeaders", { + }); + function setRevalidateHeaders(res, options) { + if (options.private || options.stateful) { +- if (options.private || !res.getHeader("Cache-Control")) { +- res.setHeader("Cache-Control", `private, no-cache, no-store, max-age=0, must-revalidate`); +- } ++ if (options.private) { ++ res.setHeader("Cache-Control", `private, no-cache, no-store, max-age=0, must-revalidate`); ++ } else { ++ // IMPORTANT: This matches all content routes and applies the same caching ++ // headers (10min CDN caching with infinite stale-while-revalidate). ++ // You can also use res.req.url to match specific routes. ++ res.setHeader('Cache-Control', 'public, s-maxage=600, stale-while-revalidate=31557600'); ++ } + } else if (typeof options.revalidate === "number") { + if (options.revalidate < 1) { + throw new Error(`invariant: invalid Cache-Control duration provided: ${options.revalidate} < 1`); \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b85ebe283..03b1772d4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,5 +1,10 @@ lockfileVersion: '6.0' +patchedDependencies: + next@13.4.0: + hash: ceekt4asq35k5dc332e6jnmrkm + path: patches/next@13.4.0.patch + importers: .: @@ -33,7 +38,7 @@ importers: version: 2.2.0 next: specifier: ^13.4.0 - version: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) nextra: specifier: ^2.4.2 version: 2.4.2(next@13.4.0)(react-dom@18.2.0)(react@18.2.0) @@ -79,7 +84,7 @@ importers: version: 2.16.1 next: specifier: ^13.4.0 - version: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) next-intl: specifier: ^2.14.3 version: link:../../packages/next-intl @@ -122,7 +127,7 @@ importers: version: 4.17.21 next: specifier: ^13.4.0 - version: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) next-intl: specifier: ^2.14.3 version: link:../../packages/next-intl @@ -177,7 +182,7 @@ importers: version: 1.2.1 next: specifier: ^13.4.0 - version: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) next-intl: specifier: ^2.14.3 version: link:../../packages/next-intl @@ -235,7 +240,7 @@ importers: version: 2.1.3 next: specifier: ^13.4.0 - version: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) next-intl: specifier: ^2.13.2 version: link:../../packages/next-intl @@ -278,7 +283,7 @@ importers: dependencies: next: specifier: ^13.4.0 - version: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) next-intl: specifier: ^2.13.2 version: link:../../packages/next-intl @@ -321,7 +326,7 @@ importers: dependencies: next: specifier: ^13.4.0 - version: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) next-auth: specifier: ^4.22.1 version: 4.22.1(next@13.4.0)(react-dom@18.2.0)(react@18.2.0) @@ -364,7 +369,7 @@ importers: dependencies: next: specifier: ^13.4.0 - version: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) next-intl: specifier: ^2.13.2 version: link:../../packages/next-intl @@ -518,7 +523,7 @@ importers: version: 1.4.1(eslint@8.39.0)(typescript@4.9.5) next: specifier: ^13.4.0 - version: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) react: specifier: ^18.2.0 version: 18.2.0 @@ -15531,7 +15536,7 @@ packages: '@panva/hkdf': 1.1.1 cookie: 0.5.0 jose: 4.14.4 - next: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + next: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) oauth: 0.9.15 openid-client: 5.4.2 preact: 10.13.2 @@ -15565,7 +15570,7 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - next: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + next: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -15581,7 +15586,7 @@ packages: '@corex/deepmerge': 4.0.43 '@next/env': 13.4.0 minimist: 1.2.8 - next: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + next: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) dev: true /next-themes@0.2.1(next@13.4.0)(react-dom@18.2.0)(react@18.2.0): @@ -15591,12 +15596,12 @@ packages: react: '*' react-dom: '*' dependencies: - next: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + next: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /next@13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0): + /next@13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-y3E+2ZjiVrphkz7zcJvd2rEG6miOekI8krPfWV4AZZ9TaF0LDuFdP/f+RQ5M9wRvsz6GWw8k8+7jsO860GxSqg==} engines: {node: '>=16.8.0'} hasBin: true @@ -15639,6 +15644,7 @@ packages: transitivePeerDependencies: - '@babel/core' - babel-plugin-macros + patched: true /nextra-theme-docs@2.4.2(next@13.4.0)(nextra@2.4.2)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-5H6NJ38TlbgetNx9HjMmQcNpsp6GFH26TfjLVC0RWxhEPuoutSFpJ8RjWKXv6WEaWaL500CoErW0/DeXzuQGUg==} @@ -15656,7 +15662,7 @@ packages: git-url-parse: 13.1.0 intersection-observer: 0.12.2 match-sorter: 6.3.1 - next: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + next: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) next-seo: 6.0.0(next@13.4.0)(react-dom@18.2.0)(react@18.2.0) next-themes: 0.2.1(next@13.4.0)(react-dom@18.2.0)(react@18.2.0) nextra: 2.4.2(next@13.4.0)(react-dom@18.2.0)(react@18.2.0) @@ -15682,7 +15688,7 @@ packages: gray-matter: 4.0.3 katex: 0.16.7 lodash.get: 4.4.2 - next: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + next: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) next-mdx-remote: 4.4.1(react-dom@18.2.0)(react@18.2.0) p-limit: 3.1.0 react: 18.2.0 From 04bd7bd6831ba7e9c62f56e48efd9f7c2db6febe Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Sat, 27 May 2023 10:50:04 +0200 Subject: [PATCH 224/312] Move patch --- .../example-next-13-advanced/package.json | 5 + examples/example-next-13/package.json | 5 + package.json | 5 - pnpm-lock.yaml | 4379 +++++++++++------ 4 files changed, 2985 insertions(+), 1409 deletions(-) diff --git a/examples/example-next-13-advanced/package.json b/examples/example-next-13-advanced/package.json index 0be4f3aa9..83a1418b2 100644 --- a/examples/example-next-13-advanced/package.json +++ b/examples/example-next-13-advanced/package.json @@ -28,5 +28,10 @@ "eslint-config-molindo": "^6.0.0", "eslint-config-next": "^13.4.0", "typescript": "^4.6.3" + }, + "pnpm": { + "patchedDependencies": { + "next@13.4.0": "patches/next@13.4.0.patch" + } } } diff --git a/examples/example-next-13/package.json b/examples/example-next-13/package.json index fa46e663f..ad04f73d5 100644 --- a/examples/example-next-13/package.json +++ b/examples/example-next-13/package.json @@ -30,5 +30,10 @@ "postcss": "^8.4.23", "prettier-plugin-tailwindcss": "^0.2.3", "typescript": "^4.6.3" + }, + "pnpm": { + "patchedDependencies": { + "next@13.4.0": "patches/next@13.4.0.patch" + } } } diff --git a/package.json b/package.json index c49f38eff..0d70cdf49 100644 --- a/package.json +++ b/package.json @@ -11,10 +11,5 @@ "devDependencies": { "lerna": "^6.6.2", "turbo": "^1.9.3" - }, - "pnpm": { - "patchedDependencies": { - "next@13.4.0": "patches/next@13.4.0.patch" - } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dca920cd4..84c3dcf07 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,10 +1,5 @@ lockfileVersion: '6.0' -patchedDependencies: - next@13.4.0: - hash: ceekt4asq35k5dc332e6jnmrkm - path: patches/next@13.4.0.patch - importers: .: @@ -35,7 +30,7 @@ importers: version: 2.2.0 next: specifier: ^13.4.0 - version: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.0(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0) nextra: specifier: ^2.4.2 version: 2.4.2(next@13.4.0)(react-dom@18.2.0)(react@18.2.0) @@ -63,13 +58,13 @@ importers: version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0)(jest@29.5.0) + version: 6.0.0(eslint@8.39.0)(jest@27.5.1) eslint-config-next: specifier: ^13.4.0 - version: 13.4.0(eslint@8.39.0)(typescript@4.9.5) + version: 13.4.0(eslint@8.39.0)(typescript@4.6.3) next-sitemap: specifier: ^4.0.7 - version: 4.0.7(@next/env@13.4.0)(next@13.4.0) + version: 4.0.7(@next/env@13.4.4)(next@13.4.0) prettier-plugin-tailwindcss: specifier: ^0.2.3 version: 0.2.3(prettier@2.8.8) @@ -81,7 +76,7 @@ importers: version: 2.16.1 next: specifier: ^13.4.0 - version: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.0(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0) next-intl: specifier: ^2.14.3 version: link:../../packages/next-intl @@ -106,13 +101,13 @@ importers: version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0)(jest@29.5.0) + version: 6.0.0(eslint@8.39.0)(jest@27.5.1) eslint-config-next: specifier: ^13.4.0 - version: 13.4.0(eslint@8.39.0)(typescript@4.9.5) + version: 13.4.0(eslint@8.39.0)(typescript@4.6.3) typescript: specifier: ^4.6.3 - version: 4.9.5 + version: 4.6.3 examples/example-advanced: dependencies: @@ -124,7 +119,7 @@ importers: version: 4.17.21 next: specifier: ^13.4.0 - version: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.0(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0) next-intl: specifier: ^2.14.3 version: link:../../packages/next-intl @@ -158,16 +153,16 @@ importers: version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0)(jest@27.5.1) + version: 6.0.0(eslint@8.39.0)(jest@27.4.5) eslint-config-next: specifier: ^13.4.0 - version: 13.4.0(eslint@8.39.0)(typescript@4.9.5) + version: 13.4.0(eslint@8.39.0)(typescript@4.6.3) jest: specifier: ^27.4.5 - version: 27.5.1(ts-node@10.9.1) + version: 27.4.5 typescript: specifier: ^4.6.3 - version: 4.9.5 + version: 4.6.3 examples/example-next-13: dependencies: @@ -179,7 +174,7 @@ importers: version: 1.2.1 next: specifier: ^13.4.0 - version: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.0(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0) next-intl: specifier: ^2.14.3 version: link:../../packages/next-intl @@ -213,10 +208,10 @@ importers: version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0)(jest@29.5.0) + version: 6.0.0(eslint@8.39.0)(jest@27.5.1) eslint-config-next: specifier: ^13.4.0 - version: 13.4.0(eslint@8.39.0)(typescript@4.9.5) + version: 13.4.0(eslint@8.39.0)(typescript@4.6.3) postcss: specifier: ^8.4.23 version: 8.4.23 @@ -225,7 +220,7 @@ importers: version: 0.2.3(prettier@2.8.8) typescript: specifier: ^4.6.3 - version: 4.9.5 + version: 4.6.3 examples/example-next-13-advanced: dependencies: @@ -237,7 +232,7 @@ importers: version: 2.1.3 next: specifier: ^13.4.0 - version: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.0(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0) next-intl: specifier: ^2.13.2 version: link:../../packages/next-intl @@ -268,19 +263,19 @@ importers: version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0)(jest@29.5.0) + version: 6.0.0(eslint@8.39.0)(jest@27.5.1) eslint-config-next: specifier: ^13.4.0 - version: 13.4.0(eslint@8.39.0)(typescript@4.9.5) + version: 13.4.0(eslint@8.39.0)(typescript@4.6.3) typescript: specifier: ^4.6.3 - version: 4.9.5 + version: 4.6.3 examples/example-next-13-named-routes: dependencies: next: specifier: ^13.4.0 - version: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.0(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0) next-intl: specifier: ^2.13.2 version: link:../../packages/next-intl @@ -311,19 +306,19 @@ importers: version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0)(jest@29.5.0) + version: 6.0.0(eslint@8.39.0)(jest@27.5.1) eslint-config-next: specifier: ^13.4.0 - version: 13.4.0(eslint@8.39.0)(typescript@4.9.5) + version: 13.4.0(eslint@8.39.0)(typescript@4.6.3) typescript: specifier: ^4.6.3 - version: 4.9.5 + version: 4.6.3 examples/example-next-13-next-auth: dependencies: next: specifier: ^13.4.0 - version: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.0(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0) next-auth: specifier: ^4.22.1 version: 4.22.1(next@13.4.0)(react-dom@18.2.0)(react@18.2.0) @@ -354,19 +349,19 @@ importers: version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0)(jest@29.5.0) + version: 6.0.0(eslint@8.39.0)(jest@27.5.1) eslint-config-next: specifier: ^13.4.0 - version: 13.4.0(eslint@8.39.0)(typescript@4.9.5) + version: 13.4.0(eslint@8.39.0)(typescript@4.6.3) typescript: specifier: ^4.6.3 - version: 4.9.5 + version: 4.6.3 examples/example-next-13-with-pages: dependencies: next: specifier: ^13.4.0 - version: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.0(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0) next-intl: specifier: ^2.13.2 version: link:../../packages/next-intl @@ -391,22 +386,22 @@ importers: version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0)(jest@29.5.0) + version: 6.0.0(eslint@8.39.0)(jest@27.5.1) eslint-config-next: specifier: ^13.4.0 - version: 13.4.0(eslint@8.39.0)(typescript@4.9.5) + version: 13.4.0(eslint@8.39.0)(typescript@4.6.3) typescript: specifier: ^4.6.3 - version: 4.9.5 + version: 4.6.3 examples/example-react-native: dependencies: '@expo/webpack-config': specifier: ^0.17.2 - version: 0.17.2(expo@47.0.12)(typescript@4.9.5) + version: 0.17.2(expo@47.0.12)(typescript@4.6.3) expo: specifier: ~47.0.12 - version: 47.0.12(@babel/core@7.21.8) + version: 47.0.12(@babel/core@7.12.9) expo-status-bar: specifier: ~1.4.2 version: 1.4.2 @@ -418,7 +413,7 @@ importers: version: 18.1.0(react@18.1.0) react-native: specifier: ^0.70.5 - version: 0.70.5(@babel/core@7.21.8)(@babel/preset-env@7.21.5)(react@18.1.0) + version: 0.70.5(@babel/core@7.12.9)(@babel/preset-env@7.22.2)(react@18.1.0) react-native-web: specifier: ~0.18.9 version: 0.18.9(react-dom@18.1.0)(react@18.1.0) @@ -428,7 +423,7 @@ importers: devDependencies: '@babel/core': specifier: ^7.12.9 - version: 7.21.8 + version: 7.12.9 examples/example-remix: dependencies: @@ -465,16 +460,16 @@ importers: version: 18.2.5 '@types/react-dom': specifier: ^18.2.1 - version: 18.2.2 + version: 18.2.1 eslint: specifier: ^8.39.0 version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0)(jest@29.5.0) + version: 6.0.0(eslint@8.39.0)(jest@27.5.1) typescript: specifier: ^4.6.3 - version: 4.9.5 + version: 4.6.3 packages/next-intl: dependencies: @@ -508,7 +503,7 @@ importers: version: 18.2.5 dts-cli: specifier: ^1.4.0 - version: 1.4.0(@babel/plugin-syntax-flow@7.21.4)(@babel/plugin-transform-react-jsx@7.21.5)(@types/node@17.0.23) + version: 1.4.0(@babel/plugin-syntax-flow@7.21.4)(@babel/plugin-transform-react-jsx@7.22.0)(@types/node@17.0.23) eslint: specifier: ^8.39.0 version: 8.39.0 @@ -517,10 +512,10 @@ importers: version: 6.0.0(eslint@8.39.0)(jest@29.5.0) eslint-plugin-deprecation: specifier: ^1.4.1 - version: 1.4.1(eslint@8.39.0)(typescript@4.9.5) + version: 1.4.1(eslint@8.39.0)(typescript@4.6.3) next: specifier: ^13.4.0 - version: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.0(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0) react: specifier: ^18.2.0 version: 18.2.0 @@ -529,10 +524,10 @@ importers: version: 18.2.0(react@18.2.0) ts-jest: specifier: ^29.1.0 - version: 29.1.0(@babel/core@7.21.8)(jest@29.5.0)(typescript@4.9.5) + version: 29.1.0(@babel/core@7.12.9)(jest@29.5.0)(typescript@4.6.3) typescript: specifier: ^4.6.3 - version: 4.9.5 + version: 4.6.3 packages/use-intl: dependencies: @@ -560,7 +555,7 @@ importers: version: 2.16.1 dts-cli: specifier: ^1.4.0 - version: 1.4.0(@babel/plugin-syntax-flow@7.21.4)(@babel/plugin-transform-react-jsx@7.21.5)(@types/node@17.0.23) + version: 1.4.0(@babel/plugin-syntax-flow@7.21.4)(@babel/plugin-transform-react-jsx@7.22.0)(@types/node@17.0.23) eslint: specifier: ^8.39.0 version: 8.39.0 @@ -578,7 +573,7 @@ importers: version: 2.3.1 typescript: specifier: ^4.6.3 - version: 4.9.5 + version: 4.6.3 packages: @@ -601,24 +596,47 @@ packages: dependencies: '@babel/highlight': 7.18.6 - /@babel/compat-data@7.21.7: - resolution: {integrity: sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==} + /@babel/compat-data@7.22.0: + resolution: {integrity: sha512-OgCMbbNCD/iA8cjMt+Zhp+nIC7XKaEaTG8zjvZPjGbhkppq1NIMWiZn7EaZRxUDHn4Ul265scRqg94N2WiFaGw==} + engines: {node: '>=6.9.0'} + + /@babel/core@7.12.9: + resolution: {integrity: sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.21.4 + '@babel/generator': 7.22.0 + '@babel/helper-module-transforms': 7.22.1 + '@babel/helpers': 7.22.0 + '@babel/parser': 7.22.0 + '@babel/template': 7.21.9 + '@babel/traverse': 7.22.1 + '@babel/types': 7.22.0 + convert-source-map: 1.9.0 + debug: 4.3.4(supports-color@6.1.0) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + lodash: 4.17.21 + resolve: 1.22.2 + semver: 5.7.1 + source-map: 0.5.7 + transitivePeerDependencies: + - supports-color - /@babel/core@7.21.8: - resolution: {integrity: sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==} + /@babel/core@7.22.1: + resolution: {integrity: sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.21.4 - '@babel/generator': 7.21.5 - '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) - '@babel/helper-module-transforms': 7.21.5 - '@babel/helpers': 7.21.5 - '@babel/parser': 7.21.8 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 + '@babel/generator': 7.22.0 + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.22.1) + '@babel/helper-module-transforms': 7.22.1 + '@babel/helpers': 7.22.0 + '@babel/parser': 7.22.0 + '@babel/template': 7.21.9 + '@babel/traverse': 7.22.1 + '@babel/types': 7.22.0 convert-source-map: 1.9.0 debug: 4.3.4(supports-color@6.1.0) gensync: 1.0.0-beta.2 @@ -632,13 +650,13 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.21.4 - '@babel/generator': 7.21.5 - '@babel/helper-module-transforms': 7.21.5 - '@babel/helpers': 7.21.5 - '@babel/parser': 7.21.8 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 + '@babel/generator': 7.22.0 + '@babel/helper-module-transforms': 7.22.1 + '@babel/helpers': 7.22.0 + '@babel/parser': 7.22.0 + '@babel/template': 7.21.9 + '@babel/traverse': 7.22.1 + '@babel/types': 7.22.0 convert-source-map: 1.9.0 debug: 4.3.4(supports-color@6.1.0) gensync: 1.0.0-beta.2 @@ -651,11 +669,11 @@ packages: - supports-color dev: false - /@babel/generator@7.21.5: - resolution: {integrity: sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==} + /@babel/generator@7.22.0: + resolution: {integrity: sha512-tyzR0OsH88AelgukhL2rbEUCLKBGmy2G9Th/5vpyOt0zf44Be61kvIQXjCwTSX8t+qJ/vMwZfhK6mPdrMLZXRg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.0 '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 jsesc: 2.5.2 @@ -664,64 +682,142 @@ packages: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.0 - /@babel/helper-builder-binary-assignment-operator-visitor@7.21.5: - resolution: {integrity: sha512-uNrjKztPLkUk7bpCNC0jEKDJzzkvel/W+HguzbN8krA+LPfC1CEobJEvAvGka2A/M+ViOqXdcRL0GqPUJSjx9g==} + /@babel/helper-builder-binary-assignment-operator-visitor@7.22.0: + resolution: {integrity: sha512-65sHfBfgwY7VAzJscbxFoNSdqWul2+dMfSPihzmTKRd3QEKdcGmWEy7qRaVzMYsH7oJ91UIGFIAzW3xg7ER13w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.0 - /@babel/helper-compilation-targets@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==} + /@babel/helper-compilation-targets@7.22.1(@babel/core@7.12.9): + resolution: {integrity: sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.21.7 - '@babel/core': 7.21.8 + '@babel/compat-data': 7.22.0 + '@babel/core': 7.12.9 '@babel/helper-validator-option': 7.21.0 browserslist: 4.21.5 lru-cache: 5.1.1 semver: 6.3.0 + dev: false + + /@babel/helper-compilation-targets@7.22.1(@babel/core@7.22.1): + resolution: {integrity: sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.22.0 + '@babel/core': 7.22.1 + '@babel/helper-validator-option': 7.21.0 + browserslist: 4.21.5 + lru-cache: 5.1.1 + semver: 6.3.0 + + /@babel/helper-create-class-features-plugin@7.22.1(@babel/core@7.12.9): + resolution: {integrity: sha512-SowrZ9BWzYFgzUMwUmowbPSGu6CXL5MSuuCkG3bejahSpSymioPmuLdhPxNOc9MjuNGjy7M/HaXvJ8G82Lywlw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-environment-visitor': 7.22.1 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-member-expression-to-functions': 7.22.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-replace-supers': 7.22.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-split-export-declaration': 7.18.6 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false - /@babel/helper-create-class-features-plugin@7.21.8(@babel/core@7.21.8): - resolution: {integrity: sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw==} + /@babel/helper-create-class-features-plugin@7.22.1(@babel/core@7.22.1): + resolution: {integrity: sha512-SowrZ9BWzYFgzUMwUmowbPSGu6CXL5MSuuCkG3bejahSpSymioPmuLdhPxNOc9MjuNGjy7M/HaXvJ8G82Lywlw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.21.5 + '@babel/helper-environment-visitor': 7.22.1 '@babel/helper-function-name': 7.21.0 - '@babel/helper-member-expression-to-functions': 7.21.5 + '@babel/helper-member-expression-to-functions': 7.22.0 '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-replace-supers': 7.21.5 + '@babel/helper-replace-supers': 7.22.1 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 '@babel/helper-split-export-declaration': 7.18.6 semver: 6.3.0 transitivePeerDependencies: - supports-color - /@babel/helper-create-regexp-features-plugin@7.21.8(@babel/core@7.21.8): - resolution: {integrity: sha512-zGuSdedkFtsFHGbexAvNuipg1hbtitDLo2XE8/uf6Y9sOQV1xsYX/2pNbtedp/X0eU1pIt+kGvaqHCowkRbS5g==} + /@babel/helper-create-regexp-features-plugin@7.22.1(@babel/core@7.12.9): + resolution: {integrity: sha512-WWjdnfR3LPIe+0EY8td7WmjhytxXtjKAEpnAxun/hkNiyOaPlvGK+NZaBFIdi9ndYV3Gav7BpFvtUwnaJlwi1w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-annotate-as-pure': 7.18.6 + regexpu-core: 5.3.2 + semver: 6.3.0 + dev: false + + /@babel/helper-create-regexp-features-plugin@7.22.1(@babel/core@7.22.1): + resolution: {integrity: sha512-WWjdnfR3LPIe+0EY8td7WmjhytxXtjKAEpnAxun/hkNiyOaPlvGK+NZaBFIdi9ndYV3Gav7BpFvtUwnaJlwi1w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-annotate-as-pure': 7.18.6 regexpu-core: 5.3.2 semver: 6.3.0 - /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.21.8): + /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.22.1): resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) + '@babel/core': 7.22.1 + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.22.1) + '@babel/helper-plugin-utils': 7.21.5 + debug: 4.3.4(supports-color@6.1.0) + lodash.debounce: 4.0.8 + resolve: 1.22.2 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-define-polyfill-provider@0.4.0(@babel/core@7.12.9): + resolution: {integrity: sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==} + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.12.9) + '@babel/helper-plugin-utils': 7.21.5 + debug: 4.3.4(supports-color@6.1.0) + lodash.debounce: 4.0.8 + resolve: 1.22.2 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helper-define-polyfill-provider@0.4.0(@babel/core@7.22.1): + resolution: {integrity: sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==} + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.22.1) '@babel/helper-plugin-utils': 7.21.5 debug: 4.3.4(supports-color@6.1.0) lodash.debounce: 4.0.8 @@ -730,47 +826,47 @@ packages: transitivePeerDependencies: - supports-color - /@babel/helper-environment-visitor@7.21.5: - resolution: {integrity: sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==} + /@babel/helper-environment-visitor@7.22.1: + resolution: {integrity: sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==} engines: {node: '>=6.9.0'} /@babel/helper-function-name@7.21.0: resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.20.7 - '@babel/types': 7.21.5 + '@babel/template': 7.21.9 + '@babel/types': 7.22.0 /@babel/helper-hoist-variables@7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.0 - /@babel/helper-member-expression-to-functions@7.21.5: - resolution: {integrity: sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg==} + /@babel/helper-member-expression-to-functions@7.22.0: + resolution: {integrity: sha512-nf2NhMw5E6vzxvUOPeqHnNxcCyTe7r8MJYIWzLaMosohfQTk6F2jepzprj4ux8ez0yTPjDyrDeboItaylgdaiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.0 /@babel/helper-module-imports@7.21.4: resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.0 - /@babel/helper-module-transforms@7.21.5: - resolution: {integrity: sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==} + /@babel/helper-module-transforms@7.22.1: + resolution: {integrity: sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-environment-visitor': 7.21.5 + '@babel/helper-environment-visitor': 7.22.1 '@babel/helper-module-imports': 7.21.4 '@babel/helper-simple-access': 7.21.5 '@babel/helper-split-export-declaration': 7.18.6 '@babel/helper-validator-identifier': 7.19.1 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 + '@babel/template': 7.21.9 + '@babel/traverse': 7.22.1 + '@babel/types': 7.22.0 transitivePeerDependencies: - supports-color @@ -778,36 +874,51 @@ packages: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.0 /@babel/helper-plugin-utils@7.21.5: resolution: {integrity: sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==} engines: {node: '>=6.9.0'} - /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.21.8): + /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.12.9): + resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-environment-visitor': 7.22.1 + '@babel/helper-wrap-function': 7.20.5 + '@babel/types': 7.22.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.22.1): resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.21.5 + '@babel/helper-environment-visitor': 7.22.1 '@babel/helper-wrap-function': 7.20.5 - '@babel/types': 7.21.5 + '@babel/types': 7.22.0 transitivePeerDependencies: - supports-color - /@babel/helper-replace-supers@7.21.5: - resolution: {integrity: sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg==} + /@babel/helper-replace-supers@7.22.1: + resolution: {integrity: sha512-ut4qrkE4AuSfrwHSps51ekR1ZY/ygrP1tp0WFm8oVq6nzc/hvfV/22JylndIbsf2U2M9LOMwiSddr6y+78j+OQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-environment-visitor': 7.21.5 - '@babel/helper-member-expression-to-functions': 7.21.5 + '@babel/helper-environment-visitor': 7.22.1 + '@babel/helper-member-expression-to-functions': 7.22.0 '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 + '@babel/template': 7.21.9 + '@babel/traverse': 7.22.1 + '@babel/types': 7.22.0 transitivePeerDependencies: - supports-color @@ -815,19 +926,19 @@ packages: resolution: {integrity: sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.0 /@babel/helper-skip-transparent-expression-wrappers@7.20.0: resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.0 /@babel/helper-split-export-declaration@7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.0 /@babel/helper-string-parser@7.21.5: resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==} @@ -846,19 +957,19 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-function-name': 7.21.0 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 + '@babel/template': 7.21.9 + '@babel/traverse': 7.22.1 + '@babel/types': 7.22.0 transitivePeerDependencies: - supports-color - /@babel/helpers@7.21.5: - resolution: {integrity: sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==} + /@babel/helpers@7.22.0: + resolution: {integrity: sha512-I/hZCYErxdjuUnJpJxHmCESB3AdcOAFjj+K6+of9JyWBeAhggR9NQoUHI481pRNH87cx77mbpx0cygzXlvGayA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 + '@babel/template': 7.21.9 + '@babel/traverse': 7.22.1 + '@babel/types': 7.22.0 transitivePeerDependencies: - supports-color @@ -870,963 +981,2216 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser@7.21.8: - resolution: {integrity: sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==} + /@babel/parser@7.22.0: + resolution: {integrity: sha512-DA65VCJRetcFmJnt9/hEmRvXNCwk0V86dxG6p6N13hzDazaLRjGdTGPGgjxZOtLuFgWzOSRX4grybmRXwQ9bSg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.0 + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.12.9): + resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + dev: false - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.21.8): + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.22.1): resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-THA2q9FkS/RVTqWt0IXNns3zyHc8kzfiDEK9+vkIYGMlyaV6i6O3IpOg/oODSKqtRqu7gzwONjIJqwPlRQT41A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/plugin-transform-optional-chaining': 7.22.0(@babel/core@7.12.9) + dev: false - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.21.8): - resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-THA2q9FkS/RVTqWt0IXNns3zyHc8kzfiDEK9+vkIYGMlyaV6i6O3IpOg/oODSKqtRqu7gzwONjIJqwPlRQT41A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.8) + '@babel/plugin-transform-optional-chaining': 7.22.0(@babel/core@7.22.1) + dev: true + + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.12.9): + resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-environment-visitor': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.12.9) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.12.9) + transitivePeerDependencies: + - supports-color + dev: false - /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.21.8): + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.22.1): resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-environment-visitor': 7.21.5 + '@babel/core': 7.22.1 + '@babel/helper-environment-visitor': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.8) + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.22.1) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.1) transitivePeerDependencies: - supports-color + dev: false - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.21.8): + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.12.9): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-class-features-plugin': 7.21.8(@babel/core@7.21.8) + '@babel/core': 7.12.9 + '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.21.5 transitivePeerDependencies: - supports-color + dev: false - /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.21.8): - resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.1): + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.12.0 + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-class-features-plugin': 7.21.8(@babel/core@7.21.8) + '@babel/core': 7.22.1 + '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.22.1) '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.8) transitivePeerDependencies: - supports-color - /@babel/plugin-proposal-decorators@7.21.0(@babel/core@7.21.8): - resolution: {integrity: sha512-MfgX49uRrFUTL/HvWtmx3zmpyzMMr4MTj3d527MLlr/4RTT9G/ytFFP7qet2uM2Ve03b+BkpWUpK+lRXnQ+v9w==} + /@babel/plugin-proposal-decorators@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-LPmF3WrlMtI1xeccz9+ea0obboOxABDCd694sks+zysz5mYe8/4x35nu0xNyjDHdWH3dAjGhPZeUNOabg2824g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-class-features-plugin': 7.21.8(@babel/core@7.21.8) + '@babel/core': 7.12.9 + '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-replace-supers': 7.21.5 + '@babel/helper-replace-supers': 7.22.1 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/plugin-syntax-decorators': 7.21.0(@babel/core@7.21.8) + '@babel/plugin-syntax-decorators': 7.22.0(@babel/core@7.12.9) transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} + /@babel/plugin-proposal-export-default-from@7.18.10(@babel/core@7.12.9): + resolution: {integrity: sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-export-default-from': 7.18.6(@babel/core@7.12.9) + dev: false - /@babel/plugin-proposal-export-default-from@7.18.10(@babel/core@7.21.8): + /@babel/plugin-proposal-export-default-from@7.18.10(@babel/core@7.22.1): resolution: {integrity: sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-export-default-from': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-syntax-export-default-from': 7.18.6(@babel/core@7.22.1) dev: false - /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.12.9): + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.12.9) + dev: false - /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.22.1): + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.1) + dev: false - /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.21.8): - resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.12.9): + resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/compat-data': 7.22.0 + '@babel/core': 7.12.9 + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.8) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.9) + '@babel/plugin-transform-parameters': 7.22.0(@babel/core@7.12.9) + dev: false - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.22.1): + resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/compat-data': 7.22.0 + '@babel/core': 7.22.1 + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.22.1) '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.1) + '@babel/plugin-transform-parameters': 7.22.0(@babel/core@7.22.1) + dev: false - /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.12.9): + resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.8) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.12.9) + dev: false - /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.21.8): - resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} + /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.22.1): + resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.7 - '@babel/core': 7.21.8 - '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.8) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.1) + dev: false - /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.12.9): + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.8) + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.12.9) + dev: false - /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.21.8): + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.22.1): resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.1) + dev: false - /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + /@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.12.9): + resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-class-features-plugin': 7.21.8(@babel/core@7.21.8) + '@babel/core': 7.12.9 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.12.9) transitivePeerDependencies: - supports-color + dev: false - /@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.21.8): + /@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.22.1): resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.8(@babel/core@7.21.8) + '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.22.1) '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.8) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.1) transitivePeerDependencies: - supports-color + dev: true - /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.21.8): + /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.12.9): resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-regexp-features-plugin': 7.21.8(@babel/core@7.21.8) + '@babel/core': 7.12.9 + '@babel/helper-create-regexp-features-plugin': 7.22.1(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.21.5 + dev: false - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.8): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.22.1): + resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} + engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 + '@babel/helper-create-regexp-features-plugin': 7.22.1(@babel/core@7.22.1) '@babel/helper-plugin-utils': 7.21.5 + dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.21.8): - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.12.9): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 - dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.8): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.1): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.21.8): - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.12.9): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 + dev: true - /@babel/plugin-syntax-decorators@7.21.0(@babel/core@7.21.8): - resolution: {integrity: sha512-tIoPpGBR8UuM4++ccWN3gifhVvQu7ZizuR1fklhRJrd5ewgbkUS+0KVFeWWxELtn18NTLoW32XV7zyOgIAiz+w==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.12.9): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 - dev: false - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.8): - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.1): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 - /@babel/plugin-syntax-export-default-from@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==} + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.12.9): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 dev: false - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.21.8): - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.1): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 + dev: true - /@babel/plugin-syntax-flow@7.21.4(@babel/core@7.21.8): - resolution: {integrity: sha512-l9xd3N+XG4fZRxEP3vXdK6RW7vN1Uf5dxzRC/09wV86wqZ/YYQooBIGNsiRdfNR3/q2/5pPzV4B54J/9ctX5jw==} + /@babel/plugin-syntax-decorators@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-INacrp45TWS9xd+Rg2DRcihgYYRuhWNyBIILH3uxyF09rd/zdgO0Qlftl7+IHxEjHHQIzYgQE5FdyVPA1B681Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 + dev: false - /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.21.8): - resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.12.9): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 + dev: false - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.21.8): - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.1): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.8): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + /@babel/plugin-syntax-export-default-from@7.18.6(@babel/core@7.12.9): + resolution: {integrity: sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 + dev: false - /@babel/plugin-syntax-jsx@7.21.4(@babel/core@7.21.8): - resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} + /@babel/plugin-syntax-export-default-from@7.18.6(@babel/core@7.22.1): + resolution: {integrity: sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 + dev: false - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.8): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.12.9): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 + dev: false - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.8): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.1): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 + dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.8): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + /@babel/plugin-syntax-flow@7.21.4(@babel/core@7.12.9): + resolution: {integrity: sha512-l9xd3N+XG4fZRxEP3vXdK6RW7vN1Uf5dxzRC/09wV86wqZ/YYQooBIGNsiRdfNR3/q2/5pPzV4B54J/9ctX5jw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.8): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + /@babel/plugin-syntax-flow@7.21.4(@babel/core@7.22.1): + resolution: {integrity: sha512-l9xd3N+XG4fZRxEP3vXdK6RW7vN1Uf5dxzRC/09wV86wqZ/YYQooBIGNsiRdfNR3/q2/5pPzV4B54J/9ctX5jw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 + dev: false - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.8): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.12.9): + resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 + dev: false - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.8): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.22.1): + resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 + dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.21.8): - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + /@babel/plugin-syntax-import-attributes@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-TFqy+gFAiTh8KlVS8/c6w97uhAVcCVyd2R0srMHVYymBcBK5N5P+bf8VG6tEAiYCZ3TLYvi6fpzU9Rq79t9oxw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 + dev: false - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.8): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + /@babel/plugin-syntax-import-attributes@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-TFqy+gFAiTh8KlVS8/c6w97uhAVcCVyd2R0srMHVYymBcBK5N5P+bf8VG6tEAiYCZ3TLYvi6fpzU9Rq79t9oxw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 + dev: true - /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.21.8): - resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.12.9): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 - /@babel/plugin-transform-arrow-functions@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.1): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 + dev: true - /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.21.8): - resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.12.9): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-module-imports': 7.21.4 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.8) - transitivePeerDependencies: - - supports-color - /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.1): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 + dev: true - /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.8): - resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} + /@babel/plugin-syntax-jsx@7.21.4(@babel/core@7.12.9): + resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 - /@babel/plugin-transform-classes@7.21.0(@babel/core@7.21.8): - resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} + /@babel/plugin-syntax-jsx@7.21.4(@babel/core@7.22.1): + resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) - '@babel/helper-environment-visitor': 7.21.5 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-replace-supers': 7.21.5 - '@babel/helper-split-export-declaration': 7.18.6 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - /@babel/plugin-transform-computed-properties@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.12.9): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 - '@babel/template': 7.20.7 - /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.21.8): - resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.1): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.12.9): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.1): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.12.9): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.1): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.12.9): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.1): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.12.9): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.1): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.12.9): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.1): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.12.9): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.1): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.12.9): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.1): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.12.9): + resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.22.1): + resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.12.9): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-create-regexp-features-plugin': 7.22.1(@babel/core@7.12.9) + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.1): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-create-regexp-features-plugin': 7.22.1(@babel/core@7.22.1) + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-arrow-functions@7.21.5(@babel/core@7.12.9): + resolution: {integrity: sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-transform-arrow-functions@7.21.5(@babel/core@7.22.1): + resolution: {integrity: sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-transform-async-generator-functions@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-SLpCXbF08XTYRJ/QM0hn4DdgSQB6aAtCaS+zfrjx374ectu4JbpwyQv3fF0kAtPdfQkeFdz86Dajj8A6oYRM9g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-environment-visitor': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.12.9) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.12.9) + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-async-generator-functions@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-SLpCXbF08XTYRJ/QM0hn4DdgSQB6aAtCaS+zfrjx374ectu4JbpwyQv3fF0kAtPdfQkeFdz86Dajj8A6oYRM9g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-environment-visitor': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.22.1) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.1) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.12.9): + resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-module-imports': 7.21.4 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.12.9) + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.22.1): + resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-module-imports': 7.21.4 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.22.1) + transitivePeerDependencies: + - supports-color + + /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.12.9): + resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.22.1): + resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.12.9): + resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.22.1): + resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-transform-class-properties@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-m04PcP0S4OR+NpRQNIOEPHVdGcXqbOEn+pIYzrqRTXMlOjKy6s7s30MZ1WzglHQhD/X/yhngun4yG0FqPszZzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.12.9) + '@babel/helper-plugin-utils': 7.21.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-class-properties@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-m04PcP0S4OR+NpRQNIOEPHVdGcXqbOEn+pIYzrqRTXMlOjKy6s7s30MZ1WzglHQhD/X/yhngun4yG0FqPszZzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.22.1) + '@babel/helper-plugin-utils': 7.21.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-class-static-block@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-b6N2cduLeAmnZMHlLj0XB8108D4EHLtpv1fl7PudLjHf+yxFxnKvhuTn5vuQg61qzS+wxp5DBOcNo1W/GEsFWg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.12.9) + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.12.9) + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-class-static-block@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-b6N2cduLeAmnZMHlLj0XB8108D4EHLtpv1fl7PudLjHf+yxFxnKvhuTn5vuQg61qzS+wxp5DBOcNo1W/GEsFWg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.22.1) + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.1) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-classes@7.21.0(@babel/core@7.12.9): + resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.12.9) + '@babel/helper-environment-visitor': 7.22.1 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-replace-supers': 7.22.1 + '@babel/helper-split-export-declaration': 7.18.6 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-classes@7.21.0(@babel/core@7.22.1): + resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.22.1) + '@babel/helper-environment-visitor': 7.22.1 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-replace-supers': 7.22.1 + '@babel/helper-split-export-declaration': 7.18.6 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + /@babel/plugin-transform-computed-properties@7.21.5(@babel/core@7.12.9): + resolution: {integrity: sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/template': 7.21.9 + dev: false + + /@babel/plugin-transform-computed-properties@7.21.5(@babel/core@7.22.1): + resolution: {integrity: sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/template': 7.21.9 + + /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.12.9): + resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.22.1): + resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.12.9): + resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-create-regexp-features-plugin': 7.22.1(@babel/core@7.12.9) + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.22.1): + resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-create-regexp-features-plugin': 7.22.1(@babel/core@7.22.1) + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.12.9): + resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.22.1): + resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-dynamic-import@7.22.1(@babel/core@7.12.9): + resolution: {integrity: sha512-rlhWtONnVBPdmt+jeewS0qSnMz/3yLFrqAP8hHC6EDcrYRSyuz9f9yQhHvVn2Ad6+yO9fHXac5piudeYrInxwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.12.9) + dev: false + + /@babel/plugin-transform-dynamic-import@7.22.1(@babel/core@7.22.1): + resolution: {integrity: sha512-rlhWtONnVBPdmt+jeewS0qSnMz/3yLFrqAP8hHC6EDcrYRSyuz9f9yQhHvVn2Ad6+yO9fHXac5piudeYrInxwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.1) + dev: true + + /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.12.9): + resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.0 + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.22.1): + resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.0 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-transform-export-namespace-from@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-NkqdpxXHZG1CbXuu31weYMjAOeZ785n4ip/yXYg/4oZxdCg1jH10iR7oPJbZeyF99HhnTxqFnis3FTlpnh5Ovw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.12.9) + dev: false + + /@babel/plugin-transform-export-namespace-from@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-NkqdpxXHZG1CbXuu31weYMjAOeZ785n4ip/yXYg/4oZxdCg1jH10iR7oPJbZeyF99HhnTxqFnis3FTlpnh5Ovw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.1) + dev: true + + /@babel/plugin-transform-flow-strip-types@7.21.0(@babel/core@7.12.9): + resolution: {integrity: sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.12.9) + dev: false + + /@babel/plugin-transform-flow-strip-types@7.21.0(@babel/core@7.22.1): + resolution: {integrity: sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.22.1) + dev: false + + /@babel/plugin-transform-for-of@7.21.5(@babel/core@7.12.9): + resolution: {integrity: sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-transform-for-of@7.21.5(@babel/core@7.22.1): + resolution: {integrity: sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.12.9): + resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.12.9) + '@babel/helper-function-name': 7.21.0 + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.22.1): + resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.22.1) + '@babel/helper-function-name': 7.21.0 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-transform-json-strings@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-6sSCmFYjv4czjub/ESDp46/TQGEM6oH0/t0Zd1gj8qb+j3XY/+s1M8h+2EtJ5JYNQ6ZBxpmazCDwhwQT950Aug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.12.9) + dev: false + + /@babel/plugin-transform-json-strings@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-6sSCmFYjv4czjub/ESDp46/TQGEM6oH0/t0Zd1gj8qb+j3XY/+s1M8h+2EtJ5JYNQ6ZBxpmazCDwhwQT950Aug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.1) + dev: true + + /@babel/plugin-transform-literals@7.18.9(@babel/core@7.12.9): + resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-transform-literals@7.18.9(@babel/core@7.22.1): + resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-transform-logical-assignment-operators@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-tSYLi4c8H5K1iSCLCjA4xaYgw+zQEl7WUP9YI2WpwXkmryDC7+Pu/uD43XQos7Sm326OIC6Yf+6LuWjBs8JJKQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.12.9) + dev: false + + /@babel/plugin-transform-logical-assignment-operators@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-tSYLi4c8H5K1iSCLCjA4xaYgw+zQEl7WUP9YI2WpwXkmryDC7+Pu/uD43XQos7Sm326OIC6Yf+6LuWjBs8JJKQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.1) + dev: true + + /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.12.9): + resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.22.1): + resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.12.9): + resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-module-transforms': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.22.1): + resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-module-transforms': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-commonjs@7.21.5(@babel/core@7.12.9): + resolution: {integrity: sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-module-transforms': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-simple-access': 7.21.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-modules-commonjs@7.21.5(@babel/core@7.22.1): + resolution: {integrity: sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-module-transforms': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-simple-access': 7.21.5 + transitivePeerDependencies: + - supports-color + + /@babel/plugin-transform-modules-systemjs@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-hSo/4vBjCjwsol3nLDJG3QRDuNzvzofnyhKyCiSXpzqEVmkos9SODFC3xzDvvuE3AUjHUMgTpTRpJq16i62heA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-module-transforms': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-validator-identifier': 7.19.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-modules-systemjs@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-hSo/4vBjCjwsol3nLDJG3QRDuNzvzofnyhKyCiSXpzqEVmkos9SODFC3xzDvvuE3AUjHUMgTpTRpJq16i62heA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-module-transforms': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-validator-identifier': 7.19.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.12.9): + resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-module-transforms': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.22.1): + resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-module-transforms': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-named-capturing-groups-regex@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-3bIivRwjbaMFYuP8OypIlTbZK0SxW3j9VpVQX/Yj2q0wG6GqOG30Vgmo5X7QW3TGi3rxrdYpKuwxqfb5aCnJkA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-create-regexp-features-plugin': 7.22.1(@babel/core@7.12.9) + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-transform-named-capturing-groups-regex@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-3bIivRwjbaMFYuP8OypIlTbZK0SxW3j9VpVQX/Yj2q0wG6GqOG30Vgmo5X7QW3TGi3rxrdYpKuwxqfb5aCnJkA==} + engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 + '@babel/helper-create-regexp-features-plugin': 7.22.1(@babel/core@7.22.1) '@babel/helper-plugin-utils': 7.21.5 - /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} + /@babel/plugin-transform-new-target@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-IZH0e2Fm8XmnZTXRzoRsHBBJ7wFzfeU22iiEZCi6EumrAjKOG6AdHpsxtBezG4SCQhqRS8DojQM8+bqtOBTQqw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-regexp-features-plugin': 7.21.8(@babel/core@7.21.8) + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 + dev: false - /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} + /@babel/plugin-transform-new-target@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-IZH0e2Fm8XmnZTXRzoRsHBBJ7wFzfeU22iiEZCi6EumrAjKOG6AdHpsxtBezG4SCQhqRS8DojQM8+bqtOBTQqw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 + dev: true - /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} + /@babel/plugin-transform-nullish-coalescing-operator@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-KU2Or7uQqYKcL6rVLh8jThUBAKy1H+mxPx4E1omUqdSL+hVM9NriMjGFnnv+9xSn3jUMV5FQHsLQxgGLr/MWTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.21.5 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.12.9) + dev: false - /@babel/plugin-transform-flow-strip-types@7.21.0(@babel/core@7.21.8): - resolution: {integrity: sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==} + /@babel/plugin-transform-nullish-coalescing-operator@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-KU2Or7uQqYKcL6rVLh8jThUBAKy1H+mxPx4E1omUqdSL+hVM9NriMjGFnnv+9xSn3jUMV5FQHsLQxgGLr/MWTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.21.8) - dev: false + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.1) + dev: true - /@babel/plugin-transform-for-of@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==} + /@babel/plugin-transform-numeric-separator@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-dfbXAKlbPlDKXsY7fa/gRBWgI4n537TR4b5AnVCZ3RwQ1aVPxs52Xs3XHFxQMn3j4LmUhn8IL2nAYmNh6z2/Ew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.12.9) + dev: false - /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} + /@babel/plugin-transform-numeric-separator@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-dfbXAKlbPlDKXsY7fa/gRBWgI4n537TR4b5AnVCZ3RwQ1aVPxs52Xs3XHFxQMn3j4LmUhn8IL2nAYmNh6z2/Ew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) - '@babel/helper-function-name': 7.21.0 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.1) + dev: true - /@babel/plugin-transform-literals@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} + /@babel/plugin-transform-object-rest-spread@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-PHXQfxbe5EKp2+MuEdBFO4X1gsjvUZPjSDGvYz7PjWl8hZtYDCDxPrwZG+GwT/j6FnAmSz2bTZbQ5Jrh3fhRPg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/compat-data': 7.22.0 + '@babel/core': 7.12.9 + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.9) + '@babel/plugin-transform-parameters': 7.22.0(@babel/core@7.12.9) + dev: false - /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} + /@babel/plugin-transform-object-rest-spread@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-PHXQfxbe5EKp2+MuEdBFO4X1gsjvUZPjSDGvYz7PjWl8hZtYDCDxPrwZG+GwT/j6FnAmSz2bTZbQ5Jrh3fhRPg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/compat-data': 7.22.0 + '@babel/core': 7.22.1 + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.22.1) '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.1) + '@babel/plugin-transform-parameters': 7.22.0(@babel/core@7.22.1) + dev: true - /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.21.8): - resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} + /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.12.9): + resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-module-transforms': 7.21.5 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-replace-supers': 7.22.1 transitivePeerDependencies: - supports-color + dev: false - /@babel/plugin-transform-modules-commonjs@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==} + /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.22.1): + resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-module-transforms': 7.21.5 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-simple-access': 7.21.5 + '@babel/helper-replace-supers': 7.22.1 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.21.8): - resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} + /@babel/plugin-transform-optional-catch-binding@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-x8HEst6X74Aut0TxZI4s1UbUCtqR7IW764w/o/tTIDsm9OY9g+y9BeNhfZ+GrN0/TErN1dBoHNxqo1JXHdfxyA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.21.5 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-validator-identifier': 7.19.1 - transitivePeerDependencies: - - supports-color + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.12.9) + dev: false - /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} + /@babel/plugin-transform-optional-catch-binding@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-x8HEst6X74Aut0TxZI4s1UbUCtqR7IW764w/o/tTIDsm9OY9g+y9BeNhfZ+GrN0/TErN1dBoHNxqo1JXHdfxyA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.1) + dev: true + + /@babel/plugin-transform-optional-chaining@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-p5BZinFj92iSErcstoPK+e+MHJUEZ6Gmlu0EkP3DJ0Y/1XPNvlXxfAzuh8KkN+3wCsYRKLAxAsF6Sn8b/bfWaA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.12.9) + dev: false + + /@babel/plugin-transform-optional-chaining@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-p5BZinFj92iSErcstoPK+e+MHJUEZ6Gmlu0EkP3DJ0Y/1XPNvlXxfAzuh8KkN+3wCsYRKLAxAsF6Sn8b/bfWaA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.1) + dev: true + + /@babel/plugin-transform-parameters@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-hlRM1lu7xeqW8EKKg9ByHwnCEIy0dNPd/fwffpwAck2H3C5mQCrWR9PdrjsywivsFuVAbyyAImU58vAR1cXrEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-transform-parameters@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-hlRM1lu7xeqW8EKKg9ByHwnCEIy0dNPd/fwffpwAck2H3C5mQCrWR9PdrjsywivsFuVAbyyAImU58vAR1cXrEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-transform-private-methods@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-3ao+Yt2kGQEXC894aBRCPo+zzW6YbM/iba+znKsZgEmDkc8RU/ODBfRpWP11qerQ0/mDzqjLpIG7HhpiKx0/cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-module-transforms': 7.21.5 + '@babel/core': 7.12.9 + '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.21.5 transitivePeerDependencies: - supports-color + dev: false - /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.21.8): - resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} + /@babel/plugin-transform-private-methods@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-3ao+Yt2kGQEXC894aBRCPo+zzW6YbM/iba+znKsZgEmDkc8RU/ODBfRpWP11qerQ0/mDzqjLpIG7HhpiKx0/cg==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0 + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-regexp-features-plugin': 7.21.8(@babel/core@7.21.8) + '@babel/core': 7.22.1 + '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.22.1) '@babel/helper-plugin-utils': 7.21.5 + transitivePeerDependencies: + - supports-color + dev: true - /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} + /@babel/plugin-transform-private-property-in-object@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-P4bP+/4Rq6aQ/IZmAEUX+injSKhuOOMOZkXtB3x++P3k5BtyV8RkTvOtpqIv0mLpHge5ReGk0ijNBFRN0n2xEQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.12.9) + transitivePeerDependencies: + - supports-color + dev: false - /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} + /@babel/plugin-transform-private-property-in-object@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-P4bP+/4Rq6aQ/IZmAEUX+injSKhuOOMOZkXtB3x++P3k5BtyV8RkTvOtpqIv0mLpHge5ReGk0ijNBFRN0n2xEQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.22.1) '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-replace-supers': 7.21.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.1) transitivePeerDependencies: - supports-color + dev: true - /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.21.8): - resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} + /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.12.9): + resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 + dev: false - /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.21.8): + /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.22.1): resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 - /@babel/plugin-transform-react-display-name@7.18.6(@babel/core@7.21.8): + /@babel/plugin-transform-react-display-name@7.18.6(@babel/core@7.12.9): + resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-transform-react-display-name@7.18.6(@babel/core@7.22.1): resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 dev: false - /@babel/plugin-transform-react-jsx-self@7.21.0(@babel/core@7.21.8): + /@babel/plugin-transform-react-jsx-self@7.21.0(@babel/core@7.12.9): resolution: {integrity: sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 dev: false - /@babel/plugin-transform-react-jsx-source@7.19.6(@babel/core@7.21.8): + /@babel/plugin-transform-react-jsx-self@7.21.0(@babel/core@7.22.1): + resolution: {integrity: sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-transform-react-jsx-source@7.19.6(@babel/core@7.12.9): + resolution: {integrity: sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-transform-react-jsx-source@7.19.6(@babel/core@7.22.1): resolution: {integrity: sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-transform-react-jsx@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-Li7gdm7eGZJidME4KlXmzQdnuUwE4jhPnICgGpWN56W7GWhmCQ2LmDepyZX4zBsoSNWP9bqDcJo5wQFndcAd9Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-module-imports': 7.21.4 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.12.9) + '@babel/types': 7.22.0 + + /@babel/plugin-transform-react-jsx@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-Li7gdm7eGZJidME4KlXmzQdnuUwE4jhPnICgGpWN56W7GWhmCQ2LmDepyZX4zBsoSNWP9bqDcJo5wQFndcAd9Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-module-imports': 7.21.4 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.22.1) + '@babel/types': 7.22.0 + dev: false + + /@babel/plugin-transform-regenerator@7.21.5(@babel/core@7.12.9): + resolution: {integrity: sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + regenerator-transform: 0.15.1 + dev: false + + /@babel/plugin-transform-regenerator@7.21.5(@babel/core@7.22.1): + resolution: {integrity: sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + regenerator-transform: 0.15.1 + dev: true + + /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.12.9): + resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.22.1): + resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-runtime@7.22.2(@babel/core@7.12.9): + resolution: {integrity: sha512-ewgWBw1pAoqFg9crO6yhZAQoKWN/iNEGqAmuYegZp+xEpvMHGyLxt0SgPZ9bWG6jx4eff6jQ4JILt5zwj/EoTg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-module-imports': 7.21.4 + '@babel/helper-plugin-utils': 7.21.5 + babel-plugin-polyfill-corejs2: 0.4.3(@babel/core@7.12.9) + babel-plugin-polyfill-corejs3: 0.8.1(@babel/core@7.12.9) + babel-plugin-polyfill-regenerator: 0.5.0(@babel/core@7.12.9) + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-runtime@7.22.2(@babel/core@7.22.1): + resolution: {integrity: sha512-ewgWBw1pAoqFg9crO6yhZAQoKWN/iNEGqAmuYegZp+xEpvMHGyLxt0SgPZ9bWG6jx4eff6jQ4JILt5zwj/EoTg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-module-imports': 7.21.4 + '@babel/helper-plugin-utils': 7.21.5 + babel-plugin-polyfill-corejs2: 0.4.3(@babel/core@7.22.1) + babel-plugin-polyfill-corejs3: 0.8.1(@babel/core@7.22.1) + babel-plugin-polyfill-regenerator: 0.5.0(@babel/core@7.22.1) + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.12.9): + resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.22.1): + resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-transform-spread@7.20.7(@babel/core@7.12.9): + resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + dev: false + + /@babel/plugin-transform-spread@7.20.7(@babel/core@7.22.1): + resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + + /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.12.9): + resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.22.1): + resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.12.9): + resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 dev: false - /@babel/plugin-transform-react-jsx@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-ELdlq61FpoEkHO6gFRpfj0kUgSwQTGoaEU8eMRoS8Dv3v6e7BjEAj5WMtIBRdHUeAioMhKP5HyxNzNnP+heKbA==} + /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.22.1): + resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.12.9): + resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.22.1): + resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-module-imports': 7.21.4 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.8) - '@babel/types': 7.21.5 + dev: true - /@babel/plugin-transform-regenerator@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==} + /@babel/plugin-transform-typescript@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-gb4e3dCt39wymMSfvR+6S7roQ+OBBeBXVgCpttb+FZC5GPGJ5DkqncRupirCD36nnNt7gwNLaV3Gf+iHgt/CMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.21.5 - regenerator-transform: 0.15.1 + '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.12.9) + transitivePeerDependencies: + - supports-color + dev: false - /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} + /@babel/plugin-transform-typescript@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-gb4e3dCt39wymMSfvR+6S7roQ+OBBeBXVgCpttb+FZC5GPGJ5DkqncRupirCD36nnNt7gwNLaV3Gf+iHgt/CMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.22.1) '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.22.1) + transitivePeerDependencies: + - supports-color - /@babel/plugin-transform-runtime@7.21.4(@babel/core@7.21.8): - resolution: {integrity: sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA==} + /@babel/plugin-transform-unicode-escapes@7.21.5(@babel/core@7.12.9): + resolution: {integrity: sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-module-imports': 7.21.4 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 - babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.8) - babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.8) - babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.8) - semver: 6.3.0 - transitivePeerDependencies: - - supports-color dev: false - /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} + /@babel/plugin-transform-unicode-escapes@7.21.5(@babel/core@7.22.1): + resolution: {integrity: sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 + dev: true - /@babel/plugin-transform-spread@7.20.7(@babel/core@7.21.8): - resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} + /@babel/plugin-transform-unicode-property-regex@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-uQacKjQ46K+yDfrbEyhEGkqqf5Zbn9WTKWgHOioHrTnOSVGYZSITlNNe0cP4fTgt4ZtjvMp85s4Hj86XS3v3uQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 + '@babel/helper-create-regexp-features-plugin': 7.22.1(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + dev: false - /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} + /@babel/plugin-transform-unicode-property-regex@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-uQacKjQ46K+yDfrbEyhEGkqqf5Zbn9WTKWgHOioHrTnOSVGYZSITlNNe0cP4fTgt4ZtjvMp85s4Hj86XS3v3uQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 + '@babel/helper-create-regexp-features-plugin': 7.22.1(@babel/core@7.22.1) '@babel/helper-plugin-utils': 7.21.5 + dev: true - /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} + /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.12.9): + resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 + '@babel/helper-create-regexp-features-plugin': 7.22.1(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.21.5 + dev: false - /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} + /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.22.1): + resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 + '@babel/helper-create-regexp-features-plugin': 7.22.1(@babel/core@7.22.1) '@babel/helper-plugin-utils': 7.21.5 - /@babel/plugin-transform-typescript@7.21.3(@babel/core@7.21.8): - resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==} + /@babel/plugin-transform-unicode-sets-regex@7.22.0(@babel/core@7.12.9): + resolution: {integrity: sha512-w9ZRKNaJAk2vOhY6HTF7nmr+c5vJ//RCH7S0l4sWyts1x17W45oa6J3UYeZ/RXb74XHm1eFfLjqzY1Hg2mtyaw==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.8(@babel/core@7.21.8) + '@babel/core': 7.12.9 + '@babel/helper-create-regexp-features-plugin': 7.22.1(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.8) - transitivePeerDependencies: - - supports-color + dev: false - /@babel/plugin-transform-unicode-escapes@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==} + /@babel/plugin-transform-unicode-sets-regex@7.22.0(@babel/core@7.22.1): + resolution: {integrity: sha512-w9ZRKNaJAk2vOhY6HTF7nmr+c5vJ//RCH7S0l4sWyts1x17W45oa6J3UYeZ/RXb74XHm1eFfLjqzY1Hg2mtyaw==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 + '@babel/helper-create-regexp-features-plugin': 7.22.1(@babel/core@7.22.1) '@babel/helper-plugin-utils': 7.21.5 + dev: true - /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} + /@babel/preset-env@7.22.2(@babel/core@7.12.9): + resolution: {integrity: sha512-UPNK9pgphMULvA2EMKIWHU90C47PKyuvQ8pE1MzH7l9PgFcRabdrHhlePpBuWxYZQ+TziP2nycKoI5C1Yhdm9Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-regexp-features-plugin': 7.21.8(@babel/core@7.21.8) + '@babel/compat-data': 7.22.0 + '@babel/core': 7.12.9 + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.12.9) '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-validator-option': 7.21.0 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.12.9) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.12.9) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.12.9) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.12.9) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.12.9) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.12.9) + '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.12.9) + '@babel/plugin-syntax-import-attributes': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.12.9) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.12.9) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.12.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.12.9) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.12.9) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.9) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.12.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.12.9) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.12.9) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.12.9) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-arrow-functions': 7.21.5(@babel/core@7.12.9) + '@babel/plugin-transform-async-generator-functions': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.12.9) + '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.12.9) + '@babel/plugin-transform-class-properties': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-class-static-block': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.12.9) + '@babel/plugin-transform-computed-properties': 7.21.5(@babel/core@7.12.9) + '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.12.9) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.12.9) + '@babel/plugin-transform-dynamic-import': 7.22.1(@babel/core@7.12.9) + '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-export-namespace-from': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-for-of': 7.21.5(@babel/core@7.12.9) + '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.12.9) + '@babel/plugin-transform-json-strings': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.12.9) + '@babel/plugin-transform-logical-assignment-operators': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.12.9) + '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.12.9) + '@babel/plugin-transform-modules-systemjs': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-new-target': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-nullish-coalescing-operator': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-numeric-separator': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-object-rest-spread': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-optional-catch-binding': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-optional-chaining': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-parameters': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-private-methods': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-private-property-in-object': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-regenerator': 7.21.5(@babel/core@7.12.9) + '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.12.9) + '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.12.9) + '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.12.9) + '@babel/plugin-transform-unicode-escapes': 7.21.5(@babel/core@7.12.9) + '@babel/plugin-transform-unicode-property-regex': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-unicode-sets-regex': 7.22.0(@babel/core@7.12.9) + '@babel/preset-modules': 0.1.5(@babel/core@7.12.9) + '@babel/types': 7.22.0 + babel-plugin-polyfill-corejs2: 0.4.3(@babel/core@7.12.9) + babel-plugin-polyfill-corejs3: 0.8.1(@babel/core@7.12.9) + babel-plugin-polyfill-regenerator: 0.5.0(@babel/core@7.12.9) + core-js-compat: 3.30.2 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false - /@babel/preset-env@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==} + /@babel/preset-env@7.22.2(@babel/core@7.22.1): + resolution: {integrity: sha512-UPNK9pgphMULvA2EMKIWHU90C47PKyuvQ8pE1MzH7l9PgFcRabdrHhlePpBuWxYZQ+TziP2nycKoI5C1Yhdm9Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.7 - '@babel/core': 7.21.8 - '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) + '@babel/compat-data': 7.22.0 + '@babel/core': 7.22.1 + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.22.1) '@babel/helper-plugin-utils': 7.21.5 '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.8) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.8) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.8) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.21.8) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.21.8) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.8) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.8) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.8) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.8) - '@babel/plugin-transform-arrow-functions': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-transform-computed-properties': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.8) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-for-of': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.21.8) - '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.21.8) - '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.8) - '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.8) - '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-regenerator': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-unicode-escapes': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.8) - '@babel/preset-modules': 0.1.5(@babel/core@7.21.8) - '@babel/types': 7.21.5 - babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.8) - babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.8) - babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.8) - core-js-compat: 3.30.1 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.22.1) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.1) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.1) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.1) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.1) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.1) + '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.22.1) + '@babel/plugin-syntax-import-attributes': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.1) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.1) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.1) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.1) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.1) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.1) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.1) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.1) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.1) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.1) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-arrow-functions': 7.21.5(@babel/core@7.22.1) + '@babel/plugin-transform-async-generator-functions': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.22.1) + '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.22.1) + '@babel/plugin-transform-class-properties': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-class-static-block': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.22.1) + '@babel/plugin-transform-computed-properties': 7.21.5(@babel/core@7.22.1) + '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.22.1) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.22.1) + '@babel/plugin-transform-dynamic-import': 7.22.1(@babel/core@7.22.1) + '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-export-namespace-from': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-for-of': 7.21.5(@babel/core@7.22.1) + '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.22.1) + '@babel/plugin-transform-json-strings': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.22.1) + '@babel/plugin-transform-logical-assignment-operators': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.22.1) + '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.22.1) + '@babel/plugin-transform-modules-systemjs': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-new-target': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-nullish-coalescing-operator': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-numeric-separator': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-object-rest-spread': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-optional-catch-binding': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-optional-chaining': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-parameters': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-private-methods': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-private-property-in-object': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-regenerator': 7.21.5(@babel/core@7.22.1) + '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.22.1) + '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.22.1) + '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.22.1) + '@babel/plugin-transform-unicode-escapes': 7.21.5(@babel/core@7.22.1) + '@babel/plugin-transform-unicode-property-regex': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-unicode-sets-regex': 7.22.0(@babel/core@7.22.1) + '@babel/preset-modules': 0.1.5(@babel/core@7.22.1) + '@babel/types': 7.22.0 + babel-plugin-polyfill-corejs2: 0.4.3(@babel/core@7.22.1) + babel-plugin-polyfill-corejs3: 0.8.1(@babel/core@7.22.1) + babel-plugin-polyfill-regenerator: 0.5.0(@babel/core@7.22.1) + core-js-compat: 3.30.2 semver: 6.3.0 transitivePeerDependencies: - supports-color + dev: true - /@babel/preset-flow@7.21.4(@babel/core@7.21.8): + /@babel/preset-flow@7.21.4(@babel/core@7.22.1): resolution: {integrity: sha512-F24cSq4DIBmhq4OzK3dE63NHagb27OPE3eWR+HLekt4Z3Y5MzIIUGF3LlLgV0gN8vzbDViSY7HnrReNVCJXTeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-transform-flow-strip-types': 7.21.0(@babel/core@7.21.8) + '@babel/plugin-transform-flow-strip-types': 7.21.0(@babel/core@7.22.1) dev: false - /@babel/preset-modules@0.1.5(@babel/core@7.21.8): + /@babel/preset-modules@0.1.5(@babel/core@7.12.9): resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.8) - '@babel/types': 7.21.5 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.12.9) + '@babel/types': 7.22.0 esutils: 2.0.3 + dev: false + + /@babel/preset-modules@0.1.5(@babel/core@7.22.1): + resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.22.1) + '@babel/types': 7.22.0 + esutils: 2.0.3 + dev: true - /@babel/preset-typescript@7.21.5(@babel/core@7.21.8): + /@babel/preset-typescript@7.21.5(@babel/core@7.22.1): resolution: {integrity: sha512-iqe3sETat5EOrORXiQ6rWfoOg2y68Cs75B9wNxdPW4kixJxh7aXQE1KPdWLDniC24T/6dSnguF33W9j/ZZQcmA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-plugin-utils': 7.21.5 '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.8) - '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.21.8) + '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.22.1) + '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.22.1) + '@babel/plugin-transform-typescript': 7.22.0(@babel/core@7.22.1) transitivePeerDependencies: - supports-color - /@babel/register@7.21.0(@babel/core@7.21.8): + /@babel/register@7.21.0(@babel/core@7.22.1): resolution: {integrity: sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 @@ -1837,39 +3201,39 @@ packages: /@babel/regjsgen@0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - /@babel/runtime@7.21.5: - resolution: {integrity: sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==} + /@babel/runtime@7.22.0: + resolution: {integrity: sha512-TT6NB0oszYQ4oxLNUdG+FNHIc3MohXVCKA2BeyQ4WeM2VCSC6wBZ6P0Yfkdzxv+87D8Xk0LJyHeCKlWMvpZt0g==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 - /@babel/template@7.20.7: - resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} + /@babel/template@7.21.9: + resolution: {integrity: sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.21.4 - '@babel/parser': 7.21.8 - '@babel/types': 7.21.5 + '@babel/parser': 7.22.0 + '@babel/types': 7.22.0 - /@babel/traverse@7.21.5: - resolution: {integrity: sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==} + /@babel/traverse@7.22.1: + resolution: {integrity: sha512-lAWkdCoUFnmwLBhIRLciFntGYsIIoC6vIbN8zrLPqBnJmPu7Z6nzqnKd7FsxQUNAvZfVZ0x6KdNvNp8zWIOHSQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.21.4 - '@babel/generator': 7.21.5 - '@babel/helper-environment-visitor': 7.21.5 + '@babel/generator': 7.22.0 + '@babel/helper-environment-visitor': 7.22.1 '@babel/helper-function-name': 7.21.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.21.8 - '@babel/types': 7.21.5 + '@babel/parser': 7.22.0 + '@babel/types': 7.22.0 debug: 4.3.4(supports-color@6.1.0) globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/types@7.21.5: - resolution: {integrity: sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==} + /@babel/types@7.22.0: + resolution: {integrity: sha512-NtXlm3f6cNWIv003cETdlz9sss0VMNtplyatFohxWPz90AbwuhCbHbQopkGis6bG1vOunDLN0FF/4Uv5i8LFZQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.21.5 @@ -1891,8 +3255,8 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@emotion/hash@0.9.0: - resolution: {integrity: sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==} + /@emotion/hash@0.9.1: + resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} dev: true /@esbuild-plugins/node-modules-polyfill@0.1.4(esbuild@0.16.3): @@ -2308,7 +3672,7 @@ packages: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: eslint: 8.39.0 - eslint-visitor-keys: 3.4.0 + eslint-visitor-keys: 3.4.1 dev: true /@eslint-community/regexpp@4.5.1: @@ -2316,13 +3680,13 @@ packages: engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.0.2: - resolution: {integrity: sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==} + /@eslint/eslintrc@2.0.3: + resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@6.1.0) - espree: 9.5.1 + espree: 9.5.2 globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -2352,7 +3716,7 @@ packages: resolution: {integrity: sha512-L9Ci9RBh0aPFEDF1AjDYPk54OgeUJIKzxF3lRgITm+lQpI3IEKjAc9LaYeQeO1mlZMUQmPkHArF8iyz1eOeVoQ==} hasBin: true dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.0 '@expo/code-signing-certificates': 0.0.5 '@expo/config': 7.0.3 '@expo/config-plugins': 5.0.4 @@ -2392,7 +3756,7 @@ packages: md5-file: 3.2.3 md5hex: 1.0.0 minipass: 3.1.6 - node-fetch: 2.6.9 + node-fetch: 2.6.11 node-forge: 1.3.1 npm-package-arg: 7.0.0 ora: 3.4.0 @@ -2406,7 +3770,7 @@ packages: send: 0.18.0(supports-color@6.1.0) slugify: 1.6.6 structured-headers: 0.4.1 - tar: 6.1.14 + tar: 6.1.15 tempy: 0.7.1 terminal-link: 2.1.1 text-table: 0.2.0 @@ -2441,7 +3805,7 @@ packages: getenv: 1.0.0 glob: 7.1.6 resolve-from: 5.0.0 - semver: 7.5.0 + semver: 7.5.1 slash: 3.0.0 xcode: 3.0.1 xml2js: 0.4.23 @@ -2484,7 +3848,7 @@ packages: fs-extra: 9.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 - node-fetch: 2.6.9 + node-fetch: 2.6.11 open: 8.4.2 resolve-from: 5.0.0 semver: 7.3.2 @@ -2510,7 +3874,7 @@ packages: rimraf: 2.7.1 sudo-prompt: 8.2.5 tmp: 0.0.33 - tslib: 2.5.0 + tslib: 2.5.2 transitivePeerDependencies: - supports-color dev: false @@ -2524,7 +3888,7 @@ packages: getenv: 1.0.0 jimp-compact: 0.16.1 mime: 2.6.0 - node-fetch: 2.6.9 + node-fetch: 2.6.11 parse-png: 2.1.0 resolve-from: 5.0.0 semver: 7.3.2 @@ -2624,7 +3988,7 @@ packages: '@segment/loosely-validate-event': 2.0.0 fetch-retry: 4.1.1 md5: 2.3.0 - node-fetch: 2.6.9 + node-fetch: 2.6.11 remove-trailing-slash: 0.1.1 uuid: 8.3.2 transitivePeerDependencies: @@ -2646,7 +4010,7 @@ packages: resolution: {integrity: sha512-TI+l71+5aSKnShYclFa14Kum+hQMZ86b95SH6tQUG3qZEmLTarvWpKwqtTwQKqvlJSJrpFiSFu3eCuZokY6zWA==} dev: false - /@expo/webpack-config@0.17.2(expo@47.0.12)(typescript@4.9.5): + /@expo/webpack-config@0.17.2(expo@47.0.12)(typescript@4.6.3): resolution: {integrity: sha512-cgcWyVXUEH5wj4InAPCIDHAGgpkQhpzWseCj4xVjdL3paBKRMWVjPUqmdHh/exap3U0kHGr/XS+e7ZWLcgHkUw==} engines: {node: '>=12'} dependencies: @@ -2668,9 +4032,9 @@ packages: mini-css-extract-plugin: 0.5.0(webpack@4.43.0) node-html-parser: 1.4.9 optimize-css-assets-webpack-plugin: 5.0.8(webpack@4.43.0) - pnp-webpack-plugin: 1.7.0(typescript@4.9.5) + pnp-webpack-plugin: 1.7.0(typescript@4.6.3) postcss-safe-parser: 4.0.2 - react-dev-utils: 11.0.4(typescript@4.9.5)(webpack@4.43.0) + react-dev-utils: 11.0.4(typescript@4.6.3)(webpack@4.43.0) schema-utils: 3.1.2 semver: 7.3.8 style-loader: 1.2.1(webpack@4.43.0) @@ -2713,19 +4077,19 @@ packages: /@formatjs/ecma402-abstract@1.4.0: resolution: {integrity: sha512-Mv027hcLFjE45K8UJ8PjRpdDGfR0aManEFj1KzoN8zXNveHGEygpZGfFf/FTTMl+QEVSrPAUlyxaCApvmv47AQ==} dependencies: - tslib: 2.5.0 + tslib: 2.3.1 dev: false /@formatjs/intl-localematcher@0.2.25: resolution: {integrity: sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==} dependencies: - tslib: 2.5.0 + tslib: 2.3.1 dev: false /@formatjs/intl-localematcher@0.2.32: resolution: {integrity: sha512-k/MEBstff4sttohyEpXxCmC3MqbUn9VvHGlZ8fauLzkbwXmVrEeyzS+4uhrvAk9DWU9/7otYWxyDox4nT/KVLQ==} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 dev: false /@gar/promisify@1.1.3: @@ -2998,7 +4362,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@sinonjs/fake-timers': 10.0.2 + '@sinonjs/fake-timers': 10.2.0 '@types/node': 17.0.23 jest-message-util: 29.5.0 jest-mock: 29.5.0 @@ -3171,7 +4535,7 @@ packages: resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@jest/types': 27.5.1 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 @@ -3194,7 +4558,7 @@ packages: resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.18 babel-plugin-istanbul: 6.1.1 @@ -3296,8 +4660,8 @@ packages: resolution: {integrity: sha512-QyKIWEnKQFnYu2ey+SAAm1A5xjzJLJJj3bhIZd3QKyXKKjaJ0hlxam/OsWSltxTNbcyH1jRJjC6Cxv31usv0Ag==} engines: {node: ^14.17.0 || >=16.0.0} dependencies: - chalk: 4.1.2 - execa: 5.1.1 + chalk: 4.1.0 + execa: 5.0.0 strong-log-transformer: 2.1.0 dev: true @@ -3313,7 +4677,7 @@ packages: p-reduce: 2.1.0 pacote: 15.1.1 pify: 5.0.0 - semver: 7.5.0 + semver: 7.5.1 slash: 3.0.0 validate-npm-package-license: 3.0.4 validate-npm-package-name: 4.0.0 @@ -3323,13 +4687,13 @@ packages: - supports-color dev: true - /@lerna/legacy-package-management@6.6.2(nx@15.9.3): + /@lerna/legacy-package-management@6.6.2(nx@15.9.4): resolution: {integrity: sha512-0hZxUPKnHwehUO2xC4ldtdX9bW0W1UosxebDIQlZL2STnZnA2IFmIk2lJVUyFW+cmTPQzV93jfS0i69T9Z+teg==} engines: {node: ^14.17.0 || >=16.0.0} dependencies: '@npmcli/arborist': 6.2.3 '@npmcli/run-script': 4.1.7 - '@nrwl/devkit': 15.9.3(nx@15.9.3) + '@nrwl/devkit': 15.9.4(nx@15.9.4) '@octokit/rest': 19.0.3 byte-size: 7.0.0 chalk: 4.1.0 @@ -3405,11 +4769,11 @@ packages: estree-util-is-identifier-name: 2.1.0 estree-util-to-js: 1.2.0 estree-walker: 3.0.3 - hast-util-to-estree: 2.3.2 + hast-util-to-estree: 2.3.3 markdown-extensions: 1.1.1 periscopic: 3.1.0 remark-mdx: 2.3.0 - remark-parse: 10.0.1 + remark-parse: 10.0.2 remark-rehype: 10.1.0 unified: 10.1.2 unist-util-position-from-estree: 1.1.2 @@ -3549,6 +4913,10 @@ packages: /@next/env@13.4.0: resolution: {integrity: sha512-LKofmUuxwGXk2OZJSSJ2SlJE62s6z+56aRsze7chc5TPoVouLR9liTiSWxzYuVzuxk0ui2wtIjyR2tcgS1dIyw==} + /@next/env@13.4.4: + resolution: {integrity: sha512-q/y7VZj/9YpgzDe64Zi6rY1xPizx80JjlU2BTevlajtaE3w1LqweH1gGgxou2N7hdFosXHjGrI4OUvtFXXhGLg==} + dev: true + /@next/eslint-plugin-next@13.4.0: resolution: {integrity: sha512-ZqQi1slguDavpuNUcl9va8+WtHHpgymIW2g+4Gs9FdI+5rjAvrUqqjfCec2hi3Cjbbp7zULFQuAiPwASKHbrxw==} dependencies: @@ -3661,11 +5029,11 @@ packages: '@npmcli/metavuln-calculator': 5.0.1 '@npmcli/name-from-folder': 2.0.0 '@npmcli/node-gyp': 3.0.0 - '@npmcli/package-json': 3.0.0 + '@npmcli/package-json': 3.1.0 '@npmcli/query': 3.0.0 - '@npmcli/run-script': 6.0.1 + '@npmcli/run-script': 6.0.2 bin-links: 4.0.1 - cacache: 17.1.0 + cacache: 17.1.3 common-ancestor-path: 1.0.1 hosted-git-info: 6.1.1 json-parse-even-better-errors: 3.0.0 @@ -3683,7 +5051,7 @@ packages: promise-all-reject-late: 1.0.1 promise-call-limit: 1.0.2 read-package-json-fast: 3.0.2 - semver: 7.5.0 + semver: 7.5.1 ssri: 10.0.4 treeverse: 3.0.0 walk-up-path: 1.0.0 @@ -3696,21 +5064,21 @@ packages: resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} dependencies: '@gar/promisify': 1.1.3 - semver: 7.5.0 + semver: 7.5.1 /@npmcli/fs@2.1.2: resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: '@gar/promisify': 1.1.3 - semver: 7.5.0 + semver: 7.5.1 dev: true /@npmcli/fs@3.1.0: resolution: {integrity: sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - semver: 7.5.0 + semver: 7.5.1 dev: true /@npmcli/git@4.0.4: @@ -3723,7 +5091,7 @@ packages: proc-log: 3.0.0 promise-inflight: 1.0.1(bluebird@3.7.2) promise-retry: 2.0.1 - semver: 7.5.0 + semver: 7.5.1 which: 3.0.1 transitivePeerDependencies: - bluebird @@ -3743,8 +5111,8 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: '@npmcli/name-from-folder': 2.0.0 - glob: 10.2.2 - minimatch: 9.0.0 + glob: 10.2.6 + minimatch: 9.0.1 read-package-json-fast: 3.0.2 dev: true @@ -3752,10 +5120,10 @@ packages: resolution: {integrity: sha512-qb8Q9wIIlEPj3WeA1Lba91R4ZboPL0uspzV0F9uwP+9AYMVB2zOoa7Pbk12g6D2NHAinSbHh6QYmGuRyHZ874Q==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - cacache: 17.1.0 + cacache: 17.1.3 json-parse-even-better-errors: 3.0.0 pacote: 15.1.1 - semver: 7.5.0 + semver: 7.5.1 transitivePeerDependencies: - bluebird - supports-color @@ -3800,11 +5168,14 @@ packages: json-parse-even-better-errors: 2.3.1 dev: true - /@npmcli/package-json@3.0.0: - resolution: {integrity: sha512-NnuPuM97xfiCpbTEJYtEuKz6CFbpUHtaT0+5via5pQeI25omvQDFbp1GcGJ/c4zvL/WX0qbde6YiLgfZbWFgvg==} + /@npmcli/package-json@3.1.0: + resolution: {integrity: sha512-qNPy6Yf9ruFST99xcrl5EWAvrb7qFrwgVbwdzcTJlIgxbArKOq5e/bgZ6rTL1X9hDgAdPbvL8RWx/OTLSB0ToA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: + glob: 10.2.6 json-parse-even-better-errors: 3.0.0 + normalize-package-data: 5.0.0 + npm-normalize-package-bin: 3.0.1 dev: true /@npmcli/promise-spawn@3.0.0: @@ -3825,7 +5196,7 @@ packages: resolution: {integrity: sha512-MFNDSJNgsLZIEBVZ0Q9w9K7o07j5N4o4yjtdz2uEpuCZlXGMuPENiRaFYk0vRqAA64qVuUQwC05g27fRtfUgnA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - postcss-selector-parser: 6.0.12 + postcss-selector-parser: 6.0.13 dev: true /@npmcli/run-script@4.1.7: @@ -3842,8 +5213,8 @@ packages: - supports-color dev: true - /@npmcli/run-script@6.0.1: - resolution: {integrity: sha512-Yi04ZSold8jcbBJD/ahKMJSQCQifH8DAbMwkBvoLaTpGFxzHC3B/5ZyoVR69q/4xedz84tvi9DJOJjNe17h+LA==} + /@npmcli/run-script@6.0.2: + resolution: {integrity: sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: '@npmcli/node-gyp': 3.0.0 @@ -3856,31 +5227,31 @@ packages: - supports-color dev: true - /@nrwl/cli@15.9.3: - resolution: {integrity: sha512-qiAKHkov3iBx6hroPTitUrkRSUZFQqVgNJiF9gXRFC6pNJe9RS4rlmcIaoUFOboi9CnH5jwblNJVcz8YSVYOvA==} + /@nrwl/cli@15.9.4: + resolution: {integrity: sha512-FoiGFCLpb/r4HXCM3KYqT0xteP+MRV6bIHjz3bdPHIDLmBNQQnRRaV2K47jtJ6zjh1eOU5UHKyDtDDYf80Idpw==} dependencies: - nx: 15.9.3 + nx: 15.9.4 transitivePeerDependencies: - '@swc-node/register' - '@swc/core' - debug dev: true - /@nrwl/devkit@15.9.3(nx@15.9.3): - resolution: {integrity: sha512-WdPuaJ0zi04gMwAIRXUfbQLxOnA9Mw0D8tbPoHPd5ARlnGndqIKk666za+qbV0jD+jmsGWJoXViVJ9H5xpSWLw==} + /@nrwl/devkit@15.9.4(nx@15.9.4): + resolution: {integrity: sha512-mUX1kXTuPMdTzFxIzH+MsSNvdppOmstPDOEtiGFZJTuJ625ki0HhNJILO3N2mJ7MeMrLqIlAiNdvelQaObxYsQ==} peerDependencies: nx: '>= 14.1 <= 16' dependencies: ejs: 3.1.9 ignore: 5.2.4 - nx: 15.9.3 + nx: 15.9.4 semver: 7.3.4 tmp: 0.2.1 - tslib: 2.5.0 + tslib: 2.3.1 dev: true - /@nrwl/nx-darwin-arm64@15.9.3: - resolution: {integrity: sha512-2htJzVa+S/uLg5tj4nbO/tRz2SRMQIpT6EeWMgDGuEKQdpuRLVj2ez9hMpkRn9tl1tBUwR05hbV28DnOLRESVA==} + /@nrwl/nx-darwin-arm64@15.9.4: + resolution: {integrity: sha512-XnvrnT9BJsgThY/4xUcYtE077ERq/img8CkRj7MOOBNOh0/nVcR4LGbBKDHtwE3HPk0ikyS/SxRyNa9msvi3QQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -3888,8 +5259,8 @@ packages: dev: true optional: true - /@nrwl/nx-darwin-x64@15.9.3: - resolution: {integrity: sha512-p+8UkfC6KTLOX4XRt7NSP8DoTzEgs73+SN0csoXT9VsNO35+F0Z5zMZxpEc7RVo5Wen/4PGh2OWA+8gtgntsJQ==} + /@nrwl/nx-darwin-x64@15.9.4: + resolution: {integrity: sha512-WKSfSlpVMLchpXkax0geeUNyhvNxwO7qUz/s0/HJWBekt8fizwKDwDj1gP7fOu+YWb/tHiSscbR1km8PtdjhQw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -3897,8 +5268,8 @@ packages: dev: true optional: true - /@nrwl/nx-linux-arm-gnueabihf@15.9.3: - resolution: {integrity: sha512-xwW7bZtggrxhFbYvvWWArtcSWwoxWzi/4wNgP3wPbcZFNZiraahVQSpIyJXrS9aajGbdvuDBM8cbDsMj9v7mwg==} + /@nrwl/nx-linux-arm-gnueabihf@15.9.4: + resolution: {integrity: sha512-a/b4PP7lP/Cgrh0LjC4O2YTt5pyf4DQTGtuE8qlo8o486UiofCtk4QGJX72q80s23L0ejCaKY2ULKx/3zMLjuA==} engines: {node: '>= 10'} cpu: [arm] os: [linux] @@ -3906,8 +5277,8 @@ packages: dev: true optional: true - /@nrwl/nx-linux-arm64-gnu@15.9.3: - resolution: {integrity: sha512-KNxDL2OAHxhFqztEjv2mNwXD6xrzoUury7NsYZYqlxJUNc3YYBfRSLEatnw491crvMBndbxfGVTWEO9S4YmRuw==} + /@nrwl/nx-linux-arm64-gnu@15.9.4: + resolution: {integrity: sha512-ibBV8fMhSfLVd/2WzcDuUm32BoZsattuKkvMmOoyU6Pzoznc3AqyDjJR4xCIoAn5Rf+Nu1oeQONr5FAtb1Ugow==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -3915,8 +5286,8 @@ packages: dev: true optional: true - /@nrwl/nx-linux-arm64-musl@15.9.3: - resolution: {integrity: sha512-AxoZzfsXH7ZqDE+WrQtRumufIcSIBw4U/LikiDLaWWoGtNpAfKLkD/PHirZiNxHIeGy1Toi4ccMUolXbafLVFw==} + /@nrwl/nx-linux-arm64-musl@15.9.4: + resolution: {integrity: sha512-iIjvVYd7+uM4jVD461+PvU5XTALgSvJOODUaMRGOoDl0KlMuTe6pQZlw0eXjl5rcTd6paKaVFWT5j6awr8kj7w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -3924,8 +5295,8 @@ packages: dev: true optional: true - /@nrwl/nx-linux-x64-gnu@15.9.3: - resolution: {integrity: sha512-P8AOPRufvV4a5cSczNsw84zFAI7NgAiEBTybYcyymdNJmo0iArJXEmvj/G4mB20O8VCsCkwqMYAu6nQEnES1Kw==} + /@nrwl/nx-linux-x64-gnu@15.9.4: + resolution: {integrity: sha512-q4OyH72mdrE4KellBWtwpr5EwfxHKNoFP9//7FAILO68ROh0rpMd7YQMlTB7T04UEUHjKEEsFGTlVXIee3Viwg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -3933,8 +5304,8 @@ packages: dev: true optional: true - /@nrwl/nx-linux-x64-musl@15.9.3: - resolution: {integrity: sha512-4ZYDp7T319+xbw7Z7KVtRefzaXJipZfgrM49r+Y1FAfYDc8y18zvKz3slK26wfWz+EUZwKsa/DfA2KmyRG3DvQ==} + /@nrwl/nx-linux-x64-musl@15.9.4: + resolution: {integrity: sha512-67+/XNMR1CgLPyeGX8jqSG6l8yYD0iiwUgcu1Vaxq6N05WwnqVisIW8XzLSRUtKt4WyVQgOWk3aspImpMVOG3Q==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -3942,8 +5313,8 @@ packages: dev: true optional: true - /@nrwl/nx-win32-arm64-msvc@15.9.3: - resolution: {integrity: sha512-UhgxIPgTZBKN1oxlLPSklkSzVL3hA4lAiVc9A0Utumpbp0ob/Xx+2vHzg3cnmNH3jWkZ+9OsC2dKyeMB6gAbSw==} + /@nrwl/nx-win32-arm64-msvc@15.9.4: + resolution: {integrity: sha512-2rEsq3eOGVCYpYJn2tTJkOGNJm/U8rP/FmqtZXYa6VJv/00XP3Gl00IXFEDaYV6rZo7SWqLxtEPUbjK5LwPzZA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -3951,8 +5322,8 @@ packages: dev: true optional: true - /@nrwl/nx-win32-x64-msvc@15.9.3: - resolution: {integrity: sha512-gdnvqURKnu0EQGOFJ6NUKq6wSB+viNb7Z8qtKhzSmFwVjT8akOnLWn7ZhL9v28TAjLM7/s1Mwvmz/IMj1PGlcQ==} + /@nrwl/nx-win32-x64-msvc@15.9.4: + resolution: {integrity: sha512-bogVju4Z/hy1jbppqaTNbmV1R4Kg0R5fKxXAXC2LaL7FL0dup31wPumdV+mXttXBNOBDjV8V/Oz1ZqdmxpOJUw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -3960,11 +5331,11 @@ packages: dev: true optional: true - /@nrwl/tao@15.9.3: - resolution: {integrity: sha512-NcjFCbuMa53C3fBrK7qLUImUBySyr9EVwmiZuAv9sZZtm4eILK8w3qihjrB4FFUuLjPU/SViriYXi+hF2tbP4w==} + /@nrwl/tao@15.9.4: + resolution: {integrity: sha512-m90iz8UsXx1rgPm1dxsBQjSrCViWYZIrp8bpwjSCW24j3kifyilYSXGuKaRwZwUn7eNmH/kZcI9/8qeGIPF4Sg==} hasBin: true dependencies: - nx: 15.9.3 + nx: 15.9.4 transitivePeerDependencies: - '@swc-node/register' - '@swc/core' @@ -3975,18 +5346,18 @@ packages: resolution: {integrity: sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA==} engines: {node: '>= 14'} dependencies: - '@octokit/types': 9.2.0 + '@octokit/types': 9.2.3 dev: true - /@octokit/core@4.2.0: - resolution: {integrity: sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg==} + /@octokit/core@4.2.1: + resolution: {integrity: sha512-tEDxFx8E38zF3gT7sSMDrT1tGumDgsw5yPG6BBh/X+5ClIQfMH/Yqocxz1PnHx6CHyF6pxmovUTOfZAUvQ0Lvw==} engines: {node: '>= 14'} dependencies: '@octokit/auth-token': 3.0.3 - '@octokit/graphql': 5.0.5 - '@octokit/request': 6.2.3 + '@octokit/graphql': 5.0.6 + '@octokit/request': 6.2.5 '@octokit/request-error': 3.0.3 - '@octokit/types': 9.2.0 + '@octokit/types': 9.2.3 before-after-hook: 2.2.3 universal-user-agent: 6.0.0 transitivePeerDependencies: @@ -3997,17 +5368,17 @@ packages: resolution: {integrity: sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==} engines: {node: '>= 14'} dependencies: - '@octokit/types': 9.2.0 + '@octokit/types': 9.2.3 is-plain-object: 5.0.0 universal-user-agent: 6.0.0 dev: true - /@octokit/graphql@5.0.5: - resolution: {integrity: sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ==} + /@octokit/graphql@5.0.6: + resolution: {integrity: sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==} engines: {node: '>= 14'} dependencies: - '@octokit/request': 6.2.3 - '@octokit/types': 9.2.0 + '@octokit/request': 6.2.5 + '@octokit/types': 9.2.3 universal-user-agent: 6.0.0 transitivePeerDependencies: - encoding @@ -4021,39 +5392,39 @@ packages: resolution: {integrity: sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==} dev: true - /@octokit/openapi-types@17.1.0: - resolution: {integrity: sha512-rnI26BAITDZTo5vqFOmA7oX4xRd18rO+gcK4MiTpJmsRMxAw0JmevNjPsjpry1bb9SVNo56P/0kbiyXXa4QluA==} + /@octokit/openapi-types@17.2.0: + resolution: {integrity: sha512-MazrFNx4plbLsGl+LFesMo96eIXkFgEtaKbnNpdh4aQ0VM10aoylFsTYP1AEjkeoRNZiiPe3T6Gl2Hr8dJWdlQ==} dev: true /@octokit/plugin-enterprise-rest@6.0.1: resolution: {integrity: sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==} dev: true - /@octokit/plugin-paginate-rest@3.1.0(@octokit/core@4.2.0): + /@octokit/plugin-paginate-rest@3.1.0(@octokit/core@4.2.1): resolution: {integrity: sha512-+cfc40pMzWcLkoDcLb1KXqjX0jTGYXjKuQdFQDc6UAknISJHnZTiBqld6HDwRJvD4DsouDKrWXNbNV0lE/3AXA==} engines: {node: '>= 14'} peerDependencies: '@octokit/core': '>=4' dependencies: - '@octokit/core': 4.2.0 + '@octokit/core': 4.2.1 '@octokit/types': 6.41.0 dev: true - /@octokit/plugin-request-log@1.0.4(@octokit/core@4.2.0): + /@octokit/plugin-request-log@1.0.4(@octokit/core@4.2.1): resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} peerDependencies: '@octokit/core': '>=3' dependencies: - '@octokit/core': 4.2.0 + '@octokit/core': 4.2.1 dev: true - /@octokit/plugin-rest-endpoint-methods@6.8.1(@octokit/core@4.2.0): + /@octokit/plugin-rest-endpoint-methods@6.8.1(@octokit/core@4.2.1): resolution: {integrity: sha512-QrlaTm8Lyc/TbU7BL/8bO49vp+RZ6W3McxxmmQTgYxf2sWkO8ZKuj4dLhPNJD6VCUW1hetCmeIM0m6FTVpDiEg==} engines: {node: '>= 14'} peerDependencies: '@octokit/core': '>=3' dependencies: - '@octokit/core': 4.2.0 + '@octokit/core': 4.2.1 '@octokit/types': 8.2.1 deprecation: 2.3.1 dev: true @@ -4062,20 +5433,20 @@ packages: resolution: {integrity: sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==} engines: {node: '>= 14'} dependencies: - '@octokit/types': 9.2.0 + '@octokit/types': 9.2.3 deprecation: 2.3.1 once: 1.4.0 dev: true - /@octokit/request@6.2.3: - resolution: {integrity: sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA==} + /@octokit/request@6.2.5: + resolution: {integrity: sha512-z83E8UIlPNaJUsXpjD8E0V5o/5f+vJJNbNcBwVZsX3/vC650U41cOkTLjq4PKk9BYonQGOnx7N17gvLyNjgGcQ==} engines: {node: '>= 14'} dependencies: '@octokit/endpoint': 7.0.5 '@octokit/request-error': 3.0.3 - '@octokit/types': 9.2.0 + '@octokit/types': 9.2.3 is-plain-object: 5.0.0 - node-fetch: 2.6.9 + node-fetch: 2.6.7 universal-user-agent: 6.0.0 transitivePeerDependencies: - encoding @@ -4085,10 +5456,10 @@ packages: resolution: {integrity: sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ==} engines: {node: '>= 14'} dependencies: - '@octokit/core': 4.2.0 - '@octokit/plugin-paginate-rest': 3.1.0(@octokit/core@4.2.0) - '@octokit/plugin-request-log': 1.0.4(@octokit/core@4.2.0) - '@octokit/plugin-rest-endpoint-methods': 6.8.1(@octokit/core@4.2.0) + '@octokit/core': 4.2.1 + '@octokit/plugin-paginate-rest': 3.1.0(@octokit/core@4.2.1) + '@octokit/plugin-request-log': 1.0.4(@octokit/core@4.2.1) + '@octokit/plugin-rest-endpoint-methods': 6.8.1(@octokit/core@4.2.1) transitivePeerDependencies: - encoding dev: true @@ -4105,10 +5476,10 @@ packages: '@octokit/openapi-types': 14.0.0 dev: true - /@octokit/types@9.2.0: - resolution: {integrity: sha512-xySzJG4noWrIBFyMu4lg4tu9vAgNg9S0aoLRONhAEz6ueyi1evBzb40HitIosaYS4XOexphG305IVcLrIX/30g==} + /@octokit/types@9.2.3: + resolution: {integrity: sha512-MMeLdHyFIALioycq+LFcA71v0S2xpQUX2cw6pPbHQjaibcHYwLnmK/kMZaWuGfGfjBJZ3wRUq+dOaWsvrPJVvA==} dependencies: - '@octokit/openapi-types': 17.1.0 + '@octokit/openapi-types': 17.2.0 dev: true /@panva/hkdf@1.1.1: @@ -4131,8 +5502,8 @@ packages: dev: true optional: true - /@pkgr/utils@2.4.0: - resolution: {integrity: sha512-2OCURAmRtdlL8iUDTypMrrxfwe8frXTeXaxGsVOaYtc/wrUyk8Z/0OBetM7cdlsy7ZFWlMX72VogKeh+A4Xcjw==} + /@pkgr/utils@2.4.1: + resolution: {integrity: sha512-JOqwkgFEyi+OROIyq7l4Jy28h/WwhDnG/cPkXG2Z1iFbubB6jsHW1NDvmyOzTBxHr3yg68YGirmh1JUgMqa+9w==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dependencies: cross-spawn: 7.0.3 @@ -4140,7 +5511,7 @@ packages: is-glob: 4.0.3 open: 9.1.0 picocolors: 1.0.0 - tslib: 2.5.0 + tslib: 2.5.2 dev: true /@playwright/test@1.33.0: @@ -4154,8 +5525,8 @@ packages: fsevents: 2.3.2 dev: true - /@popperjs/core@2.11.7: - resolution: {integrity: sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==} + /@popperjs/core@2.11.8: + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} dev: false /@react-native-community/cli-clean@9.2.1: @@ -4276,7 +5647,7 @@ packages: - encoding dev: false - /@react-native-community/cli-plugin-metro@9.2.1(@babel/core@7.21.8): + /@react-native-community/cli-plugin-metro@9.2.1(@babel/core@7.12.9): resolution: {integrity: sha512-byBGBH6jDfUvcHGFA45W/sDwMlliv7flJ8Ns9foCh3VsIeYYPoDjjK7SawE9cPqRdMAD4SY7EVwqJnOtRbwLiQ==} dependencies: '@react-native-community/cli-server-api': 9.2.1 @@ -4285,7 +5656,7 @@ packages: metro: 0.72.3 metro-config: 0.72.3 metro-core: 0.72.3 - metro-react-native-babel-transformer: 0.72.3(@babel/core@7.21.8) + metro-react-native-babel-transformer: 0.72.3(@babel/core@7.12.9) metro-resolver: 0.72.3 metro-runtime: 0.72.3 readline: 1.3.0 @@ -4323,7 +5694,7 @@ packages: chalk: 4.1.2 find-up: 5.0.0 mime: 2.6.0 - node-fetch: 2.6.9 + node-fetch: 2.6.11 open: 6.4.0 ora: 5.4.1 semver: 6.3.0 @@ -4338,7 +5709,7 @@ packages: joi: 17.9.2 dev: false - /@react-native-community/cli@9.2.1(@babel/core@7.21.8): + /@react-native-community/cli@9.2.1(@babel/core@7.12.9): resolution: {integrity: sha512-feMYS5WXXKF4TSWnCXozHxtWq36smyhGaENXlkiRESfYZ1mnCUlPfOanNCAvNvBqdyh9d4o0HxhYKX1g9l6DCQ==} engines: {node: '>=14'} hasBin: true @@ -4348,7 +5719,7 @@ packages: '@react-native-community/cli-debugger-ui': 9.0.0 '@react-native-community/cli-doctor': 9.3.0 '@react-native-community/cli-hermes': 9.3.1 - '@react-native-community/cli-plugin-metro': 9.2.1(@babel/core@7.21.8) + '@react-native-community/cli-plugin-metro': 9.2.1(@babel/core@7.12.9) '@react-native-community/cli-server-api': 9.2.1 '@react-native-community/cli-tools': 9.2.1 '@react-native-community/cli-types': 9.1.0 @@ -4394,15 +5765,15 @@ packages: '@remix-run/serve': optional: true dependencies: - '@babel/core': 7.21.8 - '@babel/generator': 7.21.5 - '@babel/parser': 7.21.8 - '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.8) - '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.8) - '@babel/preset-env': 7.21.5(@babel/core@7.21.8) - '@babel/preset-typescript': 7.21.5(@babel/core@7.21.8) - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 + '@babel/core': 7.22.1 + '@babel/generator': 7.22.0 + '@babel/parser': 7.22.0 + '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.22.1) + '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.22.1) + '@babel/preset-env': 7.22.2(@babel/core@7.22.1) + '@babel/preset-typescript': 7.21.5(@babel/core@7.22.1) + '@babel/traverse': 7.22.1 + '@babel/types': 7.22.0 '@esbuild-plugins/node-modules-polyfill': 0.1.4(esbuild@0.16.3) '@npmcli/package-json': 2.0.0 '@remix-run/serve': 1.15.0 @@ -4429,7 +5800,7 @@ packages: lodash.debounce: 4.0.8 lru-cache: 7.18.3 minimatch: 3.1.2 - node-fetch: 2.6.9 + node-fetch: 2.6.11 ora: 5.4.1 postcss: 8.4.23 postcss-discard-duplicates: 5.1.0(postcss@8.4.23) @@ -4442,7 +5813,7 @@ packages: recast: 0.21.5 remark-frontmatter: 4.0.1 remark-mdx-frontmatter: 1.1.1 - semver: 7.5.0 + semver: 7.5.1 sort-package-json: 1.57.0 tar-fs: 2.1.1 tsconfig-paths: 4.2.0 @@ -4561,7 +5932,7 @@ packages: dependencies: web-streams-polyfill: 3.2.1 - /@rollup/plugin-babel@5.3.1(@babel/core@7.21.8)(rollup@2.79.1): + /@rollup/plugin-babel@5.3.1(@babel/core@7.22.1)(rollup@2.79.1): resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} engines: {node: '>= 10.0.0'} peerDependencies: @@ -4572,7 +5943,7 @@ packages: '@types/babel__core': optional: true dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-module-imports': 7.21.4 '@rollup/pluginutils': 3.1.0(rollup@2.79.1) rollup: 2.79.1 @@ -4648,8 +6019,8 @@ packages: picomatch: 2.3.1 dev: true - /@rushstack/eslint-patch@1.2.0: - resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==} + /@rushstack/eslint-patch@1.3.0: + resolution: {integrity: sha512-IthPJsJR85GhOkp3Hvp8zFOPK5ynKn6STyHa/WZpioK7E1aYDiBzpqQPrngc14DszIUkIrdd3k9Iu0XSzlP/1w==} dev: true /@segment/loosely-validate-event@2.0.0: @@ -4692,16 +6063,16 @@ packages: type-detect: 4.0.8 dev: true - /@sinonjs/commons@2.0.0: - resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} + /@sinonjs/commons@3.0.0: + resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} dependencies: type-detect: 4.0.8 dev: true - /@sinonjs/fake-timers@10.0.2: - resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} + /@sinonjs/fake-timers@10.2.0: + resolution: {integrity: sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==} dependencies: - '@sinonjs/commons': 2.0.0 + '@sinonjs/commons': 3.0.0 dev: true /@sinonjs/fake-timers@8.1.0: @@ -4713,7 +6084,7 @@ packages: /@swc/helpers@0.5.1: resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==} dependencies: - tslib: 2.5.0 + tslib: 2.5.2 /@szmarczak/http-timer@4.0.6: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} @@ -4739,7 +6110,7 @@ packages: engines: {node: '>=12'} dependencies: '@babel/code-frame': 7.21.4 - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.0 '@types/aria-query': 5.0.1 aria-query: 5.1.3 chalk: 4.1.2 @@ -4755,9 +6126,9 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.0 '@testing-library/dom': 8.20.0 - '@types/react-dom': 18.2.2 + '@types/react-dom': 18.2.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true @@ -4784,8 +6155,8 @@ packages: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} dev: true - /@tsconfig/node16@1.0.3: - resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} dev: true /@tufjs/canonical-json@1.0.0: @@ -4798,7 +6169,7 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: '@tufjs/canonical-json': 1.0.0 - minimatch: 9.0.0 + minimatch: 9.0.1 dev: true /@types/accept-language-parser@1.5.3: @@ -4814,33 +6185,33 @@ packages: resolution: {integrity: sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==} dev: true - /@types/babel__core@7.20.0: - resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} + /@types/babel__core@7.20.1: + resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} dependencies: - '@babel/parser': 7.21.8 - '@babel/types': 7.21.5 + '@babel/parser': 7.22.0 + '@babel/types': 7.22.0 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 - '@types/babel__traverse': 7.18.5 + '@types/babel__traverse': 7.20.0 dev: true /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.0 dev: true /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.21.8 - '@babel/types': 7.21.5 + '@babel/parser': 7.22.0 + '@babel/types': 7.22.0 dev: true - /@types/babel__traverse@7.18.5: - resolution: {integrity: sha512-enCvTL8m/EHS/zIvJno9nE+ndYPh1/oNFzRYRmtUqJICG2VnCSBzMLW5VN2KCQU91f23tsNKR8v7VJJQMatl7Q==} + /@types/babel__traverse@7.20.0: + resolution: {integrity: sha512-TBOjqAGf0hmaqRwpii5LLkJLg7c6OMm4nHLmpsUxwk9bBHtoTC6dAHdVWdGv4TBxj2CZOZY8Xfq8WmfoVi7n4Q==} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.0 dev: true /@types/cacheable-request@6.0.3: @@ -4855,8 +6226,8 @@ packages: /@types/cookie@0.4.1: resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} - /@types/debug@4.1.7: - resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} + /@types/debug@4.1.8: + resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==} dependencies: '@types/ms': 0.7.31 @@ -4934,8 +6305,8 @@ packages: resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==} dev: false - /@types/json-schema@7.0.11: - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + /@types/json-schema@7.0.12: + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} @@ -5012,8 +6383,8 @@ packages: resolution: {integrity: sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==} dev: false - /@types/react-dom@18.2.2: - resolution: {integrity: sha512-IGuuCsLmAH0f3KksOZp/vkpUtO2YrIwob4YxvoFQR2XvkLL7tf7mLYcXiyG47KgTKngI4+7lNm4dM4eBTbG1Bw==} + /@types/react-dom@18.2.1: + resolution: {integrity: sha512-8QZEV9+Kwy7tXFmjJrp3XUKQSs9LTnE0KnoUb0YCguWBiNW0Yfb2iBMYZ08WPg35IR6P3Z0s00B15SwZnO26+w==} dependencies: '@types/react': 18.2.5 dev: true @@ -5040,8 +6411,8 @@ packages: /@types/scheduler@0.16.3: resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} - /@types/semver@7.3.13: - resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} + /@types/semver@7.5.0: + resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} dev: true /@types/source-list-map@0.1.2: @@ -5103,8 +6474,8 @@ packages: dependencies: '@types/yargs-parser': 21.0.0 - /@typescript-eslint/eslint-plugin@5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.39.0)(typescript@4.9.5): - resolution: {integrity: sha512-yVrXupeHjRxLDcPKL10sGQ/QlVrA8J5IYOEWVqk0lJaSZP7X5DfnP7Ns3cc74/blmbipQ1htFNVGsHX6wsYm0A==} + /@typescript-eslint/eslint-plugin@5.59.7(@typescript-eslint/parser@5.59.7)(eslint@8.39.0)(typescript@4.6.3): + resolution: {integrity: sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -5115,24 +6486,24 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.5.1 - '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 5.59.2 - '@typescript-eslint/type-utils': 5.59.2(eslint@8.39.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.59.2(eslint@8.39.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.59.7(eslint@8.39.0)(typescript@4.6.3) + '@typescript-eslint/scope-manager': 5.59.7 + '@typescript-eslint/type-utils': 5.59.7(eslint@8.39.0)(typescript@4.6.3) + '@typescript-eslint/utils': 5.59.7(eslint@8.39.0)(typescript@4.6.3) debug: 4.3.4(supports-color@6.1.0) eslint: 8.39.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.5.0 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 + semver: 7.5.1 + tsutils: 3.21.0(typescript@4.6.3) + typescript: 4.6.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.59.2(eslint@8.39.0)(typescript@4.9.5): - resolution: {integrity: sha512-uq0sKyw6ao1iFOZZGk9F8Nro/8+gfB5ezl1cA06SrqbgJAt0SRoFhb9pXaHvkrxUpZaoLxt8KlovHNk8Gp6/HQ==} + /@typescript-eslint/parser@5.59.7(eslint@8.39.0)(typescript@4.6.3): + resolution: {integrity: sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -5141,26 +6512,26 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.59.2 - '@typescript-eslint/types': 5.59.2 - '@typescript-eslint/typescript-estree': 5.59.2(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.59.7 + '@typescript-eslint/types': 5.59.7 + '@typescript-eslint/typescript-estree': 5.59.7(typescript@4.6.3) debug: 4.3.4(supports-color@6.1.0) eslint: 8.39.0 - typescript: 4.9.5 + typescript: 4.6.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@5.59.2: - resolution: {integrity: sha512-dB1v7ROySwQWKqQ8rEWcdbTsFjh2G0vn8KUyvTXdPoyzSL6lLGkiXEV5CvpJsEe9xIdKV+8Zqb7wif2issoOFA==} + /@typescript-eslint/scope-manager@5.59.7: + resolution: {integrity: sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.59.2 - '@typescript-eslint/visitor-keys': 5.59.2 + '@typescript-eslint/types': 5.59.7 + '@typescript-eslint/visitor-keys': 5.59.7 dev: true - /@typescript-eslint/type-utils@5.59.2(eslint@8.39.0)(typescript@4.9.5): - resolution: {integrity: sha512-b1LS2phBOsEy/T381bxkkywfQXkV1dWda/z0PhnIy3bC5+rQWQDS7fk9CSpcXBccPY27Z6vBEuaPBCKCgYezyQ==} + /@typescript-eslint/type-utils@5.59.7(eslint@8.39.0)(typescript@4.6.3): + resolution: {integrity: sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -5169,23 +6540,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.59.2(typescript@4.9.5) - '@typescript-eslint/utils': 5.59.2(eslint@8.39.0)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 5.59.7(typescript@4.6.3) + '@typescript-eslint/utils': 5.59.7(eslint@8.39.0)(typescript@4.6.3) debug: 4.3.4(supports-color@6.1.0) eslint: 8.39.0 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 + tsutils: 3.21.0(typescript@4.6.3) + typescript: 4.6.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@5.59.2: - resolution: {integrity: sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==} + /@typescript-eslint/types@5.59.7: + resolution: {integrity: sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree@5.59.2(typescript@4.9.5): - resolution: {integrity: sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q==} + /@typescript-eslint/typescript-estree@5.59.7(typescript@4.6.3): + resolution: {integrity: sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -5193,44 +6564,44 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.59.2 - '@typescript-eslint/visitor-keys': 5.59.2 + '@typescript-eslint/types': 5.59.7 + '@typescript-eslint/visitor-keys': 5.59.7 debug: 4.3.4(supports-color@6.1.0) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.0 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 + semver: 7.5.1 + tsutils: 3.21.0(typescript@4.6.3) + typescript: 4.6.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.59.2(eslint@8.39.0)(typescript@4.9.5): - resolution: {integrity: sha512-kSuF6/77TZzyGPhGO4uVp+f0SBoYxCDf+lW3GKhtKru/L8k/Hd7NFQxyWUeY7Z/KGB2C6Fe3yf2vVi4V9TsCSQ==} + /@typescript-eslint/utils@5.59.7(eslint@8.39.0)(typescript@4.6.3): + resolution: {integrity: sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.39.0) - '@types/json-schema': 7.0.11 - '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.59.2 - '@typescript-eslint/types': 5.59.2 - '@typescript-eslint/typescript-estree': 5.59.2(typescript@4.9.5) + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 5.59.7 + '@typescript-eslint/types': 5.59.7 + '@typescript-eslint/typescript-estree': 5.59.7(typescript@4.6.3) eslint: 8.39.0 eslint-scope: 5.1.1 - semver: 7.5.0 + semver: 7.5.1 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@5.59.2: - resolution: {integrity: sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==} + /@typescript-eslint/visitor-keys@5.59.7: + resolution: {integrity: sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.59.2 - eslint-visitor-keys: 3.4.0 + '@typescript-eslint/types': 5.59.7 + eslint-visitor-keys: 3.4.1 dev: true /@urql/core@2.3.6(graphql@15.8.0): @@ -5253,10 +6624,10 @@ packages: wonka: 4.0.15 dev: false - /@vanilla-extract/babel-plugin-debug-ids@1.0.2: - resolution: {integrity: sha512-LjnbQWGeMwaydmovx8jWUR8BxLtLiPyq0xz5C8G5OvFhsuJxvavLdrBHNNizvr1dq7/3qZGlPv0znsvU4P44YA==} + /@vanilla-extract/babel-plugin-debug-ids@1.0.3: + resolution: {integrity: sha512-vm4jYu1xhSa6ofQ9AhIpR3DkAp4c+eoR1Rpm8/TQI4DmWbmGbOjYRcqV0aWsfaIlNhN4kFuxFMKBNN9oG6iRzA==} dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 transitivePeerDependencies: - supports-color dev: true @@ -5264,7 +6635,7 @@ packages: /@vanilla-extract/css@1.11.0: resolution: {integrity: sha512-uohj+8cGWbnrVzTfrjlJeXqdGjH3d3TcscdQxKe3h5bb5QQXTpPSq+c+SeWADIGiZybzcW0CBvZV8jsy1ywY9w==} dependencies: - '@emotion/hash': 0.9.0 + '@emotion/hash': 0.9.1 '@vanilla-extract/private': 1.0.3 ahocorasick: 1.0.2 chalk: 4.1.2 @@ -5280,18 +6651,18 @@ packages: /@vanilla-extract/integration@6.2.1: resolution: {integrity: sha512-+xYJz07G7TFAMZGrOqArOsURG+xcYvqctujEkANjw2McCBvGEK505RxQqOuNiA9Mi9hgGdNp2JedSa94f3eoLg==} dependencies: - '@babel/core': 7.21.8 - '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.8) - '@vanilla-extract/babel-plugin-debug-ids': 1.0.2 + '@babel/core': 7.22.1 + '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.22.1) + '@vanilla-extract/babel-plugin-debug-ids': 1.0.3 '@vanilla-extract/css': 1.11.0 esbuild: 0.17.6 eval: 0.1.6 find-up: 5.0.0 javascript-stringify: 2.1.0 lodash: 4.17.21 - mlly: 1.2.0 + mlly: 1.3.0 outdent: 0.8.0 - vite: 4.3.4 + vite: 4.3.9 vite-node: 0.28.5 transitivePeerDependencies: - '@types/node' @@ -5454,7 +6825,7 @@ packages: resolution: {integrity: sha512-Zaw58gQxjQceJqhqybJi1oUDaORT8i2GTgwICPs8v/X/Pkx35FXQba69ldHVg5pQZ6YLKpROXgyHvBaCJOFXiA==} dependencies: pkg-dir: 5.0.0 - tslib: 2.5.0 + tslib: 2.3.1 upath2: 3.1.19 dev: true @@ -5462,12 +6833,12 @@ packages: resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} dev: true - /@yarnpkg/parsers@3.0.0-rc.43: - resolution: {integrity: sha512-AhFF3mIDfA+jEwQv2WMHmiYhOvmdbh2qhUkDVQfiqzQtUwS4BgoWwom5NpSPg4Ix5vOul+w1690Bt21CkVLpgg==} + /@yarnpkg/parsers@3.0.0-rc.44: + resolution: {integrity: sha512-UVAt9Icc8zfGXioeYJ8XMoSTxOYVmlal2TRNxy9Uh91taS72kQFalK7LpIslcvEBKy4XtarmfIwcFIU3ZY64lw==} engines: {node: '>=14.15.0'} dependencies: js-yaml: 3.14.1 - tslib: 2.5.0 + tslib: 2.5.2 dev: true /@zkochan/js-yaml@0.0.6: @@ -5778,7 +7149,7 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: delegates: 1.0.0 - readable-stream: 4.3.0 + readable-stream: 4.4.0 dev: true /arg@1.0.0: @@ -5854,7 +7225,7 @@ packages: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 is-string: 1.0.7 dev: true @@ -5917,7 +7288,7 @@ packages: define-properties: 1.2.0 es-abstract: 1.21.2 es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 dev: true /arrify@1.0.1: @@ -5963,21 +7334,21 @@ packages: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} dependencies: - tslib: 2.5.0 + tslib: 2.3.1 dev: true /ast-types@0.14.2: resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} engines: {node: '>=4'} dependencies: - tslib: 2.5.0 + tslib: 2.3.1 dev: false /ast-types@0.15.2: resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} engines: {node: '>=4'} dependencies: - tslib: 2.5.0 + tslib: 2.3.1 dev: true /astral-regex@1.0.0: @@ -5985,8 +7356,8 @@ packages: engines: {node: '>=4'} dev: false - /astring@1.8.4: - resolution: {integrity: sha512-97a+l2LBU3Op3bBQEff79i/E4jMD2ZLFD8rHx9B6mXyB2uQwhJQYfiDqUwtfjF4QA1F2qs//N6Cw8LetMbQjcw==} + /astring@1.8.5: + resolution: {integrity: sha512-TuBbdn7jWVzf8dmFGTaRpW8qgANtWLi1qJLnkfGO5uVf6jf9f/F4B1H35tnOI+qVYZo3p3i8WZlbZOuPAE0wEA==} hasBin: true /async-each@1.0.6: @@ -6030,7 +7401,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.21.5 - caniuse-lite: 1.0.30001482 + caniuse-lite: 1.0.30001489 fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -6042,8 +7413,8 @@ packages: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} - /axe-core@4.7.0: - resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} + /axe-core@4.7.2: + resolution: {integrity: sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==} engines: {node: '>=4'} dev: true @@ -6063,26 +7434,26 @@ packages: deep-equal: 2.2.1 dev: true - /babel-core@7.0.0-bridge.0(@babel/core@7.21.8): + /babel-core@7.0.0-bridge.0(@babel/core@7.22.1): resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 dev: false - /babel-jest@27.5.1(@babel/core@7.21.8): + /babel-jest@27.5.1(@babel/core@7.12.9): resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/babel__core': 7.20.0 + '@types/babel__core': 7.20.1 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.5.1(@babel/core@7.21.8) + babel-preset-jest: 27.5.1(@babel/core@7.12.9) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -6090,17 +7461,17 @@ packages: - supports-color dev: true - /babel-jest@29.5.0(@babel/core@7.21.8): + /babel-jest@29.5.0(@babel/core@7.12.9): resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@jest/transform': 29.5.0 - '@types/babel__core': 7.20.0 + '@types/babel__core': 7.20.1 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.5.0(@babel/core@7.21.8) + babel-preset-jest: 29.5.0(@babel/core@7.12.9) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -6124,20 +7495,20 @@ packages: webpack: 4.43.0 dev: false - /babel-plugin-annotate-pure-calls@0.4.0(@babel/core@7.21.8): + /babel-plugin-annotate-pure-calls@0.4.0(@babel/core@7.22.1): resolution: {integrity: sha512-oi4M/PWUJOU9ZyRGoPTfPMqdyMp06jbJAomd3RcyYuzUtBOddv98BqLm96Lucpi2QFoQHkdGQt0ACvw7VzVEQA==} peerDependencies: '@babel/core': ^6.0.0-0 || 7.x dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 dev: true - /babel-plugin-dev-expression@0.2.3(@babel/core@7.21.8): + /babel-plugin-dev-expression@0.2.3(@babel/core@7.22.1): resolution: {integrity: sha512-rP5LK9QQTzCW61nVVzw88En1oK8t8gTsIeC6E61oelxNsU842yMjF0G1MxhvUpCkxCEIj7sE8/e5ieTheT//uw==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 dev: true /babel-plugin-istanbul@6.1.1: @@ -6157,27 +7528,27 @@ packages: resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/template': 7.20.7 - '@babel/types': 7.21.5 - '@types/babel__core': 7.20.0 - '@types/babel__traverse': 7.18.5 + '@babel/template': 7.21.9 + '@babel/types': 7.22.0 + '@types/babel__core': 7.20.1 + '@types/babel__traverse': 7.20.0 dev: true /babel-plugin-jest-hoist@29.5.0: resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/template': 7.20.7 - '@babel/types': 7.21.5 - '@types/babel__core': 7.20.0 - '@types/babel__traverse': 7.18.5 + '@babel/template': 7.21.9 + '@babel/types': 7.22.0 + '@types/babel__core': 7.20.1 + '@types/babel__traverse': 7.20.0 dev: true /babel-plugin-macros@3.1.0: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.0 cosmiconfig: 7.1.0 resolve: 1.22.2 dev: true @@ -6193,47 +7564,83 @@ packages: resolve: 1.22.2 dev: false - /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.21.8): - resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} + /babel-plugin-polyfill-corejs2@0.4.3(@babel/core@7.12.9): + resolution: {integrity: sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.0 + '@babel/core': 7.12.9 + '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.12.9) + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-corejs2@0.4.3(@babel/core@7.22.1): + resolution: {integrity: sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.7 - '@babel/core': 7.21.8 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.8) + '@babel/compat-data': 7.22.0 + '@babel/core': 7.22.1 + '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.1) semver: 6.3.0 transitivePeerDependencies: - supports-color - /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.21.8): - resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} + /babel-plugin-polyfill-corejs3@0.8.1(@babel/core@7.12.9): + resolution: {integrity: sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.12.9) + core-js-compat: 3.30.2 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-corejs3@0.8.1(@babel/core@7.22.1): + resolution: {integrity: sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.8) - core-js-compat: 3.30.1 + '@babel/core': 7.22.1 + '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.1) + core-js-compat: 3.30.2 transitivePeerDependencies: - supports-color - /babel-plugin-polyfill-regenerator@0.3.1(@babel/core@7.21.8): + /babel-plugin-polyfill-regenerator@0.3.1(@babel/core@7.22.1): resolution: {integrity: sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.8) + '@babel/core': 7.22.1 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.1) transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.21.8): - resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} + /babel-plugin-polyfill-regenerator@0.5.0(@babel/core@7.12.9): + resolution: {integrity: sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.8) + '@babel/core': 7.12.9 + '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.12.9) + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-regenerator@0.5.0(@babel/core@7.22.1): + resolution: {integrity: sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.1) transitivePeerDependencies: - supports-color @@ -6249,98 +7656,135 @@ packages: resolution: {integrity: sha512-dPgJoT57XC0PqSnLgl2FwNvxFrWlspatX2dkk7yjKQj5HHGw071vAcOf+hqW8ClqcBDMvEbm6mevn5yHAD8mlQ==} dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.21.8): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.12.9): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.8) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.8) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.21.8) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.8) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.8) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.8) - dev: true - - /babel-preset-expo@9.2.2(@babel/core@7.21.8): + '@babel/core': 7.12.9 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.12.9) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.12.9) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.12.9) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.12.9) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.12.9) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.12.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.12.9) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.12.9) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.9) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.12.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.12.9) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.12.9) + dev: true + + /babel-preset-expo@9.2.2(@babel/core@7.12.9): resolution: {integrity: sha512-69cSPObZWFz0AaUT6IhCu2VzPVTICUtXzhX5ecoDttFe+9wb9yMV8m7rBNZptJQ3wtiKB5iEL7/wvtKygPz/mQ==} dependencies: - '@babel/plugin-proposal-decorators': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-transform-react-jsx': 7.21.5(@babel/core@7.21.8) - '@babel/preset-env': 7.21.5(@babel/core@7.21.8) + '@babel/plugin-proposal-decorators': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.12.9) + '@babel/plugin-transform-react-jsx': 7.22.0(@babel/core@7.12.9) + '@babel/preset-env': 7.22.2(@babel/core@7.12.9) babel-plugin-module-resolver: 4.1.0 babel-plugin-react-native-web: 0.18.12 - metro-react-native-babel-preset: 0.72.3(@babel/core@7.21.8) + metro-react-native-babel-preset: 0.72.3(@babel/core@7.12.9) transitivePeerDependencies: - '@babel/core' - supports-color dev: false - /babel-preset-fbjs@3.4.0(@babel/core@7.21.8): + /babel-preset-fbjs@3.4.0(@babel/core@7.12.9): + resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.12.9 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.12.9) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.12.9) + '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.12.9) + '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.12.9) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.9) + '@babel/plugin-transform-arrow-functions': 7.21.5(@babel/core@7.12.9) + '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.12.9) + '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.12.9) + '@babel/plugin-transform-computed-properties': 7.21.5(@babel/core@7.12.9) + '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.12.9) + '@babel/plugin-transform-flow-strip-types': 7.21.0(@babel/core@7.12.9) + '@babel/plugin-transform-for-of': 7.21.5(@babel/core@7.12.9) + '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.12.9) + '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.12.9) + '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.12.9) + '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-parameters': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-react-jsx': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.12.9) + '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.12.9) + babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-preset-fbjs@3.4.0(@babel/core@7.22.1): resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.8) - '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.21.8) - '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.8) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-transform-arrow-functions': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-transform-computed-properties': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.8) - '@babel/plugin-transform-flow-strip-types': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-transform-for-of': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.8) - '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-react-jsx': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.8) + '@babel/core': 7.22.1 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.22.1) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.1) + '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.22.1) + '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.22.1) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.1) + '@babel/plugin-transform-arrow-functions': 7.21.5(@babel/core@7.22.1) + '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.22.1) + '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.22.1) + '@babel/plugin-transform-computed-properties': 7.21.5(@babel/core@7.22.1) + '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.22.1) + '@babel/plugin-transform-flow-strip-types': 7.21.0(@babel/core@7.22.1) + '@babel/plugin-transform-for-of': 7.21.5(@babel/core@7.22.1) + '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.22.1) + '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.22.1) + '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.22.1) + '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-parameters': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-react-jsx': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.22.1) + '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.22.1) babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 transitivePeerDependencies: - supports-color dev: false - /babel-preset-jest@27.5.1(@babel/core@7.21.8): + /babel-preset-jest@27.5.1(@babel/core@7.12.9): resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 babel-plugin-jest-hoist: 27.5.1 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.8) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.12.9) dev: true - /babel-preset-jest@29.5.0(@babel/core@7.21.8): + /babel-preset-jest@29.5.0(@babel/core@7.12.9): resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 babel-plugin-jest-hoist: 29.5.0 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.8) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.12.9) dev: true /bail@2.0.2: @@ -6631,8 +8075,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001482 - electron-to-chromium: 1.4.380 + caniuse-lite: 1.0.30001489 + electron-to-chromium: 1.4.411 escalade: 3.1.1 node-releases: 1.1.77 dev: false @@ -6642,9 +8086,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001482 - electron-to-chromium: 1.4.380 - node-releases: 2.0.10 + caniuse-lite: 1.0.30001489 + electron-to-chromium: 1.4.411 + node-releases: 2.0.12 update-browserslist-db: 1.0.11(browserslist@4.21.5) /bs-logger@0.2.6: @@ -6721,7 +8165,7 @@ packages: /builtins@5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: - semver: 7.5.0 + semver: 7.5.1 dev: true /bundle-name@3.0.0: @@ -6795,7 +8239,7 @@ packages: promise-inflight: 1.0.1(bluebird@3.7.2) rimraf: 3.0.2 ssri: 8.0.1 - tar: 6.1.14 + tar: 6.1.15 unique-filename: 1.1.1 transitivePeerDependencies: - bluebird @@ -6820,19 +8264,19 @@ packages: promise-inflight: 1.0.1(bluebird@3.7.2) rimraf: 3.0.2 ssri: 9.0.1 - tar: 6.1.14 + tar: 6.1.11 unique-filename: 2.0.1 transitivePeerDependencies: - bluebird dev: true - /cacache@17.1.0: - resolution: {integrity: sha512-hXpFU+Z3AfVmNuiLve1qxWHMq0RSIt5gjCKAHi/M6DktwFwDdAXAtunl1i4WSKaaVcU9IsRvXFg42jTHigcC6Q==} + /cacache@17.1.3: + resolution: {integrity: sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: '@npmcli/fs': 3.1.0 fs-minipass: 3.0.2 - glob: 10.2.2 + glob: 10.2.6 lru-cache: 7.18.3 minipass: 5.0.0 minipass-collect: 1.0.2 @@ -6840,7 +8284,7 @@ packages: minipass-pipeline: 1.2.4 p-map: 4.0.0 ssri: 10.0.4 - tar: 6.1.14 + tar: 6.1.11 unique-filename: 3.0.0 dev: true @@ -6881,7 +8325,7 @@ packages: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 /caller-callsite@2.0.0: resolution: {integrity: sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==} @@ -6911,7 +8355,7 @@ packages: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} dependencies: pascal-case: 3.1.2 - tslib: 2.5.0 + tslib: 2.3.1 dev: false /camelcase-css@2.0.1: @@ -6940,13 +8384,13 @@ packages: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: browserslist: 4.21.5 - caniuse-lite: 1.0.30001482 + caniuse-lite: 1.0.30001489 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: false - /caniuse-lite@1.0.30001482: - resolution: {integrity: sha512-F1ZInsg53cegyjroxLNW9DmrEQ1SuGRTO1QlpA0o2/6OpQ0gFeDRoq1yFmnr8Sakn9qwwt9DmbxHB6w167OSuQ==} + /caniuse-lite@1.0.30001489: + resolution: {integrity: sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==} /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -7624,8 +9068,8 @@ packages: - bluebird dev: false - /core-js-compat@3.30.1: - resolution: {integrity: sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw==} + /core-js-compat@3.30.2: + resolution: {integrity: sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA==} dependencies: browserslist: 4.21.5 @@ -7703,10 +9147,10 @@ packages: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true - /cross-fetch@3.1.5: - resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} + /cross-fetch@3.1.6: + resolution: {integrity: sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==} dependencies: - node-fetch: 2.6.7 + node-fetch: 2.6.11 transitivePeerDependencies: - encoding dev: false @@ -8098,7 +9542,7 @@ packages: array-buffer-byte-length: 1.0.0 call-bind: 1.0.2 es-get-iterator: 1.1.3 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 is-arguments: 1.1.1 is-array-buffer: 3.0.2 is-date-object: 1.0.5 @@ -8223,7 +9667,7 @@ packages: ast-types: 0.13.4 escodegen: 1.14.3 esprima: 4.0.1 - vm2: 3.9.17 + vm2: 3.9.19 dev: true /del@4.1.1: @@ -8258,7 +9702,7 @@ packages: engines: {node: '>=10'} dependencies: globby: 11.1.0 - graceful-fs: 4.2.11 + graceful-fs: 4.2.10 is-glob: 4.0.3 is-path-cwd: 2.2.0 is-path-inside: 3.0.3 @@ -8496,7 +9940,7 @@ packages: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: no-case: 3.0.4 - tslib: 2.5.0 + tslib: 2.3.1 dev: false /dot-prop@5.3.0: @@ -8522,31 +9966,31 @@ packages: engines: {node: '>=12'} dev: true - /dts-cli@1.4.0(@babel/plugin-syntax-flow@7.21.4)(@babel/plugin-transform-react-jsx@7.21.5)(@types/node@17.0.23): + /dts-cli@1.4.0(@babel/plugin-syntax-flow@7.21.4)(@babel/plugin-transform-react-jsx@7.22.0)(@types/node@17.0.23): resolution: {integrity: sha512-bcjolZYKh51WPurWUayO85XaqccE26yWiAd5+JCZU8YFWAJgcp+UGFke3OwmJvo7WKX3e48FuvzFezUkd+eFSg==} engines: {node: '>=12.0.0'} hasBin: true dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@babel/helper-module-imports': 7.21.4 - '@babel/parser': 7.21.8 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.8) - '@babel/preset-env': 7.21.5(@babel/core@7.21.8) - '@babel/traverse': 7.21.5 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.21.8)(rollup@2.79.1) + '@babel/parser': 7.22.0 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.1) + '@babel/preset-env': 7.22.2(@babel/core@7.22.1) + '@babel/traverse': 7.22.1 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.22.1)(rollup@2.79.1) '@rollup/plugin-commonjs': 21.1.0(rollup@2.79.1) '@rollup/plugin-json': 4.1.0(rollup@2.79.1) '@rollup/plugin-node-resolve': 13.3.0(rollup@2.79.1) '@rollup/plugin-replace': 3.1.0(rollup@2.79.1) '@types/jest': 27.5.2 - '@typescript-eslint/eslint-plugin': 5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.39.0)(typescript@4.9.5) - '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@4.9.5) + '@typescript-eslint/eslint-plugin': 5.59.7(@typescript-eslint/parser@5.59.7)(eslint@8.39.0)(typescript@4.6.3) + '@typescript-eslint/parser': 5.59.7(eslint@8.39.0)(typescript@4.6.3) ansi-escapes: 4.3.2 asyncro: 3.0.0 - babel-plugin-annotate-pure-calls: 0.4.0(@babel/core@7.21.8) - babel-plugin-dev-expression: 0.2.3(@babel/core@7.21.8) + babel-plugin-annotate-pure-calls: 0.4.0(@babel/core@7.22.1) + babel-plugin-dev-expression: 0.2.3(@babel/core@7.22.1) babel-plugin-macros: 3.1.0 - babel-plugin-polyfill-regenerator: 0.3.1(@babel/core@7.21.8) + babel-plugin-polyfill-regenerator: 0.3.1(@babel/core@7.22.1) babel-plugin-transform-rename-import: 2.3.0 camelcase: 6.3.0 chalk: 4.1.2 @@ -8554,14 +9998,14 @@ packages: enquirer: 2.3.6 eslint: 8.39.0 eslint-config-prettier: 8.8.0(eslint@8.39.0) - eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.21.4)(@babel/plugin-transform-react-jsx@7.21.5)(eslint@8.39.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) - eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@27.5.1)(typescript@4.9.5) + eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.21.4)(@babel/plugin-transform-react-jsx@7.22.0)(eslint@8.39.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) + eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.7)(eslint@8.39.0)(jest@27.5.1)(typescript@4.6.3) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8) eslint-plugin-react: 7.32.2(eslint@8.39.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.39.0) - eslint-plugin-testing-library: 5.10.3(eslint@8.39.0)(typescript@4.9.5) + eslint-plugin-testing-library: 5.11.0(eslint@8.39.0)(typescript@4.6.3) execa: 4.1.0 figlet: 1.6.0 fs-extra: 10.1.0 @@ -8577,20 +10021,20 @@ packages: regenerator-runtime: 0.13.11 rollup: 2.79.1 rollup-plugin-delete: 2.0.0 - rollup-plugin-dts: 4.2.3(rollup@2.79.1)(typescript@4.9.5) + rollup-plugin-dts: 4.2.3(rollup@2.79.1)(typescript@4.6.3) rollup-plugin-sourcemaps: 0.6.3(@types/node@17.0.23)(rollup@2.79.1) rollup-plugin-terser: 7.0.2(rollup@2.79.1) - rollup-plugin-typescript2: 0.31.2(rollup@2.79.1)(typescript@4.9.5) + rollup-plugin-typescript2: 0.31.2(rollup@2.79.1)(typescript@4.6.3) sade: 1.8.1 - semver: 7.5.0 + semver: 7.5.1 shelljs: 0.8.5 sort-package-json: 1.57.0 tiny-glob: 0.2.9 - ts-jest: 27.1.5(@babel/core@7.21.8)(@types/jest@27.5.2)(jest@27.5.1)(typescript@4.9.5) - ts-node: 10.9.1(@types/node@17.0.23)(typescript@4.9.5) - tslib: 2.5.0 + ts-jest: 27.1.5(@babel/core@7.22.1)(@types/jest@27.5.2)(jest@27.5.1)(typescript@4.6.3) + ts-node: 10.9.1(@types/node@17.0.23)(typescript@4.6.3) + tslib: 2.3.1 type-fest: 2.19.0 - typescript: 4.9.5 + typescript: 4.6.3 transitivePeerDependencies: - '@babel/plugin-syntax-flow' - '@babel/plugin-transform-react-jsx' @@ -8632,11 +10076,11 @@ packages: engines: {node: '>=0.10.0'} hasBin: true dependencies: - jake: 10.8.5 + jake: 10.8.6 dev: true - /electron-to-chromium@1.4.380: - resolution: {integrity: sha512-XKGdI4pWM78eLH2cbXJHiBnWUwFSzZM7XujsB6stDiGu9AeSqziedP6amNLpJzE3i0rLTcfAwdCTs5ecP5yeSg==} + /electron-to-chromium@1.4.411: + resolution: {integrity: sha512-5VXLW4Qw89vM2WTICHua/y8v7fKGDRVa2VPOtBB9IpLvW316B+xd8yD1wTmLPY2ot/00P/qt87xdolj4aG/Lzg==} /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} @@ -8700,8 +10144,8 @@ packages: tapable: 1.1.3 dev: false - /enhanced-resolve@5.13.0: - resolution: {integrity: sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==} + /enhanced-resolve@5.14.1: + resolution: {integrity: sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 @@ -8783,7 +10227,7 @@ packages: es-set-tostringtag: 2.0.1 es-to-primitive: 1.2.1 function.prototype.name: 1.1.5 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 get-symbol-description: 1.0.0 globalthis: 1.0.3 gopd: 1.0.1 @@ -8820,7 +10264,7 @@ packages: resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 has-symbols: 1.0.3 is-arguments: 1.1.1 is-map: 2.0.2 @@ -8834,7 +10278,7 @@ packages: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 has: 1.0.3 has-tostringtag: 1.0.0 @@ -8963,20 +10407,50 @@ packages: source-map: 0.6.1 dev: true + /eslint-config-molindo@6.0.0(eslint@8.39.0)(jest@27.4.5): + resolution: {integrity: sha512-kZ/SZBJIejZY45HVn9q0WSkF1mhvem+7FmxDF7mNfCepGEGrjID2mNlOuWAShBTidzpukMQ7qKhkjV5JVmO91w==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^8.0.0 + dependencies: + '@rushstack/eslint-patch': 1.3.0 + '@typescript-eslint/eslint-plugin': 5.59.7(@typescript-eslint/parser@5.59.7)(eslint@8.39.0)(typescript@4.6.3) + '@typescript-eslint/parser': 5.59.7(eslint@8.39.0)(typescript@4.6.3) + confusing-browser-globals: 1.0.11 + eslint: 8.39.0 + eslint-plugin-css-modules: 2.11.0(eslint@8.39.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) + eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.7)(eslint@8.39.0)(jest@27.4.5)(typescript@4.6.3) + eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) + eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8) + eslint-plugin-react: 7.32.2(eslint@8.39.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.39.0) + eslint-plugin-sort-destructure-keys: 1.5.0(eslint@8.39.0) + eslint-plugin-unicorn: 41.0.1(eslint@8.39.0) + prettier: 2.8.8 + typescript: 4.6.3 + transitivePeerDependencies: + - eslint-config-prettier + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - jest + - supports-color + dev: true + /eslint-config-molindo@6.0.0(eslint@8.39.0)(jest@27.5.1): resolution: {integrity: sha512-kZ/SZBJIejZY45HVn9q0WSkF1mhvem+7FmxDF7mNfCepGEGrjID2mNlOuWAShBTidzpukMQ7qKhkjV5JVmO91w==} engines: {node: '>=10'} peerDependencies: eslint: ^8.0.0 dependencies: - '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/eslint-plugin': 5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.39.0)(typescript@4.9.5) - '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@4.9.5) + '@rushstack/eslint-patch': 1.3.0 + '@typescript-eslint/eslint-plugin': 5.59.7(@typescript-eslint/parser@5.59.7)(eslint@8.39.0)(typescript@4.6.3) + '@typescript-eslint/parser': 5.59.7(eslint@8.39.0)(typescript@4.6.3) confusing-browser-globals: 1.0.11 eslint: 8.39.0 eslint-plugin-css-modules: 2.11.0(eslint@8.39.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) - eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@27.5.1)(typescript@4.9.5) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) + eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.7)(eslint@8.39.0)(jest@27.5.1)(typescript@4.6.3) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8) eslint-plugin-react: 7.32.2(eslint@8.39.0) @@ -8984,7 +10458,7 @@ packages: eslint-plugin-sort-destructure-keys: 1.5.0(eslint@8.39.0) eslint-plugin-unicorn: 41.0.1(eslint@8.39.0) prettier: 2.8.8 - typescript: 4.9.5 + typescript: 4.6.3 transitivePeerDependencies: - eslint-config-prettier - eslint-import-resolver-typescript @@ -8999,14 +10473,14 @@ packages: peerDependencies: eslint: ^8.0.0 dependencies: - '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/eslint-plugin': 5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.39.0)(typescript@4.9.5) - '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@4.9.5) + '@rushstack/eslint-patch': 1.3.0 + '@typescript-eslint/eslint-plugin': 5.59.7(@typescript-eslint/parser@5.59.7)(eslint@8.39.0)(typescript@4.6.3) + '@typescript-eslint/parser': 5.59.7(eslint@8.39.0)(typescript@4.6.3) confusing-browser-globals: 1.0.11 eslint: 8.39.0 eslint-plugin-css-modules: 2.11.0(eslint@8.39.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) - eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@29.5.0)(typescript@4.9.5) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) + eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.7)(eslint@8.39.0)(jest@29.5.0)(typescript@4.6.3) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8) eslint-plugin-react: 7.32.2(eslint@8.39.0) @@ -9014,7 +10488,7 @@ packages: eslint-plugin-sort-destructure-keys: 1.5.0(eslint@8.39.0) eslint-plugin-unicorn: 41.0.1(eslint@8.39.0) prettier: 2.8.8 - typescript: 4.9.5 + typescript: 4.6.3 transitivePeerDependencies: - eslint-config-prettier - eslint-import-resolver-typescript @@ -9023,7 +10497,7 @@ packages: - supports-color dev: true - /eslint-config-next@13.4.0(eslint@8.39.0)(typescript@4.9.5): + /eslint-config-next@13.4.0(eslint@8.39.0)(typescript@4.6.3): resolution: {integrity: sha512-FkO3QRyUEKAHM4ie0xAcxo7fQ8gWevuLqgf6/g1Y6zWybqSa4FNeJr4hqqTbP25xIRgUUIPILBlx9RSH4C6+gQ==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 @@ -9033,16 +10507,16 @@ packages: optional: true dependencies: '@next/eslint-plugin-next': 13.4.0 - '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@4.9.5) + '@rushstack/eslint-patch': 1.3.0 + '@typescript-eslint/parser': 5.59.7(eslint@8.39.0)(typescript@4.6.3) eslint: 8.39.0 eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.39.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) + eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.39.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) eslint-plugin-react: 7.32.2(eslint@8.39.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.39.0) - typescript: 4.9.5 + typescript: 4.6.3 transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color @@ -9061,13 +10535,13 @@ packages: resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} dependencies: debug: 3.2.7(supports-color@6.1.0) - is-core-module: 2.12.0 + is-core-module: 2.12.1 resolve: 1.22.2 transitivePeerDependencies: - supports-color dev: true - /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.39.0): + /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.39.0): resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -9075,13 +10549,13 @@ packages: eslint-plugin-import: '*' dependencies: debug: 4.3.4(supports-color@6.1.0) - enhanced-resolve: 5.13.0 + enhanced-resolve: 5.14.1 eslint: 8.39.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) get-tsconfig: 4.5.0 globby: 13.1.4 - is-core-module: 2.12.0 + is-core-module: 2.12.1 is-glob: 4.0.3 synckit: 0.8.5 transitivePeerDependencies: @@ -9091,7 +10565,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -9112,11 +10586,11 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.59.7(eslint@8.39.0)(typescript@4.6.3) debug: 3.2.7(supports-color@6.1.0) eslint: 8.39.0 eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.39.0) + eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.39.0) transitivePeerDependencies: - supports-color dev: true @@ -9132,22 +10606,22 @@ packages: lodash: 4.17.21 dev: true - /eslint-plugin-deprecation@1.4.1(eslint@8.39.0)(typescript@4.9.5): + /eslint-plugin-deprecation@1.4.1(eslint@8.39.0)(typescript@4.6.3): resolution: {integrity: sha512-4vxTghWzxsBukPJVQupi6xlTuDc8Pyi1QlRCrFiLgwLPMJQW3cJCNaehJUKQqQFvuue5m4W27e179Y3Qjzeghg==} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 typescript: ^3.7.5 || ^4.0.0 || ^5.0.0 dependencies: - '@typescript-eslint/utils': 5.59.2(eslint@8.39.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.59.7(eslint@8.39.0)(typescript@4.6.3) eslint: 8.39.0 - tslib: 2.5.0 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 + tslib: 2.3.1 + tsutils: 3.21.0(typescript@4.6.3) + typescript: 4.6.3 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.21.4)(@babel/plugin-transform-react-jsx@7.21.5)(eslint@8.39.0): + /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.21.4)(@babel/plugin-transform-react-jsx@7.22.0)(eslint@8.39.0): resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -9155,14 +10629,14 @@ packages: '@babel/plugin-transform-react-jsx': ^7.14.9 eslint: ^8.1.0 dependencies: - '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.21.8) - '@babel/plugin-transform-react-jsx': 7.21.5(@babel/core@7.21.8) + '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.12.9) + '@babel/plugin-transform-react-jsx': 7.22.0(@babel/core@7.12.9) eslint: 8.39.0 lodash: 4.17.21 string-natural-compare: 3.0.1 dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0): + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -9172,7 +10646,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.59.7(eslint@8.39.0)(typescript@4.6.3) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 @@ -9180,9 +10654,9 @@ packages: doctrine: 2.1.0 eslint: 8.39.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.7)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) has: 1.0.3 - is-core-module: 2.12.0 + is-core-module: 2.12.1 is-glob: 4.0.3 minimatch: 3.1.2 object.values: 1.1.6 @@ -9195,7 +10669,29 @@ packages: - supports-color dev: true - /eslint-plugin-jest@26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@27.5.1)(typescript@4.9.5): + /eslint-plugin-jest@26.9.0(@typescript-eslint/eslint-plugin@5.59.7)(eslint@8.39.0)(jest@27.4.5)(typescript@4.6.3): + resolution: {integrity: sha512-TWJxWGp1J628gxh2KhaH1H1paEdgE2J61BBF1I59c6xWeL5+D1BzMxGDN/nXAfX+aSkR5u80K+XhskK6Gwq9ng==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 5.59.7(@typescript-eslint/parser@5.59.7)(eslint@8.39.0)(typescript@4.6.3) + '@typescript-eslint/utils': 5.59.7(eslint@8.39.0)(typescript@4.6.3) + eslint: 8.39.0 + jest: 27.4.5 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-jest@26.9.0(@typescript-eslint/eslint-plugin@5.59.7)(eslint@8.39.0)(jest@27.5.1)(typescript@4.6.3): resolution: {integrity: sha512-TWJxWGp1J628gxh2KhaH1H1paEdgE2J61BBF1I59c6xWeL5+D1BzMxGDN/nXAfX+aSkR5u80K+XhskK6Gwq9ng==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -9208,8 +10704,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.39.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.59.2(eslint@8.39.0)(typescript@4.9.5) + '@typescript-eslint/eslint-plugin': 5.59.7(@typescript-eslint/parser@5.59.7)(eslint@8.39.0)(typescript@4.6.3) + '@typescript-eslint/utils': 5.59.7(eslint@8.39.0)(typescript@4.6.3) eslint: 8.39.0 jest: 27.5.1(ts-node@10.9.1) transitivePeerDependencies: @@ -9217,7 +10713,7 @@ packages: - typescript dev: true - /eslint-plugin-jest@26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@29.5.0)(typescript@4.9.5): + /eslint-plugin-jest@26.9.0(@typescript-eslint/eslint-plugin@5.59.7)(eslint@8.39.0)(jest@29.5.0)(typescript@4.6.3): resolution: {integrity: sha512-TWJxWGp1J628gxh2KhaH1H1paEdgE2J61BBF1I59c6xWeL5+D1BzMxGDN/nXAfX+aSkR5u80K+XhskK6Gwq9ng==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -9230,8 +10726,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.39.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.59.2(eslint@8.39.0)(typescript@4.9.5) + '@typescript-eslint/eslint-plugin': 5.59.7(@typescript-eslint/parser@5.59.7)(eslint@8.39.0)(typescript@4.6.3) + '@typescript-eslint/utils': 5.59.7(eslint@8.39.0)(typescript@4.6.3) eslint: 8.39.0 jest: 29.5.0(@types/node@17.0.23) transitivePeerDependencies: @@ -9245,12 +10741,12 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.0 aria-query: 5.1.3 array-includes: 3.1.6 array.prototype.flatmap: 1.3.1 ast-types-flow: 0.0.7 - axe-core: 4.7.0 + axe-core: 4.7.2 axobject-query: 3.1.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 @@ -9324,13 +10820,13 @@ packages: natural-compare-lite: 1.4.0 dev: true - /eslint-plugin-testing-library@5.10.3(eslint@8.39.0)(typescript@4.9.5): - resolution: {integrity: sha512-0yhsKFsjHLud5PM+f2dWr9K3rqYzMy4cSHs3lcmFYMa1CdSzRvHGgXvsFarBjZ41gU8jhTdMIkg8jHLxGJqLqw==} + /eslint-plugin-testing-library@5.11.0(eslint@8.39.0)(typescript@4.6.3): + resolution: {integrity: sha512-ELY7Gefo+61OfXKlQeXNIDVVLPcvKTeiQOoMZG9TeuWa7Ln4dUNRv8JdRWBQI9Mbb427XGlVB1aa1QPZxBJM8Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.59.2(eslint@8.39.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.59.7(eslint@8.39.0)(typescript@4.6.3) eslint: 8.39.0 transitivePeerDependencies: - supports-color @@ -9356,7 +10852,7 @@ packages: read-pkg-up: 7.0.1 regexp-tree: 0.1.27 safe-regex: 2.1.1 - semver: 7.5.0 + semver: 7.5.1 strip-indent: 3.0.0 dev: true @@ -9399,8 +10895,8 @@ packages: engines: {node: '>=10'} dev: true - /eslint-visitor-keys@3.4.0: - resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} + /eslint-visitor-keys@3.4.1: + resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -9411,7 +10907,7 @@ packages: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.39.0) '@eslint-community/regexpp': 4.5.1 - '@eslint/eslintrc': 2.0.2 + '@eslint/eslintrc': 2.0.3 '@eslint/js': 8.39.0 '@humanwhocodes/config-array': 0.11.8 '@humanwhocodes/module-importer': 1.0.1 @@ -9423,8 +10919,8 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.0 - eslint-visitor-keys: 3.4.0 - espree: 9.5.1 + eslint-visitor-keys: 3.4.1 + espree: 9.5.2 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -9453,13 +10949,13 @@ packages: - supports-color dev: true - /espree@9.5.1: - resolution: {integrity: sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==} + /espree@9.5.2: + resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: acorn: 8.8.2 acorn-jsx: 5.3.2(acorn@8.8.2) - eslint-visitor-keys: 3.4.0 + eslint-visitor-keys: 3.4.1 dev: true /esprima@4.0.1: @@ -9511,7 +11007,7 @@ packages: resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==} dependencies: '@types/estree-jsx': 1.0.0 - astring: 1.8.4 + astring: 1.8.5 source-map: 0.7.4 dev: false @@ -9632,9 +11128,9 @@ packages: engines: {node: '>=10'} dependencies: cross-spawn: 7.0.3 - get-stream: 6.0.1 + get-stream: 6.0.0 human-signals: 2.1.0 - is-stream: 2.0.1 + is-stream: 2.0.0 merge-stream: 2.0.0 npm-run-path: 4.0.1 onetime: 5.1.2 @@ -9723,7 +11219,7 @@ packages: peerDependencies: expo: '*' dependencies: - expo: 47.0.12(@babel/core@7.21.8) + expo: 47.0.12(@babel/core@7.12.9) dev: false /expo-asset@8.7.0(expo@47.0.12): @@ -9747,7 +11243,7 @@ packages: expo: '*' dependencies: '@expo/config': 7.0.3 - expo: 47.0.12(@babel/core@7.21.8) + expo: 47.0.12(@babel/core@7.12.9) uuid: 3.4.0 transitivePeerDependencies: - supports-color @@ -9759,7 +11255,7 @@ packages: peerDependencies: expo: '*' dependencies: - expo: 47.0.12(@babel/core@7.21.8) + expo: 47.0.12(@babel/core@7.12.9) dev: false optional: true @@ -9768,7 +11264,7 @@ packages: peerDependencies: expo: '*' dependencies: - expo: 47.0.12(@babel/core@7.21.8) + expo: 47.0.12(@babel/core@7.12.9) uuid: 3.4.0 dev: false @@ -9777,7 +11273,7 @@ packages: peerDependencies: expo: '*' dependencies: - expo: 47.0.12(@babel/core@7.21.8) + expo: 47.0.12(@babel/core@7.12.9) fontfaceobserver: 2.3.0 dev: false @@ -9786,7 +11282,7 @@ packages: peerDependencies: expo: '*' dependencies: - expo: 47.0.12(@babel/core@7.21.8) + expo: 47.0.12(@babel/core@7.12.9) dev: false /expo-modules-autolinking@1.0.1: @@ -9816,7 +11312,7 @@ packages: '@expo/image-utils': 0.3.22 chalk: 4.1.2 commander: 2.20.0 - expo: 47.0.12(@babel/core@7.21.8) + expo: 47.0.12(@babel/core@7.12.9) update-check: 1.5.3 transitivePeerDependencies: - encoding @@ -9826,16 +11322,16 @@ packages: resolution: {integrity: sha512-ZWjO6D4ARGYfAd3SWDD3STNudHDhyBZDZjhhseqoEmsf7bS9ykny8KKOhlzJW24qIQNPhkgdvHhaw9fQwMJy3Q==} dev: false - /expo@47.0.12(@babel/core@7.21.8): + /expo@47.0.12(@babel/core@7.12.9): resolution: {integrity: sha512-LqECuBpV6arTncksQzOGGQmxOdeQmzm15VqwIJ/c3SWoxiVh5hKf+taUv2oaLmfx2z04TSm1oo56pRSrsL5iIA==} hasBin: true dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.0 '@expo/cli': 0.4.11(expo-modules-autolinking@1.0.1) '@expo/config': 7.0.3 '@expo/config-plugins': 5.0.4 '@expo/vector-icons': 13.0.0 - babel-preset-expo: 9.2.2(@babel/core@7.21.8) + babel-preset-expo: 9.2.2(@babel/core@7.12.9) cross-spawn: 6.0.5 expo-application: 5.0.1(expo@47.0.12) expo-asset: 8.7.0(expo@47.0.12) @@ -9849,7 +11345,7 @@ packages: getenv: 1.0.0 invariant: 2.2.4 md5-file: 3.2.3 - node-fetch: 2.6.9 + node-fetch: 2.6.11 pretty-format: 26.6.2 uuid: 3.4.0 optionalDependencies: @@ -9945,8 +11441,8 @@ packages: /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - /fast-diff@1.2.0: - resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} + /fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} dev: true /fast-glob@3.2.11: @@ -10041,7 +11537,7 @@ packages: /fbjs@3.0.4: resolution: {integrity: sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==} dependencies: - cross-fetch: 3.1.5 + cross-fetch: 3.1.6 fbjs-css-vars: 1.0.2 loose-envify: 1.4.0 object-assign: 4.1.1 @@ -10093,7 +11589,6 @@ packages: /file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - requiresBuild: true optional: true /file-uri-to-path@2.0.0: @@ -10287,10 +11782,10 @@ packages: engines: {node: '>=14'} dependencies: cross-spawn: 7.0.3 - signal-exit: 4.0.1 + signal-exit: 4.0.2 dev: true - /fork-ts-checker-webpack-plugin@4.1.6(typescript@4.9.5)(webpack@4.43.0): + /fork-ts-checker-webpack-plugin@4.1.6(typescript@4.6.3)(webpack@4.43.0): resolution: {integrity: sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==} engines: {node: '>=6.11.5', yarn: '>=1.0.0'} peerDependencies: @@ -10304,13 +11799,13 @@ packages: vue-template-compiler: optional: true dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.10.4 chalk: 2.4.2 micromatch: 3.1.10(supports-color@6.1.0) minimatch: 3.1.2 semver: 5.7.1 tapable: 1.1.3 - typescript: 4.9.5 + typescript: 4.6.3 webpack: 4.43.0 worker-rpc: 0.1.1 transitivePeerDependencies: @@ -10395,7 +11890,7 @@ packages: resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} engines: {node: '>=14.14'} dependencies: - graceful-fs: 4.2.11 + graceful-fs: 4.2.10 jsonfile: 6.1.0 universalify: 2.0.0 dev: true @@ -10432,7 +11927,7 @@ packages: engines: {node: '>=10'} dependencies: at-least-node: 1.0.0 - graceful-fs: 4.2.11 + graceful-fs: 4.2.10 jsonfile: 6.1.0 universalify: 2.0.0 @@ -10525,7 +12020,7 @@ packages: color-support: 1.1.3 console-control-strings: 1.1.0 has-unicode: 2.0.1 - signal-exit: 4.0.1 + signal-exit: 4.0.2 string-width: 4.2.3 strip-ansi: 6.0.1 wide-align: 1.1.5 @@ -10545,11 +12040,12 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - /get-intrinsic@1.2.0: - resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} + /get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} dependencies: function-bind: 1.1.1 has: 1.0.3 + has-proto: 1.0.1 has-symbols: 1.0.3 /get-package-type@0.1.0: @@ -10612,7 +12108,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 /get-tsconfig@4.5.0: resolution: {integrity: sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==} @@ -10719,16 +12215,16 @@ packages: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true - /glob@10.2.2: - resolution: {integrity: sha512-Xsa0BcxIC6th9UwNjZkhrMtNo/MnyRL8jGCP+uEwhA5oFOCY1f2s1/oNKY47xQ0Bg5nkjsfAEIej1VeH62bDDQ==} + /glob@10.2.6: + resolution: {integrity: sha512-U/rnDpXJGF414QQQZv5uVsabTVxMSwzS5CH0p3DRCIV6ownl4f7PzGnkGmvlum2wB+9RlJWJZ6ACU1INnBqiPA==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true dependencies: foreground-child: 3.1.1 - jackspeak: 2.2.0 - minimatch: 9.0.0 - minipass: 5.0.0 - path-scurry: 1.7.0 + jackspeak: 2.2.1 + minimatch: 9.0.1 + minipass: 6.0.2 + path-scurry: 1.9.2 dev: true /glob@6.0.4: @@ -10748,7 +12244,7 @@ packages: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 3.0.5 once: 1.4.0 path-is-absolute: 1.0.1 dev: true @@ -10803,7 +12299,7 @@ packages: fs.realpath: 1.0.0 minimatch: 8.0.4 minipass: 4.2.8 - path-scurry: 1.7.0 + path-scurry: 1.9.2 dev: true /global-modules@2.0.0: @@ -10850,7 +12346,7 @@ packages: '@types/glob': 7.2.0 array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.12 + fast-glob: 3.2.11 glob: 7.2.3 ignore: 5.2.4 merge2: 1.4.1 @@ -10931,7 +12427,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 /got@11.8.6: resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} @@ -10952,7 +12448,6 @@ packages: /graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - dev: true /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -10968,7 +12463,7 @@ packages: 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 dependencies: graphql: 15.8.0 - tslib: 2.5.0 + tslib: 2.3.1 dev: false /graphql@15.8.0: @@ -11047,7 +12542,7 @@ packages: /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} @@ -11141,17 +12636,18 @@ packages: dependencies: '@types/hast': 2.3.4 hast-util-from-dom: 4.2.0 - hast-util-from-html: 1.0.1 + hast-util-from-html: 1.0.2 unist-util-remove-position: 4.0.2 dev: false - /hast-util-from-html@1.0.1: - resolution: {integrity: sha512-ehTy+4Lz1YAVF6enEuL9QFUHqJKRxAc8a7KACyhawY+YqTG5pLkrBHfykXELEy75N601fHDr36HIqCGSNxmgZw==} + /hast-util-from-html@1.0.2: + resolution: {integrity: sha512-LhrTA2gfCbLOGJq2u/asp4kwuG0y6NhWTXiPKP+n0qNukKy7hc10whqqCFfyvIA1Q5U5d0sp9HhNim9gglEH4A==} dependencies: '@types/hast': 2.3.4 hast-util-from-parse5: 7.1.2 parse5: 7.1.2 vfile: 5.3.7 + vfile-message: 3.1.4 dev: false /hast-util-from-parse5@7.1.2: @@ -11179,8 +12675,8 @@ packages: '@types/hast': 2.3.4 dev: false - /hast-util-to-estree@2.3.2: - resolution: {integrity: sha512-YYDwATNdnvZi3Qi84iatPIl1lWpXba1MeNrNbDfJfVzEBZL8uUmtR7mt7bxKBC8kuAuvb0bkojXYZzsNHyHCLg==} + /hast-util-to-estree@2.3.3: + resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} dependencies: '@types/estree': 1.0.1 '@types/estree-jsx': 1.0.0 @@ -11563,7 +13059,7 @@ packages: resolution: {integrity: sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - minimatch: 9.0.0 + minimatch: 9.0.1 dev: true /ignore@5.2.4: @@ -11665,7 +13161,7 @@ packages: promzard: 0.3.0 read: 1.0.7 read-package-json: 5.0.1 - semver: 7.5.0 + semver: 7.5.1 validate-npm-package-license: 3.0.4 validate-npm-package-name: 4.0.0 dev: true @@ -11734,7 +13230,7 @@ packages: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 has: 1.0.3 side-channel: 1.0.4 @@ -11752,7 +13248,7 @@ packages: deprecated: We've written a new parser that's 6x faster and is backwards compatible. Please use @formatjs/icu-messageformat-parser dependencies: '@formatjs/ecma402-abstract': 1.4.0 - tslib: 2.5.0 + tslib: 2.3.1 dev: false /intl-messageformat@9.3.18: @@ -11829,7 +13325,7 @@ packages: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 is-typed-array: 1.1.10 /is-arrayish@0.2.1: @@ -11901,8 +13397,8 @@ packages: rgba-regex: 1.0.0 dev: false - /is-core-module@2.12.0: - resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} + /is-core-module@2.12.1: + resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} dependencies: has: 1.0.3 @@ -12268,7 +13764,7 @@ packages: resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 dev: true /is-windows@1.0.2: @@ -12320,8 +13816,8 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.21.8 - '@babel/parser': 7.21.8 + '@babel/core': 7.12.9 + '@babel/parser': 7.22.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -12357,8 +13853,8 @@ packages: istanbul-lib-report: 3.0.0 dev: true - /jackspeak@2.2.0: - resolution: {integrity: sha512-r5XBrqIJfwRIjRt/Xr5fv9Wh09qyhHfKnYddDlpM+ibRR20qrYActpCAgU6U+d53EOEjzkvxPMVHSlgR7leXrQ==} + /jackspeak@2.2.1: + resolution: {integrity: sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==} engines: {node: '>=14'} dependencies: '@isaacs/cliui': 8.0.2 @@ -12366,8 +13862,8 @@ packages: '@pkgjs/parseargs': 0.11.0 dev: true - /jake@10.8.5: - resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} + /jake@10.8.6: + resolution: {integrity: sha512-G43Ub9IYEFfu72sua6rzooi8V8Gz2lkfk48rW20vEWCGizeaEPlKB1Kh8JIA84yQbiAEfqlPmSpGgCKKxH3rDA==} engines: {node: '>=10'} hasBin: true dependencies: @@ -12520,10 +14016,10 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@jest/test-sequencer': 27.5.1 '@jest/types': 27.5.1 - babel-jest: 27.5.1(@babel/core@7.21.8) + babel-jest: 27.5.1(@babel/core@7.12.9) chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.3.1 @@ -12544,7 +14040,7 @@ packages: pretty-format: 27.5.1 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@17.0.23)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@17.0.23)(typescript@4.6.3) transitivePeerDependencies: - bufferutil - canvas @@ -12564,11 +14060,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 '@jest/test-sequencer': 29.5.0 '@jest/types': 29.5.0 '@types/node': 17.0.23 - babel-jest: 29.5.0(@babel/core@7.21.8) + babel-jest: 29.5.0(@babel/core@7.12.9) chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.3.1 @@ -13068,16 +14564,16 @@ packages: resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/core': 7.21.8 - '@babel/generator': 7.21.5 - '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.8) - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 + '@babel/core': 7.12.9 + '@babel/generator': 7.22.0 + '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.12.9) + '@babel/traverse': 7.22.1 + '@babel/types': 7.22.0 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/babel__traverse': 7.18.5 + '@types/babel__traverse': 7.20.0 '@types/prettier': 2.7.2 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.8) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.12.9) chalk: 4.1.2 expect: 27.5.1 graceful-fs: 4.2.11 @@ -13089,7 +14585,7 @@ packages: jest-util: 27.5.1 natural-compare: 1.4.0 pretty-format: 27.5.1 - semver: 7.5.0 + semver: 7.5.1 transitivePeerDependencies: - supports-color dev: true @@ -13098,18 +14594,18 @@ packages: resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.21.8 - '@babel/generator': 7.21.5 - '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.8) - '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.8) - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 + '@babel/core': 7.12.9 + '@babel/generator': 7.22.0 + '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.12.9) + '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.12.9) + '@babel/traverse': 7.22.1 + '@babel/types': 7.22.0 '@jest/expect-utils': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/babel__traverse': 7.18.5 + '@types/babel__traverse': 7.20.0 '@types/prettier': 2.7.2 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.8) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.12.9) chalk: 4.1.2 expect: 29.5.0 graceful-fs: 4.2.11 @@ -13120,7 +14616,7 @@ packages: jest-util: 29.5.0 natural-compare: 1.4.0 pretty-format: 29.5.0 - semver: 7.5.0 + semver: 7.5.1 transitivePeerDependencies: - supports-color dev: true @@ -13253,6 +14749,27 @@ packages: supports-color: 8.1.1 dev: true + /jest@27.4.5: + resolution: {integrity: sha512-uT5MiVN3Jppt314kidCk47MYIRilJjA/l2mxwiuzzxGUeJIvA8/pDaJOAX5KWvjAo7SCydcW0/4WEtgbLMiJkg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 27.5.1(ts-node@10.9.1) + import-local: 3.1.0 + jest-cli: 27.5.1(ts-node@10.9.1) + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: true + /jest@27.5.1(ts-node@10.9.1): resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -13344,23 +14861,23 @@ packages: resolution: {integrity: sha512-KmxeBlRjwoqCnBBKGsihFtvsBHyUFlBxJPK4FzeYcIuBfdjv6jFys44JITAgSTbQD+vIdwMEfyZklsuQX0yI1Q==} dev: false - /jscodeshift@0.13.1(@babel/preset-env@7.21.5): + /jscodeshift@0.13.1(@babel/preset-env@7.22.2): resolution: {integrity: sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==} hasBin: true peerDependencies: '@babel/preset-env': ^7.1.6 dependencies: - '@babel/core': 7.21.8 - '@babel/parser': 7.21.8 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.21.8) - '@babel/preset-env': 7.21.5(@babel/core@7.21.8) - '@babel/preset-flow': 7.21.4(@babel/core@7.21.8) - '@babel/preset-typescript': 7.21.5(@babel/core@7.21.8) - '@babel/register': 7.21.0(@babel/core@7.21.8) - babel-core: 7.0.0-bridge.0(@babel/core@7.21.8) + '@babel/core': 7.22.1 + '@babel/parser': 7.22.0 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.1) + '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.22.1) + '@babel/preset-env': 7.22.2(@babel/core@7.12.9) + '@babel/preset-flow': 7.21.4(@babel/core@7.22.1) + '@babel/preset-typescript': 7.21.5(@babel/core@7.22.1) + '@babel/register': 7.21.0(@babel/core@7.22.1) + babel-core: 7.0.0-bridge.0(@babel/core@7.22.1) chalk: 4.1.2 flow-parser: 0.121.0 graceful-fs: 4.2.11 @@ -13515,7 +15032,7 @@ packages: dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: 4.2.11 + graceful-fs: 4.2.10 /jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} @@ -13616,10 +15133,10 @@ packages: dependencies: '@lerna/child-process': 6.6.2 '@lerna/create': 6.6.2 - '@lerna/legacy-package-management': 6.6.2(nx@15.9.3) + '@lerna/legacy-package-management': 6.6.2(nx@15.9.4) '@npmcli/arborist': 6.2.3 '@npmcli/run-script': 4.1.7 - '@nrwl/devkit': 15.9.3(nx@15.9.3) + '@nrwl/devkit': 15.9.4(nx@15.9.4) '@octokit/plugin-enterprise-rest': 6.0.1 '@octokit/rest': 19.0.3 byte-size: 7.0.0 @@ -13661,7 +15178,7 @@ packages: npm-packlist: 5.1.1 npm-registry-fetch: 14.0.5 npmlog: 6.0.2 - nx: 15.9.3 + nx: 15.9.4 p-map: 4.0.0 p-map-series: 2.1.0 p-pipe: 3.1.0 @@ -13674,14 +15191,14 @@ packages: read-package-json: 5.0.1 resolve-from: 5.0.0 rimraf: 4.4.1 - semver: 7.5.0 + semver: 7.5.1 signal-exit: 3.0.7 slash: 3.0.0 ssri: 9.0.1 strong-log-transformer: 2.1.0 tar: 6.1.11 temp-dir: 1.0.0 - typescript: 4.9.5 + typescript: 4.6.3 upath: 2.0.1 uuid: 8.3.2 validate-npm-package-license: 3.0.4 @@ -13741,8 +15258,8 @@ packages: npm-package-arg: 10.1.0 npm-registry-fetch: 14.0.5 proc-log: 3.0.0 - semver: 7.5.0 - sigstore: 1.4.0 + semver: 7.5.1 + sigstore: 1.5.2 ssri: 10.0.4 transitivePeerDependencies: - supports-color @@ -13764,7 +15281,7 @@ packages: resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} engines: {node: '>=4'} dependencies: - graceful-fs: 4.2.11 + graceful-fs: 4.2.10 parse-json: 4.0.0 pify: 3.0.0 strip-bom: 3.0.0 @@ -13774,7 +15291,7 @@ packages: resolution: {integrity: sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==} engines: {node: '>=8'} dependencies: - graceful-fs: 4.2.11 + graceful-fs: 4.2.10 parse-json: 5.2.0 strip-bom: 4.0.0 type-fest: 0.6.0 @@ -13931,7 +15448,7 @@ packages: /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: - tslib: 2.5.0 + tslib: 2.3.1 /lowercase-keys@2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} @@ -14031,7 +15548,7 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: agentkeepalive: 4.3.0 - cacache: 17.1.0 + cacache: 17.1.3 http-cache-semantics: 4.1.1 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 @@ -14087,7 +15604,7 @@ packages: /match-sorter@6.3.1: resolution: {integrity: sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==} dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.0 remove-accents: 0.4.2 dev: false @@ -14257,8 +15774,8 @@ packages: vfile-message: 3.1.4 dev: true - /mdast-util-mdx-jsx@2.1.2: - resolution: {integrity: sha512-o9vBCYQK5ZLGEj3tCGISJGjvafyHRVJlZmfJzSE7xjiogSzIeph/Z4zMY65q4WGRMezQBeAwPlrdymDYYYx0tA==} + /mdast-util-mdx-jsx@2.1.4: + resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} dependencies: '@types/estree-jsx': 1.0.0 '@types/hast': 2.3.4 @@ -14291,7 +15808,7 @@ packages: dependencies: mdast-util-from-markdown: 1.3.0 mdast-util-mdx-expression: 1.3.2 - mdast-util-mdx-jsx: 2.1.2 + mdast-util-mdx-jsx: 2.1.4 mdast-util-mdxjs-esm: 1.3.1 mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: @@ -14374,7 +15891,7 @@ packages: /media-query-parser@2.0.2: resolution: {integrity: sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==} dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.0 dev: true /media-typer@0.3.0: @@ -14418,7 +15935,7 @@ packages: redent: 3.0.0 trim-newlines: 3.0.1 type-fest: 0.18.1 - yargs-parser: 20.2.9 + yargs-parser: 20.2.4 dev: true /merge-descriptors@1.0.1: @@ -14438,7 +15955,7 @@ packages: /metro-babel-transformer@0.72.3: resolution: {integrity: sha512-PTOR2zww0vJbWeeM3qN90WKENxCLzv9xrwWaNtwVlhcV8/diNdNe82sE1xIxLFI6OQuAVwNMv1Y7VsO2I7Ejrw==} dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 hermes-parser: 0.8.0 metro-source-map: 0.72.3 nullthrows: 1.1.1 @@ -14525,64 +16042,112 @@ packages: uglify-es: 3.3.9 dev: false - /metro-react-native-babel-preset@0.72.3(@babel/core@7.21.8): + /metro-react-native-babel-preset@0.72.3(@babel/core@7.12.9): + resolution: {integrity: sha512-uJx9y/1NIqoYTp6ZW1osJ7U5ZrXGAJbOQ/Qzl05BdGYvN1S7Qmbzid6xOirgK0EIT0pJKEEh1s8qbassYZe4cw==} + peerDependencies: + '@babel/core': '*' + dependencies: + '@babel/core': 7.12.9 + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.12.9) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-proposal-export-default-from': 7.18.10(@babel/core@7.12.9) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.12.9) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.12.9) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.12.9) + '@babel/plugin-syntax-export-default-from': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.12.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.12.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.12.9) + '@babel/plugin-transform-arrow-functions': 7.21.5(@babel/core@7.12.9) + '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.12.9) + '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.12.9) + '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.12.9) + '@babel/plugin-transform-computed-properties': 7.21.5(@babel/core@7.12.9) + '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.12.9) + '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-flow-strip-types': 7.21.0(@babel/core@7.12.9) + '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.12.9) + '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.12.9) + '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.12.9) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-parameters': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-react-jsx': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-react-jsx-self': 7.21.0(@babel/core@7.12.9) + '@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.12.9) + '@babel/plugin-transform-runtime': 7.22.2(@babel/core@7.12.9) + '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.12.9) + '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.12.9) + '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.12.9) + '@babel/plugin-transform-typescript': 7.22.0(@babel/core@7.12.9) + '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.12.9) + '@babel/template': 7.21.9 + react-refresh: 0.4.3 + transitivePeerDependencies: + - supports-color + dev: false + + /metro-react-native-babel-preset@0.72.3(@babel/core@7.22.1): resolution: {integrity: sha512-uJx9y/1NIqoYTp6ZW1osJ7U5ZrXGAJbOQ/Qzl05BdGYvN1S7Qmbzid6xOirgK0EIT0pJKEEh1s8qbassYZe4cw==} peerDependencies: '@babel/core': '*' dependencies: - '@babel/core': 7.21.8 - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-export-default-from': 7.18.10(@babel/core@7.21.8) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-export-default-from': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.21.8) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-transform-arrow-functions': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-transform-computed-properties': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.8) - '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-flow-strip-types': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.8) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.8) - '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-react-jsx': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-react-jsx-self': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.21.8) - '@babel/plugin-transform-runtime': 7.21.4(@babel/core@7.21.8) - '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.21.8) - '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.8) - '@babel/template': 7.20.7 + '@babel/core': 7.22.1 + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.22.1) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-proposal-export-default-from': 7.18.10(@babel/core@7.22.1) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.22.1) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.1) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.1) + '@babel/plugin-syntax-export-default-from': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.22.1) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.1) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.1) + '@babel/plugin-transform-arrow-functions': 7.21.5(@babel/core@7.22.1) + '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.22.1) + '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.22.1) + '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.22.1) + '@babel/plugin-transform-computed-properties': 7.21.5(@babel/core@7.22.1) + '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.22.1) + '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-flow-strip-types': 7.21.0(@babel/core@7.22.1) + '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.22.1) + '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.22.1) + '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.22.1) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-parameters': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-react-jsx': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-react-jsx-self': 7.21.0(@babel/core@7.22.1) + '@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.22.1) + '@babel/plugin-transform-runtime': 7.22.2(@babel/core@7.22.1) + '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.22.1) + '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.22.1) + '@babel/plugin-transform-typescript': 7.22.0(@babel/core@7.22.1) + '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.22.1) + '@babel/template': 7.21.9 react-refresh: 0.4.3 transitivePeerDependencies: - supports-color dev: false - /metro-react-native-babel-transformer@0.72.3(@babel/core@7.21.8): + /metro-react-native-babel-transformer@0.72.3(@babel/core@7.12.9): resolution: {integrity: sha512-Ogst/M6ujYrl/+9mpEWqE3zF7l2mTuftDTy3L8wZYwX1pWUQWQpfU1aJBeWiLxt1XlIq+uriRjKzKoRoIK57EA==} peerDependencies: '@babel/core': '*' dependencies: - '@babel/core': 7.21.8 - babel-preset-fbjs: 3.4.0(@babel/core@7.21.8) + '@babel/core': 7.12.9 + babel-preset-fbjs: 3.4.0(@babel/core@7.12.9) hermes-parser: 0.8.0 metro-babel-transformer: 0.72.3 - metro-react-native-babel-preset: 0.72.3(@babel/core@7.21.8) + metro-react-native-babel-preset: 0.72.3(@babel/core@7.12.9) metro-source-map: 0.72.3 nullthrows: 1.1.1 transitivePeerDependencies: @@ -14598,15 +16163,15 @@ packages: /metro-runtime@0.72.3: resolution: {integrity: sha512-3MhvDKfxMg2u7dmTdpFOfdR71NgNNo4tzAyJumDVQKwnHYHN44f2QFZQqpPBEmqhWlojNeOxsqFsjYgeyMx6VA==} dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.0 react-refresh: 0.4.3 dev: false /metro-source-map@0.72.3: resolution: {integrity: sha512-eNtpjbjxSheXu/jYCIDrbNEKzMGOvYW6/ePYpRM7gDdEagUOqKOCsi3St8NJIQJzZCsxD2JZ2pYOiomUSkT1yQ==} dependencies: - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 + '@babel/traverse': 7.22.1 + '@babel/types': 7.22.0 invariant: 2.2.4 metro-symbolicate: 0.72.3 nullthrows: 1.1.1 @@ -14635,10 +16200,10 @@ packages: /metro-transform-plugins@0.72.3: resolution: {integrity: sha512-D+TcUvCKZbRua1+qujE0wV1onZvslW6cVTs7dLCyC2pv20lNHjFr1GtW01jN2fyKR2PcRyMjDCppFd9VwDKnSg==} dependencies: - '@babel/core': 7.21.8 - '@babel/generator': 7.21.5 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.5 + '@babel/core': 7.22.1 + '@babel/generator': 7.22.0 + '@babel/template': 7.21.9 + '@babel/traverse': 7.22.1 nullthrows: 1.1.1 transitivePeerDependencies: - supports-color @@ -14647,11 +16212,11 @@ packages: /metro-transform-worker@0.72.3: resolution: {integrity: sha512-WsuWj9H7i6cHuJuy+BgbWht9DK5FOgJxHLGAyULD5FJdTG9rSMFaHDO5WfC0OwQU5h4w6cPT40iDuEGksM7+YQ==} dependencies: - '@babel/core': 7.21.8 - '@babel/generator': 7.21.5 - '@babel/parser': 7.21.8 - '@babel/types': 7.21.5 - babel-preset-fbjs: 3.4.0(@babel/core@7.21.8) + '@babel/core': 7.22.1 + '@babel/generator': 7.22.0 + '@babel/parser': 7.22.0 + '@babel/types': 7.22.0 + babel-preset-fbjs: 3.4.0(@babel/core@7.22.1) metro: 0.72.3 metro-babel-transformer: 0.72.3 metro-cache: 0.72.3 @@ -14672,12 +16237,12 @@ packages: hasBin: true dependencies: '@babel/code-frame': 7.21.4 - '@babel/core': 7.21.8 - '@babel/generator': 7.21.5 - '@babel/parser': 7.21.8 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 + '@babel/core': 7.22.1 + '@babel/generator': 7.22.0 + '@babel/parser': 7.22.0 + '@babel/template': 7.21.9 + '@babel/traverse': 7.22.1 + '@babel/types': 7.22.0 absolute-path: 0.0.0 accepts: 1.3.8 async: 3.2.4 @@ -14703,7 +16268,7 @@ packages: metro-hermes-compiler: 0.72.3 metro-inspector-proxy: 0.72.3 metro-minify-uglify: 0.72.3 - metro-react-native-babel-preset: 0.72.3(@babel/core@7.21.8) + metro-react-native-babel-preset: 0.72.3(@babel/core@7.22.1) metro-resolver: 0.72.3 metro-runtime: 0.72.3 metro-source-map: 0.72.3 @@ -14711,7 +16276,7 @@ packages: metro-transform-plugins: 0.72.3 metro-transform-worker: 0.72.3 mime-types: 2.1.35 - node-fetch: 2.6.9 + node-fetch: 2.6.11 nullthrows: 1.1.1 rimraf: 2.7.1 serialize-error: 2.1.0 @@ -14794,8 +16359,8 @@ packages: uvu: 0.5.6 dev: false - /micromark-extension-gfm-table@1.0.5: - resolution: {integrity: sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==} + /micromark-extension-gfm-table@1.0.6: + resolution: {integrity: sha512-92pq7Q+T+4kXH4M6kL+pc8WU23Z9iuhcqmtYFWdFWjm73ZscFpH2xE28+XFpGWlvgq3LUwcN0XC0PGCicYFpgA==} dependencies: micromark-factory-space: 1.0.0 micromark-util-character: 1.1.0 @@ -14820,21 +16385,21 @@ packages: uvu: 0.5.6 dev: false - /micromark-extension-gfm@2.0.1: - resolution: {integrity: sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==} + /micromark-extension-gfm@2.0.3: + resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==} dependencies: micromark-extension-gfm-autolink-literal: 1.0.4 micromark-extension-gfm-footnote: 1.1.0 micromark-extension-gfm-strikethrough: 1.0.5 - micromark-extension-gfm-table: 1.0.5 + micromark-extension-gfm-table: 1.0.6 micromark-extension-gfm-tagfilter: 1.0.2 micromark-extension-gfm-task-list-item: 1.0.4 micromark-util-combine-extensions: 1.0.0 micromark-util-types: 1.0.2 dev: false - /micromark-extension-math@2.1.0: - resolution: {integrity: sha512-WH+fJkveMvM3ZN+deb/jT3UW623x8xO9ycfJNDC+UQXX+V72RO6hT9KqxA7c8XFwozAFJ7tufOeG+x/CVSXHUw==} + /micromark-extension-math@2.1.1: + resolution: {integrity: sha512-4rTUTTwHuXNL/sHy/LpmTEku+YOJIK4VYdILxv8bRI4unSpfdd/UzOv/DBV2KqgBeGQiyA3vmsARrKS7WQWwxw==} dependencies: '@types/katex': 0.16.0 katex: 0.16.7 @@ -14845,23 +16410,23 @@ packages: uvu: 0.5.6 dev: false - /micromark-extension-mdx-expression@1.0.4: - resolution: {integrity: sha512-TCgLxqW6ReQ3AJgtj1P0P+8ZThBTloLbeb7jNaqr6mCOLDpxUiBFE/9STgooMZttEwOQu5iEcCCa3ZSDhY9FGw==} + /micromark-extension-mdx-expression@1.0.5: + resolution: {integrity: sha512-/ruJEj+Qpgar/P+b6z0firNIbY5VMHFdL3MJDvsnVVY+RnecmGNpN7YUZhb51NfBtk7iQnNCl5xeb4E5cWxXvw==} dependencies: - micromark-factory-mdx-expression: 1.0.7 + micromark-factory-mdx-expression: 1.0.8 micromark-factory-space: 1.0.0 micromark-util-character: 1.1.0 - micromark-util-events-to-acorn: 1.2.1 + micromark-util-events-to-acorn: 1.2.3 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 uvu: 0.5.6 - /micromark-extension-mdx-jsx@1.0.3: - resolution: {integrity: sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==} + /micromark-extension-mdx-jsx@1.0.4: + resolution: {integrity: sha512-Jq4O738s2PvxJJSMZhV+y/7uq+pGI/ugQvHJBQelWpE3ECYvJMtF2duwfHQoAuUnIKSvg8b0dU1D+EXTAYE5ww==} dependencies: '@types/acorn': 4.0.6 estree-util-is-identifier-name: 2.1.0 - micromark-factory-mdx-expression: 1.0.7 + micromark-factory-mdx-expression: 1.0.8 micromark-factory-space: 1.0.0 micromark-util-character: 1.1.0 micromark-util-symbol: 1.0.1 @@ -14869,32 +16434,32 @@ packages: uvu: 0.5.6 vfile-message: 3.1.4 - /micromark-extension-mdx-md@1.0.0: - resolution: {integrity: sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==} + /micromark-extension-mdx-md@1.0.1: + resolution: {integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==} dependencies: micromark-util-types: 1.0.2 - /micromark-extension-mdxjs-esm@1.0.3: - resolution: {integrity: sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==} + /micromark-extension-mdxjs-esm@1.0.4: + resolution: {integrity: sha512-mmyCf6baCbLf+OHTCZdj+f8lDY8GBae4qhbffrJDqM1KltghsZz2k3nbvRfEwm301G62nhrlom9M9OheQwrssg==} dependencies: micromark-core-commonmark: 1.0.6 micromark-util-character: 1.1.0 - micromark-util-events-to-acorn: 1.2.1 + micromark-util-events-to-acorn: 1.2.3 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 unist-util-position-from-estree: 1.1.2 uvu: 0.5.6 vfile-message: 3.1.4 - /micromark-extension-mdxjs@1.0.0: - resolution: {integrity: sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==} + /micromark-extension-mdxjs@1.0.1: + resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} dependencies: acorn: 8.8.2 acorn-jsx: 5.3.2(acorn@8.8.2) - micromark-extension-mdx-expression: 1.0.4 - micromark-extension-mdx-jsx: 1.0.3 - micromark-extension-mdx-md: 1.0.0 - micromark-extension-mdxjs-esm: 1.0.3 + micromark-extension-mdx-expression: 1.0.5 + micromark-extension-mdx-jsx: 1.0.4 + micromark-extension-mdx-md: 1.0.1 + micromark-extension-mdxjs-esm: 1.0.4 micromark-util-combine-extensions: 1.0.0 micromark-util-types: 1.0.2 @@ -14913,12 +16478,12 @@ packages: micromark-util-types: 1.0.2 uvu: 0.5.6 - /micromark-factory-mdx-expression@1.0.7: - resolution: {integrity: sha512-QAdFbkQagTZ/eKb8zDGqmjvgevgJH3+aQpvvKrXWxNJp3o8/l2cAbbrBd0E04r0Gx6nssPpqWIjnbHFvZu5qsQ==} + /micromark-factory-mdx-expression@1.0.8: + resolution: {integrity: sha512-/GWj6h6bDFCDCkxOCb/xXpgKGonhBXEqMnhTThVo0nlIN/i8z6L6YrmRq+N91oerxY97fEz7vHSCSIcW7fGFhQ==} dependencies: - micromark-factory-space: 1.0.0 + '@types/estree': 1.0.1 micromark-util-character: 1.1.0 - micromark-util-events-to-acorn: 1.2.1 + micromark-util-events-to-acorn: 1.2.3 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 unist-util-position-from-estree: 1.1.2 @@ -14988,15 +16553,16 @@ packages: /micromark-util-encode@1.0.1: resolution: {integrity: sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==} - /micromark-util-events-to-acorn@1.2.1: - resolution: {integrity: sha512-mkg3BaWlw6ZTkQORrKVBW4o9ICXPxLtGz51vml5mQpKFdo9vqIX68CAx5JhTOdjQyAHH7JFmm4rh8toSPQZUmg==} + /micromark-util-events-to-acorn@1.2.3: + resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} dependencies: '@types/acorn': 4.0.6 '@types/estree': 1.0.1 + '@types/unist': 2.0.6 estree-util-visit: 1.2.1 + micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 uvu: 0.5.6 - vfile-location: 4.1.0 vfile-message: 3.1.4 /micromark-util-html-tag-name@1.1.0: @@ -15036,7 +16602,7 @@ packages: /micromark@3.1.0: resolution: {integrity: sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==} dependencies: - '@types/debug': 4.1.7 + '@types/debug': 4.1.8 debug: 4.3.4(supports-color@6.1.0) decode-named-character-reference: 1.0.2 micromark-core-commonmark: 1.0.6 @@ -15199,8 +16765,8 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@9.0.0: - resolution: {integrity: sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==} + /minimatch@9.0.1: + resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 @@ -15294,6 +16860,11 @@ packages: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} + /minipass@6.0.2: + resolution: {integrity: sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true + /minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} @@ -15350,13 +16921,13 @@ packages: engines: {node: '>=10'} hasBin: true - /mlly@1.2.0: - resolution: {integrity: sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==} + /mlly@1.3.0: + resolution: {integrity: sha512-HT5mcgIQKkOrZecOjOX3DJorTikWXwsBfpcr/MGBkhfWcjiqvnaL/9ppxvIUXfjT6xt4DVIAsN9fMUz1ev4bIw==} dependencies: acorn: 8.8.2 pathe: 1.1.0 pkg-types: 1.0.3 - ufo: 1.1.1 + ufo: 1.1.2 dev: true /modify-values@1.0.1: @@ -15424,7 +16995,7 @@ packages: array-differ: 3.0.0 array-union: 2.1.0 arrify: 2.0.1 - minimatch: 3.1.2 + minimatch: 3.0.5 dev: true /mute-stream@0.0.8: @@ -15452,7 +17023,6 @@ packages: /nan@2.17.0: resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} - requiresBuild: true dev: false optional: true @@ -15521,15 +17091,15 @@ packages: nodemailer: optional: true dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.0 '@panva/hkdf': 1.1.1 cookie: 0.5.0 jose: 4.14.4 - next: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + next: 13.4.0(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0) oauth: 0.9.15 openid-client: 5.4.2 - preact: 10.13.2 - preact-render-to-string: 5.2.6(preact@10.13.2) + preact: 10.15.0 + preact-render-to-string: 5.2.6(preact@10.15.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) uuid: 8.3.2 @@ -15559,12 +17129,12 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - next: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + next: 13.4.0(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /next-sitemap@4.0.7(@next/env@13.4.0)(next@13.4.0): + /next-sitemap@4.0.7(@next/env@13.4.4)(next@13.4.0): resolution: {integrity: sha512-S2g5IwJeO0+ecmFq981fb+Mw9YWmntOuN/qTCxclSkUibOJ8qKIOye0vn6NEJ1S4tKhbY+MTYKgJpNdFZYxLoA==} engines: {node: '>=14.18'} hasBin: true @@ -15573,9 +17143,9 @@ packages: next: '*' dependencies: '@corex/deepmerge': 4.0.43 - '@next/env': 13.4.0 + '@next/env': 13.4.4 minimist: 1.2.8 - next: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + next: 13.4.0(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0) dev: true /next-themes@0.2.1(next@13.4.0)(react-dom@18.2.0)(react@18.2.0): @@ -15585,12 +17155,12 @@ packages: react: '*' react-dom: '*' dependencies: - next: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + next: 13.4.0(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /next@13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0): + /next@13.4.0(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-y3E+2ZjiVrphkz7zcJvd2rEG6miOekI8krPfWV4AZZ9TaF0LDuFdP/f+RQ5M9wRvsz6GWw8k8+7jsO860GxSqg==} engines: {node: '>=16.8.0'} hasBin: true @@ -15614,11 +17184,11 @@ packages: '@next/env': 13.4.0 '@swc/helpers': 0.5.1 busboy: 1.6.0 - caniuse-lite: 1.0.30001482 + caniuse-lite: 1.0.30001489 postcss: 8.4.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.21.8)(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.12.9)(react@18.2.0) zod: 3.21.4 optionalDependencies: '@next/swc-darwin-arm64': 13.4.0 @@ -15633,7 +17203,6 @@ packages: transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - patched: true /nextra-theme-docs@2.4.2(next@13.4.0)(nextra@2.4.2)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-5H6NJ38TlbgetNx9HjMmQcNpsp6GFH26TfjLVC0RWxhEPuoutSFpJ8RjWKXv6WEaWaL500CoErW0/DeXzuQGUg==} @@ -15644,14 +17213,14 @@ packages: react-dom: '>=16.13.1' dependencies: '@headlessui/react': 1.7.14(react-dom@18.2.0)(react@18.2.0) - '@popperjs/core': 2.11.7 + '@popperjs/core': 2.11.8 clsx: 1.2.1 flexsearch: 0.7.31 focus-visible: 5.2.0 git-url-parse: 13.1.0 intersection-observer: 0.12.2 match-sorter: 6.3.1 - next: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + next: 13.4.0(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0) next-seo: 6.0.0(next@13.4.0)(react-dom@18.2.0)(react@18.2.0) next-themes: 0.2.1(next@13.4.0)(react-dom@18.2.0)(react@18.2.0) nextra: 2.4.2(next@13.4.0)(react-dom@18.2.0)(react@18.2.0) @@ -15677,7 +17246,7 @@ packages: gray-matter: 4.0.3 katex: 0.16.7 lodash.get: 4.4.2 - next: 13.4.0(patch_hash=ceekt4asq35k5dc332e6jnmrkm)(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + next: 13.4.0(@babel/core@7.12.9)(react-dom@18.2.0)(react@18.2.0) next-mdx-remote: 4.4.1(react-dom@18.2.0)(react@18.2.0) p-limit: 3.1.0 react: 18.2.0 @@ -15705,7 +17274,7 @@ packages: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: lower-case: 2.0.2 - tslib: 2.5.0 + tslib: 2.3.1 /nocache@3.0.4: resolution: {integrity: sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==} @@ -15728,8 +17297,8 @@ packages: minimatch: 3.1.2 dev: false - /node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + /node-fetch@2.6.11: + resolution: {integrity: sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -15739,8 +17308,8 @@ packages: dependencies: whatwg-url: 5.0.0 - /node-fetch@2.6.9: - resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} + /node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -15749,6 +17318,7 @@ packages: optional: true dependencies: whatwg-url: 5.0.0 + dev: true /node-forge@0.10.0: resolution: {integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==} @@ -15772,13 +17342,13 @@ packages: dependencies: env-paths: 2.2.1 glob: 7.2.3 - graceful-fs: 4.2.11 + graceful-fs: 4.2.10 make-fetch-happen: 10.2.1 nopt: 6.0.0 npmlog: 6.0.2 rimraf: 3.0.2 - semver: 7.5.0 - tar: 6.1.14 + semver: 7.5.1 + tar: 6.1.11 which: 2.0.2 transitivePeerDependencies: - bluebird @@ -15826,8 +17396,8 @@ packages: resolution: {integrity: sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==} dev: false - /node-releases@2.0.10: - resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} + /node-releases@2.0.12: + resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} /node-stream-zip@1.15.0: resolution: {integrity: sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==} @@ -15868,8 +17438,8 @@ packages: engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.12.0 - semver: 7.5.0 + is-core-module: 2.12.1 + semver: 7.5.1 validate-npm-package-license: 3.0.4 dev: true @@ -15878,8 +17448,8 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: hosted-git-info: 5.2.1 - is-core-module: 2.12.0 - semver: 7.5.0 + is-core-module: 2.12.1 + semver: 7.5.1 validate-npm-package-license: 3.0.4 dev: true @@ -15888,8 +17458,8 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: hosted-git-info: 6.1.1 - is-core-module: 2.12.0 - semver: 7.5.0 + is-core-module: 2.12.1 + semver: 7.5.1 validate-npm-package-license: 3.0.4 dev: true @@ -15936,7 +17506,7 @@ packages: resolution: {integrity: sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - semver: 7.5.0 + semver: 7.5.1 dev: true /npm-normalize-package-bin@1.0.1: @@ -15954,7 +17524,7 @@ packages: dependencies: hosted-git-info: 6.1.1 proc-log: 3.0.0 - semver: 7.5.0 + semver: 7.5.1 validate-npm-package-name: 5.0.0 dev: true @@ -15972,7 +17542,7 @@ packages: engines: {node: '>=10'} dependencies: hosted-git-info: 3.0.8 - semver: 7.5.0 + semver: 7.5.1 validate-npm-package-name: 3.0.0 dev: true @@ -15982,7 +17552,7 @@ packages: dependencies: hosted-git-info: 5.2.1 proc-log: 2.0.1 - semver: 7.5.0 + semver: 7.5.1 validate-npm-package-name: 4.0.0 dev: true @@ -16011,7 +17581,7 @@ packages: npm-install-checks: 6.1.1 npm-normalize-package-bin: 3.0.1 npm-package-arg: 10.1.0 - semver: 7.5.0 + semver: 7.5.1 dev: true /npm-registry-fetch@13.3.1: @@ -16121,8 +17691,8 @@ packages: resolution: {integrity: sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==} dev: true - /nx@15.9.3: - resolution: {integrity: sha512-GLwbykfTABc7/UZjQEEnV1bQbTVC53W+Zj4xWY640/45I4iZf/TUqKMBCgtLZ9v89gEsKOM4zsx55CqHT3bekA==} + /nx@15.9.4: + resolution: {integrity: sha512-P1G4t59UvE/lkHyruLeSOB5ZuNyh01IwU0tTUOi8f9s/NbP7+OQ8MYVwDV74JHTr6mQgjlS+n+4Eox8tVm9itA==} hasBin: true requiresBuild: true peerDependencies: @@ -16134,11 +17704,11 @@ packages: '@swc/core': optional: true dependencies: - '@nrwl/cli': 15.9.3 - '@nrwl/tao': 15.9.3 + '@nrwl/cli': 15.9.4 + '@nrwl/tao': 15.9.4 '@parcel/watcher': 2.0.4 '@yarnpkg/lockfile': 1.1.0 - '@yarnpkg/parsers': 3.0.0-rc.43 + '@yarnpkg/parsers': 3.0.0-rc.44 '@zkochan/js-yaml': 0.0.6 axios: 1.4.0 chalk: 4.1.2 @@ -16165,20 +17735,20 @@ packages: tar-stream: 2.2.0 tmp: 0.2.1 tsconfig-paths: 4.2.0 - tslib: 2.5.0 + tslib: 2.3.1 v8-compile-cache: 2.3.0 yargs: 17.7.2 yargs-parser: 21.1.1 optionalDependencies: - '@nrwl/nx-darwin-arm64': 15.9.3 - '@nrwl/nx-darwin-x64': 15.9.3 - '@nrwl/nx-linux-arm-gnueabihf': 15.9.3 - '@nrwl/nx-linux-arm64-gnu': 15.9.3 - '@nrwl/nx-linux-arm64-musl': 15.9.3 - '@nrwl/nx-linux-x64-gnu': 15.9.3 - '@nrwl/nx-linux-x64-musl': 15.9.3 - '@nrwl/nx-win32-arm64-msvc': 15.9.3 - '@nrwl/nx-win32-x64-msvc': 15.9.3 + '@nrwl/nx-darwin-arm64': 15.9.4 + '@nrwl/nx-darwin-x64': 15.9.4 + '@nrwl/nx-linux-arm-gnueabihf': 15.9.4 + '@nrwl/nx-linux-arm64-gnu': 15.9.4 + '@nrwl/nx-linux-arm64-musl': 15.9.4 + '@nrwl/nx-linux-x64-gnu': 15.9.4 + '@nrwl/nx-linux-x64-musl': 15.9.4 + '@nrwl/nx-win32-arm64-msvc': 15.9.4 + '@nrwl/nx-win32-x64-msvc': 15.9.4 transitivePeerDependencies: - debug dev: true @@ -16634,8 +18204,8 @@ packages: '@npmcli/git': 4.0.4 '@npmcli/installed-package-contents': 2.0.2 '@npmcli/promise-spawn': 6.0.2 - '@npmcli/run-script': 6.0.1 - cacache: 17.1.0 + '@npmcli/run-script': 6.0.2 + cacache: 17.1.3 fs-minipass: 3.0.2 minipass: 4.2.8 npm-package-arg: 10.1.0 @@ -16646,9 +18216,9 @@ packages: promise-retry: 2.0.1 read-package-json: 6.0.3 read-package-json-fast: 3.0.2 - sigstore: 1.4.0 + sigstore: 1.5.2 ssri: 10.0.4 - tar: 6.1.14 + tar: 6.1.11 transitivePeerDependencies: - bluebird - supports-color @@ -16674,7 +18244,7 @@ packages: resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} dependencies: dot-case: 3.0.4 - tslib: 2.5.0 + tslib: 2.3.1 dev: false /parent-module@1.0.1: @@ -16780,7 +18350,7 @@ packages: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} dependencies: no-case: 3.0.4 - tslib: 2.5.0 + tslib: 2.3.1 /pascalcase@0.1.1: resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} @@ -16825,7 +18395,7 @@ packages: /path-is-network-drive@1.0.20: resolution: {integrity: sha512-p5wCWlRB4+ggzxWshqHH9aF3kAuVu295NaENXmVhThbZPJQBeJdxZTP6CIoUR+kWHDUW56S9YcaO1gXnc/BOxw==} dependencies: - tslib: 2.5.0 + tslib: 2.3.1 dev: true /path-key@2.0.1: @@ -16845,18 +18415,18 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - /path-scurry@1.7.0: - resolution: {integrity: sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg==} + /path-scurry@1.9.2: + resolution: {integrity: sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==} engines: {node: '>=16 || 14 >=14.17'} dependencies: lru-cache: 9.1.1 - minipass: 5.0.0 + minipass: 6.0.2 dev: true /path-strip-sep@1.0.17: resolution: {integrity: sha512-+2zIC2fNgdilgV7pTrktY6oOxxZUo9x5zJYfTzxsGze5kSGDDwhA5/0WlBn+sUyv/WuuyYn3OfM+Ue5nhdQUgA==} dependencies: - tslib: 2.5.0 + tslib: 2.3.1 dev: true /path-to-regexp@0.1.7: @@ -16972,7 +18542,7 @@ packages: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: jsonc-parser: 3.2.0 - mlly: 1.2.0 + mlly: 1.3.0 pathe: 1.1.0 dev: true @@ -17007,11 +18577,11 @@ packages: engines: {node: '>=4.0.0'} dev: false - /pnp-webpack-plugin@1.7.0(typescript@4.9.5): + /pnp-webpack-plugin@1.7.0(typescript@4.6.3): resolution: {integrity: sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==} engines: {node: '>=6'} dependencies: - ts-pnp: 1.2.0(typescript@4.9.5) + ts-pnp: 1.2.0(typescript@4.6.3) transitivePeerDependencies: - typescript dev: false @@ -17036,7 +18606,7 @@ packages: resolution: {integrity: sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==} dependencies: postcss: 7.0.39 - postcss-selector-parser: 6.0.12 + postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 dev: false @@ -17149,7 +18719,7 @@ packages: dependencies: lilconfig: 2.1.0 postcss: 8.4.23 - yaml: 2.2.2 + yaml: 2.3.1 dev: true /postcss-merge-longhand@4.0.11: @@ -17236,19 +18806,19 @@ packages: dependencies: icss-utils: 4.1.1 postcss: 7.0.39 - postcss-selector-parser: 6.0.12 + postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 dev: false - /postcss-modules-local-by-default@4.0.0(postcss@8.4.23): - resolution: {integrity: sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==} + /postcss-modules-local-by-default@4.0.3(postcss@8.4.23): + resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: icss-utils: 5.1.0(postcss@8.4.23) postcss: 8.4.23 - postcss-selector-parser: 6.0.12 + postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 dev: true @@ -17257,7 +18827,7 @@ packages: engines: {node: '>= 6'} dependencies: postcss: 7.0.39 - postcss-selector-parser: 6.0.12 + postcss-selector-parser: 6.0.13 dev: false /postcss-modules-scope@3.0.0(postcss@8.4.23): @@ -17267,7 +18837,7 @@ packages: postcss: ^8.1.0 dependencies: postcss: 8.4.23 - postcss-selector-parser: 6.0.12 + postcss-selector-parser: 6.0.13 dev: true /postcss-modules-values@3.0.0: @@ -17297,7 +18867,7 @@ packages: lodash.camelcase: 4.3.0 postcss: 8.4.23 postcss-modules-extract-imports: 3.0.0(postcss@8.4.23) - postcss-modules-local-by-default: 4.0.0(postcss@8.4.23) + postcss-modules-local-by-default: 4.0.3(postcss@8.4.23) postcss-modules-scope: 3.0.0(postcss@8.4.23) postcss-modules-values: 4.0.0(postcss@8.4.23) string-hash: 1.1.3 @@ -17310,7 +18880,7 @@ packages: postcss: ^8.2.14 dependencies: postcss: 8.4.23 - postcss-selector-parser: 6.0.12 + postcss-selector-parser: 6.0.13 dev: false /postcss-normalize-charset@4.0.1: @@ -17447,8 +19017,8 @@ packages: util-deprecate: 1.0.2 dev: false - /postcss-selector-parser@6.0.12: - resolution: {integrity: sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==} + /postcss-selector-parser@6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 @@ -17503,17 +19073,17 @@ packages: picocolors: 1.0.0 source-map-js: 1.0.2 - /preact-render-to-string@5.2.6(preact@10.13.2): + /preact-render-to-string@5.2.6(preact@10.15.0): resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==} peerDependencies: preact: '>=10' dependencies: - preact: 10.13.2 + preact: 10.15.0 pretty-format: 3.8.0 dev: false - /preact@10.13.2: - resolution: {integrity: sha512-q44QFLhOhty2Bd0Y46fnYW0gD/cbVM9dUVtNTDKPcdXSMA7jfY+Jpd6rk3GB0lcQss0z5s/6CmVP0Z/hV+g6pw==} + /preact@10.15.0: + resolution: {integrity: sha512-nZSa8M2R2m1n7nJSBlzDpxRJaIsejrTO1vlFbdpFvyC8qM1iU+On2y0otfoUm6SRB5o0lF0CKDFxg6grEFU0iQ==} dev: false /prelude-ls@1.1.2: @@ -17530,7 +19100,7 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} dependencies: - fast-diff: 1.2.0 + fast-diff: 1.3.0 dev: true /prettier-plugin-tailwindcss@0.2.3(prettier@2.8.8): @@ -17944,7 +19514,7 @@ packages: strip-json-comments: 2.0.1 dev: false - /react-dev-utils@11.0.4(typescript@4.9.5)(webpack@4.43.0): + /react-dev-utils@11.0.4(typescript@4.6.3)(webpack@4.43.0): resolution: {integrity: sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==} engines: {node: '>=10'} peerDependencies: @@ -17963,7 +19533,7 @@ packages: escape-string-regexp: 2.0.0 filesize: 6.1.0 find-up: 4.1.0 - fork-ts-checker-webpack-plugin: 4.1.6(typescript@4.9.5)(webpack@4.43.0) + fork-ts-checker-webpack-plugin: 4.1.6(typescript@4.6.3)(webpack@4.43.0) global-modules: 2.0.0 globby: 11.0.1 gzip-size: 5.1.1 @@ -17978,7 +19548,7 @@ packages: shell-quote: 1.7.2 strip-ansi: 6.0.0 text-table: 0.2.0 - typescript: 4.9.5 + typescript: 4.6.3 webpack: 4.43.0 transitivePeerDependencies: - eslint @@ -18029,12 +19599,12 @@ packages: /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - /react-native-codegen@0.70.6(@babel/preset-env@7.21.5): + /react-native-codegen@0.70.6(@babel/preset-env@7.22.2): resolution: {integrity: sha512-kdwIhH2hi+cFnG5Nb8Ji2JwmcCxnaOOo9440ov7XDzSvGfmUStnCzl+MCW8jLjqHcE4icT7N9y+xx4f50vfBTw==} dependencies: - '@babel/parser': 7.21.8 + '@babel/parser': 7.22.0 flow-parser: 0.121.0 - jscodeshift: 0.13.1(@babel/preset-env@7.21.5) + jscodeshift: 0.13.1(@babel/preset-env@7.22.2) nullthrows: 1.1.1 transitivePeerDependencies: - '@babel/preset-env' @@ -18051,7 +19621,7 @@ packages: react: ^17.0.2 || ^18.0.0 react-dom: ^17.0.2 || ^18.0.0 dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.0 create-react-class: 15.7.0 fbjs: 3.0.4 inline-style-prefixer: 6.0.4 @@ -18064,7 +19634,7 @@ packages: - encoding dev: false - /react-native@0.70.5(@babel/core@7.21.8)(@babel/preset-env@7.21.5)(react@18.1.0): + /react-native@0.70.5(@babel/core@7.12.9)(@babel/preset-env@7.22.2)(react@18.1.0): resolution: {integrity: sha512-5NZM80LC3L+TIgQX/09yiyy48S73wMgpIgN5cCv3XTMR394+KpDI3rBZGH4aIgWWuwijz31YYVF5504+9n2Zfw==} engines: {node: '>=14'} hasBin: true @@ -18072,7 +19642,7 @@ packages: react: 18.1.0 dependencies: '@jest/create-cache-key-function': 29.5.0 - '@react-native-community/cli': 9.2.1(@babel/core@7.21.8) + '@react-native-community/cli': 9.2.1(@babel/core@7.12.9) '@react-native-community/cli-platform-android': 9.2.1 '@react-native-community/cli-platform-ios': 9.2.1 '@react-native/assets': 1.0.0 @@ -18085,7 +19655,7 @@ packages: invariant: 2.2.4 jsc-android: 250230.2.1 memoize-one: 5.2.1 - metro-react-native-babel-transformer: 0.72.3(@babel/core@7.21.8) + metro-react-native-babel-transformer: 0.72.3(@babel/core@7.12.9) metro-runtime: 0.72.3 metro-source-map: 0.72.3 mkdirp: 0.5.6 @@ -18094,7 +19664,7 @@ packages: promise: 8.3.0 react: 18.1.0 react-devtools-core: 4.24.0 - react-native-codegen: 0.70.6(@babel/preset-env@7.21.5) + react-native-codegen: 0.70.6(@babel/preset-env@7.22.2) react-native-gradle-plugin: 0.70.3 react-refresh: 0.4.3 react-shallow-renderer: 16.15.0(react@18.1.0) @@ -18215,7 +19785,7 @@ packages: resolution: {integrity: sha512-4QbpReW4kxFgeBQ0vPAqh2y8sXEB3D4t3jsXbJKIhBiF80KT6XRo45reqwtftju5J6ru1ax06A2Gb/wM1qCOEQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - glob: 10.2.2 + glob: 10.2.6 json-parse-even-better-errors: 3.0.0 normalize-package-data: 5.0.0 npm-normalize-package-bin: 3.0.1 @@ -18292,8 +19862,8 @@ packages: string_decoder: 1.3.0 util-deprecate: 1.0.2 - /readable-stream@4.3.0: - resolution: {integrity: sha512-MuEnA0lbSi7JS8XM+WNJlWZkHAAdm7gETHdFK//Q/mChGyj2akEFtdLZh32jSdkWGbRwCW9pn6g3LWDdDeZnBQ==} + /readable-stream@4.4.0: + resolution: {integrity: sha512-kDMOq0qLtxV9f/SQv522h8cxZBqNZXuXNyjyezmfAAuribMyVXziljpQ/uQhfE1XLg2/TLTW2DsnoE4VAi/krg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: abort-controller: 3.0.0 @@ -18334,7 +19904,7 @@ packages: ast-types: 0.14.2 esprima: 4.0.1 source-map: 0.6.1 - tslib: 2.5.0 + tslib: 2.3.1 dev: false /recast@0.21.5: @@ -18344,7 +19914,7 @@ packages: ast-types: 0.15.2 esprima: 4.0.1 source-map: 0.6.1 - tslib: 2.5.0 + tslib: 2.3.1 dev: true /rechoir@0.6.2: @@ -18384,7 +19954,7 @@ packages: /regenerator-transform@0.15.1: resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.0 /regex-not@1.0.2: resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} @@ -18479,7 +20049,7 @@ packages: dependencies: '@types/mdast': 3.0.11 mdast-util-gfm: 2.0.2 - micromark-extension-gfm: 2.0.1 + micromark-extension-gfm: 2.0.3 unified: 10.1.2 transitivePeerDependencies: - supports-color @@ -18490,7 +20060,7 @@ packages: dependencies: '@types/mdast': 3.0.11 mdast-util-math: 2.0.2 - micromark-extension-math: 2.1.0 + micromark-extension-math: 2.1.1 unified: 10.1.2 dev: false @@ -18508,13 +20078,13 @@ packages: resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==} dependencies: mdast-util-mdx: 2.0.1 - micromark-extension-mdxjs: 1.0.0 + micromark-extension-mdxjs: 1.0.1 transitivePeerDependencies: - supports-color dev: false - /remark-parse@10.0.1: - resolution: {integrity: sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==} + /remark-parse@10.0.2: + resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} dependencies: '@types/mdast': 3.0.11 mdast-util-from-markdown: 1.3.0 @@ -18664,7 +20234,7 @@ packages: resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true dependencies: - is-core-module: 2.12.0 + is-core-module: 2.12.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -18678,7 +20248,7 @@ packages: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} hasBin: true dependencies: - is-core-module: 2.12.0 + is-core-module: 2.12.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -18779,7 +20349,7 @@ packages: del: 5.1.0 dev: true - /rollup-plugin-dts@4.2.3(rollup@2.79.1)(typescript@4.9.5): + /rollup-plugin-dts@4.2.3(rollup@2.79.1)(typescript@4.6.3): resolution: {integrity: sha512-jlcpItqM2efqfIiKzDB/IKOS9E9fDvbkJSGw5GtK/PqPGS9eC3R3JKyw2VvpTktZA+TNgJRMu1NTv244aTUzzQ==} engines: {node: '>=v12.22.12'} peerDependencies: @@ -18788,7 +20358,7 @@ packages: dependencies: magic-string: 0.26.7 rollup: 2.79.1 - typescript: 4.9.5 + typescript: 4.6.3 optionalDependencies: '@babel/code-frame': 7.21.4 dev: true @@ -18834,10 +20404,10 @@ packages: jest-worker: 26.6.2 rollup: 2.79.1 serialize-javascript: 4.0.0 - terser: 5.17.1 + terser: 5.17.6 dev: true - /rollup-plugin-typescript2@0.31.2(rollup@2.79.1)(typescript@4.9.5): + /rollup-plugin-typescript2@0.31.2(rollup@2.79.1)(typescript@4.6.3): resolution: {integrity: sha512-hRwEYR1C8xDGVVMFJQdEVnNAeWRvpaY97g5mp3IeLnzhNXzSVq78Ye/BJ9PAaUfN4DXa/uDnqerifMOaMFY54Q==} peerDependencies: rollup: '>=1.26.3' @@ -18849,8 +20419,8 @@ packages: fs-extra: 10.1.0 resolve: 1.22.2 rollup: 2.79.1 - tslib: 2.5.0 - typescript: 4.9.5 + tslib: 2.3.1 + typescript: 4.6.3 dev: true /rollup-pluginutils@2.8.2: @@ -18867,8 +20437,8 @@ packages: fsevents: 2.3.2 dev: true - /rollup@3.21.4: - resolution: {integrity: sha512-N5LxpvDolOm9ueiCp4NfB80omMDqb45ShtsQw2+OT3f11uJ197dv703NZvznYHP6RWR85wfxanXurXKG3ux2GQ==} + /rollup@3.23.0: + resolution: {integrity: sha512-h31UlwEi7FHihLe1zbk+3Q7z1k/84rb9BSwmBSr/XjOCEaBJ2YyedQDuM0t/kfOS0IxM+vk1/zI9XxYj9V+NJQ==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -18901,7 +20471,7 @@ packages: /rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: - tslib: 2.5.0 + tslib: 2.3.1 dev: true /sade@1.8.1: @@ -18915,7 +20485,7 @@ packages: engines: {node: '>=0.4'} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 has-symbols: 1.0.3 isarray: 2.0.5 dev: false @@ -18936,7 +20506,7 @@ packages: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 is-regex: 1.1.4 /safe-regex@1.1.0: @@ -18989,7 +20559,7 @@ packages: resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} engines: {node: '>= 8.9.0'} dependencies: - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.12 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) dev: false @@ -18998,7 +20568,7 @@ packages: resolution: {integrity: sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.12 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) dev: false @@ -19056,8 +20626,8 @@ packages: dependencies: lru-cache: 6.0.0 - /semver@7.5.0: - resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==} + /semver@7.5.1: + resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==} engines: {node: '>=10'} hasBin: true dependencies: @@ -19224,25 +20794,25 @@ packages: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 object-inspect: 1.12.3 /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - /signal-exit@4.0.1: - resolution: {integrity: sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==} + /signal-exit@4.0.2: + resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} engines: {node: '>=14'} dev: true - /sigstore@1.4.0: - resolution: {integrity: sha512-N7TRpSbFjY/TrFDg6yGAQSYBrQ5s6qmPiq4pD6fkv1LoyfMsLG0NwZWG2s5q+uttLHgyVyTa0Rogx2P78rN8kQ==} + /sigstore@1.5.2: + resolution: {integrity: sha512-X95v6xAAooVpn7PaB94TDmFeSO5SBfCtB1R23fvzr36WTfjtkiiyOeei979nbTjc8nzh6FSLeltQZuODsm1EjQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true dependencies: '@sigstore/protobuf-specs': 0.1.0 make-fetch-happen: 11.1.1 - tuf-js: 1.1.5 + tuf-js: 1.1.6 transitivePeerDependencies: - supports-color dev: true @@ -19453,7 +21023,6 @@ packages: /source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} - dev: false /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} @@ -19707,7 +21276,7 @@ packages: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 has-symbols: 1.0.3 internal-slot: 1.0.5 regexp.prototype.flags: 1.5.0 @@ -19873,7 +21442,7 @@ packages: dependencies: inline-style-parser: 0.1.1 - /styled-jsx@5.1.1(@babel/core@7.21.8)(react@18.2.0): + /styled-jsx@5.1.1(@babel/core@7.12.9)(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -19886,7 +21455,7 @@ packages: babel-plugin-macros: optional: true dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 client-only: 0.0.1 react: 18.2.0 @@ -20000,8 +21569,8 @@ packages: resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} engines: {node: ^14.18.0 || >=16.0.0} dependencies: - '@pkgr/utils': 2.4.0 - tslib: 2.5.0 + '@pkgr/utils': 2.4.1 + tslib: 2.5.2 dev: true /tailwindcss@3.2.4(postcss@8.4.23): @@ -20030,7 +21599,7 @@ packages: postcss-js: 4.0.1(postcss@8.4.23) postcss-load-config: 3.1.4(postcss@8.4.23) postcss-nested: 6.0.0(postcss@8.4.23) - postcss-selector-parser: 6.0.12 + postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 quick-lru: 5.1.1 resolve: 1.22.2 @@ -20080,8 +21649,8 @@ packages: yallist: 4.0.0 dev: true - /tar@6.1.14: - resolution: {integrity: sha512-piERznXu0U7/pW7cdSn7hjqySIVTYT6F76icmFk7ptU7dDYlXTm5r9A6K04R2vU3olYgoKeo1Cg3eeu5nhftAw==} + /tar@6.1.15: + resolution: {integrity: sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==} engines: {node: '>=10'} dependencies: chownr: 2.0.0 @@ -20139,7 +21708,7 @@ packages: engines: {node: '>=10'} dependencies: del: 6.1.1 - is-stream: 2.0.1 + is-stream: 2.0.0 temp-dir: 2.0.0 type-fest: 0.16.0 unique-string: 2.0.0 @@ -20201,8 +21770,8 @@ packages: source-map-support: 0.5.21 dev: false - /terser@5.17.1: - resolution: {integrity: sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==} + /terser@5.17.6: + resolution: {integrity: sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ==} engines: {node: '>=10'} hasBin: true dependencies: @@ -20415,7 +21984,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: false - /ts-jest@27.1.5(@babel/core@7.21.8)(@types/jest@27.5.2)(jest@27.5.1)(typescript@4.9.5): + /ts-jest@27.1.5(@babel/core@7.22.1)(@types/jest@27.5.2)(jest@27.5.1)(typescript@4.6.3): resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true @@ -20436,7 +22005,7 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.1 '@types/jest': 27.5.2 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 @@ -20445,12 +22014,12 @@ packages: json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.5.0 - typescript: 4.9.5 + semver: 7.5.1 + typescript: 4.6.3 yargs-parser: 20.2.9 dev: true - /ts-jest@29.1.0(@babel/core@7.21.8)(jest@29.5.0)(typescript@4.9.5): + /ts-jest@29.1.0(@babel/core@7.12.9)(jest@29.5.0)(typescript@4.6.3): resolution: {integrity: sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -20471,7 +22040,7 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.12.9 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 jest: 29.5.0(@types/node@17.0.23) @@ -20479,12 +22048,12 @@ packages: json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.5.0 - typescript: 4.9.5 + semver: 7.5.1 + typescript: 4.6.3 yargs-parser: 21.1.1 dev: true - /ts-node@10.9.1(@types/node@17.0.23)(typescript@4.9.5): + /ts-node@10.9.1(@types/node@17.0.23)(typescript@4.6.3): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -20502,7 +22071,7 @@ packages: '@tsconfig/node10': 1.0.9 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.3 + '@tsconfig/node16': 1.0.4 '@types/node': 17.0.23 acorn: 8.8.2 acorn-walk: 8.2.0 @@ -20510,12 +22079,12 @@ packages: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 4.9.5 + typescript: 4.6.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true - /ts-pnp@1.2.0(typescript@4.9.5): + /ts-pnp@1.2.0(typescript@4.6.3): resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} engines: {node: '>=6'} peerDependencies: @@ -20524,7 +22093,7 @@ packages: typescript: optional: true dependencies: - typescript: 4.9.5 + typescript: 4.6.3 dev: false /tsconfig-paths@3.14.2: @@ -20552,28 +22121,29 @@ packages: /tslib@2.3.1: resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} - /tslib@2.5.0: - resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + /tslib@2.5.2: + resolution: {integrity: sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==} - /tsutils@3.21.0(typescript@4.9.5): + /tsutils@3.21.0(typescript@4.6.3): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 4.9.5 + typescript: 4.6.3 dev: true /tty-browserify@0.0.0: resolution: {integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==} dev: false - /tuf-js@1.1.5: - resolution: {integrity: sha512-inqodgxdsmuxrtQVbu6tPNgRKWD1Boy3VB6GO7KczJZpAHiTukwhSzXUSzvDcw5pE2Jo8ua+e1ykpHv7VdPVlQ==} + /tuf-js@1.1.6: + resolution: {integrity: sha512-CXwFVIsXGbVY4vFiWF7TJKWmlKJAT8TWkH4RmiohJRcDJInix++F0dznDmoVbtJNzZ8yLprKUG4YrDIhv3nBMg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: '@tufjs/models': 1.0.4 + debug: 4.3.4(supports-color@6.1.0) make-fetch-happen: 11.1.1 transitivePeerDependencies: - supports-color @@ -20740,8 +22310,8 @@ packages: /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - /typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + /typescript@4.6.3: + resolution: {integrity: sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==} engines: {node: '>=4.2.0'} hasBin: true @@ -20749,8 +22319,8 @@ packages: resolution: {integrity: sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==} dev: false - /ufo@1.1.1: - resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==} + /ufo@1.1.2: + resolution: {integrity: sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==} dev: true /uglify-es@3.3.9: @@ -21005,7 +22575,7 @@ packages: '@types/node': 17.0.23 path-is-network-drive: 1.0.20 path-strip-sep: 1.0.17 - tslib: 2.5.0 + tslib: 2.3.1 dev: true /upath@1.2.0: @@ -21242,6 +22812,7 @@ packages: dependencies: '@types/unist': 2.0.6 vfile: 5.3.7 + dev: false /vfile-matter@3.0.1: resolution: {integrity: sha512-CAAIDwnh6ZdtrqAuxdElUqQRQDQgbbIrYtDYI8gCjXS1qQ+1XdLoK8FIZWxJwn0/I+BkSSZpar3SOgjemQz4fg==} @@ -21272,12 +22843,12 @@ packages: dependencies: cac: 6.7.14 debug: 4.3.4(supports-color@6.1.0) - mlly: 1.2.0 + mlly: 1.3.0 pathe: 1.1.0 picocolors: 1.0.0 source-map: 0.6.1 source-map-support: 0.5.21 - vite: 4.3.4 + vite: 4.3.9 transitivePeerDependencies: - '@types/node' - less @@ -21288,8 +22859,8 @@ packages: - terser dev: true - /vite@4.3.4: - resolution: {integrity: sha512-f90aqGBoxSFxWph2b39ae2uHAxm5jFBBdnfueNxZAT1FTpM13ccFQExCaKbR2xFW5atowjleRniQ7onjJ22QEg==} + /vite@4.3.9: + resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -21315,7 +22886,7 @@ packages: dependencies: esbuild: 0.17.6 postcss: 8.4.23 - rollup: 3.21.4 + rollup: 3.23.0 optionalDependencies: fsevents: 2.3.2 dev: true @@ -21328,8 +22899,8 @@ packages: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} dev: false - /vm2@3.9.17: - resolution: {integrity: sha512-AqwtCnZ/ERcX+AVj9vUsphY56YANXxRuqMb7GsDtAr0m0PcQX3u0Aj3KWiXM0YAHy7i6JEeHrwOnwXbGYgRpAw==} + /vm2@3.9.19: + resolution: {integrity: sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==} engines: {node: '>=6.0'} hasBin: true dependencies: @@ -21744,7 +23315,7 @@ packages: /write-file-atomic@2.4.3: resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} dependencies: - graceful-fs: 4.2.11 + graceful-fs: 4.2.10 imurmurhash: 0.1.4 signal-exit: 3.0.7 @@ -21778,7 +23349,7 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: imurmurhash: 0.1.4 - signal-exit: 4.0.1 + signal-exit: 4.0.2 dev: true /write-json-file@3.2.0: @@ -21786,7 +23357,7 @@ packages: engines: {node: '>=6'} dependencies: detect-indent: 5.0.0 - graceful-fs: 4.2.11 + graceful-fs: 4.2.10 make-dir: 2.1.0 pify: 4.0.1 sort-keys: 2.0.0 @@ -21841,18 +23412,18 @@ packages: dependencies: '@rollup/pluginutils': 4.2.1 '@types/estree-jsx': 0.0.1 - astring: 1.8.4 + astring: 1.8.5 estree-util-build-jsx: 2.2.2 estree-util-is-identifier-name: 2.1.0 estree-walker: 3.0.3 got: 11.8.6 - hast-util-to-estree: 2.3.2 + hast-util-to-estree: 2.3.3 loader-utils: 2.0.4 markdown-extensions: 1.1.1 mdast-util-mdx: 1.1.0 - micromark-extension-mdxjs: 1.0.0 + micromark-extension-mdxjs: 1.0.1 periscopic: 3.1.0 - remark-parse: 10.0.1 + remark-parse: 10.0.2 remark-rehype: 9.1.0 source-map: 0.7.4 unified: 10.1.2 @@ -21927,8 +23498,8 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - /yaml@2.2.2: - resolution: {integrity: sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==} + /yaml@2.3.1: + resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} engines: {node: '>= 14'} dev: true @@ -22002,7 +23573,7 @@ packages: require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 - yargs-parser: 20.2.9 + yargs-parser: 20.2.4 dev: true /yargs@17.7.2: From 335afcf248a37923946f47934665d5601ea762c2 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Sat, 27 May 2023 10:58:48 +0200 Subject: [PATCH 225/312] Remove patch --- .../example-next-13-advanced/package.json | 5 ----- examples/example-next-13/package.json | 5 ----- patches/next@13.4.0.patch | 22 ------------------- pnpm-lock.yaml | 4 ++-- 4 files changed, 2 insertions(+), 34 deletions(-) delete mode 100644 patches/next@13.4.0.patch diff --git a/examples/example-next-13-advanced/package.json b/examples/example-next-13-advanced/package.json index 83a1418b2..0be4f3aa9 100644 --- a/examples/example-next-13-advanced/package.json +++ b/examples/example-next-13-advanced/package.json @@ -28,10 +28,5 @@ "eslint-config-molindo": "^6.0.0", "eslint-config-next": "^13.4.0", "typescript": "^4.6.3" - }, - "pnpm": { - "patchedDependencies": { - "next@13.4.0": "patches/next@13.4.0.patch" - } } } diff --git a/examples/example-next-13/package.json b/examples/example-next-13/package.json index ad04f73d5..fa46e663f 100644 --- a/examples/example-next-13/package.json +++ b/examples/example-next-13/package.json @@ -30,10 +30,5 @@ "postcss": "^8.4.23", "prettier-plugin-tailwindcss": "^0.2.3", "typescript": "^4.6.3" - }, - "pnpm": { - "patchedDependencies": { - "next@13.4.0": "patches/next@13.4.0.patch" - } } } diff --git a/patches/next@13.4.0.patch b/patches/next@13.4.0.patch deleted file mode 100644 index 977cf2f9f..000000000 --- a/patches/next@13.4.0.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/dist/server/send-payload/revalidate-headers.js b/dist/server/send-payload/revalidate-headers.js -index eae390d4927601057e38e95d6cda615342e9674e..b83df25eebfee4db68049f8bdf267dd0cd22dd2c 100644 ---- a/dist/server/send-payload/revalidate-headers.js -+++ b/dist/server/send-payload/revalidate-headers.js -@@ -10,9 +10,14 @@ Object.defineProperty(exports, "setRevalidateHeaders", { - }); - function setRevalidateHeaders(res, options) { - if (options.private || options.stateful) { -- if (options.private || !res.getHeader("Cache-Control")) { -- res.setHeader("Cache-Control", `private, no-cache, no-store, max-age=0, must-revalidate`); -- } -+ if (options.private) { -+ res.setHeader("Cache-Control", `private, no-cache, no-store, max-age=0, must-revalidate`); -+ } else { -+ // IMPORTANT: This matches all content routes and applies the same caching -+ // headers (10min CDN caching with infinite stale-while-revalidate). -+ // You can also use res.req.url to match specific routes. -+ res.setHeader('Cache-Control', 'public, s-maxage=600, stale-while-revalidate=31557600'); -+ } - } else if (typeof options.revalidate === "number") { - if (options.revalidate < 1) { - throw new Error(`invariant: invalid Cache-Control duration provided: ${options.revalidate} < 1`); \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 84c3dcf07..eff117c24 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12346,7 +12346,7 @@ packages: '@types/glob': 7.2.0 array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.11 + fast-glob: 3.2.12 glob: 7.2.3 ignore: 5.2.4 merge2: 1.4.1 @@ -17711,7 +17711,7 @@ packages: '@yarnpkg/parsers': 3.0.0-rc.44 '@zkochan/js-yaml': 0.0.6 axios: 1.4.0 - chalk: 4.1.2 + chalk: 4.1.0 cli-cursor: 3.1.0 cli-spinners: 2.6.1 cliui: 7.0.4 From 808acab4f56771ab5a0a1a6f132a30f0f439de21 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 20 Jun 2023 18:34:41 +0200 Subject: [PATCH 226/312] Fix error when no config is provided --- packages/next-intl/plugin.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/next-intl/plugin.js b/packages/next-intl/plugin.js index 0972ebaed..ed20f8cce 100644 --- a/packages/next-intl/plugin.js +++ b/packages/next-intl/plugin.js @@ -34,7 +34,7 @@ const withNextIntl = require('next-intl/plugin')( ); module.exports = withNextIntl({ - experimental: {appDir: true} + // Other Next.js configuration ... });\n`); } } @@ -49,7 +49,7 @@ module.exports = withNextIntl({ webpack(config, options) { config.resolve.alias['next-intl/config'] = require.resolve(i18nPath); - if (typeof nextConfig.webpack === 'function') { + if (typeof nextConfig?.webpack === 'function') { return nextConfig.webpack(config, options); } From 0f3116b9e41cc2325afe9581269c16064269227e Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 22 Jun 2023 10:37:24 +0200 Subject: [PATCH 227/312] feat: New APIs for using `next-intl` outside of components (#339) The currently available APIs for using `next-intl` outside of components like `getTranslations` work well, but are limited to SSR. Using `useTranslations` in components is technically also limited to SSR at this point, but I have high hopes that React Server Context will eventually enable those to work for SSG too. However, React Server Context will not be available in functions like `generateMetadata` as this happens outside of the React render as far as I understand. Therefore we should provide APIs that anticipate this change. In the unlikely event that React Server Context will work somehow in these functions, we can still make the passed `locale` optional, but the transition will be smooth here. Moving to this new API rather sooner than later is a good idea to avoid churn. ### Upgrade guide **Before** ```tsx import {getTranslations, getFormatter, getNow, getTimeZone} from 'next-intl/server'; export async function generateMetadata() { const t = await getTranslations('LocaleLayout'); const format = await getFormatter(); const now = await getNow(); const timeZone = await getTimeZone(); } ``` **After** ```tsx import {getTranslator, getFormatter, getNow, getTimeZone} from 'next-intl/server'; export async function generateMetadata({params}) { // Note that this function is now called "getTranslator" const t = await getTranslator({ locale: params.locale, namespace: 'LocaleLayout' }); const format = await getFormatter({locale: params.locale}); const now = await getNow({locale: params.locale}); const timeZone = await getTimeZone({locale: params.locale}); } ``` --- .../src/app/[locale]/layout.tsx | 23 +++- .../example-next-13-advanced/src/i18n.tsx | 2 +- .../tests/main.spec.ts | 6 +- .../src/app/[locale]/layout.tsx | 11 +- .../src/react-server/useFormatter.tsx | 4 +- .../next-intl/src/react-server/useLocale.tsx | 4 +- .../next-intl/src/react-server/useNow.tsx | 4 +- .../src/react-server/useTimeZone.tsx | 4 +- .../src/react-server/useTranslations.tsx | 6 +- packages/next-intl/src/server/getConfig.tsx | 10 +- .../next-intl/src/server/getFormatter.tsx | 32 +++++- packages/next-intl/src/server/getIntl.tsx | 10 +- packages/next-intl/src/server/getLocale.tsx | 51 +++------ .../src/server/getLocaleFromHeader.tsx | 40 +++++++ packages/next-intl/src/server/getNow.tsx | 24 +++- packages/next-intl/src/server/getTimeZone.tsx | 24 +++- .../next-intl/src/server/getTranslations.tsx | 15 ++- .../next-intl/src/server/getTranslator.tsx | 103 ++++++++++++++++++ packages/next-intl/src/server/index.tsx | 1 + packages/next-intl/src/server/redirect.tsx | 4 +- 20 files changed, 308 insertions(+), 70 deletions(-) create mode 100644 packages/next-intl/src/server/getLocaleFromHeader.tsx create mode 100644 packages/next-intl/src/server/getTranslator.tsx diff --git a/examples/example-next-13-advanced/src/app/[locale]/layout.tsx b/examples/example-next-13-advanced/src/app/[locale]/layout.tsx index 34eb0bacd..45507d939 100644 --- a/examples/example-next-13-advanced/src/app/[locale]/layout.tsx +++ b/examples/example-next-13-advanced/src/app/[locale]/layout.tsx @@ -1,7 +1,12 @@ import {Metadata} from 'next'; import {notFound} from 'next/navigation'; import {useLocale} from 'next-intl'; -import {getTranslations, getFormatter} from 'next-intl/server'; +import { + getFormatter, + getNow, + getTimeZone, + getTranslator +} from 'next-intl/server'; import {ReactNode} from 'react'; type Props = { @@ -9,15 +14,23 @@ type Props = { params: {locale: string}; }; -export async function generateMetadata(): Promise { - const t = await getTranslations('LocaleLayout'); - const formatter = await getFormatter(); +export async function generateMetadata({ + params +}: Omit): Promise { + const t = await getTranslator({ + namespace: 'LocaleLayout', + locale: params.locale + }); + const formatter = await getFormatter({locale: params.locale}); + const now = await getNow({locale: params.locale}); + const timeZone = await getTimeZone({locale: params.locale}); return { title: t('title'), description: t('description'), other: { - currentYear: formatter.dateTime(new Date(), {year: 'numeric'}) + currentYear: formatter.dateTime(now, {year: 'numeric'}), + timeZone: timeZone || 'N/A' } }; } diff --git a/examples/example-next-13-advanced/src/i18n.tsx b/examples/example-next-13-advanced/src/i18n.tsx index 6b62631c8..aff14c5c0 100644 --- a/examples/example-next-13-advanced/src/i18n.tsx +++ b/examples/example-next-13-advanced/src/i18n.tsx @@ -3,7 +3,7 @@ import {getRequestConfig} from 'next-intl/server'; export default getRequestConfig(async ({locale}) => { const now = headers().get('x-now'); - const timeZone = headers().get('x-time-zone') ?? undefined; + const timeZone = headers().get('x-time-zone') ?? 'Europe/Vienna'; const messages = (await import(`../messages/${locale}.json`)).default; return { diff --git a/examples/example-next-13-advanced/tests/main.spec.ts b/examples/example-next-13-advanced/tests/main.spec.ts index 8145b8b8c..d056ea1a2 100644 --- a/examples/example-next-13-advanced/tests/main.spec.ts +++ b/examples/example-next-13-advanced/tests/main.spec.ts @@ -538,6 +538,10 @@ it('populates metadata', async ({page}) => { ); await expect(page.locator('meta[name="currentYear"]')).toHaveAttribute( 'content', - '2023' + new Date().getFullYear().toString() + ); + await expect(page.locator('meta[name="timeZone"]')).toHaveAttribute( + 'content', + 'Europe/Vienna' ); }); diff --git a/examples/example-next-13/src/app/[locale]/layout.tsx b/examples/example-next-13/src/app/[locale]/layout.tsx index 995b23afc..014b2520e 100644 --- a/examples/example-next-13/src/app/[locale]/layout.tsx +++ b/examples/example-next-13/src/app/[locale]/layout.tsx @@ -2,7 +2,7 @@ import clsx from 'clsx'; import {Inter} from 'next/font/google'; import {notFound} from 'next/navigation'; import {useLocale} from 'next-intl'; -import {getTranslations} from 'next-intl/server'; +import {getTranslator} from 'next-intl/server'; import {ReactNode} from 'react'; import Navigation from 'components/Navigation'; @@ -13,11 +13,14 @@ type Props = { params: {locale: string}; }; -export async function generateMetadata() { - const t = await getTranslations(); +export async function generateMetadata({params}: Omit) { + const t = await getTranslator({ + locale: params.locale, + namespace: 'LocaleLayout' + }); return { - title: t('LocaleLayout.title') + title: t('title') }; } diff --git a/packages/next-intl/src/react-server/useFormatter.tsx b/packages/next-intl/src/react-server/useFormatter.tsx index 1770846d2..4001d0e64 100644 --- a/packages/next-intl/src/react-server/useFormatter.tsx +++ b/packages/next-intl/src/react-server/useFormatter.tsx @@ -1,10 +1,12 @@ import type {useFormatter as useFormatterType} from 'use-intl'; import getFormatter from '../server/getFormatter'; import useHook from './useHook'; +import useLocale from './useLocale'; export default function useFormatter( // eslint-disable-next-line no-empty-pattern ...[]: Parameters ): ReturnType { - return useHook('useFormatter', getFormatter()); + const locale = useLocale(); + return useHook('useFormatter', getFormatter({locale})); } diff --git a/packages/next-intl/src/react-server/useLocale.tsx b/packages/next-intl/src/react-server/useLocale.tsx index 31a685242..b55d36088 100644 --- a/packages/next-intl/src/react-server/useLocale.tsx +++ b/packages/next-intl/src/react-server/useLocale.tsx @@ -1,9 +1,9 @@ import type {useLocale as useLocaleType} from 'use-intl'; -import getLocale from '../server/getLocale'; +import getLocaleFromHeader from '../server/getLocaleFromHeader'; export default function useLocale( // eslint-disable-next-line no-empty-pattern ...[]: Parameters ): ReturnType { - return getLocale(); + return getLocaleFromHeader(); } diff --git a/packages/next-intl/src/react-server/useNow.tsx b/packages/next-intl/src/react-server/useNow.tsx index 9e5653724..289b73c4f 100644 --- a/packages/next-intl/src/react-server/useNow.tsx +++ b/packages/next-intl/src/react-server/useNow.tsx @@ -1,6 +1,7 @@ import type {useNow as useNowType} from 'use-intl'; import getNow from '../server/getNow'; import useHook from './useHook'; +import useLocale from './useLocale'; export default function useNow( ...[options]: Parameters @@ -11,5 +12,6 @@ export default function useNow( ); } - return useHook('useNow', getNow()); + const locale = useLocale(); + return useHook('useNow', getNow({locale})); } diff --git a/packages/next-intl/src/react-server/useTimeZone.tsx b/packages/next-intl/src/react-server/useTimeZone.tsx index 1ae16da2c..4b5e4508a 100644 --- a/packages/next-intl/src/react-server/useTimeZone.tsx +++ b/packages/next-intl/src/react-server/useTimeZone.tsx @@ -1,10 +1,12 @@ import type {useTimeZone as useTimeZoneType} from 'use-intl'; import getTimeZone from '../server/getTimeZone'; import useHook from './useHook'; +import useLocale from './useLocale'; export default function useTimeZone( // eslint-disable-next-line no-empty-pattern ...[]: Parameters ): ReturnType { - return useHook('useTimeZone', getTimeZone()); + const locale = useLocale(); + return useHook('useTimeZone', getTimeZone({locale})); } diff --git a/packages/next-intl/src/react-server/useTranslations.tsx b/packages/next-intl/src/react-server/useTranslations.tsx index dde70957c..b3bea0824 100644 --- a/packages/next-intl/src/react-server/useTranslations.tsx +++ b/packages/next-intl/src/react-server/useTranslations.tsx @@ -1,11 +1,13 @@ import type {useTranslations as useTranslationsType} from 'use-intl'; -import getTranslations from '../server/getTranslations'; +import getTranslator from '../server/getTranslator'; import useHook from './useHook'; +import useLocale from './useLocale'; export default function useTranslations( ...[namespace]: Parameters ): ReturnType { - const result = useHook('useTranslations', getTranslations(namespace)); + const locale = useLocale(); + const result = useHook('useTranslations', getTranslator({namespace, locale})); // The types are slightly off here and indicate that rich text formatting // doesn't integrate with React - this is not the case. diff --git a/packages/next-intl/src/server/getConfig.tsx b/packages/next-intl/src/server/getConfig.tsx index 483883b44..66272530f 100644 --- a/packages/next-intl/src/server/getConfig.tsx +++ b/packages/next-intl/src/server/getConfig.tsx @@ -1,7 +1,9 @@ import {cache} from 'react'; import getInitializedConfig from 'use-intl/dist/src/react/getInitializedConfig'; import createRequestConfig from '../server/createRequestConfig'; -import getLocale from './getLocale'; + +// Make sure `now` is consistent across the request in case none was configured +const getDefaultNow = cache(() => new Date()); const receiveRuntimeConfig = cache( async (locale: string, getConfig?: typeof createRequestConfig) => { @@ -11,14 +13,12 @@ const receiveRuntimeConfig = cache( } return { ...result, - // Make sure `now` is consistent across the request in case none was configured - now: result?.now || new Date() + now: result?.now || getDefaultNow() }; } ); -const getConfig = cache(async () => { - const locale = getLocale(); +const getConfig = cache(async (locale: string) => { const runtimeConfig = await receiveRuntimeConfig(locale, createRequestConfig); const opts = {...runtimeConfig, locale}; return getInitializedConfig(opts); diff --git a/packages/next-intl/src/server/getFormatter.tsx b/packages/next-intl/src/server/getFormatter.tsx index c0c0b3a3e..0341bb749 100644 --- a/packages/next-intl/src/server/getFormatter.tsx +++ b/packages/next-intl/src/server/getFormatter.tsx @@ -1,10 +1,36 @@ import {cache} from 'react'; import {createFormatter} from 'use-intl/dist/src/core'; import getConfig from './getConfig'; +import getLocaleFromHeader from './getLocaleFromHeader'; -const getFormatter = cache(async () => { - const config = await getConfig(); - return createFormatter(config); +let hasWarned = false; + +/** + * Returns a formatter based on the given locale. + * + * The formatter automatically receives the request config, but + * you can override it by passing in additional options. + */ +const getFormatter = cache(async (opts?: {locale: string}) => { + if (!opts?.locale && !hasWarned) { + hasWarned = true; + console.warn(` +Calling \`getFormatter\` without a locale is deprecated, please update the call: + +// app/[locale]/layout.tsx +export async function generateMetadata({params}) { + const t = await getFormatter({locale: params.locale}); + + // ... +} + +Learn more: https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components +`); + } + + const locale = opts?.locale || getLocaleFromHeader(); + const config = await getConfig(locale); + return createFormatter({...config, ...opts}); }); export default getFormatter; diff --git a/packages/next-intl/src/server/getIntl.tsx b/packages/next-intl/src/server/getIntl.tsx index ab701e956..f2dbe2adc 100644 --- a/packages/next-intl/src/server/getIntl.tsx +++ b/packages/next-intl/src/server/getIntl.tsx @@ -1,6 +1,7 @@ import {cache} from 'react'; import {createIntl} from 'use-intl/dist/src/core'; import getConfig from './getConfig'; +import getLocaleFromHeader from './getLocaleFromHeader'; let hasWarned = false; @@ -9,11 +10,16 @@ const getIntl = cache(async () => { if (!hasWarned) { hasWarned = true; console.warn( - '`getIntl()` is deprecated and will be removed in the next major version. Please switch to `getFormatter()`.' + ` +\`getIntl()\` is deprecated and will be removed in the next major version. Please switch to \`getFormatter()\`. + +Learn more: https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components +` ); } - const config = await getConfig(); + const locale = getLocaleFromHeader(); + const config = await getConfig(locale); return createIntl(config); }); diff --git a/packages/next-intl/src/server/getLocale.tsx b/packages/next-intl/src/server/getLocale.tsx index 2d95e2c62..bf87049d2 100644 --- a/packages/next-intl/src/server/getLocale.tsx +++ b/packages/next-intl/src/server/getLocale.tsx @@ -1,40 +1,21 @@ -import {cookies, headers} from 'next/headers'; -import {cache} from 'react'; -import {COOKIE_LOCALE_NAME, HEADER_LOCALE_NAME} from '../shared/constants'; +import getLocaleFromHeader from './getLocaleFromHeader'; -const getLocale = cache(() => { - let locale; +let hasWarned = false; - try { - // A header is only set when we're changing the locale, - // otherwise we reuse an existing one from the cookie. - const requestHeaders = headers(); - if (requestHeaders.has(HEADER_LOCALE_NAME)) { - locale = requestHeaders.get(HEADER_LOCALE_NAME); - } else { - locale = cookies().get(COOKIE_LOCALE_NAME)?.value; - } - } catch (error) { - if ( - error instanceof Error && - (error as any).digest === 'DYNAMIC_SERVER_USAGE' - ) { - throw new Error( - 'Usage of next-intl APIs in Server Components is currently only available for dynamic rendering (i.e. no `generateStaticParams`).\n\nSupport for static rendering is under consideration, please refer to the roadmap: https://next-intl-docs.vercel.app/docs/next-13/server-components#roadmap', - {cause: error} - ); - } else { - throw error; - } - } +export default function getLocale() { + if (!hasWarned) { + console.warn(` +\`getLocale\` is deprecated. Please use the \`locale\` parameter from Next.js instead: - if (!locale) { - throw new Error( - 'Unable to find `next-intl` locale, have you configured the middleware?`' - ); - } +// app/[locale]/layout.tsx +export async function generateMetadata({params}) { + // Use \`params.locale\` here +} - return locale; -}); +Learn more: https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components +`); + hasWarned = true; + } -export default getLocale; + return getLocaleFromHeader(); +} diff --git a/packages/next-intl/src/server/getLocaleFromHeader.tsx b/packages/next-intl/src/server/getLocaleFromHeader.tsx new file mode 100644 index 000000000..7ddeb78e0 --- /dev/null +++ b/packages/next-intl/src/server/getLocaleFromHeader.tsx @@ -0,0 +1,40 @@ +import {cookies, headers} from 'next/headers'; +import {cache} from 'react'; +import {COOKIE_LOCALE_NAME, HEADER_LOCALE_NAME} from '../shared/constants'; + +const getLocaleFromHeader = cache(() => { + let locale; + + try { + // A header is only set when we're changing the locale, + // otherwise we reuse an existing one from the cookie. + const requestHeaders = headers(); + if (requestHeaders.has(HEADER_LOCALE_NAME)) { + locale = requestHeaders.get(HEADER_LOCALE_NAME); + } else { + locale = cookies().get(COOKIE_LOCALE_NAME)?.value; + } + } catch (error) { + if ( + error instanceof Error && + (error as any).digest === 'DYNAMIC_SERVER_USAGE' + ) { + throw new Error( + 'Usage of next-intl APIs in Server Components is currently only available for dynamic rendering (i.e. no `generateStaticParams`).\n\nSupport for static rendering is under consideration, please refer to the roadmap: https://next-intl-docs.vercel.app/docs/next-13/server-components#roadmap', + {cause: error} + ); + } else { + throw error; + } + } + + if (!locale) { + throw new Error( + 'Unable to find `next-intl` locale, have you configured the middleware?`' + ); + } + + return locale; +}); + +export default getLocaleFromHeader; diff --git a/packages/next-intl/src/server/getNow.tsx b/packages/next-intl/src/server/getNow.tsx index e541f7560..1c97dc7f8 100644 --- a/packages/next-intl/src/server/getNow.tsx +++ b/packages/next-intl/src/server/getNow.tsx @@ -1,8 +1,28 @@ import {cache} from 'react'; import getConfig from './getConfig'; +import getLocaleFromHeader from './getLocaleFromHeader'; -const getNow = cache(async () => { - const config = await getConfig(); +let hasWarned = false; + +const getNow = cache(async (opts?: {locale: string}) => { + if (!opts?.locale && !hasWarned) { + hasWarned = true; + console.warn(` +Calling \`getNow\` without a locale is deprecated. Please update the call: + +// app/[locale]/layout.tsx +export async function generateMetadata({params}) { + const t = await getNow({locale: params.locale}); + + // ... +} + +Learn more: https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components +`); + } + + const locale = opts?.locale || getLocaleFromHeader(); + const config = await getConfig(locale); return config.now; }); diff --git a/packages/next-intl/src/server/getTimeZone.tsx b/packages/next-intl/src/server/getTimeZone.tsx index 8fd3ddaf4..43bff5bb0 100644 --- a/packages/next-intl/src/server/getTimeZone.tsx +++ b/packages/next-intl/src/server/getTimeZone.tsx @@ -1,8 +1,28 @@ import {cache} from 'react'; import getConfig from './getConfig'; +import getLocaleFromHeader from './getLocaleFromHeader'; -const getTimeZone = cache(async () => { - const config = await getConfig(); +let hasWarned = false; + +const getTimeZone = cache(async (opts?: {locale: string}) => { + if (!opts?.locale && !hasWarned) { + hasWarned = true; + console.warn(` +Calling \`getTimeZone\` without a locale is deprecated. Please update the call: + +// app/[locale]/layout.tsx +export async function generateMetadata({params}) { + const t = await getTimeZone({locale: params.locale}); + + // ... +} + +Learn more: https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components +`); + } + + const locale = opts?.locale || getLocaleFromHeader(); + const config = await getConfig(locale); return config.timeZone; }); diff --git a/packages/next-intl/src/server/getTranslations.tsx b/packages/next-intl/src/server/getTranslations.tsx index 95a1163b6..0a52432ea 100644 --- a/packages/next-intl/src/server/getTranslations.tsx +++ b/packages/next-intl/src/server/getTranslations.tsx @@ -12,6 +12,9 @@ import NamespaceKeys from 'use-intl/dist/src/core/utils/NamespaceKeys'; import NestedKeyOf from 'use-intl/dist/src/core/utils/NestedKeyOf'; import NestedValueOf from 'use-intl/dist/src/core/utils/NestedValueOf'; import getConfig from './getConfig'; +import getLocaleFromHeader from './getLocaleFromHeader'; + +let hasWarned = false; async function getTranslationsImpl< NestedKey extends NamespaceKeys< @@ -80,7 +83,17 @@ Promise<{ key: TargetKey ): any; }> { - const config = await getConfig(); + if (!hasWarned) { + console.warn(` +\`getTranslations\` is deprecated, please switch to \`getTranslator\`. + +Learn more: https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components + `); + hasWarned = true; + } + + const locale = getLocaleFromHeader(); + const config = await getConfig(locale); const messagesOrError = getMessagesOrError({ messages: config.messages as any, diff --git a/packages/next-intl/src/server/getTranslator.tsx b/packages/next-intl/src/server/getTranslator.tsx new file mode 100644 index 000000000..a1a69cb92 --- /dev/null +++ b/packages/next-intl/src/server/getTranslator.tsx @@ -0,0 +1,103 @@ +/* eslint-disable import/default */ + +import {cache} from 'react'; +import type Formats from 'use-intl/dist/src/core/Formats'; +import type TranslationValues from 'use-intl/dist/src/core/TranslationValues'; +import createBaseTranslator, { + getMessagesOrError +} from 'use-intl/dist/src/core/createBaseTranslator'; +import {CoreRichTranslationValues} from 'use-intl/dist/src/core/createTranslatorImpl'; +import MessageKeys from 'use-intl/dist/src/core/utils/MessageKeys'; +import NamespaceKeys from 'use-intl/dist/src/core/utils/NamespaceKeys'; +import NestedKeyOf from 'use-intl/dist/src/core/utils/NestedKeyOf'; +import NestedValueOf from 'use-intl/dist/src/core/utils/NestedValueOf'; +import getConfig from './getConfig'; + +async function getTranslatorImpl< + NestedKey extends NamespaceKeys< + IntlMessages, + NestedKeyOf + > = never +>(opts: { + namespace?: NestedKey; + locale: string; +}): // Explicitly defining the return type is necessary as TypeScript would get it wrong +Promise<{ + // Default invocation + < + TargetKey extends MessageKeys< + NestedValueOf< + {'!': IntlMessages}, + [NestedKey] extends [never] ? '!' : `!.${NestedKey}` + >, + NestedKeyOf< + NestedValueOf< + {'!': IntlMessages}, + [NestedKey] extends [never] ? '!' : `!.${NestedKey}` + > + > + > + >( + key: TargetKey, + values?: TranslationValues, + formats?: Partial + ): string; + + // `rich` + rich< + TargetKey extends MessageKeys< + NestedValueOf< + {'!': IntlMessages}, + [NestedKey] extends [never] ? '!' : `!.${NestedKey}` + >, + NestedKeyOf< + NestedValueOf< + {'!': IntlMessages}, + [NestedKey] extends [never] ? '!' : `!.${NestedKey}` + > + > + > + >( + key: TargetKey, + values?: CoreRichTranslationValues, + formats?: Partial + ): string; + + // `raw` + raw< + TargetKey extends MessageKeys< + NestedValueOf< + {'!': IntlMessages}, + [NestedKey] extends [never] ? '!' : `!.${NestedKey}` + >, + NestedKeyOf< + NestedValueOf< + {'!': IntlMessages}, + [NestedKey] extends [never] ? '!' : `!.${NestedKey}` + > + > + > + >( + key: TargetKey + ): any; +}> { + const config = await getConfig(opts.locale); + + const messagesOrError = getMessagesOrError({ + messages: config.messages as any, + namespace: opts.namespace, + onError: config.onError + }); + + // We allow to resolve rich text formatting here, but the types forbid it when + // `getTranslations` is used directly. Supporting rich text is important when + // the react-server implementation calls into this function. + // @ts-ignore + return createBaseTranslator({ + ...config, + ...opts, + messagesOrError + }); +} + +export default cache(getTranslatorImpl); diff --git a/packages/next-intl/src/server/index.tsx b/packages/next-intl/src/server/index.tsx index 068533ce2..c3488c338 100644 --- a/packages/next-intl/src/server/index.tsx +++ b/packages/next-intl/src/server/index.tsx @@ -40,5 +40,6 @@ export {default as getLocale} from './getLocale'; export {default as getNow} from './getNow'; export {default as getTimeZone} from './getTimeZone'; export {default as getTranslations} from './getTranslations'; +export {default as getTranslator} from './getTranslator'; export {default as redirect} from './redirect'; diff --git a/packages/next-intl/src/server/redirect.tsx b/packages/next-intl/src/server/redirect.tsx index 6358fde83..487ba71c0 100644 --- a/packages/next-intl/src/server/redirect.tsx +++ b/packages/next-intl/src/server/redirect.tsx @@ -1,7 +1,7 @@ import baseRedirect from '../shared/redirect'; -import getLocale from './getLocale'; +import getLocaleFromHeader from './getLocaleFromHeader'; export default function redirect(pathname: string) { - const locale = getLocale(); + const locale = getLocaleFromHeader(); return baseRedirect(pathname, locale); } From 873dc594014d9f908b1f5943657a5498ce8c8db1 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 23 Jun 2023 09:28:28 +0200 Subject: [PATCH 228/312] refactor: Switch to a string argument for the `locale` that is passed to the non-component APIs (#343) --- .../src/app/[locale]/layout.tsx | 13 +++--- .../src/app/[locale]/layout.tsx | 9 ++-- .../src/react-server/useFormatter.tsx | 2 +- .../next-intl/src/react-server/useNow.tsx | 2 +- .../src/react-server/useTimeZone.tsx | 2 +- .../src/react-server/useTranslations.tsx | 2 +- .../next-intl/src/server/getFormatter.tsx | 37 +++++++++++++--- packages/next-intl/src/server/getNow.tsx | 37 +++++++++++++--- packages/next-intl/src/server/getTimeZone.tsx | 37 +++++++++++++--- .../next-intl/src/server/getTranslator.tsx | 43 ++++++++++++++++--- 10 files changed, 139 insertions(+), 45 deletions(-) diff --git a/examples/example-next-13-advanced/src/app/[locale]/layout.tsx b/examples/example-next-13-advanced/src/app/[locale]/layout.tsx index 45507d939..bac9e11aa 100644 --- a/examples/example-next-13-advanced/src/app/[locale]/layout.tsx +++ b/examples/example-next-13-advanced/src/app/[locale]/layout.tsx @@ -15,15 +15,12 @@ type Props = { }; export async function generateMetadata({ - params + params: {locale} }: Omit): Promise { - const t = await getTranslator({ - namespace: 'LocaleLayout', - locale: params.locale - }); - const formatter = await getFormatter({locale: params.locale}); - const now = await getNow({locale: params.locale}); - const timeZone = await getTimeZone({locale: params.locale}); + const t = await getTranslator(locale, 'LocaleLayout'); + const formatter = await getFormatter(locale); + const now = await getNow(locale); + const timeZone = await getTimeZone(locale); return { title: t('title'), diff --git a/examples/example-next-13/src/app/[locale]/layout.tsx b/examples/example-next-13/src/app/[locale]/layout.tsx index 014b2520e..9ad57533e 100644 --- a/examples/example-next-13/src/app/[locale]/layout.tsx +++ b/examples/example-next-13/src/app/[locale]/layout.tsx @@ -13,11 +13,10 @@ type Props = { params: {locale: string}; }; -export async function generateMetadata({params}: Omit) { - const t = await getTranslator({ - locale: params.locale, - namespace: 'LocaleLayout' - }); +export async function generateMetadata({ + params: {locale} +}: Omit) { + const t = await getTranslator(locale, 'LocaleLayout'); return { title: t('title') diff --git a/packages/next-intl/src/react-server/useFormatter.tsx b/packages/next-intl/src/react-server/useFormatter.tsx index 4001d0e64..30230ef58 100644 --- a/packages/next-intl/src/react-server/useFormatter.tsx +++ b/packages/next-intl/src/react-server/useFormatter.tsx @@ -8,5 +8,5 @@ export default function useFormatter( ...[]: Parameters ): ReturnType { const locale = useLocale(); - return useHook('useFormatter', getFormatter({locale})); + return useHook('useFormatter', getFormatter(locale)); } diff --git a/packages/next-intl/src/react-server/useNow.tsx b/packages/next-intl/src/react-server/useNow.tsx index 289b73c4f..4359126cf 100644 --- a/packages/next-intl/src/react-server/useNow.tsx +++ b/packages/next-intl/src/react-server/useNow.tsx @@ -13,5 +13,5 @@ export default function useNow( } const locale = useLocale(); - return useHook('useNow', getNow({locale})); + return useHook('useNow', getNow(locale)); } diff --git a/packages/next-intl/src/react-server/useTimeZone.tsx b/packages/next-intl/src/react-server/useTimeZone.tsx index 4b5e4508a..a9907a4cd 100644 --- a/packages/next-intl/src/react-server/useTimeZone.tsx +++ b/packages/next-intl/src/react-server/useTimeZone.tsx @@ -8,5 +8,5 @@ export default function useTimeZone( ...[]: Parameters ): ReturnType { const locale = useLocale(); - return useHook('useTimeZone', getTimeZone({locale})); + return useHook('useTimeZone', getTimeZone(locale)); } diff --git a/packages/next-intl/src/react-server/useTranslations.tsx b/packages/next-intl/src/react-server/useTranslations.tsx index b3bea0824..b95893231 100644 --- a/packages/next-intl/src/react-server/useTranslations.tsx +++ b/packages/next-intl/src/react-server/useTranslations.tsx @@ -7,7 +7,7 @@ export default function useTranslations( ...[namespace]: Parameters ): ReturnType { const locale = useLocale(); - const result = useHook('useTranslations', getTranslator({namespace, locale})); + const result = useHook('useTranslations', getTranslator(locale, namespace)); // The types are slightly off here and indicate that rich text formatting // doesn't integrate with React - this is not the case. diff --git a/packages/next-intl/src/server/getFormatter.tsx b/packages/next-intl/src/server/getFormatter.tsx index 0341bb749..df251c434 100644 --- a/packages/next-intl/src/server/getFormatter.tsx +++ b/packages/next-intl/src/server/getFormatter.tsx @@ -3,7 +3,8 @@ import {createFormatter} from 'use-intl/dist/src/core'; import getConfig from './getConfig'; import getLocaleFromHeader from './getLocaleFromHeader'; -let hasWarned = false; +let hasWarnedForMissingLocale = false; +let hasWarnedForObjectArgument = false; /** * Returns a formatter based on the given locale. @@ -11,10 +12,32 @@ let hasWarned = false; * The formatter automatically receives the request config, but * you can override it by passing in additional options. */ -const getFormatter = cache(async (opts?: {locale: string}) => { - if (!opts?.locale && !hasWarned) { - hasWarned = true; - console.warn(` +const getFormatter = cache(async (locale?: string | {locale: string}) => { + if (typeof locale === 'object') { + locale = locale.locale; + if (!hasWarnedForObjectArgument) { + hasWarnedForObjectArgument = true; + console.warn( + ` +DEPRECATION WARNING: Calling \`getFormatter\` with an object argument is deprecated, please update your call site accordingly. + +// Previously +getFormatter({locale: 'en'}); + +// Now +getFormatter('en'); + +See also https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components +` + ); + } + } + + if (!locale) { + locale = getLocaleFromHeader(); + if (!hasWarnedForMissingLocale) { + hasWarnedForMissingLocale = true; + console.warn(` Calling \`getFormatter\` without a locale is deprecated, please update the call: // app/[locale]/layout.tsx @@ -26,11 +49,11 @@ export async function generateMetadata({params}) { Learn more: https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components `); + } } - const locale = opts?.locale || getLocaleFromHeader(); const config = await getConfig(locale); - return createFormatter({...config, ...opts}); + return createFormatter(config); }); export default getFormatter; diff --git a/packages/next-intl/src/server/getNow.tsx b/packages/next-intl/src/server/getNow.tsx index 1c97dc7f8..56f15cf81 100644 --- a/packages/next-intl/src/server/getNow.tsx +++ b/packages/next-intl/src/server/getNow.tsx @@ -2,13 +2,36 @@ import {cache} from 'react'; import getConfig from './getConfig'; import getLocaleFromHeader from './getLocaleFromHeader'; -let hasWarned = false; +let hasWarnedForMissingLocale = false; +let hasWarnedForObjectArgument = false; -const getNow = cache(async (opts?: {locale: string}) => { - if (!opts?.locale && !hasWarned) { - hasWarned = true; - console.warn(` -Calling \`getNow\` without a locale is deprecated. Please update the call: +const getNow = cache(async (locale?: string | {locale: string}) => { + if (typeof locale === 'object') { + locale = locale.locale; + if (!hasWarnedForObjectArgument) { + hasWarnedForObjectArgument = true; + console.warn( + ` +DEPRECATION WARNING: Calling \`getNow\` with an object argument is deprecated, please update your call site accordingly. + +// Previously +getNow({locale: 'en'}); + +// Now +getNow('en'); + +See also https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components +` + ); + } + } + + if (!locale) { + locale = getLocaleFromHeader(); + if (!hasWarnedForMissingLocale) { + hasWarnedForMissingLocale = true; + console.warn(` +Calling \`getNow\` without a locale is deprecated, please update the call: // app/[locale]/layout.tsx export async function generateMetadata({params}) { @@ -19,9 +42,9 @@ export async function generateMetadata({params}) { Learn more: https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components `); + } } - const locale = opts?.locale || getLocaleFromHeader(); const config = await getConfig(locale); return config.now; }); diff --git a/packages/next-intl/src/server/getTimeZone.tsx b/packages/next-intl/src/server/getTimeZone.tsx index 43bff5bb0..29fa80d66 100644 --- a/packages/next-intl/src/server/getTimeZone.tsx +++ b/packages/next-intl/src/server/getTimeZone.tsx @@ -2,13 +2,36 @@ import {cache} from 'react'; import getConfig from './getConfig'; import getLocaleFromHeader from './getLocaleFromHeader'; -let hasWarned = false; +let hasWarnedForMissingLocale = false; +let hasWarnedForObjectArgument = false; -const getTimeZone = cache(async (opts?: {locale: string}) => { - if (!opts?.locale && !hasWarned) { - hasWarned = true; - console.warn(` -Calling \`getTimeZone\` without a locale is deprecated. Please update the call: +const getTimeZone = cache(async (locale?: string | {locale: string}) => { + if (typeof locale === 'object') { + locale = locale.locale; + if (!hasWarnedForObjectArgument) { + hasWarnedForObjectArgument = true; + console.warn( + ` +DEPRECATION WARNING: Calling \`getTimeZone\` with an object argument is deprecated, please update your call site accordingly. + +// Previously +getTimeZone({locale: 'en'}); + +// Now +getTimeZone('en'); + +See also https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components +` + ); + } + } + + if (!locale) { + locale = getLocaleFromHeader(); + if (!hasWarnedForMissingLocale) { + hasWarnedForMissingLocale = true; + console.warn(` +Calling \`getTimeZone\` without a locale is deprecated, please update the call: // app/[locale]/layout.tsx export async function generateMetadata({params}) { @@ -19,9 +42,9 @@ export async function generateMetadata({params}) { Learn more: https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components `); + } } - const locale = opts?.locale || getLocaleFromHeader(); const config = await getConfig(locale); return config.timeZone; }); diff --git a/packages/next-intl/src/server/getTranslator.tsx b/packages/next-intl/src/server/getTranslator.tsx index a1a69cb92..ec032d093 100644 --- a/packages/next-intl/src/server/getTranslator.tsx +++ b/packages/next-intl/src/server/getTranslator.tsx @@ -13,15 +13,22 @@ import NestedKeyOf from 'use-intl/dist/src/core/utils/NestedKeyOf'; import NestedValueOf from 'use-intl/dist/src/core/utils/NestedValueOf'; import getConfig from './getConfig'; +let hasWarned = false; + async function getTranslatorImpl< NestedKey extends NamespaceKeys< IntlMessages, NestedKeyOf > = never ->(opts: { - namespace?: NestedKey; - locale: string; -}): // Explicitly defining the return type is necessary as TypeScript would get it wrong +>( + locale: + | string + | { + namespace?: NestedKey; + locale: string; + }, + namespace?: NestedKey +): // Explicitly defining the return type is necessary as TypeScript would get it wrong Promise<{ // Default invocation < @@ -81,11 +88,33 @@ Promise<{ key: TargetKey ): any; }> { - const config = await getConfig(opts.locale); + if (typeof locale === 'object') { + const opts = locale; + namespace = opts.namespace; + locale = opts.locale; + if (!hasWarned) { + console.warn( + ` +DEPRECATION WARNING: Calling \`getTranslator\` with an object argument is deprecated, please update your call site accordingly. + +// Previously +getTranslator({locale: 'en', namespace: 'About'}); + +// Now +getTranslator('en', 'About'); + +See also https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components +` + ); + hasWarned = true; + } + } + + const config = await getConfig(locale); const messagesOrError = getMessagesOrError({ messages: config.messages as any, - namespace: opts.namespace, + namespace, onError: config.onError }); @@ -95,7 +124,7 @@ Promise<{ // @ts-ignore return createBaseTranslator({ ...config, - ...opts, + namespace, messagesOrError }); } From e6b3efb2efa57ddf8a92bd7c0986ea69ecb9f619 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 29 Jun 2023 10:30:21 +0200 Subject: [PATCH 229/312] Fix lockfile --- pnpm-lock.yaml | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 351e2b93f..b1df9f47c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.1' +lockfileVersion: '6.0' settings: autoInstallPeers: true @@ -65,7 +65,7 @@ importers: version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0)(jest@29.5.0) + version: 6.0.0(eslint@8.39.0) eslint-config-next: specifier: ^13.4.0 version: 13.4.0(eslint@8.39.0)(typescript@5.0.4) @@ -111,7 +111,7 @@ importers: version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0)(jest@29.5.0) + version: 6.0.0(eslint@8.39.0) eslint-config-next: specifier: ^13.4.0 version: 13.4.0(eslint@8.39.0)(typescript@4.9.5) @@ -374,7 +374,7 @@ importers: version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0)(jest@29.5.0) + version: 6.0.0(eslint@8.39.0) eslint-config-next: specifier: ^13.4.0 version: 13.4.0(eslint@8.39.0)(typescript@4.9.5) @@ -491,7 +491,7 @@ importers: version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0)(jest@29.5.0) + version: 6.0.0(eslint@8.39.0) typescript: specifier: ^4.9.5 version: 4.9.5 @@ -9480,6 +9480,36 @@ packages: source-map: 0.6.1 dev: true + /eslint-config-molindo@6.0.0(eslint@8.39.0): + resolution: {integrity: sha512-kZ/SZBJIejZY45HVn9q0WSkF1mhvem+7FmxDF7mNfCepGEGrjID2mNlOuWAShBTidzpukMQ7qKhkjV5JVmO91w==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^8.0.0 + dependencies: + '@rushstack/eslint-patch': 1.2.0 + '@typescript-eslint/eslint-plugin': 5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.39.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@5.0.4) + confusing-browser-globals: 1.0.11 + eslint: 8.39.0 + eslint-plugin-css-modules: 2.11.0(eslint@8.39.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) + eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@29.5.0)(typescript@4.9.5) + eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) + eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8) + eslint-plugin-react: 7.32.2(eslint@8.39.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.39.0) + eslint-plugin-sort-destructure-keys: 1.5.0(eslint@8.39.0) + eslint-plugin-unicorn: 41.0.1(eslint@8.39.0) + prettier: 2.8.8 + typescript: 4.9.5 + transitivePeerDependencies: + - eslint-config-prettier + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - jest + - supports-color + dev: true + /eslint-config-molindo@6.0.0(eslint@8.39.0)(jest@27.5.1): resolution: {integrity: sha512-kZ/SZBJIejZY45HVn9q0WSkF1mhvem+7FmxDF7mNfCepGEGrjID2mNlOuWAShBTidzpukMQ7qKhkjV5JVmO91w==} engines: {node: '>=10'} From ca0cfe7df8cf4cf6fa94a0a2ec8fd8d25e2e9e1a Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 29 Jun 2023 10:36:02 +0200 Subject: [PATCH 230/312] Fix TS --- examples/example-next-13-advanced/src/app/[locale]/page.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/example-next-13-advanced/src/app/[locale]/page.tsx b/examples/example-next-13-advanced/src/app/[locale]/page.tsx index 1081d7790..cdb414872 100644 --- a/examples/example-next-13-advanced/src/app/[locale]/page.tsx +++ b/examples/example-next-13-advanced/src/app/[locale]/page.tsx @@ -41,7 +41,6 @@ export default function Index({searchParams}: Props) {

    - {/* @ts-expect-error RSC are not supported yet by TypeScript */} From 3071d01fe0524ed6e1fc10cff16eaa4d6a7099ba Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 30 Jun 2023 08:06:06 +0200 Subject: [PATCH 231/312] Update lockfile --- pnpm-lock.yaml | 2014 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 1532 insertions(+), 482 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f43f48b3d..733c521a9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,11 +34,7 @@ importers: version: 2.2.0 next: specifier: ^13.4.7 -<<<<<<< HEAD - version: 13.4.7(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) -======= version: 13.4.7(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0) ->>>>>>> origin/main nextra: specifier: ^2.8.0 version: 2.8.0(next@13.4.7)(react-dom@18.2.0)(react@18.2.0) @@ -53,7 +49,7 @@ importers: version: 18.2.0(react@18.2.0) tailwindcss: specifier: ^3.2.4 - version: 3.2.4(postcss@8.4.23) + version: 3.2.4(postcss@8.4.24) devDependencies: '@types/node': specifier: 20.1.2 @@ -63,7 +59,7 @@ importers: version: 18.2.5 autoprefixer: specifier: ^10.4.0 - version: 10.4.0(postcss@8.4.23) + version: 10.4.0(postcss@8.4.24) eslint: specifier: ^8.39.0 version: 8.39.0 @@ -90,11 +86,7 @@ importers: version: 2.16.1 next: specifier: ^13.4.7 -<<<<<<< HEAD - version: 13.4.7(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) -======= version: 13.4.7(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0) ->>>>>>> origin/main next-intl: specifier: ^2.14.3 version: link:../../packages/next-intl @@ -137,11 +129,7 @@ importers: version: 4.17.21 next: specifier: ^13.4.7 -<<<<<<< HEAD - version: 13.4.7(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) -======= version: 13.4.7(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0) ->>>>>>> origin/main next-intl: specifier: ^2.14.3 version: link:../../packages/next-intl @@ -196,11 +184,7 @@ importers: version: 1.2.1 next: specifier: ^13.4.7 -<<<<<<< HEAD - version: 13.4.7(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) -======= version: 13.4.7(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0) ->>>>>>> origin/main next-intl: specifier: ^2.14.3 version: link:../../packages/next-intl @@ -273,7 +257,7 @@ importers: version: 2.1.3 next: specifier: ^13.4.0 - version: 13.4.6(react-dom@18.2.0)(react@18.2.0) + version: 13.4.7(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0) next-intl: specifier: ^2.13.2 version: link:../../packages/next-intl @@ -316,7 +300,7 @@ importers: dependencies: next: specifier: ^13.4.0 - version: 13.4.6(react-dom@18.2.0)(react@18.2.0) + version: 13.4.7(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0) next-intl: specifier: ^2.13.2 version: link:../../packages/next-intl @@ -359,11 +343,7 @@ importers: dependencies: next: specifier: ^13.4.7 -<<<<<<< HEAD - version: 13.4.7(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) -======= version: 13.4.7(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0) ->>>>>>> origin/main next-auth: specifier: ^4.22.1 version: 4.22.1(next@13.4.7)(react-dom@18.2.0)(react@18.2.0) @@ -406,7 +386,7 @@ importers: dependencies: next: specifier: ^13.4.0 - version: 13.4.6(react-dom@18.2.0)(react@18.2.0) + version: 13.4.7(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0) next-intl: specifier: ^2.13.2 version: link:../../packages/next-intl @@ -458,7 +438,7 @@ importers: version: 18.1.0(react@18.1.0) react-native: specifier: ^0.70.5 - version: 0.70.5(@babel/core@7.21.8)(@babel/preset-env@7.21.5)(react@18.1.0) + version: 0.70.5(@babel/core@7.21.8)(@babel/preset-env@7.22.5)(react@18.1.0) react-native-web: specifier: ~0.18.9 version: 0.18.9(react-dom@18.1.0)(react@18.1.0) @@ -548,7 +528,7 @@ importers: version: 18.2.5 dts-cli: specifier: ^1.4.0 - version: 1.4.0(@babel/plugin-syntax-flow@7.21.4)(@babel/plugin-transform-react-jsx@7.21.5)(@types/node@17.0.23) + version: 1.4.0(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(@types/node@17.0.23) eslint: specifier: ^8.39.0 version: 8.39.0 @@ -563,11 +543,7 @@ importers: version: 27.5.1 next: specifier: ^13.4.7 -<<<<<<< HEAD - version: 13.4.7(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) -======= version: 13.4.7(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0) ->>>>>>> origin/main react: specifier: ^18.2.0 version: 18.2.0 @@ -576,7 +552,7 @@ importers: version: 18.2.0(react@18.2.0) ts-jest: specifier: ^29.1.0 - version: 29.1.0(@babel/core@7.21.8)(jest@29.5.0)(typescript@4.9.5) + version: 29.1.0(@babel/core@7.22.5)(jest@29.5.0)(typescript@4.9.5) typescript: specifier: ^4.9.5 version: 4.9.5 @@ -607,7 +583,7 @@ importers: version: 2.16.1 dts-cli: specifier: ^1.4.0 - version: 1.4.0(@babel/plugin-syntax-flow@7.21.4)(@babel/plugin-transform-react-jsx@7.21.5)(@types/node@17.0.23) + version: 1.4.0(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(@types/node@17.0.23) eslint: specifier: ^8.39.0 version: 8.39.0 @@ -651,10 +627,20 @@ packages: dependencies: '@babel/highlight': 7.18.6 + /@babel/code-frame@7.22.5: + resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.22.5 + /@babel/compat-data@7.21.7: resolution: {integrity: sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==} engines: {node: '>=6.9.0'} + /@babel/compat-data@7.22.5: + resolution: {integrity: sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==} + engines: {node: '>=6.9.0'} + /@babel/core@7.21.8: resolution: {integrity: sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==} engines: {node: '>=6.9.0'} @@ -677,6 +663,28 @@ packages: transitivePeerDependencies: - supports-color + /@babel/core@7.22.5: + resolution: {integrity: sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-module-transforms': 7.22.5 + '@babel/helpers': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 + convert-source-map: 1.9.0 + debug: 4.3.4(supports-color@6.1.0) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + /@babel/core@7.9.0: resolution: {integrity: sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==} engines: {node: '>=6.9.0'} @@ -710,18 +718,40 @@ packages: '@jridgewell/trace-mapping': 0.3.18 jsesc: 2.5.2 + /@babel/generator@7.22.5: + resolution: {integrity: sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + jsesc: 2.5.2 + /@babel/helper-annotate-as-pure@7.18.6: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.5 + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + /@babel/helper-builder-binary-assignment-operator-visitor@7.21.5: resolution: {integrity: sha512-uNrjKztPLkUk7bpCNC0jEKDJzzkvel/W+HguzbN8krA+LPfC1CEobJEvAvGka2A/M+ViOqXdcRL0GqPUJSjx9g==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.5 + /@babel/helper-builder-binary-assignment-operator-visitor@7.22.5: + resolution: {integrity: sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: false + /@babel/helper-compilation-targets@7.21.5(@babel/core@7.21.8): resolution: {integrity: sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==} engines: {node: '>=6.9.0'} @@ -735,6 +765,33 @@ packages: lru-cache: 5.1.1 semver: 6.3.0 + /@babel/helper-compilation-targets@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.21.8 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.9 + lru-cache: 5.1.1 + semver: 6.3.0 + dev: false + + /@babel/helper-compilation-targets@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.9 + lru-cache: 5.1.1 + semver: 6.3.0 + /@babel/helper-create-class-features-plugin@7.21.8(@babel/core@7.21.8): resolution: {integrity: sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw==} engines: {node: '>=6.9.0'} @@ -754,6 +811,26 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helper-create-class-features-plugin@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/helper-create-regexp-features-plugin@7.21.8(@babel/core@7.21.8): resolution: {integrity: sha512-zGuSdedkFtsFHGbexAvNuipg1hbtitDLo2XE8/uf6Y9sOQV1xsYX/2pNbtedp/X0eU1pIt+kGvaqHCowkRbS5g==} engines: {node: '>=6.9.0'} @@ -765,6 +842,18 @@ packages: regexpu-core: 5.3.2 semver: 6.3.0 + /@babel/helper-create-regexp-features-plugin@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.0 + dev: false + /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.21.8): resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} peerDependencies: @@ -780,10 +869,30 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helper-define-polyfill-provider@0.4.0(@babel/core@7.21.8): + resolution: {integrity: sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==} + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4(supports-color@6.1.0) + lodash.debounce: 4.0.8 + resolve: 1.22.2 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/helper-environment-visitor@7.21.5: resolution: {integrity: sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==} engines: {node: '>=6.9.0'} + /@babel/helper-environment-visitor@7.22.5: + resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} + engines: {node: '>=6.9.0'} + /@babel/helper-function-name@7.21.0: resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} engines: {node: '>=6.9.0'} @@ -791,24 +900,50 @@ packages: '@babel/template': 7.20.7 '@babel/types': 7.21.5 + /@babel/helper-function-name@7.22.5: + resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 + /@babel/helper-hoist-variables@7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.5 + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + /@babel/helper-member-expression-to-functions@7.21.5: resolution: {integrity: sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.5 + /@babel/helper-member-expression-to-functions@7.22.5: + resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: false + /@babel/helper-module-imports@7.21.4: resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.5 + /@babel/helper-module-imports@7.22.5: + resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + /@babel/helper-module-transforms@7.21.5: resolution: {integrity: sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==} engines: {node: '>=6.9.0'} @@ -824,16 +959,42 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helper-module-transforms@7.22.5: + resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 + transitivePeerDependencies: + - supports-color + /@babel/helper-optimise-call-expression@7.18.6: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.5 + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: false + /@babel/helper-plugin-utils@7.21.5: resolution: {integrity: sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==} engines: {node: '>=6.9.0'} + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.21.8): resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} engines: {node: '>=6.9.0'} @@ -848,6 +1009,21 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helper-remap-async-to-generator@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-wrap-function': 7.22.5 + '@babel/types': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/helper-replace-supers@7.21.5: resolution: {integrity: sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg==} engines: {node: '>=6.9.0'} @@ -861,36 +1037,81 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helper-replace-supers@7.22.5: + resolution: {integrity: sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/helper-simple-access@7.21.5: resolution: {integrity: sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.5 + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + /@babel/helper-skip-transparent-expression-wrappers@7.20.0: resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.5 + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: false + /@babel/helper-split-export-declaration@7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.5 + /@babel/helper-split-export-declaration@7.22.5: + resolution: {integrity: sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + /@babel/helper-string-parser@7.21.5: resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==} engines: {node: '>=6.9.0'} + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + /@babel/helper-validator-identifier@7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-identifier@7.22.5: + resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} + engines: {node: '>=6.9.0'} + /@babel/helper-validator-option@7.21.0: resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-option@7.22.5: + resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} + engines: {node: '>=6.9.0'} + /@babel/helper-wrap-function@7.20.5: resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} engines: {node: '>=6.9.0'} @@ -902,6 +1123,18 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helper-wrap-function@7.22.5: + resolution: {integrity: sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/helpers@7.21.5: resolution: {integrity: sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==} engines: {node: '>=6.9.0'} @@ -912,11 +1145,29 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helpers@7.22.5: + resolution: {integrity: sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 + transitivePeerDependencies: + - supports-color + /@babel/highlight@7.18.6: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-validator-identifier': 7.22.5 + chalk: 2.4.2 + js-tokens: 4.0.0 + + /@babel/highlight@7.22.5: + resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.5 chalk: 2.4.2 js-tokens: 4.0.0 @@ -927,6 +1178,13 @@ packages: dependencies: '@babel/types': 7.21.5 + /@babel/parser@7.22.5: + resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.22.5 + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} @@ -936,6 +1194,16 @@ packages: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.21.5 + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.21.8): resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} engines: {node: '>=6.9.0'} @@ -947,6 +1215,18 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.8) + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.22.5(@babel/core@7.21.8) + dev: false + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.21.8): resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} engines: {node: '>=6.9.0'} @@ -1133,6 +1413,15 @@ packages: transitivePeerDependencies: - supports-color + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.21.8): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + dev: false + /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} @@ -1221,6 +1510,17 @@ packages: dependencies: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.21.5 + dev: false + + /@babel/plugin-syntax-flow@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.21.8): resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} @@ -1231,6 +1531,26 @@ packages: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.21.5 + /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.21.8): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: @@ -1256,6 +1576,16 @@ packages: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.21.5 + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.8): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: @@ -1331,6 +1661,17 @@ packages: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.21.5 + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-arrow-functions@7.21.5(@babel/core@7.21.8): resolution: {integrity: sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==} engines: {node: '>=6.9.0'} @@ -1340,6 +1681,31 @@ packages: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.21.5 + /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-async-generator-functions@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.8) + transitivePeerDependencies: + - supports-color + dev: false + /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.21.8): resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} engines: {node: '>=6.9.0'} @@ -1353,6 +1719,20 @@ packages: transitivePeerDependencies: - supports-color + /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.21.8) + transitivePeerDependencies: + - supports-color + dev: false + /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} engines: {node: '>=6.9.0'} @@ -1362,6 +1742,16 @@ packages: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.21.5 + /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.8): resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} engines: {node: '>=6.9.0'} @@ -1371,25 +1761,82 @@ packages: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.21.5 - /@babel/plugin-transform-classes@7.21.0(@babel/core@7.21.8): - resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} + /@babel/plugin-transform-block-scoping@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) - '@babel/helper-environment-visitor': 7.21.5 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-replace-supers': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-class-static-block@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.8) + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-classes@7.21.0(@babel/core@7.21.8): + resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) + '@babel/helper-environment-visitor': 7.21.5 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-replace-supers': 7.21.5 '@babel/helper-split-export-declaration': 7.18.6 globals: 11.12.0 transitivePeerDependencies: - supports-color + /@babel/plugin-transform-classes@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.8) + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/plugin-transform-computed-properties@7.21.5(@babel/core@7.21.8): resolution: {integrity: sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==} engines: {node: '>=6.9.0'} @@ -1400,6 +1847,17 @@ packages: '@babel/helper-plugin-utils': 7.21.5 '@babel/template': 7.20.7 + /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.5 + dev: false + /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.21.8): resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} engines: {node: '>=6.9.0'} @@ -1409,174 +1867,488 @@ packages: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.21.5 - /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} + /@babel/plugin-transform-destructuring@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-regexp-features-plugin': 7.21.8(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.21.8): + resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-dynamic-import@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.8) + dev: false + + /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.21.5 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-export-namespace-from@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.8) + dev: false + + /@babel/plugin-transform-flow-strip-types@7.21.0(@babel/core@7.21.8): + resolution: {integrity: sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.21.8) + dev: false + + /@babel/plugin-transform-for-of@7.21.5(@babel/core@7.21.8): + resolution: {integrity: sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.8): + resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) + '@babel/helper-function-name': 7.21.0 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.8) + '@babel/helper-function-name': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-json-strings@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.8) + dev: false + + /@babel/plugin-transform-literals@7.18.9(@babel/core@7.21.8): + resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-transform-literals@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-logical-assignment-operators@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.8) + dev: false + + /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + + /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.21.8): + resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-module-transforms': 7.21.5 + '@babel/helper-plugin-utils': 7.21.5 + transitivePeerDependencies: + - supports-color + + /@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-modules-commonjs@7.21.5(@babel/core@7.21.8): + resolution: {integrity: sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-module-transforms': 7.21.5 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-simple-access': 7.21.5 + transitivePeerDependencies: + - supports-color + + /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.21.8): + resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-module-transforms': 7.21.5 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-validator-identifier': 7.22.5 + transitivePeerDependencies: + - supports-color + + /@babel/plugin-transform-modules-systemjs@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-module-transforms': 7.21.5 + '@babel/helper-plugin-utils': 7.21.5 + transitivePeerDependencies: + - supports-color + + /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-create-regexp-features-plugin': 7.21.8(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: false - /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} + /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.21.8): + resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.21.8 + '@babel/helper-create-regexp-features-plugin': 7.21.8(@babel/core@7.21.8) '@babel/helper-plugin-utils': 7.21.5 - /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.21.5 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + dev: false - /@babel/plugin-transform-flow-strip-types@7.21.0(@babel/core@7.21.8): - resolution: {integrity: sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==} + /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.21.8) - dev: false - /@babel/plugin-transform-for-of@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==} + /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false - /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} + /@babel/plugin-transform-nullish-coalescing-operator@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) - '@babel/helper-function-name': 7.21.0 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.8) + dev: false - /@babel/plugin-transform-literals@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} + /@babel/plugin-transform-numeric-separator@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.8) + dev: false - /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} + /@babel/plugin-transform-object-rest-spread@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: + '@babel/compat-data': 7.22.5 '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.21.8) + dev: false - /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.21.8): - resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} + /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.21.8): + resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-module-transforms': 7.21.5 '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-replace-supers': 7.21.5 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-modules-commonjs@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==} + /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-module-transforms': 7.21.5 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-simple-access': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 transitivePeerDependencies: - supports-color + dev: false - /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.21.8): - resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} + /@babel/plugin-transform-optional-catch-binding@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.21.5 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-validator-identifier': 7.19.1 - transitivePeerDependencies: - - supports-color + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.8) + dev: false - /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} + /@babel/plugin-transform-optional-chaining@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-module-transforms': 7.21.5 - '@babel/helper-plugin-utils': 7.21.5 - transitivePeerDependencies: - - supports-color + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.8) + dev: false - /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.21.8): - resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} + /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.21.8): + resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0 + '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-create-regexp-features-plugin': 7.21.8(@babel/core@7.21.8) '@babel/helper-plugin-utils': 7.21.5 - /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} + /@babel/plugin-transform-parameters@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false - /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} + /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-replace-supers': 7.21.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color + dev: false - /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.21.8): - resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} + /@babel/plugin-transform-private-property-in-object@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.8) + transitivePeerDependencies: + - supports-color + dev: false /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} @@ -1587,6 +2359,16 @@ packages: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.21.5 + /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-react-display-name@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} engines: {node: '>=6.9.0'} @@ -1629,6 +2411,21 @@ packages: '@babel/helper-plugin-utils': 7.21.5 '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.8) '@babel/types': 7.21.5 + dev: false + + /@babel/plugin-transform-react-jsx@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) + '@babel/types': 7.22.5 + dev: true /@babel/plugin-transform-regenerator@7.21.5(@babel/core@7.21.8): resolution: {integrity: sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==} @@ -1640,6 +2437,17 @@ packages: '@babel/helper-plugin-utils': 7.21.5 regenerator-transform: 0.15.1 + /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.1 + dev: false + /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} engines: {node: '>=6.9.0'} @@ -1649,6 +2457,16 @@ packages: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.21.5 + /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-runtime@7.21.4(@babel/core@7.21.8): resolution: {integrity: sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA==} engines: {node: '>=6.9.0'} @@ -1675,6 +2493,16 @@ packages: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.21.5 + /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-spread@7.20.7(@babel/core@7.21.8): resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} engines: {node: '>=6.9.0'} @@ -1685,6 +2513,17 @@ packages: '@babel/helper-plugin-utils': 7.21.5 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + /@babel/plugin-transform-spread@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: false + /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} engines: {node: '>=6.9.0'} @@ -1694,6 +2533,16 @@ packages: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.21.5 + /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.21.8): resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} engines: {node: '>=6.9.0'} @@ -1703,6 +2552,16 @@ packages: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.21.5 + /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.21.8): resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} @@ -1712,6 +2571,16 @@ packages: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.21.5 + /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-typescript@7.21.3(@babel/core@7.21.8): resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==} engines: {node: '>=6.9.0'} @@ -1735,6 +2604,27 @@ packages: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.21.5 + /@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} engines: {node: '>=6.9.0'} @@ -1745,6 +2635,28 @@ packages: '@babel/helper-create-regexp-features-plugin': 7.21.8(@babel/core@7.21.8) '@babel/helper-plugin-utils': 7.21.5 + /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/preset-env@7.21.5(@babel/core@7.21.8): resolution: {integrity: sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==} engines: {node: '>=6.9.0'} @@ -1831,6 +2743,97 @@ packages: transitivePeerDependencies: - supports-color + /@babel/preset-env@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.21.8 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.21.8) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.8) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.8) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.8) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.21.8) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.8) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.8) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.8) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.8) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.8) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-async-generator-functions': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-class-static-block': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-classes': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-dynamic-import': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-export-namespace-from': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-json-strings': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-logical-assignment-operators': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-modules-systemjs': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-nullish-coalescing-operator': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-numeric-separator': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-object-rest-spread': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-optional-catch-binding': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-optional-chaining': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-private-property-in-object': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.21.8) + '@babel/preset-modules': 0.1.5(@babel/core@7.21.8) + '@babel/types': 7.22.5 + babel-plugin-polyfill-corejs2: 0.4.3(@babel/core@7.21.8) + babel-plugin-polyfill-corejs3: 0.8.1(@babel/core@7.21.8) + babel-plugin-polyfill-regenerator: 0.5.0(@babel/core@7.21.8) + core-js-compat: 3.31.0 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/preset-flow@7.21.4(@babel/core@7.21.8): resolution: {integrity: sha512-F24cSq4DIBmhq4OzK3dE63NHagb27OPE3eWR+HLekt4Z3Y5MzIIUGF3LlLgV0gN8vzbDViSY7HnrReNVCJXTeA==} engines: {node: '>=6.9.0'} @@ -1901,11 +2904,19 @@ packages: '@babel/parser': 7.21.8 '@babel/types': 7.21.5 + /@babel/template@7.22.5: + resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/types': 7.22.5 + /@babel/traverse@7.21.5: resolution: {integrity: sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.5 '@babel/generator': 7.21.5 '@babel/helper-environment-visitor': 7.21.5 '@babel/helper-function-name': 7.21.0 @@ -1918,6 +2929,23 @@ packages: transitivePeerDependencies: - supports-color + /@babel/traverse@7.22.5: + resolution: {integrity: sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/types': 7.22.5 + debug: 4.3.4(supports-color@6.1.0) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + /@babel/types@7.21.5: resolution: {integrity: sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==} engines: {node: '>=6.9.0'} @@ -1926,6 +2954,14 @@ packages: '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 + /@babel/types@7.22.5: + resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + to-fast-properties: 2.0.0 + /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true @@ -3600,13 +4636,6 @@ packages: '@napi-rs/simple-git-win32-x64-msvc': 0.1.8 dev: false -<<<<<<< HEAD - /@next/env@13.4.6: - resolution: {integrity: sha512-nqUxEtvDqFhmV1/awSg0K2XHNwkftNaiUqCYO9e6+MYmqNObpKVl7OgMkGaQ2SZnFx5YqF0t60ZJTlyJIDAijg==} - dev: false - -======= ->>>>>>> origin/main /@next/env@13.4.7: resolution: {integrity: sha512-ZlbiFulnwiFsW9UV1ku1OvX/oyIPLtMk9p/nnvDSwI0s7vSoZdRtxXNsaO+ZXrLv/pMbXVGq4lL8TbY9iuGmVw==} @@ -3619,27 +4648,9 @@ packages: /@next/swc-darwin-arm64@13.4.7: resolution: {integrity: sha512-VZTxPv1b59KGiv/pZHTO5Gbsdeoxcj2rU2cqJu03btMhHpn3vwzEK0gUSVC/XW96aeGO67X+cMahhwHzef24/w==} engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@next/swc-darwin-arm64@13.4.7: - resolution: {integrity: sha512-VZTxPv1b59KGiv/pZHTO5Gbsdeoxcj2rU2cqJu03btMhHpn3vwzEK0gUSVC/XW96aeGO67X+cMahhwHzef24/w==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - optional: true - - /@next/swc-darwin-x64@13.4.7: - resolution: {integrity: sha512-gO2bw+2Ymmga+QYujjvDz9955xvYGrWofmxTq7m70b9pDPvl7aDFABJOZ2a8SRCuSNB5mXU8eTOmVVwyp/nAew==} - engines: {node: '>= 10'} - cpu: [x64] + cpu: [arm64] os: [darwin] requiresBuild: true - dev: false optional: true /@next/swc-darwin-x64@13.4.7: @@ -3656,24 +4667,6 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-arm64-gnu@13.4.7: - resolution: {integrity: sha512-6cqp3vf1eHxjIDhEOc7Mh/s8z1cwc/l5B6ZNkOofmZVyu1zsbEM5Hmx64s12Rd9AYgGoiCz4OJ4M/oRnkE16/Q==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - optional: true - - /@next/swc-linux-arm64-musl@13.4.7: - resolution: {integrity: sha512-T1kD2FWOEy5WPidOn1si0rYmWORNch4a/NR52Ghyp4q7KyxOCuiOfZzyhVC5tsLIBDH3+cNdB5DkD9afpNDaOw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false optional: true /@next/swc-linux-arm64-musl@13.4.7: @@ -3690,24 +4683,6 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-x64-gnu@13.4.7: - resolution: {integrity: sha512-zaEC+iEiAHNdhl6fuwl0H0shnTzQoAoJiDYBUze8QTntE/GNPfTYpYboxF5LRYIjBwETUatvE0T64W6SKDipvg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - optional: true - - /@next/swc-linux-x64-musl@13.4.7: - resolution: {integrity: sha512-X6r12F8d8SKAtYJqLZBBMIwEqcTRvUdVm+xIq+l6pJqlgT2tNsLLf2i5Cl88xSsIytBICGsCNNHd+siD2fbWBA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false optional: true /@next/swc-linux-x64-musl@13.4.7: @@ -3718,15 +4693,6 @@ packages: requiresBuild: true optional: true - /@next/swc-win32-arm64-msvc@13.4.7: - resolution: {integrity: sha512-NPnmnV+vEIxnu6SUvjnuaWRglZzw4ox5n/MQTxeUhb5iwVWFedolPFebMNwgrWu4AELwvTdGtWjqof53AiWHcw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-arm64-msvc@13.4.7: resolution: {integrity: sha512-NPnmnV+vEIxnu6SUvjnuaWRglZzw4ox5n/MQTxeUhb5iwVWFedolPFebMNwgrWu4AELwvTdGtWjqof53AiWHcw==} engines: {node: '>= 10'} @@ -3741,24 +4707,6 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true - dev: false - optional: true - - /@next/swc-win32-ia32-msvc@13.4.7: - resolution: {integrity: sha512-6Hxijm6/a8XqLQpOOf/XuwWRhcuc/g4rBB2oxjgCMuV9Xlr2bLs5+lXyh8w9YbAUMYR3iC9mgOlXbHa79elmXw==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - requiresBuild: true - optional: true - - /@next/swc-win32-x64-msvc@13.4.7: - resolution: {integrity: sha512-sW9Yt36Db1nXJL+mTr2Wo0y+VkPWeYhygvcHj1FF0srVtV+VoDjxleKtny21QHaG05zdeZnw2fCtf2+dEqgwqA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false optional: true /@next/swc-win32-x64-msvc@13.4.7: @@ -4869,7 +5817,7 @@ packages: lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.2.4(postcss@8.4.23) + tailwindcss: 3.2.4(postcss@8.4.24) dev: false /@testing-library/dom@8.20.0: @@ -5005,8 +5953,8 @@ packages: /@types/cookie@0.4.1: resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} - /@types/debug@4.1.7: - resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} + /@types/debug@4.1.8: + resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==} dependencies: '@types/ms': 0.7.31 @@ -6256,6 +7204,22 @@ packages: postcss-value-parser: 4.2.0 dev: true + /autoprefixer@10.4.0(postcss@8.4.24): + resolution: {integrity: sha512-7FdJ1ONtwzV1G43GDD0kpVMn/qbiNqyOPMFTX5nRffI+7vgWoFEc6DcXOxHJxrWNDXrZh18eDsZjvZGUljSRGA==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.21.5 + caniuse-lite: 1.0.30001482 + fraction.js: 4.2.0 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} @@ -6423,6 +7387,19 @@ packages: transitivePeerDependencies: - supports-color + /babel-plugin-polyfill-corejs2@0.4.3(@babel/core@7.21.8): + resolution: {integrity: sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.21.8 + '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.21.8) + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.21.8): resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} peerDependencies: @@ -6434,6 +7411,18 @@ packages: transitivePeerDependencies: - supports-color + /babel-plugin-polyfill-corejs3@0.8.1(@babel/core@7.21.8): + resolution: {integrity: sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.21.8) + core-js-compat: 3.31.0 + transitivePeerDependencies: + - supports-color + dev: false + /babel-plugin-polyfill-regenerator@0.3.1(@babel/core@7.21.8): resolution: {integrity: sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==} peerDependencies: @@ -6455,6 +7444,17 @@ packages: transitivePeerDependencies: - supports-color + /babel-plugin-polyfill-regenerator@0.5.0(@babel/core@7.21.8): + resolution: {integrity: sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.21.8) + transitivePeerDependencies: + - supports-color + dev: false + /babel-plugin-react-native-web@0.18.12: resolution: {integrity: sha512-4djr9G6fMdwQoD6LQ7hOKAm39+y12flWgovAqS1k5O8f42YQ3A1FFMyV5kKfetZuGhZO5BmNmOdRRZQ1TixtDw==} dev: false @@ -6865,6 +7865,16 @@ packages: node-releases: 2.0.10 update-browserslist-db: 1.0.11(browserslist@4.21.5) + /browserslist@4.21.9: + resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001509 + electron-to-chromium: 1.4.442 + node-releases: 2.0.12 + update-browserslist-db: 1.0.11(browserslist@4.21.9) + /bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} @@ -7167,6 +8177,9 @@ packages: resolution: {integrity: sha512-F1ZInsg53cegyjroxLNW9DmrEQ1SuGRTO1QlpA0o2/6OpQ0gFeDRoq1yFmnr8Sakn9qwwt9DmbxHB6w167OSuQ==} dev: true + /caniuse-lite@1.0.30001509: + resolution: {integrity: sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==} + /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} dev: false @@ -7848,6 +8861,12 @@ packages: dependencies: browserslist: 4.21.5 + /core-js-compat@3.31.0: + resolution: {integrity: sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==} + dependencies: + browserslist: 4.21.9 + dev: false + /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -8522,8 +9541,8 @@ packages: resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==} dev: true - /dayjs@1.11.7: - resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==} + /dayjs@1.11.8: + resolution: {integrity: sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==} dev: false /deasync@0.1.28: @@ -9064,7 +10083,7 @@ packages: engines: {node: '>=12'} dev: true - /dts-cli@1.4.0(@babel/plugin-syntax-flow@7.21.4)(@babel/plugin-transform-react-jsx@7.21.5)(@types/node@17.0.23): + /dts-cli@1.4.0(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(@types/node@17.0.23): resolution: {integrity: sha512-bcjolZYKh51WPurWUayO85XaqccE26yWiAd5+JCZU8YFWAJgcp+UGFke3OwmJvo7WKX3e48FuvzFezUkd+eFSg==} engines: {node: '>=12.0.0'} hasBin: true @@ -9096,7 +10115,7 @@ packages: enquirer: 2.3.6 eslint: 8.39.0 eslint-config-prettier: 8.8.0(eslint@8.39.0) - eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.21.4)(@babel/plugin-transform-react-jsx@7.21.5)(eslint@8.39.0) + eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.39.0) eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@27.5.1)(typescript@4.9.5) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) @@ -9180,6 +10199,9 @@ packages: /electron-to-chromium@1.4.380: resolution: {integrity: sha512-XKGdI4pWM78eLH2cbXJHiBnWUwFSzZM7XujsB6stDiGu9AeSqziedP6amNLpJzE3i0rLTcfAwdCTs5ecP5yeSg==} + /electron-to-chromium@1.4.442: + resolution: {integrity: sha512-RkrZF//Ya+0aJq2NM3OdisNh5ZodZq1rdXOS96G8DdDgpDKqKE81yTbbQ3F/4CKm1JBPsGu1Lp/akkna2xO06Q==} + /elkjs@0.8.2: resolution: {integrity: sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==} dev: false @@ -9747,7 +10769,7 @@ packages: - supports-color dev: true - /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.21.4)(@babel/plugin-transform-react-jsx@7.21.5)(eslint@8.39.0): + /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.39.0): resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -9755,8 +10777,8 @@ packages: '@babel/plugin-transform-react-jsx': ^7.14.9 eslint: ^8.1.0 dependencies: - '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.21.8) - '@babel/plugin-transform-react-jsx': 7.21.5(@babel/core@7.21.8) + '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.5) eslint: 8.39.0 lodash: 4.17.21 string-natural-compare: 3.0.1 @@ -10904,7 +11926,7 @@ packages: vue-template-compiler: optional: true dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.5 chalk: 2.4.2 micromatch: 3.1.10(supports-color@6.1.0) minimatch: 3.1.2 @@ -13980,7 +15002,7 @@ packages: resolution: {integrity: sha512-KmxeBlRjwoqCnBBKGsihFtvsBHyUFlBxJPK4FzeYcIuBfdjv6jFys44JITAgSTbQD+vIdwMEfyZklsuQX0yI1Q==} dev: false - /jscodeshift@0.13.1(@babel/preset-env@7.21.5): + /jscodeshift@0.13.1(@babel/preset-env@7.22.5): resolution: {integrity: sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==} hasBin: true peerDependencies: @@ -13992,7 +15014,7 @@ packages: '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.8) '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.8) '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.21.8) - '@babel/preset-env': 7.21.5(@babel/core@7.21.8) + '@babel/preset-env': 7.22.5(@babel/core@7.21.8) '@babel/preset-flow': 7.21.4(@babel/core@7.21.8) '@babel/preset-typescript': 7.21.5(@babel/core@7.21.8) '@babel/register': 7.21.0(@babel/core@7.21.8) @@ -14603,7 +15625,7 @@ packages: hasBin: true dependencies: ansi-fragments: 0.2.1 - dayjs: 1.11.7 + dayjs: 1.11.8 yargs: 15.4.1 dev: false @@ -14836,19 +15858,19 @@ packages: unist-util-visit-parents: 5.1.3 dev: false - /mdast-util-from-markdown@1.3.0: - resolution: {integrity: sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==} + /mdast-util-from-markdown@1.3.1: + resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} dependencies: '@types/mdast': 3.0.11 '@types/unist': 2.0.6 decode-named-character-reference: 1.0.2 mdast-util-to-string: 3.2.0 - micromark: 3.1.0 - micromark-util-decode-numeric-character-reference: 1.0.0 - micromark-util-decode-string: 1.0.2 - micromark-util-normalize-identifier: 1.0.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark: 3.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-decode-string: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 unist-util-stringify-position: 3.0.3 uvu: 0.5.6 transitivePeerDependencies: @@ -14868,7 +15890,7 @@ packages: '@types/mdast': 3.0.11 ccount: 2.0.1 mdast-util-find-and-replace: 2.2.2 - micromark-util-character: 1.1.0 + micromark-util-character: 1.2.0 dev: false /mdast-util-gfm-footnote@1.0.2: @@ -14876,7 +15898,7 @@ packages: dependencies: '@types/mdast': 3.0.11 mdast-util-to-markdown: 1.5.0 - micromark-util-normalize-identifier: 1.0.0 + micromark-util-normalize-identifier: 1.1.0 dev: false /mdast-util-gfm-strikethrough@1.0.3: @@ -14891,7 +15913,7 @@ packages: dependencies: '@types/mdast': 3.0.11 markdown-table: 3.0.3 - mdast-util-from-markdown: 1.3.0 + mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color @@ -14907,7 +15929,7 @@ packages: /mdast-util-gfm@2.0.2: resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==} dependencies: - mdast-util-from-markdown: 1.3.0 + mdast-util-from-markdown: 1.3.1 mdast-util-gfm-autolink-literal: 1.0.3 mdast-util-gfm-footnote: 1.0.2 mdast-util-gfm-strikethrough: 1.0.3 @@ -14932,7 +15954,7 @@ packages: '@types/estree-jsx': 1.0.0 '@types/hast': 2.3.4 '@types/mdast': 3.0.11 - mdast-util-from-markdown: 1.3.0 + mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color @@ -14958,7 +15980,7 @@ packages: '@types/mdast': 3.0.11 '@types/unist': 2.0.6 ccount: 2.0.1 - mdast-util-from-markdown: 1.3.0 + mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 parse-entities: 4.0.1 stringify-entities: 4.0.3 @@ -14982,7 +16004,7 @@ packages: /mdast-util-mdx@2.0.1: resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} dependencies: - mdast-util-from-markdown: 1.3.0 + mdast-util-from-markdown: 1.3.1 mdast-util-mdx-expression: 1.3.2 mdast-util-mdx-jsx: 2.1.2 mdast-util-mdxjs-esm: 1.3.1 @@ -14997,7 +16019,7 @@ packages: '@types/estree-jsx': 1.0.0 '@types/hast': 2.3.4 '@types/mdast': 3.0.11 - mdast-util-from-markdown: 1.3.0 + mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color @@ -15028,7 +16050,7 @@ packages: '@types/hast': 2.3.4 '@types/mdast': 3.0.11 mdast-util-definitions: 5.1.2 - micromark-util-sanitize-uri: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 trim-lines: 3.0.1 unist-util-generated: 2.0.1 unist-util-position: 4.0.4 @@ -15043,7 +16065,7 @@ packages: longest-streak: 3.1.0 mdast-util-phrasing: 3.0.1 mdast-util-to-string: 3.2.0 - micromark-util-decode-string: 1.0.2 + micromark-util-decode-string: 1.1.0 unist-util-visit: 4.1.2 zwitch: 2.0.4 @@ -15133,12 +16155,12 @@ packages: cytoscape-fcose: 2.2.0(cytoscape@3.25.0) d3: 7.8.5 dagre-d3-es: 7.0.10 - dayjs: 1.11.7 + dayjs: 1.11.8 dompurify: 3.0.3 elkjs: 0.8.2 khroma: 2.0.0 lodash-es: 4.17.21 - mdast-util-from-markdown: 1.3.0 + mdast-util-from-markdown: 1.3.1 non-layered-tidy-tree-layout: 2.0.2 stylis: 4.3.0 ts-dedent: 2.2.0 @@ -15388,7 +16410,7 @@ packages: resolution: {integrity: sha512-Hb3xTvPqex8kJ1hutQNZhQadUKUwmns/Du9GikmWKBFrkiG3k3xstGAyO5t5rN9JSUEzQT6y9SWzSSOGogUKIg==} hasBin: true dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.5 '@babel/core': 7.21.8 '@babel/generator': 7.21.5 '@babel/parser': 7.21.8 @@ -15449,91 +16471,91 @@ packages: resolution: {integrity: sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==} dev: false - /micromark-core-commonmark@1.0.6: - resolution: {integrity: sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==} + /micromark-core-commonmark@1.1.0: + resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} dependencies: decode-named-character-reference: 1.0.2 - micromark-factory-destination: 1.0.0 - micromark-factory-label: 1.0.2 - micromark-factory-space: 1.0.0 - micromark-factory-title: 1.0.2 - micromark-factory-whitespace: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-chunked: 1.0.0 - micromark-util-classify-character: 1.0.0 - micromark-util-html-tag-name: 1.1.0 - micromark-util-normalize-identifier: 1.0.0 - micromark-util-resolve-all: 1.0.0 - micromark-util-subtokenize: 1.0.2 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-factory-destination: 1.1.0 + micromark-factory-label: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-factory-title: 1.1.0 + micromark-factory-whitespace: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-html-tag-name: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 /micromark-extension-frontmatter@1.1.0: resolution: {integrity: sha512-0nLelmvXR5aZ+F2IL6/Ed4cDnHLpL/VD/EELKuclsTWHrLI8UgxGHEmeoumeX2FXiM6z2WrBIOEcbKUZR8RYNg==} dependencies: fault: 2.0.1 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 dev: true /micromark-extension-gfm-autolink-literal@1.0.4: resolution: {integrity: sha512-WCssN+M9rUyfHN5zPBn3/f0mIA7tqArHL/EKbv3CZK+LT2rG77FEikIQEqBkv46fOqXQK4NEW/Pc7Z27gshpeg==} dependencies: - micromark-util-character: 1.1.0 - micromark-util-sanitize-uri: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 dev: false /micromark-extension-gfm-footnote@1.1.0: resolution: {integrity: sha512-RWYce7j8+c0n7Djzv5NzGEGitNNYO3uj+h/XYMdS/JinH1Go+/Qkomg/rfxExFzYTiydaV6GLeffGO5qcJbMPA==} dependencies: - micromark-core-commonmark: 1.0.6 - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-normalize-identifier: 1.0.0 - micromark-util-sanitize-uri: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 dev: false /micromark-extension-gfm-strikethrough@1.0.5: resolution: {integrity: sha512-X0oI5eYYQVARhiNfbETy7BfLSmSilzN1eOuoRnrf9oUNsPRrWOAe9UqSizgw1vNxQBfOwL+n2610S3bYjVNi7w==} dependencies: - micromark-util-chunked: 1.0.0 - micromark-util-classify-character: 1.0.0 - micromark-util-resolve-all: 1.0.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 dev: false /micromark-extension-gfm-table@1.0.5: resolution: {integrity: sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==} dependencies: - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 dev: false /micromark-extension-gfm-tagfilter@1.0.2: resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} dependencies: - micromark-util-types: 1.0.2 + micromark-util-types: 1.1.0 dev: false /micromark-extension-gfm-task-list-item@1.0.4: resolution: {integrity: sha512-9XlIUUVnYXHsFF2HZ9jby4h3npfX10S1coXTnV035QGPgrtNYQq3J6IfIvcCIUAJrrqBVi5BqA/LmaOMJqPwMQ==} dependencies: - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 dev: false @@ -15546,8 +16568,8 @@ packages: micromark-extension-gfm-table: 1.0.5 micromark-extension-gfm-tagfilter: 1.0.2 micromark-extension-gfm-task-list-item: 1.0.4 - micromark-util-combine-extensions: 1.0.0 - micromark-util-types: 1.0.2 + micromark-util-combine-extensions: 1.1.0 + micromark-util-types: 1.1.0 dev: false /micromark-extension-math@2.1.0: @@ -15555,10 +16577,10 @@ packages: dependencies: '@types/katex': 0.16.0 katex: 0.16.7 - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 dev: false @@ -15566,11 +16588,11 @@ packages: resolution: {integrity: sha512-TCgLxqW6ReQ3AJgtj1P0P+8ZThBTloLbeb7jNaqr6mCOLDpxUiBFE/9STgooMZttEwOQu5iEcCCa3ZSDhY9FGw==} dependencies: micromark-factory-mdx-expression: 1.0.7 - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 micromark-util-events-to-acorn: 1.2.1 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 /micromark-extension-mdx-jsx@1.0.3: @@ -15579,26 +16601,26 @@ packages: '@types/acorn': 4.0.6 estree-util-is-identifier-name: 2.1.0 micromark-factory-mdx-expression: 1.0.7 - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 vfile-message: 3.1.4 /micromark-extension-mdx-md@1.0.0: resolution: {integrity: sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==} dependencies: - micromark-util-types: 1.0.2 + micromark-util-types: 1.1.0 /micromark-extension-mdxjs-esm@1.0.3: resolution: {integrity: sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==} dependencies: - micromark-core-commonmark: 1.0.6 - micromark-util-character: 1.1.0 + micromark-core-commonmark: 1.1.0 + micromark-util-character: 1.2.0 micromark-util-events-to-acorn: 1.2.1 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 unist-util-position-from-estree: 1.1.2 uvu: 0.5.6 vfile-message: 3.1.4 @@ -15612,98 +16634,97 @@ packages: micromark-extension-mdx-jsx: 1.0.3 micromark-extension-mdx-md: 1.0.0 micromark-extension-mdxjs-esm: 1.0.3 - micromark-util-combine-extensions: 1.0.0 - micromark-util-types: 1.0.2 + micromark-util-combine-extensions: 1.1.0 + micromark-util-types: 1.1.0 - /micromark-factory-destination@1.0.0: - resolution: {integrity: sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==} + /micromark-factory-destination@1.1.0: + resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} dependencies: - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 - /micromark-factory-label@1.0.2: - resolution: {integrity: sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==} + /micromark-factory-label@1.1.0: + resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} dependencies: - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 /micromark-factory-mdx-expression@1.0.7: resolution: {integrity: sha512-QAdFbkQagTZ/eKb8zDGqmjvgevgJH3+aQpvvKrXWxNJp3o8/l2cAbbrBd0E04r0Gx6nssPpqWIjnbHFvZu5qsQ==} dependencies: - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 micromark-util-events-to-acorn: 1.2.1 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 unist-util-position-from-estree: 1.1.2 uvu: 0.5.6 vfile-message: 3.1.4 - /micromark-factory-space@1.0.0: - resolution: {integrity: sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==} + /micromark-factory-space@1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} dependencies: - micromark-util-character: 1.1.0 - micromark-util-types: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-types: 1.1.0 - /micromark-factory-title@1.0.2: - resolution: {integrity: sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==} + /micromark-factory-title@1.1.0: + resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} dependencies: - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - uvu: 0.5.6 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 - /micromark-factory-whitespace@1.0.0: - resolution: {integrity: sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==} + /micromark-factory-whitespace@1.1.0: + resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} dependencies: - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 - /micromark-util-character@1.1.0: - resolution: {integrity: sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==} + /micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} dependencies: - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 - /micromark-util-chunked@1.0.0: - resolution: {integrity: sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==} + /micromark-util-chunked@1.1.0: + resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} dependencies: - micromark-util-symbol: 1.0.1 + micromark-util-symbol: 1.1.0 - /micromark-util-classify-character@1.0.0: - resolution: {integrity: sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==} + /micromark-util-classify-character@1.1.0: + resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} dependencies: - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 - /micromark-util-combine-extensions@1.0.0: - resolution: {integrity: sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==} + /micromark-util-combine-extensions@1.1.0: + resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} dependencies: - micromark-util-chunked: 1.0.0 - micromark-util-types: 1.0.2 + micromark-util-chunked: 1.1.0 + micromark-util-types: 1.1.0 - /micromark-util-decode-numeric-character-reference@1.0.0: - resolution: {integrity: sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==} + /micromark-util-decode-numeric-character-reference@1.1.0: + resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} dependencies: - micromark-util-symbol: 1.0.1 + micromark-util-symbol: 1.1.0 - /micromark-util-decode-string@1.0.2: - resolution: {integrity: sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==} + /micromark-util-decode-string@1.1.0: + resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} dependencies: decode-named-character-reference: 1.0.2 - micromark-util-character: 1.1.0 - micromark-util-decode-numeric-character-reference: 1.0.0 - micromark-util-symbol: 1.0.1 + micromark-util-character: 1.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-symbol: 1.1.0 - /micromark-util-encode@1.0.1: - resolution: {integrity: sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==} + /micromark-util-encode@1.1.0: + resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} /micromark-util-events-to-acorn@1.2.1: resolution: {integrity: sha512-mkg3BaWlw6ZTkQORrKVBW4o9ICXPxLtGz51vml5mQpKFdo9vqIX68CAx5JhTOdjQyAHH7JFmm4rh8toSPQZUmg==} @@ -15711,64 +16732,64 @@ packages: '@types/acorn': 4.0.6 '@types/estree': 1.0.1 estree-util-visit: 1.2.1 - micromark-util-types: 1.0.2 + micromark-util-types: 1.1.0 uvu: 0.5.6 vfile-location: 4.1.0 vfile-message: 3.1.4 - /micromark-util-html-tag-name@1.1.0: - resolution: {integrity: sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==} + /micromark-util-html-tag-name@1.2.0: + resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} - /micromark-util-normalize-identifier@1.0.0: - resolution: {integrity: sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==} + /micromark-util-normalize-identifier@1.1.0: + resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} dependencies: - micromark-util-symbol: 1.0.1 + micromark-util-symbol: 1.1.0 - /micromark-util-resolve-all@1.0.0: - resolution: {integrity: sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==} + /micromark-util-resolve-all@1.1.0: + resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} dependencies: - micromark-util-types: 1.0.2 + micromark-util-types: 1.1.0 - /micromark-util-sanitize-uri@1.1.0: - resolution: {integrity: sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==} + /micromark-util-sanitize-uri@1.2.0: + resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} dependencies: - micromark-util-character: 1.1.0 - micromark-util-encode: 1.0.1 - micromark-util-symbol: 1.0.1 + micromark-util-character: 1.2.0 + micromark-util-encode: 1.1.0 + micromark-util-symbol: 1.1.0 - /micromark-util-subtokenize@1.0.2: - resolution: {integrity: sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==} + /micromark-util-subtokenize@1.1.0: + resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} dependencies: - micromark-util-chunked: 1.0.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-chunked: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 - /micromark-util-symbol@1.0.1: - resolution: {integrity: sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==} + /micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} - /micromark-util-types@1.0.2: - resolution: {integrity: sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==} + /micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} - /micromark@3.1.0: - resolution: {integrity: sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==} + /micromark@3.2.0: + resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} dependencies: - '@types/debug': 4.1.7 + '@types/debug': 4.1.8 debug: 4.3.4(supports-color@6.1.0) decode-named-character-reference: 1.0.2 - micromark-core-commonmark: 1.0.6 - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-chunked: 1.0.0 - micromark-util-combine-extensions: 1.0.0 - micromark-util-decode-numeric-character-reference: 1.0.0 - micromark-util-encode: 1.0.1 - micromark-util-normalize-identifier: 1.0.0 - micromark-util-resolve-all: 1.0.0 - micromark-util-sanitize-uri: 1.1.0 - micromark-util-subtokenize: 1.0.2 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-combine-extensions: 1.1.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-encode: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 transitivePeerDependencies: - supports-color @@ -16242,11 +17263,7 @@ packages: '@panva/hkdf': 1.1.1 cookie: 0.5.0 jose: 4.14.4 -<<<<<<< HEAD - next: 13.4.7(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) -======= next: 13.4.7(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0) ->>>>>>> origin/main oauth: 0.9.15 openid-client: 5.4.2 preact: 10.13.2 @@ -16280,11 +17297,7 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: -<<<<<<< HEAD - next: 13.4.7(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) -======= next: 13.4.7(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0) ->>>>>>> origin/main react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -16300,11 +17313,7 @@ packages: '@corex/deepmerge': 4.0.43 '@next/env': 13.4.7 minimist: 1.2.8 -<<<<<<< HEAD - next: 13.4.7(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) -======= next: 13.4.7(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0) ->>>>>>> origin/main dev: true /next-themes@0.2.1(next@13.4.7)(react-dom@18.2.0)(react@18.2.0): @@ -16314,22 +17323,13 @@ packages: react: '*' react-dom: '*' dependencies: -<<<<<<< HEAD - next: 13.4.7(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) -======= next: 13.4.7(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0) ->>>>>>> origin/main react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false -<<<<<<< HEAD - /next@13.4.6(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-sjVqjxU+U2aXZnYt4Ud6CTLNNwWjdSfMgemGpIQJcN3Z7Jni9xRWbR0ie5fQzCg87aLqQVhKA2ud2gPoqJ9lGw==} -======= /next@13.4.7(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-M8z3k9VmG51SRT6v5uDKdJXcAqLzP3C+vaKfLIAM0Mhx1um1G7MDnO63+m52qPdZfrTFzMZNzfsgvm3ghuVHIQ==} ->>>>>>> origin/main engines: {node: '>=16.8.0'} hasBin: true peerDependencies: @@ -16353,51 +17353,7 @@ packages: postcss: 8.4.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.21.8)(react@18.2.0) - watchpack: 2.4.0 - zod: 3.21.4 - optionalDependencies: - '@next/swc-darwin-arm64': 13.4.7 - '@next/swc-darwin-x64': 13.4.7 - '@next/swc-linux-arm64-gnu': 13.4.7 - '@next/swc-linux-arm64-musl': 13.4.7 - '@next/swc-linux-x64-gnu': 13.4.7 - '@next/swc-linux-x64-musl': 13.4.7 - '@next/swc-win32-arm64-msvc': 13.4.7 - '@next/swc-win32-ia32-msvc': 13.4.7 - '@next/swc-win32-x64-msvc': 13.4.7 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - dev: false - -<<<<<<< HEAD - /next@13.4.7(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-M8z3k9VmG51SRT6v5uDKdJXcAqLzP3C+vaKfLIAM0Mhx1um1G7MDnO63+m52qPdZfrTFzMZNzfsgvm3ghuVHIQ==} - engines: {node: '>=16.8.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - fibers: '>= 3.1.0' - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - fibers: - optional: true - sass: - optional: true - dependencies: - '@next/env': 13.4.7 - '@swc/helpers': 0.5.1 - busboy: 1.6.0 - caniuse-lite: 1.0.30001482 - postcss: 8.4.14 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.21.8)(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.22.5)(react@18.2.0) watchpack: 2.4.0 zod: 3.21.4 optionalDependencies: @@ -16414,8 +17370,6 @@ packages: - '@babel/core' - babel-plugin-macros -======= ->>>>>>> origin/main /nextra-theme-docs@2.8.0(next@13.4.7)(nextra@2.8.0)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-JoSAILDVp0GxeVWWZBFGoRijE2RcjZcXrMa47Fssi254T5wF+gm0HvEOSwrTaKaPaUL+IfshAiKglvXNKGzbNw==} peerDependencies: @@ -16432,11 +17386,7 @@ packages: git-url-parse: 13.1.0 intersection-observer: 0.12.2 match-sorter: 6.3.1 -<<<<<<< HEAD - next: 13.4.7(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) -======= next: 13.4.7(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0) ->>>>>>> origin/main next-seo: 6.0.0(next@13.4.7)(react-dom@18.2.0)(react@18.2.0) next-themes: 0.2.1(next@13.4.7)(react-dom@18.2.0)(react@18.2.0) nextra: 2.8.0(next@13.4.7)(react-dom@18.2.0)(react@18.2.0) @@ -16464,11 +17414,7 @@ packages: gray-matter: 4.0.3 katex: 0.16.7 lodash.get: 4.4.2 -<<<<<<< HEAD - next: 13.4.7(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) -======= next: 13.4.7(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0) ->>>>>>> origin/main next-mdx-remote: 4.4.1(react-dom@18.2.0)(react@18.2.0) p-limit: 3.1.0 react: 18.2.0 @@ -16620,6 +17566,9 @@ packages: /node-releases@2.0.10: resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} + /node-releases@2.0.12: + resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} + /node-stream-zip@1.15.0: resolution: {integrity: sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==} engines: {node: '>=0.12.0'} @@ -17521,7 +18470,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.5 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -17902,6 +18851,18 @@ packages: resolve: 1.22.2 dev: false + /postcss-import@14.1.0(postcss@8.4.24): + resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.2 + dev: false + /postcss-js@4.0.1(postcss@8.4.23): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} @@ -17912,6 +18873,16 @@ packages: postcss: 8.4.23 dev: false + /postcss-js@4.0.1(postcss@8.4.24): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.24 + dev: false + /postcss-load-config@3.1.4(postcss@8.4.23): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} @@ -17929,6 +18900,23 @@ packages: yaml: 1.10.2 dev: false + /postcss-load-config@3.1.4(postcss@8.4.24): + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.24 + yaml: 1.10.2 + dev: false + /postcss-load-config@4.0.1(postcss@8.4.23): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} engines: {node: '>= 14'} @@ -18107,6 +19095,16 @@ packages: postcss-selector-parser: 6.0.12 dev: false + /postcss-nested@6.0.0(postcss@8.4.24): + resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.24 + postcss-selector-parser: 6.0.12 + dev: false + /postcss-normalize-charset@4.0.1: resolution: {integrity: sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==} engines: {node: '>=6.9.0'} @@ -18297,6 +19295,14 @@ packages: picocolors: 1.0.0 source-map-js: 1.0.2 + /postcss@8.4.24: + resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + /preact-render-to-string@5.2.6(preact@10.13.2): resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==} peerDependencies: @@ -18823,12 +19829,12 @@ packages: /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - /react-native-codegen@0.70.6(@babel/preset-env@7.21.5): + /react-native-codegen@0.70.6(@babel/preset-env@7.22.5): resolution: {integrity: sha512-kdwIhH2hi+cFnG5Nb8Ji2JwmcCxnaOOo9440ov7XDzSvGfmUStnCzl+MCW8jLjqHcE4icT7N9y+xx4f50vfBTw==} dependencies: '@babel/parser': 7.21.8 flow-parser: 0.121.0 - jscodeshift: 0.13.1(@babel/preset-env@7.21.5) + jscodeshift: 0.13.1(@babel/preset-env@7.22.5) nullthrows: 1.1.1 transitivePeerDependencies: - '@babel/preset-env' @@ -18858,7 +19864,7 @@ packages: - encoding dev: false - /react-native@0.70.5(@babel/core@7.21.8)(@babel/preset-env@7.21.5)(react@18.1.0): + /react-native@0.70.5(@babel/core@7.21.8)(@babel/preset-env@7.22.5)(react@18.1.0): resolution: {integrity: sha512-5NZM80LC3L+TIgQX/09yiyy48S73wMgpIgN5cCv3XTMR394+KpDI3rBZGH4aIgWWuwijz31YYVF5504+9n2Zfw==} engines: {node: '>=14'} hasBin: true @@ -18888,7 +19894,7 @@ packages: promise: 8.3.0 react: 18.1.0 react-devtools-core: 4.24.0 - react-native-codegen: 0.70.6(@babel/preset-env@7.21.5) + react-native-codegen: 0.70.6(@babel/preset-env@7.22.5) react-native-gradle-plugin: 0.70.3 react-refresh: 0.4.3 react-shallow-renderer: 16.15.0(react@18.1.0) @@ -19312,7 +20318,7 @@ packages: resolution: {integrity: sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==} dependencies: '@types/mdast': 3.0.11 - mdast-util-from-markdown: 1.3.0 + mdast-util-from-markdown: 1.3.1 unified: 10.1.2 transitivePeerDependencies: - supports-color @@ -19589,7 +20595,7 @@ packages: rollup: 2.79.1 typescript: 4.9.5 optionalDependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.5 dev: true /rollup-plugin-inject@3.0.2: @@ -20683,7 +21689,7 @@ packages: dependencies: inline-style-parser: 0.1.1 - /styled-jsx@5.1.1(@babel/core@7.21.8)(react@18.2.0): + /styled-jsx@5.1.1(@babel/core@7.22.5)(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -20696,7 +21702,7 @@ packages: babel-plugin-macros: optional: true dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.5 client-only: 0.0.1 react: 18.2.0 @@ -20852,6 +21858,40 @@ packages: - ts-node dev: false + /tailwindcss@3.2.4(postcss@8.4.24): + resolution: {integrity: sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==} + engines: {node: '>=12.13.0'} + hasBin: true + peerDependencies: + postcss: ^8.0.9 + dependencies: + arg: 5.0.2 + chokidar: 3.5.3 + color-name: 1.1.4 + detective: 5.2.1 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.2.12 + glob-parent: 6.0.2 + is-glob: 4.0.3 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.24 + postcss-import: 14.1.0(postcss@8.4.24) + postcss-js: 4.0.1(postcss@8.4.24) + postcss-load-config: 3.1.4(postcss@8.4.24) + postcss-nested: 6.0.0(postcss@8.4.24) + postcss-selector-parser: 6.0.12 + postcss-value-parser: 4.2.0 + quick-lru: 5.1.1 + resolve: 1.22.2 + transitivePeerDependencies: + - ts-node + dev: false + /tapable@1.1.3: resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} engines: {node: '>=6'} @@ -21276,7 +22316,7 @@ packages: yargs-parser: 20.2.9 dev: true - /ts-jest@29.1.0(@babel/core@7.21.8)(jest@29.5.0)(typescript@4.9.5): + /ts-jest@29.1.0(@babel/core@7.22.5)(jest@29.5.0)(typescript@4.9.5): resolution: {integrity: sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -21297,7 +22337,7 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.5 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 jest: 29.5.0(@types/node@17.0.23) @@ -21870,6 +22910,16 @@ packages: escalade: 3.1.1 picocolors: 1.0.0 + /update-browserslist-db@1.0.11(browserslist@4.21.9): + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.9 + escalade: 3.1.1 + picocolors: 1.0.0 + /update-check@1.5.3: resolution: {integrity: sha512-6KLU4/dd0Tg/l0xwL+f9V7kEIPSL1vOIbnNnhSLiRDlj4AVG6Ks9Zoc9Jgt9kIgWFPZ/wp2AHgmG7xNf15TJOA==} dependencies: From 25c747a550c099596187c89639d5d40b01e44e2b Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 30 Jun 2023 15:12:20 +0200 Subject: [PATCH 232/312] Add retries for tests (Chrome dies occasionally) --- examples/example-next-13-advanced/playwright.config.ts | 1 + examples/example-next-13-named-routes/playwright.config.ts | 1 + examples/example-next-13-next-auth/playwright.config.ts | 1 + examples/example-next-13/playwright.config.ts | 1 + 4 files changed, 4 insertions(+) diff --git a/examples/example-next-13-advanced/playwright.config.ts b/examples/example-next-13-advanced/playwright.config.ts index 34a5aef2a..2c2f76509 100644 --- a/examples/example-next-13-advanced/playwright.config.ts +++ b/examples/example-next-13-advanced/playwright.config.ts @@ -6,6 +6,7 @@ import {devices} from '@playwright/test'; const PORT = process.env.CI ? 3003 : 3000; const config: PlaywrightTestConfig = { + retries: process.env.CI ? 1 : 0, testDir: './tests', projects: [ { diff --git a/examples/example-next-13-named-routes/playwright.config.ts b/examples/example-next-13-named-routes/playwright.config.ts index c28ce6c15..764dcdedc 100644 --- a/examples/example-next-13-named-routes/playwright.config.ts +++ b/examples/example-next-13-named-routes/playwright.config.ts @@ -6,6 +6,7 @@ import {devices} from '@playwright/test'; const PORT = process.env.CI ? 3004 : 3000; const config: PlaywrightTestConfig = { + retries: process.env.CI ? 1 : 0, testDir: './tests', projects: [ { diff --git a/examples/example-next-13-next-auth/playwright.config.ts b/examples/example-next-13-next-auth/playwright.config.ts index 6515d6b31..cdf3257a6 100644 --- a/examples/example-next-13-next-auth/playwright.config.ts +++ b/examples/example-next-13-next-auth/playwright.config.ts @@ -6,6 +6,7 @@ import {devices} from '@playwright/test'; const PORT = process.env.CI ? 3002 : 3000; const config: PlaywrightTestConfig = { + retries: process.env.CI ? 1 : 0, testDir: './tests', projects: [ { diff --git a/examples/example-next-13/playwright.config.ts b/examples/example-next-13/playwright.config.ts index 368c3adbb..2807e6b4b 100644 --- a/examples/example-next-13/playwright.config.ts +++ b/examples/example-next-13/playwright.config.ts @@ -6,6 +6,7 @@ import {devices} from '@playwright/test'; const PORT = process.env.CI ? 3001 : 3000; const config: PlaywrightTestConfig = { + retries: process.env.CI ? 1 : 0, testDir: './tests', projects: [ { From 6f601a5887a6b06e897077d65abc991b55004267 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 30 Jun 2023 17:10:17 +0200 Subject: [PATCH 233/312] chore(Next.js 13 RSC): Switch to tsup for bundling --- packages/next-intl/client.d.ts | 2 +- packages/next-intl/link.d.ts | 2 +- packages/next-intl/middleware.d.ts | 2 +- packages/next-intl/package.json | 23 +- packages/next-intl/server.d.ts | 2 +- packages/next-intl/tsup.config.js | 13 + pnpm-lock.yaml | 396 +++++++++++++++++++++++++++-- 7 files changed, 399 insertions(+), 41 deletions(-) create mode 100644 packages/next-intl/tsup.config.js diff --git a/packages/next-intl/client.d.ts b/packages/next-intl/client.d.ts index 5d664cbda..896ba758b 100644 --- a/packages/next-intl/client.d.ts +++ b/packages/next-intl/client.d.ts @@ -1 +1 @@ -export * from './dist/src/client'; +export * from './dist/client'; diff --git a/packages/next-intl/link.d.ts b/packages/next-intl/link.d.ts index 1873b2531..1358b9b0b 100644 --- a/packages/next-intl/link.d.ts +++ b/packages/next-intl/link.d.ts @@ -1 +1 @@ -export {default} from './dist/src/link'; +export {default} from './dist/link'; diff --git a/packages/next-intl/middleware.d.ts b/packages/next-intl/middleware.d.ts index 26b85a5ef..6701c2ce3 100644 --- a/packages/next-intl/middleware.d.ts +++ b/packages/next-intl/middleware.d.ts @@ -1 +1 @@ -export {default} from './dist/src/middleware'; +export {default} from './dist/middleware'; diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 5db49ff7e..8eaa3eb33 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -11,33 +11,33 @@ "url": "https://github.com/amannn/next-intl" }, "scripts": { - "build": "pnpm build:default && pnpm build:rsc", - "build:default": "rm -rf dist && dts build", - "build:rsc": "tsc && rm -rf dist/test", + "build": "tsup", "test": "TZ=Europe/Berlin dts test --testPathIgnorePatterns=dist", "lint": "eslint src test && tsc --noEmit", "prepublishOnly": "turbo test && turbo lint && turbo build && cp ../../README.md .", "postpublish": "git checkout . && rm ./README.md" }, "main": "dist/index.js", - "module": "dist/next-intl.esm.js", + "module": "dist/index.mjs", "typings": "dist/index.d.ts", "exports": { ".": { - "react-server": "./dist/src/react-server/index.js", + "react-server": "./dist/react-server/index.js", "default": "./dist/index.js" }, "./server": { - "react-server": "./dist/src/server/index.js", - "default": "./dist/src/server/react-client/index.js" + "react-server": "./dist/server/index.js", + "default": "./dist/server/react-client/index.js" }, - "./client": "./dist/src/client/index.js", + "./client": "./dist/client/index.js", "./link": { - "react-server": "./dist/src/link/react-server/index.js", - "default": "./dist/src/link/index.js" + "react-server": "./dist/link/react-server/index.js", + "default": "./dist/link/index.js", + "import": "./dist/link/index.mjs", + "types": "./dist/link/index.d.ts" }, "./config": "./config.js", - "./middleware": "./dist/src/middleware/index.js", + "./middleware": "./dist/middleware/index.js", "./withNextIntl": "./withNextIntl.js", "./plugin": "./plugin.js" }, @@ -95,6 +95,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "ts-jest": "^29.1.0", + "tsup": "^7.1.0", "typescript": "^4.9.5" }, "engines": { diff --git a/packages/next-intl/server.d.ts b/packages/next-intl/server.d.ts index b940dac21..699fd532a 100644 --- a/packages/next-intl/server.d.ts +++ b/packages/next-intl/server.d.ts @@ -1 +1 @@ -export * from './dist/src/server'; +export * from './dist/server'; diff --git a/packages/next-intl/tsup.config.js b/packages/next-intl/tsup.config.js new file mode 100644 index 000000000..d1a3a6102 --- /dev/null +++ b/packages/next-intl/tsup.config.js @@ -0,0 +1,13 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import {defineConfig} from 'tsup'; + +export default defineConfig({ + entry: ['src'], + format: ['esm', 'cjs'], + splitting: false, + sourcemap: true, + clean: true, + bundle: false, + dts: true, + minify: true +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 733c521a9..bea34a266 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -528,7 +528,7 @@ importers: version: 18.2.5 dts-cli: specifier: ^1.4.0 - version: 1.4.0(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(@types/node@17.0.23) + version: 1.4.0(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(@types/node@17.0.23)(esbuild@0.18.10) eslint: specifier: ^8.39.0 version: 8.39.0 @@ -552,7 +552,10 @@ importers: version: 18.2.0(react@18.2.0) ts-jest: specifier: ^29.1.0 - version: 29.1.0(@babel/core@7.22.5)(jest@29.5.0)(typescript@4.9.5) + version: 29.1.0(@babel/core@7.22.5)(esbuild@0.18.10)(jest@29.5.0)(typescript@4.9.5) + tsup: + specifier: ^7.1.0 + version: 7.1.0(typescript@4.9.5) typescript: specifier: ^4.9.5 version: 4.9.5 @@ -583,7 +586,7 @@ importers: version: 2.16.1 dts-cli: specifier: ^1.4.0 - version: 1.4.0(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(@types/node@17.0.23) + version: 1.4.0(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(@types/node@17.0.23)(esbuild@0.18.10) eslint: specifier: ^8.39.0 version: 8.39.0 @@ -3013,6 +3016,15 @@ packages: dev: true optional: true + /@esbuild/android-arm64@0.18.10: + resolution: {integrity: sha512-ynm4naLbNbK0ajf9LUWtQB+6Vfg1Z/AplArqr4tGebC00Z6m9Y91OVIcjDa461wGcZwcaHYaZAab4yJxfhisTQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm@0.16.3: resolution: {integrity: sha512-mueuEoh+s1eRbSJqq9KNBQwI4QhQV6sRXIfTyLXSHGMpyew61rOK4qY21uKbXl1iBoMb0AdL1deWFCQVlN2qHA==} engines: {node: '>=12'} @@ -3031,6 +3043,15 @@ packages: dev: true optional: true + /@esbuild/android-arm@0.18.10: + resolution: {integrity: sha512-3KClmVNd+Fku82uZJz5C4Rx8m1PPmWUFz5Zkw8jkpZPOmsq+EG1TTOtw1OXkHuX3WczOFQigrtf60B1ijKwNsg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-x64@0.16.3: resolution: {integrity: sha512-SFpTUcIT1bIJuCCBMCQWq1bL2gPTjWoLZdjmIhjdcQHaUfV41OQfho6Ici5uvvkMmZRXIUGpM3GxysP/EU7ifQ==} engines: {node: '>=12'} @@ -3049,6 +3070,15 @@ packages: dev: true optional: true + /@esbuild/android-x64@0.18.10: + resolution: {integrity: sha512-vFfXj8P9Yfjh54yqUDEHKzqzYuEfPyAOl3z7R9hjkwt+NCvbn9VMxX+IILnAfdImRBfYVItgSUsqGKhJFnBwZw==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-arm64@0.16.3: resolution: {integrity: sha512-DO8WykMyB+N9mIDfI/Hug70Dk1KipavlGAecxS3jDUwAbTpDXj0Lcwzw9svkhxfpCagDmpaTMgxWK8/C/XcXvw==} engines: {node: '>=12'} @@ -3067,6 +3097,15 @@ packages: dev: true optional: true + /@esbuild/darwin-arm64@0.18.10: + resolution: {integrity: sha512-k2OJQ7ZxE6sVc91+MQeZH9gFeDAH2uIYALPAwTjTCvcPy9Dzrf7V7gFUQPYkn09zloWhQ+nvxWHia2x2ZLR0sQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-x64@0.16.3: resolution: {integrity: sha512-uEqZQ2omc6BvWqdCiyZ5+XmxuHEi1SPzpVxXCSSV2+Sh7sbXbpeNhHIeFrIpRjAs0lI1FmA1iIOxFozKBhKgRQ==} engines: {node: '>=12'} @@ -3085,6 +3124,15 @@ packages: dev: true optional: true + /@esbuild/darwin-x64@0.18.10: + resolution: {integrity: sha512-tnz/mdZk1L1Z3WpGjin/L2bKTe8/AKZpI8fcCLtH+gq8WXWsCNJSxlesAObV4qbtTl6pG5vmqFXfWUQ5hV8PAQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-arm64@0.16.3: resolution: {integrity: sha512-nJansp3sSXakNkOD5i5mIz2Is/HjzIhFs49b1tjrPrpCmwgBmH9SSzhC/Z1UqlkivqMYkhfPwMw1dGFUuwmXhw==} engines: {node: '>=12'} @@ -3103,6 +3151,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-arm64@0.18.10: + resolution: {integrity: sha512-QJluV0LwBrbHnYYwSKC+K8RGz0g/EyhpQH1IxdoFT0nM7PfgjE+aS8wxq/KFEsU0JkL7U/EEKd3O8xVBxXb2aA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-x64@0.16.3: resolution: {integrity: sha512-TfoDzLw+QHfc4a8aKtGSQ96Wa+6eimljjkq9HKR0rHlU83vw8aldMOUSJTUDxbcUdcgnJzPaX8/vGWm7vyV7ug==} engines: {node: '>=12'} @@ -3121,6 +3178,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-x64@0.18.10: + resolution: {integrity: sha512-Hi/ycUkS6KTw+U9G5PK5NoK7CZboicaKUSVs0FSiPNtuCTzK6HNM4DIgniH7hFaeuszDS9T4dhAHWiLSt/Y5Ng==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm64@0.16.3: resolution: {integrity: sha512-7I3RlsnxEFCHVZNBLb2w7unamgZ5sVwO0/ikE2GaYvYuUQs9Qte/w7TqWcXHtCwxvZx/2+F97ndiUQAWs47ZfQ==} engines: {node: '>=12'} @@ -3139,6 +3205,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm64@0.18.10: + resolution: {integrity: sha512-Nz6XcfRBOO7jSrVpKAyEyFOPGhySPNlgumSDhWAspdQQ11ub/7/NZDMhWDFReE9QH/SsCOCLQbdj0atAk/HMOQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm@0.16.3: resolution: {integrity: sha512-VwswmSYwVAAq6LysV59Fyqk3UIjbhuc6wb3vEcJ7HEJUtFuLK9uXWuFoH1lulEbE4+5GjtHi3MHX+w1gNHdOWQ==} engines: {node: '>=12'} @@ -3157,6 +3232,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm@0.18.10: + resolution: {integrity: sha512-HfFoxY172tVHPIvJy+FHxzB4l8xU7e5cxmNS11cQ2jt4JWAukn/7LXaPdZid41UyTweqa4P/1zs201gRGCTwHw==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ia32@0.16.3: resolution: {integrity: sha512-X8FDDxM9cqda2rJE+iblQhIMYY49LfvW4kaEjoFbTTQ4Go8G96Smj2w3BRTwA8IHGoi9dPOPGAX63dhuv19UqA==} engines: {node: '>=12'} @@ -3175,6 +3259,15 @@ packages: dev: true optional: true + /@esbuild/linux-ia32@0.18.10: + resolution: {integrity: sha512-otMdmSmkMe+pmiP/bZBjfphyAsTsngyT9RCYwoFzqrveAbux9nYitDTpdgToG0Z0U55+PnH654gCH2GQ1aB6Yw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64@0.16.3: resolution: {integrity: sha512-hIbeejCOyO0X9ujfIIOKjBjNAs9XD/YdJ9JXAy1lHA+8UXuOqbFe4ErMCqMr8dhlMGBuvcQYGF7+kO7waj2KHw==} engines: {node: '>=12'} @@ -3193,6 +3286,15 @@ packages: dev: true optional: true + /@esbuild/linux-loong64@0.18.10: + resolution: {integrity: sha512-t8tjFuON1koxskzQ4VFoh0T5UDUMiLYjwf9Wktd0tx8AoK6xgU+5ubKOpWpcnhEQ2tESS5u0v6QuN8PX/ftwcQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-mips64el@0.16.3: resolution: {integrity: sha512-znFRzICT/V8VZQMt6rjb21MtAVJv/3dmKRMlohlShrbVXdBuOdDrGb+C2cZGQAR8RFyRe7HS6klmHq103WpmVw==} engines: {node: '>=12'} @@ -3211,6 +3313,15 @@ packages: dev: true optional: true + /@esbuild/linux-mips64el@0.18.10: + resolution: {integrity: sha512-+dUkcVzcfEJHz3HEnVpIJu8z8Wdn2n/nWMWdl6FVPFGJAVySO4g3+XPzNKFytVFwf8hPVDwYXzVcu8GMFqsqZw==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ppc64@0.16.3: resolution: {integrity: sha512-EV7LuEybxhXrVTDpbqWF2yehYRNz5e5p+u3oQUS2+ZFpknyi1NXxr8URk4ykR8Efm7iu04//4sBg249yNOwy5Q==} engines: {node: '>=12'} @@ -3229,6 +3340,15 @@ packages: dev: true optional: true + /@esbuild/linux-ppc64@0.18.10: + resolution: {integrity: sha512-sO3PjjxEGy+PY2qkGe2gwJbXdZN9wAYpVBZWFD0AwAoKuXRkWK0/zaMQ5ekUFJDRDCRm8x5U0Axaub7ynH/wVg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-riscv64@0.16.3: resolution: {integrity: sha512-uDxqFOcLzFIJ+r/pkTTSE9lsCEaV/Y6rMlQjUI9BkzASEChYL/aSQjZjchtEmdnVxDKETnUAmsaZ4pqK1eE5BQ==} engines: {node: '>=12'} @@ -3247,6 +3367,15 @@ packages: dev: true optional: true + /@esbuild/linux-riscv64@0.18.10: + resolution: {integrity: sha512-JDtdbJg3yjDeXLv4lZYE1kiTnxv73/8cbPHY9T/dUKi8rYOM/k5b3W4UJLMUksuQ6nTm5c89W1nADsql6FW75A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-s390x@0.16.3: resolution: {integrity: sha512-NbeREhzSxYwFhnCAQOQZmajsPYtX71Ufej3IQ8W2Gxskfz9DK58ENEju4SbpIj48VenktRASC52N5Fhyf/aliQ==} engines: {node: '>=12'} @@ -3265,6 +3394,15 @@ packages: dev: true optional: true + /@esbuild/linux-s390x@0.18.10: + resolution: {integrity: sha512-NLuSKcp8WckjD2a7z5kzLiCywFwBTMlIxDNuud1AUGVuwBBJSkuubp6cNjJ0p5c6CZaA3QqUGwjHJBiG1SoOFw==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-x64@0.16.3: resolution: {integrity: sha512-SDiG0nCixYO9JgpehoKgScwic7vXXndfasjnD5DLbp1xltANzqZ425l7LSdHynt19UWOcDjG9wJJzSElsPvk0w==} engines: {node: '>=12'} @@ -3283,6 +3421,15 @@ packages: dev: true optional: true + /@esbuild/linux-x64@0.18.10: + resolution: {integrity: sha512-wj2KRsCsFusli+6yFgNO/zmmLslislAWryJnodteRmGej7ZzinIbMdsyp13rVGde88zxJd5vercNYK9kuvlZaQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/netbsd-x64@0.16.3: resolution: {integrity: sha512-AzbsJqiHEq1I/tUvOfAzCY15h4/7Ivp3ff/o1GpP16n48JMNAtbW0qui2WCgoIZArEHD0SUQ95gvR0oSO7ZbdA==} engines: {node: '>=12'} @@ -3301,6 +3448,15 @@ packages: dev: true optional: true + /@esbuild/netbsd-x64@0.18.10: + resolution: {integrity: sha512-pQ9QqxEPI3cVRZyUtCoZxhZK3If+7RzR8L2yz2+TDzdygofIPOJFaAPkEJ5rYIbUO101RaiYxfdOBahYexLk5A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/openbsd-x64@0.16.3: resolution: {integrity: sha512-gSABi8qHl8k3Cbi/4toAzHiykuBuWLZs43JomTcXkjMZVkp0gj3gg9mO+9HJW/8GB5H89RX/V0QP4JGL7YEEVg==} engines: {node: '>=12'} @@ -3319,6 +3475,15 @@ packages: dev: true optional: true + /@esbuild/openbsd-x64@0.18.10: + resolution: {integrity: sha512-k8GTIIW9I8pEEfoOUm32TpPMgSg06JhL5DO+ql66aLTkOQUs0TxCA67Wi7pv6z8iF8STCGcNbm3UWFHLuci+ag==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/sunos-x64@0.16.3: resolution: {integrity: sha512-SF9Kch5Ete4reovvRO6yNjMxrvlfT0F0Flm+NPoUw5Z4Q3r1d23LFTgaLwm3Cp0iGbrU/MoUI+ZqwCv5XJijCw==} engines: {node: '>=12'} @@ -3337,6 +3502,15 @@ packages: dev: true optional: true + /@esbuild/sunos-x64@0.18.10: + resolution: {integrity: sha512-vIGYJIdEI6d4JBucAx8py792G8J0GP40qSH+EvSt80A4zvGd6jph+5t1g+eEXcS2aRpgZw6CrssNCFZxTdEsxw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-arm64@0.16.3: resolution: {integrity: sha512-u5aBonZIyGopAZyOnoPAA6fGsDeHByZ9CnEzyML9NqntK6D/xl5jteZUKm/p6nD09+v3pTM6TuUIqSPcChk5gg==} engines: {node: '>=12'} @@ -3355,6 +3529,15 @@ packages: dev: true optional: true + /@esbuild/win32-arm64@0.18.10: + resolution: {integrity: sha512-kRhNcMZFGMW+ZHCarAM1ypr8OZs0k688ViUCetVCef9p3enFxzWeBg9h/575Y0nsFu0ZItluCVF5gMR2pwOEpA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-ia32@0.16.3: resolution: {integrity: sha512-GlgVq1WpvOEhNioh74TKelwla9KDuAaLZrdxuuUgsP2vayxeLgVc+rbpIv0IYF4+tlIzq2vRhofV+KGLD+37EQ==} engines: {node: '>=12'} @@ -3373,6 +3556,15 @@ packages: dev: true optional: true + /@esbuild/win32-ia32@0.18.10: + resolution: {integrity: sha512-AR9PX1whYaYh9p0EOaKna0h48F/A101Mt/ag72+kMkkBZXPQ7cjbz2syXI/HI3OlBdUytSdHneljfjvUoqwqiQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-x64@0.16.3: resolution: {integrity: sha512-5/JuTd8OWW8UzEtyf19fbrtMJENza+C9JoPIkvItgTBQ1FO2ZLvjbPO6Xs54vk0s5JB5QsfieUEshRQfu7ZHow==} engines: {node: '>=12'} @@ -3391,6 +3583,15 @@ packages: dev: true optional: true + /@esbuild/win32-x64@0.18.10: + resolution: {integrity: sha512-5sTkYhAGHNRr6bVf4RM0PsscqVr6/DBYdrlMh168oph3usid3lKHcHEEHmr34iZ9GHeeg2juFOxtpl6XyC3tpw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.39.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -6229,7 +6430,7 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.5.1 - '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@5.0.4) + '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@4.9.5) '@typescript-eslint/scope-manager': 5.59.2 '@typescript-eslint/type-utils': 5.59.2(eslint@8.39.0)(typescript@4.9.5) '@typescript-eslint/utils': 5.59.2(eslint@8.39.0)(typescript@4.9.5) @@ -6893,7 +7094,6 @@ packages: /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: false /anymatch@2.0.0(supports-color@6.1.0): resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} @@ -7959,6 +8159,16 @@ packages: run-applescript: 5.0.0 dev: true + /bundle-require@4.0.1(esbuild@0.18.10): + resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.17' + dependencies: + esbuild: 0.18.10 + load-tsconfig: 0.2.5 + dev: true + /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -8571,7 +8781,6 @@ packages: /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} - dev: false /commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} @@ -10083,7 +10292,7 @@ packages: engines: {node: '>=12'} dev: true - /dts-cli@1.4.0(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(@types/node@17.0.23): + /dts-cli@1.4.0(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(@types/node@17.0.23)(esbuild@0.18.10): resolution: {integrity: sha512-bcjolZYKh51WPurWUayO85XaqccE26yWiAd5+JCZU8YFWAJgcp+UGFke3OwmJvo7WKX3e48FuvzFezUkd+eFSg==} engines: {node: '>=12.0.0'} hasBin: true @@ -10116,7 +10325,7 @@ packages: eslint: 8.39.0 eslint-config-prettier: 8.8.0(eslint@8.39.0) eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.39.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint@8.39.0) eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@27.5.1)(typescript@4.9.5) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8) @@ -10147,7 +10356,7 @@ packages: shelljs: 0.8.5 sort-package-json: 1.57.0 tiny-glob: 0.2.9 - ts-jest: 27.1.5(@babel/core@7.21.8)(@types/jest@27.5.2)(jest@27.5.1)(typescript@4.9.5) + ts-jest: 27.1.5(@babel/core@7.21.8)(@types/jest@27.5.2)(esbuild@0.18.10)(jest@27.5.1)(typescript@4.9.5) ts-node: 10.9.1(@types/node@17.0.23)(typescript@4.9.5) tslib: 2.5.0 type-fest: 2.19.0 @@ -10479,6 +10688,36 @@ packages: '@esbuild/win32-x64': 0.17.6 dev: true + /esbuild@0.18.10: + resolution: {integrity: sha512-33WKo67auOXzZHBY/9DTJRo7kIvfU12S+D4sp2wIz39N88MDIaCGyCwbW01RR70pK6Iya0I74lHEpyLfFqOHPA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.10 + '@esbuild/android-arm64': 0.18.10 + '@esbuild/android-x64': 0.18.10 + '@esbuild/darwin-arm64': 0.18.10 + '@esbuild/darwin-x64': 0.18.10 + '@esbuild/freebsd-arm64': 0.18.10 + '@esbuild/freebsd-x64': 0.18.10 + '@esbuild/linux-arm': 0.18.10 + '@esbuild/linux-arm64': 0.18.10 + '@esbuild/linux-ia32': 0.18.10 + '@esbuild/linux-loong64': 0.18.10 + '@esbuild/linux-mips64el': 0.18.10 + '@esbuild/linux-ppc64': 0.18.10 + '@esbuild/linux-riscv64': 0.18.10 + '@esbuild/linux-s390x': 0.18.10 + '@esbuild/linux-x64': 0.18.10 + '@esbuild/netbsd-x64': 0.18.10 + '@esbuild/openbsd-x64': 0.18.10 + '@esbuild/sunos-x64': 0.18.10 + '@esbuild/win32-arm64': 0.18.10 + '@esbuild/win32-ia32': 0.18.10 + '@esbuild/win32-x64': 0.18.10 + dev: true + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -10542,7 +10781,7 @@ packages: confusing-browser-globals: 1.0.11 eslint: 8.39.0 eslint-plugin-css-modules: 2.11.0(eslint@8.39.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint@8.39.0) eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@29.5.0)(typescript@4.9.5) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8) @@ -10572,7 +10811,7 @@ packages: confusing-browser-globals: 1.0.11 eslint: 8.39.0 eslint-plugin-css-modules: 2.11.0(eslint@8.39.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint@8.39.0) eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@27.5.1)(typescript@4.9.5) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8) @@ -10602,7 +10841,7 @@ packages: confusing-browser-globals: 1.0.11 eslint: 8.39.0 eslint-plugin-css-modules: 2.11.0(eslint@8.39.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint@8.39.0) eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@29.5.0)(typescript@4.9.5) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8) @@ -10635,7 +10874,7 @@ packages: eslint: 8.39.0 eslint-import-resolver-node: 0.3.7 eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.39.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint@8.39.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) eslint-plugin-react: 7.32.2(eslint@8.39.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.39.0) @@ -10660,7 +10899,7 @@ packages: eslint: 8.39.0 eslint-import-resolver-node: 0.3.7 eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.39.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint@8.39.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) eslint-plugin-react: 7.32.2(eslint@8.39.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.39.0) @@ -10700,7 +10939,7 @@ packages: enhanced-resolve: 5.13.0 eslint: 8.39.0 eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint@8.39.0) get-tsconfig: 4.5.0 globby: 13.1.4 is-core-module: 2.12.0 @@ -10743,6 +10982,35 @@ packages: - supports-color dev: true + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-node@0.3.7)(eslint@8.39.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@4.9.5) + debug: 3.2.7(supports-color@6.1.0) + eslint: 8.39.0 + eslint-import-resolver-node: 0.3.7 + transitivePeerDependencies: + - supports-color + dev: true + /eslint-plugin-css-modules@2.11.0(eslint@8.39.0): resolution: {integrity: sha512-CLvQvJOMlCywZzaI4HVu7QH/ltgNXvCg7giJGiE+sA9wh5zQ+AqTgftAzrERV22wHe1p688wrU/Zwxt1Ry922w==} engines: {node: '>=4.0.0'} @@ -10784,7 +11052,7 @@ packages: string-natural-compare: 3.0.1 dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0): + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.2)(eslint@8.39.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -10794,7 +11062,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@5.0.4) + '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@4.9.5) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 @@ -10802,7 +11070,7 @@ packages: doctrine: 2.1.0 eslint: 8.39.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-node@0.3.7)(eslint@8.39.0) has: 1.0.3 is-core-module: 2.12.0 is-glob: 4.0.3 @@ -12383,7 +12651,6 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: false /glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} @@ -14974,6 +15241,11 @@ packages: resolution: {integrity: sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==} dev: false + /joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + dev: true + /jpjs@1.2.1: resolution: {integrity: sha512-GxJWybWU4NV0RNKi6EIqk6IRPOTqd/h+U7sbtyuD7yUISUzV78LdHnq2xkevJsTlz/EImux4sWj+wfMiwKLkiw==} dev: true @@ -15491,6 +15763,11 @@ packages: type-fest: 0.6.0 dev: true + /load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /loader-runner@2.4.0: resolution: {integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==} engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} @@ -15587,6 +15864,10 @@ packages: /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + /lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + dev: true + /lodash.throttle@4.1.1: resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} @@ -17186,7 +17467,6 @@ packages: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - dev: false /nan@2.17.0: resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} @@ -21279,6 +21559,13 @@ packages: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} + /source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + dependencies: + whatwg-url: 7.1.0 + dev: true + /sourcemap-codec@1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead @@ -21735,7 +22022,6 @@ packages: mz: 2.7.0 pirates: 4.0.5 ts-interface-checker: 0.1.13 - dev: false /sudo-prompt@8.2.5: resolution: {integrity: sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==} @@ -22088,13 +22374,11 @@ packages: engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 - dev: false /thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 - dev: false /throat@5.0.0: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} @@ -22237,6 +22521,12 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + /tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + dependencies: + punycode: 2.3.0 + dev: true + /tr46@2.1.0: resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} engines: {node: '>=8'} @@ -22255,6 +22545,11 @@ packages: resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} dev: false + /tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + dev: true + /treeverse@3.0.0: resolution: {integrity: sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -22279,9 +22574,8 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: false - /ts-jest@27.1.5(@babel/core@7.21.8)(@types/jest@27.5.2)(jest@27.5.1)(typescript@4.9.5): + /ts-jest@27.1.5(@babel/core@7.21.8)(@types/jest@27.5.2)(esbuild@0.18.10)(jest@27.5.1)(typescript@4.9.5): resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true @@ -22305,6 +22599,7 @@ packages: '@babel/core': 7.21.8 '@types/jest': 27.5.2 bs-logger: 0.2.6 + esbuild: 0.18.10 fast-json-stable-stringify: 2.1.0 jest: 27.5.1(ts-node@10.9.1) jest-util: 27.5.1 @@ -22316,7 +22611,7 @@ packages: yargs-parser: 20.2.9 dev: true - /ts-jest@29.1.0(@babel/core@7.22.5)(jest@29.5.0)(typescript@4.9.5): + /ts-jest@29.1.0(@babel/core@7.22.5)(esbuild@0.18.10)(jest@29.5.0)(typescript@4.9.5): resolution: {integrity: sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -22339,6 +22634,7 @@ packages: dependencies: '@babel/core': 7.22.5 bs-logger: 0.2.6 + esbuild: 0.18.10 fast-json-stable-stringify: 2.1.0 jest: 29.5.0(@types/node@17.0.23) jest-util: 29.5.0 @@ -22421,6 +22717,42 @@ packages: /tslib@2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + /tsup@7.1.0(typescript@4.9.5): + resolution: {integrity: sha512-mazl/GRAk70j8S43/AbSYXGgvRP54oQeX8Un4iZxzATHt0roW0t6HYDVZIXMw0ZQIpvr1nFMniIVnN5186lW7w==} + engines: {node: '>=16.14'} + hasBin: true + peerDependencies: + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.1.0' + peerDependenciesMeta: + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + dependencies: + bundle-require: 4.0.1(esbuild@0.18.10) + cac: 6.7.14 + chokidar: 3.5.3 + debug: 4.3.4(supports-color@6.1.0) + esbuild: 0.18.10 + execa: 5.1.1 + globby: 11.1.0 + joycon: 3.1.1 + postcss-load-config: 4.0.1(postcss@8.4.23) + resolve-from: 5.0.0 + rollup: 3.21.4 + source-map: 0.8.0-beta.0 + sucrase: 3.32.0 + tree-kill: 1.2.2 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + - ts-node + dev: true + /tsutils@3.21.0(typescript@4.9.5): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -23334,6 +23666,10 @@ packages: /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + /webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + dev: true + /webidl-conversions@5.0.0: resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} engines: {node: '>=8'} @@ -23542,6 +23878,14 @@ packages: tr46: 0.0.3 webidl-conversions: 3.0.1 + /whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + dev: true + /whatwg-url@8.7.0: resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} engines: {node: '>=10'} From e4b2275a8229cc5d70158f220d9804bdcda91526 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 30 Jun 2023 17:10:26 +0200 Subject: [PATCH 234/312] Revert "chore(Next.js 13 RSC): Switch to tsup for bundling" This reverts commit 6f601a5887a6b06e897077d65abc991b55004267. --- packages/next-intl/client.d.ts | 2 +- packages/next-intl/link.d.ts | 2 +- packages/next-intl/middleware.d.ts | 2 +- packages/next-intl/package.json | 23 +- packages/next-intl/server.d.ts | 2 +- packages/next-intl/tsup.config.js | 13 - pnpm-lock.yaml | 396 ++--------------------------- 7 files changed, 41 insertions(+), 399 deletions(-) delete mode 100644 packages/next-intl/tsup.config.js diff --git a/packages/next-intl/client.d.ts b/packages/next-intl/client.d.ts index 896ba758b..5d664cbda 100644 --- a/packages/next-intl/client.d.ts +++ b/packages/next-intl/client.d.ts @@ -1 +1 @@ -export * from './dist/client'; +export * from './dist/src/client'; diff --git a/packages/next-intl/link.d.ts b/packages/next-intl/link.d.ts index 1358b9b0b..1873b2531 100644 --- a/packages/next-intl/link.d.ts +++ b/packages/next-intl/link.d.ts @@ -1 +1 @@ -export {default} from './dist/link'; +export {default} from './dist/src/link'; diff --git a/packages/next-intl/middleware.d.ts b/packages/next-intl/middleware.d.ts index 6701c2ce3..26b85a5ef 100644 --- a/packages/next-intl/middleware.d.ts +++ b/packages/next-intl/middleware.d.ts @@ -1 +1 @@ -export {default} from './dist/middleware'; +export {default} from './dist/src/middleware'; diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 8eaa3eb33..5db49ff7e 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -11,33 +11,33 @@ "url": "https://github.com/amannn/next-intl" }, "scripts": { - "build": "tsup", + "build": "pnpm build:default && pnpm build:rsc", + "build:default": "rm -rf dist && dts build", + "build:rsc": "tsc && rm -rf dist/test", "test": "TZ=Europe/Berlin dts test --testPathIgnorePatterns=dist", "lint": "eslint src test && tsc --noEmit", "prepublishOnly": "turbo test && turbo lint && turbo build && cp ../../README.md .", "postpublish": "git checkout . && rm ./README.md" }, "main": "dist/index.js", - "module": "dist/index.mjs", + "module": "dist/next-intl.esm.js", "typings": "dist/index.d.ts", "exports": { ".": { - "react-server": "./dist/react-server/index.js", + "react-server": "./dist/src/react-server/index.js", "default": "./dist/index.js" }, "./server": { - "react-server": "./dist/server/index.js", - "default": "./dist/server/react-client/index.js" + "react-server": "./dist/src/server/index.js", + "default": "./dist/src/server/react-client/index.js" }, - "./client": "./dist/client/index.js", + "./client": "./dist/src/client/index.js", "./link": { - "react-server": "./dist/link/react-server/index.js", - "default": "./dist/link/index.js", - "import": "./dist/link/index.mjs", - "types": "./dist/link/index.d.ts" + "react-server": "./dist/src/link/react-server/index.js", + "default": "./dist/src/link/index.js" }, "./config": "./config.js", - "./middleware": "./dist/middleware/index.js", + "./middleware": "./dist/src/middleware/index.js", "./withNextIntl": "./withNextIntl.js", "./plugin": "./plugin.js" }, @@ -95,7 +95,6 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "ts-jest": "^29.1.0", - "tsup": "^7.1.0", "typescript": "^4.9.5" }, "engines": { diff --git a/packages/next-intl/server.d.ts b/packages/next-intl/server.d.ts index 699fd532a..b940dac21 100644 --- a/packages/next-intl/server.d.ts +++ b/packages/next-intl/server.d.ts @@ -1 +1 @@ -export * from './dist/server'; +export * from './dist/src/server'; diff --git a/packages/next-intl/tsup.config.js b/packages/next-intl/tsup.config.js deleted file mode 100644 index d1a3a6102..000000000 --- a/packages/next-intl/tsup.config.js +++ /dev/null @@ -1,13 +0,0 @@ -/* eslint-disable import/no-extraneous-dependencies */ -import {defineConfig} from 'tsup'; - -export default defineConfig({ - entry: ['src'], - format: ['esm', 'cjs'], - splitting: false, - sourcemap: true, - clean: true, - bundle: false, - dts: true, - minify: true -}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bea34a266..733c521a9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -528,7 +528,7 @@ importers: version: 18.2.5 dts-cli: specifier: ^1.4.0 - version: 1.4.0(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(@types/node@17.0.23)(esbuild@0.18.10) + version: 1.4.0(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(@types/node@17.0.23) eslint: specifier: ^8.39.0 version: 8.39.0 @@ -552,10 +552,7 @@ importers: version: 18.2.0(react@18.2.0) ts-jest: specifier: ^29.1.0 - version: 29.1.0(@babel/core@7.22.5)(esbuild@0.18.10)(jest@29.5.0)(typescript@4.9.5) - tsup: - specifier: ^7.1.0 - version: 7.1.0(typescript@4.9.5) + version: 29.1.0(@babel/core@7.22.5)(jest@29.5.0)(typescript@4.9.5) typescript: specifier: ^4.9.5 version: 4.9.5 @@ -586,7 +583,7 @@ importers: version: 2.16.1 dts-cli: specifier: ^1.4.0 - version: 1.4.0(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(@types/node@17.0.23)(esbuild@0.18.10) + version: 1.4.0(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(@types/node@17.0.23) eslint: specifier: ^8.39.0 version: 8.39.0 @@ -3016,15 +3013,6 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.18.10: - resolution: {integrity: sha512-ynm4naLbNbK0ajf9LUWtQB+6Vfg1Z/AplArqr4tGebC00Z6m9Y91OVIcjDa461wGcZwcaHYaZAab4yJxfhisTQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.16.3: resolution: {integrity: sha512-mueuEoh+s1eRbSJqq9KNBQwI4QhQV6sRXIfTyLXSHGMpyew61rOK4qY21uKbXl1iBoMb0AdL1deWFCQVlN2qHA==} engines: {node: '>=12'} @@ -3043,15 +3031,6 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.18.10: - resolution: {integrity: sha512-3KClmVNd+Fku82uZJz5C4Rx8m1PPmWUFz5Zkw8jkpZPOmsq+EG1TTOtw1OXkHuX3WczOFQigrtf60B1ijKwNsg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.16.3: resolution: {integrity: sha512-SFpTUcIT1bIJuCCBMCQWq1bL2gPTjWoLZdjmIhjdcQHaUfV41OQfho6Ici5uvvkMmZRXIUGpM3GxysP/EU7ifQ==} engines: {node: '>=12'} @@ -3070,15 +3049,6 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.18.10: - resolution: {integrity: sha512-vFfXj8P9Yfjh54yqUDEHKzqzYuEfPyAOl3z7R9hjkwt+NCvbn9VMxX+IILnAfdImRBfYVItgSUsqGKhJFnBwZw==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.16.3: resolution: {integrity: sha512-DO8WykMyB+N9mIDfI/Hug70Dk1KipavlGAecxS3jDUwAbTpDXj0Lcwzw9svkhxfpCagDmpaTMgxWK8/C/XcXvw==} engines: {node: '>=12'} @@ -3097,15 +3067,6 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.18.10: - resolution: {integrity: sha512-k2OJQ7ZxE6sVc91+MQeZH9gFeDAH2uIYALPAwTjTCvcPy9Dzrf7V7gFUQPYkn09zloWhQ+nvxWHia2x2ZLR0sQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.16.3: resolution: {integrity: sha512-uEqZQ2omc6BvWqdCiyZ5+XmxuHEi1SPzpVxXCSSV2+Sh7sbXbpeNhHIeFrIpRjAs0lI1FmA1iIOxFozKBhKgRQ==} engines: {node: '>=12'} @@ -3124,15 +3085,6 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.18.10: - resolution: {integrity: sha512-tnz/mdZk1L1Z3WpGjin/L2bKTe8/AKZpI8fcCLtH+gq8WXWsCNJSxlesAObV4qbtTl6pG5vmqFXfWUQ5hV8PAQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.16.3: resolution: {integrity: sha512-nJansp3sSXakNkOD5i5mIz2Is/HjzIhFs49b1tjrPrpCmwgBmH9SSzhC/Z1UqlkivqMYkhfPwMw1dGFUuwmXhw==} engines: {node: '>=12'} @@ -3151,15 +3103,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.18.10: - resolution: {integrity: sha512-QJluV0LwBrbHnYYwSKC+K8RGz0g/EyhpQH1IxdoFT0nM7PfgjE+aS8wxq/KFEsU0JkL7U/EEKd3O8xVBxXb2aA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.16.3: resolution: {integrity: sha512-TfoDzLw+QHfc4a8aKtGSQ96Wa+6eimljjkq9HKR0rHlU83vw8aldMOUSJTUDxbcUdcgnJzPaX8/vGWm7vyV7ug==} engines: {node: '>=12'} @@ -3178,15 +3121,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.18.10: - resolution: {integrity: sha512-Hi/ycUkS6KTw+U9G5PK5NoK7CZboicaKUSVs0FSiPNtuCTzK6HNM4DIgniH7hFaeuszDS9T4dhAHWiLSt/Y5Ng==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.16.3: resolution: {integrity: sha512-7I3RlsnxEFCHVZNBLb2w7unamgZ5sVwO0/ikE2GaYvYuUQs9Qte/w7TqWcXHtCwxvZx/2+F97ndiUQAWs47ZfQ==} engines: {node: '>=12'} @@ -3205,15 +3139,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.18.10: - resolution: {integrity: sha512-Nz6XcfRBOO7jSrVpKAyEyFOPGhySPNlgumSDhWAspdQQ11ub/7/NZDMhWDFReE9QH/SsCOCLQbdj0atAk/HMOQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.16.3: resolution: {integrity: sha512-VwswmSYwVAAq6LysV59Fyqk3UIjbhuc6wb3vEcJ7HEJUtFuLK9uXWuFoH1lulEbE4+5GjtHi3MHX+w1gNHdOWQ==} engines: {node: '>=12'} @@ -3232,15 +3157,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.18.10: - resolution: {integrity: sha512-HfFoxY172tVHPIvJy+FHxzB4l8xU7e5cxmNS11cQ2jt4JWAukn/7LXaPdZid41UyTweqa4P/1zs201gRGCTwHw==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.16.3: resolution: {integrity: sha512-X8FDDxM9cqda2rJE+iblQhIMYY49LfvW4kaEjoFbTTQ4Go8G96Smj2w3BRTwA8IHGoi9dPOPGAX63dhuv19UqA==} engines: {node: '>=12'} @@ -3259,15 +3175,6 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.18.10: - resolution: {integrity: sha512-otMdmSmkMe+pmiP/bZBjfphyAsTsngyT9RCYwoFzqrveAbux9nYitDTpdgToG0Z0U55+PnH654gCH2GQ1aB6Yw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.16.3: resolution: {integrity: sha512-hIbeejCOyO0X9ujfIIOKjBjNAs9XD/YdJ9JXAy1lHA+8UXuOqbFe4ErMCqMr8dhlMGBuvcQYGF7+kO7waj2KHw==} engines: {node: '>=12'} @@ -3286,15 +3193,6 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.18.10: - resolution: {integrity: sha512-t8tjFuON1koxskzQ4VFoh0T5UDUMiLYjwf9Wktd0tx8AoK6xgU+5ubKOpWpcnhEQ2tESS5u0v6QuN8PX/ftwcQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.16.3: resolution: {integrity: sha512-znFRzICT/V8VZQMt6rjb21MtAVJv/3dmKRMlohlShrbVXdBuOdDrGb+C2cZGQAR8RFyRe7HS6klmHq103WpmVw==} engines: {node: '>=12'} @@ -3313,15 +3211,6 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.18.10: - resolution: {integrity: sha512-+dUkcVzcfEJHz3HEnVpIJu8z8Wdn2n/nWMWdl6FVPFGJAVySO4g3+XPzNKFytVFwf8hPVDwYXzVcu8GMFqsqZw==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.16.3: resolution: {integrity: sha512-EV7LuEybxhXrVTDpbqWF2yehYRNz5e5p+u3oQUS2+ZFpknyi1NXxr8URk4ykR8Efm7iu04//4sBg249yNOwy5Q==} engines: {node: '>=12'} @@ -3340,15 +3229,6 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.18.10: - resolution: {integrity: sha512-sO3PjjxEGy+PY2qkGe2gwJbXdZN9wAYpVBZWFD0AwAoKuXRkWK0/zaMQ5ekUFJDRDCRm8x5U0Axaub7ynH/wVg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.16.3: resolution: {integrity: sha512-uDxqFOcLzFIJ+r/pkTTSE9lsCEaV/Y6rMlQjUI9BkzASEChYL/aSQjZjchtEmdnVxDKETnUAmsaZ4pqK1eE5BQ==} engines: {node: '>=12'} @@ -3367,15 +3247,6 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.18.10: - resolution: {integrity: sha512-JDtdbJg3yjDeXLv4lZYE1kiTnxv73/8cbPHY9T/dUKi8rYOM/k5b3W4UJLMUksuQ6nTm5c89W1nADsql6FW75A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.16.3: resolution: {integrity: sha512-NbeREhzSxYwFhnCAQOQZmajsPYtX71Ufej3IQ8W2Gxskfz9DK58ENEju4SbpIj48VenktRASC52N5Fhyf/aliQ==} engines: {node: '>=12'} @@ -3394,15 +3265,6 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.18.10: - resolution: {integrity: sha512-NLuSKcp8WckjD2a7z5kzLiCywFwBTMlIxDNuud1AUGVuwBBJSkuubp6cNjJ0p5c6CZaA3QqUGwjHJBiG1SoOFw==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.16.3: resolution: {integrity: sha512-SDiG0nCixYO9JgpehoKgScwic7vXXndfasjnD5DLbp1xltANzqZ425l7LSdHynt19UWOcDjG9wJJzSElsPvk0w==} engines: {node: '>=12'} @@ -3421,15 +3283,6 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.18.10: - resolution: {integrity: sha512-wj2KRsCsFusli+6yFgNO/zmmLslislAWryJnodteRmGej7ZzinIbMdsyp13rVGde88zxJd5vercNYK9kuvlZaQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.16.3: resolution: {integrity: sha512-AzbsJqiHEq1I/tUvOfAzCY15h4/7Ivp3ff/o1GpP16n48JMNAtbW0qui2WCgoIZArEHD0SUQ95gvR0oSO7ZbdA==} engines: {node: '>=12'} @@ -3448,15 +3301,6 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.18.10: - resolution: {integrity: sha512-pQ9QqxEPI3cVRZyUtCoZxhZK3If+7RzR8L2yz2+TDzdygofIPOJFaAPkEJ5rYIbUO101RaiYxfdOBahYexLk5A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.16.3: resolution: {integrity: sha512-gSABi8qHl8k3Cbi/4toAzHiykuBuWLZs43JomTcXkjMZVkp0gj3gg9mO+9HJW/8GB5H89RX/V0QP4JGL7YEEVg==} engines: {node: '>=12'} @@ -3475,15 +3319,6 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.18.10: - resolution: {integrity: sha512-k8GTIIW9I8pEEfoOUm32TpPMgSg06JhL5DO+ql66aLTkOQUs0TxCA67Wi7pv6z8iF8STCGcNbm3UWFHLuci+ag==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.16.3: resolution: {integrity: sha512-SF9Kch5Ete4reovvRO6yNjMxrvlfT0F0Flm+NPoUw5Z4Q3r1d23LFTgaLwm3Cp0iGbrU/MoUI+ZqwCv5XJijCw==} engines: {node: '>=12'} @@ -3502,15 +3337,6 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.18.10: - resolution: {integrity: sha512-vIGYJIdEI6d4JBucAx8py792G8J0GP40qSH+EvSt80A4zvGd6jph+5t1g+eEXcS2aRpgZw6CrssNCFZxTdEsxw==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.16.3: resolution: {integrity: sha512-u5aBonZIyGopAZyOnoPAA6fGsDeHByZ9CnEzyML9NqntK6D/xl5jteZUKm/p6nD09+v3pTM6TuUIqSPcChk5gg==} engines: {node: '>=12'} @@ -3529,15 +3355,6 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.18.10: - resolution: {integrity: sha512-kRhNcMZFGMW+ZHCarAM1ypr8OZs0k688ViUCetVCef9p3enFxzWeBg9h/575Y0nsFu0ZItluCVF5gMR2pwOEpA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.16.3: resolution: {integrity: sha512-GlgVq1WpvOEhNioh74TKelwla9KDuAaLZrdxuuUgsP2vayxeLgVc+rbpIv0IYF4+tlIzq2vRhofV+KGLD+37EQ==} engines: {node: '>=12'} @@ -3556,15 +3373,6 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.18.10: - resolution: {integrity: sha512-AR9PX1whYaYh9p0EOaKna0h48F/A101Mt/ag72+kMkkBZXPQ7cjbz2syXI/HI3OlBdUytSdHneljfjvUoqwqiQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.16.3: resolution: {integrity: sha512-5/JuTd8OWW8UzEtyf19fbrtMJENza+C9JoPIkvItgTBQ1FO2ZLvjbPO6Xs54vk0s5JB5QsfieUEshRQfu7ZHow==} engines: {node: '>=12'} @@ -3583,15 +3391,6 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.18.10: - resolution: {integrity: sha512-5sTkYhAGHNRr6bVf4RM0PsscqVr6/DBYdrlMh168oph3usid3lKHcHEEHmr34iZ9GHeeg2juFOxtpl6XyC3tpw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.39.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -6430,7 +6229,7 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.5.1 - '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@5.0.4) '@typescript-eslint/scope-manager': 5.59.2 '@typescript-eslint/type-utils': 5.59.2(eslint@8.39.0)(typescript@4.9.5) '@typescript-eslint/utils': 5.59.2(eslint@8.39.0)(typescript@4.9.5) @@ -7094,6 +6893,7 @@ packages: /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: false /anymatch@2.0.0(supports-color@6.1.0): resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} @@ -8159,16 +7959,6 @@ packages: run-applescript: 5.0.0 dev: true - /bundle-require@4.0.1(esbuild@0.18.10): - resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - esbuild: '>=0.17' - dependencies: - esbuild: 0.18.10 - load-tsconfig: 0.2.5 - dev: true - /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -8781,6 +8571,7 @@ packages: /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + dev: false /commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} @@ -10292,7 +10083,7 @@ packages: engines: {node: '>=12'} dev: true - /dts-cli@1.4.0(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(@types/node@17.0.23)(esbuild@0.18.10): + /dts-cli@1.4.0(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(@types/node@17.0.23): resolution: {integrity: sha512-bcjolZYKh51WPurWUayO85XaqccE26yWiAd5+JCZU8YFWAJgcp+UGFke3OwmJvo7WKX3e48FuvzFezUkd+eFSg==} engines: {node: '>=12.0.0'} hasBin: true @@ -10325,7 +10116,7 @@ packages: eslint: 8.39.0 eslint-config-prettier: 8.8.0(eslint@8.39.0) eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.39.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint@8.39.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@27.5.1)(typescript@4.9.5) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8) @@ -10356,7 +10147,7 @@ packages: shelljs: 0.8.5 sort-package-json: 1.57.0 tiny-glob: 0.2.9 - ts-jest: 27.1.5(@babel/core@7.21.8)(@types/jest@27.5.2)(esbuild@0.18.10)(jest@27.5.1)(typescript@4.9.5) + ts-jest: 27.1.5(@babel/core@7.21.8)(@types/jest@27.5.2)(jest@27.5.1)(typescript@4.9.5) ts-node: 10.9.1(@types/node@17.0.23)(typescript@4.9.5) tslib: 2.5.0 type-fest: 2.19.0 @@ -10688,36 +10479,6 @@ packages: '@esbuild/win32-x64': 0.17.6 dev: true - /esbuild@0.18.10: - resolution: {integrity: sha512-33WKo67auOXzZHBY/9DTJRo7kIvfU12S+D4sp2wIz39N88MDIaCGyCwbW01RR70pK6Iya0I74lHEpyLfFqOHPA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.10 - '@esbuild/android-arm64': 0.18.10 - '@esbuild/android-x64': 0.18.10 - '@esbuild/darwin-arm64': 0.18.10 - '@esbuild/darwin-x64': 0.18.10 - '@esbuild/freebsd-arm64': 0.18.10 - '@esbuild/freebsd-x64': 0.18.10 - '@esbuild/linux-arm': 0.18.10 - '@esbuild/linux-arm64': 0.18.10 - '@esbuild/linux-ia32': 0.18.10 - '@esbuild/linux-loong64': 0.18.10 - '@esbuild/linux-mips64el': 0.18.10 - '@esbuild/linux-ppc64': 0.18.10 - '@esbuild/linux-riscv64': 0.18.10 - '@esbuild/linux-s390x': 0.18.10 - '@esbuild/linux-x64': 0.18.10 - '@esbuild/netbsd-x64': 0.18.10 - '@esbuild/openbsd-x64': 0.18.10 - '@esbuild/sunos-x64': 0.18.10 - '@esbuild/win32-arm64': 0.18.10 - '@esbuild/win32-ia32': 0.18.10 - '@esbuild/win32-x64': 0.18.10 - dev: true - /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -10781,7 +10542,7 @@ packages: confusing-browser-globals: 1.0.11 eslint: 8.39.0 eslint-plugin-css-modules: 2.11.0(eslint@8.39.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint@8.39.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@29.5.0)(typescript@4.9.5) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8) @@ -10811,7 +10572,7 @@ packages: confusing-browser-globals: 1.0.11 eslint: 8.39.0 eslint-plugin-css-modules: 2.11.0(eslint@8.39.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint@8.39.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@27.5.1)(typescript@4.9.5) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8) @@ -10841,7 +10602,7 @@ packages: confusing-browser-globals: 1.0.11 eslint: 8.39.0 eslint-plugin-css-modules: 2.11.0(eslint@8.39.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint@8.39.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@29.5.0)(typescript@4.9.5) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8) @@ -10874,7 +10635,7 @@ packages: eslint: 8.39.0 eslint-import-resolver-node: 0.3.7 eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.39.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint@8.39.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) eslint-plugin-react: 7.32.2(eslint@8.39.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.39.0) @@ -10899,7 +10660,7 @@ packages: eslint: 8.39.0 eslint-import-resolver-node: 0.3.7 eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.39.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint@8.39.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) eslint-plugin-react: 7.32.2(eslint@8.39.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.39.0) @@ -10939,7 +10700,7 @@ packages: enhanced-resolve: 5.13.0 eslint: 8.39.0 eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint@8.39.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) get-tsconfig: 4.5.0 globby: 13.1.4 is-core-module: 2.12.0 @@ -10982,35 +10743,6 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-node@0.3.7)(eslint@8.39.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@4.9.5) - debug: 3.2.7(supports-color@6.1.0) - eslint: 8.39.0 - eslint-import-resolver-node: 0.3.7 - transitivePeerDependencies: - - supports-color - dev: true - /eslint-plugin-css-modules@2.11.0(eslint@8.39.0): resolution: {integrity: sha512-CLvQvJOMlCywZzaI4HVu7QH/ltgNXvCg7giJGiE+sA9wh5zQ+AqTgftAzrERV22wHe1p688wrU/Zwxt1Ry922w==} engines: {node: '>=4.0.0'} @@ -11052,7 +10784,7 @@ packages: string-natural-compare: 3.0.1 dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.2)(eslint@8.39.0): + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -11062,7 +10794,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@5.0.4) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 @@ -11070,7 +10802,7 @@ packages: doctrine: 2.1.0 eslint: 8.39.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-node@0.3.7)(eslint@8.39.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) has: 1.0.3 is-core-module: 2.12.0 is-glob: 4.0.3 @@ -12651,6 +12383,7 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 + dev: false /glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} @@ -15241,11 +14974,6 @@ packages: resolution: {integrity: sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==} dev: false - /joycon@3.1.1: - resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} - engines: {node: '>=10'} - dev: true - /jpjs@1.2.1: resolution: {integrity: sha512-GxJWybWU4NV0RNKi6EIqk6IRPOTqd/h+U7sbtyuD7yUISUzV78LdHnq2xkevJsTlz/EImux4sWj+wfMiwKLkiw==} dev: true @@ -15763,11 +15491,6 @@ packages: type-fest: 0.6.0 dev: true - /load-tsconfig@0.2.5: - resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - /loader-runner@2.4.0: resolution: {integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==} engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} @@ -15864,10 +15587,6 @@ packages: /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - /lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - dev: true - /lodash.throttle@4.1.1: resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} @@ -17467,6 +17186,7 @@ packages: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 + dev: false /nan@2.17.0: resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} @@ -21559,13 +21279,6 @@ packages: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} - /source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} - dependencies: - whatwg-url: 7.1.0 - dev: true - /sourcemap-codec@1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead @@ -22022,6 +21735,7 @@ packages: mz: 2.7.0 pirates: 4.0.5 ts-interface-checker: 0.1.13 + dev: false /sudo-prompt@8.2.5: resolution: {integrity: sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==} @@ -22374,11 +22088,13 @@ packages: engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 + dev: false /thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 + dev: false /throat@5.0.0: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} @@ -22521,12 +22237,6 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - /tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - dependencies: - punycode: 2.3.0 - dev: true - /tr46@2.1.0: resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} engines: {node: '>=8'} @@ -22545,11 +22255,6 @@ packages: resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} dev: false - /tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - dev: true - /treeverse@3.0.0: resolution: {integrity: sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -22574,8 +22279,9 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: false - /ts-jest@27.1.5(@babel/core@7.21.8)(@types/jest@27.5.2)(esbuild@0.18.10)(jest@27.5.1)(typescript@4.9.5): + /ts-jest@27.1.5(@babel/core@7.21.8)(@types/jest@27.5.2)(jest@27.5.1)(typescript@4.9.5): resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true @@ -22599,7 +22305,6 @@ packages: '@babel/core': 7.21.8 '@types/jest': 27.5.2 bs-logger: 0.2.6 - esbuild: 0.18.10 fast-json-stable-stringify: 2.1.0 jest: 27.5.1(ts-node@10.9.1) jest-util: 27.5.1 @@ -22611,7 +22316,7 @@ packages: yargs-parser: 20.2.9 dev: true - /ts-jest@29.1.0(@babel/core@7.22.5)(esbuild@0.18.10)(jest@29.5.0)(typescript@4.9.5): + /ts-jest@29.1.0(@babel/core@7.22.5)(jest@29.5.0)(typescript@4.9.5): resolution: {integrity: sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -22634,7 +22339,6 @@ packages: dependencies: '@babel/core': 7.22.5 bs-logger: 0.2.6 - esbuild: 0.18.10 fast-json-stable-stringify: 2.1.0 jest: 29.5.0(@types/node@17.0.23) jest-util: 29.5.0 @@ -22717,42 +22421,6 @@ packages: /tslib@2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - /tsup@7.1.0(typescript@4.9.5): - resolution: {integrity: sha512-mazl/GRAk70j8S43/AbSYXGgvRP54oQeX8Un4iZxzATHt0roW0t6HYDVZIXMw0ZQIpvr1nFMniIVnN5186lW7w==} - engines: {node: '>=16.14'} - hasBin: true - peerDependencies: - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: '>=4.1.0' - peerDependenciesMeta: - '@swc/core': - optional: true - postcss: - optional: true - typescript: - optional: true - dependencies: - bundle-require: 4.0.1(esbuild@0.18.10) - cac: 6.7.14 - chokidar: 3.5.3 - debug: 4.3.4(supports-color@6.1.0) - esbuild: 0.18.10 - execa: 5.1.1 - globby: 11.1.0 - joycon: 3.1.1 - postcss-load-config: 4.0.1(postcss@8.4.23) - resolve-from: 5.0.0 - rollup: 3.21.4 - source-map: 0.8.0-beta.0 - sucrase: 3.32.0 - tree-kill: 1.2.2 - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - - ts-node - dev: true - /tsutils@3.21.0(typescript@4.9.5): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -23666,10 +23334,6 @@ packages: /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - /webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - dev: true - /webidl-conversions@5.0.0: resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} engines: {node: '>=8'} @@ -23878,14 +23542,6 @@ packages: tr46: 0.0.3 webidl-conversions: 3.0.1 - /whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - dev: true - /whatwg-url@8.7.0: resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} engines: {node: '>=10'} From fd1587bfd08f893974d8de7d33e592b0506707af Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 30 Jun 2023 17:14:16 +0200 Subject: [PATCH 235/312] Fix types when importing from `next-intl/server` with `moduleResolution: "node16"` (#371) Fixes #347 Fixes #360 --- packages/next-intl/src/server/index.tsx | 1 + .../src/server/react-client/index.tsx | 39 +++++++++++++++---- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/packages/next-intl/src/server/index.tsx b/packages/next-intl/src/server/index.tsx index 4f2bb7034..d3dfc36e0 100644 --- a/packages/next-intl/src/server/index.tsx +++ b/packages/next-intl/src/server/index.tsx @@ -33,6 +33,7 @@ Importing \`createMiddleware\` from \`next-intl/server\` is deprecated. Please u }); } +// Must match `./react-client/index.tsx` export {default as getRequestConfig} from './getRequestConfig'; export {default as getIntl} from './getIntl'; export {default as getFormatter} from './getFormatter'; diff --git a/packages/next-intl/src/server/react-client/index.tsx b/packages/next-intl/src/server/react-client/index.tsx index c881bf684..1ea701971 100644 --- a/packages/next-intl/src/server/react-client/index.tsx +++ b/packages/next-intl/src/server/react-client/index.tsx @@ -1,14 +1,39 @@ +import type { + getRequestConfig as getRequestConfig_type, + getIntl as getIntl_type, + getFormatter as getFormatter_type, + getLocale as getLocale_type, + getNow as getNow_type, + getTimeZone as getTimeZone_type, + getTranslations as getTranslations_type, + getTranslator as getTranslator_type, + getMessages as getMessages_type +} from '..'; + function notSupported(name: string) { throw new Error(`\`${name}\` is not supported in Client Components.`); } -export const getRequestConfig = notSupported('getRequestConfig'); -export const getIntl = notSupported('getIntl'); -export const getFormatter = notSupported('getFormatter'); -export const getLocale = notSupported('getLocale'); -export const getNow = notSupported('getNow'); -export const getTimeZone = notSupported('getTimeZone'); -export const getTranslations = notSupported('getTranslations'); +// Must match `../index.tsx` + +// prettier-ignore +export const getRequestConfig = notSupported('getRequestConfig') as unknown as typeof getRequestConfig_type; +// prettier-ignore +export const getIntl = notSupported('getIntl') as unknown as typeof getIntl_type; +// prettier-ignore +export const getFormatter = notSupported('getFormatter') as unknown as typeof getFormatter_type; +// prettier-ignore +export const getLocale = notSupported('getLocale') as unknown as typeof getLocale_type; +// prettier-ignore +export const getNow = notSupported('getNow') as unknown as typeof getNow_type; +// prettier-ignore +export const getTimeZone = notSupported('getTimeZone') as unknown as typeof getTimeZone_type; +// prettier-ignore +export const getTranslations = notSupported('getTranslations') as unknown as typeof getTranslations_type; +// prettier-ignore +export const getTranslator = notSupported('getTranslator') as unknown as typeof getTranslator_type; +// prettier-ignore +export const getMessages = notSupported('getMessages') as unknown as typeof getMessages_type; // TODO: Since this is available in Client Comonents too, we should really // consider exporting this from `next-intl/navigation` instead. For now, for From 4e7766b37d8b13c69e00cf6dc58d5244c356ba60 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 3 Jul 2023 12:39:29 +0200 Subject: [PATCH 236/312] chore(Next.js 13 RSC): Switch to `tsup` for bundling and `vitest` for testing (#372) Related to #342 Packages can be validated with: - https://arethetypeswrong.github.io/ - https://github.com/bluwy/publint --- .../app-router-server-components.mdx | 2 +- packages/next-intl/.eslintrc.js | 3 +- packages/next-intl/client.d.ts | 2 +- packages/next-intl/link.d.ts | 2 +- packages/next-intl/middleware.d.ts | 2 +- packages/next-intl/package.json | 53 +- packages/next-intl/plugin.d.ts | 5 +- packages/next-intl/server.d.ts | 2 +- .../test/client/usePathname.test.tsx | 11 +- .../next-intl/test/client/useRouter.test.tsx | 15 +- packages/next-intl/test/link/Link.test.tsx | 13 +- .../getAlternateLinksHeaderValue.test.tsx | 1 + .../test/middleware/middleware.test.tsx | 21 +- packages/next-intl/test/setup.tsx | 4 + .../shared/NextIntlClientProvider.test.tsx | 3 +- packages/next-intl/test/shared/utils.test.tsx | 1 + packages/next-intl/tsup.config.js | 13 + packages/next-intl/vitest.config.ts | 8 + packages/use-intl/.eslintrc.js | 10 +- packages/use-intl/package.json | 20 +- packages/use-intl/src/core/IntlMessages.tsx | 5 - packages/use-intl/src/core/index.tsx | 10 +- .../test/core/createFormatter.test.tsx | 1 + .../use-intl/test/core/createIntl.test.tsx | 1 + .../test/core/createTranslator.test.tsx | 5 +- .../use-intl/test/react/useFormatter.test.tsx | 13 +- packages/use-intl/test/react/useIntl.test.tsx | 13 +- .../use-intl/test/react/useLocale.test.tsx | 1 + .../use-intl/test/react/useMessages.test.tsx | 1 + packages/use-intl/test/react/useNow.test.tsx | 1 + .../use-intl/test/react/useTimeZone.test.tsx | 1 + .../test/react/useTranslations.test.tsx | 66 +- packages/use-intl/test/setup.tsx | 4 + packages/use-intl/tsup.config.js | 24 + packages/use-intl/types/index.d.ts | 4 + packages/use-intl/vitest.config.ts | 8 + pnpm-lock.yaml | 1541 +++++++---------- 37 files changed, 886 insertions(+), 1004 deletions(-) create mode 100644 packages/next-intl/test/setup.tsx create mode 100644 packages/next-intl/tsup.config.js create mode 100644 packages/next-intl/vitest.config.ts delete mode 100644 packages/use-intl/src/core/IntlMessages.tsx create mode 100644 packages/use-intl/test/setup.tsx create mode 100644 packages/use-intl/tsup.config.js create mode 100644 packages/use-intl/vitest.config.ts diff --git a/docs/pages/docs/getting-started/app-router-server-components.mdx b/docs/pages/docs/getting-started/app-router-server-components.mdx index 0082c2753..e7d0e0ed4 100644 --- a/docs/pages/docs/getting-started/app-router-server-components.mdx +++ b/docs/pages/docs/getting-started/app-router-server-components.mdx @@ -13,7 +13,7 @@ Next.js 13 introduces support for [React Server Components](https://nextjs.org/d ## Current beta version ``` -npm install next-intl@3.0.0-beta.6 +npm install next-intl@3.0.0-beta.7 ``` This beta version was tested with `next@13.4.0`. diff --git a/packages/next-intl/.eslintrc.js b/packages/next-intl/.eslintrc.js index 8c14d5eb9..547539bff 100644 --- a/packages/next-intl/.eslintrc.js +++ b/packages/next-intl/.eslintrc.js @@ -7,7 +7,8 @@ module.exports = { { files: ['test/**/*.tsx'], rules: { - 'deprecation/deprecation': 'error' + 'deprecation/deprecation': 'error', + 'import/no-extraneous-dependencies': 'off' } } ] diff --git a/packages/next-intl/client.d.ts b/packages/next-intl/client.d.ts index 5d664cbda..896ba758b 100644 --- a/packages/next-intl/client.d.ts +++ b/packages/next-intl/client.d.ts @@ -1 +1 @@ -export * from './dist/src/client'; +export * from './dist/client'; diff --git a/packages/next-intl/link.d.ts b/packages/next-intl/link.d.ts index 1873b2531..1358b9b0b 100644 --- a/packages/next-intl/link.d.ts +++ b/packages/next-intl/link.d.ts @@ -1 +1 @@ -export {default} from './dist/src/link'; +export {default} from './dist/link'; diff --git a/packages/next-intl/middleware.d.ts b/packages/next-intl/middleware.d.ts index 26b85a5ef..6701c2ce3 100644 --- a/packages/next-intl/middleware.d.ts +++ b/packages/next-intl/middleware.d.ts @@ -1 +1 @@ -export {default} from './dist/src/middleware'; +export {default} from './dist/middleware'; diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 5db49ff7e..a6c697bb8 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -11,33 +11,49 @@ "url": "https://github.com/amannn/next-intl" }, "scripts": { - "build": "pnpm build:default && pnpm build:rsc", - "build:default": "rm -rf dist && dts build", - "build:rsc": "tsc && rm -rf dist/test", - "test": "TZ=Europe/Berlin dts test --testPathIgnorePatterns=dist", + "build": "tsup", + "test": "TZ=Europe/Berlin vitest", "lint": "eslint src test && tsc --noEmit", "prepublishOnly": "turbo test && turbo lint && turbo build && cp ../../README.md .", "postpublish": "git checkout . && rm ./README.md" }, "main": "dist/index.js", - "module": "dist/next-intl.esm.js", + "module": "dist/index.mjs", "typings": "dist/index.d.ts", "exports": { ".": { - "react-server": "./dist/src/react-server/index.js", + "react-server": { + "import": "./dist/react-server/index.mjs", + "default": "./dist/react-server/index.js" + }, + "import": "./dist/index.mjs", "default": "./dist/index.js" }, "./server": { - "react-server": "./dist/src/server/index.js", - "default": "./dist/src/server/react-client/index.js" + "react-server": { + "import": "./dist/server/index.mjs", + "default": "./dist/server/index.js" + }, + "import": "./dist/server/react-client/index.mjs", + "default": "./dist/server/react-client/index.js" + }, + "./client": { + "import": "./dist/client/index.mjs", + "default": "./dist/client/index.js" }, - "./client": "./dist/src/client/index.js", "./link": { - "react-server": "./dist/src/link/react-server/index.js", - "default": "./dist/src/link/index.js" + "react-server": { + "import": "./dist/link/react-server/index.mjs", + "default": "./dist/link/react-server/index.js" + }, + "import": "./dist/link/index.mjs", + "default": "./dist/link/index.js" }, "./config": "./config.js", - "./middleware": "./dist/src/middleware/index.js", + "./middleware": { + "import": "./dist/middleware/index.mjs", + "default": "./dist/middleware/index.js" + }, "./withNextIntl": "./withNextIntl.js", "./plugin": "./plugin.js" }, @@ -46,7 +62,7 @@ "src", "server.d.ts", "client.d.ts", - "link.d.ts", + "link.d.ts", "config.js", "middleware.d.ts", "withNextIntl.js", @@ -67,9 +83,6 @@ "next", "next.js" ], - "jest": { - "testEnvironment": "jsdom" - }, "dependencies": { "@formatjs/intl-localematcher": "^0.2.32", "negotiator": "^0.6.3", @@ -82,20 +95,18 @@ }, "devDependencies": { "@testing-library/react": "^13.0.0", - "@types/jest": "^29.5.1", "@types/negotiator": "^0.6.1", "@types/node": "^17.0.23", "@types/react": "^18.2.5", - "dts-cli": "^1.4.0", "eslint": "^8.39.0", "eslint-config-molindo": "^6.0.0", "eslint-plugin-deprecation": "^1.4.1", - "jest-environment-jsdom": "^27.0.0", "next": "^13.4.7", "react": "^18.2.0", "react-dom": "^18.2.0", - "ts-jest": "^29.1.0", - "typescript": "^4.9.5" + "tsup": "^7.1.0", + "typescript": "^4.9.5", + "vitest": "^0.32.2" }, "engines": { "node": ">=10" diff --git a/packages/next-intl/plugin.d.ts b/packages/next-intl/plugin.d.ts index 7483965dc..24571f050 100644 --- a/packages/next-intl/plugin.d.ts +++ b/packages/next-intl/plugin.d.ts @@ -1,3 +1,6 @@ import {NextConfig} from 'next'; -export default function withNextIntl(i18nPath?: string): ((config: NextConfig) => unknown); +function withNextIntl(i18nPath?: string): ((config: NextConfig) => unknown); + +// Currently only available via CJS +export = withNextIntl diff --git a/packages/next-intl/server.d.ts b/packages/next-intl/server.d.ts index b940dac21..699fd532a 100644 --- a/packages/next-intl/server.d.ts +++ b/packages/next-intl/server.d.ts @@ -1 +1 @@ -export * from './dist/src/server'; +export * from './dist/server'; diff --git a/packages/next-intl/test/client/usePathname.test.tsx b/packages/next-intl/test/client/usePathname.test.tsx index 617b6ac56..b1a042b19 100644 --- a/packages/next-intl/test/client/usePathname.test.tsx +++ b/packages/next-intl/test/client/usePathname.test.tsx @@ -1,14 +1,15 @@ import {render, screen} from '@testing-library/react'; import {usePathname as useNextPathname, useParams} from 'next/navigation'; import React from 'react'; +import {it, describe, vi, beforeEach, expect} from 'vitest'; import {NextIntlClientProvider} from '../../src'; import {usePathname} from '../../src/client'; -jest.mock('next/navigation'); +vi.mock('next/navigation'); function mockPathname(pathname: string) { - jest.mocked(useNextPathname).mockImplementation(() => pathname); - jest.mocked(useParams).mockImplementation(() => ({locale: 'en'})); + vi.mocked(useNextPathname).mockImplementation(() => pathname); + vi.mocked(useParams).mockImplementation(() => ({locale: 'en'})); } function Component() { @@ -45,8 +46,8 @@ describe('prefixed routing', () => { describe('usage outside of Next.js', () => { beforeEach(() => { - jest.mocked(useNextPathname).mockImplementation((() => null) as any); - jest.mocked(useParams).mockImplementation((() => null) as any); + vi.mocked(useNextPathname).mockImplementation((() => null) as any); + vi.mocked(useParams).mockImplementation((() => null) as any); }); it('returns `null` when used within a provider', () => { diff --git a/packages/next-intl/test/client/useRouter.test.tsx b/packages/next-intl/test/client/useRouter.test.tsx index 1683c11fe..6ec0bb871 100644 --- a/packages/next-intl/test/client/useRouter.test.tsx +++ b/packages/next-intl/test/client/useRouter.test.tsx @@ -2,16 +2,17 @@ import {render} from '@testing-library/react'; import {AppRouterInstance} from 'next/dist/shared/lib/app-router-context'; import {useRouter as useNextRouter} from 'next/navigation'; import React, {useEffect} from 'react'; +import {it, describe, vi, beforeEach, expect} from 'vitest'; import {useRouter} from '../../src/client'; -jest.mock('next/navigation', () => { +vi.mock('next/navigation', () => { const router: AppRouterInstance = { - push: jest.fn(), - replace: jest.fn(), - prefetch: jest.fn(), - back: jest.fn(), - forward: jest.fn(), - refresh: jest.fn() + push: vi.fn(), + replace: vi.fn(), + prefetch: vi.fn(), + back: vi.fn(), + forward: vi.fn(), + refresh: vi.fn() }; return { useRouter: () => router, diff --git a/packages/next-intl/test/link/Link.test.tsx b/packages/next-intl/test/link/Link.test.tsx index 44eaa3c65..d6330fd36 100644 --- a/packages/next-intl/test/link/Link.test.tsx +++ b/packages/next-intl/test/link/Link.test.tsx @@ -1,15 +1,16 @@ import {render, screen} from '@testing-library/react'; import {usePathname, useParams} from 'next/navigation'; import React from 'react'; +import {it, describe, vi, beforeEach, expect} from 'vitest'; import {NextIntlClientProvider} from '../../src'; import Link from '../../src/link'; -jest.mock('next/navigation'); +vi.mock('next/navigation'); describe('unprefixed routing', () => { beforeEach(() => { - jest.mocked(usePathname).mockImplementation(() => '/'); - jest.mocked(useParams).mockImplementation(() => ({locale: 'en'})); + vi.mocked(usePathname).mockImplementation(() => '/'); + vi.mocked(useParams).mockImplementation(() => ({locale: 'en'})); }); it('renders an href without a locale if the locale matches', () => { @@ -92,8 +93,8 @@ describe('unprefixed routing', () => { describe('prefixed routing', () => { beforeEach(() => { - jest.mocked(usePathname).mockImplementation(() => '/en'); - jest.mocked(useParams).mockImplementation(() => ({locale: 'en'})); + vi.mocked(usePathname).mockImplementation(() => '/en'); + vi.mocked(useParams).mockImplementation(() => ({locale: 'en'})); }); it('renders an href with a locale if the locale matches', () => { @@ -159,7 +160,7 @@ describe('prefixed routing', () => { describe('usage outside of Next.js', () => { beforeEach(() => { - jest.mocked(useParams).mockImplementation((() => null) as any); + vi.mocked(useParams).mockImplementation((() => null) as any); }); it('works with a provider', () => { diff --git a/packages/next-intl/test/middleware/getAlternateLinksHeaderValue.test.tsx b/packages/next-intl/test/middleware/getAlternateLinksHeaderValue.test.tsx index 10cdc8bee..cb3fc3406 100644 --- a/packages/next-intl/test/middleware/getAlternateLinksHeaderValue.test.tsx +++ b/packages/next-intl/test/middleware/getAlternateLinksHeaderValue.test.tsx @@ -1,4 +1,5 @@ import {NextRequest} from 'next/server'; +import {it, expect} from 'vitest'; import {MiddlewareConfigWithDefaults} from '../../src/middleware/NextIntlMiddlewareConfig'; import getAlternateLinksHeaderValue from '../../src/middleware/getAlternateLinksHeaderValue'; diff --git a/packages/next-intl/test/middleware/middleware.test.tsx b/packages/next-intl/test/middleware/middleware.test.tsx index dc00c3de0..471af70e9 100644 --- a/packages/next-intl/test/middleware/middleware.test.tsx +++ b/packages/next-intl/test/middleware/middleware.test.tsx @@ -1,5 +1,6 @@ import {RequestCookies} from 'next/dist/compiled/@edge-runtime/cookies'; import {NextRequest, NextResponse} from 'next/server'; +import {it, describe, vi, beforeEach, expect, Mock} from 'vitest'; import createIntlMiddleware from '../../src/middleware'; import {DomainConfig} from '../../src/middleware/NextIntlMiddlewareConfig'; import {COOKIE_LOCALE_NAME} from '../../src/shared/constants'; @@ -8,16 +9,16 @@ type MockResponse = NextResponse & { args: Array; }; -jest.mock('next/server', () => { +vi.mock('next/server', () => { const response = { headers: new Headers(), cookies: new RequestCookies(new Headers()) }; return { NextResponse: { - next: jest.fn(() => response), - rewrite: jest.fn(() => response), - redirect: jest.fn(() => response) + next: vi.fn(() => response), + rewrite: vi.fn(() => response), + redirect: vi.fn(() => response) } }; }); @@ -62,9 +63,9 @@ function createMockMiddleware( } const MockedNextResponse = NextResponse as unknown as { - next: jest.Mock; - rewrite: jest.Mock; - redirect: jest.Mock; + next: Mock>; + rewrite: Mock>; + redirect: Mock>; }; beforeEach(() => { @@ -195,7 +196,7 @@ describe('prefix-based routing', () => { }) ); expect( - MockedNextResponse.rewrite.mock.calls[0][1].request.headers.get( + MockedNextResponse.rewrite.mock.calls[0][1]?.request?.headers?.get( 'x-test' ) ).toBe('test'); @@ -208,7 +209,9 @@ describe('prefix-based routing', () => { }) ); expect( - MockedNextResponse.next.mock.calls[0][0].request.headers.get('x-test') + MockedNextResponse.next.mock.calls[0][0]?.request?.headers?.get( + 'x-test' + ) ).toBe('test'); }); }); diff --git a/packages/next-intl/test/setup.tsx b/packages/next-intl/test/setup.tsx new file mode 100644 index 000000000..09af614c2 --- /dev/null +++ b/packages/next-intl/test/setup.tsx @@ -0,0 +1,4 @@ +import {cleanup} from '@testing-library/react'; +import {afterEach} from 'vitest'; + +afterEach(cleanup); diff --git a/packages/next-intl/test/shared/NextIntlClientProvider.test.tsx b/packages/next-intl/test/shared/NextIntlClientProvider.test.tsx index 3ebc956da..e14321472 100644 --- a/packages/next-intl/test/shared/NextIntlClientProvider.test.tsx +++ b/packages/next-intl/test/shared/NextIntlClientProvider.test.tsx @@ -1,8 +1,9 @@ import {render, screen} from '@testing-library/react'; import React from 'react'; +import {it, vi} from 'vitest'; import {useTranslations, NextIntlClientProvider} from '../../src'; -jest.mock('next/router', () => ({ +vi.mock('next/router', () => ({ useRouter: () => ({locale: 'en'}) })); diff --git a/packages/next-intl/test/shared/utils.test.tsx b/packages/next-intl/test/shared/utils.test.tsx index 56cea5fd8..be777c42e 100644 --- a/packages/next-intl/test/shared/utils.test.tsx +++ b/packages/next-intl/test/shared/utils.test.tsx @@ -1,3 +1,4 @@ +import {it, describe, expect} from 'vitest'; import {hasPathnamePrefixed, unlocalizePathname} from '../../src/shared/utils'; describe('hasPathnamePrefixed', () => { diff --git a/packages/next-intl/tsup.config.js b/packages/next-intl/tsup.config.js new file mode 100644 index 000000000..d1a3a6102 --- /dev/null +++ b/packages/next-intl/tsup.config.js @@ -0,0 +1,13 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import {defineConfig} from 'tsup'; + +export default defineConfig({ + entry: ['src'], + format: ['esm', 'cjs'], + splitting: false, + sourcemap: true, + clean: true, + bundle: false, + dts: true, + minify: true +}); diff --git a/packages/next-intl/vitest.config.ts b/packages/next-intl/vitest.config.ts new file mode 100644 index 000000000..fa2763895 --- /dev/null +++ b/packages/next-intl/vitest.config.ts @@ -0,0 +1,8 @@ +import {defineConfig} from 'vitest/config' + +export default defineConfig({ + test: { + environment: 'jsdom', + setupFiles: './test/setup.tsx' + } +}); diff --git a/packages/use-intl/.eslintrc.js b/packages/use-intl/.eslintrc.js index 05fd65010..6deb07b09 100644 --- a/packages/use-intl/.eslintrc.js +++ b/packages/use-intl/.eslintrc.js @@ -1,5 +1,13 @@ require('eslint-config-molindo/setupPlugins'); module.exports = { - extends: ['molindo/typescript', 'molindo/react'] + extends: ['molindo/typescript', 'molindo/react'], + overrides: [ + { + files: ['test/**/*.{ts,tsx}'], + rules: { + 'import/no-extraneous-dependencies': 'off' + } + } + ] }; diff --git a/packages/use-intl/package.json b/packages/use-intl/package.json index 21cf43e52..d5d92c87d 100644 --- a/packages/use-intl/package.json +++ b/packages/use-intl/package.json @@ -11,20 +11,14 @@ "url": "https://github.com/amannn/next-intl/tree/main/packages/use-intl" }, "scripts": { - "start": "dts watch", - "build": "pnpm build:default && pnpm build:rsc", - "build:default": "rm -rf dist && dts build", - "build:rsc": "tsc && rm -rf dist/test", - "test": "TZ=Europe/Berlin dts test --testPathIgnorePatterns=dist", + "build": "tsup", + "test": "TZ=Europe/Berlin vitest", "lint": "eslint src test && tsc --noEmit", "prepublishOnly": "turbo test && turbo lint && turbo build" }, "main": "dist/index.js", - "module": "dist/use-intl.esm.js", + "module": "dist/index.mjs", "typings": "dist/index.d.ts", - "jest": { - "testEnvironment": "jsdom" - }, "files": [ "dist", "src" @@ -49,18 +43,16 @@ }, "devDependencies": { "@testing-library/react": "^13.0.0", - "@types/jest": "^29.5.1", "@types/node": "^17.0.23", "@types/react": "^18.2.5", "date-fns": "^2.16.1", - "dts-cli": "^1.4.0", "eslint": "^8.39.0", "eslint-config-molindo": "^6.0.0", - "jest-environment-jsdom": "^27.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "tslib": "^2.3.1", - "typescript": "^4.9.5" + "tsup": "^7.1.0", + "typescript": "^4.9.5", + "vitest": "^0.32.2" }, "engines": { "node": ">=10" diff --git a/packages/use-intl/src/core/IntlMessages.tsx b/packages/use-intl/src/core/IntlMessages.tsx deleted file mode 100644 index c1816a06e..000000000 --- a/packages/use-intl/src/core/IntlMessages.tsx +++ /dev/null @@ -1,5 +0,0 @@ -// This module is intended to be overridden -// by the consumer for optional type safety - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -declare interface IntlMessages extends Record {} diff --git a/packages/use-intl/src/core/index.tsx b/packages/use-intl/src/core/index.tsx index a0f670d42..6bbcecc8f 100644 --- a/packages/use-intl/src/core/index.tsx +++ b/packages/use-intl/src/core/index.tsx @@ -1,11 +1,11 @@ -export {default as AbstractIntlMessages} from './AbstractIntlMessages'; -export { +export type {default as AbstractIntlMessages} from './AbstractIntlMessages'; +export type { default as TranslationValues, RichTranslationValues } from './TranslationValues'; -export {default as Formats} from './Formats'; -export {default as DateTimeFormatOptions} from './DateTimeFormatOptions'; -export {default as NumberFormatOptions} from './NumberFormatOptions'; +export type {default as Formats} from './Formats'; +export type {default as DateTimeFormatOptions} from './DateTimeFormatOptions'; +export type {default as NumberFormatOptions} from './NumberFormatOptions'; export {default as IntlError, IntlErrorCode} from './IntlError'; export {default as createTranslator} from './createTranslator'; export {default as createFormatter} from './createFormatter'; diff --git a/packages/use-intl/test/core/createFormatter.test.tsx b/packages/use-intl/test/core/createFormatter.test.tsx index 197473149..05eafe6c5 100644 --- a/packages/use-intl/test/core/createFormatter.test.tsx +++ b/packages/use-intl/test/core/createFormatter.test.tsx @@ -1,4 +1,5 @@ import {parseISO} from 'date-fns'; +import {it, expect} from 'vitest'; import {createFormatter} from '../../src'; const formatter = createFormatter({locale: 'en'}); diff --git a/packages/use-intl/test/core/createIntl.test.tsx b/packages/use-intl/test/core/createIntl.test.tsx index 3c347eebd..3b982d4ef 100644 --- a/packages/use-intl/test/core/createIntl.test.tsx +++ b/packages/use-intl/test/core/createIntl.test.tsx @@ -1,4 +1,5 @@ import {parseISO} from 'date-fns'; +import {it, expect} from 'vitest'; import {createIntl} from '../../src'; const intl = createIntl({locale: 'en'}); diff --git a/packages/use-intl/test/core/createTranslator.test.tsx b/packages/use-intl/test/core/createTranslator.test.tsx index 9c0751f80..357048ed2 100644 --- a/packages/use-intl/test/core/createTranslator.test.tsx +++ b/packages/use-intl/test/core/createTranslator.test.tsx @@ -1,4 +1,5 @@ import React from 'react'; +import {it, expect, describe, vi} from 'vitest'; import {createTranslator, IntlError, IntlErrorCode} from '../../src'; const messages = { @@ -27,7 +28,7 @@ it('can translate a message without a namespace', () => { }); it('handles formatting errors', () => { - const onError = jest.fn(); + const onError = vi.fn(); const t = createTranslator({ locale: 'en', @@ -64,7 +65,7 @@ describe('t.rich', () => { }); it('handles errors when React components are provided', () => { - const onError = jest.fn(); + const onError = vi.fn(); const t = createTranslator({ locale: 'en', namespace: 'Home', diff --git a/packages/use-intl/test/react/useFormatter.test.tsx b/packages/use-intl/test/react/useFormatter.test.tsx index acdcf185a..24697938c 100644 --- a/packages/use-intl/test/react/useFormatter.test.tsx +++ b/packages/use-intl/test/react/useFormatter.test.tsx @@ -1,6 +1,7 @@ import {render, screen} from '@testing-library/react'; import {parseISO} from 'date-fns'; import React, {ComponentProps, ReactNode} from 'react'; +import {it, expect, describe, vi} from 'vitest'; import { DateTimeFormatOptions, NumberFormatOptions, @@ -143,7 +144,7 @@ describe('dateTime', () => { describe('error handling', () => { it('handles missing formats', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const format = useFormatter(); @@ -165,7 +166,7 @@ describe('dateTime', () => { }); it('handles formatting errors', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const format = useFormatter(); @@ -238,7 +239,7 @@ describe('number', () => { const mockNumber = 10000; it('handles missing formats', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const format = useFormatter(); @@ -260,7 +261,7 @@ describe('number', () => { }); it('handles formatting errors', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const format = useFormatter(); @@ -387,7 +388,7 @@ describe('relativeTime', () => { describe('error handling', () => { it('handles formatting errors', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const format = useFormatter(); @@ -411,7 +412,7 @@ describe('relativeTime', () => { }); it('throws when no `now` value is available', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const format = useFormatter(); diff --git a/packages/use-intl/test/react/useIntl.test.tsx b/packages/use-intl/test/react/useIntl.test.tsx index 1b8b9a27d..42120685e 100644 --- a/packages/use-intl/test/react/useIntl.test.tsx +++ b/packages/use-intl/test/react/useIntl.test.tsx @@ -1,6 +1,7 @@ import {render, screen} from '@testing-library/react'; import {parseISO} from 'date-fns'; import React, {ComponentProps, ReactNode} from 'react'; +import {it, expect, describe, vi} from 'vitest'; import { DateTimeFormatOptions, NumberFormatOptions, @@ -143,7 +144,7 @@ describe('formatDateTime', () => { describe('error handling', () => { it('handles missing formats', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const intl = useIntl(); @@ -165,7 +166,7 @@ describe('formatDateTime', () => { }); it('handles formatting errors', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const intl = useIntl(); @@ -233,7 +234,7 @@ describe('formatNumber', () => { const mockNumber = 10000; it('handles missing formats', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const intl = useIntl(); @@ -255,7 +256,7 @@ describe('formatNumber', () => { }); it('handles formatting errors', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const intl = useIntl(); @@ -382,7 +383,7 @@ describe('formatRelativeTime', () => { describe('error handling', () => { it('handles formatting errors', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const intl = useIntl(); @@ -406,7 +407,7 @@ describe('formatRelativeTime', () => { }); it('throws when no `now` value is available', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const intl = useIntl(); diff --git a/packages/use-intl/test/react/useLocale.test.tsx b/packages/use-intl/test/react/useLocale.test.tsx index 8781e41ef..cdc8286a0 100644 --- a/packages/use-intl/test/react/useLocale.test.tsx +++ b/packages/use-intl/test/react/useLocale.test.tsx @@ -1,5 +1,6 @@ import {render, screen} from '@testing-library/react'; import React from 'react'; +import {it} from 'vitest'; import {IntlProvider, useLocale} from '../../src'; it('returns the current locale', () => { diff --git a/packages/use-intl/test/react/useMessages.test.tsx b/packages/use-intl/test/react/useMessages.test.tsx index 8597f6a75..e12409a5a 100644 --- a/packages/use-intl/test/react/useMessages.test.tsx +++ b/packages/use-intl/test/react/useMessages.test.tsx @@ -1,5 +1,6 @@ import {render, screen} from '@testing-library/react'; import React from 'react'; +import {it, expect} from 'vitest'; import {IntlProvider, useMessages} from '../../src'; it('returns messages when they are configured', () => { diff --git a/packages/use-intl/test/react/useNow.test.tsx b/packages/use-intl/test/react/useNow.test.tsx index 2921d9249..e218cf485 100644 --- a/packages/use-intl/test/react/useNow.test.tsx +++ b/packages/use-intl/test/react/useNow.test.tsx @@ -1,6 +1,7 @@ import {render, waitFor} from '@testing-library/react'; import {parseISO} from 'date-fns'; import React from 'react'; +import {it, expect} from 'vitest'; import {IntlProvider, useNow} from '../../src'; it('returns the current time', () => { diff --git a/packages/use-intl/test/react/useTimeZone.test.tsx b/packages/use-intl/test/react/useTimeZone.test.tsx index 77d83791a..8a45c723f 100644 --- a/packages/use-intl/test/react/useTimeZone.test.tsx +++ b/packages/use-intl/test/react/useTimeZone.test.tsx @@ -1,5 +1,6 @@ import {render, screen} from '@testing-library/react'; import React from 'react'; +import {it, expect} from 'vitest'; import {IntlProvider, useTimeZone} from '../../src'; it('returns the time zone when it is configured', () => { diff --git a/packages/use-intl/test/react/useTranslations.test.tsx b/packages/use-intl/test/react/useTranslations.test.tsx index c76348a82..093f058d3 100644 --- a/packages/use-intl/test/react/useTranslations.test.tsx +++ b/packages/use-intl/test/react/useTranslations.test.tsx @@ -3,6 +3,7 @@ import {parseISO} from 'date-fns'; // eslint-disable-next-line import/no-named-as-default -- False positive import IntlMessageFormat from 'intl-messageformat'; import React, {ReactNode} from 'react'; +import {it, expect, vi, describe} from 'vitest'; import { Formats, IntlError, @@ -15,24 +16,27 @@ import { // Wrap the library to include a counter for parse // invocations for the cache test below. -jest.mock('intl-messageformat', () => { - const ActualIntlMessageFormat: typeof IntlMessageFormat = - jest.requireActual('intl-messageformat').default; - - return class MockIntlMessageFormat extends ActualIntlMessageFormat { - public static invocationsByMessage: Record = {}; - - constructor( - ...[message, ...rest]: ConstructorParameters - ) { - if (typeof message !== 'string') { - throw new Error('Unsupported invocation for testing.'); - } +vi.mock('intl-messageformat', async (importOriginal) => { + const ActualIntlMessageFormat: typeof IntlMessageFormat = ( + (await importOriginal()) as any + ).default; + + return { + default: class MockIntlMessageFormat extends ActualIntlMessageFormat { + public static invocationsByMessage: Record = {}; + + constructor( + ...[message, ...rest]: ConstructorParameters + ) { + if (typeof message !== 'string') { + throw new Error('Unsupported invocation for testing.'); + } - super(message, ...rest); + super(message, ...rest); - MockIntlMessageFormat.invocationsByMessage[message] ||= 0; - MockIntlMessageFormat.invocationsByMessage[message]++; + MockIntlMessageFormat.invocationsByMessage[message] ||= 0; + MockIntlMessageFormat.invocationsByMessage[message]++; + } } }; }); @@ -398,7 +402,7 @@ describe('t.rich', () => { }); it('supports identical wrappers with identical text content', () => { - const consoleError = jest.spyOn(console, 'error'); + const consoleError = vi.spyOn(console, 'error'); const {container} = renderRichTextMessage( 'foo bar foo foo bar foo foobar', { @@ -460,7 +464,7 @@ describe('t.raw', () => { }); it('renders a fallback for unknown messages', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const t = useTranslations(); @@ -480,7 +484,7 @@ describe('t.raw', () => { describe('error handling', () => { it('allows to configure a fallback', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const t = useTranslations('Component'); @@ -503,7 +507,7 @@ describe('error handling', () => { }); it('handles unavailable namespaces', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const t = useTranslations('Component'); @@ -525,7 +529,7 @@ describe('error handling', () => { }); it('handles unavailable messages within an existing namespace', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const t = useTranslations('Component'); @@ -547,7 +551,7 @@ describe('error handling', () => { }); it('handles unparseable messages', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const t = useTranslations(); @@ -573,7 +577,7 @@ describe('error handling', () => { }); it('handles formatting errors', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const t = useTranslations(); @@ -595,7 +599,7 @@ describe('error handling', () => { }); it('handles rich text being returned from the regular translation function', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const t = useTranslations(); @@ -622,7 +626,7 @@ describe('error handling', () => { }); it('allows null values for messages', () => { - const onError = jest.fn(); + const onError = vi.fn(); render( { }); it('can render without messages', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const t = useTranslations('Component'); @@ -663,7 +667,7 @@ describe('error handling', () => { }); it('warns for invalid namespace keys', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { return ( @@ -700,7 +704,7 @@ describe('error handling', () => { }); it('shows an error when trying to render an object with `t`', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const t = useTranslations('Component'); @@ -725,7 +729,7 @@ describe('error handling', () => { }); it('shows an error when trying to render an object with `t.rich`', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const t = useTranslations('Component'); @@ -750,7 +754,7 @@ describe('error handling', () => { }); it('shows an error when trying to render an array with `t`', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const t = useTranslations('Component'); @@ -776,7 +780,7 @@ describe('error handling', () => { }); it('shows an error when trying to render an array with `t.rich`', () => { - const onError = jest.fn(); + const onError = vi.fn(); function Component() { const t = useTranslations('Component'); diff --git a/packages/use-intl/test/setup.tsx b/packages/use-intl/test/setup.tsx new file mode 100644 index 000000000..09af614c2 --- /dev/null +++ b/packages/use-intl/test/setup.tsx @@ -0,0 +1,4 @@ +import {cleanup} from '@testing-library/react'; +import {afterEach} from 'vitest'; + +afterEach(cleanup); diff --git a/packages/use-intl/tsup.config.js b/packages/use-intl/tsup.config.js new file mode 100644 index 000000000..fbf5894b5 --- /dev/null +++ b/packages/use-intl/tsup.config.js @@ -0,0 +1,24 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import {defineConfig} from 'tsup'; + +const config = { + entry: ['src'], + format: ['esm', 'cjs'], + splitting: false, + sourcemap: true, + clean: true, + bundle: false, + dts: true, + minify: true +}; + +export default defineConfig([ + config, + + // TODO: Legacy build, remove with next major + { + ...config, + clean: false, + outDir: 'dist/src' + } +]); diff --git a/packages/use-intl/types/index.d.ts b/packages/use-intl/types/index.d.ts index 81a4ebae8..86a172bd1 100644 --- a/packages/use-intl/types/index.d.ts +++ b/packages/use-intl/types/index.d.ts @@ -1,3 +1,7 @@ +// This type is intended to be overridden +// by the consumer for optional type safety +declare interface IntlMessages extends Record {} + // Temporarly copied here until the "es2020.intl" lib is published. declare namespace Intl { diff --git a/packages/use-intl/vitest.config.ts b/packages/use-intl/vitest.config.ts new file mode 100644 index 000000000..fa2763895 --- /dev/null +++ b/packages/use-intl/vitest.config.ts @@ -0,0 +1,8 @@ +import {defineConfig} from 'vitest/config' + +export default defineConfig({ + test: { + environment: 'jsdom', + setupFiles: './test/setup.tsx' + } +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 733c521a9..93d611fee 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -169,7 +169,7 @@ importers: version: 13.4.0(eslint@8.39.0)(typescript@4.9.5) jest: specifier: ^27.4.5 - version: 27.5.1(ts-node@10.9.1) + version: 27.5.1 jest-environment-jsdom: specifier: ^27.0.0 version: 27.5.1 @@ -514,9 +514,6 @@ importers: '@testing-library/react': specifier: ^13.0.0 version: 13.0.0(react-dom@18.2.0)(react@18.2.0) - '@types/jest': - specifier: ^29.5.1 - version: 29.5.1 '@types/negotiator': specifier: ^0.6.1 version: 0.6.1 @@ -526,21 +523,15 @@ importers: '@types/react': specifier: ^18.2.5 version: 18.2.5 - dts-cli: - specifier: ^1.4.0 - version: 1.4.0(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(@types/node@17.0.23) eslint: specifier: ^8.39.0 version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0)(jest@29.5.0) + version: 6.0.0(eslint@8.39.0) eslint-plugin-deprecation: specifier: ^1.4.1 version: 1.4.1(eslint@8.39.0)(typescript@4.9.5) - jest-environment-jsdom: - specifier: ^27.0.0 - version: 27.5.1 next: specifier: ^13.4.7 version: 13.4.7(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0) @@ -550,12 +541,15 @@ importers: react-dom: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) - ts-jest: - specifier: ^29.1.0 - version: 29.1.0(@babel/core@7.22.5)(jest@29.5.0)(typescript@4.9.5) + tsup: + specifier: ^7.1.0 + version: 7.1.0(typescript@4.9.5) typescript: specifier: ^4.9.5 version: 4.9.5 + vitest: + specifier: ^0.32.2 + version: 0.32.2 packages/use-intl: dependencies: @@ -569,9 +563,6 @@ importers: '@testing-library/react': specifier: ^13.0.0 version: 13.0.0(react-dom@18.2.0)(react@18.2.0) - '@types/jest': - specifier: ^29.5.1 - version: 29.5.1 '@types/node': specifier: ^17.0.23 version: 17.0.23 @@ -581,30 +572,27 @@ importers: date-fns: specifier: ^2.16.1 version: 2.16.1 - dts-cli: - specifier: ^1.4.0 - version: 1.4.0(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(@types/node@17.0.23) eslint: specifier: ^8.39.0 version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0)(jest@27.5.1) - jest-environment-jsdom: - specifier: ^27.0.0 - version: 27.5.1 + version: 6.0.0(eslint@8.39.0) react: specifier: ^18.2.0 version: 18.2.0 react-dom: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) - tslib: - specifier: ^2.3.1 - version: 2.3.1 + tsup: + specifier: ^7.1.0 + version: 7.1.0(typescript@4.9.5) typescript: specifier: ^4.9.5 version: 4.9.5 + vitest: + specifier: ^0.32.2 + version: 0.32.2 packages: @@ -618,7 +606,7 @@ packages: /@babel/code-frame@7.10.4: resolution: {integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==} dependencies: - '@babel/highlight': 7.18.6 + '@babel/highlight': 7.22.5 dev: false /@babel/code-frame@7.21.4: @@ -738,6 +726,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 + dev: false /@babel/helper-builder-binary-assignment-operator-visitor@7.21.5: resolution: {integrity: sha512-uNrjKztPLkUk7bpCNC0jEKDJzzkvel/W+HguzbN8krA+LPfC1CEobJEvAvGka2A/M+ViOqXdcRL0GqPUJSjx9g==} @@ -994,6 +983,7 @@ packages: /@babel/helper-plugin-utils@7.22.5: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} + dev: false /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.21.8): resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} @@ -1512,16 +1502,6 @@ packages: '@babel/helper-plugin-utils': 7.21.5 dev: false - /@babel/plugin-syntax-flow@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.21.8): resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} engines: {node: '>=6.9.0'} @@ -1576,16 +1556,6 @@ packages: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.21.5 - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.8): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: @@ -2413,20 +2383,6 @@ packages: '@babel/types': 7.21.5 dev: false - /@babel/plugin-transform-react-jsx@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) - '@babel/types': 7.22.5 - dev: true - /@babel/plugin-transform-regenerator@7.21.5(@babel/core@7.21.8): resolution: {integrity: sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==} engines: {node: '>=6.9.0'} @@ -2974,13 +2930,6 @@ packages: resolution: {integrity: sha512-N8uEMrMPL0cu/bdboEWpQYb/0i2K5Qn8eCsxzOmxSggJbbQte7ljMRoXm917AbntqTGOzdTu+vP3KOOzoC70HQ==} dev: true - /@cspotcode/source-map-support@0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: true - /@emotion/hash@0.9.0: resolution: {integrity: sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==} dev: true @@ -3013,6 +2962,15 @@ packages: dev: true optional: true + /@esbuild/android-arm64@0.18.11: + resolution: {integrity: sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm@0.16.3: resolution: {integrity: sha512-mueuEoh+s1eRbSJqq9KNBQwI4QhQV6sRXIfTyLXSHGMpyew61rOK4qY21uKbXl1iBoMb0AdL1deWFCQVlN2qHA==} engines: {node: '>=12'} @@ -3031,6 +2989,15 @@ packages: dev: true optional: true + /@esbuild/android-arm@0.18.11: + resolution: {integrity: sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-x64@0.16.3: resolution: {integrity: sha512-SFpTUcIT1bIJuCCBMCQWq1bL2gPTjWoLZdjmIhjdcQHaUfV41OQfho6Ici5uvvkMmZRXIUGpM3GxysP/EU7ifQ==} engines: {node: '>=12'} @@ -3049,6 +3016,15 @@ packages: dev: true optional: true + /@esbuild/android-x64@0.18.11: + resolution: {integrity: sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-arm64@0.16.3: resolution: {integrity: sha512-DO8WykMyB+N9mIDfI/Hug70Dk1KipavlGAecxS3jDUwAbTpDXj0Lcwzw9svkhxfpCagDmpaTMgxWK8/C/XcXvw==} engines: {node: '>=12'} @@ -3067,6 +3043,15 @@ packages: dev: true optional: true + /@esbuild/darwin-arm64@0.18.11: + resolution: {integrity: sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-x64@0.16.3: resolution: {integrity: sha512-uEqZQ2omc6BvWqdCiyZ5+XmxuHEi1SPzpVxXCSSV2+Sh7sbXbpeNhHIeFrIpRjAs0lI1FmA1iIOxFozKBhKgRQ==} engines: {node: '>=12'} @@ -3085,6 +3070,15 @@ packages: dev: true optional: true + /@esbuild/darwin-x64@0.18.11: + resolution: {integrity: sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-arm64@0.16.3: resolution: {integrity: sha512-nJansp3sSXakNkOD5i5mIz2Is/HjzIhFs49b1tjrPrpCmwgBmH9SSzhC/Z1UqlkivqMYkhfPwMw1dGFUuwmXhw==} engines: {node: '>=12'} @@ -3103,6 +3097,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-arm64@0.18.11: + resolution: {integrity: sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-x64@0.16.3: resolution: {integrity: sha512-TfoDzLw+QHfc4a8aKtGSQ96Wa+6eimljjkq9HKR0rHlU83vw8aldMOUSJTUDxbcUdcgnJzPaX8/vGWm7vyV7ug==} engines: {node: '>=12'} @@ -3121,6 +3124,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-x64@0.18.11: + resolution: {integrity: sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm64@0.16.3: resolution: {integrity: sha512-7I3RlsnxEFCHVZNBLb2w7unamgZ5sVwO0/ikE2GaYvYuUQs9Qte/w7TqWcXHtCwxvZx/2+F97ndiUQAWs47ZfQ==} engines: {node: '>=12'} @@ -3139,6 +3151,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm64@0.18.11: + resolution: {integrity: sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm@0.16.3: resolution: {integrity: sha512-VwswmSYwVAAq6LysV59Fyqk3UIjbhuc6wb3vEcJ7HEJUtFuLK9uXWuFoH1lulEbE4+5GjtHi3MHX+w1gNHdOWQ==} engines: {node: '>=12'} @@ -3157,6 +3178,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm@0.18.11: + resolution: {integrity: sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ia32@0.16.3: resolution: {integrity: sha512-X8FDDxM9cqda2rJE+iblQhIMYY49LfvW4kaEjoFbTTQ4Go8G96Smj2w3BRTwA8IHGoi9dPOPGAX63dhuv19UqA==} engines: {node: '>=12'} @@ -3175,6 +3205,15 @@ packages: dev: true optional: true + /@esbuild/linux-ia32@0.18.11: + resolution: {integrity: sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64@0.16.3: resolution: {integrity: sha512-hIbeejCOyO0X9ujfIIOKjBjNAs9XD/YdJ9JXAy1lHA+8UXuOqbFe4ErMCqMr8dhlMGBuvcQYGF7+kO7waj2KHw==} engines: {node: '>=12'} @@ -3193,6 +3232,15 @@ packages: dev: true optional: true + /@esbuild/linux-loong64@0.18.11: + resolution: {integrity: sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-mips64el@0.16.3: resolution: {integrity: sha512-znFRzICT/V8VZQMt6rjb21MtAVJv/3dmKRMlohlShrbVXdBuOdDrGb+C2cZGQAR8RFyRe7HS6klmHq103WpmVw==} engines: {node: '>=12'} @@ -3211,6 +3259,15 @@ packages: dev: true optional: true + /@esbuild/linux-mips64el@0.18.11: + resolution: {integrity: sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ppc64@0.16.3: resolution: {integrity: sha512-EV7LuEybxhXrVTDpbqWF2yehYRNz5e5p+u3oQUS2+ZFpknyi1NXxr8URk4ykR8Efm7iu04//4sBg249yNOwy5Q==} engines: {node: '>=12'} @@ -3229,6 +3286,15 @@ packages: dev: true optional: true + /@esbuild/linux-ppc64@0.18.11: + resolution: {integrity: sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-riscv64@0.16.3: resolution: {integrity: sha512-uDxqFOcLzFIJ+r/pkTTSE9lsCEaV/Y6rMlQjUI9BkzASEChYL/aSQjZjchtEmdnVxDKETnUAmsaZ4pqK1eE5BQ==} engines: {node: '>=12'} @@ -3247,6 +3313,15 @@ packages: dev: true optional: true + /@esbuild/linux-riscv64@0.18.11: + resolution: {integrity: sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-s390x@0.16.3: resolution: {integrity: sha512-NbeREhzSxYwFhnCAQOQZmajsPYtX71Ufej3IQ8W2Gxskfz9DK58ENEju4SbpIj48VenktRASC52N5Fhyf/aliQ==} engines: {node: '>=12'} @@ -3265,6 +3340,15 @@ packages: dev: true optional: true + /@esbuild/linux-s390x@0.18.11: + resolution: {integrity: sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-x64@0.16.3: resolution: {integrity: sha512-SDiG0nCixYO9JgpehoKgScwic7vXXndfasjnD5DLbp1xltANzqZ425l7LSdHynt19UWOcDjG9wJJzSElsPvk0w==} engines: {node: '>=12'} @@ -3283,6 +3367,15 @@ packages: dev: true optional: true + /@esbuild/linux-x64@0.18.11: + resolution: {integrity: sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/netbsd-x64@0.16.3: resolution: {integrity: sha512-AzbsJqiHEq1I/tUvOfAzCY15h4/7Ivp3ff/o1GpP16n48JMNAtbW0qui2WCgoIZArEHD0SUQ95gvR0oSO7ZbdA==} engines: {node: '>=12'} @@ -3301,6 +3394,15 @@ packages: dev: true optional: true + /@esbuild/netbsd-x64@0.18.11: + resolution: {integrity: sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/openbsd-x64@0.16.3: resolution: {integrity: sha512-gSABi8qHl8k3Cbi/4toAzHiykuBuWLZs43JomTcXkjMZVkp0gj3gg9mO+9HJW/8GB5H89RX/V0QP4JGL7YEEVg==} engines: {node: '>=12'} @@ -3319,6 +3421,15 @@ packages: dev: true optional: true + /@esbuild/openbsd-x64@0.18.11: + resolution: {integrity: sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/sunos-x64@0.16.3: resolution: {integrity: sha512-SF9Kch5Ete4reovvRO6yNjMxrvlfT0F0Flm+NPoUw5Z4Q3r1d23LFTgaLwm3Cp0iGbrU/MoUI+ZqwCv5XJijCw==} engines: {node: '>=12'} @@ -3337,6 +3448,15 @@ packages: dev: true optional: true + /@esbuild/sunos-x64@0.18.11: + resolution: {integrity: sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-arm64@0.16.3: resolution: {integrity: sha512-u5aBonZIyGopAZyOnoPAA6fGsDeHByZ9CnEzyML9NqntK6D/xl5jteZUKm/p6nD09+v3pTM6TuUIqSPcChk5gg==} engines: {node: '>=12'} @@ -3355,6 +3475,15 @@ packages: dev: true optional: true + /@esbuild/win32-arm64@0.18.11: + resolution: {integrity: sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-ia32@0.16.3: resolution: {integrity: sha512-GlgVq1WpvOEhNioh74TKelwla9KDuAaLZrdxuuUgsP2vayxeLgVc+rbpIv0IYF4+tlIzq2vRhofV+KGLD+37EQ==} engines: {node: '>=12'} @@ -3373,6 +3502,15 @@ packages: dev: true optional: true + /@esbuild/win32-ia32@0.18.11: + resolution: {integrity: sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-x64@0.16.3: resolution: {integrity: sha512-5/JuTd8OWW8UzEtyf19fbrtMJENza+C9JoPIkvItgTBQ1FO2ZLvjbPO6Xs54vk0s5JB5QsfieUEshRQfu7ZHow==} engines: {node: '>=12'} @@ -3391,6 +3529,15 @@ packages: dev: true optional: true + /@esbuild/win32-x64@0.18.11: + resolution: {integrity: sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.39.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3940,7 +4087,7 @@ packages: slash: 3.0.0 dev: true - /@jest/core@27.5.1(ts-node@10.9.1): + /@jest/core@27.5.1: resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: @@ -3961,7 +4108,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 27.5.1 - jest-config: 27.5.1(ts-node@10.9.1) + jest-config: 27.5.1 jest-haste-map: 27.5.1 jest-message-util: 27.5.1 jest-regex-util: 27.5.1 @@ -4347,22 +4494,10 @@ packages: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} - dev: true - /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - /@jridgewell/source-map@0.3.3: - resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 - dev: true - /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} @@ -4375,13 +4510,6 @@ packages: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 - /@jridgewell/trace-mapping@0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /@lerna/child-process@6.6.2: resolution: {integrity: sha512-QyKIWEnKQFnYu2ey+SAAm1A5xjzJLJJj3bhIZd3QKyXKKjaJ0hlxam/OsWSltxTNbcyH1jRJjC6Cxv31usv0Ag==} engines: {node: ^14.17.0 || >=16.0.0} @@ -5647,106 +5775,27 @@ packages: dependencies: web-streams-polyfill: 3.2.1 - /@rollup/plugin-babel@5.3.1(@babel/core@7.21.8)(rollup@2.79.1): - resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} - engines: {node: '>= 10.0.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@types/babel__core': ^7.1.9 - rollup: ^1.20.0||^2.0.0 - peerDependenciesMeta: - '@types/babel__core': - optional: true - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-module-imports': 7.21.4 - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - rollup: 2.79.1 - dev: true - - /@rollup/plugin-commonjs@21.1.0(rollup@2.79.1): - resolution: {integrity: sha512-6ZtHx3VHIp2ReNNDxHjuUml6ur+WcQ28N1yHgCQwsbNkQg2suhxGMDQGJOn/KuDxKtd1xuZP5xSTwBA4GQ8hbA==} + /@rollup/pluginutils@4.2.1: + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^2.38.3 dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - commondir: 1.0.1 estree-walker: 2.0.2 - glob: 7.2.3 - is-reference: 1.2.1 - magic-string: 0.25.9 - resolve: 1.22.2 - rollup: 2.79.1 + picomatch: 2.3.1 dev: true - /@rollup/plugin-json@4.1.0(rollup@2.79.1): - resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==} - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - rollup: 2.79.1 + /@rushstack/eslint-patch@1.2.0: + resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==} dev: true - /@rollup/plugin-node-resolve@13.3.0(rollup@2.79.1): - resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==} - engines: {node: '>= 10.0.0'} - peerDependencies: - rollup: ^2.42.0 + /@segment/loosely-validate-event@2.0.0: + resolution: {integrity: sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==} dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - '@types/resolve': 1.17.1 - deepmerge: 4.3.1 - is-builtin-module: 3.2.1 - is-module: 1.0.0 - resolve: 1.22.2 - rollup: 2.79.1 - dev: true + component-type: 1.2.1 + join-component: 1.1.0 + dev: false - /@rollup/plugin-replace@3.1.0(rollup@2.79.1): - resolution: {integrity: sha512-pA3XRUrSKybVYqmH5TqWNZpGxF+VV+1GrYchKgCNIj2vsSOX7CVm2RCtx8p2nrC7xvkziYyK+lSi74T93MU3YA==} - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - magic-string: 0.25.9 - rollup: 2.79.1 - dev: true - - /@rollup/pluginutils@3.1.0(rollup@2.79.1): - resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - '@types/estree': 0.0.39 - estree-walker: 1.0.1 - picomatch: 2.3.1 - rollup: 2.79.1 - dev: true - - /@rollup/pluginutils@4.2.1: - resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} - engines: {node: '>= 8.0.0'} - dependencies: - estree-walker: 2.0.2 - picomatch: 2.3.1 - dev: true - - /@rushstack/eslint-patch@1.2.0: - resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==} - dev: true - - /@segment/loosely-validate-event@2.0.0: - resolution: {integrity: sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==} - dependencies: - component-type: 1.2.1 - join-component: 1.1.0 - dev: false - - /@sideway/address@4.1.4: - resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} + /@sideway/address@4.1.4: + resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} dependencies: '@hapi/hoek': 9.3.0 dev: false @@ -5870,22 +5919,6 @@ packages: engines: {node: '>= 10'} dev: true - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: true - - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true - - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true - - /@tsconfig/node16@1.0.3: - resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} - dev: true - /@tufjs/canonical-json@1.0.0: resolution: {integrity: sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -5950,6 +5983,16 @@ packages: '@types/responselike': 1.0.0 dev: true + /@types/chai-subset@1.3.3: + resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} + dependencies: + '@types/chai': 4.3.5 + dev: true + + /@types/chai@4.3.5: + resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==} + dev: true + /@types/cookie@0.4.1: resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} @@ -5969,10 +6012,6 @@ packages: dependencies: '@types/estree': 1.0.1 - /@types/estree@0.0.39: - resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - dev: true - /@types/estree@1.0.1: resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} @@ -6014,13 +6053,6 @@ packages: dependencies: '@types/istanbul-lib-report': 3.0.0 - /@types/jest@27.5.2: - resolution: {integrity: sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==} - dependencies: - jest-matcher-utils: 27.5.1 - pretty-format: 27.5.1 - dev: true - /@types/jest@29.5.1: resolution: {integrity: sha512-tEuVcHrpaixS36w7hpsfLBLpjtMRJUE09/MHXn923LOVojDwyC14cWcfc0rDs0VEfUyYmt/+iX1kxxp+gZMcaQ==} dependencies: @@ -6135,12 +6167,6 @@ packages: '@types/scheduler': 0.16.3 csstype: 3.1.2 - /@types/resolve@1.17.1: - resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} - dependencies: - '@types/node': 17.0.23 - dev: true - /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: @@ -6446,7 +6472,7 @@ packages: lodash: 4.17.21 mlly: 1.2.0 outdent: 0.8.0 - vite: 4.3.4 + vite: 4.3.4(@types/node@17.0.23) vite-node: 0.28.5 transitivePeerDependencies: - '@types/node' @@ -6466,6 +6492,45 @@ packages: resolution: {integrity: sha512-Ux0c9qUfkcPqng3vrR0GTrlQdqNJ2JREn/2ydrVuKwM3RtMfF2mWX31Ijqo1opSjNAq6rK76PwtANw6kl6TAow==} dev: false + /@vitest/expect@0.32.2: + resolution: {integrity: sha512-6q5yzweLnyEv5Zz1fqK5u5E83LU+gOMVBDuxBl2d2Jfx1BAp5M+rZgc5mlyqdnxquyoiOXpXmFNkcGcfFnFH3Q==} + dependencies: + '@vitest/spy': 0.32.2 + '@vitest/utils': 0.32.2 + chai: 4.3.7 + dev: true + + /@vitest/runner@0.32.2: + resolution: {integrity: sha512-06vEL0C1pomOEktGoLjzZw+1Fb+7RBRhmw/06WkDrd1akkT9i12su0ku+R/0QM69dfkIL/rAIDTG+CSuQVDcKw==} + dependencies: + '@vitest/utils': 0.32.2 + concordance: 5.0.4 + p-limit: 4.0.0 + pathe: 1.1.0 + dev: true + + /@vitest/snapshot@0.32.2: + resolution: {integrity: sha512-JwhpeH/PPc7GJX38vEfCy9LtRzf9F4er7i4OsAJyV7sjPwjj+AIR8cUgpMTWK4S3TiamzopcTyLsZDMuldoi5A==} + dependencies: + magic-string: 0.30.0 + pathe: 1.1.0 + pretty-format: 27.5.1 + dev: true + + /@vitest/spy@0.32.2: + resolution: {integrity: sha512-Q/ZNILJ4ca/VzQbRM8ur3Si5Sardsh1HofatG9wsJY1RfEaw0XKP8IVax2lI1qnrk9YPuG9LA2LkZ0EI/3d4ug==} + dependencies: + tinyspy: 2.1.1 + dev: true + + /@vitest/utils@0.32.2: + resolution: {integrity: sha512-lnJ0T5i03j0IJaeW73hxe2AuVnZ/y1BhhCOuIcl9LIzXnbpXJT9Lrt6brwKHXLOiA7MZ6N5hSJjt0xE1dGNCzQ==} + dependencies: + diff-sequences: 29.4.3 + loupe: 2.3.6 + pretty-format: 27.5.1 + dev: true + /@web3-storage/multipart-parser@1.0.0: resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==} @@ -6609,14 +6674,6 @@ packages: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: false - /@yarn-tool/resolve-package@1.0.47: - resolution: {integrity: sha512-Zaw58gQxjQceJqhqybJi1oUDaORT8i2GTgwICPs8v/X/Pkx35FXQba69ldHVg5pQZ6YLKpROXgyHvBaCJOFXiA==} - dependencies: - pkg-dir: 5.0.0 - tslib: 2.5.0 - upath2: 3.1.19 - dev: true - /@yarnpkg/lockfile@1.1.0: resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} dev: true @@ -6821,6 +6878,7 @@ packages: /ansi-escapes@3.2.0: resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} engines: {node: '>=4'} + dev: false /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} @@ -6847,11 +6905,6 @@ packages: engines: {node: '>=0.10.0'} dev: false - /ansi-regex@3.0.1: - resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} - engines: {node: '>=4'} - dev: true - /ansi-regex@4.1.1: resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} engines: {node: '>=6'} @@ -6893,7 +6946,6 @@ packages: /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: false /anymatch@2.0.0(supports-color@6.1.0): resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} @@ -6955,10 +7007,6 @@ packages: resolution: {integrity: sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==} dev: false - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true - /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -7116,6 +7164,10 @@ packages: util: 0.10.3 dev: false + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + /assign-symbols@1.0.0: resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} engines: {node: '>=0.10.0'} @@ -7175,10 +7227,6 @@ packages: /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - /asyncro@3.0.0: - resolution: {integrity: sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg==} - dev: true - /at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} @@ -7187,6 +7235,7 @@ packages: resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} engines: {node: '>= 4.5.0'} hasBin: true + dev: false /autoprefixer@10.4.0(postcss@8.4.23): resolution: {integrity: sha512-7FdJ1ONtwzV1G43GDD0kpVMn/qbiNqyOPMFTX5nRffI+7vgWoFEc6DcXOxHJxrWNDXrZh18eDsZjvZGUljSRGA==} @@ -7306,22 +7355,6 @@ packages: webpack: 4.43.0 dev: false - /babel-plugin-annotate-pure-calls@0.4.0(@babel/core@7.21.8): - resolution: {integrity: sha512-oi4M/PWUJOU9ZyRGoPTfPMqdyMp06jbJAomd3RcyYuzUtBOddv98BqLm96Lucpi2QFoQHkdGQt0ACvw7VzVEQA==} - peerDependencies: - '@babel/core': ^6.0.0-0 || 7.x - dependencies: - '@babel/core': 7.21.8 - dev: true - - /babel-plugin-dev-expression@0.2.3(@babel/core@7.21.8): - resolution: {integrity: sha512-rP5LK9QQTzCW61nVVzw88En1oK8t8gTsIeC6E61oelxNsU842yMjF0G1MxhvUpCkxCEIj7sE8/e5ieTheT//uw==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.21.8 - dev: true - /babel-plugin-istanbul@6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} @@ -7355,15 +7388,6 @@ packages: '@types/babel__traverse': 7.18.5 dev: true - /babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} - dependencies: - '@babel/runtime': 7.21.5 - cosmiconfig: 7.1.0 - resolve: 1.22.2 - dev: true - /babel-plugin-module-resolver@4.1.0: resolution: {integrity: sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==} engines: {node: '>= 8.0.0'} @@ -7423,17 +7447,6 @@ packages: - supports-color dev: false - /babel-plugin-polyfill-regenerator@0.3.1(@babel/core@7.21.8): - resolution: {integrity: sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.8) - transitivePeerDependencies: - - supports-color - dev: true - /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.21.8): resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} peerDependencies: @@ -7463,10 +7476,6 @@ packages: resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} dev: false - /babel-plugin-transform-rename-import@2.3.0: - resolution: {integrity: sha512-dPgJoT57XC0PqSnLgl2FwNvxFrWlspatX2dkk7yjKQj5HHGw071vAcOf+hqW8ClqcBDMvEbm6mevn5yHAD8mlQ==} - dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.21.8): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: @@ -7648,7 +7657,6 @@ packages: /blueimp-md5@2.19.0: resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} - dev: false /bn.js@4.12.0: resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} @@ -7875,13 +7883,6 @@ packages: node-releases: 2.0.12 update-browserslist-db: 1.0.11(browserslist@4.21.9) - /bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} - dependencies: - fast-json-stable-stringify: 2.1.0 - dev: true - /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: @@ -7959,6 +7960,16 @@ packages: run-applescript: 5.0.0 dev: true + /bundle-require@4.0.1(esbuild@0.18.11): + resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.17' + dependencies: + esbuild: 0.18.11 + load-tsconfig: 0.2.5 + dev: true + /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -8184,6 +8195,19 @@ packages: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} dev: false + /chai@4.3.7: + resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.2 + deep-eql: 4.1.3 + get-func-name: 2.0.0 + loupe: 2.3.6 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + /chalk@2.3.0: resolution: {integrity: sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==} engines: {node: '>=4'} @@ -8241,6 +8265,10 @@ packages: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} dev: false + /check-error@1.0.2: + resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} + dev: true + /chokidar-cli@3.0.0: resolution: {integrity: sha512-xVW+Qeh7z15uZRxHOkP93Ux8A0xbPzwK4GaqD8dQOYc34TlkqUhVSS59fK36DOp5WdJlrRzlYSy02Ht99FjZqQ==} engines: {node: '>= 8.10.0'} @@ -8361,6 +8389,7 @@ packages: engines: {node: '>=4'} dependencies: restore-cursor: 2.0.0 + dev: false /cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} @@ -8368,11 +8397,6 @@ packages: dependencies: restore-cursor: 3.1.0 - /cli-spinners@1.3.1: - resolution: {integrity: sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==} - engines: {node: '>=4'} - dev: true - /cli-spinners@2.6.1: resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==} engines: {node: '>=6'} @@ -8567,11 +8591,11 @@ packages: /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: false /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} - dev: false /commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} @@ -8594,6 +8618,7 @@ packages: /commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: false /compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} @@ -8661,6 +8686,20 @@ packages: typedarray: 0.0.6 dev: true + /concordance@5.0.4: + resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==} + engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'} + dependencies: + date-time: 3.1.0 + esutils: 2.0.3 + fast-diff: 1.2.0 + js-string-escape: 1.0.1 + lodash: 4.17.21 + md5-hex: 3.0.1 + semver: 7.5.0 + well-known-symbols: 2.0.0 + dev: true + /config-chain@1.1.12: resolution: {integrity: sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==} dependencies: @@ -8903,17 +8942,6 @@ packages: yaml: 1.10.2 dev: true - /cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} - dependencies: - '@types/parse-json': 4.0.0 - import-fresh: 3.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - dev: true - /create-ecdh@4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} dependencies: @@ -8949,10 +8977,6 @@ packages: object-assign: 4.1.1 dev: false - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true - /cross-fetch@3.1.5: resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} dependencies: @@ -9537,6 +9561,13 @@ packages: resolution: {integrity: sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ==} engines: {node: '>=0.11'} + /date-time@3.1.0: + resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} + engines: {node: '>=6'} + dependencies: + time-zone: 1.0.0 + dev: true + /dateformat@3.0.3: resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==} dev: true @@ -9613,6 +9644,7 @@ packages: /decode-uri-component@0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} + dev: false /decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} @@ -9625,6 +9657,13 @@ packages: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true + /deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 + dev: true + /deep-equal@1.1.1: resolution: {integrity: sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==} dependencies: @@ -9783,20 +9822,6 @@ packages: rimraf: 2.7.1 dev: false - /del@5.1.0: - resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==} - engines: {node: '>=8'} - dependencies: - globby: 10.0.2 - graceful-fs: 4.2.11 - is-glob: 4.0.3 - is-path-cwd: 2.2.0 - is-path-inside: 3.0.3 - p-map: 3.0.0 - rimraf: 3.0.2 - slash: 3.0.0 - dev: true - /del@6.1.1: resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} engines: {node: '>=10'} @@ -9910,11 +9935,6 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true - /diff@5.1.0: resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} engines: {node: '>=0.3.1'} @@ -10083,93 +10103,6 @@ packages: engines: {node: '>=12'} dev: true - /dts-cli@1.4.0(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(@types/node@17.0.23): - resolution: {integrity: sha512-bcjolZYKh51WPurWUayO85XaqccE26yWiAd5+JCZU8YFWAJgcp+UGFke3OwmJvo7WKX3e48FuvzFezUkd+eFSg==} - engines: {node: '>=12.0.0'} - hasBin: true - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-module-imports': 7.21.4 - '@babel/parser': 7.21.8 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.8) - '@babel/preset-env': 7.21.5(@babel/core@7.21.8) - '@babel/traverse': 7.21.5 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.21.8)(rollup@2.79.1) - '@rollup/plugin-commonjs': 21.1.0(rollup@2.79.1) - '@rollup/plugin-json': 4.1.0(rollup@2.79.1) - '@rollup/plugin-node-resolve': 13.3.0(rollup@2.79.1) - '@rollup/plugin-replace': 3.1.0(rollup@2.79.1) - '@types/jest': 27.5.2 - '@typescript-eslint/eslint-plugin': 5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.39.0)(typescript@4.9.5) - '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@4.9.5) - ansi-escapes: 4.3.2 - asyncro: 3.0.0 - babel-plugin-annotate-pure-calls: 0.4.0(@babel/core@7.21.8) - babel-plugin-dev-expression: 0.2.3(@babel/core@7.21.8) - babel-plugin-macros: 3.1.0 - babel-plugin-polyfill-regenerator: 0.3.1(@babel/core@7.21.8) - babel-plugin-transform-rename-import: 2.3.0 - camelcase: 6.3.0 - chalk: 4.1.2 - confusing-browser-globals: 1.0.11 - enquirer: 2.3.6 - eslint: 8.39.0 - eslint-config-prettier: 8.8.0(eslint@8.39.0) - eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.39.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) - eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@27.5.1)(typescript@4.9.5) - eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) - eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8) - eslint-plugin-react: 7.32.2(eslint@8.39.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.39.0) - eslint-plugin-testing-library: 5.10.3(eslint@8.39.0)(typescript@4.9.5) - execa: 4.1.0 - figlet: 1.6.0 - fs-extra: 10.1.0 - jest: 27.5.1(ts-node@10.9.1) - jest-watch-typeahead: 0.6.5(jest@27.5.1) - jpjs: 1.2.1 - lodash.merge: 4.6.2 - ora: 5.4.1 - pascal-case: 3.1.2 - postcss: 8.4.23 - prettier: 2.8.8 - progress-estimator: 0.3.1 - regenerator-runtime: 0.13.11 - rollup: 2.79.1 - rollup-plugin-delete: 2.0.0 - rollup-plugin-dts: 4.2.3(rollup@2.79.1)(typescript@4.9.5) - rollup-plugin-sourcemaps: 0.6.3(@types/node@17.0.23)(rollup@2.79.1) - rollup-plugin-terser: 7.0.2(rollup@2.79.1) - rollup-plugin-typescript2: 0.31.2(rollup@2.79.1)(typescript@4.9.5) - sade: 1.8.1 - semver: 7.5.0 - shelljs: 0.8.5 - sort-package-json: 1.57.0 - tiny-glob: 0.2.9 - ts-jest: 27.1.5(@babel/core@7.21.8)(@types/jest@27.5.2)(jest@27.5.1)(typescript@4.9.5) - ts-node: 10.9.1(@types/node@17.0.23)(typescript@4.9.5) - tslib: 2.5.0 - type-fest: 2.19.0 - typescript: 4.9.5 - transitivePeerDependencies: - - '@babel/plugin-syntax-flow' - - '@babel/plugin-transform-react-jsx' - - '@swc/core' - - '@swc/wasm' - - '@types/babel__core' - - '@types/node' - - babel-jest - - bufferutil - - canvas - - esbuild - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - node-notifier - - supports-color - - utf-8-validate - dev: true - /duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -10479,6 +10412,36 @@ packages: '@esbuild/win32-x64': 0.17.6 dev: true + /esbuild@0.18.11: + resolution: {integrity: sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.11 + '@esbuild/android-arm64': 0.18.11 + '@esbuild/android-x64': 0.18.11 + '@esbuild/darwin-arm64': 0.18.11 + '@esbuild/darwin-x64': 0.18.11 + '@esbuild/freebsd-arm64': 0.18.11 + '@esbuild/freebsd-x64': 0.18.11 + '@esbuild/linux-arm': 0.18.11 + '@esbuild/linux-arm64': 0.18.11 + '@esbuild/linux-ia32': 0.18.11 + '@esbuild/linux-loong64': 0.18.11 + '@esbuild/linux-mips64el': 0.18.11 + '@esbuild/linux-ppc64': 0.18.11 + '@esbuild/linux-riscv64': 0.18.11 + '@esbuild/linux-s390x': 0.18.11 + '@esbuild/linux-x64': 0.18.11 + '@esbuild/netbsd-x64': 0.18.11 + '@esbuild/openbsd-x64': 0.18.11 + '@esbuild/sunos-x64': 0.18.11 + '@esbuild/win32-arm64': 0.18.11 + '@esbuild/win32-ia32': 0.18.11 + '@esbuild/win32-x64': 0.18.11 + dev: true + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -10545,7 +10508,7 @@ packages: eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@29.5.0)(typescript@4.9.5) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) - eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8) + eslint-plugin-prettier: 4.2.1(eslint@8.39.0)(prettier@2.8.8) eslint-plugin-react: 7.32.2(eslint@8.39.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.39.0) eslint-plugin-sort-destructure-keys: 1.5.0(eslint@8.39.0) @@ -10575,7 +10538,7 @@ packages: eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@27.5.1)(typescript@4.9.5) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) - eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8) + eslint-plugin-prettier: 4.2.1(eslint@8.39.0)(prettier@2.8.8) eslint-plugin-react: 7.32.2(eslint@8.39.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.39.0) eslint-plugin-sort-destructure-keys: 1.5.0(eslint@8.39.0) @@ -10605,7 +10568,7 @@ packages: eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@29.5.0)(typescript@4.9.5) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) - eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8) + eslint-plugin-prettier: 4.2.1(eslint@8.39.0)(prettier@2.8.8) eslint-plugin-react: 7.32.2(eslint@8.39.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.39.0) eslint-plugin-sort-destructure-keys: 1.5.0(eslint@8.39.0) @@ -10670,15 +10633,6 @@ packages: - supports-color dev: true - /eslint-config-prettier@8.8.0(eslint@8.39.0): - resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - dependencies: - eslint: 8.39.0 - dev: true - /eslint-import-resolver-node@0.3.7: resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} dependencies: @@ -10769,21 +10723,6 @@ packages: - supports-color dev: true - /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.39.0): - resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@babel/plugin-syntax-flow': ^7.14.5 - '@babel/plugin-transform-react-jsx': ^7.14.9 - eslint: ^8.1.0 - dependencies: - '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.5) - eslint: 8.39.0 - lodash: 4.17.21 - string-natural-compare: 3.0.1 - dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} @@ -10833,7 +10772,7 @@ packages: '@typescript-eslint/eslint-plugin': 5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.39.0)(typescript@4.9.5) '@typescript-eslint/utils': 5.59.2(eslint@8.39.0)(typescript@4.9.5) eslint: 8.39.0 - jest: 27.5.1(ts-node@10.9.1) + jest: 27.5.1 transitivePeerDependencies: - supports-color - typescript @@ -10886,7 +10825,7 @@ packages: semver: 6.3.0 dev: true - /eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8): + /eslint-plugin-prettier@4.2.1(eslint@8.39.0)(prettier@2.8.8): resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -10898,7 +10837,6 @@ packages: optional: true dependencies: eslint: 8.39.0 - eslint-config-prettier: 8.8.0(eslint@8.39.0) prettier: 2.8.8 prettier-linter-helpers: 1.0.0 dev: true @@ -10946,19 +10884,6 @@ packages: natural-compare-lite: 1.4.0 dev: true - /eslint-plugin-testing-library@5.10.3(eslint@8.39.0)(typescript@4.9.5): - resolution: {integrity: sha512-0yhsKFsjHLud5PM+f2dWr9K3rqYzMy4cSHs3lcmFYMa1CdSzRvHGgXvsFarBjZ41gU8jhTdMIkg8jHLxGJqLqw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - dependencies: - '@typescript-eslint/utils': 5.59.2(eslint@8.39.0)(typescript@4.9.5) - eslint: 8.39.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - /eslint-plugin-unicorn@41.0.1(eslint@8.39.0): resolution: {integrity: sha512-gF5vo2dIj0YdNMQ/IMegiBkQdQ22GBFFVpdkJP+0og3w7XD4ypea0xQVRv6iofkLVR2w0phAdikcnU01ybd4Ow==} engines: {node: '>=12'} @@ -11153,10 +11078,6 @@ packages: resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} dev: true - /estree-walker@1.0.1: - resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} - dev: true - /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} dev: true @@ -11234,21 +11155,6 @@ packages: strip-eof: 1.0.0 dev: false - /execa@4.1.0: - resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 5.2.0 - human-signals: 1.1.1 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: true - /execa@5.0.0: resolution: {integrity: sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==} engines: {node: '>=10'} @@ -11682,12 +11588,6 @@ packages: resolution: {integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==} dev: false - /figlet@1.6.0: - resolution: {integrity: sha512-31EQGhCEITv6+hi2ORRPyn3bulaV9Fl4xOdR169cBzH/n1UqcxsiSB/noo6SJdD7Kfb1Ljit+IgR1USvF/XbdA==} - engines: {node: '>= 0.4.0'} - hasBin: true - dev: true - /figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -11808,6 +11708,7 @@ packages: commondir: 1.0.1 make-dir: 3.1.0 pkg-dir: 4.2.0 + dev: false /find-up@2.1.0: resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} @@ -12167,6 +12068,10 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + /get-func-name@2.0.0: + resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} + dev: true + /get-intrinsic@1.2.0: resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} dependencies: @@ -12383,7 +12288,6 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: false /glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} @@ -12460,10 +12364,6 @@ packages: dependencies: define-properties: 1.2.0 - /globalyzer@0.1.0: - resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - dev: true - /globby@10.0.0: resolution: {integrity: sha512-3LifW9M4joGZasyYPz2A1U74zbC/45fvpXUvO/9KbSa+VV0aGZarWkfdgKyR9sExNP0t0x0ss/UMJpNpcaTspw==} engines: {node: '>=8'} @@ -12478,20 +12378,6 @@ packages: slash: 3.0.0 dev: true - /globby@10.0.2: - resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} - engines: {node: '>=8'} - dependencies: - '@types/glob': 7.2.0 - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.2.12 - glob: 7.2.3 - ignore: 5.2.4 - merge2: 1.4.1 - slash: 3.0.0 - dev: true - /globby@11.0.1: resolution: {integrity: sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==} engines: {node: '>=10'} @@ -12537,10 +12423,6 @@ packages: pinkie-promise: 2.0.1 dev: false - /globrex@0.1.2: - resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - dev: true - /gonzales-pe@4.3.0: resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==} engines: {node: '>=0.6.0'} @@ -13118,11 +13000,6 @@ packages: transitivePeerDependencies: - supports-color - /human-signals@1.1.1: - resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} - engines: {node: '>=8.12.0'} - dev: true - /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -13133,10 +13010,6 @@ packages: engines: {node: '>=14.18.0'} dev: true - /humanize-duration@3.28.0: - resolution: {integrity: sha512-jMAxraOOmHuPbffLVDKkEKi/NeG8dMqP8lGRd6Tbf7JgAeG33jjgPWDbXXU7ypCI0o+oNKJFgbSB9FKVdWNI2A==} - dev: true - /humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} dependencies: @@ -13373,11 +13246,6 @@ packages: engines: {node: '>=12'} dev: false - /interpret@1.4.0: - resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} - engines: {node: '>= 0.10'} - dev: true - /intersection-observer@0.12.2: resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==} dev: false @@ -13697,10 +13565,6 @@ packages: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} dev: true - /is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: true - /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -13786,12 +13650,6 @@ packages: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true - /is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - dependencies: - '@types/estree': 1.0.1 - dev: true - /is-reference@3.0.1: resolution: {integrity: sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==} dependencies: @@ -14088,7 +13946,7 @@ packages: - supports-color dev: true - /jest-cli@27.5.1(ts-node@10.9.1): + /jest-cli@27.5.1: resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true @@ -14098,14 +13956,14 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 27.5.1(ts-node@10.9.1) + '@jest/core': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 27.5.1(ts-node@10.9.1) + jest-config: 27.5.1 jest-util: 27.5.1 jest-validate: 27.5.1 prompts: 2.4.2 @@ -14146,7 +14004,7 @@ packages: - ts-node dev: true - /jest-config@27.5.1(ts-node@10.9.1): + /jest-config@27.5.1: resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: @@ -14179,7 +14037,6 @@ packages: pretty-format: 27.5.1 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@17.0.23)(typescript@4.9.5) transitivePeerDependencies: - bufferutil - canvas @@ -14466,7 +14323,7 @@ packages: resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.5 '@jest/types': 27.5.1 '@types/stack-utils': 2.0.1 chalk: 4.1.2 @@ -14481,7 +14338,7 @@ packages: resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.5 '@jest/types': 29.5.0 '@types/stack-utils': 2.0.1 chalk: 4.1.2 @@ -14842,22 +14699,6 @@ packages: pretty-format: 29.5.0 dev: true - /jest-watch-typeahead@0.6.5(jest@27.5.1): - resolution: {integrity: sha512-GIbV6h37/isatMDtqZlA8Q5vC6T3w+5qdvtF+3LIkPc58zEWzbKmTHvlUIp3wvBm400RzrQWcVPcsAJqKWu7XQ==} - engines: {node: '>=10'} - peerDependencies: - jest: ^26.0.0 || ^27.0.0 - dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - jest: 27.5.1(ts-node@10.9.1) - jest-regex-util: 27.5.1 - jest-watcher: 27.5.1 - slash: 3.0.0 - string-length: 4.0.2 - strip-ansi: 6.0.1 - dev: true - /jest-watcher@27.5.1: resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -14892,6 +14733,7 @@ packages: '@types/node': 17.0.23 merge-stream: 2.0.0 supports-color: 7.2.0 + dev: false /jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} @@ -14911,7 +14753,7 @@ packages: supports-color: 8.1.1 dev: true - /jest@27.5.1(ts-node@10.9.1): + /jest@27.5.1: resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true @@ -14921,9 +14763,9 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 27.5.1(ts-node@10.9.1) + '@jest/core': 27.5.1 import-local: 3.1.0 - jest-cli: 27.5.1(ts-node@10.9.1) + jest-cli: 27.5.1 transitivePeerDependencies: - bufferutil - canvas @@ -14974,14 +14816,20 @@ packages: resolution: {integrity: sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==} dev: false - /jpjs@1.2.1: - resolution: {integrity: sha512-GxJWybWU4NV0RNKi6EIqk6IRPOTqd/h+U7sbtyuD7yUISUzV78LdHnq2xkevJsTlz/EImux4sWj+wfMiwKLkiw==} + /joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} dev: true /js-sdsl@4.4.0: resolution: {integrity: sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==} dev: true + /js-string-escape@1.0.1: + resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} + engines: {node: '>= 0.8'} + dev: true + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -15491,6 +15339,11 @@ packages: type-fest: 0.6.0 dev: true + /load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /loader-runner@2.4.0: resolution: {integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==} engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} @@ -15527,6 +15380,11 @@ packages: engines: {node: '>= 12.13.0'} dev: true + /local-pkg@0.4.3: + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + engines: {node: '>=14'} + dev: true + /locate-path@2.0.0: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} @@ -15583,10 +15441,15 @@ packages: /lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: false /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + /lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + dev: true + /lodash.throttle@4.1.1: resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} @@ -15611,15 +15474,6 @@ packages: chalk: 4.1.2 is-unicode-supported: 0.1.0 - /log-update@2.3.0: - resolution: {integrity: sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==} - engines: {node: '>=4'} - dependencies: - ansi-escapes: 3.2.0 - cli-cursor: 2.1.0 - wrap-ansi: 3.0.1 - dev: true - /logkitty@0.7.1: resolution: {integrity: sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==} hasBin: true @@ -15643,10 +15497,17 @@ packages: dependencies: js-tokens: 4.0.0 + /loupe@2.3.6: + resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} + dependencies: + get-func-name: 2.0.0 + dev: true + /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: tslib: 2.5.0 + dev: false /lowercase-keys@2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} @@ -15692,11 +15553,11 @@ packages: sourcemap-codec: 1.4.8 dev: true - /magic-string@0.26.7: - resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} + /magic-string@0.30.0: + resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} engines: {node: '>=12'} dependencies: - sourcemap-codec: 1.4.8 + '@jridgewell/sourcemap-codec': 1.4.15 dev: true /make-dir@2.1.0: @@ -15712,10 +15573,6 @@ packages: dependencies: semver: 6.3.0 - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true - /make-fetch-happen@10.2.1: resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -15814,6 +15671,13 @@ packages: buffer-alloc: 1.2.0 dev: false + /md5-hex@3.0.1: + resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} + engines: {node: '>=8'} + dependencies: + blueimp-md5: 2.19.0 + dev: true + /md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} dependencies: @@ -16854,6 +16718,7 @@ packages: /mimic-fn@1.2.0: resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} engines: {node: '>=4'} + dev: false /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} @@ -17186,7 +17051,6 @@ packages: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - dev: false /nan@2.17.0: resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} @@ -17443,6 +17307,7 @@ packages: dependencies: lower-case: 2.0.2 tslib: 2.5.0 + dev: false /nocache@3.0.4: resolution: {integrity: sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==} @@ -18073,6 +17938,7 @@ packages: engines: {node: '>=4'} dependencies: mimic-fn: 1.2.0 + dev: false /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} @@ -18248,6 +18114,13 @@ packages: dependencies: yocto-queue: 0.1.0 + /p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + yocto-queue: 1.0.0 + dev: true + /p-locate@2.0.0: resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} engines: {node: '>=4'} @@ -18283,13 +18156,6 @@ packages: engines: {node: '>=6'} dev: false - /p-map@3.0.0: - resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} - engines: {node: '>=8'} - dependencies: - aggregate-error: 3.1.0 - dev: true - /p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} @@ -18524,6 +18390,7 @@ packages: dependencies: no-case: 3.0.4 tslib: 2.5.0 + dev: false /pascalcase@0.1.1: resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} @@ -18565,12 +18432,6 @@ packages: resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} dev: false - /path-is-network-drive@1.0.20: - resolution: {integrity: sha512-p5wCWlRB4+ggzxWshqHH9aF3kAuVu295NaENXmVhThbZPJQBeJdxZTP6CIoUR+kWHDUW56S9YcaO1gXnc/BOxw==} - dependencies: - tslib: 2.5.0 - dev: true - /path-key@2.0.1: resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} engines: {node: '>=4'} @@ -18596,12 +18457,6 @@ packages: minipass: 5.0.0 dev: true - /path-strip-sep@1.0.17: - resolution: {integrity: sha512-+2zIC2fNgdilgV7pTrktY6oOxxZUo9x5zJYfTzxsGze5kSGDDwhA5/0WlBn+sUyv/WuuyYn3OfM+Ue5nhdQUgA==} - dependencies: - tslib: 2.5.0 - dev: true - /path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} @@ -18620,6 +18475,10 @@ packages: resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==} dev: true + /pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + /pbkdf2@3.1.2: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} engines: {node: '>=0.12'} @@ -18704,13 +18563,6 @@ packages: dependencies: find-up: 4.1.0 - /pkg-dir@5.0.0: - resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} - engines: {node: '>=10'} - dependencies: - find-up: 5.0.0 - dev: true - /pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: @@ -19477,15 +19329,6 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} - /progress-estimator@0.3.1: - resolution: {integrity: sha512-I5bwE35adOrA2rfZ9iHHPESUp5C6cXrZd0J8LdFD9J+66ijSugBwZHooPCROf94Ox8YZaUyvTLViqSiRvBhSoA==} - dependencies: - chalk: 2.4.2 - cli-spinners: 1.3.1 - humanize-duration: 3.28.0 - log-update: 2.3.0 - dev: true - /progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} @@ -19704,6 +19547,7 @@ packages: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 + dev: false /randomfill@1.0.4: resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} @@ -20147,13 +19991,6 @@ packages: tslib: 2.5.0 dev: true - /rechoir@0.6.2: - resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} - engines: {node: '>= 0.10'} - dependencies: - resolve: 1.22.2 - dev: true - /recursive-readdir@2.2.2: resolution: {integrity: sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==} engines: {node: '>=0.10.0'} @@ -20496,6 +20333,7 @@ packages: dependencies: onetime: 2.0.1 signal-exit: 3.0.7 + dev: false /restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} @@ -20577,27 +20415,6 @@ packages: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} dev: false - /rollup-plugin-delete@2.0.0: - resolution: {integrity: sha512-/VpLMtDy+8wwRlDANuYmDa9ss/knGsAgrDhM+tEwB1npHwNu4DYNmDfUL55csse/GHs9Q+SMT/rw9uiaZ3pnzA==} - engines: {node: '>=10'} - dependencies: - del: 5.1.0 - dev: true - - /rollup-plugin-dts@4.2.3(rollup@2.79.1)(typescript@4.9.5): - resolution: {integrity: sha512-jlcpItqM2efqfIiKzDB/IKOS9E9fDvbkJSGw5GtK/PqPGS9eC3R3JKyw2VvpTktZA+TNgJRMu1NTv244aTUzzQ==} - engines: {node: '>=v12.22.12'} - peerDependencies: - rollup: ^2.55 - typescript: ^4.1 - dependencies: - magic-string: 0.26.7 - rollup: 2.79.1 - typescript: 4.9.5 - optionalDependencies: - '@babel/code-frame': 7.22.5 - dev: true - /rollup-plugin-inject@3.0.2: resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. @@ -20613,65 +20430,12 @@ packages: rollup-plugin-inject: 3.0.2 dev: true - /rollup-plugin-sourcemaps@0.6.3(@types/node@17.0.23)(rollup@2.79.1): - resolution: {integrity: sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==} - engines: {node: '>=10.0.0'} - peerDependencies: - '@types/node': '>=10.0.0' - rollup: '>=0.31.2' - peerDependenciesMeta: - '@types/node': - optional: true - dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - '@types/node': 17.0.23 - rollup: 2.79.1 - source-map-resolve: 0.6.0 - dev: true - - /rollup-plugin-terser@7.0.2(rollup@2.79.1): - resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} - deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser - peerDependencies: - rollup: ^2.0.0 - dependencies: - '@babel/code-frame': 7.21.4 - jest-worker: 26.6.2 - rollup: 2.79.1 - serialize-javascript: 4.0.0 - terser: 5.17.1 - dev: true - - /rollup-plugin-typescript2@0.31.2(rollup@2.79.1)(typescript@4.9.5): - resolution: {integrity: sha512-hRwEYR1C8xDGVVMFJQdEVnNAeWRvpaY97g5mp3IeLnzhNXzSVq78Ye/BJ9PAaUfN4DXa/uDnqerifMOaMFY54Q==} - peerDependencies: - rollup: '>=1.26.3' - typescript: '>=2.4.0' - dependencies: - '@rollup/pluginutils': 4.2.1 - '@yarn-tool/resolve-package': 1.0.47 - find-cache-dir: 3.3.2 - fs-extra: 10.1.0 - resolve: 1.22.2 - rollup: 2.79.1 - tslib: 2.5.0 - typescript: 4.9.5 - dev: true - /rollup-pluginutils@2.8.2: resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} dependencies: estree-walker: 0.6.1 dev: true - /rollup@2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: true - /rollup@3.21.4: resolution: {integrity: sha512-N5LxpvDolOm9ueiCp4NfB80omMDqb45ShtsQw2+OT3f11uJ197dv703NZvznYHP6RWR85wfxanXurXKG3ux2GQ==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} @@ -20915,6 +20679,7 @@ packages: resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} dependencies: randombytes: 2.1.0 + dev: false /serve-index@1.9.1(supports-color@6.1.0): resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} @@ -21017,16 +20782,6 @@ packages: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} dev: false - /shelljs@0.8.5: - resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} - engines: {node: '>=4'} - hasBin: true - dependencies: - glob: 7.2.3 - interpret: 1.4.0 - rechoir: 0.6.2 - dev: true - /shiki@0.14.2: resolution: {integrity: sha512-ltSZlSLOuSY0M0Y75KA+ieRaZ0Trf5Wl3gutE7jzLuIcWxLp5i/uEnLoQWNvgKXQ5OMpGkJnVMRLAuzjc0LJ2A==} dependencies: @@ -21043,6 +20798,10 @@ packages: get-intrinsic: 1.2.0 object-inspect: 1.12.3 + /siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + dev: true + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -21240,14 +20999,6 @@ packages: urix: 0.1.0 dev: false - /source-map-resolve@0.6.0: - resolution: {integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==} - deprecated: See https://github.com/lydell/source-map-resolve#deprecated - dependencies: - atob: 2.1.2 - decode-uri-component: 0.2.2 - dev: true - /source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: @@ -21279,6 +21030,13 @@ packages: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} + /source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + dependencies: + whatwg-url: 7.1.0 + dev: true + /sourcemap-codec@1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead @@ -21394,6 +21152,10 @@ packages: escape-string-regexp: 2.0.0 dev: true + /stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + dev: true + /stackframe@1.3.4: resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} dev: false @@ -21422,6 +21184,10 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + /std-env@3.3.3: + resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} + dev: true + /stop-iteration-iterator@1.0.0: resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} engines: {node: '>= 0.4'} @@ -21480,18 +21246,6 @@ packages: strip-ansi: 6.0.1 dev: true - /string-natural-compare@3.0.1: - resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==} - dev: true - - /string-width@2.1.1: - resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} - engines: {node: '>=4'} - dependencies: - is-fullwidth-code-point: 2.0.0 - strip-ansi: 4.0.0 - dev: true - /string-width@3.1.0: resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} engines: {node: '>=6'} @@ -21579,13 +21333,6 @@ packages: ansi-regex: 2.1.1 dev: false - /strip-ansi@4.0.0: - resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} - engines: {node: '>=4'} - dependencies: - ansi-regex: 3.0.1 - dev: true - /strip-ansi@5.2.0: resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} engines: {node: '>=6'} @@ -21659,6 +21406,12 @@ packages: engines: {node: '>=8'} dev: true + /strip-literal@1.0.1: + resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} + dependencies: + acorn: 8.8.2 + dev: true + /strong-log-transformer@2.1.0: resolution: {integrity: sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==} engines: {node: '>=4'} @@ -21735,7 +21488,6 @@ packages: mz: 2.7.0 pirates: 4.0.5 ts-interface-checker: 0.1.13 - dev: false /sudo-prompt@8.2.5: resolution: {integrity: sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==} @@ -22055,17 +21807,6 @@ packages: source-map-support: 0.5.21 dev: false - /terser@5.17.1: - resolution: {integrity: sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==} - engines: {node: '>=10'} - hasBin: true - dependencies: - '@jridgewell/source-map': 0.3.3 - acorn: 8.8.2 - commander: 2.20.3 - source-map-support: 0.5.21 - dev: true - /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -22088,13 +21829,11 @@ packages: engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 - dev: false /thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 - dev: false /throat@5.0.0: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} @@ -22123,6 +21862,11 @@ packages: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} dev: false + /time-zone@1.0.0: + resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==} + engines: {node: '>=4'} + dev: true + /timers-browserify@2.0.12: resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} engines: {node: '>=0.6.0'} @@ -22134,11 +21878,18 @@ packages: resolution: {integrity: sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==} dev: false - /tiny-glob@0.2.9: - resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} - dependencies: - globalyzer: 0.1.0 - globrex: 0.1.2 + /tinybench@2.5.0: + resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==} + dev: true + + /tinypool@0.5.0: + resolution: {integrity: sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==} + engines: {node: '>=14.0.0'} + dev: true + + /tinyspy@2.1.1: + resolution: {integrity: sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==} + engines: {node: '>=14.0.0'} dev: true /title@3.5.3: @@ -22237,6 +21988,12 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + /tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + dependencies: + punycode: 2.3.0 + dev: true + /tr46@2.1.0: resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} engines: {node: '>=8'} @@ -22255,6 +22012,11 @@ packages: resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} dev: false + /tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + dev: true + /treeverse@3.0.0: resolution: {integrity: sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -22279,107 +22041,6 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: false - - /ts-jest@27.1.5(@babel/core@7.21.8)(@types/jest@27.5.2)(jest@27.5.1)(typescript@4.9.5): - resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@types/jest': ^27.0.0 - babel-jest: '>=27.0.0 <28' - esbuild: '*' - jest: ^27.0.0 - typescript: '>=3.8 <5.0' - peerDependenciesMeta: - '@babel/core': - optional: true - '@types/jest': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - dependencies: - '@babel/core': 7.21.8 - '@types/jest': 27.5.2 - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - jest: 27.5.1(ts-node@10.9.1) - jest-util: 27.5.1 - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.5.0 - typescript: 4.9.5 - yargs-parser: 20.2.9 - dev: true - - /ts-jest@29.1.0(@babel/core@7.22.5)(jest@29.5.0)(typescript@4.9.5): - resolution: {integrity: sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/types': ^29.0.0 - babel-jest: ^29.0.0 - esbuild: '*' - jest: ^29.0.0 - typescript: '>=4.3 <6' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - dependencies: - '@babel/core': 7.22.5 - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - jest: 29.5.0(@types/node@17.0.23) - jest-util: 29.5.0 - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.5.0 - typescript: 4.9.5 - yargs-parser: 21.1.1 - dev: true - - /ts-node@10.9.1(@types/node@17.0.23)(typescript@4.9.5): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.3 - '@types/node': 17.0.23 - acorn: 8.8.2 - acorn-walk: 8.2.0 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 4.9.5 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - dev: true /ts-pnp@1.2.0(typescript@4.9.5): resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} @@ -22417,10 +22078,47 @@ packages: /tslib@2.3.1: resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} + dev: false /tslib@2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + /tsup@7.1.0(typescript@4.9.5): + resolution: {integrity: sha512-mazl/GRAk70j8S43/AbSYXGgvRP54oQeX8Un4iZxzATHt0roW0t6HYDVZIXMw0ZQIpvr1nFMniIVnN5186lW7w==} + engines: {node: '>=16.14'} + hasBin: true + peerDependencies: + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.1.0' + peerDependenciesMeta: + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + dependencies: + bundle-require: 4.0.1(esbuild@0.18.11) + cac: 6.7.14 + chokidar: 3.5.3 + debug: 4.3.4(supports-color@6.1.0) + esbuild: 0.18.11 + execa: 5.1.1 + globby: 11.1.0 + joycon: 3.1.1 + postcss-load-config: 4.0.1(postcss@8.4.23) + resolve-from: 5.0.0 + rollup: 3.21.4 + source-map: 0.8.0-beta.0 + sucrase: 3.32.0 + tree-kill: 1.2.2 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + - ts-node + dev: true + /tsutils@3.21.0(typescript@4.9.5): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -22588,11 +22286,6 @@ packages: engines: {node: '>=10'} dev: false - /type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - dev: true - /type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -22881,15 +22574,6 @@ packages: engines: {node: '>=8'} dev: true - /upath2@3.1.19: - resolution: {integrity: sha512-d23dQLi8nDWSRTIQwXtaYqMrHuca0As53fNiTLLFDmsGBbepsZepISaB2H1x45bDFN/n3Qw9bydvyZEacTrEWQ==} - dependencies: - '@types/node': 17.0.23 - path-is-network-drive: 1.0.20 - path-strip-sep: 1.0.17 - tslib: 2.5.0 - dev: true - /upath@1.2.0: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} @@ -23070,10 +22754,6 @@ packages: kleur: 4.1.5 sade: 1.8.1 - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true - /v8-compile-cache@2.3.0: resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} dev: true @@ -23174,7 +22854,28 @@ packages: picocolors: 1.0.0 source-map: 0.6.1 source-map-support: 0.5.21 - vite: 4.3.4 + vite: 4.3.4(@types/node@17.0.23) + transitivePeerDependencies: + - '@types/node' + - less + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vite-node@0.32.2(@types/node@17.0.23): + resolution: {integrity: sha512-dTQ1DCLwl2aEseov7cfQ+kDMNJpM1ebpyMMMwWzBvLbis8Nla/6c9WQcqpPssTwS6Rp/+U6KwlIj8Eapw4bLdA==} + engines: {node: '>=v14.18.0'} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4(supports-color@6.1.0) + mlly: 1.2.0 + pathe: 1.1.0 + picocolors: 1.0.0 + vite: 4.3.4(@types/node@17.0.23) transitivePeerDependencies: - '@types/node' - less @@ -23185,7 +22886,7 @@ packages: - terser dev: true - /vite@4.3.4: + /vite@4.3.4(@types/node@17.0.23): resolution: {integrity: sha512-f90aqGBoxSFxWph2b39ae2uHAxm5jFBBdnfueNxZAT1FTpM13ccFQExCaKbR2xFW5atowjleRniQ7onjJ22QEg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -23210,6 +22911,7 @@ packages: terser: optional: true dependencies: + '@types/node': 17.0.23 esbuild: 0.17.6 postcss: 8.4.24 rollup: 3.21.4 @@ -23217,6 +22919,71 @@ packages: fsevents: 2.3.2 dev: true + /vitest@0.32.2: + resolution: {integrity: sha512-hU8GNNuQfwuQmqTLfiKcqEhZY72Zxb7nnN07koCUNmntNxbKQnVbeIS6sqUgR3eXSlbOpit8+/gr1KpqoMgWCQ==} + engines: {node: '>=v14.18.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + playwright: '*' + safaridriver: '*' + webdriverio: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + dependencies: + '@types/chai': 4.3.5 + '@types/chai-subset': 1.3.3 + '@types/node': 17.0.23 + '@vitest/expect': 0.32.2 + '@vitest/runner': 0.32.2 + '@vitest/snapshot': 0.32.2 + '@vitest/spy': 0.32.2 + '@vitest/utils': 0.32.2 + acorn: 8.8.2 + acorn-walk: 8.2.0 + cac: 6.7.14 + chai: 4.3.7 + concordance: 5.0.4 + debug: 4.3.4(supports-color@6.1.0) + local-pkg: 0.4.3 + magic-string: 0.30.0 + pathe: 1.1.0 + picocolors: 1.0.0 + std-env: 3.3.3 + strip-literal: 1.0.1 + tinybench: 2.5.0 + tinypool: 0.5.0 + vite: 4.3.4(@types/node@17.0.23) + vite-node: 0.32.2(@types/node@17.0.23) + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + /vlq@1.0.1: resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} dev: false @@ -23334,6 +23101,10 @@ packages: /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + /webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + dev: true + /webidl-conversions@5.0.0: resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} engines: {node: '>=8'} @@ -23502,6 +23273,11 @@ packages: engines: {node: '>=0.8.0'} dev: false + /well-known-symbols@2.0.0: + resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==} + engines: {node: '>=6'} + dev: true + /whatwg-encoding@1.0.5: resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} dependencies: @@ -23542,6 +23318,14 @@ packages: tr46: 0.0.3 webidl-conversions: 3.0.1 + /whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + dev: true + /whatwg-url@8.7.0: resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} engines: {node: '>=10'} @@ -23605,6 +23389,15 @@ packages: isexe: 2.0.0 dev: true + /why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + dev: true + /wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} dependencies: @@ -23636,14 +23429,6 @@ packages: microevent.ts: 0.1.1 dev: false - /wrap-ansi@3.0.1: - resolution: {integrity: sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==} - engines: {node: '>=4'} - dependencies: - string-width: 2.1.1 - strip-ansi: 4.0.0 - dev: true - /wrap-ansi@5.1.0: resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} engines: {node: '>=6'} @@ -23976,15 +23761,15 @@ packages: yargs-parser: 21.1.1 dev: true - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true - /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + /yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: true + /zod@3.21.4: resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} From 1d66aecd0dfbad737e91bb75435c263fb06a9ae4 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 4 Jul 2023 14:01:25 +0200 Subject: [PATCH 237/312] Update links to docs --- packages/next-intl/src/react-client/Link.tsx | 2 +- packages/next-intl/src/react-client/useLocalizedRouter.tsx | 2 +- packages/next-intl/src/react-server/Link.tsx | 2 +- packages/next-intl/src/server/getFormatter.tsx | 4 ++-- packages/next-intl/src/server/getIntl.tsx | 2 +- packages/next-intl/src/server/getLocale.tsx | 2 +- packages/next-intl/src/server/getLocaleFromHeader.tsx | 2 +- packages/next-intl/src/server/getNow.tsx | 4 ++-- packages/next-intl/src/server/getTimeZone.tsx | 4 ++-- packages/next-intl/src/server/getTranslations.tsx | 2 +- packages/next-intl/src/server/getTranslator.tsx | 2 +- 11 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/next-intl/src/react-client/Link.tsx b/packages/next-intl/src/react-client/Link.tsx index bca2f867a..053f9a725 100644 --- a/packages/next-intl/src/react-client/Link.tsx +++ b/packages/next-intl/src/react-client/Link.tsx @@ -15,7 +15,7 @@ export default function LinkDeprecated(props: ComponentProps) { Previously: import {Link} from 'next-intl'; Now: import Link from 'next-intl/link'; -Please upgrade your import accordingly. See also https://next-intl-docs.vercel.app/docs/next-13/navigation#link\n\n` +Please upgrade your import accordingly. See also https://next-intl-docs.vercel.app/docs/routing/navigation#link\n\n` ); hasWarned = true; } diff --git a/packages/next-intl/src/react-client/useLocalizedRouter.tsx b/packages/next-intl/src/react-client/useLocalizedRouter.tsx index a309650d3..d7fbea4ec 100644 --- a/packages/next-intl/src/react-client/useLocalizedRouter.tsx +++ b/packages/next-intl/src/react-client/useLocalizedRouter.tsx @@ -8,7 +8,7 @@ let hasWarned = false; export default function useLocalizedRouterDeprecated() { if (!hasWarned) { console.warn( - `\n\nDEPRECATION WARNING: The \`useLocalizedRouter\` import from \`next-intl\` is deprecated and will be removed in the stable release of next-intl. Please import \`useLocalizedRouter\` from \`next-intl/client\` instead. See https://next-intl-docs.vercel.app/docs/next-13/server-components\n\n` + `\n\nDEPRECATION WARNING: The \`useLocalizedRouter\` import from \`next-intl\` is deprecated and will be removed in the stable release of next-intl. Please import \`useLocalizedRouter\` from \`next-intl/client\` instead. See https://next-intl-docs.vercel.app/docs/getting-started/app-router-server-components\n\n` ); hasWarned = true; } diff --git a/packages/next-intl/src/react-server/Link.tsx b/packages/next-intl/src/react-server/Link.tsx index 23ee56c94..37d39306a 100644 --- a/packages/next-intl/src/react-server/Link.tsx +++ b/packages/next-intl/src/react-server/Link.tsx @@ -15,7 +15,7 @@ export default function LinkDeprecated(props: ComponentProps) { Previously: import {Link} from 'next-intl'; Now: import Link from 'next-intl/link'; -Please upgrade your import accordingly. See also https://next-intl-docs.vercel.app/docs/next-13/navigation#link\n\n` +Please upgrade your import accordingly. See also https://next-intl-docs.vercel.app/docs/routing/navigation#link\n\n` ); hasWarned = true; } diff --git a/packages/next-intl/src/server/getFormatter.tsx b/packages/next-intl/src/server/getFormatter.tsx index 2f85b638a..5d712ead7 100644 --- a/packages/next-intl/src/server/getFormatter.tsx +++ b/packages/next-intl/src/server/getFormatter.tsx @@ -27,7 +27,7 @@ getFormatter({locale: 'en'}); // Now getFormatter('en'); -See also https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components +See also https://next-intl-docs.vercel.app/docs/environments/metadata-route-handlers ` ); } @@ -47,7 +47,7 @@ export async function generateMetadata({params}) { // ... } -Learn more: https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components +Learn more: https://next-intl-docs.vercel.app/docs/environments/metadata-route-handlers `); } } diff --git a/packages/next-intl/src/server/getIntl.tsx b/packages/next-intl/src/server/getIntl.tsx index f2dbe2adc..c832fdd6e 100644 --- a/packages/next-intl/src/server/getIntl.tsx +++ b/packages/next-intl/src/server/getIntl.tsx @@ -13,7 +13,7 @@ const getIntl = cache(async () => { ` \`getIntl()\` is deprecated and will be removed in the next major version. Please switch to \`getFormatter()\`. -Learn more: https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components +Learn more: https://next-intl-docs.vercel.app/docs/environments/metadata-route-handlers ` ); } diff --git a/packages/next-intl/src/server/getLocale.tsx b/packages/next-intl/src/server/getLocale.tsx index bf87049d2..2fa97c65d 100644 --- a/packages/next-intl/src/server/getLocale.tsx +++ b/packages/next-intl/src/server/getLocale.tsx @@ -12,7 +12,7 @@ export async function generateMetadata({params}) { // Use \`params.locale\` here } -Learn more: https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components +Learn more: https://next-intl-docs.vercel.app/docs/environments/metadata-route-handlers `); hasWarned = true; } diff --git a/packages/next-intl/src/server/getLocaleFromHeader.tsx b/packages/next-intl/src/server/getLocaleFromHeader.tsx index 7ddeb78e0..68e00d261 100644 --- a/packages/next-intl/src/server/getLocaleFromHeader.tsx +++ b/packages/next-intl/src/server/getLocaleFromHeader.tsx @@ -20,7 +20,7 @@ const getLocaleFromHeader = cache(() => { (error as any).digest === 'DYNAMIC_SERVER_USAGE' ) { throw new Error( - 'Usage of next-intl APIs in Server Components is currently only available for dynamic rendering (i.e. no `generateStaticParams`).\n\nSupport for static rendering is under consideration, please refer to the roadmap: https://next-intl-docs.vercel.app/docs/next-13/server-components#roadmap', + 'Usage of next-intl APIs in Server Components is currently only available for dynamic rendering (i.e. no `generateStaticParams`).\n\nSupport for static rendering is under consideration, please refer to the roadmap: https://next-intl-docs.vercel.app/docs/getting-started/app-router-server-components#roadmap', {cause: error} ); } else { diff --git a/packages/next-intl/src/server/getNow.tsx b/packages/next-intl/src/server/getNow.tsx index 539888f77..be7c168e0 100644 --- a/packages/next-intl/src/server/getNow.tsx +++ b/packages/next-intl/src/server/getNow.tsx @@ -20,7 +20,7 @@ getNow({locale: 'en'}); // Now getNow('en'); -See also https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components +See also https://next-intl-docs.vercel.app/docs/environments/metadata-route-handlers ` ); } @@ -40,7 +40,7 @@ export async function generateMetadata({params}) { // ... } -Learn more: https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components +Learn more: https://next-intl-docs.vercel.app/docs/environments/metadata-route-handlers `); } } diff --git a/packages/next-intl/src/server/getTimeZone.tsx b/packages/next-intl/src/server/getTimeZone.tsx index 446bea3fa..3b2cd61a4 100644 --- a/packages/next-intl/src/server/getTimeZone.tsx +++ b/packages/next-intl/src/server/getTimeZone.tsx @@ -20,7 +20,7 @@ getTimeZone({locale: 'en'}); // Now getTimeZone('en'); -See also https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components +See also https://next-intl-docs.vercel.app/docs/environments/metadata-route-handlers ` ); } @@ -40,7 +40,7 @@ export async function generateMetadata({params}) { // ... } -Learn more: https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components +Learn more: https://next-intl-docs.vercel.app/docs/environments/metadata-route-handlers `); } } diff --git a/packages/next-intl/src/server/getTranslations.tsx b/packages/next-intl/src/server/getTranslations.tsx index 0a52432ea..776385c6a 100644 --- a/packages/next-intl/src/server/getTranslations.tsx +++ b/packages/next-intl/src/server/getTranslations.tsx @@ -87,7 +87,7 @@ Promise<{ console.warn(` \`getTranslations\` is deprecated, please switch to \`getTranslator\`. -Learn more: https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components +Learn more: https://next-intl-docs.vercel.app/docs/environments/metadata-route-handlers `); hasWarned = true; } diff --git a/packages/next-intl/src/server/getTranslator.tsx b/packages/next-intl/src/server/getTranslator.tsx index ec032d093..c42e9a2a1 100644 --- a/packages/next-intl/src/server/getTranslator.tsx +++ b/packages/next-intl/src/server/getTranslator.tsx @@ -103,7 +103,7 @@ getTranslator({locale: 'en', namespace: 'About'}); // Now getTranslator('en', 'About'); -See also https://next-intl-docs.vercel.app/docs/next-13/server-components#using-internationalization-outside-of-components +See also https://next-intl-docs.vercel.app/docs/environments/metadata-route-handlers ` ); hasWarned = true; From 7fa1424eac805cfa49e5ac19a472a28f1b2a3578 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 4 Jul 2023 18:26:12 +0200 Subject: [PATCH 238/312] Update lockfile --- pnpm-lock.yaml | 44 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5bb5efd61..642b49a6b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.1' +lockfileVersion: '6.0' settings: autoInstallPeers: true @@ -65,7 +65,7 @@ importers: version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0)(jest@29.5.0) + version: 6.0.0(eslint@8.39.0) eslint-config-next: specifier: ^13.4.0 version: 13.4.0(eslint@8.39.0)(typescript@5.0.4) @@ -111,7 +111,7 @@ importers: version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0)(jest@29.5.0) + version: 6.0.0(eslint@8.39.0) eslint-config-next: specifier: ^13.4.0 version: 13.4.0(eslint@8.39.0)(typescript@4.9.5) @@ -374,7 +374,7 @@ importers: version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0)(jest@29.5.0) + version: 6.0.0(eslint@8.39.0) eslint-config-next: specifier: ^13.4.0 version: 13.4.0(eslint@8.39.0)(typescript@4.9.5) @@ -491,7 +491,7 @@ importers: version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0)(jest@29.5.0) + version: 6.0.0(eslint@8.39.0) typescript: specifier: ^4.9.5 version: 4.9.5 @@ -528,7 +528,7 @@ importers: version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0)(jest@29.5.0) + version: 6.0.0(eslint@8.39.0) eslint-plugin-deprecation: specifier: ^1.4.1 version: 1.4.1(eslint@8.39.0)(typescript@4.9.5) @@ -577,7 +577,7 @@ importers: version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0)(jest@29.5.0) + version: 6.0.0(eslint@8.39.0) react: specifier: ^18.2.0 version: 18.2.0 @@ -10493,6 +10493,36 @@ packages: source-map: 0.6.1 dev: true + /eslint-config-molindo@6.0.0(eslint@8.39.0): + resolution: {integrity: sha512-kZ/SZBJIejZY45HVn9q0WSkF1mhvem+7FmxDF7mNfCepGEGrjID2mNlOuWAShBTidzpukMQ7qKhkjV5JVmO91w==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^8.0.0 + dependencies: + '@rushstack/eslint-patch': 1.2.0 + '@typescript-eslint/eslint-plugin': 5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.39.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@5.0.4) + confusing-browser-globals: 1.0.11 + eslint: 8.39.0 + eslint-plugin-css-modules: 2.11.0(eslint@8.39.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) + eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@29.5.0)(typescript@4.9.5) + eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) + eslint-plugin-prettier: 4.2.1(eslint@8.39.0)(prettier@2.8.8) + eslint-plugin-react: 7.32.2(eslint@8.39.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.39.0) + eslint-plugin-sort-destructure-keys: 1.5.0(eslint@8.39.0) + eslint-plugin-unicorn: 41.0.1(eslint@8.39.0) + prettier: 2.8.8 + typescript: 4.9.5 + transitivePeerDependencies: + - eslint-config-prettier + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - jest + - supports-color + dev: true + /eslint-config-molindo@6.0.0(eslint@8.39.0)(jest@27.5.1): resolution: {integrity: sha512-kZ/SZBJIejZY45HVn9q0WSkF1mhvem+7FmxDF7mNfCepGEGrjID2mNlOuWAShBTidzpukMQ7qKhkjV5JVmO91w==} engines: {node: '>=10'} From 41900d7007c40d2b8e40a4cd4d5c7ab55e25527d Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 7 Jul 2023 12:05:01 +0200 Subject: [PATCH 239/312] chore: Rebase RSC on `main` (#385) Extracted to https://github.com/amannn/next-intl/pull/386, should be merged to RSC later as well. --- .github/workflows/main.yml | 1 + CHANGELOG.md | 22 + lerna.json | 2 +- package.json | 1 + packages/next-intl/CHANGELOG.md | 22 + packages/next-intl/middleware.d.ts | 4 +- packages/next-intl/package.json | 46 +- packages/next-intl/tsup.config.js | 13 - packages/use-intl/CHANGELOG.md | 22 + packages/use-intl/package.json | 24 +- packages/use-intl/tsup.config.js | 24 - pnpm-lock.yaml | 3618 ++++++++++++++++++++-------- turbo.json | 3 + 13 files changed, 2768 insertions(+), 1034 deletions(-) delete mode 100644 packages/next-intl/tsup.config.js delete mode 100644 packages/use-intl/tsup.config.js diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 127d96bd0..7904cd783 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -37,3 +37,4 @@ jobs: - run: pnpm run build - run: pnpm run lint - run: pnpm run test + - run: pnpm run size diff --git a/CHANGELOG.md b/CHANGELOG.md index 03fa942c9..84ba84c90 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,28 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 2.17.5 (2023-07-07) + + +### Bug Fixes + +* Use ESM build only for browser bundlers (not Node.js) ([#386](https://github.com/amannn/next-intl/issues/386)) ([34a69f2](https://github.com/amannn/next-intl/commit/34a69f29cf07032c8a02aaf2b94e7e60d3f35088)) + + + + + +## 2.17.4 (2023-07-05) + + +### Bug Fixes + +* Bring back ESM build (and fix bundle size) ([#381](https://github.com/amannn/next-intl/issues/381)) ([4d0fefc](https://github.com/amannn/next-intl/commit/4d0fefcb558bcee6037dce7bd8cebe727257c8ca)) + + + + + ## 2.17.3 (2023-07-05) diff --git a/lerna.json b/lerna.json index 2276da81c..2d231d81d 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "2.17.3", + "version": "2.17.5", "packages": [ "packages/*" ], diff --git a/package.json b/package.json index 0d70cdf49..70bfce9f2 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "test": "turbo run test --concurrency 1", "lint": "turbo run lint", "prepare": "turbo run build --filter './packages/**'", + "size": "turbo run size", "publish": "lerna publish --yes --no-private" }, "devDependencies": { diff --git a/packages/next-intl/CHANGELOG.md b/packages/next-intl/CHANGELOG.md index 358ce391e..582ece355 100644 --- a/packages/next-intl/CHANGELOG.md +++ b/packages/next-intl/CHANGELOG.md @@ -3,6 +3,28 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 2.17.5 (2023-07-07) + + +### Bug Fixes + +* Use ESM build only for browser bundlers (not Node.js) ([#386](https://github.com/amannn/next-intl/issues/386)) ([34a69f2](https://github.com/amannn/next-intl/commit/34a69f29cf07032c8a02aaf2b94e7e60d3f35088)) + + + + + +## 2.17.4 (2023-07-05) + + +### Bug Fixes + +* Bring back ESM build (and fix bundle size) ([#381](https://github.com/amannn/next-intl/issues/381)) ([4d0fefc](https://github.com/amannn/next-intl/commit/4d0fefcb558bcee6037dce7bd8cebe727257c8ca)) + + + + + ## 2.17.3 (2023-07-05) diff --git a/packages/next-intl/middleware.d.ts b/packages/next-intl/middleware.d.ts index 2fb54b2e2..0b95aa6d8 100644 --- a/packages/next-intl/middleware.d.ts +++ b/packages/next-intl/middleware.d.ts @@ -1,3 +1,3 @@ -import Middleware from './dist/middleware'; +import createMiddleware from './dist/middleware'; -export = Middleware; +export = createMiddleware; diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index fec9f61d2..e2cb9cd55 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -1,6 +1,6 @@ { "name": "next-intl", - "version": "2.17.3", + "version": "2.17.5", "sideEffects": false, "author": "Jan Amann ", "description": "A minimal, but complete solution for internationalization in Next.js apps.", @@ -11,41 +11,39 @@ "url": "https://github.com/amannn/next-intl" }, "scripts": { - "build": "tsup", + "build": "pnpm build:default && pnpm build:rsc", + "build:default": "rm -rf dist && dts build", + "build:rsc": "tsc && rm -rf dist/test", "test": "TZ=Europe/Berlin vitest", "lint": "eslint src test && tsc --noEmit", "prepublishOnly": "CI=true turbo test && turbo lint && turbo build && cp ../../README.md .", - "postpublish": "git checkout . && rm ./README.md" + "postpublish": "git checkout . && rm ./README.md", + "size": "size-limit" }, "main": "dist/index.js", + "module": "dist/next-intl.esm.js", "typings": "dist/index.d.ts", "exports": { ".": { - "react-server": { - "default": "./dist/react-server/index.js" - }, + "react-server": "./dist/src/react-server/index.js", "default": "./dist/index.js" }, "./server": { - "react-server": { - "default": "./dist/server/index.js" - }, - "default": "./dist/server/react-client/index.js" + "react-server": "./dist/src/server/index.js", + "default": "./dist/src/server/react-client/index.js" }, "./client": { - "default": "./dist/client/index.js" + "default": "./dist/src/client/index.js" }, "./link": { "types": "./link.d.ts", - "react-server": { - "default": "./dist/link/react-server/index.js" - }, - "default": "./dist/link/index.js" + "react-server": "./dist/src/link/react-server/index.js", + "default": "./dist/src/link/index.js" }, "./config": "./config.js", "./middleware": { "types": "./middleware.d.ts", - "default": "./dist/middleware/index.js" + "default": "./dist/src/middleware/index.js" }, "./withNextIntl": "./withNextIntl.js", "./plugin": "./plugin.js" @@ -80,27 +78,39 @@ "@formatjs/intl-localematcher": "^0.2.32", "negotiator": "^0.6.3", "server-only": "0.0.1", - "use-intl": "^2.17.3" + "use-intl": "^2.17.5" }, "peerDependencies": { "next": "^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "devDependencies": { + "@size-limit/preset-big-lib": "^8.2.6", "@testing-library/react": "^13.0.0", "@types/negotiator": "^0.6.1", "@types/node": "^17.0.23", "@types/react": "^18.2.5", + "dts-cli": "^1.4.0", "eslint": "^8.39.0", "eslint-config-molindo": "^6.0.0", "eslint-plugin-deprecation": "^1.4.1", "next": "^13.4.7", "react": "^18.2.0", "react-dom": "^18.2.0", - "tsup": "^7.1.0", + "size-limit": "^8.2.6", "typescript": "^4.9.5", "vitest": "^0.32.2" }, + "size-limit": [ + { + "path": "dist/next-intl.cjs.production.min.js", + "limit": "13.8 KB" + }, + { + "path": "dist/next-intl.cjs.development.js", + "limit": "13.8 KB" + } + ], "engines": { "node": ">=10" } diff --git a/packages/next-intl/tsup.config.js b/packages/next-intl/tsup.config.js deleted file mode 100644 index 19b288532..000000000 --- a/packages/next-intl/tsup.config.js +++ /dev/null @@ -1,13 +0,0 @@ -/* eslint-disable import/no-extraneous-dependencies */ -import {defineConfig} from 'tsup'; - -export default defineConfig({ - entry: ['src'], - format: ['cjs'], - splitting: false, - sourcemap: true, - clean: true, - bundle: false, - dts: true, - minify: true -}); diff --git a/packages/use-intl/CHANGELOG.md b/packages/use-intl/CHANGELOG.md index 0c34eba08..880191265 100644 --- a/packages/use-intl/CHANGELOG.md +++ b/packages/use-intl/CHANGELOG.md @@ -3,6 +3,28 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 2.17.5 (2023-07-07) + + +### Bug Fixes + +* Use ESM build only for browser bundlers (not Node.js) ([#386](https://github.com/amannn/next-intl/issues/386)) ([34a69f2](https://github.com/amannn/next-intl/commit/34a69f29cf07032c8a02aaf2b94e7e60d3f35088)) + + + + + +## 2.17.4 (2023-07-05) + + +### Bug Fixes + +* Bring back ESM build (and fix bundle size) ([#381](https://github.com/amannn/next-intl/issues/381)) ([4d0fefc](https://github.com/amannn/next-intl/commit/4d0fefcb558bcee6037dce7bd8cebe727257c8ca)) + + + + + ## 2.17.3 (2023-07-05) diff --git a/packages/use-intl/package.json b/packages/use-intl/package.json index 08348ad8c..0499659a9 100644 --- a/packages/use-intl/package.json +++ b/packages/use-intl/package.json @@ -1,6 +1,6 @@ { "name": "use-intl", - "version": "2.17.3", + "version": "2.17.5", "sideEffects": false, "author": "Jan Amann ", "description": "Minimal, but complete solution for managing internationalization in React apps.", @@ -11,12 +11,16 @@ "url": "https://github.com/amannn/next-intl/tree/main/packages/use-intl" }, "scripts": { - "build": "tsup", + "build": "pnpm build:default && pnpm build:rsc", + "build:default": "rm -rf dist && dts build", + "build:rsc": "tsc && rm -rf dist/test", "test": "TZ=Europe/Berlin vitest", "lint": "eslint src test && tsc --noEmit", - "prepublishOnly": "CI=true turbo test && turbo lint && turbo build" + "prepublishOnly": "CI=true turbo test && turbo lint && turbo build", + "size": "size-limit" }, "main": "dist/index.js", + "module": "dist/use-intl.esm.js", "typings": "dist/index.d.ts", "files": [ "dist", @@ -41,18 +45,30 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "devDependencies": { + "@size-limit/preset-big-lib": "^8.2.6", "@testing-library/react": "^13.0.0", "@types/node": "^17.0.23", "@types/react": "^18.2.5", "date-fns": "^2.16.1", + "dts-cli": "^1.4.0", "eslint": "^8.39.0", "eslint-config-molindo": "^6.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "tsup": "^7.1.0", + "size-limit": "^8.2.6", "typescript": "^4.9.5", "vitest": "^0.32.2" }, + "size-limit": [ + { + "path": "dist/use-intl.cjs.production.min.js", + "limit": "10.3 kB" + }, + { + "path": "dist/use-intl.cjs.development.js", + "limit": "10.3 kB" + } + ], "engines": { "node": ">=10" } diff --git a/packages/use-intl/tsup.config.js b/packages/use-intl/tsup.config.js deleted file mode 100644 index 5cface986..000000000 --- a/packages/use-intl/tsup.config.js +++ /dev/null @@ -1,24 +0,0 @@ -/* eslint-disable import/no-extraneous-dependencies */ -import {defineConfig} from 'tsup'; - -const config = { - entry: ['src'], - format: ['cjs'], - splitting: false, - sourcemap: true, - clean: true, - bundle: false, - dts: true, - minify: true -}; - -export default defineConfig([ - config, - - // TODO: Legacy build, remove with next major - { - ...config, - clean: false, - outDir: 'dist/src' - } -]); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e01274795..378a225ab 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -169,7 +169,7 @@ importers: version: 13.4.0(eslint@8.39.0)(typescript@4.9.5) jest: specifier: ^27.4.5 - version: 27.5.1 + version: 27.5.1(ts-node@10.9.1) jest-environment-jsdom: specifier: ^27.0.0 version: 27.5.1 @@ -508,9 +508,12 @@ importers: specifier: 0.0.1 version: 0.0.1 use-intl: - specifier: ^2.17.3 + specifier: ^2.17.5 version: link:../use-intl devDependencies: + '@size-limit/preset-big-lib': + specifier: ^8.2.6 + version: 8.2.6(size-limit@8.2.6) '@testing-library/react': specifier: ^13.0.0 version: 13.0.0(react-dom@18.2.0)(react@18.2.0) @@ -523,12 +526,15 @@ importers: '@types/react': specifier: ^18.2.5 version: 18.2.5 + dts-cli: + specifier: ^1.4.0 + version: 1.4.0(@babel/plugin-syntax-flow@7.21.4)(@babel/plugin-transform-react-jsx@7.21.5)(@types/node@17.0.23) eslint: specifier: ^8.39.0 version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0) + version: 6.0.0(eslint@8.39.0)(jest@27.5.1) eslint-plugin-deprecation: specifier: ^1.4.1 version: 1.4.1(eslint@8.39.0)(typescript@4.9.5) @@ -541,9 +547,9 @@ importers: react-dom: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) - tsup: - specifier: ^7.1.0 - version: 7.1.0(typescript@4.9.5) + size-limit: + specifier: ^8.2.6 + version: 8.2.6 typescript: specifier: ^4.9.5 version: 4.9.5 @@ -560,6 +566,9 @@ importers: specifier: ^9.3.18 version: 9.3.18 devDependencies: + '@size-limit/preset-big-lib': + specifier: ^8.2.6 + version: 8.2.6(size-limit@8.2.6) '@testing-library/react': specifier: ^13.0.0 version: 13.0.0(react-dom@18.2.0)(react@18.2.0) @@ -572,21 +581,24 @@ importers: date-fns: specifier: ^2.16.1 version: 2.16.1 + dts-cli: + specifier: ^1.4.0 + version: 1.4.0(@babel/plugin-syntax-flow@7.21.4)(@babel/plugin-transform-react-jsx@7.21.5)(@types/node@17.0.23) eslint: specifier: ^8.39.0 version: 8.39.0 eslint-config-molindo: specifier: ^6.0.0 - version: 6.0.0(eslint@8.39.0) + version: 6.0.0(eslint@8.39.0)(jest@27.5.1) react: specifier: ^18.2.0 version: 18.2.0 react-dom: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) - tsup: - specifier: ^7.1.0 - version: 7.1.0(typescript@4.9.5) + size-limit: + specifier: ^8.2.6 + version: 8.2.6 typescript: specifier: ^4.9.5 version: 4.9.5 @@ -715,31 +727,17 @@ packages: '@jridgewell/trace-mapping': 0.3.18 jsesc: 2.5.2 - /@babel/helper-annotate-as-pure@7.18.6: - resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.21.5 - /@babel/helper-annotate-as-pure@7.22.5: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 - dev: false - - /@babel/helper-builder-binary-assignment-operator-visitor@7.21.5: - resolution: {integrity: sha512-uNrjKztPLkUk7bpCNC0jEKDJzzkvel/W+HguzbN8krA+LPfC1CEobJEvAvGka2A/M+ViOqXdcRL0GqPUJSjx9g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.21.5 /@babel/helper-builder-binary-assignment-operator-visitor@7.22.5: resolution: {integrity: sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 - dev: false /@babel/helper-compilation-targets@7.21.5(@babel/core@7.21.8): resolution: {integrity: sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==} @@ -766,7 +764,6 @@ packages: browserslist: 4.21.9 lru-cache: 5.1.1 semver: 6.3.0 - dev: false /@babel/helper-compilation-targets@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} @@ -781,32 +778,32 @@ packages: lru-cache: 5.1.1 semver: 6.3.0 - /@babel/helper-create-class-features-plugin@7.21.8(@babel/core@7.21.8): - resolution: {integrity: sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw==} + /@babel/helper-create-class-features-plugin@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.21.5 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-member-expression-to-functions': 7.21.5 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-replace-supers': 7.21.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 semver: 6.3.0 transitivePeerDependencies: - supports-color - /@babel/helper-create-class-features-plugin@7.22.5(@babel/core@7.21.8): + /@babel/helper-create-class-features-plugin@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 @@ -818,30 +815,28 @@ packages: semver: 6.3.0 transitivePeerDependencies: - supports-color - dev: false - /@babel/helper-create-regexp-features-plugin@7.21.8(@babel/core@7.21.8): - resolution: {integrity: sha512-zGuSdedkFtsFHGbexAvNuipg1hbtitDLo2XE8/uf6Y9sOQV1xsYX/2pNbtedp/X0eU1pIt+kGvaqHCowkRbS5g==} + /@babel/helper-create-regexp-features-plugin@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.0 - /@babel/helper-create-regexp-features-plugin@7.22.5(@babel/core@7.21.8): + /@babel/helper-create-regexp-features-plugin@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.0 - dev: false /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.21.8): resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} @@ -849,8 +844,23 @@ packages: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4(supports-color@6.1.0) + lodash.debounce: 4.0.8 + resolve: 1.22.2 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + + /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.22.5): + resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4(supports-color@6.1.0) lodash.debounce: 4.0.8 resolve: 1.22.2 @@ -874,6 +884,22 @@ packages: - supports-color dev: false + /@babel/helper-define-polyfill-provider@0.4.0(@babel/core@7.22.5): + resolution: {integrity: sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==} + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4(supports-color@6.1.0) + lodash.debounce: 4.0.8 + resolve: 1.22.2 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-environment-visitor@7.21.5: resolution: {integrity: sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==} engines: {node: '>=6.9.0'} @@ -886,8 +912,8 @@ packages: resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.20.7 - '@babel/types': 7.21.5 + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 /@babel/helper-function-name@7.22.5: resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} @@ -900,7 +926,7 @@ packages: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.5 /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} @@ -908,24 +934,17 @@ packages: dependencies: '@babel/types': 7.22.5 - /@babel/helper-member-expression-to-functions@7.21.5: - resolution: {integrity: sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.21.5 - /@babel/helper-member-expression-to-functions@7.22.5: resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 - dev: false /@babel/helper-module-imports@7.21.4: resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.5 /@babel/helper-module-imports@7.22.5: resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} @@ -963,69 +982,43 @@ packages: transitivePeerDependencies: - supports-color - /@babel/helper-optimise-call-expression@7.18.6: - resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.21.5 - /@babel/helper-optimise-call-expression@7.22.5: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 - dev: false - - /@babel/helper-plugin-utils@7.21.5: - resolution: {integrity: sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==} - engines: {node: '>=6.9.0'} /@babel/helper-plugin-utils@7.22.5: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} - dev: false - /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} + /@babel/helper-remap-async-to-generator@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.21.5 - '@babel/helper-wrap-function': 7.20.5 - '@babel/types': 7.21.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-wrap-function': 7.22.5 + '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color - /@babel/helper-remap-async-to-generator@7.22.5(@babel/core@7.21.8): + /@babel/helper-remap-async-to-generator@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-wrap-function': 7.22.5 '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color - dev: false - - /@babel/helper-replace-supers@7.21.5: - resolution: {integrity: sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-environment-visitor': 7.21.5 - '@babel/helper-member-expression-to-functions': 7.21.5 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 - transitivePeerDependencies: - - supports-color /@babel/helper-replace-supers@7.22.5: resolution: {integrity: sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==} @@ -1039,13 +1032,12 @@ packages: '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color - dev: false /@babel/helper-simple-access@7.21.5: resolution: {integrity: sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.5 /@babel/helper-simple-access@7.22.5: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} @@ -1053,24 +1045,17 @@ packages: dependencies: '@babel/types': 7.22.5 - /@babel/helper-skip-transparent-expression-wrappers@7.20.0: - resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.21.5 - /@babel/helper-skip-transparent-expression-wrappers@7.22.5: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 - dev: false /@babel/helper-split-export-declaration@7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.5 /@babel/helper-split-export-declaration@7.22.5: resolution: {integrity: sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==} @@ -1102,17 +1087,6 @@ packages: resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} engines: {node: '>=6.9.0'} - /@babel/helper-wrap-function@7.20.5: - resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-function-name': 7.21.0 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 - transitivePeerDependencies: - - supports-color - /@babel/helper-wrap-function@7.22.5: resolution: {integrity: sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==} engines: {node: '>=6.9.0'} @@ -1123,7 +1097,6 @@ packages: '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color - dev: false /@babel/helpers@7.21.5: resolution: {integrity: sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==} @@ -1175,47 +1148,47 @@ packages: dependencies: '@babel/types': 7.22.5 - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.21.8): + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: false + dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.21.8): - resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.22.5(@babel/core@7.21.8) - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.21.8): + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.22.5(@babel/core@7.21.8) - dev: false + '@babel/plugin-transform-optional-chaining': 7.22.5(@babel/core@7.22.5) + dev: true /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.21.8): resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} @@ -1224,13 +1197,28 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-environment-visitor': 7.21.5 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.8) + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.21.8) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.8) transitivePeerDependencies: - supports-color + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.22.5): + resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color + dev: false + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} @@ -1238,8 +1226,20 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-create-class-features-plugin': 7.21.8(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color + + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color @@ -1250,8 +1250,8 @@ packages: '@babel/core': ^7.12.0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-create-class-features-plugin': 7.21.8(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.8) transitivePeerDependencies: - supports-color @@ -1263,10 +1263,10 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-create-class-features-plugin': 7.21.8(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-replace-supers': 7.21.5 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 '@babel/plugin-syntax-decorators': 7.21.0(@babel/core@7.21.8) transitivePeerDependencies: - supports-color @@ -1279,7 +1279,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.8) /@babel/plugin-proposal-export-default-from@7.18.10(@babel/core@7.21.8): @@ -1289,10 +1289,21 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-export-default-from': 7.18.6(@babel/core@7.21.8) dev: false + /@babel/plugin-proposal-export-default-from@7.18.10(@babel/core@7.22.5): + resolution: {integrity: sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-default-from': 7.18.6(@babel/core@7.22.5) + dev: false + /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.21.8): resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} engines: {node: '>=6.9.0'} @@ -1300,7 +1311,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.8) /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.21.8): @@ -1310,7 +1321,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.8) /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.21.8): @@ -1320,7 +1331,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.8) /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.21.8): @@ -1330,9 +1341,20 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.8) + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) + dev: false + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} @@ -1340,7 +1362,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.8) /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.21.8): @@ -1349,12 +1371,26 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.7 + '@babel/compat-data': 7.22.5 '@babel/core': 7.21.8 - '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.8) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.21.8) + + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.22.5): + resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.5) + dev: false /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} @@ -1363,9 +1399,20 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.8) + /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) + dev: false + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.21.8): resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} @@ -1373,10 +1420,22 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.8) + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.22.5): + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) + dev: false + /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} @@ -1384,8 +1443,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-create-class-features-plugin': 7.21.8(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color @@ -1396,10 +1455,10 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.8(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.8) + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.8) transitivePeerDependencies: - supports-color @@ -1412,6 +1471,15 @@ packages: '@babel/core': 7.21.8 dev: false + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.5): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + dev: true + /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} @@ -1419,8 +1487,19 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-create-regexp-features-plugin': 7.21.8(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} + engines: {node: '>=4'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.8): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} @@ -1428,7 +1507,15 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.5): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.21.8): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} @@ -1436,7 +1523,16 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.8): @@ -1445,7 +1541,15 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.5): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.21.8): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} @@ -1454,7 +1558,17 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.5): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-syntax-decorators@7.21.0(@babel/core@7.21.8): resolution: {integrity: sha512-tIoPpGBR8UuM4++ccWN3gifhVvQu7ZizuR1fklhRJrd5ewgbkUS+0KVFeWWxELtn18NTLoW32XV7zyOgIAiz+w==} @@ -1463,7 +1577,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.8): @@ -1472,7 +1586,15 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-export-default-from@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==} @@ -1481,7 +1603,17 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-export-default-from@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.21.8): @@ -1490,7 +1622,16 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-syntax-flow@7.21.4(@babel/core@7.21.8): resolution: {integrity: sha512-l9xd3N+XG4fZRxEP3vXdK6RW7vN1Uf5dxzRC/09wV86wqZ/YYQooBIGNsiRdfNR3/q2/5pPzV4B54J/9ctX5jw==} @@ -1499,17 +1640,17 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.21.8): - resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} + /@babel/plugin-syntax-flow@7.21.4(@babel/core@7.22.5): + resolution: {integrity: sha512-l9xd3N+XG4fZRxEP3vXdK6RW7vN1Uf5dxzRC/09wV86wqZ/YYQooBIGNsiRdfNR3/q2/5pPzV4B54J/9ctX5jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} @@ -1519,7 +1660,16 @@ packages: dependencies: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.22.5 - dev: false + + /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==} @@ -1531,13 +1681,32 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.21.8): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.5): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.8): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} @@ -1545,7 +1714,16 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-syntax-jsx@7.21.4(@babel/core@7.21.8): resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} @@ -1554,7 +1732,16 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-jsx@7.21.4(@babel/core@7.22.5): + resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.8): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} @@ -1562,7 +1749,16 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.5): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.8): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} @@ -1570,7 +1766,15 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.8): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} @@ -1578,7 +1782,16 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.5): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.8): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} @@ -1586,7 +1799,15 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.8): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} @@ -1594,7 +1815,15 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.8): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} @@ -1602,7 +1831,15 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.21.8): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} @@ -1611,7 +1848,17 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.5): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.8): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} @@ -1620,7 +1867,17 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.5): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.21.8): resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} @@ -1629,7 +1886,16 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.22.5): + resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} @@ -1642,14 +1908,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-arrow-functions@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==} + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} @@ -1659,7 +1927,15 @@ packages: dependencies: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.22.5 - dev: false + + /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-async-generator-functions@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==} @@ -1676,18 +1952,20 @@ packages: - supports-color dev: false - /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.21.8): - resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} + /@babel/plugin-transform-async-generator-functions@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-module-imports': 7.21.4 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.8) + '@babel/core': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) transitivePeerDependencies: - supports-color + dev: true /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} @@ -1701,16 +1979,19 @@ packages: '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.21.8) transitivePeerDependencies: - supports-color - dev: false - /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} + /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} @@ -1720,39 +2001,59 @@ packages: dependencies: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.22.5 - dev: false - /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.8): - resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} + /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-block-scoping@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-block-scoping@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-block-scoping@7.22.5(@babel/core@7.21.8): - resolution: {integrity: sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==} + /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.21.8) '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color dev: false - /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.21.8): + /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/core': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color - dev: false + dev: true /@babel/plugin-transform-class-static-block@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==} @@ -1768,24 +2069,19 @@ packages: - supports-color dev: false - /@babel/plugin-transform-classes@7.21.0(@babel/core@7.21.8): - resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} + /@babel/plugin-transform-class-static-block@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) - '@babel/helper-environment-visitor': 7.21.5 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-replace-supers': 7.21.5 - '@babel/helper-split-export-declaration': 7.18.6 - globals: 11.12.0 + '@babel/core': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.5) transitivePeerDependencies: - supports-color + dev: true /@babel/plugin-transform-classes@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==} @@ -1805,17 +2101,25 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: false - /@babel/plugin-transform-computed-properties@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==} + /@babel/plugin-transform-classes@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/template': 7.20.7 + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} @@ -1826,16 +2130,16 @@ packages: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.22.5 '@babel/template': 7.22.5 - dev: false - /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.21.8): - resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} + /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.5 /@babel/plugin-transform-destructuring@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==} @@ -1845,17 +2149,15 @@ packages: dependencies: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.22.5 - dev: false - /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} + /@babel/plugin-transform-destructuring@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-regexp-features-plugin': 7.21.8(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} @@ -1866,16 +2168,17 @@ packages: '@babel/core': 7.21.8 '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.21.8) '@babel/helper-plugin-utils': 7.22.5 - dev: false - /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} + /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} @@ -1885,7 +2188,16 @@ packages: dependencies: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.22.5 - dev: false + + /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-dynamic-import@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==} @@ -1898,15 +2210,16 @@ packages: '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.8) dev: false - /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} + /@babel/plugin-transform-dynamic-import@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.21.5 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.5) + dev: true /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} @@ -1917,7 +2230,16 @@ packages: '@babel/core': 7.21.8 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: false + + /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-export-namespace-from@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==} @@ -1930,6 +2252,17 @@ packages: '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.8) dev: false + /@babel/plugin-transform-export-namespace-from@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.5) + dev: true + /@babel/plugin-transform-flow-strip-types@7.21.0(@babel/core@7.21.8): resolution: {integrity: sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==} engines: {node: '>=6.9.0'} @@ -1937,18 +2270,20 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.21.8) dev: false - /@babel/plugin-transform-for-of@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==} + /@babel/plugin-transform-flow-strip-types@7.21.0(@babel/core@7.22.5): + resolution: {integrity: sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.22.5) + dev: false /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} @@ -1958,18 +2293,15 @@ packages: dependencies: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.22.5 - dev: false - /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} + /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) - '@babel/helper-function-name': 7.21.0 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} @@ -1981,7 +2313,17 @@ packages: '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.8) '@babel/helper-function-name': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: false + + /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-function-name': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-json-strings@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==} @@ -1994,14 +2336,16 @@ packages: '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.8) dev: false - /@babel/plugin-transform-literals@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} + /@babel/plugin-transform-json-strings@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) + dev: true /@babel/plugin-transform-literals@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} @@ -2011,7 +2355,15 @@ packages: dependencies: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.22.5 - dev: false + + /@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-logical-assignment-operators@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==} @@ -2024,14 +2376,16 @@ packages: '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.8) dev: false - /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} + /@babel/plugin-transform-logical-assignment-operators@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) + dev: true /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} @@ -2041,19 +2395,15 @@ packages: dependencies: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.22.5 - dev: false - /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.21.8): - resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} + /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-module-transforms': 7.21.5 - '@babel/helper-plugin-utils': 7.21.5 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==} @@ -2066,20 +2416,19 @@ packages: '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color - dev: false - /@babel/plugin-transform-modules-commonjs@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==} + /@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-module-transforms': 7.21.5 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-simple-access': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color + dev: true /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} @@ -2093,19 +2442,17 @@ packages: '@babel/helper-simple-access': 7.22.5 transitivePeerDependencies: - supports-color - dev: false - /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.21.8): - resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} + /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.21.5 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-validator-identifier': 7.22.5 + '@babel/core': 7.22.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 transitivePeerDependencies: - supports-color @@ -2122,19 +2469,21 @@ packages: '@babel/helper-validator-identifier': 7.22.5 transitivePeerDependencies: - supports-color - dev: false - /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} + /@babel/plugin-transform-modules-systemjs@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-module-transforms': 7.21.5 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 transitivePeerDependencies: - supports-color + dev: true /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} @@ -2147,17 +2496,19 @@ packages: '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color - dev: false - /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.21.8): - resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} + /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0 + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-regexp-features-plugin': 7.21.8(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} @@ -2168,16 +2519,16 @@ packages: '@babel/core': 7.21.8 '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.21.8) '@babel/helper-plugin-utils': 7.22.5 - dev: false - /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} @@ -2187,7 +2538,16 @@ packages: dependencies: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.22.5 - dev: false + + /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-nullish-coalescing-operator@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==} @@ -2200,6 +2560,17 @@ packages: '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.8) dev: false + /@babel/plugin-transform-nullish-coalescing-operator@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) + dev: true + /@babel/plugin-transform-numeric-separator@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==} engines: {node: '>=6.9.0'} @@ -2211,6 +2582,17 @@ packages: '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.8) dev: false + /@babel/plugin-transform-numeric-separator@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) + dev: true + /@babel/plugin-transform-object-rest-spread@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==} engines: {node: '>=6.9.0'} @@ -2225,30 +2607,43 @@ packages: '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.21.8) dev: false - /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} + /@babel/plugin-transform-object-rest-spread@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.5) + dev: true + + /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-replace-supers': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.21.8): + /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.22.5 transitivePeerDependencies: - supports-color - dev: false /@babel/plugin-transform-optional-catch-binding@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==} @@ -2258,39 +2653,60 @@ packages: dependencies: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.8) - dev: false + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.8) + dev: false + + /@babel/plugin-transform-optional-catch-binding@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) + dev: true + + /@babel/plugin-transform-optional-chaining@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.8) - /@babel/plugin-transform-optional-chaining@7.22.5(@babel/core@7.21.8): + /@babel/plugin-transform-optional-chaining@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.8) - dev: false + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) + dev: true - /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.21.8): - resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} + /@babel/plugin-transform-parameters@7.22.5(@babel/core@7.21.8): + resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-parameters@7.22.5(@babel/core@7.21.8): + /@babel/plugin-transform-parameters@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: false /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==} @@ -2305,6 +2721,19 @@ packages: - supports-color dev: false + /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-transform-private-property-in-object@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==} engines: {node: '>=6.9.0'} @@ -2320,14 +2749,20 @@ packages: - supports-color dev: false - /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} + /@babel/plugin-transform-private-property-in-object@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color + dev: true /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} @@ -2337,7 +2772,15 @@ packages: dependencies: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.22.5 - dev: false + + /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-react-display-name@7.18.6(@babel/core@7.21.8): resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} @@ -2346,7 +2789,17 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-display-name@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false /@babel/plugin-transform-react-jsx-self@7.21.0(@babel/core@7.21.8): @@ -2356,7 +2809,17 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-jsx-self@7.21.0(@babel/core@7.22.5): + resolution: {integrity: sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false /@babel/plugin-transform-react-jsx-source@7.19.6(@babel/core@7.21.8): @@ -2366,7 +2829,17 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-jsx-source@7.19.6(@babel/core@7.22.5): + resolution: {integrity: sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: false /@babel/plugin-transform-react-jsx@7.21.5(@babel/core@7.21.8): @@ -2376,22 +2849,25 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-module-imports': 7.21.4 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.8) - '@babel/types': 7.21.5 + '@babel/types': 7.22.5 dev: false - /@babel/plugin-transform-regenerator@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==} + /@babel/plugin-transform-react-jsx@7.21.5(@babel/core@7.22.5): + resolution: {integrity: sha512-ELdlq61FpoEkHO6gFRpfj0kUgSwQTGoaEU8eMRoS8Dv3v6e7BjEAj5WMtIBRdHUeAioMhKP5HyxNzNnP+heKbA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - regenerator-transform: 0.15.1 + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.22.5) + '@babel/types': 7.22.5 /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} @@ -2402,16 +2878,17 @@ packages: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.1 - dev: false - /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} + /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.1 + dev: true /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} @@ -2421,7 +2898,16 @@ packages: dependencies: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.22.5 - dev: false + + /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-runtime@7.21.4(@babel/core@7.21.8): resolution: {integrity: sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA==} @@ -2430,8 +2916,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-module-imports': 7.21.4 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.8) babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.8) babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.8) @@ -2440,14 +2926,22 @@ packages: - supports-color dev: false - /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} + /@babel/plugin-transform-runtime@7.21.4(@babel/core@7.22.5): + resolution: {integrity: sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.22.5) + babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.22.5) + babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.22.5) + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} @@ -2457,17 +2951,15 @@ packages: dependencies: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.22.5 - dev: false - /@babel/plugin-transform-spread@7.20.7(@babel/core@7.21.8): - resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} + /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-spread@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} @@ -2478,16 +2970,16 @@ packages: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - dev: false - /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} + /@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} @@ -2497,16 +2989,15 @@ packages: dependencies: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.22.5 - dev: false - /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} + /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} @@ -2516,16 +3007,15 @@ packages: dependencies: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.22.5 - dev: false - /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} + /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} @@ -2535,7 +3025,16 @@ packages: dependencies: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.22.5 - dev: false + + /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-typescript@7.21.3(@babel/core@7.21.8): resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==} @@ -2544,21 +3043,27 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.8(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.8) transitivePeerDependencies: - supports-color - /@babel/plugin-transform-unicode-escapes@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==} + /@babel/plugin-transform-typescript@7.21.3(@babel/core@7.22.5): + resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color + dev: false /@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==} @@ -2568,7 +3073,16 @@ packages: dependencies: '@babel/core': 7.21.8 '@babel/helper-plugin-utils': 7.22.5 - dev: false + + /@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} @@ -2581,15 +3095,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} + /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-regexp-features-plugin': 7.21.8(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} @@ -2600,7 +3115,16 @@ packages: '@babel/core': 7.21.8 '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.21.8) '@babel/helper-plugin-utils': 7.22.5 - dev: false + + /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.21.8): resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} @@ -2613,19 +3137,30 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/preset-env@7.21.5(@babel/core@7.21.8): resolution: {integrity: sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.7 + '@babel/compat-data': 7.22.5 '@babel/core': 7.21.8 - '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.21.8) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.8) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.5(@babel/core@7.21.8) '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.8) '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.8) '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.21.8) @@ -2646,7 +3181,7 @@ packages: '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.8) '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.8) '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.21.8) + '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.21.8) '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.21.8) '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.8) '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.8) @@ -2657,44 +3192,44 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.8) '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.8) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.8) - '@babel/plugin-transform-arrow-functions': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-transform-computed-properties': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.8) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-for-of': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.21.8) - '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.21.8) - '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.8) - '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.8) - '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-regenerator': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-unicode-escapes': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-classes': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-modules-systemjs': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.21.8) '@babel/preset-modules': 0.1.5(@babel/core@7.21.8) - '@babel/types': 7.21.5 + '@babel/types': 7.22.5 babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.8) babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.8) babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.8) - core-js-compat: 3.30.1 + core-js-compat: 3.31.0 semver: 6.3.0 transitivePeerDependencies: - supports-color @@ -2790,16 +3325,107 @@ packages: - supports-color dev: false - /@babel/preset-flow@7.21.4(@babel/core@7.21.8): + /@babel/preset-env@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.5) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-async-generator-functions': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-class-static-block': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-classes': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-dynamic-import': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-export-namespace-from': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-json-strings': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-logical-assignment-operators': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-modules-systemjs': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-nullish-coalescing-operator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-numeric-separator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-object-rest-spread': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-optional-catch-binding': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-optional-chaining': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-private-property-in-object': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.22.5) + '@babel/preset-modules': 0.1.5(@babel/core@7.22.5) + '@babel/types': 7.22.5 + babel-plugin-polyfill-corejs2: 0.4.3(@babel/core@7.22.5) + babel-plugin-polyfill-corejs3: 0.8.1(@babel/core@7.22.5) + babel-plugin-polyfill-regenerator: 0.5.0(@babel/core@7.22.5) + core-js-compat: 3.31.0 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-flow@7.21.4(@babel/core@7.22.5): resolution: {integrity: sha512-F24cSq4DIBmhq4OzK3dE63NHagb27OPE3eWR+HLekt4Z3Y5MzIIUGF3LlLgV0gN8vzbDViSY7HnrReNVCJXTeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-transform-flow-strip-types': 7.21.0(@babel/core@7.21.8) + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-transform-flow-strip-types': 7.21.0(@babel/core@7.22.5) dev: false /@babel/preset-modules@0.1.5(@babel/core@7.21.8): @@ -2808,11 +3434,24 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.8) - '@babel/types': 7.21.5 + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.21.8) + '@babel/types': 7.22.5 + esutils: 2.0.3 + + /@babel/preset-modules@0.1.5(@babel/core@7.22.5): + resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.5) + '@babel/types': 7.22.5 esutils: 2.0.3 + dev: true /@babel/preset-typescript@7.21.5(@babel/core@7.21.8): resolution: {integrity: sha512-iqe3sETat5EOrORXiQ6rWfoOg2y68Cs75B9wNxdPW4kixJxh7aXQE1KPdWLDniC24T/6dSnguF33W9j/ZZQcmA==} @@ -2821,21 +3460,38 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-validator-option': 7.21.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.8) - '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.21.8) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.21.8) '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.21.8) transitivePeerDependencies: - supports-color + dev: true + + /@babel/preset-typescript@7.21.5(@babel/core@7.22.5): + resolution: {integrity: sha512-iqe3sETat5EOrORXiQ6rWfoOg2y68Cs75B9wNxdPW4kixJxh7aXQE1KPdWLDniC24T/6dSnguF33W9j/ZZQcmA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color + dev: false - /@babel/register@7.21.0(@babel/core@7.21.8): + /@babel/register@7.21.0(@babel/core@7.22.5): resolution: {integrity: sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.5 clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 @@ -2930,6 +3586,13 @@ packages: resolution: {integrity: sha512-N8uEMrMPL0cu/bdboEWpQYb/0i2K5Qn8eCsxzOmxSggJbbQte7ljMRoXm917AbntqTGOzdTu+vP3KOOzoC70HQ==} dev: true + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + /@emotion/hash@0.9.0: resolution: {integrity: sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==} dev: true @@ -2962,15 +3625,6 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.18.11: - resolution: {integrity: sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.16.3: resolution: {integrity: sha512-mueuEoh+s1eRbSJqq9KNBQwI4QhQV6sRXIfTyLXSHGMpyew61rOK4qY21uKbXl1iBoMb0AdL1deWFCQVlN2qHA==} engines: {node: '>=12'} @@ -2989,15 +3643,6 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.18.11: - resolution: {integrity: sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.16.3: resolution: {integrity: sha512-SFpTUcIT1bIJuCCBMCQWq1bL2gPTjWoLZdjmIhjdcQHaUfV41OQfho6Ici5uvvkMmZRXIUGpM3GxysP/EU7ifQ==} engines: {node: '>=12'} @@ -3016,15 +3661,6 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.18.11: - resolution: {integrity: sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.16.3: resolution: {integrity: sha512-DO8WykMyB+N9mIDfI/Hug70Dk1KipavlGAecxS3jDUwAbTpDXj0Lcwzw9svkhxfpCagDmpaTMgxWK8/C/XcXvw==} engines: {node: '>=12'} @@ -3043,15 +3679,6 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.18.11: - resolution: {integrity: sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.16.3: resolution: {integrity: sha512-uEqZQ2omc6BvWqdCiyZ5+XmxuHEi1SPzpVxXCSSV2+Sh7sbXbpeNhHIeFrIpRjAs0lI1FmA1iIOxFozKBhKgRQ==} engines: {node: '>=12'} @@ -3070,15 +3697,6 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.18.11: - resolution: {integrity: sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.16.3: resolution: {integrity: sha512-nJansp3sSXakNkOD5i5mIz2Is/HjzIhFs49b1tjrPrpCmwgBmH9SSzhC/Z1UqlkivqMYkhfPwMw1dGFUuwmXhw==} engines: {node: '>=12'} @@ -3097,15 +3715,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.18.11: - resolution: {integrity: sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.16.3: resolution: {integrity: sha512-TfoDzLw+QHfc4a8aKtGSQ96Wa+6eimljjkq9HKR0rHlU83vw8aldMOUSJTUDxbcUdcgnJzPaX8/vGWm7vyV7ug==} engines: {node: '>=12'} @@ -3124,15 +3733,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.18.11: - resolution: {integrity: sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.16.3: resolution: {integrity: sha512-7I3RlsnxEFCHVZNBLb2w7unamgZ5sVwO0/ikE2GaYvYuUQs9Qte/w7TqWcXHtCwxvZx/2+F97ndiUQAWs47ZfQ==} engines: {node: '>=12'} @@ -3151,15 +3751,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.18.11: - resolution: {integrity: sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.16.3: resolution: {integrity: sha512-VwswmSYwVAAq6LysV59Fyqk3UIjbhuc6wb3vEcJ7HEJUtFuLK9uXWuFoH1lulEbE4+5GjtHi3MHX+w1gNHdOWQ==} engines: {node: '>=12'} @@ -3178,15 +3769,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.18.11: - resolution: {integrity: sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.16.3: resolution: {integrity: sha512-X8FDDxM9cqda2rJE+iblQhIMYY49LfvW4kaEjoFbTTQ4Go8G96Smj2w3BRTwA8IHGoi9dPOPGAX63dhuv19UqA==} engines: {node: '>=12'} @@ -3205,15 +3787,6 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.18.11: - resolution: {integrity: sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.16.3: resolution: {integrity: sha512-hIbeejCOyO0X9ujfIIOKjBjNAs9XD/YdJ9JXAy1lHA+8UXuOqbFe4ErMCqMr8dhlMGBuvcQYGF7+kO7waj2KHw==} engines: {node: '>=12'} @@ -3232,15 +3805,6 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.18.11: - resolution: {integrity: sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.16.3: resolution: {integrity: sha512-znFRzICT/V8VZQMt6rjb21MtAVJv/3dmKRMlohlShrbVXdBuOdDrGb+C2cZGQAR8RFyRe7HS6klmHq103WpmVw==} engines: {node: '>=12'} @@ -3259,15 +3823,6 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.18.11: - resolution: {integrity: sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.16.3: resolution: {integrity: sha512-EV7LuEybxhXrVTDpbqWF2yehYRNz5e5p+u3oQUS2+ZFpknyi1NXxr8URk4ykR8Efm7iu04//4sBg249yNOwy5Q==} engines: {node: '>=12'} @@ -3286,15 +3841,6 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.18.11: - resolution: {integrity: sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.16.3: resolution: {integrity: sha512-uDxqFOcLzFIJ+r/pkTTSE9lsCEaV/Y6rMlQjUI9BkzASEChYL/aSQjZjchtEmdnVxDKETnUAmsaZ4pqK1eE5BQ==} engines: {node: '>=12'} @@ -3313,15 +3859,6 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.18.11: - resolution: {integrity: sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.16.3: resolution: {integrity: sha512-NbeREhzSxYwFhnCAQOQZmajsPYtX71Ufej3IQ8W2Gxskfz9DK58ENEju4SbpIj48VenktRASC52N5Fhyf/aliQ==} engines: {node: '>=12'} @@ -3340,15 +3877,6 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.18.11: - resolution: {integrity: sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.16.3: resolution: {integrity: sha512-SDiG0nCixYO9JgpehoKgScwic7vXXndfasjnD5DLbp1xltANzqZ425l7LSdHynt19UWOcDjG9wJJzSElsPvk0w==} engines: {node: '>=12'} @@ -3367,15 +3895,6 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.18.11: - resolution: {integrity: sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.16.3: resolution: {integrity: sha512-AzbsJqiHEq1I/tUvOfAzCY15h4/7Ivp3ff/o1GpP16n48JMNAtbW0qui2WCgoIZArEHD0SUQ95gvR0oSO7ZbdA==} engines: {node: '>=12'} @@ -3394,15 +3913,6 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.18.11: - resolution: {integrity: sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.16.3: resolution: {integrity: sha512-gSABi8qHl8k3Cbi/4toAzHiykuBuWLZs43JomTcXkjMZVkp0gj3gg9mO+9HJW/8GB5H89RX/V0QP4JGL7YEEVg==} engines: {node: '>=12'} @@ -3421,15 +3931,6 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.18.11: - resolution: {integrity: sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.16.3: resolution: {integrity: sha512-SF9Kch5Ete4reovvRO6yNjMxrvlfT0F0Flm+NPoUw5Z4Q3r1d23LFTgaLwm3Cp0iGbrU/MoUI+ZqwCv5XJijCw==} engines: {node: '>=12'} @@ -3448,15 +3949,6 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.18.11: - resolution: {integrity: sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.16.3: resolution: {integrity: sha512-u5aBonZIyGopAZyOnoPAA6fGsDeHByZ9CnEzyML9NqntK6D/xl5jteZUKm/p6nD09+v3pTM6TuUIqSPcChk5gg==} engines: {node: '>=12'} @@ -3475,15 +3967,6 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.18.11: - resolution: {integrity: sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.16.3: resolution: {integrity: sha512-GlgVq1WpvOEhNioh74TKelwla9KDuAaLZrdxuuUgsP2vayxeLgVc+rbpIv0IYF4+tlIzq2vRhofV+KGLD+37EQ==} engines: {node: '>=12'} @@ -3502,15 +3985,6 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.18.11: - resolution: {integrity: sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.16.3: resolution: {integrity: sha512-5/JuTd8OWW8UzEtyf19fbrtMJENza+C9JoPIkvItgTBQ1FO2ZLvjbPO6Xs54vk0s5JB5QsfieUEshRQfu7ZHow==} engines: {node: '>=12'} @@ -3529,15 +4003,6 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.18.11: - resolution: {integrity: sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.39.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3678,7 +4143,7 @@ packages: getenv: 1.0.0 glob: 7.1.6 resolve-from: 5.0.0 - semver: 7.5.0 + semver: 7.5.3 slash: 3.0.0 xcode: 3.0.1 xml2js: 0.4.23 @@ -4087,7 +4552,7 @@ packages: slash: 3.0.0 dev: true - /@jest/core@27.5.1: + /@jest/core@27.5.1(ts-node@10.9.1): resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: @@ -4108,7 +4573,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 27.5.1 - jest-config: 27.5.1 + jest-config: 27.5.1(ts-node@10.9.1) jest-haste-map: 27.5.1 jest-message-util: 27.5.1 jest-regex-util: 27.5.1 @@ -4431,7 +4896,7 @@ packages: resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.5 '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.18 babel-plugin-istanbul: 6.1.1 @@ -4498,6 +4963,13 @@ packages: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} + /@jridgewell/source-map@0.3.5: + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + dev: true + /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} @@ -4510,6 +4982,13 @@ packages: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /@lerna/child-process@6.6.2: resolution: {integrity: sha512-QyKIWEnKQFnYu2ey+SAAm1A5xjzJLJJj3bhIZd3QKyXKKjaJ0hlxam/OsWSltxTNbcyH1jRJjC6Cxv31usv0Ag==} engines: {node: ^14.17.0 || >=16.0.0} @@ -4531,7 +5010,7 @@ packages: p-reduce: 2.1.0 pacote: 15.1.1 pify: 5.0.0 - semver: 7.5.0 + semver: 7.5.3 slash: 3.0.0 validate-npm-package-license: 3.0.4 validate-npm-package-name: 4.0.0 @@ -4897,7 +5376,7 @@ packages: promise-all-reject-late: 1.0.1 promise-call-limit: 1.0.2 read-package-json-fast: 3.0.2 - semver: 7.5.0 + semver: 7.5.3 ssri: 10.0.4 treeverse: 3.0.0 walk-up-path: 1.0.0 @@ -4910,21 +5389,21 @@ packages: resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} dependencies: '@gar/promisify': 1.1.3 - semver: 7.5.0 + semver: 7.5.3 /@npmcli/fs@2.1.2: resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: '@gar/promisify': 1.1.3 - semver: 7.5.0 + semver: 7.5.3 dev: true /@npmcli/fs@3.1.0: resolution: {integrity: sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - semver: 7.5.0 + semver: 7.5.3 dev: true /@npmcli/git@4.0.4: @@ -4937,7 +5416,7 @@ packages: proc-log: 3.0.0 promise-inflight: 1.0.1(bluebird@3.7.2) promise-retry: 2.0.1 - semver: 7.5.0 + semver: 7.5.3 which: 3.0.1 transitivePeerDependencies: - bluebird @@ -4969,7 +5448,7 @@ packages: cacache: 17.1.0 json-parse-even-better-errors: 3.0.0 pacote: 15.1.1 - semver: 7.5.0 + semver: 7.5.3 transitivePeerDependencies: - bluebird - supports-color @@ -5768,12 +6247,91 @@ packages: /@remix-run/web-form-data@3.0.4: resolution: {integrity: sha512-UMF1jg9Vu9CLOf8iHBdY74Mm3PUvMW8G/XZRJE56SxKaOFWGSWlfxfG+/a3boAgHFLTkP7K4H1PxlRugy1iQtw==} dependencies: - web-encoding: 1.1.5 + web-encoding: 1.1.5 + + /@remix-run/web-stream@1.0.3: + resolution: {integrity: sha512-wlezlJaA5NF6SsNMiwQnnAW6tnPzQ5I8qk0Y0pSohm0eHKa2FQ1QhEKLVVcDDu02TmkfHgnux0igNfeYhDOXiA==} + dependencies: + web-streams-polyfill: 3.2.1 + + /@rollup/plugin-babel@5.3.1(@babel/core@7.22.5)(rollup@2.79.1): + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + rollup: 2.79.1 + dev: true + + /@rollup/plugin-commonjs@21.1.0(rollup@2.79.1): + resolution: {integrity: sha512-6ZtHx3VHIp2ReNNDxHjuUml6ur+WcQ28N1yHgCQwsbNkQg2suhxGMDQGJOn/KuDxKtd1xuZP5xSTwBA4GQ8hbA==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^2.38.3 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 7.2.3 + is-reference: 1.2.1 + magic-string: 0.25.9 + resolve: 1.22.2 + rollup: 2.79.1 + dev: true + + /@rollup/plugin-json@4.1.0(rollup@2.79.1): + resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + rollup: 2.79.1 + dev: true + + /@rollup/plugin-node-resolve@13.3.0(rollup@2.79.1): + resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^2.42.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + '@types/resolve': 1.17.1 + deepmerge: 4.3.1 + is-builtin-module: 3.2.1 + is-module: 1.0.0 + resolve: 1.22.2 + rollup: 2.79.1 + dev: true + + /@rollup/plugin-replace@3.1.0(rollup@2.79.1): + resolution: {integrity: sha512-pA3XRUrSKybVYqmH5TqWNZpGxF+VV+1GrYchKgCNIj2vsSOX7CVm2RCtx8p2nrC7xvkziYyK+lSi74T93MU3YA==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + magic-string: 0.25.9 + rollup: 2.79.1 + dev: true - /@remix-run/web-stream@1.0.3: - resolution: {integrity: sha512-wlezlJaA5NF6SsNMiwQnnAW6tnPzQ5I8qk0Y0pSohm0eHKa2FQ1QhEKLVVcDDu02TmkfHgnux0igNfeYhDOXiA==} + /@rollup/pluginutils@3.1.0(rollup@2.79.1): + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 dependencies: - web-streams-polyfill: 3.2.1 + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.1 + dev: true /@rollup/pluginutils@4.2.1: resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} @@ -5845,6 +6403,77 @@ packages: '@sinonjs/commons': 1.8.6 dev: true + /@sitespeed.io/tracium@0.3.3: + resolution: {integrity: sha512-dNZafjM93Y+F+sfwTO5gTpsGXlnc/0Q+c2+62ViqP3gkMWvHEMSKkaEHgVJLcLg3i/g19GSIPziiKpgyne07Bw==} + engines: {node: '>=8'} + dependencies: + debug: 4.3.4(supports-color@6.1.0) + transitivePeerDependencies: + - supports-color + dev: true + + /@size-limit/file@8.2.6(size-limit@8.2.6): + resolution: {integrity: sha512-B7ayjxiJsbtXdIIWazJkB5gezi5WBMecdHTFPMDhI3NwEML1RVvUjAkrb1mPAAkIpt2LVHPnhdCUHjqDdjugwg==} + engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} + peerDependencies: + size-limit: 8.2.6 + dependencies: + semver: 7.5.3 + size-limit: 8.2.6 + dev: true + + /@size-limit/preset-big-lib@8.2.6(size-limit@8.2.6): + resolution: {integrity: sha512-63a+yos0QNMVCfx1OWnxBrdQVTlBVGzW5fDXwpWq/hKfP3B89XXHYGeL2Z2f8IXSVeGkAHXnDcTZyIPRaXffVg==} + peerDependencies: + size-limit: 8.2.6 + dependencies: + '@size-limit/file': 8.2.6(size-limit@8.2.6) + '@size-limit/time': 8.2.6(size-limit@8.2.6) + '@size-limit/webpack': 8.2.6(size-limit@8.2.6) + size-limit: 8.2.6 + transitivePeerDependencies: + - '@swc/core' + - bufferutil + - encoding + - esbuild + - supports-color + - uglify-js + - utf-8-validate + - webpack-cli + dev: true + + /@size-limit/time@8.2.6(size-limit@8.2.6): + resolution: {integrity: sha512-fUEPvz7Uq6+oUQxSYbNlJt3tTgQBl1VY21USi/B7ebdnVKLnUx1JyPI9v7imN6XEkB2VpJtnYgjFeLgNrirzMA==} + engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} + peerDependencies: + size-limit: 8.2.6 + dependencies: + estimo: 2.3.6 + react: 17.0.2 + size-limit: 8.2.6 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@size-limit/webpack@8.2.6(size-limit@8.2.6): + resolution: {integrity: sha512-y2sB66m5sJxIjZ8SEAzpWbiw3/+bnQHDHfk9cSbV5ChKklq02AlYg8BS5KxGWmMpdyUo4TzpjSCP9oEudY+hxQ==} + engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} + peerDependencies: + size-limit: 8.2.6 + dependencies: + nanoid: 3.3.6 + size-limit: 8.2.6 + webpack: 5.88.1 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + - webpack-cli + dev: true + /@swc/helpers@0.5.1: resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==} dependencies: @@ -5919,6 +6548,22 @@ packages: engines: {node: '>= 10'} dev: true + /@tsconfig/node10@1.0.9: + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + dev: true + + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true + /@tufjs/canonical-json@1.0.0: resolution: {integrity: sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -5948,8 +6593,8 @@ packages: /@types/babel__core@7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: - '@babel/parser': 7.21.8 - '@babel/types': 7.21.5 + '@babel/parser': 7.22.5 + '@babel/types': 7.22.5 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.18.5 @@ -5958,20 +6603,20 @@ packages: /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.5 dev: true /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.21.8 - '@babel/types': 7.21.5 + '@babel/parser': 7.22.5 + '@babel/types': 7.22.5 dev: true /@types/babel__traverse@7.18.5: resolution: {integrity: sha512-enCvTL8m/EHS/zIvJno9nE+ndYPh1/oNFzRYRmtUqJICG2VnCSBzMLW5VN2KCQU91f23tsNKR8v7VJJQMatl7Q==} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.5 dev: true /@types/cacheable-request@6.0.3: @@ -6001,6 +6646,20 @@ packages: dependencies: '@types/ms': 0.7.31 + /@types/eslint-scope@3.7.4: + resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} + dependencies: + '@types/eslint': 8.40.2 + '@types/estree': 1.0.1 + dev: true + + /@types/eslint@8.40.2: + resolution: {integrity: sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==} + dependencies: + '@types/estree': 1.0.1 + '@types/json-schema': 7.0.11 + dev: true + /@types/estree-jsx@0.0.1: resolution: {integrity: sha512-gcLAYiMfQklDCPjQegGn0TBAn9it05ISEsEhlKQUddIk7o2XDokOcTN7HBO8tznM0D9dGezvHEfRZBfZf6me0A==} dependencies: @@ -6012,6 +6671,10 @@ packages: dependencies: '@types/estree': 1.0.1 + /@types/estree@0.0.39: + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + dev: true + /@types/estree@1.0.1: resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} @@ -6053,6 +6716,13 @@ packages: dependencies: '@types/istanbul-lib-report': 3.0.0 + /@types/jest@27.5.2: + resolution: {integrity: sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==} + dependencies: + jest-matcher-utils: 27.5.1 + pretty-format: 27.5.1 + dev: true + /@types/jest@29.5.1: resolution: {integrity: sha512-tEuVcHrpaixS36w7hpsfLBLpjtMRJUE09/MHXn923LOVojDwyC14cWcfc0rDs0VEfUyYmt/+iX1kxxp+gZMcaQ==} dependencies: @@ -6167,6 +6837,12 @@ packages: '@types/scheduler': 0.16.3 csstype: 3.1.2 + /@types/resolve@1.17.1: + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + dependencies: + '@types/node': 17.0.23 + dev: true + /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: @@ -6243,6 +6919,14 @@ packages: dependencies: '@types/yargs-parser': 21.0.0 + /@types/yauzl@2.10.0: + resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} + requiresBuild: true + dependencies: + '@types/node': 17.0.23 + dev: true + optional: true + /@typescript-eslint/eslint-plugin@5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.39.0)(typescript@4.9.5): resolution: {integrity: sha512-yVrXupeHjRxLDcPKL10sGQ/QlVrA8J5IYOEWVqk0lJaSZP7X5DfnP7Ns3cc74/blmbipQ1htFNVGsHX6wsYm0A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -6358,7 +7042,7 @@ packages: debug: 4.3.4(supports-color@6.1.0) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.0 + semver: 7.5.3 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: @@ -6379,7 +7063,7 @@ packages: debug: 4.3.4(supports-color@6.1.0) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.0 + semver: 7.5.3 tsutils: 3.21.0(typescript@5.0.4) typescript: 5.0.4 transitivePeerDependencies: @@ -6400,7 +7084,7 @@ packages: '@typescript-eslint/typescript-estree': 5.59.2(typescript@4.9.5) eslint: 8.39.0 eslint-scope: 5.1.1 - semver: 7.5.0 + semver: 7.5.3 transitivePeerDependencies: - supports-color - typescript @@ -6437,7 +7121,7 @@ packages: /@vanilla-extract/babel-plugin-debug-ids@1.0.2: resolution: {integrity: sha512-LjnbQWGeMwaydmovx8jWUR8BxLtLiPyq0xz5C8G5OvFhsuJxvavLdrBHNNizvr1dq7/3qZGlPv0znsvU4P44YA==} dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.5 transitivePeerDependencies: - supports-color dev: true @@ -6461,8 +7145,8 @@ packages: /@vanilla-extract/integration@6.2.1: resolution: {integrity: sha512-+xYJz07G7TFAMZGrOqArOsURG+xcYvqctujEkANjw2McCBvGEK505RxQqOuNiA9Mi9hgGdNp2JedSa94f3eoLg==} dependencies: - '@babel/core': 7.21.8 - '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.8) + '@babel/core': 7.22.5 + '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.22.5) '@vanilla-extract/babel-plugin-debug-ids': 1.0.2 '@vanilla-extract/css': 1.11.0 esbuild: 0.17.6 @@ -6534,6 +7218,13 @@ packages: /@web3-storage/multipart-parser@1.0.0: resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==} + /@webassemblyjs/ast@1.11.6: + resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} + dependencies: + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + dev: true + /@webassemblyjs/ast@1.9.0: resolution: {integrity: sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==} dependencies: @@ -6542,14 +7233,26 @@ packages: '@webassemblyjs/wast-parser': 1.9.0 dev: false + /@webassemblyjs/floating-point-hex-parser@1.11.6: + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + dev: true + /@webassemblyjs/floating-point-hex-parser@1.9.0: resolution: {integrity: sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==} dev: false + /@webassemblyjs/helper-api-error@1.11.6: + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + dev: true + /@webassemblyjs/helper-api-error@1.9.0: resolution: {integrity: sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==} dev: false + /@webassemblyjs/helper-buffer@1.11.6: + resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} + dev: true + /@webassemblyjs/helper-buffer@1.9.0: resolution: {integrity: sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==} dev: false @@ -6570,10 +7273,31 @@ packages: '@webassemblyjs/ast': 1.9.0 dev: false + /@webassemblyjs/helper-numbers@1.11.6: + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/helper-wasm-bytecode@1.11.6: + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + dev: true + /@webassemblyjs/helper-wasm-bytecode@1.9.0: resolution: {integrity: sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==} dev: false + /@webassemblyjs/helper-wasm-section@1.11.6: + resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + dev: true + /@webassemblyjs/helper-wasm-section@1.9.0: resolution: {integrity: sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==} dependencies: @@ -6583,22 +7307,51 @@ packages: '@webassemblyjs/wasm-gen': 1.9.0 dev: false + /@webassemblyjs/ieee754@1.11.6: + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + dependencies: + '@xtuc/ieee754': 1.2.0 + dev: true + /@webassemblyjs/ieee754@1.9.0: resolution: {integrity: sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==} dependencies: '@xtuc/ieee754': 1.2.0 dev: false + /@webassemblyjs/leb128@1.11.6: + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + dependencies: + '@xtuc/long': 4.2.2 + dev: true + /@webassemblyjs/leb128@1.9.0: resolution: {integrity: sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==} dependencies: '@xtuc/long': 4.2.2 dev: false + /@webassemblyjs/utf8@1.11.6: + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + dev: true + /@webassemblyjs/utf8@1.9.0: resolution: {integrity: sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==} dev: false + /@webassemblyjs/wasm-edit@1.11.6: + resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-opt': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + '@webassemblyjs/wast-printer': 1.11.6 + dev: true + /@webassemblyjs/wasm-edit@1.9.0: resolution: {integrity: sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==} dependencies: @@ -6612,6 +7365,16 @@ packages: '@webassemblyjs/wast-printer': 1.9.0 dev: false + /@webassemblyjs/wasm-gen@1.11.6: + resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: true + /@webassemblyjs/wasm-gen@1.9.0: resolution: {integrity: sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==} dependencies: @@ -6622,6 +7385,15 @@ packages: '@webassemblyjs/utf8': 1.9.0 dev: false + /@webassemblyjs/wasm-opt@1.11.6: + resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + dev: true + /@webassemblyjs/wasm-opt@1.9.0: resolution: {integrity: sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==} dependencies: @@ -6631,6 +7403,17 @@ packages: '@webassemblyjs/wasm-parser': 1.9.0 dev: false + /@webassemblyjs/wasm-parser@1.11.6: + resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: true + /@webassemblyjs/wasm-parser@1.9.0: resolution: {integrity: sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==} dependencies: @@ -6653,6 +7436,13 @@ packages: '@xtuc/long': 4.2.2 dev: false + /@webassemblyjs/wast-printer@1.11.6: + resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} + dependencies: + '@webassemblyjs/ast': 1.11.6 + '@xtuc/long': 4.2.2 + dev: true + /@webassemblyjs/wast-printer@1.9.0: resolution: {integrity: sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==} dependencies: @@ -6668,11 +7458,17 @@ packages: /@xtuc/ieee754@1.2.0: resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - dev: false /@xtuc/long@4.2.2: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - dev: false + + /@yarn-tool/resolve-package@1.0.47: + resolution: {integrity: sha512-Zaw58gQxjQceJqhqybJi1oUDaORT8i2GTgwICPs8v/X/Pkx35FXQba69ldHVg5pQZ6YLKpROXgyHvBaCJOFXiA==} + dependencies: + pkg-dir: 5.0.0 + tslib: 2.5.0 + upath2: 3.1.19 + dev: true /@yarnpkg/lockfile@1.1.0: resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} @@ -6754,6 +7550,14 @@ packages: acorn-walk: 8.2.0 dev: true + /acorn-import-assertions@1.9.0(acorn@8.8.2): + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.8.2 + dev: true + /acorn-jsx@5.3.2(acorn@8.8.2): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -6847,7 +7651,6 @@ packages: ajv: ^6.9.1 dependencies: ajv: 6.12.6 - dev: false /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -6878,7 +7681,6 @@ packages: /ansi-escapes@3.2.0: resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} engines: {node: '>=4'} - dev: false /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} @@ -6905,6 +7707,11 @@ packages: engines: {node: '>=0.10.0'} dev: false + /ansi-regex@3.0.1: + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} + engines: {node: '>=4'} + dev: true + /ansi-regex@4.1.1: resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} engines: {node: '>=6'} @@ -6946,6 +7753,7 @@ packages: /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: false /anymatch@2.0.0(supports-color@6.1.0): resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} @@ -7005,7 +7813,6 @@ packages: /arg@4.1.0: resolution: {integrity: sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==} - dev: false /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -7227,6 +8034,10 @@ packages: /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + /asyncro@3.0.0: + resolution: {integrity: sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg==} + dev: true + /at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} @@ -7235,7 +8046,6 @@ packages: resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} engines: {node: '>= 4.5.0'} hasBin: true - dev: false /autoprefixer@10.4.0(postcss@8.4.23): resolution: {integrity: sha512-7FdJ1ONtwzV1G43GDD0kpVMn/qbiNqyOPMFTX5nRffI+7vgWoFEc6DcXOxHJxrWNDXrZh18eDsZjvZGUljSRGA==} @@ -7294,12 +8104,12 @@ packages: deep-equal: 2.2.1 dev: true - /babel-core@7.0.0-bridge.0(@babel/core@7.21.8): + /babel-core@7.0.0-bridge.0(@babel/core@7.22.5): resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.5 dev: false /babel-jest@27.5.1(@babel/core@7.21.8): @@ -7321,17 +8131,17 @@ packages: - supports-color dev: true - /babel-jest@29.5.0(@babel/core@7.21.8): + /babel-jest@29.5.0(@babel/core@7.22.5): resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.5 '@jest/transform': 29.5.0 '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.5.0(@babel/core@7.21.8) + babel-preset-jest: 29.5.0(@babel/core@7.22.5) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -7355,11 +8165,27 @@ packages: webpack: 4.43.0 dev: false + /babel-plugin-annotate-pure-calls@0.4.0(@babel/core@7.22.5): + resolution: {integrity: sha512-oi4M/PWUJOU9ZyRGoPTfPMqdyMp06jbJAomd3RcyYuzUtBOddv98BqLm96Lucpi2QFoQHkdGQt0ACvw7VzVEQA==} + peerDependencies: + '@babel/core': ^6.0.0-0 || 7.x + dependencies: + '@babel/core': 7.22.5 + dev: true + + /babel-plugin-dev-expression@0.2.3(@babel/core@7.22.5): + resolution: {integrity: sha512-rP5LK9QQTzCW61nVVzw88En1oK8t8gTsIeC6E61oelxNsU842yMjF0G1MxhvUpCkxCEIj7sE8/e5ieTheT//uw==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.5 + dev: true + /babel-plugin-istanbul@6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.21.5 + '@babel/helper-plugin-utils': 7.22.5 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -7372,8 +8198,8 @@ packages: resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/template': 7.20.7 - '@babel/types': 7.21.5 + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 '@types/babel__core': 7.20.0 '@types/babel__traverse': 7.18.5 dev: true @@ -7382,12 +8208,21 @@ packages: resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/template': 7.20.7 - '@babel/types': 7.21.5 + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 '@types/babel__core': 7.20.0 '@types/babel__traverse': 7.18.5 dev: true + /babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + dependencies: + '@babel/runtime': 7.21.5 + cosmiconfig: 7.0.0 + resolve: 1.22.2 + dev: true + /babel-plugin-module-resolver@4.1.0: resolution: {integrity: sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==} engines: {node: '>= 8.0.0'} @@ -7404,48 +8239,109 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.7 - '@babel/core': 7.21.8 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.8) - semver: 6.3.0 + '@babel/compat-data': 7.22.5 + '@babel/core': 7.21.8 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.8) + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + + /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.22.5): + resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.22.5 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.5) + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-corejs2@0.4.3(@babel/core@7.21.8): + resolution: {integrity: sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.21.8 + '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.21.8) + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-corejs2@0.4.3(@babel/core@7.22.5): + resolution: {integrity: sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.22.5 + '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.5) + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.21.8): + resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.8) + core-js-compat: 3.31.0 + transitivePeerDependencies: + - supports-color + + /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.22.5): + resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.5) + core-js-compat: 3.31.0 transitivePeerDependencies: - supports-color + dev: false - /babel-plugin-polyfill-corejs2@0.4.3(@babel/core@7.21.8): - resolution: {integrity: sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==} + /babel-plugin-polyfill-corejs3@0.8.1(@babel/core@7.21.8): + resolution: {integrity: sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.22.5 '@babel/core': 7.21.8 '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.21.8) - semver: 6.3.0 + core-js-compat: 3.31.0 transitivePeerDependencies: - supports-color dev: false - /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.21.8): - resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} + /babel-plugin-polyfill-corejs3@0.8.1(@babel/core@7.22.5): + resolution: {integrity: sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.8) - core-js-compat: 3.30.1 + '@babel/core': 7.22.5 + '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.5) + core-js-compat: 3.31.0 transitivePeerDependencies: - supports-color + dev: true - /babel-plugin-polyfill-corejs3@0.8.1(@babel/core@7.21.8): - resolution: {integrity: sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==} + /babel-plugin-polyfill-regenerator@0.3.1(@babel/core@7.22.5): + resolution: {integrity: sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.21.8) - core-js-compat: 3.31.0 + '@babel/core': 7.22.5 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.5) transitivePeerDependencies: - supports-color - dev: false + dev: true /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.21.8): resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} @@ -7457,6 +8353,17 @@ packages: transitivePeerDependencies: - supports-color + /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.22.5): + resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color + dev: false + /babel-plugin-polyfill-regenerator@0.5.0(@babel/core@7.21.8): resolution: {integrity: sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==} peerDependencies: @@ -7468,6 +8375,17 @@ packages: - supports-color dev: false + /babel-plugin-polyfill-regenerator@0.5.0(@babel/core@7.22.5): + resolution: {integrity: sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color + dev: true + /babel-plugin-react-native-web@0.18.12: resolution: {integrity: sha512-4djr9G6fMdwQoD6LQ7hOKAm39+y12flWgovAqS1k5O8f42YQ3A1FFMyV5kKfetZuGhZO5BmNmOdRRZQ1TixtDw==} dev: false @@ -7476,6 +8394,10 @@ packages: resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} dev: false + /babel-plugin-transform-rename-import@2.3.0: + resolution: {integrity: sha512-dPgJoT57XC0PqSnLgl2FwNvxFrWlspatX2dkk7yjKQj5HHGw071vAcOf+hqW8ClqcBDMvEbm6mevn5yHAD8mlQ==} + dev: true + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.21.8): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: @@ -7496,6 +8418,26 @@ packages: '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.8) dev: true + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.5): + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.5) + dev: true + /babel-preset-expo@9.2.2(@babel/core@7.21.8): resolution: {integrity: sha512-69cSPObZWFz0AaUT6IhCu2VzPVTICUtXzhX5ecoDttFe+9wb9yMV8m7rBNZptJQ3wtiKB5iEL7/wvtKygPz/mQ==} dependencies: @@ -7523,26 +8465,63 @@ packages: '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.21.8) '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.8) '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-transform-arrow-functions': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-transform-computed-properties': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.8) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-classes': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.21.8) '@babel/plugin-transform-flow-strip-types': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-transform-for-of': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.8) - '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.21.8) '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.21.8) '@babel/plugin-transform-react-jsx': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.8) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.21.8) + babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-preset-fbjs@3.4.0(@babel/core@7.22.5): + resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.22.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5) + '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.22.5) + '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.22.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-classes': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-flow-strip-types': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx': 7.21.5(@babel/core@7.22.5) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.5) babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 transitivePeerDependencies: - supports-color @@ -7559,15 +8538,15 @@ packages: babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.8) dev: true - /babel-preset-jest@29.5.0(@babel/core@7.21.8): + /babel-preset-jest@29.5.0(@babel/core@7.22.5): resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.5 babel-plugin-jest-hoist: 29.5.0 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.8) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) dev: true /bail@2.0.2: @@ -7883,6 +8862,13 @@ packages: node-releases: 2.0.12 update-browserslist-db: 1.0.11(browserslist@4.21.9) + /bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + dependencies: + fast-json-stable-stringify: 2.1.0 + dev: true + /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: @@ -7899,6 +8885,10 @@ packages: buffer-fill: 1.0.0 dev: false + /buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + dev: true + /buffer-fill@1.0.0: resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} dev: false @@ -7950,7 +8940,7 @@ packages: /builtins@5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: - semver: 7.5.0 + semver: 7.5.3 dev: true /bundle-name@3.0.0: @@ -7960,16 +8950,6 @@ packages: run-applescript: 5.0.0 dev: true - /bundle-require@4.0.1(esbuild@0.18.11): - resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - esbuild: '>=0.17' - dependencies: - esbuild: 0.18.11 - load-tsconfig: 0.2.5 - dev: true - /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -7981,6 +8961,11 @@ packages: engines: {node: '>=10'} dev: true + /bytes-iec@3.1.1: + resolution: {integrity: sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==} + engines: {node: '>= 0.8'} + dev: true + /bytes@3.0.0: resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} engines: {node: '>= 0.8'} @@ -8178,7 +9163,7 @@ packages: /caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 caniuse-lite: 1.0.30001509 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 @@ -8325,7 +9310,6 @@ packages: /chrome-trace-event@1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} - dev: false /ci-info@2.0.0: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} @@ -8389,7 +9373,6 @@ packages: engines: {node: '>=4'} dependencies: restore-cursor: 2.0.0 - dev: false /cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} @@ -8397,6 +9380,11 @@ packages: dependencies: restore-cursor: 3.1.0 + /cli-spinners@1.3.1: + resolution: {integrity: sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==} + engines: {node: '>=4'} + dev: true + /cli-spinners@2.6.1: resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==} engines: {node: '>=6'} @@ -8591,11 +9579,11 @@ packages: /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: false /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + dev: false /commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} @@ -8610,7 +9598,6 @@ packages: /commander@9.5.0: resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} - dev: false /common-ancestor-path@1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} @@ -8618,7 +9605,6 @@ packages: /commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: false /compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} @@ -8696,7 +9682,7 @@ packages: js-string-escape: 1.0.1 lodash: 4.17.21 md5-hex: 3.0.1 - semver: 7.5.0 + semver: 7.5.3 well-known-symbols: 2.0.0 dev: true @@ -8895,16 +9881,10 @@ packages: - bluebird dev: false - /core-js-compat@3.30.1: - resolution: {integrity: sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw==} - dependencies: - browserslist: 4.21.5 - /core-js-compat@3.31.0: resolution: {integrity: sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==} dependencies: browserslist: 4.21.9 - dev: false /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -8977,13 +9957,16 @@ packages: object-assign: 4.1.1 dev: false + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + /cross-fetch@3.1.5: resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} dependencies: node-fetch: 2.6.7 transitivePeerDependencies: - encoding - dev: false /cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} @@ -9644,7 +10627,6 @@ packages: /decode-uri-component@0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} - dev: false /decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} @@ -9822,6 +10804,20 @@ packages: rimraf: 2.7.1 dev: false + /del@5.1.0: + resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==} + engines: {node: '>=8'} + dependencies: + globby: 10.0.2 + graceful-fs: 4.2.11 + is-glob: 4.0.3 + is-path-cwd: 2.2.0 + is-path-inside: 3.0.3 + p-map: 3.0.0 + rimraf: 3.0.2 + slash: 3.0.0 + dev: true + /del@6.1.1: resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} engines: {node: '>=10'} @@ -9921,6 +10917,10 @@ packages: minimist: 1.2.8 dev: false + /devtools-protocol@0.0.981744: + resolution: {integrity: sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==} + dev: true + /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} dev: false @@ -9935,6 +10935,11 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + /diff@5.1.0: resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} engines: {node: '>=0.3.1'} @@ -10103,6 +11108,93 @@ packages: engines: {node: '>=12'} dev: true + /dts-cli@1.4.0(@babel/plugin-syntax-flow@7.21.4)(@babel/plugin-transform-react-jsx@7.21.5)(@types/node@17.0.23): + resolution: {integrity: sha512-bcjolZYKh51WPurWUayO85XaqccE26yWiAd5+JCZU8YFWAJgcp+UGFke3OwmJvo7WKX3e48FuvzFezUkd+eFSg==} + engines: {node: '>=12.0.0'} + hasBin: true + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) + '@babel/preset-env': 7.22.5(@babel/core@7.22.5) + '@babel/traverse': 7.22.5 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.22.5)(rollup@2.79.1) + '@rollup/plugin-commonjs': 21.1.0(rollup@2.79.1) + '@rollup/plugin-json': 4.1.0(rollup@2.79.1) + '@rollup/plugin-node-resolve': 13.3.0(rollup@2.79.1) + '@rollup/plugin-replace': 3.1.0(rollup@2.79.1) + '@types/jest': 27.5.2 + '@typescript-eslint/eslint-plugin': 5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.39.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@4.9.5) + ansi-escapes: 4.3.2 + asyncro: 3.0.0 + babel-plugin-annotate-pure-calls: 0.4.0(@babel/core@7.22.5) + babel-plugin-dev-expression: 0.2.3(@babel/core@7.22.5) + babel-plugin-macros: 3.1.0 + babel-plugin-polyfill-regenerator: 0.3.1(@babel/core@7.22.5) + babel-plugin-transform-rename-import: 2.3.0 + camelcase: 6.3.0 + chalk: 4.1.2 + confusing-browser-globals: 1.0.11 + enquirer: 2.3.6 + eslint: 8.39.0 + eslint-config-prettier: 8.8.0(eslint@8.39.0) + eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.21.4)(@babel/plugin-transform-react-jsx@7.21.5)(eslint@8.39.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) + eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@27.5.1)(typescript@4.9.5) + eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) + eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8) + eslint-plugin-react: 7.32.2(eslint@8.39.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.39.0) + eslint-plugin-testing-library: 5.11.0(eslint@8.39.0)(typescript@4.9.5) + execa: 4.1.0 + figlet: 1.6.0 + fs-extra: 10.1.0 + jest: 27.5.1(ts-node@10.9.1) + jest-watch-typeahead: 0.6.5(jest@27.5.1) + jpjs: 1.2.1 + lodash.merge: 4.6.2 + ora: 5.4.1 + pascal-case: 3.1.2 + postcss: 8.4.24 + prettier: 2.8.8 + progress-estimator: 0.3.1 + regenerator-runtime: 0.13.11 + rollup: 2.79.1 + rollup-plugin-delete: 2.0.0 + rollup-plugin-dts: 4.2.3(rollup@2.79.1)(typescript@4.9.5) + rollup-plugin-sourcemaps: 0.6.3(@types/node@17.0.23)(rollup@2.79.1) + rollup-plugin-terser: 7.0.2(rollup@2.79.1) + rollup-plugin-typescript2: 0.31.2(rollup@2.79.1)(typescript@4.9.5) + sade: 1.8.1 + semver: 7.5.0 + shelljs: 0.8.5 + sort-package-json: 1.57.0 + tiny-glob: 0.2.9 + ts-jest: 27.1.5(@babel/core@7.22.5)(@types/jest@27.5.2)(jest@27.5.1)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@17.0.23)(typescript@4.9.5) + tslib: 2.5.0 + type-fest: 2.19.0 + typescript: 4.9.5 + transitivePeerDependencies: + - '@babel/plugin-syntax-flow' + - '@babel/plugin-transform-react-jsx' + - '@swc/core' + - '@swc/wasm' + - '@types/babel__core' + - '@types/node' + - babel-jest + - bufferutil + - canvas + - esbuild + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - node-notifier + - supports-color + - utf-8-validate + dev: true + /duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -10209,6 +11301,14 @@ packages: tapable: 2.2.1 dev: true + /enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: true + /enquirer@2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} @@ -10330,6 +11430,10 @@ packages: stop-iteration-iterator: 1.0.0 dev: true + /es-module-lexer@1.3.0: + resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==} + dev: true + /es-set-tostringtag@2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} @@ -10412,36 +11516,6 @@ packages: '@esbuild/win32-x64': 0.17.6 dev: true - /esbuild@0.18.11: - resolution: {integrity: sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.11 - '@esbuild/android-arm64': 0.18.11 - '@esbuild/android-x64': 0.18.11 - '@esbuild/darwin-arm64': 0.18.11 - '@esbuild/darwin-x64': 0.18.11 - '@esbuild/freebsd-arm64': 0.18.11 - '@esbuild/freebsd-x64': 0.18.11 - '@esbuild/linux-arm': 0.18.11 - '@esbuild/linux-arm64': 0.18.11 - '@esbuild/linux-ia32': 0.18.11 - '@esbuild/linux-loong64': 0.18.11 - '@esbuild/linux-mips64el': 0.18.11 - '@esbuild/linux-ppc64': 0.18.11 - '@esbuild/linux-riscv64': 0.18.11 - '@esbuild/linux-s390x': 0.18.11 - '@esbuild/linux-x64': 0.18.11 - '@esbuild/netbsd-x64': 0.18.11 - '@esbuild/openbsd-x64': 0.18.11 - '@esbuild/sunos-x64': 0.18.11 - '@esbuild/win32-arm64': 0.18.11 - '@esbuild/win32-ia32': 0.18.11 - '@esbuild/win32-x64': 0.18.11 - dev: true - /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -10508,7 +11582,7 @@ packages: eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@29.5.0)(typescript@4.9.5) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) - eslint-plugin-prettier: 4.2.1(eslint@8.39.0)(prettier@2.8.8) + eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8) eslint-plugin-react: 7.32.2(eslint@8.39.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.39.0) eslint-plugin-sort-destructure-keys: 1.5.0(eslint@8.39.0) @@ -10538,7 +11612,7 @@ packages: eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@27.5.1)(typescript@4.9.5) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) - eslint-plugin-prettier: 4.2.1(eslint@8.39.0)(prettier@2.8.8) + eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8) eslint-plugin-react: 7.32.2(eslint@8.39.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.39.0) eslint-plugin-sort-destructure-keys: 1.5.0(eslint@8.39.0) @@ -10568,7 +11642,7 @@ packages: eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.2)(eslint@8.39.0)(jest@29.5.0)(typescript@4.9.5) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) - eslint-plugin-prettier: 4.2.1(eslint@8.39.0)(prettier@2.8.8) + eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8) eslint-plugin-react: 7.32.2(eslint@8.39.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.39.0) eslint-plugin-sort-destructure-keys: 1.5.0(eslint@8.39.0) @@ -10633,6 +11707,15 @@ packages: - supports-color dev: true + /eslint-config-prettier@8.8.0(eslint@8.39.0): + resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.39.0 + dev: true + /eslint-import-resolver-node@0.3.7: resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} dependencies: @@ -10723,6 +11806,21 @@ packages: - supports-color dev: true + /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.21.4)(@babel/plugin-transform-react-jsx@7.21.5)(eslint@8.39.0): + resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@babel/plugin-syntax-flow': ^7.14.5 + '@babel/plugin-transform-react-jsx': ^7.14.9 + eslint: ^8.1.0 + dependencies: + '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx': 7.21.5(@babel/core@7.22.5) + eslint: 8.39.0 + lodash: 4.17.21 + string-natural-compare: 3.0.1 + dev: true + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} @@ -10772,7 +11870,7 @@ packages: '@typescript-eslint/eslint-plugin': 5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.39.0)(typescript@4.9.5) '@typescript-eslint/utils': 5.59.2(eslint@8.39.0)(typescript@4.9.5) eslint: 8.39.0 - jest: 27.5.1 + jest: 27.5.1(ts-node@10.9.1) transitivePeerDependencies: - supports-color - typescript @@ -10825,7 +11923,7 @@ packages: semver: 6.3.0 dev: true - /eslint-plugin-prettier@4.2.1(eslint@8.39.0)(prettier@2.8.8): + /eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0)(eslint@8.39.0)(prettier@2.8.8): resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -10837,6 +11935,7 @@ packages: optional: true dependencies: eslint: 8.39.0 + eslint-config-prettier: 8.8.0(eslint@8.39.0) prettier: 2.8.8 prettier-linter-helpers: 1.0.0 dev: true @@ -10884,6 +11983,19 @@ packages: natural-compare-lite: 1.4.0 dev: true + /eslint-plugin-testing-library@5.11.0(eslint@8.39.0)(typescript@4.9.5): + resolution: {integrity: sha512-ELY7Gefo+61OfXKlQeXNIDVVLPcvKTeiQOoMZG9TeuWa7Ln4dUNRv8JdRWBQI9Mbb427XGlVB1aa1QPZxBJM8Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@typescript-eslint/utils': 5.59.2(eslint@8.39.0)(typescript@4.9.5) + eslint: 8.39.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /eslint-plugin-unicorn@41.0.1(eslint@8.39.0): resolution: {integrity: sha512-gF5vo2dIj0YdNMQ/IMegiBkQdQ22GBFFVpdkJP+0og3w7XD4ypea0xQVRv6iofkLVR2w0phAdikcnU01ybd4Ow==} engines: {node: '>=12'} @@ -11027,6 +12139,23 @@ packages: dependencies: estraverse: 5.3.0 + /estimo@2.3.6: + resolution: {integrity: sha512-aPd3VTQAL1TyDyhFfn6fqBTJ9WvbRZVN4Z29Buk6+P6xsI0DuF5Mh3dGv6kYCUxWnZkB4Jt3aYglUxOtuwtxoA==} + engines: {node: '>=12'} + hasBin: true + dependencies: + '@sitespeed.io/tracium': 0.3.3 + commander: 9.5.0 + find-chrome-bin: 0.1.0 + nanoid: 3.3.6 + puppeteer-core: 13.7.0 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + /estraverse@4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} @@ -11078,6 +12207,10 @@ packages: resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} dev: true + /estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + dev: true + /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} dev: true @@ -11155,6 +12288,21 @@ packages: strip-eof: 1.0.0 dev: false + /execa@4.1.0: + resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 5.2.0 + human-signals: 1.1.1 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + /execa@5.0.0: resolution: {integrity: sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==} engines: {node: '>=10'} @@ -11470,6 +12618,20 @@ packages: - supports-color dev: false + /extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + dependencies: + debug: 4.3.4(supports-color@6.1.0) + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.0 + transitivePeerDependencies: + - supports-color + dev: true + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -11580,6 +12742,12 @@ packages: - encoding dev: false + /fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + dependencies: + pend: 1.2.0 + dev: true + /fetch-retry@4.1.1: resolution: {integrity: sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==} dev: false @@ -11588,6 +12756,12 @@ packages: resolution: {integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==} dev: false + /figlet@1.6.0: + resolution: {integrity: sha512-31EQGhCEITv6+hi2ORRPyn3bulaV9Fl4xOdR169cBzH/n1UqcxsiSB/noo6SJdD7Kfb1Ljit+IgR1USvF/XbdA==} + engines: {node: '>= 0.4.0'} + hasBin: true + dev: true + /figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -11708,7 +12882,11 @@ packages: commondir: 1.0.1 make-dir: 3.1.0 pkg-dir: 4.2.0 - dev: false + + /find-chrome-bin@0.1.0: + resolution: {integrity: sha512-XoFZwaEn1R3pE6zNG8kH64l2e093hgB9+78eEKPmJK0o1EXEou+25cEWdtu2qq4DBQPDSe90VJAWVI2Sz9pX6Q==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true /find-up@2.1.0: resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} @@ -12288,6 +13466,7 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 + dev: false /glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} @@ -12364,6 +13543,10 @@ packages: dependencies: define-properties: 1.2.0 + /globalyzer@0.1.0: + resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} + dev: true + /globby@10.0.0: resolution: {integrity: sha512-3LifW9M4joGZasyYPz2A1U74zbC/45fvpXUvO/9KbSa+VV0aGZarWkfdgKyR9sExNP0t0x0ss/UMJpNpcaTspw==} engines: {node: '>=8'} @@ -12378,6 +13561,20 @@ packages: slash: 3.0.0 dev: true + /globby@10.0.2: + resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} + engines: {node: '>=8'} + dependencies: + '@types/glob': 7.2.0 + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.12 + glob: 7.2.3 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + /globby@11.0.1: resolution: {integrity: sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==} engines: {node: '>=10'} @@ -12423,6 +13620,10 @@ packages: pinkie-promise: 2.0.1 dev: false + /globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + dev: true + /gonzales-pe@4.3.0: resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==} engines: {node: '>=0.6.0'} @@ -13000,6 +14201,11 @@ packages: transitivePeerDependencies: - supports-color + /human-signals@1.1.1: + resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} + engines: {node: '>=8.12.0'} + dev: true + /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -13010,6 +14216,10 @@ packages: engines: {node: '>=14.18.0'} dev: true + /humanize-duration@3.28.0: + resolution: {integrity: sha512-jMAxraOOmHuPbffLVDKkEKi/NeG8dMqP8lGRd6Tbf7JgAeG33jjgPWDbXXU7ypCI0o+oNKJFgbSB9FKVdWNI2A==} + dev: true + /humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} dependencies: @@ -13168,7 +14378,7 @@ packages: promzard: 0.3.0 read: 1.0.7 read-package-json: 5.0.1 - semver: 7.5.0 + semver: 7.5.3 validate-npm-package-license: 3.0.4 validate-npm-package-name: 4.0.0 dev: true @@ -13246,6 +14456,11 @@ packages: engines: {node: '>=12'} dev: false + /interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + dev: true + /intersection-observer@0.12.2: resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==} dev: false @@ -13565,6 +14780,10 @@ packages: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} dev: true + /is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + dev: true + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -13650,6 +14869,12 @@ packages: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true + /is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + dependencies: + '@types/estree': 1.0.1 + dev: true + /is-reference@3.0.1: resolution: {integrity: sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==} dependencies: @@ -13813,8 +15038,8 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.21.8 - '@babel/parser': 7.21.8 + '@babel/core': 7.22.5 + '@babel/parser': 7.22.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -13946,7 +15171,7 @@ packages: - supports-color dev: true - /jest-cli@27.5.1: + /jest-cli@27.5.1(ts-node@10.9.1): resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true @@ -13956,14 +15181,14 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 27.5.1 + '@jest/core': 27.5.1(ts-node@10.9.1) '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 27.5.1 + jest-config: 27.5.1(ts-node@10.9.1) jest-util: 27.5.1 jest-validate: 27.5.1 prompts: 2.4.2 @@ -14004,7 +15229,7 @@ packages: - ts-node dev: true - /jest-config@27.5.1: + /jest-config@27.5.1(ts-node@10.9.1): resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: @@ -14037,6 +15262,7 @@ packages: pretty-format: 27.5.1 slash: 3.0.0 strip-json-comments: 3.1.1 + ts-node: 10.9.1(@types/node@17.0.23)(typescript@4.9.5) transitivePeerDependencies: - bufferutil - canvas @@ -14056,11 +15282,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.5 '@jest/test-sequencer': 29.5.0 '@jest/types': 29.5.0 '@types/node': 17.0.23 - babel-jest: 29.5.0(@babel/core@7.21.8) + babel-jest: 29.5.0(@babel/core@7.22.5) chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.3.1 @@ -14604,7 +15830,7 @@ packages: jest-util: 27.5.1 natural-compare: 1.4.0 pretty-format: 27.5.1 - semver: 7.5.0 + semver: 7.5.3 transitivePeerDependencies: - supports-color dev: true @@ -14613,18 +15839,18 @@ packages: resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.21.8 - '@babel/generator': 7.21.5 - '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.8) - '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.8) - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 + '@babel/core': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.22.5) + '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.22.5) + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 '@jest/expect-utils': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@types/babel__traverse': 7.18.5 '@types/prettier': 2.7.2 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.8) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) chalk: 4.1.2 expect: 29.5.0 graceful-fs: 4.2.11 @@ -14635,7 +15861,7 @@ packages: jest-util: 29.5.0 natural-compare: 1.4.0 pretty-format: 29.5.0 - semver: 7.5.0 + semver: 7.5.3 transitivePeerDependencies: - supports-color dev: true @@ -14699,6 +15925,22 @@ packages: pretty-format: 29.5.0 dev: true + /jest-watch-typeahead@0.6.5(jest@27.5.1): + resolution: {integrity: sha512-GIbV6h37/isatMDtqZlA8Q5vC6T3w+5qdvtF+3LIkPc58zEWzbKmTHvlUIp3wvBm400RzrQWcVPcsAJqKWu7XQ==} + engines: {node: '>=10'} + peerDependencies: + jest: ^26.0.0 || ^27.0.0 + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + jest: 27.5.1(ts-node@10.9.1) + jest-regex-util: 27.5.1 + jest-watcher: 27.5.1 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + dev: true + /jest-watcher@27.5.1: resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -14733,7 +15975,6 @@ packages: '@types/node': 17.0.23 merge-stream: 2.0.0 supports-color: 7.2.0 - dev: false /jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} @@ -14753,7 +15994,7 @@ packages: supports-color: 8.1.1 dev: true - /jest@27.5.1: + /jest@27.5.1(ts-node@10.9.1): resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true @@ -14763,9 +16004,9 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 27.5.1 + '@jest/core': 27.5.1(ts-node@10.9.1) import-local: 3.1.0 - jest-cli: 27.5.1 + jest-cli: 27.5.1(ts-node@10.9.1) transitivePeerDependencies: - bufferutil - canvas @@ -14816,9 +16057,8 @@ packages: resolution: {integrity: sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==} dev: false - /joycon@3.1.1: - resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} - engines: {node: '>=10'} + /jpjs@1.2.1: + resolution: {integrity: sha512-GxJWybWU4NV0RNKi6EIqk6IRPOTqd/h+U7sbtyuD7yUISUzV78LdHnq2xkevJsTlz/EImux4sWj+wfMiwKLkiw==} dev: true /js-sdsl@4.4.0: @@ -14856,17 +16096,17 @@ packages: peerDependencies: '@babel/preset-env': ^7.1.6 dependencies: - '@babel/core': 7.21.8 - '@babel/parser': 7.21.8 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.21.8) + '@babel/core': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.5) '@babel/preset-env': 7.22.5(@babel/core@7.21.8) - '@babel/preset-flow': 7.21.4(@babel/core@7.21.8) - '@babel/preset-typescript': 7.21.5(@babel/core@7.21.8) - '@babel/register': 7.21.0(@babel/core@7.21.8) - babel-core: 7.0.0-bridge.0(@babel/core@7.21.8) + '@babel/preset-flow': 7.21.4(@babel/core@7.22.5) + '@babel/preset-typescript': 7.21.5(@babel/core@7.22.5) + '@babel/register': 7.21.0(@babel/core@7.22.5) + babel-core: 7.0.0-bridge.0(@babel/core@7.22.5) chalk: 4.1.2 flow-parser: 0.121.0 graceful-fs: 4.2.11 @@ -15300,7 +16540,7 @@ packages: npm-package-arg: 10.1.0 npm-registry-fetch: 14.0.5 proc-log: 3.0.0 - semver: 7.5.0 + semver: 7.5.3 sigstore: 1.4.0 ssri: 10.0.4 transitivePeerDependencies: @@ -15339,16 +16579,16 @@ packages: type-fest: 0.6.0 dev: true - /load-tsconfig@0.2.5: - resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - /loader-runner@2.4.0: resolution: {integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==} engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} dev: false + /loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + dev: true + /loader-utils@1.4.2: resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==} engines: {node: '>=4.0.0'} @@ -15441,15 +16681,10 @@ packages: /lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - dev: false /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - /lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - dev: true - /lodash.throttle@4.1.1: resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} @@ -15474,6 +16709,15 @@ packages: chalk: 4.1.2 is-unicode-supported: 0.1.0 + /log-update@2.3.0: + resolution: {integrity: sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==} + engines: {node: '>=4'} + dependencies: + ansi-escapes: 3.2.0 + cli-cursor: 2.1.0 + wrap-ansi: 3.0.1 + dev: true + /logkitty@0.7.1: resolution: {integrity: sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==} hasBin: true @@ -15507,7 +16751,6 @@ packages: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: tslib: 2.5.0 - dev: false /lowercase-keys@2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} @@ -15553,6 +16796,13 @@ packages: sourcemap-codec: 1.4.8 dev: true + /magic-string@0.26.7: + resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} + engines: {node: '>=12'} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + /magic-string@0.30.0: resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} engines: {node: '>=12'} @@ -15573,6 +16823,10 @@ packages: dependencies: semver: 6.3.0 + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + /make-fetch-happen@10.2.1: resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -16041,7 +17295,7 @@ packages: /metro-babel-transformer@0.72.3: resolution: {integrity: sha512-PTOR2zww0vJbWeeM3qN90WKENxCLzv9xrwWaNtwVlhcV8/diNdNe82sE1xIxLFI6OQuAVwNMv1Y7VsO2I7Ejrw==} dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.22.5 hermes-parser: 0.8.0 metro-source-map: 0.72.3 nullthrows: 1.1.1 @@ -16146,31 +17400,79 @@ packages: '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.21.8) '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.8) '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-transform-arrow-functions': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-transform-computed-properties': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.8) - '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.8) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-classes': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.21.8) '@babel/plugin-transform-flow-strip-types': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.8) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.8) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.21.8) '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.21.8) '@babel/plugin-transform-react-jsx': 7.21.5(@babel/core@7.21.8) '@babel/plugin-transform-react-jsx-self': 7.21.0(@babel/core@7.21.8) '@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.21.8) '@babel/plugin-transform-runtime': 7.21.4(@babel/core@7.21.8) - '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.8) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.21.8) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.21.8) '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.21.8) - '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.8) - '@babel/template': 7.20.7 + '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.21.8) + '@babel/template': 7.22.5 + react-refresh: 0.4.3 + transitivePeerDependencies: + - supports-color + dev: false + + /metro-react-native-babel-preset@0.72.3(@babel/core@7.22.5): + resolution: {integrity: sha512-uJx9y/1NIqoYTp6ZW1osJ7U5ZrXGAJbOQ/Qzl05BdGYvN1S7Qmbzid6xOirgK0EIT0pJKEEh1s8qbassYZe4cw==} + peerDependencies: + '@babel/core': '*' + dependencies: + '@babel/core': 7.22.5 + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.22.5) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-export-default-from': 7.18.10(@babel/core@7.22.5) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.22.5) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-export-default-from': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-syntax-flow': 7.21.4(@babel/core@7.22.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-classes': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-flow-strip-types': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx': 7.21.5(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx-self': 7.21.0(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.22.5) + '@babel/plugin-transform-runtime': 7.21.4(@babel/core@7.22.5) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.22.5) + '@babel/template': 7.22.5 react-refresh: 0.4.3 transitivePeerDependencies: - supports-color @@ -16238,10 +17540,10 @@ packages: /metro-transform-plugins@0.72.3: resolution: {integrity: sha512-D+TcUvCKZbRua1+qujE0wV1onZvslW6cVTs7dLCyC2pv20lNHjFr1GtW01jN2fyKR2PcRyMjDCppFd9VwDKnSg==} dependencies: - '@babel/core': 7.21.8 - '@babel/generator': 7.21.5 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.5 + '@babel/core': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 nullthrows: 1.1.1 transitivePeerDependencies: - supports-color @@ -16250,11 +17552,11 @@ packages: /metro-transform-worker@0.72.3: resolution: {integrity: sha512-WsuWj9H7i6cHuJuy+BgbWht9DK5FOgJxHLGAyULD5FJdTG9rSMFaHDO5WfC0OwQU5h4w6cPT40iDuEGksM7+YQ==} dependencies: - '@babel/core': 7.21.8 - '@babel/generator': 7.21.5 - '@babel/parser': 7.21.8 - '@babel/types': 7.21.5 - babel-preset-fbjs: 3.4.0(@babel/core@7.21.8) + '@babel/core': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/types': 7.22.5 + babel-preset-fbjs: 3.4.0(@babel/core@7.22.5) metro: 0.72.3 metro-babel-transformer: 0.72.3 metro-cache: 0.72.3 @@ -16275,12 +17577,12 @@ packages: hasBin: true dependencies: '@babel/code-frame': 7.22.5 - '@babel/core': 7.21.8 - '@babel/generator': 7.21.5 - '@babel/parser': 7.21.8 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 + '@babel/core': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 absolute-path: 0.0.0 accepts: 1.3.8 async: 3.2.4 @@ -16306,7 +17608,7 @@ packages: metro-hermes-compiler: 0.72.3 metro-inspector-proxy: 0.72.3 metro-minify-uglify: 0.72.3 - metro-react-native-babel-preset: 0.72.3(@babel/core@7.21.8) + metro-react-native-babel-preset: 0.72.3(@babel/core@7.22.5) metro-resolver: 0.72.3 metro-runtime: 0.72.3 metro-source-map: 0.72.3 @@ -16718,7 +18020,6 @@ packages: /mimic-fn@1.2.0: resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} engines: {node: '>=4'} - dev: false /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} @@ -17051,6 +18352,7 @@ packages: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 + dev: false /nan@2.17.0: resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} @@ -17082,6 +18384,12 @@ packages: - supports-color dev: false + /nanospinner@1.1.0: + resolution: {integrity: sha512-yFvNYMig4AthKYfHFl1sLj7B2nkHL4lzdig4osvl9/LdGbXwrdFRoqBS98gsEsOakr0yH+r5NZ/1Y9gdVB8trA==} + dependencies: + picocolors: 1.0.0 + dev: true + /natural-compare-lite@1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} dev: true @@ -17307,7 +18615,6 @@ packages: dependencies: lower-case: 2.0.2 tslib: 2.5.0 - dev: false /nocache@3.0.4: resolution: {integrity: sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==} @@ -17379,7 +18686,7 @@ packages: nopt: 6.0.0 npmlog: 6.0.2 rimraf: 3.0.2 - semver: 7.5.0 + semver: 7.5.3 tar: 6.1.14 which: 2.0.2 transitivePeerDependencies: @@ -17478,7 +18785,7 @@ packages: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.12.0 - semver: 7.5.0 + semver: 7.5.3 validate-npm-package-license: 3.0.4 dev: true @@ -17488,7 +18795,7 @@ packages: dependencies: hosted-git-info: 5.2.1 is-core-module: 2.12.0 - semver: 7.5.0 + semver: 7.5.3 validate-npm-package-license: 3.0.4 dev: true @@ -17498,7 +18805,7 @@ packages: dependencies: hosted-git-info: 6.1.1 is-core-module: 2.12.0 - semver: 7.5.0 + semver: 7.5.3 validate-npm-package-license: 3.0.4 dev: true @@ -17545,7 +18852,7 @@ packages: resolution: {integrity: sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - semver: 7.5.0 + semver: 7.5.3 dev: true /npm-normalize-package-bin@1.0.1: @@ -17563,7 +18870,7 @@ packages: dependencies: hosted-git-info: 6.1.1 proc-log: 3.0.0 - semver: 7.5.0 + semver: 7.5.3 validate-npm-package-name: 5.0.0 dev: true @@ -17581,7 +18888,7 @@ packages: engines: {node: '>=10'} dependencies: hosted-git-info: 3.0.8 - semver: 7.5.0 + semver: 7.5.3 validate-npm-package-name: 3.0.0 dev: true @@ -17591,7 +18898,7 @@ packages: dependencies: hosted-git-info: 5.2.1 proc-log: 2.0.1 - semver: 7.5.0 + semver: 7.5.3 validate-npm-package-name: 4.0.0 dev: true @@ -17620,7 +18927,7 @@ packages: npm-install-checks: 6.1.1 npm-normalize-package-bin: 3.0.1 npm-package-arg: 10.1.0 - semver: 7.5.0 + semver: 7.5.3 dev: true /npm-registry-fetch@13.3.1: @@ -17938,7 +19245,6 @@ packages: engines: {node: '>=4'} dependencies: mimic-fn: 1.2.0 - dev: false /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} @@ -18156,6 +19462,13 @@ packages: engines: {node: '>=6'} dev: false + /p-map@3.0.0: + resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} + engines: {node: '>=8'} + dependencies: + aggregate-error: 3.1.0 + dev: true + /p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} @@ -18390,7 +19703,6 @@ packages: dependencies: no-case: 3.0.4 tslib: 2.5.0 - dev: false /pascalcase@0.1.1: resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} @@ -18432,6 +19744,12 @@ packages: resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} dev: false + /path-is-network-drive@1.0.20: + resolution: {integrity: sha512-p5wCWlRB4+ggzxWshqHH9aF3kAuVu295NaENXmVhThbZPJQBeJdxZTP6CIoUR+kWHDUW56S9YcaO1gXnc/BOxw==} + dependencies: + tslib: 2.5.0 + dev: true + /path-key@2.0.1: resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} engines: {node: '>=4'} @@ -18457,6 +19775,12 @@ packages: minipass: 5.0.0 dev: true + /path-strip-sep@1.0.17: + resolution: {integrity: sha512-+2zIC2fNgdilgV7pTrktY6oOxxZUo9x5zJYfTzxsGze5kSGDDwhA5/0WlBn+sUyv/WuuyYn3OfM+Ue5nhdQUgA==} + dependencies: + tslib: 2.5.0 + dev: true + /path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} @@ -18498,6 +19822,10 @@ packages: through2: 2.0.5 dev: true + /pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + dev: true + /periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} dependencies: @@ -18563,6 +19891,13 @@ packages: dependencies: find-up: 4.1.0 + /pkg-dir@5.0.0: + resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} + engines: {node: '>=10'} + dependencies: + find-up: 5.0.0 + dev: true + /pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: @@ -18639,7 +19974,7 @@ packages: resolution: {integrity: sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 color: 3.2.1 has: 1.0.3 postcss: 7.0.39 @@ -18800,7 +20135,7 @@ packages: resolution: {integrity: sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 caniuse-api: 3.0.0 cssnano-util-same-parent: 4.0.1 postcss: 7.0.39 @@ -18831,7 +20166,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: alphanum-sort: 1.0.2 - browserslist: 4.21.5 + browserslist: 4.21.9 cssnano-util-get-arguments: 4.0.0 postcss: 7.0.39 postcss-value-parser: 3.3.1 @@ -19015,7 +20350,7 @@ packages: resolution: {integrity: sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 postcss: 7.0.39 postcss-value-parser: 3.3.1 dev: false @@ -19051,7 +20386,7 @@ packages: resolution: {integrity: sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 caniuse-api: 3.0.0 has: 1.0.3 postcss: 7.0.39 @@ -19329,10 +20664,18 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + /progress-estimator@0.3.1: + resolution: {integrity: sha512-I5bwE35adOrA2rfZ9iHHPESUp5C6cXrZd0J8LdFD9J+66ijSugBwZHooPCROf94Ox8YZaUyvTLViqSiRvBhSoA==} + dependencies: + chalk: 2.4.2 + cli-spinners: 1.3.1 + humanize-duration: 3.28.0 + log-update: 2.3.0 + dev: true + /progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} - dev: false /promise-all-reject-late@1.0.1: resolution: {integrity: sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==} @@ -19492,6 +20835,29 @@ packages: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} + /puppeteer-core@13.7.0: + resolution: {integrity: sha512-rXja4vcnAzFAP1OVLq/5dWNfwBGuzcOARJ6qGV7oAZhnLmVRU8G5MsdeQEAOy332ZhkIOnn9jp15R89LKHyp2Q==} + engines: {node: '>=10.18.1'} + dependencies: + cross-fetch: 3.1.5 + debug: 4.3.4(supports-color@6.1.0) + devtools-protocol: 0.0.981744 + extract-zip: 2.0.1 + https-proxy-agent: 5.0.1 + pkg-dir: 4.2.0 + progress: 2.0.3 + proxy-from-env: 1.1.0 + rimraf: 3.0.2 + tar-fs: 2.1.1 + unbzip2-stream: 1.4.3 + ws: 8.5.0 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + /pure-rand@6.0.2: resolution: {integrity: sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==} dev: true @@ -19547,7 +20913,6 @@ packages: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 - dev: false /randomfill@1.0.4: resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} @@ -19800,6 +21165,14 @@ packages: react-is: 18.2.0 dev: false + /react@17.0.2: + resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + dev: true + /react@18.1.0: resolution: {integrity: sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==} engines: {node: '>=0.10.0'} @@ -19991,6 +21364,13 @@ packages: tslib: 2.5.0 dev: true + /rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + dependencies: + resolve: 1.22.2 + dev: true + /recursive-readdir@2.2.2: resolution: {integrity: sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==} engines: {node: '>=0.10.0'} @@ -20333,7 +21713,6 @@ packages: dependencies: onetime: 2.0.1 signal-exit: 3.0.7 - dev: false /restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} @@ -20415,6 +21794,27 @@ packages: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} dev: false + /rollup-plugin-delete@2.0.0: + resolution: {integrity: sha512-/VpLMtDy+8wwRlDANuYmDa9ss/knGsAgrDhM+tEwB1npHwNu4DYNmDfUL55csse/GHs9Q+SMT/rw9uiaZ3pnzA==} + engines: {node: '>=10'} + dependencies: + del: 5.1.0 + dev: true + + /rollup-plugin-dts@4.2.3(rollup@2.79.1)(typescript@4.9.5): + resolution: {integrity: sha512-jlcpItqM2efqfIiKzDB/IKOS9E9fDvbkJSGw5GtK/PqPGS9eC3R3JKyw2VvpTktZA+TNgJRMu1NTv244aTUzzQ==} + engines: {node: '>=v12.22.12'} + peerDependencies: + rollup: ^2.55 + typescript: ^4.1 + dependencies: + magic-string: 0.26.7 + rollup: 2.79.1 + typescript: 4.9.5 + optionalDependencies: + '@babel/code-frame': 7.22.5 + dev: true + /rollup-plugin-inject@3.0.2: resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. @@ -20430,12 +21830,65 @@ packages: rollup-plugin-inject: 3.0.2 dev: true + /rollup-plugin-sourcemaps@0.6.3(@types/node@17.0.23)(rollup@2.79.1): + resolution: {integrity: sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==} + engines: {node: '>=10.0.0'} + peerDependencies: + '@types/node': '>=10.0.0' + rollup: '>=0.31.2' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + '@types/node': 17.0.23 + rollup: 2.79.1 + source-map-resolve: 0.6.0 + dev: true + + /rollup-plugin-terser@7.0.2(rollup@2.79.1): + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser + peerDependencies: + rollup: ^2.0.0 + dependencies: + '@babel/code-frame': 7.22.5 + jest-worker: 26.6.2 + rollup: 2.79.1 + serialize-javascript: 4.0.0 + terser: 5.18.2 + dev: true + + /rollup-plugin-typescript2@0.31.2(rollup@2.79.1)(typescript@4.9.5): + resolution: {integrity: sha512-hRwEYR1C8xDGVVMFJQdEVnNAeWRvpaY97g5mp3IeLnzhNXzSVq78Ye/BJ9PAaUfN4DXa/uDnqerifMOaMFY54Q==} + peerDependencies: + rollup: '>=1.26.3' + typescript: '>=2.4.0' + dependencies: + '@rollup/pluginutils': 4.2.1 + '@yarn-tool/resolve-package': 1.0.47 + find-cache-dir: 3.3.2 + fs-extra: 10.1.0 + resolve: 1.22.2 + rollup: 2.79.1 + tslib: 2.5.0 + typescript: 4.9.5 + dev: true + /rollup-pluginutils@2.8.2: resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} dependencies: estree-walker: 0.6.1 dev: true + /rollup@2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + /rollup@3.21.4: resolution: {integrity: sha512-N5LxpvDolOm9ueiCp4NfB80omMDqb45ShtsQw2+OT3f11uJ197dv703NZvznYHP6RWR85wfxanXurXKG3ux2GQ==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} @@ -20583,6 +22036,15 @@ packages: ajv-keywords: 3.5.2(ajv@6.12.6) dev: false + /schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/json-schema': 7.0.11 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: true + /scroll-into-view-if-needed@3.0.10: resolution: {integrity: sha512-t44QCeDKAPf1mtQH3fYpWz8IM/DyvHLjs8wUvvwMYxk5moOqCzrMSxK6HQVD0QVmVjXFavoFIPRVrMuJPKAvtg==} dependencies: @@ -20642,6 +22104,14 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 + dev: true + + /semver@7.5.3: + resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 /send@0.18.0(supports-color@6.1.0): resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} @@ -20679,7 +22149,12 @@ packages: resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} dependencies: randombytes: 2.1.0 - dev: false + + /serialize-javascript@6.0.1: + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} + dependencies: + randombytes: 2.1.0 + dev: true /serve-index@1.9.1(supports-color@6.1.0): resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} @@ -20782,6 +22257,16 @@ packages: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} dev: false + /shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + dev: true + /shiki@0.14.2: resolution: {integrity: sha512-ltSZlSLOuSY0M0Y75KA+ieRaZ0Trf5Wl3gutE7jzLuIcWxLp5i/uEnLoQWNvgKXQ5OMpGkJnVMRLAuzjc0LJ2A==} dependencies: @@ -20839,6 +22324,19 @@ packages: /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + /size-limit@8.2.6: + resolution: {integrity: sha512-zpznim/tX/NegjoQuRKgWTF4XiB0cn2qt90uJzxYNTFAqexk4b94DOAkBD3TwhC6c3kw2r0KcnA5upziVMZqDg==} + engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} + hasBin: true + dependencies: + bytes-iec: 3.1.1 + chokidar: 3.5.3 + globby: 11.1.0 + lilconfig: 2.1.0 + nanospinner: 1.1.0 + picocolors: 1.0.0 + dev: true + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -20999,6 +22497,14 @@ packages: urix: 0.1.0 dev: false + /source-map-resolve@0.6.0: + resolution: {integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.2 + dev: true + /source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: @@ -21030,13 +22536,6 @@ packages: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} - /source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} - dependencies: - whatwg-url: 7.1.0 - dev: true - /sourcemap-codec@1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead @@ -21246,6 +22745,18 @@ packages: strip-ansi: 6.0.1 dev: true + /string-natural-compare@3.0.1: + resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==} + dev: true + + /string-width@2.1.1: + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} + engines: {node: '>=4'} + dependencies: + is-fullwidth-code-point: 2.0.0 + strip-ansi: 4.0.0 + dev: true + /string-width@3.1.0: resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} engines: {node: '>=6'} @@ -21333,6 +22844,13 @@ packages: ansi-regex: 2.1.1 dev: false + /strip-ansi@4.0.0: + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} + engines: {node: '>=4'} + dependencies: + ansi-regex: 3.0.1 + dev: true + /strip-ansi@5.2.0: resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} engines: {node: '>=6'} @@ -21463,7 +22981,7 @@ packages: resolution: {integrity: sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==} engines: {node: '>=6.9.0'} dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 postcss: 7.0.39 postcss-selector-parser: 3.1.2 dev: false @@ -21488,6 +23006,7 @@ packages: mz: 2.7.0 pirates: 4.0.5 ts-interface-checker: 0.1.13 + dev: false /sudo-prompt@8.2.5: resolution: {integrity: sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==} @@ -21796,6 +23315,30 @@ packages: - bluebird dev: false + /terser-webpack-plugin@5.3.9(webpack@5.88.1): + resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.18 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.1 + terser: 5.18.2 + webpack: 5.88.1 + dev: true + /terser@4.8.1: resolution: {integrity: sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==} engines: {node: '>=6.0.0'} @@ -21807,6 +23350,17 @@ packages: source-map-support: 0.5.21 dev: false + /terser@5.18.2: + resolution: {integrity: sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.5 + acorn: 8.8.2 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: true + /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -21829,11 +23383,13 @@ packages: engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 + dev: false /thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 + dev: false /throat@5.0.0: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} @@ -21878,6 +23434,13 @@ packages: resolution: {integrity: sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==} dev: false + /tiny-glob@0.2.9: + resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + dependencies: + globalyzer: 0.1.0 + globrex: 0.1.2 + dev: true + /tinybench@2.5.0: resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==} dev: true @@ -21988,12 +23551,6 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - /tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - dependencies: - punycode: 2.3.0 - dev: true - /tr46@2.1.0: resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} engines: {node: '>=8'} @@ -22012,11 +23569,6 @@ packages: resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} dev: false - /tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - dev: true - /treeverse@3.0.0: resolution: {integrity: sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -22041,6 +23593,73 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: false + + /ts-jest@27.1.5(@babel/core@7.22.5)(@types/jest@27.5.2)(jest@27.5.1)(typescript@4.9.5): + resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@types/jest': ^27.0.0 + babel-jest: '>=27.0.0 <28' + esbuild: '*' + jest: ^27.0.0 + typescript: '>=3.8 <5.0' + peerDependenciesMeta: + '@babel/core': + optional: true + '@types/jest': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + dependencies: + '@babel/core': 7.22.5 + '@types/jest': 27.5.2 + bs-logger: 0.2.6 + fast-json-stable-stringify: 2.1.0 + jest: 27.5.1(ts-node@10.9.1) + jest-util: 27.5.1 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.5.3 + typescript: 4.9.5 + yargs-parser: 20.2.9 + dev: true + + /ts-node@10.9.1(@types/node@17.0.23)(typescript@4.9.5): + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 17.0.23 + acorn: 8.8.2 + acorn-walk: 8.2.0 + arg: 4.1.0 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.9.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true /ts-pnp@1.2.0(typescript@4.9.5): resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} @@ -22083,42 +23702,6 @@ packages: /tslib@2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - /tsup@7.1.0(typescript@4.9.5): - resolution: {integrity: sha512-mazl/GRAk70j8S43/AbSYXGgvRP54oQeX8Un4iZxzATHt0roW0t6HYDVZIXMw0ZQIpvr1nFMniIVnN5186lW7w==} - engines: {node: '>=16.14'} - hasBin: true - peerDependencies: - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: '>=4.1.0' - peerDependenciesMeta: - '@swc/core': - optional: true - postcss: - optional: true - typescript: - optional: true - dependencies: - bundle-require: 4.0.1(esbuild@0.18.11) - cac: 6.7.14 - chokidar: 3.5.3 - debug: 4.3.4(supports-color@6.1.0) - esbuild: 0.18.11 - execa: 5.1.1 - globby: 11.1.0 - joycon: 3.1.1 - postcss-load-config: 4.0.1(postcss@8.4.23) - resolve-from: 5.0.0 - rollup: 3.21.4 - source-map: 0.8.0-beta.0 - sucrase: 3.32.0 - tree-kill: 1.2.2 - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - - ts-node - dev: true - /tsutils@3.21.0(typescript@4.9.5): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -22286,6 +23869,11 @@ packages: engines: {node: '>=10'} dev: false + /type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + dev: true + /type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -22354,6 +23942,13 @@ packages: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + /unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + dependencies: + buffer: 5.7.1 + through: 2.3.8 + dev: true + /unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} @@ -22574,6 +24169,15 @@ packages: engines: {node: '>=8'} dev: true + /upath2@3.1.19: + resolution: {integrity: sha512-d23dQLi8nDWSRTIQwXtaYqMrHuca0As53fNiTLLFDmsGBbepsZepISaB2H1x45bDFN/n3Qw9bydvyZEacTrEWQ==} + dependencies: + '@types/node': 17.0.23 + path-is-network-drive: 1.0.20 + path-strip-sep: 1.0.17 + tslib: 2.5.0 + dev: true + /upath@1.2.0: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} @@ -22754,6 +24358,10 @@ packages: kleur: 4.1.5 sade: 1.8.1 + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + /v8-compile-cache@2.3.0: resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} dev: true @@ -23101,10 +24709,6 @@ packages: /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - /webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - dev: true - /webidl-conversions@5.0.0: resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} engines: {node: '>=8'} @@ -23212,6 +24816,11 @@ packages: source-map: 0.6.1 dev: false + /webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: true + /webpack@4.43.0: resolution: {integrity: sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==} engines: {node: '>=6.11.5'} @@ -23252,6 +24861,46 @@ packages: - supports-color dev: false + /webpack@5.88.1: + resolution: {integrity: sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.4 + '@types/estree': 1.0.1 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/wasm-edit': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + acorn: 8.8.2 + acorn-import-assertions: 1.9.0(acorn@8.8.2) + browserslist: 4.21.9 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.15.0 + es-module-lexer: 1.3.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.9(webpack@5.88.1) + watchpack: 2.4.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: true + /websocket-driver@0.6.5: resolution: {integrity: sha512-oBx6ZM1Gs5q2jwZuSN/Qxyy/fbgomV8+vqsmipaPKB/74hjHlKuM07jNmRhn4qa2AdUwsgxrltq+gaPsHgcl0Q==} engines: {node: '>=0.6.0'} @@ -23318,14 +24967,6 @@ packages: tr46: 0.0.3 webidl-conversions: 3.0.1 - /whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - dev: true - /whatwg-url@8.7.0: resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} engines: {node: '>=10'} @@ -23429,6 +25070,14 @@ packages: microevent.ts: 0.1.1 dev: false + /wrap-ansi@3.0.1: + resolution: {integrity: sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==} + engines: {node: '>=4'} + dependencies: + string-width: 2.1.1 + strip-ansi: 4.0.0 + dev: true + /wrap-ansi@5.1.0: resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} engines: {node: '>=6'} @@ -23566,6 +25215,19 @@ packages: optional: true dev: true + /ws@8.5.0: + resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + /xcode@3.0.1: resolution: {integrity: sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==} engines: {node: '>=10.0.0'} @@ -23761,6 +25423,18 @@ packages: yargs-parser: 21.1.1 dev: true + /yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + dev: true + + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} diff --git a/turbo.json b/turbo.json index ce2431cc1..cc94147aa 100644 --- a/turbo.json +++ b/turbo.json @@ -16,6 +16,9 @@ "test": { "dependsOn": ["build"] }, + "size": { + "dependsOn": ["build"] + }, "lint": {} } } From 22fe5d9ad1d5e4588c18863123927c7a181dc488 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 11 Jul 2023 17:29:58 +0200 Subject: [PATCH 240/312] Upgrade TypeScript for new examples --- .../example-next-13-advanced/package.json | 2 +- .../example-next-13-named-routes/package.json | 2 +- .../example-next-13-with-pages/package.json | 2 +- pnpm-lock.yaml | 43 ++++--------------- 4 files changed, 12 insertions(+), 37 deletions(-) diff --git a/examples/example-next-13-advanced/package.json b/examples/example-next-13-advanced/package.json index 0be4f3aa9..fb886b581 100644 --- a/examples/example-next-13-advanced/package.json +++ b/examples/example-next-13-advanced/package.json @@ -27,6 +27,6 @@ "eslint": "^8.12.0", "eslint-config-molindo": "^6.0.0", "eslint-config-next": "^13.4.0", - "typescript": "^4.6.3" + "typescript": "^5.0.0" } } diff --git a/examples/example-next-13-named-routes/package.json b/examples/example-next-13-named-routes/package.json index 66f6f22f4..fd7849887 100644 --- a/examples/example-next-13-named-routes/package.json +++ b/examples/example-next-13-named-routes/package.json @@ -25,6 +25,6 @@ "eslint": "^8.12.0", "eslint-config-molindo": "^6.0.0", "eslint-config-next": "^13.4.0", - "typescript": "^4.6.3" + "typescript": "^5.0.0" } } diff --git a/examples/example-next-13-with-pages/package.json b/examples/example-next-13-with-pages/package.json index a62e5e22d..f90e35124 100644 --- a/examples/example-next-13-with-pages/package.json +++ b/examples/example-next-13-with-pages/package.json @@ -22,6 +22,6 @@ "eslint": "^8.12.0", "eslint-config-molindo": "^6.0.0", "eslint-config-next": "^13.4.0", - "typescript": "^4.6.3" + "typescript": "^5.0.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4d54a5672..19c712ce6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -291,10 +291,10 @@ importers: version: 6.0.0(eslint@8.39.0)(jest@29.5.0) eslint-config-next: specifier: ^13.4.0 - version: 13.4.0(eslint@8.39.0)(typescript@4.9.5) + version: 13.4.0(eslint@8.39.0)(typescript@5.0.4) typescript: - specifier: ^4.6.3 - version: 4.9.5 + specifier: ^5.0.0 + version: 5.0.4 examples/example-next-13-named-routes: dependencies: @@ -334,10 +334,10 @@ importers: version: 6.0.0(eslint@8.39.0)(jest@29.5.0) eslint-config-next: specifier: ^13.4.0 - version: 13.4.0(eslint@8.39.0)(typescript@4.9.5) + version: 13.4.0(eslint@8.39.0)(typescript@5.0.4) typescript: - specifier: ^4.6.3 - version: 4.9.5 + specifier: ^5.0.0 + version: 5.0.4 examples/example-next-13-next-auth: dependencies: @@ -414,10 +414,10 @@ importers: version: 6.0.0(eslint@8.39.0)(jest@29.5.0) eslint-config-next: specifier: ^13.4.0 - version: 13.4.0(eslint@8.39.0)(typescript@4.9.5) + version: 13.4.0(eslint@8.39.0)(typescript@5.0.4) typescript: - specifier: ^4.6.3 - version: 4.9.5 + specifier: ^5.0.0 + version: 5.0.4 examples/example-react-native: dependencies: @@ -11648,31 +11648,6 @@ packages: - supports-color dev: true - /eslint-config-next@13.4.0(eslint@8.39.0)(typescript@4.9.5): - resolution: {integrity: sha512-FkO3QRyUEKAHM4ie0xAcxo7fQ8gWevuLqgf6/g1Y6zWybqSa4FNeJr4hqqTbP25xIRgUUIPILBlx9RSH4C6+gQ==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@next/eslint-plugin-next': 13.4.0 - '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/parser': 5.59.2(eslint@8.39.0)(typescript@4.9.5) - eslint: 8.39.0 - eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.39.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.2)(eslint-import-resolver-typescript@3.5.5)(eslint@8.39.0) - eslint-plugin-jsx-a11y: 6.7.1(eslint@8.39.0) - eslint-plugin-react: 7.32.2(eslint@8.39.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.39.0) - typescript: 4.9.5 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - supports-color - dev: true - /eslint-config-next@13.4.0(eslint@8.39.0)(typescript@5.0.4): resolution: {integrity: sha512-FkO3QRyUEKAHM4ie0xAcxo7fQ8gWevuLqgf6/g1Y6zWybqSa4FNeJr4hqqTbP25xIRgUUIPILBlx9RSH4C6+gQ==} peerDependencies: From b423baa7e6fb23ea241a547f64e75f2a1d2c0ad5 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 11 Jul 2023 18:13:51 +0200 Subject: [PATCH 241/312] fix(RSC): Return `string` from `(await getTranslator()).rich` (#395) To be in sync with the `createTranslator` API --- packages/next-intl/dts.config.js | 2 +- packages/next-intl/package.json | 1 + .../src/react-server/getBaseTranslator.tsx | 128 ++++++++++++++++++ .../src/react-server/useTranslations.tsx | 11 +- .../next-intl/src/server/getTranslations.tsx | 18 +-- .../next-intl/src/server/getTranslator.tsx | 18 +-- .../test/server/getTranslator.test.tsx | 84 ++++++++++++ packages/use-intl/dts.config.js | 2 +- pnpm-lock.yaml | 22 ++- 9 files changed, 246 insertions(+), 40 deletions(-) create mode 100644 packages/next-intl/src/react-server/getBaseTranslator.tsx create mode 100644 packages/next-intl/test/server/getTranslator.test.tsx diff --git a/packages/next-intl/dts.config.js b/packages/next-intl/dts.config.js index 82f1fcb7b..0d711aa6f 100644 --- a/packages/next-intl/dts.config.js +++ b/packages/next-intl/dts.config.js @@ -1,7 +1,7 @@ /* global module */ /** - * @type {import('dts-cli').DtsConfig} + * @type {import('dts-cli').DtsOptions} */ module.exports = { rollup(config) { diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index baeb032da..d85b9a652 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -85,6 +85,7 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "devDependencies": { + "@edge-runtime/vm": "^3.0.3", "@size-limit/preset-big-lib": "^8.2.6", "@testing-library/react": "^13.0.0", "@types/negotiator": "^0.6.1", diff --git a/packages/next-intl/src/react-server/getBaseTranslator.tsx b/packages/next-intl/src/react-server/getBaseTranslator.tsx new file mode 100644 index 000000000..04bdda244 --- /dev/null +++ b/packages/next-intl/src/react-server/getBaseTranslator.tsx @@ -0,0 +1,128 @@ +/* eslint-disable import/default -- False positives */ + +import {ReactElement, ReactNodeArray, cache} from 'react'; +import type Formats from 'use-intl/dist/src/core/Formats'; +import type TranslationValues from 'use-intl/dist/src/core/TranslationValues'; +import type {RichTranslationValues} from 'use-intl/dist/src/core/TranslationValues'; +import createBaseTranslator, { + getMessagesOrError +} from 'use-intl/dist/src/core/createBaseTranslator'; +import MessageKeys from 'use-intl/dist/src/core/utils/MessageKeys'; +import NamespaceKeys from 'use-intl/dist/src/core/utils/NamespaceKeys'; +import NestedKeyOf from 'use-intl/dist/src/core/utils/NestedKeyOf'; +import NestedValueOf from 'use-intl/dist/src/core/utils/NestedValueOf'; +import getConfig from '../server/getConfig'; + +let hasWarned = false; + +async function getTranslatorImpl< + NestedKey extends NamespaceKeys< + IntlMessages, + NestedKeyOf + > = never +>( + locale: + | string + | { + namespace?: NestedKey; + locale: string; + }, + namespace?: NestedKey +): // Explicitly defining the return type is necessary as TypeScript would get it wrong +Promise<{ + // Default invocation + < + TargetKey extends MessageKeys< + NestedValueOf< + {'!': IntlMessages}, + [NestedKey] extends [never] ? '!' : `!.${NestedKey}` + >, + NestedKeyOf< + NestedValueOf< + {'!': IntlMessages}, + [NestedKey] extends [never] ? '!' : `!.${NestedKey}` + > + > + > + >( + key: TargetKey, + values?: TranslationValues, + formats?: Partial + ): string; + + // `rich` + rich< + TargetKey extends MessageKeys< + NestedValueOf< + {'!': IntlMessages}, + [NestedKey] extends [never] ? '!' : `!.${NestedKey}` + >, + NestedKeyOf< + NestedValueOf< + {'!': IntlMessages}, + [NestedKey] extends [never] ? '!' : `!.${NestedKey}` + > + > + > + >( + key: TargetKey, + values?: RichTranslationValues, + formats?: Partial + ): string | ReactElement | ReactNodeArray; + + // `raw` + raw< + TargetKey extends MessageKeys< + NestedValueOf< + {'!': IntlMessages}, + [NestedKey] extends [never] ? '!' : `!.${NestedKey}` + >, + NestedKeyOf< + NestedValueOf< + {'!': IntlMessages}, + [NestedKey] extends [never] ? '!' : `!.${NestedKey}` + > + > + > + >( + key: TargetKey + ): any; +}> { + if (typeof locale === 'object') { + const opts = locale; + namespace = opts.namespace; + locale = opts.locale; + if (!hasWarned) { + console.warn( + ` +DEPRECATION WARNING: Calling \`getTranslator\` with an object argument is deprecated, please update your call site accordingly. + +// Previously +getTranslator({locale: 'en', namespace: 'About'}); + +// Now +getTranslator('en', 'About'); + +See also https://next-intl-docs.vercel.app/docs/environments/metadata-route-handlers +` + ); + hasWarned = true; + } + } + + const config = await getConfig(locale); + + const messagesOrError = getMessagesOrError({ + messages: config.messages as any, + namespace, + onError: config.onError + }); + + return createBaseTranslator({ + ...config, + namespace, + messagesOrError + }); +} + +export default cache(getTranslatorImpl); diff --git a/packages/next-intl/src/react-server/useTranslations.tsx b/packages/next-intl/src/react-server/useTranslations.tsx index b95893231..7349173f8 100644 --- a/packages/next-intl/src/react-server/useTranslations.tsx +++ b/packages/next-intl/src/react-server/useTranslations.tsx @@ -1,5 +1,5 @@ import type {useTranslations as useTranslationsType} from 'use-intl'; -import getTranslator from '../server/getTranslator'; +import getBaseTranslator from './getBaseTranslator'; import useHook from './useHook'; import useLocale from './useLocale'; @@ -7,9 +7,10 @@ export default function useTranslations( ...[namespace]: Parameters ): ReturnType { const locale = useLocale(); - const result = useHook('useTranslations', getTranslator(locale, namespace)); + const result = useHook( + 'useTranslations', + getBaseTranslator(locale, namespace) + ); - // The types are slightly off here and indicate that rich text formatting - // doesn't integrate with React - this is not the case. - return result as any; + return result; } diff --git a/packages/next-intl/src/server/getTranslations.tsx b/packages/next-intl/src/server/getTranslations.tsx index 776385c6a..a9403709e 100644 --- a/packages/next-intl/src/server/getTranslations.tsx +++ b/packages/next-intl/src/server/getTranslations.tsx @@ -1,11 +1,9 @@ /* eslint-disable import/default */ import {cache} from 'react'; +import {createTranslator} from 'use-intl/dist/src/core'; import type Formats from 'use-intl/dist/src/core/Formats'; import type TranslationValues from 'use-intl/dist/src/core/TranslationValues'; -import createBaseTranslator, { - getMessagesOrError -} from 'use-intl/dist/src/core/createBaseTranslator'; import {CoreRichTranslationValues} from 'use-intl/dist/src/core/createTranslatorImpl'; import MessageKeys from 'use-intl/dist/src/core/utils/MessageKeys'; import NamespaceKeys from 'use-intl/dist/src/core/utils/NamespaceKeys'; @@ -95,20 +93,10 @@ Learn more: https://next-intl-docs.vercel.app/docs/environments/metadata-route-h const locale = getLocaleFromHeader(); const config = await getConfig(locale); - const messagesOrError = getMessagesOrError({ - messages: config.messages as any, - namespace, - onError: config.onError - }); - - // We allow to resolve rich text formatting here, but the types forbid it when - // `getTranslations` is used directly. Supporting rich text is important when - // the react-server implementation calls into this function. - // @ts-ignore - return createBaseTranslator({ + return createTranslator({ ...config, namespace, - messagesOrError + messages: config.messages || {} }); } diff --git a/packages/next-intl/src/server/getTranslator.tsx b/packages/next-intl/src/server/getTranslator.tsx index c42e9a2a1..62967e3f4 100644 --- a/packages/next-intl/src/server/getTranslator.tsx +++ b/packages/next-intl/src/server/getTranslator.tsx @@ -1,11 +1,9 @@ /* eslint-disable import/default */ import {cache} from 'react'; +import {createTranslator} from 'use-intl/dist/src/core'; import type Formats from 'use-intl/dist/src/core/Formats'; import type TranslationValues from 'use-intl/dist/src/core/TranslationValues'; -import createBaseTranslator, { - getMessagesOrError -} from 'use-intl/dist/src/core/createBaseTranslator'; import {CoreRichTranslationValues} from 'use-intl/dist/src/core/createTranslatorImpl'; import MessageKeys from 'use-intl/dist/src/core/utils/MessageKeys'; import NamespaceKeys from 'use-intl/dist/src/core/utils/NamespaceKeys'; @@ -112,20 +110,10 @@ See also https://next-intl-docs.vercel.app/docs/environments/metadata-route-hand const config = await getConfig(locale); - const messagesOrError = getMessagesOrError({ - messages: config.messages as any, - namespace, - onError: config.onError - }); - - // We allow to resolve rich text formatting here, but the types forbid it when - // `getTranslations` is used directly. Supporting rich text is important when - // the react-server implementation calls into this function. - // @ts-ignore - return createBaseTranslator({ + return createTranslator({ ...config, namespace, - messagesOrError + messages: config.messages || {} }); } diff --git a/packages/next-intl/test/server/getTranslator.test.tsx b/packages/next-intl/test/server/getTranslator.test.tsx new file mode 100644 index 000000000..12b09c9f4 --- /dev/null +++ b/packages/next-intl/test/server/getTranslator.test.tsx @@ -0,0 +1,84 @@ +// @vitest-environment edge-runtime + +import {it, vi, expect, describe} from 'vitest'; +import { + getTranslator, + getMessages, + getFormatter, + getNow, + getTimeZone +} from '../../src/server'; + +vi.mock('next-intl/config', () => ({ + default: async () => + ((await vi.importActual('../../src/server')) as any).getRequestConfig({ + locale: 'en', + now: new Date('2020-01-01T00:00:00.000Z'), + timeZone: 'Europe/London', + messages: { + About: { + interpolation: 'Hello {name}', + rich: '{name}' + } + } + }) +})); + +vi.mock('react', async (importOriginal) => { + const React = (await importOriginal()) as typeof import('react'); + return { + ...React, + cache(fn: (...args: Array) => unknown) { + return (...args: Array) => fn(...args); + } + }; +}); + +describe('getTranslator', () => { + it('can interpolate variables', async () => { + const t = await getTranslator('en', 'About'); + expect(t('interpolation', {name: 'Jane'})).toBe('Hello Jane'); + }); + + it('renders rich text to a string', async () => { + const t = await getTranslator('en', 'About'); + expect( + t.rich('rich', { + name: 'Example', + link: (chunks) => `
    ${chunks}` + }) + ).toBe('Example'); + }); + + it('renders raw text to a string', async () => { + const t = await getTranslator('en', 'About'); + expect(t.raw('rich')).toBe('{name}'); + }); +}); + +describe('getFormatter', () => { + it('can format a date', async () => { + const format = await getFormatter('en'); + expect(format.dateTime(new Date('2020-01-01T00:00:00.000Z'))).toBe( + '1/1/2020' + ); + }); +}); + +describe('getNow', () => { + it('returns the current time', async () => { + expect((await getNow('en')).toISOString()).toBe('2020-01-01T00:00:00.000Z'); + }); +}); + +describe('getMessages', () => { + it('returns the messages', async () => { + expect(await getMessages('en')).toHaveProperty('About'); + }); +}); + +describe('getTimeZone', () => { + it('returns the time zone', async () => { + expect(await getTimeZone('en')).toBe('Europe/London'); + }); +}); diff --git a/packages/use-intl/dts.config.js b/packages/use-intl/dts.config.js index 82f1fcb7b..0d711aa6f 100644 --- a/packages/use-intl/dts.config.js +++ b/packages/use-intl/dts.config.js @@ -1,7 +1,7 @@ /* global module */ /** - * @type {import('dts-cli').DtsConfig} + * @type {import('dts-cli').DtsOptions} */ module.exports = { rollup(config) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 19c712ce6..a1411a48f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -511,6 +511,9 @@ importers: specifier: ^2.17.5 version: link:../use-intl devDependencies: + '@edge-runtime/vm': + specifier: ^3.0.3 + version: 3.0.3 '@size-limit/preset-big-lib': specifier: ^8.2.6 version: 8.2.6(size-limit@8.2.6) @@ -555,7 +558,7 @@ importers: version: 5.0.4 vitest: specifier: ^0.32.2 - version: 0.32.2 + version: 0.32.2(@edge-runtime/vm@3.0.3) packages/use-intl: dependencies: @@ -604,7 +607,7 @@ importers: version: 5.0.4 vitest: specifier: ^0.32.2 - version: 0.32.2 + version: 0.32.2(@edge-runtime/vm@3.0.3) packages: @@ -3594,6 +3597,18 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true + /@edge-runtime/primitives@3.0.3: + resolution: {integrity: sha512-YnfMWMRQABAH8IsnFMJWMW+SyB4ZeYBPnR7V0aqdnew7Pq60cbH5DyFjS/FhiLwvHQk9wBREmXD7PP0HooEQ1A==} + engines: {node: '>=14'} + dev: true + + /@edge-runtime/vm@3.0.3: + resolution: {integrity: sha512-SPfI1JeIRNs/4EEE2Oc0X6gG3RqjD1TnKu2lwmwFXq0435xgZGKhc3UiKkYAdoMn2dNFD73nlabMKHBRoMRpxg==} + engines: {node: '>=14'} + dependencies: + '@edge-runtime/primitives': 3.0.3 + dev: true + /@emotion/hash@0.9.0: resolution: {integrity: sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==} dev: true @@ -24493,7 +24508,7 @@ packages: fsevents: 2.3.2 dev: true - /vitest@0.32.2: + /vitest@0.32.2(@edge-runtime/vm@3.0.3): resolution: {integrity: sha512-hU8GNNuQfwuQmqTLfiKcqEhZY72Zxb7nnN07koCUNmntNxbKQnVbeIS6sqUgR3eXSlbOpit8+/gr1KpqoMgWCQ==} engines: {node: '>=v14.18.0'} hasBin: true @@ -24524,6 +24539,7 @@ packages: webdriverio: optional: true dependencies: + '@edge-runtime/vm': 3.0.3 '@types/chai': 4.3.5 '@types/chai-subset': 1.3.3 '@types/node': 17.0.23 From f0ae6ce2b6f695827049ad1b3ebb94eb95942f81 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 19 Jul 2023 14:34:06 +0200 Subject: [PATCH 242/312] Opengraph example --- examples/example-next-13-advanced/messages/de.json | 3 +++ examples/example-next-13-advanced/messages/en.json | 3 +++ examples/example-next-13-advanced/messages/es.json | 3 +++ .../src/app/[locale]/opengraph-image.tsx | 13 +++++++++++++ .../example-next-13-advanced/tests/main.spec.ts | 12 ++++++++++++ 5 files changed, 34 insertions(+) create mode 100644 examples/example-next-13-advanced/src/app/[locale]/opengraph-image.tsx diff --git a/examples/example-next-13-advanced/messages/de.json b/examples/example-next-13-advanced/messages/de.json index 4040e7dcb..668c7a7b3 100644 --- a/examples/example-next-13-advanced/messages/de.json +++ b/examples/example-next-13-advanced/messages/de.json @@ -38,5 +38,8 @@ }, "ApiRoute": { "hello": "Hallo {name}!" + }, + "OpenGraph": { + "title": "next-intl Beispiel" } } diff --git a/examples/example-next-13-advanced/messages/en.json b/examples/example-next-13-advanced/messages/en.json index c5dc6a775..0af804dc1 100644 --- a/examples/example-next-13-advanced/messages/en.json +++ b/examples/example-next-13-advanced/messages/en.json @@ -38,5 +38,8 @@ }, "ApiRoute": { "hello": "Hello {name}!" + }, + "OpenGraph": { + "title": "next-intl example" } } diff --git a/examples/example-next-13-advanced/messages/es.json b/examples/example-next-13-advanced/messages/es.json index 23beb7a2f..0dd77bb33 100644 --- a/examples/example-next-13-advanced/messages/es.json +++ b/examples/example-next-13-advanced/messages/es.json @@ -38,5 +38,8 @@ }, "ApiRoute": { "hello": "¡Hola {name}!" + }, + "OpenGraph": { + "title": "Ejemplo next-intl" } } diff --git a/examples/example-next-13-advanced/src/app/[locale]/opengraph-image.tsx b/examples/example-next-13-advanced/src/app/[locale]/opengraph-image.tsx new file mode 100644 index 000000000..05e520749 --- /dev/null +++ b/examples/example-next-13-advanced/src/app/[locale]/opengraph-image.tsx @@ -0,0 +1,13 @@ +import {ImageResponse} from 'next/server'; +import {getTranslator} from 'next-intl/server'; + +type Props = { + params: { + locale: string; + }; +}; + +export default async function Image({params: {locale}}: Props) { + const t = await getTranslator(locale, 'OpenGraph'); + return new ImageResponse(
    {t('title')}
    ); +} diff --git a/examples/example-next-13-advanced/tests/main.spec.ts b/examples/example-next-13-advanced/tests/main.spec.ts index d056ea1a2..6b4b78764 100644 --- a/examples/example-next-13-advanced/tests/main.spec.ts +++ b/examples/example-next-13-advanced/tests/main.spec.ts @@ -545,3 +545,15 @@ it('populates metadata', async ({page}) => { 'Europe/Vienna' ); }); + +it('supports opengraph images', async ({page, request}) => { + await page.goto('/'); + const ogImage = await page + .locator('meta[property="og:image"]') + .getAttribute('content'); + expect(ogImage).toBeTruthy(); + const ogImageUrl = new URL(ogImage!); + expect(ogImageUrl.pathname).toBe('/en/opengraph-image'); + const result = await request.get(ogImageUrl.pathname); + expect(result.ok()).toBe(true); +}); From 2c7ac92098ff611bce91e4e4c620584d4762649c Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 19 Jul 2023 15:24:25 +0200 Subject: [PATCH 243/312] Fix tests --- packages/next-intl/test/middleware/middleware.test.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/next-intl/test/middleware/middleware.test.tsx b/packages/next-intl/test/middleware/middleware.test.tsx index fddb451cf..b35b15c89 100644 --- a/packages/next-intl/test/middleware/middleware.test.tsx +++ b/packages/next-intl/test/middleware/middleware.test.tsx @@ -755,7 +755,7 @@ describe('domain-based routing', () => { describe('deprecated domain config', () => { it("accepts deprecated config with `routing.type: 'prefix'`", () => { - const middleware = createMockMiddleware({ + const middleware = createIntlMiddleware({ defaultLocale: 'en', locales: ['en', 'de'], routing: { @@ -780,7 +780,7 @@ describe('deprecated domain config', () => { }); it("accepts deprecated config with `routing.type: 'domain'`", () => { - const middleware = createMockMiddleware({ + const middleware = createIntlMiddleware({ defaultLocale: 'en', locales: ['en', 'de'], routing: { @@ -835,7 +835,7 @@ describe('deprecated domain config', () => { } ] as Array; - const middleware = createMockMiddleware({ + const middleware = createIntlMiddleware({ defaultLocale: 'en', locales: ['en', 'de'], domains From a371d3976403f2884f06b813eb42e548b4e944c8 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 26 Jul 2023 10:23:45 +0200 Subject: [PATCH 244/312] refactor(RSC): Clean up package boundaries (#387) **Changes:** - Add `exports` to `use-intl` to have clear package boundaries and add new APIs - `core`: `RichTranslationValuesPlain`, `createBaseTranslator`, `initializeConfig`, TS utils - `react`: (no changes) - Add `exports` to `next-intl` **Information** We build the entry point and nested exports from libraries separately because the build for the main entry point is always smaller this way. Nested exports always result in separate modules currently. --- docs/package.json | 2 +- .../src/app/[locale]/api/route.ts | 12 +- packages/next-intl/config.d.ts | 3 + packages/next-intl/config.js | 3 - packages/next-intl/dts.config.js | 22 ++- packages/next-intl/package.json | 36 ++-- packages/next-intl/src/client.tsx | 1 + packages/next-intl/src/config.tsx | 5 + packages/next-intl/src/index.react-server.tsx | 1 + packages/next-intl/src/link.react-server.tsx | 1 + packages/next-intl/src/link.tsx | 1 + packages/next-intl/src/middleware.tsx | 1 + .../next-intl/{plugin.js => src/plugin.tsx} | 18 +- packages/next-intl/src/react-client/index.tsx | 5 +- .../src/react-server/getBaseTranslator.tsx | 31 ++-- packages/next-intl/src/react-server/index.tsx | 2 +- .../src/react-server/useTranslations.tsx | 1 + .../next-intl/src/server.react-server.tsx | 1 + packages/next-intl/src/server.tsx | 1 + .../src/server/createRequestConfig.tsx | 4 +- packages/next-intl/src/server/getConfig.tsx | 4 +- .../next-intl/src/server/getFormatter.tsx | 2 +- packages/next-intl/src/server/getIntl.tsx | 2 +- .../next-intl/src/server/getRequestConfig.tsx | 2 +- .../next-intl/src/server/getTranslations.tsx | 23 +-- .../next-intl/src/server/getTranslator.tsx | 22 +-- .../src/server/react-client/index.tsx | 7 +- .../src/shared/NextIntlClientProvider.tsx | 2 +- .../test/server/getTranslator.test.tsx | 6 +- packages/use-intl/core.d.ts | 1 + packages/use-intl/package.json | 16 +- packages/use-intl/react.d.ts | 1 + packages/use-intl/src/core.tsx | 1 + .../use-intl/src/core/TranslationValues.tsx | 5 + .../src/core/createBaseTranslator.tsx | 20 +- .../use-intl/src/core/createTranslator.tsx | 10 +- .../src/core/createTranslatorImpl.tsx | 21 +-- packages/use-intl/src/core/index.tsx | 10 +- .../use-intl/src/core/initializeConfig.tsx | 29 +++ packages/use-intl/src/react.tsx | 1 + packages/use-intl/src/react/IntlProvider.tsx | 6 +- .../src/react/getInitializedConfig.tsx | 31 +--- .../src/react/useTranslationsImpl.tsx | 15 +- pnpm-lock.yaml | 171 ++++++++++++------ 44 files changed, 336 insertions(+), 223 deletions(-) create mode 100644 packages/next-intl/config.d.ts delete mode 100644 packages/next-intl/config.js create mode 100644 packages/next-intl/src/client.tsx create mode 100644 packages/next-intl/src/config.tsx create mode 100644 packages/next-intl/src/index.react-server.tsx create mode 100644 packages/next-intl/src/link.react-server.tsx create mode 100644 packages/next-intl/src/link.tsx create mode 100644 packages/next-intl/src/middleware.tsx rename packages/next-intl/{plugin.js => src/plugin.tsx} (78%) create mode 100644 packages/next-intl/src/server.react-server.tsx create mode 100644 packages/next-intl/src/server.tsx create mode 100644 packages/use-intl/core.d.ts create mode 100644 packages/use-intl/react.d.ts create mode 100644 packages/use-intl/src/core.tsx create mode 100644 packages/use-intl/src/core/initializeConfig.tsx create mode 100644 packages/use-intl/src/react.tsx diff --git a/docs/package.json b/docs/package.json index b5b2f4259..68dae27fe 100644 --- a/docs/package.json +++ b/docs/package.json @@ -24,7 +24,7 @@ "tailwindcss": "^3.2.4" }, "devDependencies": { - "@types/node": "20.1.2", + "@types/node": "^20.1.2", "@types/react": "^18.2.5", "autoprefixer": "^10.4.0", "eslint": "^8.39.0", diff --git a/examples/example-next-13-advanced/src/app/[locale]/api/route.ts b/examples/example-next-13-advanced/src/app/[locale]/api/route.ts index c35b451df..045117cff 100644 --- a/examples/example-next-13-advanced/src/app/[locale]/api/route.ts +++ b/examples/example-next-13-advanced/src/app/[locale]/api/route.ts @@ -1,12 +1,18 @@ import {NextRequest, NextResponse} from 'next/server'; -import {getTranslations} from 'next-intl/server'; +import {getTranslator} from 'next-intl/server'; -export async function GET(request: NextRequest) { +type Props = { + params: { + locale: string; + }; +}; + +export async function GET(request: NextRequest, {params: {locale}}: Props) { const name = request.nextUrl.searchParams.get('name'); if (!name) { return new Response('Search param `name` was not provided.', {status: 400}); } - const t = await getTranslations('ApiRoute'); + const t = await getTranslator(locale, 'ApiRoute'); return NextResponse.json({message: t('hello', {name})}); } diff --git a/packages/next-intl/config.d.ts b/packages/next-intl/config.d.ts new file mode 100644 index 000000000..cfc9c469c --- /dev/null +++ b/packages/next-intl/config.d.ts @@ -0,0 +1,3 @@ +import config from './dist/config'; + +export = config; diff --git a/packages/next-intl/config.js b/packages/next-intl/config.js deleted file mode 100644 index 7886cc9b6..000000000 --- a/packages/next-intl/config.js +++ /dev/null @@ -1,3 +0,0 @@ -throw new Error( - "Couldn't find next-intl config file. Please follow the instructions at https://next-intl-docs.vercel.app/docs/next-13/server-components" -); diff --git a/packages/next-intl/dts.config.js b/packages/next-intl/dts.config.js index 0d711aa6f..60121cc1d 100644 --- a/packages/next-intl/dts.config.js +++ b/packages/next-intl/dts.config.js @@ -1,14 +1,26 @@ -/* global module */ +/* eslint-disable import/no-extraneous-dependencies */ +/* eslint-env node */ + +const preserveDirectives = require('rollup-plugin-preserve-directives').default; /** * @type {import('dts-cli').DtsOptions} */ module.exports = { rollup(config) { - // Enable tree shaking detection in rollup / Bundlephobia - if (config.output.format === 'esm') { - config.output.preserveModules = true; - } + // 'use client' support + config.output.preserveModules = true; + config.plugins.push(preserveDirectives()); + config.onwarn = function onwarn(warning, warn) { + if (warning.code !== 'MODULE_LEVEL_DIRECTIVE') { + warn(warning); + } + }; + + // Otherwise rollup will insert code like `require('next/link')`, + // which will break the RSC render due to usage of `createContext` + config.treeshake.moduleSideEffects = false; + return config; } }; diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 9aa4240d9..87cf9efa5 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -11,9 +11,7 @@ "url": "https://github.com/amannn/next-intl" }, "scripts": { - "build": "pnpm build:default && pnpm build:rsc", - "build:default": "rm -rf dist && dts build", - "build:rsc": "tsc && rm -rf dist/test", + "build": "dts build --entry src/index.tsx && dts build --entry src/client.tsx --entry src/index.react-server.tsx --entry src/link.react-server.tsx --entry src/link.tsx --entry src/middleware.tsx --entry src/plugin.tsx --entry src/server.react-server.tsx --entry src/server.tsx --entry src/config.tsx --noClean", "test": "TZ=Europe/Berlin vitest", "lint": "eslint src test && tsc --noEmit", "prepublishOnly": "CI=true turbo test && turbo lint && turbo build && cp ../../README.md .", @@ -25,41 +23,42 @@ "typings": "dist/index.d.ts", "exports": { ".": { - "react-server": "./dist/src/react-server/index.js", + "react-server": "./dist/index.react-server.esm.js", "default": "./dist/index.js" }, "./server": { - "react-server": "./dist/src/server/index.js", - "default": "./dist/src/server/react-client/index.js" + "react-server": "./dist/server.react-server.esm.js", + "default": "./dist/server.js" }, "./client": { - "default": "./dist/src/client/index.js" + "default": "./dist/client.js" }, "./link": { "types": "./link.d.ts", - "react-server": "./dist/src/link/react-server/index.js", - "default": "./dist/src/link/index.js" + "react-server": "./dist/link.react-server.esm.js", + "default": "./dist/link.js" + }, + "./config": { + "types": "./config.d.ts", + "default": "./dist/config.js" }, - "./config": "./config.js", "./middleware": { "types": "./middleware.d.ts", - "default": "./dist/src/middleware/index.js" + "default": "./dist/middleware.js" }, "./withNextIntl": "./withNextIntl.js", - "./plugin": "./plugin.js" + "./plugin": "./dist/plugin.js" }, "files": [ "dist", - "src", "server.d.ts", "client.d.ts", "link.d.ts", - "config.js", "middleware.d.ts", "withNextIntl.js", "withNextIntl.d.ts", - "plugin.js", - "plugin.d.ts" + "plugin.d.ts", + "config.d.ts" ], "keywords": [ "react", @@ -98,6 +97,7 @@ "next": "^13.4.7", "react": "^18.2.0", "react-dom": "^18.2.0", + "rollup-plugin-preserve-directives": "0.2.0", "size-limit": "^8.2.6", "typescript": "^5.0.0", "vitest": "^0.32.2" @@ -105,11 +105,11 @@ "size-limit": [ { "path": "dist/next-intl.cjs.production.min.js", - "limit": "13.8 KB" + "limit": "14.00 KB" }, { "path": "dist/next-intl.cjs.development.js", - "limit": "13.8 KB" + "limit": "14.20 KB" } ], "engines": { diff --git a/packages/next-intl/src/client.tsx b/packages/next-intl/src/client.tsx new file mode 100644 index 000000000..40a7340d3 --- /dev/null +++ b/packages/next-intl/src/client.tsx @@ -0,0 +1 @@ +export * from './client/index'; diff --git a/packages/next-intl/src/config.tsx b/packages/next-intl/src/config.tsx new file mode 100644 index 000000000..4839d56bf --- /dev/null +++ b/packages/next-intl/src/config.tsx @@ -0,0 +1,5 @@ +export default function getConfig() { + throw new Error( + "Couldn't find next-intl config file. Please follow the instructions at https://next-intl-docs.vercel.app/docs/getting-started/app-router-server-components" + ); +} diff --git a/packages/next-intl/src/index.react-server.tsx b/packages/next-intl/src/index.react-server.tsx new file mode 100644 index 000000000..812d94f58 --- /dev/null +++ b/packages/next-intl/src/index.react-server.tsx @@ -0,0 +1 @@ +export * from './react-server'; diff --git a/packages/next-intl/src/link.react-server.tsx b/packages/next-intl/src/link.react-server.tsx new file mode 100644 index 000000000..a267c5953 --- /dev/null +++ b/packages/next-intl/src/link.react-server.tsx @@ -0,0 +1 @@ +export {default} from './link/react-server'; diff --git a/packages/next-intl/src/link.tsx b/packages/next-intl/src/link.tsx new file mode 100644 index 000000000..3bb1ffca8 --- /dev/null +++ b/packages/next-intl/src/link.tsx @@ -0,0 +1 @@ +export {default} from './link/index'; diff --git a/packages/next-intl/src/middleware.tsx b/packages/next-intl/src/middleware.tsx new file mode 100644 index 000000000..0b94d4d5a --- /dev/null +++ b/packages/next-intl/src/middleware.tsx @@ -0,0 +1 @@ +export {default} from './middleware/index'; diff --git a/packages/next-intl/plugin.js b/packages/next-intl/src/plugin.tsx similarity index 78% rename from packages/next-intl/plugin.js rename to packages/next-intl/src/plugin.tsx index ed20f8cce..28ce0558b 100644 --- a/packages/next-intl/plugin.js +++ b/packages/next-intl/src/plugin.tsx @@ -1,9 +1,10 @@ /* eslint-env node */ -const fs = require('fs'); -const path = require('path'); +import fs from 'fs'; +import path from 'path'; +import type {NextConfig} from 'next'; -function initPlugin(i18nPath, nextConfig) { +function initPlugin(i18nPath?: string, nextConfig?: NextConfig) { if (i18nPath) { i18nPath = path.resolve(i18nPath); @@ -45,9 +46,12 @@ module.exports = withNextIntl({ ); } + const finalI18nPath = i18nPath; return Object.assign({}, nextConfig, { - webpack(config, options) { - config.resolve.alias['next-intl/config'] = require.resolve(i18nPath); + webpack( + ...[config, options]: Parameters> + ) { + config.resolve.alias['next-intl/config'] = require.resolve(finalI18nPath); if (typeof nextConfig?.webpack === 'function') { return nextConfig.webpack(config, options); @@ -58,8 +62,8 @@ module.exports = withNextIntl({ }); } -module.exports = function withNextIntl(i18nPath) { - return (nextConfig) => initPlugin(i18nPath, nextConfig); +module.exports = function withNextIntl(i18nPath?: string) { + return (nextConfig?: NextConfig) => initPlugin(i18nPath, nextConfig); }; module.exports.initPlugin = initPlugin; diff --git a/packages/next-intl/src/react-client/index.tsx b/packages/next-intl/src/react-client/index.tsx index 0f3c5f676..640cf514e 100644 --- a/packages/next-intl/src/react-client/index.tsx +++ b/packages/next-intl/src/react-client/index.tsx @@ -17,7 +17,8 @@ export {default as NextIntlClientProvider} from '../shared/NextIntlClientProvide export {default as NextIntlProvider} from '../shared/NextIntlClientProvider'; /** @deprecated Is available as `import Link from 'next-intl/link'` now. */ -export const LocalizedLink = Link; -export {default as Link} from './Link'; +export const LocalizedLink = Link; // TODO: Remove, this is only for compatibility in the RSC beta and would break Next.js 12 +/** @deprecated Is available as `import Link from 'next-intl/link'` now. */ +export {default as Link} from './Link'; // TODO: Remove, this is only for compatibility in the RSC beta and would break Next.js 12 export {default as useLocalizedRouter} from './useLocalizedRouter'; diff --git a/packages/next-intl/src/react-server/getBaseTranslator.tsx b/packages/next-intl/src/react-server/getBaseTranslator.tsx index 04bdda244..4357ea635 100644 --- a/packages/next-intl/src/react-server/getBaseTranslator.tsx +++ b/packages/next-intl/src/react-server/getBaseTranslator.tsx @@ -1,16 +1,14 @@ -/* eslint-disable import/default -- False positives */ - import {ReactElement, ReactNodeArray, cache} from 'react'; -import type Formats from 'use-intl/dist/src/core/Formats'; -import type TranslationValues from 'use-intl/dist/src/core/TranslationValues'; -import type {RichTranslationValues} from 'use-intl/dist/src/core/TranslationValues'; -import createBaseTranslator, { - getMessagesOrError -} from 'use-intl/dist/src/core/createBaseTranslator'; -import MessageKeys from 'use-intl/dist/src/core/utils/MessageKeys'; -import NamespaceKeys from 'use-intl/dist/src/core/utils/NamespaceKeys'; -import NestedKeyOf from 'use-intl/dist/src/core/utils/NestedKeyOf'; -import NestedValueOf from 'use-intl/dist/src/core/utils/NestedValueOf'; +import { + Formats, + TranslationValues, + RichTranslationValues, + MessageKeys, + NamespaceKeys, + NestedKeyOf, + NestedValueOf, + createBaseTranslator +} from 'use-intl/core'; import getConfig from '../server/getConfig'; let hasWarned = false; @@ -111,17 +109,10 @@ See also https://next-intl-docs.vercel.app/docs/environments/metadata-route-hand } const config = await getConfig(locale); - - const messagesOrError = getMessagesOrError({ - messages: config.messages as any, - namespace, - onError: config.onError - }); - return createBaseTranslator({ ...config, namespace, - messagesOrError + messages: config.messages }); } diff --git a/packages/next-intl/src/react-server/index.tsx b/packages/next-intl/src/react-server/index.tsx index d9df84c8b..0518791ce 100644 --- a/packages/next-intl/src/react-server/index.tsx +++ b/packages/next-intl/src/react-server/index.tsx @@ -20,7 +20,7 @@ export {default as useMessages} from './useMessages'; export {default as NextIntlClientProvider} from '../shared/NextIntlClientProvider'; // Everything from `core` -export * from 'use-intl/dist/src/core'; +export * from 'use-intl/core'; /** @deprecated Is called `Link` now. */ export const LocalizedLink = Link; diff --git a/packages/next-intl/src/react-server/useTranslations.tsx b/packages/next-intl/src/react-server/useTranslations.tsx index 7349173f8..3a39ea91b 100644 --- a/packages/next-intl/src/react-server/useTranslations.tsx +++ b/packages/next-intl/src/react-server/useTranslations.tsx @@ -7,6 +7,7 @@ export default function useTranslations( ...[namespace]: Parameters ): ReturnType { const locale = useLocale(); + const result = useHook( 'useTranslations', getBaseTranslator(locale, namespace) diff --git a/packages/next-intl/src/server.react-server.tsx b/packages/next-intl/src/server.react-server.tsx new file mode 100644 index 000000000..ca39cd0df --- /dev/null +++ b/packages/next-intl/src/server.react-server.tsx @@ -0,0 +1 @@ +export * from './server/index'; diff --git a/packages/next-intl/src/server.tsx b/packages/next-intl/src/server.tsx new file mode 100644 index 000000000..c1e6d6bd1 --- /dev/null +++ b/packages/next-intl/src/server.tsx @@ -0,0 +1 @@ +export * from './server/react-client'; diff --git a/packages/next-intl/src/server/createRequestConfig.tsx b/packages/next-intl/src/server/createRequestConfig.tsx index 5986cebc5..b540895b8 100644 --- a/packages/next-intl/src/server/createRequestConfig.tsx +++ b/packages/next-intl/src/server/createRequestConfig.tsx @@ -1,8 +1,8 @@ // @ts-expect-error // eslint-disable-next-line import/no-extraneous-dependencies import getRuntimeConfig from 'next-intl/config'; -import IntlConfig from 'use-intl/dist/core/IntlConfig'; -import {GetRequestConfigParams} from './getRequestConfig'; +import type {IntlConfig} from 'use-intl/core'; +import type {GetRequestConfigParams} from './getRequestConfig'; export default getRuntimeConfig as ( params: GetRequestConfigParams diff --git a/packages/next-intl/src/server/getConfig.tsx b/packages/next-intl/src/server/getConfig.tsx index 66272530f..c2635a669 100644 --- a/packages/next-intl/src/server/getConfig.tsx +++ b/packages/next-intl/src/server/getConfig.tsx @@ -1,5 +1,5 @@ import {cache} from 'react'; -import getInitializedConfig from 'use-intl/dist/src/react/getInitializedConfig'; +import {initializeConfig} from 'use-intl/core'; import createRequestConfig from '../server/createRequestConfig'; // Make sure `now` is consistent across the request in case none was configured @@ -21,7 +21,7 @@ const receiveRuntimeConfig = cache( const getConfig = cache(async (locale: string) => { const runtimeConfig = await receiveRuntimeConfig(locale, createRequestConfig); const opts = {...runtimeConfig, locale}; - return getInitializedConfig(opts); + return initializeConfig(opts); }); export default getConfig; diff --git a/packages/next-intl/src/server/getFormatter.tsx b/packages/next-intl/src/server/getFormatter.tsx index 5d712ead7..58666cd0f 100644 --- a/packages/next-intl/src/server/getFormatter.tsx +++ b/packages/next-intl/src/server/getFormatter.tsx @@ -1,5 +1,5 @@ import {cache} from 'react'; -import {createFormatter} from 'use-intl/dist/src/core'; +import {createFormatter} from 'use-intl/core'; import getConfig from './getConfig'; import getLocaleFromHeader from './getLocaleFromHeader'; diff --git a/packages/next-intl/src/server/getIntl.tsx b/packages/next-intl/src/server/getIntl.tsx index c832fdd6e..7ce551010 100644 --- a/packages/next-intl/src/server/getIntl.tsx +++ b/packages/next-intl/src/server/getIntl.tsx @@ -1,5 +1,5 @@ import {cache} from 'react'; -import {createIntl} from 'use-intl/dist/src/core'; +import {createIntl} from 'use-intl/core'; import getConfig from './getConfig'; import getLocaleFromHeader from './getLocaleFromHeader'; diff --git a/packages/next-intl/src/server/getRequestConfig.tsx b/packages/next-intl/src/server/getRequestConfig.tsx index b883b5926..e28c54584 100644 --- a/packages/next-intl/src/server/getRequestConfig.tsx +++ b/packages/next-intl/src/server/getRequestConfig.tsx @@ -1,4 +1,4 @@ -import IntlConfig from 'use-intl/dist/core/IntlConfig'; +import type {IntlConfig} from 'use-intl/core'; type RequestConfig = Omit; diff --git a/packages/next-intl/src/server/getTranslations.tsx b/packages/next-intl/src/server/getTranslations.tsx index a9403709e..dec06f7d5 100644 --- a/packages/next-intl/src/server/getTranslations.tsx +++ b/packages/next-intl/src/server/getTranslations.tsx @@ -1,14 +1,14 @@ -/* eslint-disable import/default */ - import {cache} from 'react'; -import {createTranslator} from 'use-intl/dist/src/core'; -import type Formats from 'use-intl/dist/src/core/Formats'; -import type TranslationValues from 'use-intl/dist/src/core/TranslationValues'; -import {CoreRichTranslationValues} from 'use-intl/dist/src/core/createTranslatorImpl'; -import MessageKeys from 'use-intl/dist/src/core/utils/MessageKeys'; -import NamespaceKeys from 'use-intl/dist/src/core/utils/NamespaceKeys'; -import NestedKeyOf from 'use-intl/dist/src/core/utils/NestedKeyOf'; -import NestedValueOf from 'use-intl/dist/src/core/utils/NestedValueOf'; +import { + createTranslator, + Formats, + TranslationValues, + RichTranslationValuesPlain, + MessageKeys, + NamespaceKeys, + NestedKeyOf, + NestedValueOf +} from 'use-intl/core'; import getConfig from './getConfig'; import getLocaleFromHeader from './getLocaleFromHeader'; @@ -59,7 +59,7 @@ Promise<{ > >( key: TargetKey, - values?: CoreRichTranslationValues, + values?: RichTranslationValuesPlain, formats?: Partial ): string; @@ -100,4 +100,5 @@ Learn more: https://next-intl-docs.vercel.app/docs/environments/metadata-route-h }); } +/** @deprecated Is called `getTranslator` now. */ export default cache(getTranslationsImpl); diff --git a/packages/next-intl/src/server/getTranslator.tsx b/packages/next-intl/src/server/getTranslator.tsx index 62967e3f4..e712149f7 100644 --- a/packages/next-intl/src/server/getTranslator.tsx +++ b/packages/next-intl/src/server/getTranslator.tsx @@ -1,14 +1,14 @@ -/* eslint-disable import/default */ - import {cache} from 'react'; -import {createTranslator} from 'use-intl/dist/src/core'; -import type Formats from 'use-intl/dist/src/core/Formats'; -import type TranslationValues from 'use-intl/dist/src/core/TranslationValues'; -import {CoreRichTranslationValues} from 'use-intl/dist/src/core/createTranslatorImpl'; -import MessageKeys from 'use-intl/dist/src/core/utils/MessageKeys'; -import NamespaceKeys from 'use-intl/dist/src/core/utils/NamespaceKeys'; -import NestedKeyOf from 'use-intl/dist/src/core/utils/NestedKeyOf'; -import NestedValueOf from 'use-intl/dist/src/core/utils/NestedValueOf'; +import { + createTranslator, + Formats, + TranslationValues, + RichTranslationValuesPlain, + MessageKeys, + NamespaceKeys, + NestedKeyOf, + NestedValueOf +} from 'use-intl/core'; import getConfig from './getConfig'; let hasWarned = false; @@ -64,7 +64,7 @@ Promise<{ > >( key: TargetKey, - values?: CoreRichTranslationValues, + values?: RichTranslationValuesPlain, formats?: Partial ): string; diff --git a/packages/next-intl/src/server/react-client/index.tsx b/packages/next-intl/src/server/react-client/index.tsx index 1ea701971..05d20ed29 100644 --- a/packages/next-intl/src/server/react-client/index.tsx +++ b/packages/next-intl/src/server/react-client/index.tsx @@ -11,7 +11,9 @@ import type { } from '..'; function notSupported(name: string) { - throw new Error(`\`${name}\` is not supported in Client Components.`); + return () => { + throw new Error(`\`${name}\` is not supported in Client Components.`); + }; } // Must match `../index.tsx` @@ -19,16 +21,19 @@ function notSupported(name: string) { // prettier-ignore export const getRequestConfig = notSupported('getRequestConfig') as unknown as typeof getRequestConfig_type; // prettier-ignore +/** @deprecated Is called `getFormatter` now. */ export const getIntl = notSupported('getIntl') as unknown as typeof getIntl_type; // prettier-ignore export const getFormatter = notSupported('getFormatter') as unknown as typeof getFormatter_type; // prettier-ignore +/** @deprecated Please use the `locale` parameter from Next.js instead. */ export const getLocale = notSupported('getLocale') as unknown as typeof getLocale_type; // prettier-ignore export const getNow = notSupported('getNow') as unknown as typeof getNow_type; // prettier-ignore export const getTimeZone = notSupported('getTimeZone') as unknown as typeof getTimeZone_type; // prettier-ignore +/** @deprecated Is called `getTranslator` now. */ export const getTranslations = notSupported('getTranslations') as unknown as typeof getTranslations_type; // prettier-ignore export const getTranslator = notSupported('getTranslator') as unknown as typeof getTranslator_type; diff --git a/packages/next-intl/src/shared/NextIntlClientProvider.tsx b/packages/next-intl/src/shared/NextIntlClientProvider.tsx index c566bc9ee..41dff0c8f 100644 --- a/packages/next-intl/src/shared/NextIntlClientProvider.tsx +++ b/packages/next-intl/src/shared/NextIntlClientProvider.tsx @@ -31,7 +31,7 @@ export default function NextIntlClientProvider({ locale = router.locale; } - // Currently RSC serialize dates to strings, therefore make sure we have + // TODO: Currently RSC serialize dates to strings, therefore make sure we have // a date object. We might be able to remove this once more types have // first-class serialization support (https://github.com/facebook/react/issues/25687) if (typeof now === 'string') { diff --git a/packages/next-intl/test/server/getTranslator.test.tsx b/packages/next-intl/test/server/getTranslator.test.tsx index 12b09c9f4..da8ced41c 100644 --- a/packages/next-intl/test/server/getTranslator.test.tsx +++ b/packages/next-intl/test/server/getTranslator.test.tsx @@ -7,11 +7,13 @@ import { getFormatter, getNow, getTimeZone -} from '../../src/server'; +} from '../../src/server.react-server'; vi.mock('next-intl/config', () => ({ default: async () => - ((await vi.importActual('../../src/server')) as any).getRequestConfig({ + ( + (await vi.importActual('../../src/server.react-server')) as any + ).getRequestConfig({ locale: 'en', now: new Date('2020-01-01T00:00:00.000Z'), timeZone: 'Europe/London', diff --git a/packages/use-intl/core.d.ts b/packages/use-intl/core.d.ts new file mode 100644 index 000000000..f75e0ab61 --- /dev/null +++ b/packages/use-intl/core.d.ts @@ -0,0 +1 @@ +export * from './dist/core'; diff --git a/packages/use-intl/package.json b/packages/use-intl/package.json index ae8f80217..ab369f5e5 100644 --- a/packages/use-intl/package.json +++ b/packages/use-intl/package.json @@ -11,9 +11,7 @@ "url": "https://github.com/amannn/next-intl/tree/main/packages/use-intl" }, "scripts": { - "build": "pnpm build:default && pnpm build:rsc", - "build:default": "rm -rf dist && dts build", - "build:rsc": "tsc && rm -rf dist/test", + "build": "dts build --entry src/index.tsx && dts build --entry src/core.tsx --entry src/react.tsx --noClean", "test": "TZ=Europe/Berlin vitest", "lint": "eslint src test && tsc --noEmit", "prepublishOnly": "CI=true turbo test && turbo lint && turbo build", @@ -22,9 +20,15 @@ "main": "dist/index.js", "module": "dist/use-intl.esm.js", "typings": "dist/index.d.ts", + "exports": { + ".": "./dist/index.js", + "./core": "./dist/core.js", + "./react": "./dist/react.js" + }, "files": [ "dist", - "src" + "core.d.ts", + "react.d.ts" ], "keywords": [ "react", @@ -62,11 +66,11 @@ "size-limit": [ { "path": "dist/use-intl.cjs.production.min.js", - "limit": "10.3 kB" + "limit": "10.30 kB" }, { "path": "dist/use-intl.cjs.development.js", - "limit": "10.3 kB" + "limit": "10.30 kB" } ], "engines": { diff --git a/packages/use-intl/react.d.ts b/packages/use-intl/react.d.ts new file mode 100644 index 000000000..c9fc5f809 --- /dev/null +++ b/packages/use-intl/react.d.ts @@ -0,0 +1 @@ +export * from './dist/react'; diff --git a/packages/use-intl/src/core.tsx b/packages/use-intl/src/core.tsx new file mode 100644 index 000000000..65c514e92 --- /dev/null +++ b/packages/use-intl/src/core.tsx @@ -0,0 +1 @@ +export * from './core/index'; diff --git a/packages/use-intl/src/core/TranslationValues.tsx b/packages/use-intl/src/core/TranslationValues.tsx index 106f80182..8aaa230d2 100644 --- a/packages/use-intl/src/core/TranslationValues.tsx +++ b/packages/use-intl/src/core/TranslationValues.tsx @@ -19,4 +19,9 @@ export type RichTranslationValues = Record< TranslationValue | ((chunks: ReactNode) => ReactNode) >; +export type RichTranslationValuesPlain = Record< + string, + TranslationValue | ((chunks: string) => string) +>; + export default TranslationValues; diff --git a/packages/use-intl/src/core/createBaseTranslator.tsx b/packages/use-intl/src/core/createBaseTranslator.tsx index ccf3848fd..2b057d151 100644 --- a/packages/use-intl/src/core/createBaseTranslator.tsx +++ b/packages/use-intl/src/core/createBaseTranslator.tsx @@ -80,12 +80,12 @@ function prepareTranslationValues(values: RichTranslationValues) { return transformedValues; } -export function getMessagesOrError({ +function getMessagesOrError({ messages, namespace, onError = defaultOnError }: { - messages: Messages; + messages?: Messages; namespace?: string; onError?(error: IntlError): void; }) { @@ -131,6 +131,22 @@ export type CreateBaseTranslatorProps = InitializedIntlConfig & { export default function createBaseTranslator< Messages extends AbstractIntlMessages, NestedKey extends NestedKeyOf +>(config: Omit, 'messagesOrError'>) { + const messagesOrError = getMessagesOrError({ + messages: config.messages, + namespace: config.namespace, + onError: config.onError + }) as Messages | IntlError; + + return createBaseTranslatorImpl({ + ...config, + messagesOrError + }); +} + +function createBaseTranslatorImpl< + Messages extends AbstractIntlMessages, + NestedKey extends NestedKeyOf >({ cachedFormatsByLocale, defaultTranslationValues, diff --git a/packages/use-intl/src/core/createTranslator.tsx b/packages/use-intl/src/core/createTranslator.tsx index ff611323e..86172098f 100644 --- a/packages/use-intl/src/core/createTranslator.tsx +++ b/packages/use-intl/src/core/createTranslator.tsx @@ -1,9 +1,9 @@ import Formats from './Formats'; import IntlConfig from './IntlConfig'; -import TranslationValues from './TranslationValues'; -import createTranslatorImpl, { - CoreRichTranslationValues -} from './createTranslatorImpl'; +import TranslationValues, { + RichTranslationValuesPlain +} from './TranslationValues'; +import createTranslatorImpl from './createTranslatorImpl'; import {defaultGetMessageFallback, defaultOnError} from './defaults'; import MessageKeys from './utils/MessageKeys'; import NamespaceKeys from './utils/NamespaceKeys'; @@ -70,7 +70,7 @@ export default function createTranslator< > >( key: TargetKey, - values?: CoreRichTranslationValues, + values?: RichTranslationValuesPlain, formats?: Partial ): string; diff --git a/packages/use-intl/src/core/createTranslatorImpl.tsx b/packages/use-intl/src/core/createTranslatorImpl.tsx index 999f3141d..d47c72b9e 100644 --- a/packages/use-intl/src/core/createTranslatorImpl.tsx +++ b/packages/use-intl/src/core/createTranslatorImpl.tsx @@ -1,16 +1,14 @@ import AbstractIntlMessages from './AbstractIntlMessages'; import {InitializedIntlConfig} from './IntlConfig'; import IntlError, {IntlErrorCode} from './IntlError'; -import {RichTranslationValues, TranslationValue} from './TranslationValues'; -import createBaseTranslator, {getMessagesOrError} from './createBaseTranslator'; +import { + RichTranslationValues, + RichTranslationValuesPlain +} from './TranslationValues'; +import createBaseTranslator from './createBaseTranslator'; import resolveNamespace from './resolveNamespace'; import NestedKeyOf from './utils/NestedKeyOf'; -export type CoreRichTranslationValues = Record< - string, - TranslationValue | ((chunks: string) => string) ->; - export type CreateTranslatorImplProps = Omit< InitializedIntlConfig, 'messages' @@ -41,11 +39,8 @@ export default function createTranslatorImpl< ...rest, onError, getMessageFallback, - messagesOrError: getMessagesOrError({ - messages, - namespace, - onError - }) as Messages | IntlError + messages, + namespace }); const originalRich = translator.rich; @@ -58,7 +53,7 @@ export default function createTranslatorImpl< base.rich = ( key: Parameters[0], /** Key value pairs for values to interpolate into the message. */ - values: CoreRichTranslationValues, + values: RichTranslationValuesPlain, formats?: Parameters[2] ): string => { // `chunks` is returned as a string when no React element diff --git a/packages/use-intl/src/core/index.tsx b/packages/use-intl/src/core/index.tsx index 6bbcecc8f..301fa56c2 100644 --- a/packages/use-intl/src/core/index.tsx +++ b/packages/use-intl/src/core/index.tsx @@ -1,14 +1,22 @@ export type {default as AbstractIntlMessages} from './AbstractIntlMessages'; export type { default as TranslationValues, - RichTranslationValues + RichTranslationValues, + RichTranslationValuesPlain } from './TranslationValues'; export type {default as Formats} from './Formats'; +export type {default as IntlConfig} from './IntlConfig'; export type {default as DateTimeFormatOptions} from './DateTimeFormatOptions'; export type {default as NumberFormatOptions} from './NumberFormatOptions'; export {default as IntlError, IntlErrorCode} from './IntlError'; export {default as createTranslator} from './createTranslator'; +export {default as createBaseTranslator} from './createBaseTranslator'; export {default as createFormatter} from './createFormatter'; +export {default as initializeConfig} from './initializeConfig'; +export {default as MessageKeys} from './utils/MessageKeys'; +export {default as NamespaceKeys} from './utils/NamespaceKeys'; +export {default as NestedKeyOf} from './utils/NestedKeyOf'; +export {default as NestedValueOf} from './utils/NestedValueOf'; // TODO: Remove in next major version export {default as createIntl} from './createIntl'; diff --git a/packages/use-intl/src/core/initializeConfig.tsx b/packages/use-intl/src/core/initializeConfig.tsx new file mode 100644 index 000000000..854a1371f --- /dev/null +++ b/packages/use-intl/src/core/initializeConfig.tsx @@ -0,0 +1,29 @@ +import IntlConfig from './IntlConfig'; +import {defaultGetMessageFallback, defaultOnError} from './defaults'; +import validateMessages from './validateMessages'; + +/** + * Enhances the incoming props with defaults. + */ +export default function initializeConfig< + // This is a generic to allow for stricter typing. E.g. + // the RSC integration always provides a `now` value. + Props extends Omit +>({getMessageFallback, messages, onError, ...rest}: Props) { + const finalOnError = onError || defaultOnError; + const finalGetMessageFallback = + getMessageFallback || defaultGetMessageFallback; + + if (process.env.NODE_ENV !== 'production') { + if (messages) { + validateMessages(messages, finalOnError); + } + } + + return { + ...rest, + messages, + onError: finalOnError, + getMessageFallback: finalGetMessageFallback + }; +} diff --git a/packages/use-intl/src/react.tsx b/packages/use-intl/src/react.tsx new file mode 100644 index 000000000..f97dcae79 --- /dev/null +++ b/packages/use-intl/src/react.tsx @@ -0,0 +1 @@ +export * from './react/index'; diff --git a/packages/use-intl/src/react/IntlProvider.tsx b/packages/use-intl/src/react/IntlProvider.tsx index 2bba440e5..f7b6fcff1 100644 --- a/packages/use-intl/src/react/IntlProvider.tsx +++ b/packages/use-intl/src/react/IntlProvider.tsx @@ -1,15 +1,15 @@ import React, {ReactNode} from 'react'; import IntlConfig from '../core/IntlConfig'; +import initializeConfig from '../core/initializeConfig'; import IntlContext from './IntlContext'; -import getInitializedConfig from './getInitializedConfig'; type Props = IntlConfig & { children: ReactNode; }; -export default function IntlProvider({children, ...props}: Props) { +export default function IntlProvider({children, ...config}: Props) { return ( - + {children} ); diff --git a/packages/use-intl/src/react/getInitializedConfig.tsx b/packages/use-intl/src/react/getInitializedConfig.tsx index 88f08b77f..87230af1f 100644 --- a/packages/use-intl/src/react/getInitializedConfig.tsx +++ b/packages/use-intl/src/react/getInitializedConfig.tsx @@ -1,29 +1,2 @@ -import IntlConfig from '../core/IntlConfig'; -import {defaultGetMessageFallback, defaultOnError} from '../core/defaults'; -import validateMessages from '../core/validateMessages'; - -/** - * Enhances the incoming props with defaults. - */ -export default function getInitializedConfig< - // This is a generic to allow for stricter typing. E.g. - // the RSC integration always provides a `now` value. - Props extends Omit ->({getMessageFallback, messages, onError, ...rest}: Props) { - const finalOnError = onError || defaultOnError; - const finalGetMessageFallback = - getMessageFallback || defaultGetMessageFallback; - - if (process.env.NODE_ENV !== 'production') { - if (messages) { - validateMessages(messages, finalOnError); - } - } - - return { - ...rest, - messages, - onError: finalOnError, - getMessageFallback: finalGetMessageFallback - }; -} +// TODO: Only for backwards compatibility, remove in next major version +export {default} from '../core/initializeConfig'; diff --git a/packages/use-intl/src/react/useTranslationsImpl.tsx b/packages/use-intl/src/react/useTranslationsImpl.tsx index bd031fa47..4762d75f9 100644 --- a/packages/use-intl/src/react/useTranslationsImpl.tsx +++ b/packages/use-intl/src/react/useTranslationsImpl.tsx @@ -2,9 +2,7 @@ import IntlMessageFormat from 'intl-messageformat'; import {useMemo, useRef} from 'react'; import AbstractIntlMessages from '../core/AbstractIntlMessages'; -import createBaseTranslator, { - getMessagesOrError -} from '../core/createBaseTranslator'; +import createBaseTranslator from '../core/createBaseTranslator'; import resolveNamespace from '../core/resolveNamespace'; import NestedKeyOf from '../core/utils/NestedKeyOf'; import useIntlContext from './useIntlContext'; @@ -31,17 +29,12 @@ export default function useTranslationsImpl< Record> >({}); - const messagesOrError = useMemo( - () => getMessagesOrError({messages: allMessages, namespace, onError}), - [allMessages, namespace, onError] - ); - const translate = useMemo( () => createBaseTranslator({ cachedFormatsByLocale: cachedFormatsByLocaleRef.current, getMessageFallback, - messagesOrError, + messages: allMessages, defaultTranslationValues, namespace, onError, @@ -51,10 +44,10 @@ export default function useTranslationsImpl< }), [ getMessageFallback, - messagesOrError, - defaultTranslationValues, + allMessages, namespace, onError, + defaultTranslationValues, globalFormats, locale, timeZone diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2cecd5a4e..c2495dd8c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.1' +lockfileVersion: '6.0' settings: autoInstallPeers: true @@ -52,7 +52,7 @@ importers: version: 3.2.4(postcss@8.4.24) devDependencies: '@types/node': - specifier: 20.1.2 + specifier: ^20.1.2 version: 20.1.2 '@types/react': specifier: ^18.2.5 @@ -550,6 +550,9 @@ importers: react-dom: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) + rollup-plugin-preserve-directives: + specifier: 0.2.0 + version: 0.2.0(rollup@3.21.4) size-limit: specifier: ^8.2.6 version: 8.2.6 @@ -4549,7 +4552,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 17.0.23 + '@types/node': 20.1.2 chalk: 4.1.2 jest-message-util: 27.5.1 jest-util: 27.5.1 @@ -4561,7 +4564,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 17.0.23 + '@types/node': 20.1.2 chalk: 4.1.2 jest-message-util: 29.5.0 jest-util: 29.5.0 @@ -4582,7 +4585,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 17.0.23 + '@types/node': 20.1.2 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.8.1 @@ -4627,14 +4630,14 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 17.0.23 + '@types/node': 20.1.2 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.5.0 - jest-config: 29.5.0(@types/node@17.0.23) + jest-config: 29.5.0(@types/node@20.1.2) jest-haste-map: 29.5.0 jest-message-util: 29.5.0 jest-regex-util: 29.4.3 @@ -4668,7 +4671,7 @@ packages: dependencies: '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 17.0.23 + '@types/node': 20.1.2 jest-mock: 27.5.1 dev: true @@ -4678,7 +4681,7 @@ packages: dependencies: '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 17.0.23 + '@types/node': 20.1.2 jest-mock: 29.5.0 dev: true @@ -4705,7 +4708,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@sinonjs/fake-timers': 8.1.0 - '@types/node': 17.0.23 + '@types/node': 20.1.2 jest-message-util: 27.5.1 jest-mock: 27.5.1 jest-util: 27.5.1 @@ -4717,7 +4720,7 @@ packages: dependencies: '@jest/types': 29.5.0 '@sinonjs/fake-timers': 10.0.2 - '@types/node': 17.0.23 + '@types/node': 20.1.2 jest-message-util: 29.5.0 jest-mock: 29.5.0 jest-util: 29.5.0 @@ -4758,7 +4761,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 17.0.23 + '@types/node': 20.1.2 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -4797,7 +4800,7 @@ packages: '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.18 - '@types/node': 17.0.23 + '@types/node': 20.1.2 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -4937,7 +4940,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 17.0.23 + '@types/node': 20.1.2 '@types/yargs': 15.0.15 chalk: 4.1.2 dev: false @@ -4948,7 +4951,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 17.0.23 + '@types/node': 20.1.2 '@types/yargs': 16.0.5 chalk: 4.1.2 @@ -4959,7 +4962,7 @@ packages: '@jest/schemas': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 17.0.23 + '@types/node': 20.1.2 '@types/yargs': 17.0.24 chalk: 4.1.2 @@ -5857,7 +5860,7 @@ packages: engines: {node: '>=14'} hasBin: true dependencies: - '@types/node': 17.0.23 + '@types/node': 20.1.2 playwright-core: 1.33.0 optionalDependencies: fsevents: 2.3.2 @@ -6640,7 +6643,7 @@ packages: dependencies: '@types/http-cache-semantics': 4.0.1 '@types/keyv': 3.1.4 - '@types/node': 17.0.23 + '@types/node': 20.1.2 '@types/responselike': 1.0.0 dev: true @@ -6698,12 +6701,12 @@ packages: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 17.0.23 + '@types/node': 20.1.2 /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 17.0.23 + '@types/node': 20.1.2 dev: true /@types/hast@2.3.4: @@ -6753,7 +6756,7 @@ packages: /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: - '@types/node': 17.0.23 + '@types/node': 20.1.2 '@types/tough-cookie': 4.0.2 parse5: 7.1.2 dev: true @@ -6776,7 +6779,7 @@ packages: /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 17.0.23 + '@types/node': 20.1.2 dev: true /@types/lodash@4.14.176: @@ -6816,10 +6819,10 @@ packages: /@types/node@17.0.23: resolution: {integrity: sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==} + dev: true /@types/node@20.1.2: resolution: {integrity: sha512-CTO/wa8x+rZU626cL2BlbCDzydgnFNgc19h4YvizpTO88MFQxab8wqisxaofQJ/9bLGugRdWIuX/TbIs6VVF6g==} - dev: true /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -6856,13 +6859,13 @@ packages: /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 17.0.23 + '@types/node': 20.1.2 dev: true /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: - '@types/node': 17.0.23 + '@types/node': 20.1.2 dev: true /@types/scheduler@0.16.3: @@ -6900,7 +6903,7 @@ packages: /@types/webpack-sources@3.2.0: resolution: {integrity: sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==} dependencies: - '@types/node': 17.0.23 + '@types/node': 20.1.2 '@types/source-list-map': 0.1.2 source-map: 0.7.4 dev: false @@ -6908,7 +6911,7 @@ packages: /@types/webpack@4.41.33: resolution: {integrity: sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==} dependencies: - '@types/node': 17.0.23 + '@types/node': 20.1.2 '@types/tapable': 1.0.8 '@types/uglify-js': 3.17.1 '@types/webpack-sources': 3.2.0 @@ -6939,7 +6942,7 @@ packages: resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} requiresBuild: true dependencies: - '@types/node': 17.0.23 + '@types/node': 20.1.2 dev: true optional: true @@ -7192,7 +7195,7 @@ packages: lodash: 4.17.21 mlly: 1.2.0 outdent: 0.8.0 - vite: 4.3.4(@types/node@17.0.23) + vite: 4.3.4(@types/node@20.1.2) vite-node: 0.28.5 transitivePeerDependencies: - '@types/node' @@ -15104,7 +15107,7 @@ packages: '@jest/environment': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 17.0.23 + '@types/node': 20.1.2 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -15132,7 +15135,7 @@ packages: '@jest/expect': 29.5.0 '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 17.0.23 + '@types/node': 20.1.2 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -15290,6 +15293,45 @@ packages: - supports-color dev: true + /jest-config@29.5.0(@types/node@20.1.2): + resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + dependencies: + '@babel/core': 7.22.5 + '@jest/test-sequencer': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 20.1.2 + babel-jest: 29.5.0(@babel/core@7.22.5) + chalk: 4.1.2 + ci-info: 3.8.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.5.0 + jest-environment-node: 29.5.0 + jest-get-type: 29.4.3 + jest-regex-util: 29.4.3 + jest-resolve: 29.5.0 + jest-runner: 29.5.0 + jest-util: 29.5.0 + jest-validate: 29.5.0 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 29.5.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + /jest-diff@27.5.1: resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -15353,7 +15395,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 17.0.23 + '@types/node': 20.1.2 jest-mock: 27.5.1 jest-util: 27.5.1 jsdom: 16.7.0 @@ -15377,7 +15419,7 @@ packages: '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 '@types/jsdom': 20.0.1 - '@types/node': 17.0.23 + '@types/node': 20.1.2 jest-mock: 29.5.0 jest-util: 29.5.0 jsdom: 20.0.3 @@ -15394,7 +15436,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 17.0.23 + '@types/node': 20.1.2 jest-mock: 27.5.1 jest-util: 27.5.1 dev: true @@ -15406,7 +15448,7 @@ packages: '@jest/environment': 29.5.0 '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 17.0.23 + '@types/node': 20.1.2 jest-mock: 29.5.0 jest-util: 29.5.0 dev: true @@ -15432,7 +15474,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@types/graceful-fs': 4.1.6 - '@types/node': 17.0.23 + '@types/node': 20.1.2 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -15452,7 +15494,7 @@ packages: dependencies: '@jest/types': 29.5.0 '@types/graceful-fs': 4.1.6 - '@types/node': 17.0.23 + '@types/node': 20.1.2 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -15473,7 +15515,7 @@ packages: '@jest/source-map': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 17.0.23 + '@types/node': 20.1.2 chalk: 4.1.2 co: 4.6.0 expect: 27.5.1 @@ -15561,7 +15603,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 17.0.23 + '@types/node': 20.1.2 dev: true /jest-mock@29.5.0: @@ -15569,7 +15611,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 17.0.23 + '@types/node': 20.1.2 jest-util: 29.5.0 dev: true @@ -15667,7 +15709,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 17.0.23 + '@types/node': 20.1.2 chalk: 4.1.2 emittery: 0.8.1 graceful-fs: 4.2.11 @@ -15699,7 +15741,7 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 17.0.23 + '@types/node': 20.1.2 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -15760,7 +15802,7 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 17.0.23 + '@types/node': 20.1.2 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 @@ -15783,7 +15825,7 @@ packages: resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@types/node': 17.0.23 + '@types/node': 20.1.2 graceful-fs: 4.2.11 /jest-snapshot@27.5.1: @@ -15852,7 +15894,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 17.0.23 + '@types/node': 20.1.2 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -15863,7 +15905,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 17.0.23 + '@types/node': 20.1.2 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -15928,7 +15970,7 @@ packages: dependencies: '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 17.0.23 + '@types/node': 20.1.2 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 27.5.1 @@ -15941,7 +15983,7 @@ packages: dependencies: '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 17.0.23 + '@types/node': 20.1.2 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -15953,7 +15995,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 17.0.23 + '@types/node': 20.1.2 merge-stream: 2.0.0 supports-color: 7.2.0 @@ -15961,7 +16003,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 17.0.23 + '@types/node': 20.1.2 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -15969,7 +16011,7 @@ packages: resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 17.0.23 + '@types/node': 20.1.2 jest-util: 29.5.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -21811,6 +21853,15 @@ packages: rollup-plugin-inject: 3.0.2 dev: true + /rollup-plugin-preserve-directives@0.2.0(rollup@3.21.4): + resolution: {integrity: sha512-KUwbBaFvD1zFIDNnOkR+u64sSod3m0l6q46/SzTOa4GTQ6hp6w0FRr2u7x99YkY9qhlna5panmTmuLWeJ/2KWw==} + peerDependencies: + rollup: 2.x || 3.x + dependencies: + magic-string: 0.30.0 + rollup: 3.21.4 + dev: true + /rollup-plugin-sourcemaps@0.6.3(@types/node@17.0.23)(rollup@2.79.1): resolution: {integrity: sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==} engines: {node: '>=10.0.0'} @@ -24153,7 +24204,7 @@ packages: /upath2@3.1.19: resolution: {integrity: sha512-d23dQLi8nDWSRTIQwXtaYqMrHuca0As53fNiTLLFDmsGBbepsZepISaB2H1x45bDFN/n3Qw9bydvyZEacTrEWQ==} dependencies: - '@types/node': 17.0.23 + '@types/node': 20.1.2 path-is-network-drive: 1.0.20 path-strip-sep: 1.0.17 tslib: 2.5.0 @@ -24443,7 +24494,7 @@ packages: picocolors: 1.0.0 source-map: 0.6.1 source-map-support: 0.5.21 - vite: 4.3.4(@types/node@17.0.23) + vite: 4.3.4(@types/node@20.1.2) transitivePeerDependencies: - '@types/node' - less @@ -24454,7 +24505,7 @@ packages: - terser dev: true - /vite-node@0.32.2(@types/node@17.0.23): + /vite-node@0.32.2(@types/node@20.1.2): resolution: {integrity: sha512-dTQ1DCLwl2aEseov7cfQ+kDMNJpM1ebpyMMMwWzBvLbis8Nla/6c9WQcqpPssTwS6Rp/+U6KwlIj8Eapw4bLdA==} engines: {node: '>=v14.18.0'} hasBin: true @@ -24464,7 +24515,7 @@ packages: mlly: 1.2.0 pathe: 1.1.0 picocolors: 1.0.0 - vite: 4.3.4(@types/node@17.0.23) + vite: 4.3.4(@types/node@20.1.2) transitivePeerDependencies: - '@types/node' - less @@ -24475,7 +24526,7 @@ packages: - terser dev: true - /vite@4.3.4(@types/node@17.0.23): + /vite@4.3.4(@types/node@20.1.2): resolution: {integrity: sha512-f90aqGBoxSFxWph2b39ae2uHAxm5jFBBdnfueNxZAT1FTpM13ccFQExCaKbR2xFW5atowjleRniQ7onjJ22QEg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -24500,7 +24551,7 @@ packages: terser: optional: true dependencies: - '@types/node': 17.0.23 + '@types/node': 20.1.2 esbuild: 0.17.6 postcss: 8.4.24 rollup: 3.21.4 @@ -24542,7 +24593,7 @@ packages: '@edge-runtime/vm': 3.0.3 '@types/chai': 4.3.5 '@types/chai-subset': 1.3.3 - '@types/node': 17.0.23 + '@types/node': 20.1.2 '@vitest/expect': 0.32.2 '@vitest/runner': 0.32.2 '@vitest/snapshot': 0.32.2 @@ -24562,8 +24613,8 @@ packages: strip-literal: 1.0.1 tinybench: 2.5.0 tinypool: 0.5.0 - vite: 4.3.4(@types/node@17.0.23) - vite-node: 0.32.2(@types/node@17.0.23) + vite: 4.3.4(@types/node@20.1.2) + vite-node: 0.32.2(@types/node@20.1.2) why-is-node-running: 2.2.2 transitivePeerDependencies: - less From a2f35537ecdb26153d0b25a3953f40c76fd501fd Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Wed, 26 Jul 2023 10:35:29 +0200 Subject: [PATCH 245/312] Use built-in RSC serialization for `now` --- .../src/app/[locale]/client/page.tsx | 2 +- .../next-intl/src/shared/NextIntlClientProvider.tsx | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/examples/example-next-13-advanced/src/app/[locale]/client/page.tsx b/examples/example-next-13-advanced/src/app/[locale]/client/page.tsx index 098e4ec0e..22b2fd9ed 100644 --- a/examples/example-next-13-advanced/src/app/[locale]/client/page.tsx +++ b/examples/example-next-13-advanced/src/app/[locale]/client/page.tsx @@ -18,7 +18,7 @@ export default function Client() {

    {t('description')}

    {now.toISOString()}

    - + diff --git a/packages/next-intl/src/shared/NextIntlClientProvider.tsx b/packages/next-intl/src/shared/NextIntlClientProvider.tsx index 41dff0c8f..ea1460b10 100644 --- a/packages/next-intl/src/shared/NextIntlClientProvider.tsx +++ b/packages/next-intl/src/shared/NextIntlClientProvider.tsx @@ -4,10 +4,8 @@ import {useRouter} from 'next/router'; import React, {ComponentProps} from 'react'; import {IntlProvider} from 'use-intl'; -type Props = Omit, 'locale' | 'now'> & { +type Props = Omit, 'locale'> & { locale?: string; - /** If a string is supplied, make sure this conforms to the ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ */ - now?: Date | string; }; export default function NextIntlClientProvider({ @@ -31,10 +29,11 @@ export default function NextIntlClientProvider({ locale = router.locale; } - // TODO: Currently RSC serialize dates to strings, therefore make sure we have - // a date object. We might be able to remove this once more types have - // first-class serialization support (https://github.com/facebook/react/issues/25687) + // TODO: This is no longer necessary, remove for stable release if (typeof now === 'string') { + console.error( + 'Passing an ISO date string to `NextIntlClientProvider` is deprecated since React Server Components have built-in support for serializing dates now. To upgrade, pass a `Date` instance instead.' + ); now = new Date(now); } From dbc06d17fe1cb60eed251e8eafdf254389d028a6 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 24 Aug 2023 10:00:08 +0200 Subject: [PATCH 246/312] Fix lint --- packages/next-intl/test/middleware/middleware.test.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/next-intl/test/middleware/middleware.test.tsx b/packages/next-intl/test/middleware/middleware.test.tsx index e87a5db7b..eff77132b 100644 --- a/packages/next-intl/test/middleware/middleware.test.tsx +++ b/packages/next-intl/test/middleware/middleware.test.tsx @@ -8,7 +8,7 @@ import {DomainConfig} from '../../src/middleware/NextIntlMiddlewareConfig'; import {COOKIE_LOCALE_NAME} from '../../src/shared/constants'; vi.mock('next/server', () => { - type MiddlewareResponseInit = Parameters[0]; + type MiddlewareResponseInit = Parameters<(typeof NextResponse)['next']>[0]; function createResponse(init: MiddlewareResponseInit) { const response = new Response(null, init); @@ -62,9 +62,9 @@ function createMockRequest( } const MockedNextResponse = NextResponse as unknown as { - next: Mock>; - rewrite: Mock>; - redirect: Mock>; + next: Mock>; + rewrite: Mock>; + redirect: Mock>; }; beforeEach(() => { From e343ce0d2dc95e51d004e6ebc706b663f7e35217 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 24 Aug 2023 10:17:08 +0200 Subject: [PATCH 247/312] Fix test --- .../example-next-13-advanced/tests/main.spec.ts | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/examples/example-next-13-advanced/tests/main.spec.ts b/examples/example-next-13-advanced/tests/main.spec.ts index 6b4b78764..5028a1835 100644 --- a/examples/example-next-13-advanced/tests/main.spec.ts +++ b/examples/example-next-13-advanced/tests/main.spec.ts @@ -482,18 +482,12 @@ it('can use rewrites to localize pathnames', async ({page, request}) => { expect(response.status()).toBe(404); }); -it('replaces invalid cookie locales', async ({request}) => { - const response = await request.get('/', { - maxRedirects: 0, - headers: { - cookie: 'NEXT_LOCALE=zh' - } +it('replaces invalid cookie locales', async ({page}) => { + page.setExtraHTTPHeaders({ + cookie: 'NEXT_LOCALE=zh' }); - expect(new URL(response.url()).pathname).toBe('/'); - expect(response.status()).toBe(200); - expect(response.headers()['set-cookie']).toBe( - 'NEXT_LOCALE=en; Path=/; SameSite=strict' - ); + await page.goto('/'); + assertLocaleCookieValue(page, 'en'); }); it('can localize route handlers', async ({request}) => { From f408d92d927b27ffe41d7489b488485e94f3a35d Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 25 Aug 2023 18:25:23 +0200 Subject: [PATCH 248/312] feat: Add built-in pathname localization (#426) --- docs/.eslintrc.js | 3 +- docs/components/Callout.tsx | 2 +- docs/components/CodeSnippets.tsx | 4 +- docs/components/CommunityLink.tsx | 2 +- docs/components/Footer.tsx | 2 +- docs/components/Hero.tsx | 4 +- docs/components/HeroCode.tsx | 2 +- docs/components/LinkButton.tsx | 2 +- docs/package.json | 6 +- docs/pages/docs/routing/index.mdx | 6 +- docs/pages/docs/routing/middleware.mdx | 70 +- docs/pages/docs/routing/navigation.mdx | 400 +++++- docs/pages/index.mdx | 2 +- docs/prettier.config.js | 3 +- examples/example-advanced/.eslintrc.js | 2 - examples/example-advanced/package.json | 4 +- .../src/components/Navigation.spec.tsx | 2 - .../example-next-13-advanced/.eslintrc.js | 2 - .../example-next-13-advanced/messages/de.json | 6 +- .../example-next-13-advanced/messages/en.json | 6 +- .../example-next-13-advanced/messages/es.json | 6 +- .../example-next-13-advanced/next.config.js | 15 +- .../example-next-13-advanced/package.json | 4 +- .../src/app/[locale]/client/ClientContent.tsx | 2 +- .../src/app/[locale]/client/redirect/page.tsx | 2 +- .../src/app/[locale]/layout.tsx | 14 +- .../[locale]/nested/UnlocalizedPathname.tsx | 7 + .../src/app/[locale]/nested/page.tsx | 2 + .../app/[locale]/news/[articleId]/page.tsx | 12 + .../src/app/[locale]/page.tsx | 2 +- .../src/app/[locale]/redirect/page.tsx | 2 +- .../src/components/ClientLink.tsx | 8 +- .../ClientRouterWithoutProvider.tsx | 2 +- .../src/components/LocaleSwitcher.tsx | 2 +- .../src/components/Navigation.tsx | 5 + .../src/components/NavigationLink.tsx | 23 +- .../src/components/PageLayout.tsx | 16 +- .../src/middleware.ts | 6 +- .../src/navigation.tsx | 29 + .../tests/main.spec.ts | 37 +- .../example-next-13-named-routes/.eslintrc.js | 2 - .../example-next-13-named-routes/package.json | 4 +- .../example-next-13-next-auth/.eslintrc.js | 2 - .../example-next-13-next-auth/package.json | 4 +- .../example-next-13-with-pages/.eslintrc.js | 2 - .../example-next-13-with-pages/package.json | 4 +- examples/example-next-13/.eslintrc.js | 3 +- examples/example-next-13/messages/de.json | 2 +- examples/example-next-13/messages/en.json | 2 +- examples/example-next-13/package.json | 6 +- examples/example-next-13/prettier.config.js | 3 - .../src/app/[locale]/about/page.tsx | 2 +- .../src/components/LocaleSwitcherSelect.tsx | 6 +- .../src/components/Navigation.spec.tsx | 5 +- .../src/components/Navigation.tsx | 2 +- .../src/components/NavigationLink.tsx | 19 +- .../src/components/PageLayout.tsx | 2 +- examples/example-next-13/src/middleware.ts | 6 +- examples/example-next-13/src/navigation.ts | 20 + examples/example-remix/.eslintrc.js | 2 - examples/example-remix/package.json | 4 +- examples/example/.eslintrc.js | 2 - examples/example/package.json | 4 +- packages/next-intl/.eslintrc.js | 9 +- packages/next-intl/middleware.d.ts | 2 + packages/next-intl/navigation.d.ts | 1 + packages/next-intl/package.json | 14 +- packages/next-intl/src/client/usePathname.tsx | 4 +- packages/next-intl/src/client/useRouter.tsx | 20 +- packages/next-intl/src/link/Link.tsx | 25 +- .../next-intl/src/link/react-server/Link.tsx | 13 +- .../middleware/NextIntlMiddlewareConfig.tsx | 56 +- .../getAlternateLinksHeaderValue.tsx | 106 +- .../next-intl/src/middleware/middleware.tsx | 206 ++- .../src/middleware/resolveLocale.tsx | 39 +- packages/next-intl/src/middleware/utils.tsx | 145 +- .../next-intl/src/navigation.react-server.tsx | 1 + packages/next-intl/src/navigation.tsx | 1 + .../next-intl/src/navigation/StrictParams.tsx | 27 + .../createLocalizedPathnamesNavigation.tsx | 128 ++ .../createSharedPathnamesNavigation.tsx | 17 + packages/next-intl/src/navigation/index.tsx | 5 + .../createLocalizedPathnamesNavigation.tsx | 75 + .../createSharedPathnamesNavigation.tsx | 23 + .../src/navigation/react-server/index.tsx | 1 + packages/next-intl/src/navigation/utils.tsx | 179 +++ packages/next-intl/src/react-client/index.tsx | 4 + .../useLocale.tsx} | 8 +- .../next-intl/src/server/baseRedirect.tsx | 12 + packages/next-intl/src/server/index.tsx | 5 +- .../src/server/react-client/index.tsx | 2 +- .../src/server/react-client/redirect.tsx | 16 +- packages/next-intl/src/server/redirect.tsx | 10 +- packages/next-intl/src/shared/BaseLink.tsx | 4 +- packages/next-intl/src/shared/redirect.tsx | 7 - packages/next-intl/src/shared/types.tsx | 21 + packages/next-intl/src/shared/utils.tsx | 30 +- packages/next-intl/test/link/Link.test.tsx | 4 +- .../getAlternateLinksHeaderValue.test.tsx | 317 +++- .../test/middleware/middleware.test.tsx | 1095 +++++++++++++- .../next-intl/test/middleware/utils.test.tsx | 125 ++ ...reateLocalizedPathnamesNavigation.test.tsx | 431 ++++++ .../createSharedPathnamesNavigation.test.tsx | 114 ++ .../next-intl/test/navigation/utils.test.tsx | 20 + .../test/react-client/useLocale.test.tsx | 17 + packages/next-intl/test/shared/utils.test.tsx | 80 +- packages/next-intl/tsconfig.json | 7 +- packages/use-intl/.eslintrc.js | 2 - packages/use-intl/package.json | 4 +- .../src/core/createBaseTranslator.tsx | 2 +- .../use-intl/src/core/createTranslator.tsx | 1 - .../use-intl/src/react/useTranslations.tsx | 2 +- .../use-intl/test/react/useFormatter.test.tsx | 2 +- packages/use-intl/test/react/useIntl.test.tsx | 2 +- pnpm-lock.yaml | 1270 ++++++++++++----- 115 files changed, 4629 insertions(+), 916 deletions(-) create mode 100644 examples/example-next-13-advanced/src/app/[locale]/nested/UnlocalizedPathname.tsx create mode 100644 examples/example-next-13-advanced/src/app/[locale]/news/[articleId]/page.tsx create mode 100644 examples/example-next-13-advanced/src/navigation.tsx delete mode 100644 examples/example-next-13/prettier.config.js create mode 100644 examples/example-next-13/src/navigation.ts create mode 100644 packages/next-intl/navigation.d.ts create mode 100644 packages/next-intl/src/navigation.react-server.tsx create mode 100644 packages/next-intl/src/navigation.tsx create mode 100644 packages/next-intl/src/navigation/StrictParams.tsx create mode 100644 packages/next-intl/src/navigation/createLocalizedPathnamesNavigation.tsx create mode 100644 packages/next-intl/src/navigation/createSharedPathnamesNavigation.tsx create mode 100644 packages/next-intl/src/navigation/index.tsx create mode 100644 packages/next-intl/src/navigation/react-server/createLocalizedPathnamesNavigation.tsx create mode 100644 packages/next-intl/src/navigation/react-server/createSharedPathnamesNavigation.tsx create mode 100644 packages/next-intl/src/navigation/react-server/index.tsx create mode 100644 packages/next-intl/src/navigation/utils.tsx rename packages/next-intl/src/{client/useClientLocale.tsx => react-client/useLocale.tsx} (71%) create mode 100644 packages/next-intl/src/server/baseRedirect.tsx delete mode 100644 packages/next-intl/src/shared/redirect.tsx create mode 100644 packages/next-intl/src/shared/types.tsx create mode 100644 packages/next-intl/test/middleware/utils.test.tsx create mode 100644 packages/next-intl/test/navigation/createLocalizedPathnamesNavigation.test.tsx create mode 100644 packages/next-intl/test/navigation/createSharedPathnamesNavigation.test.tsx create mode 100644 packages/next-intl/test/navigation/utils.test.tsx create mode 100644 packages/next-intl/test/react-client/useLocale.test.tsx diff --git a/docs/.eslintrc.js b/docs/.eslintrc.js index b7d452735..fdca848ef 100644 --- a/docs/.eslintrc.js +++ b/docs/.eslintrc.js @@ -1,9 +1,8 @@ -require('eslint-config-molindo/setupPlugins'); - module.exports = { extends: [ 'molindo/typescript', 'molindo/react', + 'molindo/tailwind', 'plugin:@next/next/recommended' ], env: { diff --git a/docs/components/Callout.tsx b/docs/components/Callout.tsx index 46d7bcb05..7fa63cc5a 100644 --- a/docs/components/Callout.tsx +++ b/docs/components/Callout.tsx @@ -44,7 +44,7 @@ export default function Callout({ )} >
    {"''"} -
    -
    +
    +
    title
    followers
    diff --git a/docs/components/CommunityLink.tsx b/docs/components/CommunityLink.tsx index 81f481d33..c8abe88ea 100644 --- a/docs/components/CommunityLink.tsx +++ b/docs/components/CommunityLink.tsx @@ -23,7 +23,7 @@ export default function CommunityLink({
    {type && ( {{article: 'Article', video: 'Video'}[type]} diff --git a/docs/components/Footer.tsx b/docs/components/Footer.tsx index 0a73de5ba..69b88ebc1 100644 --- a/docs/components/Footer.tsx +++ b/docs/components/Footer.tsx @@ -11,7 +11,7 @@ export default function Footer() { return (
    -
    +
    Docs diff --git a/docs/components/Hero.tsx b/docs/components/Hero.tsx index cd9e645e0..c99fceb37 100644 --- a/docs/components/Hero.tsx +++ b/docs/components/Hero.tsx @@ -22,8 +22,8 @@ export default function Hero({ }: Props) { return (
    -
    -
    +
    +
    diff --git a/docs/components/HeroCode.tsx b/docs/components/HeroCode.tsx index 44e9405da..bf7a05404 100644 --- a/docs/components/HeroCode.tsx +++ b/docs/components/HeroCode.tsx @@ -16,7 +16,7 @@ function Tab({ className={clsx( 'flex items-center rounded-md px-4 py-2 text-sm font-medium transition-colors', active - ? 'bg-slate-800 text-sky-100/70 text-white' + ? 'bg-slate-800 text-white' : 'bg-slate-800/40 text-slate-500 hover:bg-slate-800' )} onClick={onClick} diff --git a/docs/components/LinkButton.tsx b/docs/components/LinkButton.tsx index 6fc2ea847..e94bd692a 100644 --- a/docs/components/LinkButton.tsx +++ b/docs/components/LinkButton.tsx @@ -10,7 +10,7 @@ export default function LinkButton({variant = 'primary', ...rest}: Props) { return ( } - title="Internationalized routing middleware" + title="Routing middleware" href="/docs/routing/middleware" />
    + +Note that these features are only relevant if you use the App Router. If you're using [`next-intl` with the Pages Router](/docs/getting-started/pages-router), you can use the [built-in capabilities from Next.js](https://nextjs.org/docs/pages/building-your-application/routing/internationalization). diff --git a/docs/pages/docs/routing/middleware.mdx b/docs/pages/docs/routing/middleware.mdx index 8e2710705..92080a1be 100644 --- a/docs/pages/docs/routing/middleware.mdx +++ b/docs/pages/docs/routing/middleware.mdx @@ -22,6 +22,8 @@ export const config = { }; ``` +In addition to handling i18n routing, the middleware sets [the `link` header](https://developers.google.com/search/docs/specialty/international/localized-versions#http) to inform search engines that your content is available in different languages. + ## Strategies There are two strategies for detecting the locale: @@ -31,7 +33,7 @@ There are two strategies for detecting the locale: Once a locale is detected, it will be saved in a cookie. -### Prefix-based routing (default) [#prefix-based-routing] +### Strategy 1: Prefix-based routing (default) [#prefix-based-routing] Since your pages are nested within a `[locale]` folder, all routes are prefixed with one of your supported locales (e.g. `/de/about`). To keep the URL short, requests for the default locale are rewritten internally to work without a locale prefix. @@ -60,7 +62,7 @@ To change the locale, users can visit a prefixed route. This will take precedenc 4. When the user clicks on the link, a request to `/en` is initiated. 5. The middleware will update the cookie value to `en` and subsequently redirects the user to `/`. -### Domain-based routing +### Strategy 2: Domain-based routing [#domain-based-routing] If you want to serve your localized content based on different domains, you can provide a list of mappings between domains and locales to the middleware. @@ -189,7 +191,7 @@ In this case, only the locale prefix and a potentially [matching domain](#domain The middleware automatically sets [the `link` header](https://developers.google.com/search/docs/specialty/international/localized-versions#http) to inform search engines that your content is available in different languages. Note that this automatically integrates with your routing strategy and will generate the correct links based on your configuration. -If you prefer to include these links yourself, e.g. because you're using [locale-specific rewrites](#localizing-pathnames), you can opt-out of this behavior. +If you prefer to include these links yourself, you can opt-out of this behavior. ```tsx filename="middleware.ts" {6} import createMiddleware from 'next-intl/middleware'; @@ -203,27 +205,56 @@ export default createMiddleware({ ## Localizing pathnames -If you want to localize the pathnames of your app, you can accomplish this by using appropriate [rewrites](https://nextjs.org/docs/api-reference/next.config.js/rewrites). +Many apps choose to localize pathnames, especially when search engine optimization is relevant, e.g.: + +- `/en/about` +- `/de/ueber-uns` + +Since you want to define these routes only once internally, you can use the `next-intl` middleware to [rewrite](https://nextjs.org/docs/api-reference/next.config.js/rewrites) such incoming requests to shared pathnames. -```js filename="next.config.js" {7-8} -const withNextIntl = require('next-intl/plugin')(); +```tsx filename="middleware.ts" +import createMiddleware from 'next-intl/middleware'; + +export default createMiddleware({ + defaultLocale: 'en', + locales: ['en', 'de'], -module.exports = withNextIntl({ - rewrites() { - return [ - { - source: '/de/über', - destination: '/de/about' - } - ]; + // The `pathnames` object holds pairs of internal and + // external paths. Based on the locale, the external + // paths are rewritten to the shared, internal ones. + pathnames: { + // If all locales use the same pathname, a single + // external path can be used for all locales. + '/': '/', + '/blog': '/blog', + + // If locales use different paths, you can + // specify each external path per locale. + '/about': { + en: '/about', + de: '/ueber-uns' + }, + + // Dynamic params are supported via square brackets + '/news/[articleSlug]-[articleId]': { + en: '/news/[articleSlug]-[articleId]', + de: '/neuigkeiten/[articleSlug]-[articleId]' + }, + + // Also (optional) catch-all segments are supported + '/categories/[...slug]': { + en: '/categories/[...slug]', + de: '/kategorien/[...slug]' + } } }); ``` -Since `next-intl` isn't aware of the rewrites you've configured, you likely want to make some adjustments: - -1. Translate the pathnames you're passing to [navigation APIs](/docs/routing/navigation) like `Link` based on the `locale`. See the [named routes example](https://github.com/amannn/next-intl/blob/feat/next-13-rsc/examples/example-next-13-named-routes/) that uses the proposed APIs from [the Server Components beta](https://next-intl-docs.vercel.app/docs/getting-started/app-router-server-components). -2. Turn off [the `alternateLinks` option](/docs/routing/middleware#disable-alternate-links) and provide [search engine hints about localized versions of your content](https://developers.google.com/search/docs/specialty/international/localized-versions) by yourself. + + If you have pathname localization set up in the middleware, you likely want to + use the [localized navigation + APIs](/docs/routing/navigation#localized-pathnames) in your components. + ## Composing other middlewares @@ -332,7 +363,8 @@ If you're using the [static export feature from Next.js](https://nextjs.org/docs 1. There's no default locale that can be used without a prefix (same as [`localePrefix: 'always'`](#always-use-a-locale-prefix)) 2. The locale can't be negotiated at runtime (same as [`localeDetection: false`](#disable-automatic-locale-detection)) -3. You need to add a redirect for the root of the app +3. You can't use [pathname localization](#localizing-pathnames). +4. You need to add a redirect for the root of the app ```tsx filename="app/page.tsx" import {redirect} from 'next/navigation'; diff --git a/docs/pages/docs/routing/navigation.mdx b/docs/pages/docs/routing/navigation.mdx index 044853ba7..0e59aa592 100644 --- a/docs/pages/docs/routing/navigation.mdx +++ b/docs/pages/docs/routing/navigation.mdx @@ -1,31 +1,284 @@ import Callout from 'components/Callout'; +import {Tab, Tabs} from 'nextra-theme-docs'; # Next.js 13 internationalized navigation `next-intl` provides drop-in replacements for common Next.js navigation APIs that automatically handle the user locale behind the scenes. -## `Link` +## Strategies + +There are two strategies that you can use based on your needs. + +**Shared pathnames:** The simplest case is when your app uses the same pathnames, regardless of the locale. + +For example: + +- `/en/about` +- `/de/about` + +**Localized pathnames:** Many apps choose to localize pathnames however, especially when search engine optimization is relevant. In this case, you'll provide distinct pathnames based on the user locale. + +For example: + +- `/en/about` +- `/de/ueber-uns` + +--- + +Each strategy will provide you with corresponding [navigation APIs](#apis) that you'll typically provide in a central module to easily access them in components (e.g. `./navigation.ts`). + +### Strategy 1: Shared pathnames [#shared-pathnames] + +With this strategy, the pathnames of your app are identical for all locales. This is the simplest case, because the routes you define in Next.js will map directly to the pathnames that a user can request. + +To create [navigation APIs](#apis) for this strategy, use the `createSharedPathnamesNavigation` function: + +```tsx filename="./navigation.ts" +import {createSharedPathnamesNavigation} from 'next-intl/navigation'; + +export const locales = ['en', 'de'] as const; + +export const {Link, redirect, usePathname, useRouter} = + createSharedPathnamesNavigation({locales}); +``` + +The `locales` argument is identical to the configuration that you pass to the middleware. To reuse it there, you can import the `locales` into the middleware. + +```tsx filename="middleware.ts" +import createMiddleware from 'next-intl/middleware'; +import {locales} from './navigation'; + +export default createMiddleware({ + defaultLocale: 'en', + locales +}); +``` + +### Strategy 2: Localized pathnames [#localized-pathnames] + +When using this strategy, you have to provide distinct pathnames for every locale that your app supports. However, the localized variants will be handled by a single route internally, therefore a mapping needs to be provided that is also [consumed by the middleware](/docs/routing/middleware#localizing-pathnames). + +You can use the `createLocalizedPathnamesNavigation` function to create corresponding [navigation APIs](#apis): + +```tsx filename="./navigation.ts" +import { + createLocalizedPathnamesNavigation, + Pathnames +} from 'next-intl/navigation'; + +export const locales = ['en', 'de'] as const; + +// The `pathnames` object holds pairs of internal +// and external paths, separated by locale. +export const pathnames = { + // If all locales use the same pathname, a + // single external path can be provided. + '/': '/', + '/blog': '/blog', + + // If locales use different paths, you can + // specify each external path per locale. + '/about': { + en: '/about', + de: '/ueber-uns' + }, + + // Dynamic params are supported via square brackets + '/news/[articleSlug]-[articleId]': { + en: '/news/[articleSlug]-[articleId]', + de: '/neuigkeiten/[articleSlug]-[articleId]' + }, + + // Also (optional) catch-all segments are supported + '/categories/[...slug]': { + en: '/categories/[...slug]', + de: '/kategorien/[...slug]' + } +} satisfies Pathnames; + +export const {Link, redirect, usePathname, useRouter} = + createLocalizedPathnamesNavigation({locales, pathnames}); +``` + +The `pathnames` argument is identical to the configuration that you pass to the middleware for [localizing pathnames](/docs/routing/middleware#localizing-pathnames). Because of this, you might want to import the `locales` and `pathnames` into the middleware. + +```tsx filename="middleware.ts" +import createMiddleware from 'next-intl/middleware'; +import {locales, pathnames} from './navigation'; + +export default createMiddleware({ + defaultLocale: 'en', + locales, + pathnames +}); +``` + + + Have a look at the [App Router example](/examples/app-router) to explore a + working implementation of localized pathnames. + + +## APIs + +### `Link` This component wraps [`next/link`](https://nextjs.org/docs/app/api-reference/components/link) and automatically prefixes the `href` with the current locale as necessary. If the default locale is matched, the `href` remains unchanged and no prefix is added. + + + ```tsx -import Link from 'next-intl/link'; +import {Link} from '../navigation'; // When the user is on `/en`, the link will point to `/en/about` About // You can override the `locale` to switch to another language Switch to German + +// Dynamic params need to be interpolated into the pathname +Susan +``` + +
    +How can I render a navigation link? + +The [`useSelectedLayoutSegment` hook](https://nextjs.org/docs/app/api-reference/functions/use-selected-layout-segment) from Next.js allows you to detect if a given child segment is active from within the parent layout. Since this returns an internal pathname, it can be matched against an `href` that you can pass to `Link`. + +```tsx filename="NavigationLink.tsx" +'use client'; + +import {useSelectedLayoutSegment} from 'next/navigation'; +import {ComponentProps} from 'react'; +import {Link} from '../navigation'; + +export default function NavigationLink({ + href, + ...rest +}: ComponentProps) { + const selectedLayoutSegment = useSelectedLayoutSegment(); + const pathname = selectedLayoutSegment ? `/${selectedLayoutSegment}` : '/'; + const isActive = pathname === href; + + return ( + + ); +} +``` + +```tsx filename="Navigation.tsx" + +``` + +See also the Next.js docs on [creating an active link component](https://nextjs.org/docs/app/api-reference/functions/use-selected-layout-segment#creating-an-active-link-component). + +
    + +
    + +When using [localized pathnames](#localized-pathnames), the `href` prop corresponds to an internal pathname, but will be mapped to a locale-specific pathname. + +```tsx +import {Link} from '../navigation'; + +// When the user is on `/de`, the link will point to `/de/ueber-uns` +About + +// You can override the `locale` to switch to another language +Switch to English + +// Dynamic params can be passed via the object form + + Susan + + +// Catch-all params can be passed as arrays + + T-Shirts + + +// Search params can be added via `query` +Users +``` + +
    +How can I render a navigation link? + +The [`useSelectedLayoutSegment` hook](https://nextjs.org/docs/app/api-reference/functions/use-selected-layout-segment) from Next.js allows you to detect if a given child segment is active from within the parent layout. Since this returns an internal pathname, it can be matched against an `href` that you can pass to `Link`. + +To ensure that only valid pathnames can be passed to the component, we can accept a type argument to be forwarded to the wrapped `Link`. + +```tsx filename="NavigationLink.tsx" +'use client'; + +import {useSelectedLayoutSegment} from 'next/navigation'; +import {ComponentProps} from 'react'; +import {Link, pathnames} from '../navigation'; + +export default function NavigationLink< + Pathname extends keyof typeof pathnames +>({href, ...rest}: ComponentProps>) { + const selectedLayoutSegment = useSelectedLayoutSegment(); + const pathname = selectedLayoutSegment ? `/${selectedLayoutSegment}` : '/'; + const isActive = pathname === href; + + return ( + + ); +} ``` -## `useRouter` +```tsx filename="Navigation.tsx" + +``` + +See also the Next.js docs on [creating an active link component](https://nextjs.org/docs/app/api-reference/functions/use-selected-layout-segment#creating-an-active-link-component). + +
    + +
    +
    + +
    +How does prefetching of localized links work? +Just like `next/link`, by default all links are prefetched. The one exception to this is that links to other locales aren't prefetched, because this would result in prematurely overwriting the locale cookie. + +
    + +### `useRouter` If you need to navigate programmatically, e.g. in an event handler, `next-intl` provides a convience API that wraps [`useRouter` from Next.js](https://nextjs.org/docs/app/api-reference/functions/use-router) and automatically applies the locale of the user. + + ```tsx 'use client'; -import {useRouter} from 'next-intl/client'; +import {useRouter} from '../navigation'; const router = useRouter(); @@ -33,8 +286,12 @@ const router = useRouter(); router.push('/about'); // You can override the `locale` to switch to another language -router.push('/about', {locale: 'de'}); -``` +router.replace('/about', {locale: 'de'}); + +// Dynamic params need to be interpolated into the pathname +router.push('/users/12', {locale: 'de'}); + +````
    How can I change the locale for the current page? @@ -44,7 +301,7 @@ By combining [`usePathname`](#usepathname) with [`useRouter`](#userouter), you c ```tsx 'use client'; -import {usePathname, useRouter} from 'next-intl/client'; +import {usePathname, useRouter} from '../navigation'; const pathname = usePathname(); const router = useRouter(); @@ -53,40 +310,141 @@ router.replace(pathname, {locale: 'de'}); ```
    +
    + + +When using [localized pathnames](#localized-pathnames), the provided `href` corresponds to an internal pathname, but will be mapped to a locale-specific pathname. + +```tsx +'use client'; + +import {useRouter} from '../navigation'; + +const router = useRouter(); + +// When the user is on `/de`, the router will navigate to `/de/ueber-uns` +router.push('/about'); + +// You can override the `locale` to switch to another language +router.replace('/about', {locale: 'en'}); + +// Dynamic params need to be provided as objects +router.push({ + pathname: '/users/[userId]', + params: {userId: '12'} +}); + +// Search params can be added via `query` +router.push({ + pathname: '/users', + query: {sortBy: 'name'} +}); +```` + +
    +How can I change the locale for the current page? + +By combining [`usePathname`](#usepathname) with [`useRouter`](#userouter), you can change the locale for the current page programmatically. + +Note that if you have dynamic params on some routes, you should pass those as well to potentially resolve an internal pathname. + +```tsx +'use client'; + +import {useParams} from 'next/navigation'; +import {usePathname, useRouter} from '../navigation'; + +const pathname = usePathname(); +const router = useRouter(); +const params = useParams(); + +router.replace({pathname, params}, {locale: 'de'}); +``` + +
    +
    +
    -## `usePathname` +### `usePathname` To retrieve the pathname without a potential locale prefix, you can call `usePathname`. + + + ```tsx 'use client'; -import {usePathname} from 'next-intl/client'; +import {usePathname} from '../navigation'; // When the user is on `/en`, this will be `/` const pathname = usePathname(); ``` -## `redirect` + + + +When using [localized pathnames](#localized-pathnames), the returned pathname will correspond to an internal pathname. + +```tsx +'use client'; + +import {usePathname} from '../navigation'; + +// When the user is on `/de/ueber-uns`, this will be `/about` +const pathname = usePathname(); +``` + +Note that internal pathnames are returned without params being resolved (e.g. `/users/[userId]`). + + + + +### `redirect` This API is only available in [the Server Components beta](/docs/getting-started/app-router-server-components). -If you want to interrupt the render and redirect to another page, you can invoke the `redirect` function from `next-intl/server`. This wraps [the `redirect` function from Next.js](https://nextjs.org/docs/app/api-reference/functions/redirect) and automatically applies the current locale. +If you want to interrupt the render and redirect to another page, you can invoke the `redirect` function. This wraps [the `redirect` function from Next.js](https://nextjs.org/docs/app/api-reference/functions/redirect) and automatically applies the current locale. + + + -```tsx {1, 8} -import {redirect} from 'next-intl/server'; +```tsx +import {redirect} from '../navigation'; -export default async function Profile() { - const user = await fetchUser(); +// When the user is on `/en`, this will be `/en/login` +redirect('/login'); - if (!user) { - // When the user is on `/en/profile`, this will be `/en/login` - redirect('/login'); - } +// Dynamic params need to be interpolated into the pathname +router.push('/users/12'); +``` - // ... -} + + + +When using [localized pathnames](#localized-pathnames), the provided `href` corresponds to an internal pathname, but will be mapped to a locale-specific pathname. + +```tsx +import {redirect} from '../navigation'; + +// When the user is on `/en`, this will be `/en/login` +redirect('/login'); + +// Dynamic params need to be provided as objects +redirect({ + pathname: '/help/[articleSlug]', + params: {articleSlug: 'how-to-login'} +}); + +// Search params can be added via `query` +redirect({ + pathname: '/users', + query: {sortBy: 'name'} +}); ``` + + + diff --git a/docs/pages/index.mdx b/docs/pages/index.mdx index f4cd3cacf..eeb1a826d 100644 --- a/docs/pages/index.mdx +++ b/docs/pages/index.mdx @@ -24,7 +24,7 @@ import Hero from 'components/Hero';
    diff --git a/docs/prettier.config.js b/docs/prettier.config.js index b995eca94..2c41f2037 100644 --- a/docs/prettier.config.js +++ b/docs/prettier.config.js @@ -1,6 +1,5 @@ module.exports = { singleQuote: true, trailingComma: 'none', - bracketSpacing: false, - plugins: [require('prettier-plugin-tailwindcss')] + bracketSpacing: false }; diff --git a/examples/example-advanced/.eslintrc.js b/examples/example-advanced/.eslintrc.js index 0283fd0c1..93905790a 100644 --- a/examples/example-advanced/.eslintrc.js +++ b/examples/example-advanced/.eslintrc.js @@ -1,5 +1,3 @@ -require('eslint-config-molindo/setupPlugins'); - module.exports = { extends: [ 'molindo/typescript', diff --git a/examples/example-advanced/package.json b/examples/example-advanced/package.json index b50962de5..6fb02190d 100644 --- a/examples/example-advanced/package.json +++ b/examples/example-advanced/package.json @@ -24,8 +24,8 @@ "@types/lodash": "^4.14.176", "@types/node": "^17.0.23", "@types/react": "^18.2.5", - "eslint": "^8.39.0", - "eslint-config-molindo": "^6.0.0", + "eslint": "^8.46.0", + "eslint-config-molindo": "7.0.0-alpha.7", "eslint-config-next": "^13.4.0", "jest": "^27.4.5", "jest-environment-jsdom": "^27.0.0", diff --git a/examples/example-advanced/src/components/Navigation.spec.tsx b/examples/example-advanced/src/components/Navigation.spec.tsx index 1f3d7cd89..53e8d27f0 100644 --- a/examples/example-advanced/src/components/Navigation.spec.tsx +++ b/examples/example-advanced/src/components/Navigation.spec.tsx @@ -1,5 +1,3 @@ -// @ts-ignore - import {render} from '@testing-library/react'; import pick from 'lodash/pick'; import {NextIntlClientProvider} from 'next-intl'; diff --git a/examples/example-next-13-advanced/.eslintrc.js b/examples/example-next-13-advanced/.eslintrc.js index 3d3a6276c..24eb90084 100644 --- a/examples/example-next-13-advanced/.eslintrc.js +++ b/examples/example-next-13-advanced/.eslintrc.js @@ -1,5 +1,3 @@ -require('eslint-config-molindo/setupPlugins'); - module.exports = { env: { node: true diff --git a/examples/example-next-13-advanced/messages/de.json b/examples/example-next-13-advanced/messages/de.json index 668c7a7b3..86c12a2c3 100644 --- a/examples/example-next-13-advanced/messages/de.json +++ b/examples/example-next-13-advanced/messages/de.json @@ -20,7 +20,11 @@ "Navigation": { "home": "Start", "client": "Client-Seite", - "nested": "Verschachtelte Seite" + "nested": "Verschachtelte Seite", + "newsArticle": "News-Artikel #{articleId}" + }, + "NewsArticle": { + "title": "News-Artikel #{articleId}" }, "NotFound": { "title": "Diese Seite wurde nicht gefunden (404)" diff --git a/examples/example-next-13-advanced/messages/en.json b/examples/example-next-13-advanced/messages/en.json index 0af804dc1..daadd981e 100644 --- a/examples/example-next-13-advanced/messages/en.json +++ b/examples/example-next-13-advanced/messages/en.json @@ -20,7 +20,11 @@ "Navigation": { "home": "Home", "client": "Client page", - "nested": "Nested page" + "nested": "Nested page", + "newsArticle": "News article #{articleId}" + }, + "NewsArticle": { + "title": "News article #{articleId}" }, "NotFound": { "title": "This page was not found (404)" diff --git a/examples/example-next-13-advanced/messages/es.json b/examples/example-next-13-advanced/messages/es.json index 0dd77bb33..ed4c27356 100644 --- a/examples/example-next-13-advanced/messages/es.json +++ b/examples/example-next-13-advanced/messages/es.json @@ -20,7 +20,11 @@ "Navigation": { "home": "Inicio", "client": "Página del cliente", - "nested": "Página anidada" + "nested": "Página anidada", + "newsArticle": "Noticias #{articleId}" + }, + "NewsArticle": { + "title": "Noticias #{articleId}" }, "NotFound": { "title": "Esta página no se encontró (404)" diff --git a/examples/example-next-13-advanced/next.config.js b/examples/example-next-13-advanced/next.config.js index d12095e5b..d9797bdf4 100644 --- a/examples/example-next-13-advanced/next.config.js +++ b/examples/example-next-13-advanced/next.config.js @@ -1,16 +1,3 @@ const withNextIntl = require('next-intl/plugin')(); -module.exports = withNextIntl({ - rewrites() { - return [ - { - source: '/de/verschachtelt', - destination: '/de/nested' - }, - { - source: '/es/anidada', - destination: '/es/nested' - } - ]; - } -}); +module.exports = withNextIntl(); diff --git a/examples/example-next-13-advanced/package.json b/examples/example-next-13-advanced/package.json index fb886b581..4951062fe 100644 --- a/examples/example-next-13-advanced/package.json +++ b/examples/example-next-13-advanced/package.json @@ -24,8 +24,8 @@ "@types/node": "^17.0.23", "@types/react": "^18.2.5", "chokidar-cli": "3.0.0", - "eslint": "^8.12.0", - "eslint-config-molindo": "^6.0.0", + "eslint": "^8.46.0", + "eslint-config-molindo": "7.0.0-alpha.7", "eslint-config-next": "^13.4.0", "typescript": "^5.0.0" } diff --git a/examples/example-next-13-advanced/src/app/[locale]/client/ClientContent.tsx b/examples/example-next-13-advanced/src/app/[locale]/client/ClientContent.tsx index 04fe17dc1..6c377fcbb 100644 --- a/examples/example-next-13-advanced/src/app/[locale]/client/ClientContent.tsx +++ b/examples/example-next-13-advanced/src/app/[locale]/client/ClientContent.tsx @@ -2,7 +2,7 @@ import {useNow} from 'next-intl'; import {usePathname} from 'next-intl/client'; -import Link from 'next-intl/link'; +import {Link} from '../../../navigation'; export default function ClientContent() { const now = useNow(); diff --git a/examples/example-next-13-advanced/src/app/[locale]/client/redirect/page.tsx b/examples/example-next-13-advanced/src/app/[locale]/client/redirect/page.tsx index 4ddee65f9..2c361746b 100644 --- a/examples/example-next-13-advanced/src/app/[locale]/client/redirect/page.tsx +++ b/examples/example-next-13-advanced/src/app/[locale]/client/redirect/page.tsx @@ -1,6 +1,6 @@ 'use client'; -import {redirect} from 'next-intl/server'; +import {redirect} from '../../../../navigation'; export default function ClientRedirectPage() { redirect('/client'); diff --git a/examples/example-next-13-advanced/src/app/[locale]/layout.tsx b/examples/example-next-13-advanced/src/app/[locale]/layout.tsx index bac9e11aa..f9ad554bf 100644 --- a/examples/example-next-13-advanced/src/app/[locale]/layout.tsx +++ b/examples/example-next-13-advanced/src/app/[locale]/layout.tsx @@ -8,6 +8,7 @@ import { getTranslator } from 'next-intl/server'; import {ReactNode} from 'react'; +import Navigation from '../../components/Navigation'; type Props = { children: ReactNode; @@ -42,7 +43,18 @@ export default function LocaleLayout({children, params}: Props) { return ( - {children} + +
    + + {children} +
    + ); } diff --git a/examples/example-next-13-advanced/src/app/[locale]/nested/UnlocalizedPathname.tsx b/examples/example-next-13-advanced/src/app/[locale]/nested/UnlocalizedPathname.tsx new file mode 100644 index 000000000..141a7fab8 --- /dev/null +++ b/examples/example-next-13-advanced/src/app/[locale]/nested/UnlocalizedPathname.tsx @@ -0,0 +1,7 @@ +'use client'; + +import {usePathname} from '../../../navigation'; + +export default function UnlocalizedPathname() { + return

    {usePathname()}

    ; +} diff --git a/examples/example-next-13-advanced/src/app/[locale]/nested/page.tsx b/examples/example-next-13-advanced/src/app/[locale]/nested/page.tsx index 0f7439f2a..b7ce8b5a2 100644 --- a/examples/example-next-13-advanced/src/app/[locale]/nested/page.tsx +++ b/examples/example-next-13-advanced/src/app/[locale]/nested/page.tsx @@ -1,5 +1,6 @@ import {useTranslations} from 'next-intl'; import PageLayout from '../../../components/PageLayout'; +import UnlocalizedPathname from './UnlocalizedPathname'; export default function Nested() { const t = useTranslations('Nested'); @@ -7,6 +8,7 @@ export default function Nested() { return (

    {t('description')}

    +
    ); } diff --git a/examples/example-next-13-advanced/src/app/[locale]/news/[articleId]/page.tsx b/examples/example-next-13-advanced/src/app/[locale]/news/[articleId]/page.tsx new file mode 100644 index 000000000..f54f30591 --- /dev/null +++ b/examples/example-next-13-advanced/src/app/[locale]/news/[articleId]/page.tsx @@ -0,0 +1,12 @@ +import {useTranslations} from 'next-intl'; + +type Props = { + params: { + articleId: string; + }; +}; + +export default function NewsArticle({params}: Props) { + const t = useTranslations('NewsArticle'); + return

    {t('title', {articleId: params.articleId})}

    ; +} diff --git a/examples/example-next-13-advanced/src/app/[locale]/page.tsx b/examples/example-next-13-advanced/src/app/[locale]/page.tsx index cdb414872..5d622e2d2 100644 --- a/examples/example-next-13-advanced/src/app/[locale]/page.tsx +++ b/examples/example-next-13-advanced/src/app/[locale]/page.tsx @@ -1,6 +1,5 @@ import Image from 'next/image'; import {useFormatter, useNow, useTimeZone, useTranslations} from 'next-intl'; -import Link from 'next-intl/link'; import ClientLink from '../../components/ClientLink'; import ClientRouterWithoutProvider from '../../components/ClientRouterWithoutProvider'; import CoreLibrary from '../../components/CoreLibrary'; @@ -8,6 +7,7 @@ import LocaleSwitcher from '../../components/LocaleSwitcher'; import PageLayout from '../../components/PageLayout'; import MessagesAsPropsCounter from '../../components/client/01-MessagesAsPropsCounter'; import MessagesOnClientCounter from '../../components/client/02-MessagesOnClientCounter'; +import {Link} from '../../navigation'; type Props = { searchParams: Record; diff --git a/examples/example-next-13-advanced/src/app/[locale]/redirect/page.tsx b/examples/example-next-13-advanced/src/app/[locale]/redirect/page.tsx index 5212ddf14..520e04565 100644 --- a/examples/example-next-13-advanced/src/app/[locale]/redirect/page.tsx +++ b/examples/example-next-13-advanced/src/app/[locale]/redirect/page.tsx @@ -1,4 +1,4 @@ -import {redirect} from 'next-intl/server'; +import {redirect} from '../../../navigation'; export default function Redirect() { redirect('/client'); diff --git a/examples/example-next-13-advanced/src/components/ClientLink.tsx b/examples/example-next-13-advanced/src/components/ClientLink.tsx index adcdf99c6..7fbe6dc12 100644 --- a/examples/example-next-13-advanced/src/components/ClientLink.tsx +++ b/examples/example-next-13-advanced/src/components/ClientLink.tsx @@ -1,10 +1,10 @@ 'use client'; -import Link from 'next-intl/link'; import {ComponentProps} from 'react'; +import {Link, pathnames} from '../navigation'; -type Props = ComponentProps; - -export default function ClientLink(props: Props) { +export default function NavigationLink( + props: ComponentProps> +) { return ; } diff --git a/examples/example-next-13-advanced/src/components/ClientRouterWithoutProvider.tsx b/examples/example-next-13-advanced/src/components/ClientRouterWithoutProvider.tsx index 505458f09..24aef772f 100644 --- a/examples/example-next-13-advanced/src/components/ClientRouterWithoutProvider.tsx +++ b/examples/example-next-13-advanced/src/components/ClientRouterWithoutProvider.tsx @@ -1,6 +1,6 @@ 'use client'; -import {useRouter} from 'next-intl/client'; +import {useRouter} from '../navigation'; export default function ClientRouterWithoutProvider() { const router = useRouter(); diff --git a/examples/example-next-13-advanced/src/components/LocaleSwitcher.tsx b/examples/example-next-13-advanced/src/components/LocaleSwitcher.tsx index 8eb5039e6..4c241ba44 100644 --- a/examples/example-next-13-advanced/src/components/LocaleSwitcher.tsx +++ b/examples/example-next-13-advanced/src/components/LocaleSwitcher.tsx @@ -1,5 +1,5 @@ import {useLocale, useTranslations} from 'next-intl'; -import Link from 'next-intl/link'; +import {Link} from '../navigation'; export default function LocaleSwitcher() { const t = useTranslations('LocaleSwitcher'); diff --git a/examples/example-next-13-advanced/src/components/Navigation.tsx b/examples/example-next-13-advanced/src/components/Navigation.tsx index 8cd65eff9..7a9d43645 100644 --- a/examples/example-next-13-advanced/src/components/Navigation.tsx +++ b/examples/example-next-13-advanced/src/components/Navigation.tsx @@ -9,6 +9,11 @@ export default function Navigation() { {t('home')} {t('client')} {t('nested')} + + {t('newsArticle', {articleId: 3})} + ); } diff --git a/examples/example-next-13-advanced/src/components/NavigationLink.tsx b/examples/example-next-13-advanced/src/components/NavigationLink.tsx index a53c00d1a..cffc6a42e 100644 --- a/examples/example-next-13-advanced/src/components/NavigationLink.tsx +++ b/examples/example-next-13-advanced/src/components/NavigationLink.tsx @@ -1,16 +1,14 @@ 'use client'; -import {usePathname} from 'next-intl/client'; -import Link from 'next-intl/link'; -import {ReactNode} from 'react'; +import {useSelectedLayoutSegment} from 'next/navigation'; +import {ComponentProps} from 'react'; +import {Link, pathnames} from '../navigation'; -type Props = { - children: ReactNode; - href: string; -}; - -export default function NavigationLink({children, href}: Props) { - const pathname = usePathname(); +export default function NavigationLink< + Pathname extends keyof typeof pathnames +>({href, ...rest}: ComponentProps>) { + const selectedLayoutSegment = useSelectedLayoutSegment(); + const pathname = selectedLayoutSegment ? `/${selectedLayoutSegment}` : '/'; const isActive = pathname === href; return ( @@ -18,8 +16,7 @@ export default function NavigationLink({children, href}: Props) { aria-current={isActive ? 'page' : undefined} href={href} style={{textDecoration: isActive ? 'underline' : 'none'}} - > - {children} - + {...rest} + /> ); } diff --git a/examples/example-next-13-advanced/src/components/PageLayout.tsx b/examples/example-next-13-advanced/src/components/PageLayout.tsx index 36f1b437e..cf5609c4d 100644 --- a/examples/example-next-13-advanced/src/components/PageLayout.tsx +++ b/examples/example-next-13-advanced/src/components/PageLayout.tsx @@ -1,5 +1,4 @@ import {ReactNode} from 'react'; -import Navigation from './Navigation'; type Props = { children?: ReactNode; @@ -8,18 +7,9 @@ type Props = { export default function PageLayout({children, title}: Props) { return ( -
    - -
    -

    {title}

    - {children} -
    +
    +

    {title}

    + {children}
    ); } diff --git a/examples/example-next-13-advanced/src/middleware.ts b/examples/example-next-13-advanced/src/middleware.ts index 9a620120c..b5529e52b 100644 --- a/examples/example-next-13-advanced/src/middleware.ts +++ b/examples/example-next-13-advanced/src/middleware.ts @@ -1,8 +1,10 @@ import createMiddleware from 'next-intl/middleware'; +import {locales, pathnames} from './navigation'; export default createMiddleware({ - locales: ['en', 'de', 'es'], - defaultLocale: 'en' + defaultLocale: 'en', + pathnames, + locales }); export const config = { diff --git a/examples/example-next-13-advanced/src/navigation.tsx b/examples/example-next-13-advanced/src/navigation.tsx new file mode 100644 index 000000000..6cf704620 --- /dev/null +++ b/examples/example-next-13-advanced/src/navigation.tsx @@ -0,0 +1,29 @@ +import { + createLocalizedPathnamesNavigation, + Pathnames +} from 'next-intl/navigation'; + +export const locales = ['en', 'de', 'es'] as const; + +export const pathnames = { + '/': '/', + '/client': '/client', + '/client/redirect': '/client/redirect', + '/nested': { + en: '/nested', + de: '/verschachtelt', + es: '/anidada' + }, + '/redirect': '/redirect', + '/news/[articleId]': { + en: '/news/[articleId]', + de: '/neuigkeiten/[articleId]', + es: '/noticias/[articleId]' + } +} satisfies Pathnames; + +export const {Link, redirect, usePathname, useRouter} = + createLocalizedPathnamesNavigation({ + locales, + pathnames + }); diff --git a/examples/example-next-13-advanced/tests/main.spec.ts b/examples/example-next-13-advanced/tests/main.spec.ts index 5028a1835..77973351d 100644 --- a/examples/example-next-13-advanced/tests/main.spec.ts +++ b/examples/example-next-13-advanced/tests/main.spec.ts @@ -91,7 +91,7 @@ it('redirects unprefixed paths for non-default locales', async ({browser}) => { const page = await context.newPage(); await page.goto('/nested'); - await expect(page).toHaveURL('/de/nested'); + await expect(page).toHaveURL('/de/verschachtelt'); page.getByRole('heading', {name: 'Verschachtelt'}); }); @@ -349,6 +349,14 @@ it('can use `usePathname`', async ({page}) => { await expect(page.getByTestId('UnlocalizedPathname')).toHaveText('/client'); }); +it('can use `usePathname` to get internal pathnames', async ({page}) => { + await page.goto('/de/verschachtelt'); + await expect(page.getByTestId('UnlocalizedPathname')).toHaveText('/nested'); + + await page.goto('/en/nested'); + await expect(page.getByTestId('UnlocalizedPathname')).toHaveText('/nested'); +}); + it('returns the correct value from `usePathname` in the initial render', async ({ request }) => { @@ -397,7 +405,7 @@ it('prefixes routes as necessary with the router', async ({page}) => { await page.goto('/de'); page.getByTestId('ClientRouterWithoutProvider-link').click(); - await expect(page).toHaveURL('/de/nested'); + await expect(page).toHaveURL('/de/verschachtelt'); }); it('can set `now` and `timeZone` at runtime', async ({page}) => { @@ -438,7 +446,8 @@ it('keeps search params for redirects', async ({browser}) => { ); }); -it('sets alternate links', async ({request}) => { +// TODO +it.skip('sets alternate links', async ({request}) => { async function getLinks(pathname: string) { return ( (await request.get(pathname)) @@ -470,16 +479,28 @@ it('sets alternate links', async ({request}) => { } }); -it('can use rewrites to localize pathnames', async ({page, request}) => { +it('can use rewrites to localize pathnames', async ({page}) => { await page.goto('/de/verschachtelt'); page.getByRole('heading', {name: 'Verschachtelt'}); - // Also available + // Dynamic params + await page.goto('/en/news/3'); + await expect(page).toHaveURL('/news/3'); + page.getByRole('heading', {name: 'News article #3'}); + await page.goto('/de/neuigkeiten/3'); + await expect(page).toHaveURL('/de/neuigkeiten/3'); + page.getByRole('heading', {name: 'News-Artikel #3'}); + + // Automatic redirects await page.goto('/de/nested'); + await expect(page).toHaveURL('/de/verschachtelt'); page.getByRole('heading', {name: 'Verschachtelt'}); - - const response = await request.get('/en/verschachtelt'); - expect(response.status()).toBe(404); + await page.goto('/en/verschachtelt'); + await expect(page).toHaveURL('/nested'); + page.getByRole('heading', {name: 'Nested'}); + await page.goto('/en/neuigkeiten/3'); + await expect(page).toHaveURL('/news/3'); + page.getByRole('heading', {name: 'News article #3'}); }); it('replaces invalid cookie locales', async ({page}) => { diff --git a/examples/example-next-13-named-routes/.eslintrc.js b/examples/example-next-13-named-routes/.eslintrc.js index 3d3a6276c..24eb90084 100644 --- a/examples/example-next-13-named-routes/.eslintrc.js +++ b/examples/example-next-13-named-routes/.eslintrc.js @@ -1,5 +1,3 @@ -require('eslint-config-molindo/setupPlugins'); - module.exports = { env: { node: true diff --git a/examples/example-next-13-named-routes/package.json b/examples/example-next-13-named-routes/package.json index fd7849887..b139086fd 100644 --- a/examples/example-next-13-named-routes/package.json +++ b/examples/example-next-13-named-routes/package.json @@ -22,8 +22,8 @@ "@types/node": "^17.0.23", "@types/react": "^18.2.5", "chokidar-cli": "3.0.0", - "eslint": "^8.12.0", - "eslint-config-molindo": "^6.0.0", + "eslint": "^8.46.0", + "eslint-config-molindo": "7.0.0-alpha.7", "eslint-config-next": "^13.4.0", "typescript": "^5.0.0" } diff --git a/examples/example-next-13-next-auth/.eslintrc.js b/examples/example-next-13-next-auth/.eslintrc.js index 05b7cab60..c1fb7282f 100644 --- a/examples/example-next-13-next-auth/.eslintrc.js +++ b/examples/example-next-13-next-auth/.eslintrc.js @@ -1,5 +1,3 @@ -require('eslint-config-molindo/setupPlugins'); - module.exports = { extends: [ 'molindo/typescript', diff --git a/examples/example-next-13-next-auth/package.json b/examples/example-next-13-next-auth/package.json index 2536f476a..27c2c4a8c 100644 --- a/examples/example-next-13-next-auth/package.json +++ b/examples/example-next-13-next-auth/package.json @@ -21,8 +21,8 @@ "@types/lodash": "^4.14.176", "@types/node": "^17.0.23", "@types/react": "^18.2.5", - "eslint": "^8.39.0", - "eslint-config-molindo": "^6.0.0", + "eslint": "^8.46.0", + "eslint-config-molindo": "7.0.0-alpha.7", "eslint-config-next": "^13.4.0", "typescript": "^5.0.0" } diff --git a/examples/example-next-13-with-pages/.eslintrc.js b/examples/example-next-13-with-pages/.eslintrc.js index 3d3a6276c..24eb90084 100644 --- a/examples/example-next-13-with-pages/.eslintrc.js +++ b/examples/example-next-13-with-pages/.eslintrc.js @@ -1,5 +1,3 @@ -require('eslint-config-molindo/setupPlugins'); - module.exports = { env: { node: true diff --git a/examples/example-next-13-with-pages/package.json b/examples/example-next-13-with-pages/package.json index f90e35124..b7e85eb88 100644 --- a/examples/example-next-13-with-pages/package.json +++ b/examples/example-next-13-with-pages/package.json @@ -19,8 +19,8 @@ "@types/lodash": "^4.14.176", "@types/node": "^17.0.23", "@types/react": "^18.2.5", - "eslint": "^8.12.0", - "eslint-config-molindo": "^6.0.0", + "eslint": "^8.46.0", + "eslint-config-molindo": "7.0.0-alpha.7", "eslint-config-next": "^13.4.0", "typescript": "^5.0.0" } diff --git a/examples/example-next-13/.eslintrc.js b/examples/example-next-13/.eslintrc.js index def1e21cc..c6d534ab4 100644 --- a/examples/example-next-13/.eslintrc.js +++ b/examples/example-next-13/.eslintrc.js @@ -1,9 +1,8 @@ -require('eslint-config-molindo/setupPlugins'); - module.exports = { extends: [ 'molindo/typescript', 'molindo/react', + 'molindo/tailwind', 'plugin:@next/next/recommended' ], overrides: [ diff --git a/examples/example-next-13/messages/de.json b/examples/example-next-13/messages/de.json index bc81a392f..ca70e44db 100644 --- a/examples/example-next-13/messages/de.json +++ b/examples/example-next-13/messages/de.json @@ -5,7 +5,7 @@ }, "AboutPage": { "title": "Über", - "description": "

    Auch das Routing ist internationalisiert.

    Wenn du die Standardsprache Englisch verwendest, siehst du /about in der Adressleiste des Browsers auf dieser Seite.

    Wenn du die Sprache auf Deutsch änderst, wird die URL mit der Locale ergänzt (/de/about).

    " + "description": "

    Auch das Routing ist internationalisiert.

    Wenn du die Standardsprache Englisch verwendest, siehst du /about in der Adressleiste des Browsers auf dieser Seite.

    Wenn du die Sprache auf Deutsch änderst, wird die URL mit der Locale ergänzt und lokalisiert (/de/über).

    " }, "Error": { "title": "Etwas ist schief gelaufen!", diff --git a/examples/example-next-13/messages/en.json b/examples/example-next-13/messages/en.json index d00fc0394..f7260daf0 100644 --- a/examples/example-next-13/messages/en.json +++ b/examples/example-next-13/messages/en.json @@ -5,7 +5,7 @@ }, "AboutPage": { "title": "About", - "description": "

    The routing is internationalized too.

    If you're using the default language English, you'll see /about in the browser address bar on this page.

    If you change the locale to German, the URL is prefixed with the locale (/de/about).

    " + "description": "

    The routing is internationalized too.

    If you're using the default language English, you'll see /about in the browser address bar on this page.

    If you change the locale to German, the URL is prefixed with the locale and localized accordingly (/de/über).

    " }, "Error": { "title": "Something went wrong!", diff --git a/examples/example-next-13/package.json b/examples/example-next-13/package.json index 90cde81bd..7bc5cec1a 100644 --- a/examples/example-next-13/package.json +++ b/examples/example-next-13/package.json @@ -17,7 +17,7 @@ "next-intl": "latest", "react": "^18.2.0", "react-dom": "^18.2.0", - "tailwindcss": "^3.2.4" + "tailwindcss": "^3.3.2" }, "devDependencies": { "@jest/globals": "^29.5.0", @@ -28,8 +28,8 @@ "@types/node": "^17.0.23", "@types/react": "^18.2.5", "autoprefixer": "^10.4.0", - "eslint": "^8.39.0", - "eslint-config-molindo": "^6.0.0", + "eslint": "^8.46.0", + "eslint-config-molindo": "7.0.0-alpha.7", "eslint-config-next": "^13.4.0", "jest": "^29.5.0", "jest-environment-jsdom": "^29.5.0", diff --git a/examples/example-next-13/prettier.config.js b/examples/example-next-13/prettier.config.js deleted file mode 100644 index 935c1b921..000000000 --- a/examples/example-next-13/prettier.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - plugins: [require('prettier-plugin-tailwindcss')] -}; diff --git a/examples/example-next-13/src/app/[locale]/about/page.tsx b/examples/example-next-13/src/app/[locale]/about/page.tsx index 043560a3b..edbaf0f96 100644 --- a/examples/example-next-13/src/app/[locale]/about/page.tsx +++ b/examples/example-next-13/src/app/[locale]/about/page.tsx @@ -6,7 +6,7 @@ export default function AboutPage() { return ( -
    +
    {t.rich('description', { p: (chunks) =>

    {chunks}

    , code: (chunks) => ( diff --git a/examples/example-next-13/src/components/LocaleSwitcherSelect.tsx b/examples/example-next-13/src/components/LocaleSwitcherSelect.tsx index 317efe380..4a5f2d292 100644 --- a/examples/example-next-13/src/components/LocaleSwitcherSelect.tsx +++ b/examples/example-next-13/src/components/LocaleSwitcherSelect.tsx @@ -1,8 +1,8 @@ 'use client'; import clsx from 'clsx'; -import {usePathname, useRouter} from 'next-intl/client'; import {ChangeEvent, ReactNode, useTransition} from 'react'; +import {useRouter, usePathname} from '../navigation'; type Props = { children: ReactNode; @@ -16,8 +16,8 @@ export default function LocaleSwitcherSelect({ label }: Props) { const router = useRouter(); - const pathname = usePathname(); const [isPending, startTransition] = useTransition(); + const pathname = usePathname(); function onSelectChange(event: ChangeEvent) { const nextLocale = event.target.value; @@ -42,7 +42,7 @@ export default function LocaleSwitcherSelect({ > {children} - + ); } diff --git a/examples/example-next-13/src/components/Navigation.spec.tsx b/examples/example-next-13/src/components/Navigation.spec.tsx index 0b5745d32..ba25fad02 100644 --- a/examples/example-next-13/src/components/Navigation.spec.tsx +++ b/examples/example-next-13/src/components/Navigation.spec.tsx @@ -15,9 +15,8 @@ jest.mock('next/navigation', () => ({ prefetch: jest.fn(), replace: jest.fn() }), - useParams: () => ({ - locale: 'en' - }) + useParams: () => ({locale: 'en'}), + useSelectedLayoutSegment: () => ({locale: 'en'}) })); it('renders', () => { diff --git a/examples/example-next-13/src/components/Navigation.tsx b/examples/example-next-13/src/components/Navigation.tsx index 809b25ce2..0f286160b 100644 --- a/examples/example-next-13/src/components/Navigation.tsx +++ b/examples/example-next-13/src/components/Navigation.tsx @@ -7,7 +7,7 @@ export default function Navigation() { return (
    -

  • 📣{' '} {rscAnnouncement} diff --git a/docs/components/HeroCode.tsx b/docs/components/HeroCode.tsx index 313749516..34291eea9 100644 --- a/docs/components/HeroCode.tsx +++ b/docs/components/HeroCode.tsx @@ -195,7 +195,7 @@ const files = [ : - "{'{'}username{'}'}'s profile" + "{'{'}firstname{'}'}'s profile" , diff --git a/docs/pages/docs/getting-started/app-router.mdx b/docs/pages/docs/getting-started/app-router.mdx index e32467e85..c74365967 100644 --- a/docs/pages/docs/getting-started/app-router.mdx +++ b/docs/pages/docs/getting-started/app-router.mdx @@ -261,6 +261,19 @@ Note that the store is scoped to a request and therefore doesn't affect other re +
    +Why is this API necessary? + +Next.js currently doesn't provide an API to read route params like `locale` at arbitrary places in Server Components. The `locale` is fundamental to all APIs provided by `next-intl`, therefore passing this as a prop throughout the tree doesn't stand out as particularly ergnomic. + +Due to this, `next-intl` uses its middleware to attach an `x-next-intl-locale` header to the incoming request, holding the negotiated locale as a value. This technique allows the locale to be read at arbitrary places via `headers().get('x-next-intl-locale')`. + +However, the usage of `headers` opts the route into dynamic rendering. + +By using `unstable_setRequestLocale`, you can provide the locale that is received in layouts and pages via `params` to `next-intl`. By doing this, all APIs from `next-intl` can now read from this value instead of the header, enabling static rendering. + +
    + ### Use the `locale` param in metadata In addition to the rendering of your pages, also page metadata needs to qualify for static rendering. From 286c96c440e48b6d9d88ae537c91c856c59b9957 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 9 Nov 2023 19:56:04 +0100 Subject: [PATCH 300/312] fix(RSC): Fix type of `namespace` in `getTranslations` (#616) --- README.md | 2 +- .../src/app/[locale]/page.tsx | 2 + .../src/components/AsyncComponent.tsx | 3 ++ .../AsyncComponentWithNamespaceAndLocale.tsx | 23 ++++++++++ .../tests/main.spec.ts | 4 ++ .../example-next-13-advanced/tsconfig.json | 4 +- packages/next-intl/package.json | 7 ++- packages/next-intl/rollup.config.js | 1 - .../next-intl/src/server.react-server.tsx | 1 - packages/next-intl/src/server.tsx | 2 +- .../src/server/react-client/index.tsx | 43 ------------------- packages/next-intl/test/server/index.test.tsx | 6 +-- packages/use-intl/README.md | 2 +- pnpm-lock.yaml | 2 +- 14 files changed, 43 insertions(+), 59 deletions(-) create mode 100644 examples/example-next-13-advanced/src/components/AsyncComponentWithNamespaceAndLocale.tsx delete mode 100644 packages/next-intl/src/server.react-server.tsx delete mode 100644 packages/next-intl/src/server/react-client/index.tsx diff --git a/README.md b/README.md index fe5dda024..c9086ca9b 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ export default function UserProfile({user}) { } ``` -```json +```js // en.json { "UserProfile": { diff --git a/examples/example-next-13-advanced/src/app/[locale]/page.tsx b/examples/example-next-13-advanced/src/app/[locale]/page.tsx index 7afc483ae..74ab3a9b6 100644 --- a/examples/example-next-13-advanced/src/app/[locale]/page.tsx +++ b/examples/example-next-13-advanced/src/app/[locale]/page.tsx @@ -1,6 +1,7 @@ import Image from 'next/image'; import {useFormatter, useNow, useTimeZone, useTranslations} from 'next-intl'; import AsyncComponent from '../../components/AsyncComponent'; +import AsyncComponentWithNamespaceAndLocale from '../../components/AsyncComponentWithNamespaceAndLocale'; import AsyncComponentWithoutNamespace from '../../components/AsyncComponentWithoutNamespace'; import AsyncComponentWithoutNamespaceAndLocale from '../../components/AsyncComponentWithoutNamespaceAndLocale'; import ClientLink from '../../components/ClientLink'; @@ -56,6 +57,7 @@ export default function Index({searchParams}: Props) {

    {JSON.stringify(searchParams, null, 2)}

    + diff --git a/examples/example-next-13-advanced/src/components/AsyncComponent.tsx b/examples/example-next-13-advanced/src/components/AsyncComponent.tsx index 3fa9d80e0..5d3626df7 100644 --- a/examples/example-next-13-advanced/src/components/AsyncComponent.tsx +++ b/examples/example-next-13-advanced/src/components/AsyncComponent.tsx @@ -15,6 +15,9 @@ export default async function AsyncComponent() { export async function TypeTest() { const t = await getTranslations('AsyncComponent'); + // @ts-expect-error + await getTranslations('Unknown'); + // @ts-expect-error t('unknown'); } diff --git a/examples/example-next-13-advanced/src/components/AsyncComponentWithNamespaceAndLocale.tsx b/examples/example-next-13-advanced/src/components/AsyncComponentWithNamespaceAndLocale.tsx new file mode 100644 index 000000000..7abae580b --- /dev/null +++ b/examples/example-next-13-advanced/src/components/AsyncComponentWithNamespaceAndLocale.tsx @@ -0,0 +1,23 @@ +import {getTranslations, getLocale} from 'next-intl/server'; + +export default async function AsyncComponentWithNamespaceAndLocale() { + const locale = await getLocale(); + const t = await getTranslations({locale, namespace: 'AsyncComponent'}); + + return ( +
    + {t('basic')} +
    + ); +} + +export async function TypeTest() { + const locale = await getLocale(); + const t = await getTranslations({locale}); + + // @ts-expect-error + await getTranslations({locale, namespace: 'Unknown'}); + + // @ts-expect-error + t('AsyncComponent.unknown'); +} diff --git a/examples/example-next-13-advanced/tests/main.spec.ts b/examples/example-next-13-advanced/tests/main.spec.ts index a0edaa4bd..232c2cf48 100644 --- a/examples/example-next-13-advanced/tests/main.spec.ts +++ b/examples/example-next-13-advanced/tests/main.spec.ts @@ -583,6 +583,10 @@ it('can use async APIs in async components', async ({page}) => { .getByTestId('AsyncComponentWithoutNamespace') .getByText('AsyncComponent'); + page + .getByTestId('AsyncComponentWithNamespaceAndLocale') + .getByText('AsyncComponent'); + page .getByTestId('AsyncComponentWithoutNamespaceAndLocale') .getByText('AsyncComponent'); diff --git a/examples/example-next-13-advanced/tsconfig.json b/examples/example-next-13-advanced/tsconfig.json index 1c6c979ae..1556449fd 100644 --- a/examples/example-next-13-advanced/tsconfig.json +++ b/examples/example-next-13-advanced/tsconfig.json @@ -11,8 +11,8 @@ "skipLibCheck": true, "noEmit": true, "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", + "module": "ESNext", + "moduleResolution": "Bundler", "resolveJsonModule": true, "isolatedModules": true, "jsx": "preserve", diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 3c4924dbb..84734e651 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -29,8 +29,7 @@ }, "./server": { "types": "./server.d.ts", - "react-server": "./dist/esm/server.react-server.js", - "default": "./dist/server.js" + "default": "./dist/esm/server.js" }, "./config": { "types": "./config.d.ts", @@ -86,7 +85,7 @@ "@testing-library/react": "^13.0.0", "@types/negotiator": "^0.6.1", "@types/node": "^17.0.23", - "@types/react": "^18.2.29", + "@types/react": "18.2.34", "eslint": "^8.46.0", "eslint-config-molindo": "^7.0.0", "eslint-plugin-deprecation": "^1.4.1", @@ -111,7 +110,7 @@ }, { "path": "dist/production/server.js", - "limit": "0.4 KB" + "limit": "13.2 kB" }, { "path": "dist/production/middleware.js", diff --git a/packages/next-intl/rollup.config.js b/packages/next-intl/rollup.config.js index 1e9f90dff..2a773ca9e 100644 --- a/packages/next-intl/rollup.config.js +++ b/packages/next-intl/rollup.config.js @@ -11,7 +11,6 @@ const config = { 'navigation.react-server': 'src/navigation.react-server.tsx', server: 'src/server.tsx', - 'server.react-server': 'src/server.react-server.tsx', middleware: 'src/middleware.tsx', plugin: 'src/plugin.tsx', diff --git a/packages/next-intl/src/server.react-server.tsx b/packages/next-intl/src/server.react-server.tsx deleted file mode 100644 index ca39cd0df..000000000 --- a/packages/next-intl/src/server.react-server.tsx +++ /dev/null @@ -1 +0,0 @@ -export * from './server/index'; diff --git a/packages/next-intl/src/server.tsx b/packages/next-intl/src/server.tsx index c1e6d6bd1..ca39cd0df 100644 --- a/packages/next-intl/src/server.tsx +++ b/packages/next-intl/src/server.tsx @@ -1 +1 @@ -export * from './server/react-client'; +export * from './server/index'; diff --git a/packages/next-intl/src/server/react-client/index.tsx b/packages/next-intl/src/server/react-client/index.tsx deleted file mode 100644 index a12121ee9..000000000 --- a/packages/next-intl/src/server/react-client/index.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import type { - getRequestConfig as getRequestConfig_type, - getFormatter as getFormatter_type, - getNow as getNow_type, - getTimeZone as getTimeZone_type, - getTranslator as getTranslator_type, - getTranslations as getTranslations_type, - getMessages as getMessages_type, - getLocale as getLocale_type, - unstable_setRequestLocale as unstable_setRequestLocale_type -} from '..'; - -function notSupported(name: string) { - return () => { - throw new Error( - process.env.NODE_ENV !== 'production' - ? `\`${name}\` is not supported in Client Components.` - : undefined - ); - }; -} - -// Must match `../index.tsx` - -// prettier-ignore -export const getRequestConfig = (() => notSupported('getRequestConfig')) as unknown as typeof getRequestConfig_type; -// prettier-ignore -export const getFormatter = notSupported('getFormatter') as unknown as typeof getFormatter_type; -// prettier-ignore -export const getNow = notSupported('getNow') as unknown as typeof getNow_type; -// prettier-ignore -export const getTimeZone = notSupported('getTimeZone') as unknown as typeof getTimeZone_type; -// prettier-ignore -/** @deprecated Deprecated in favor of `getTranslations`. See https://github.com/amannn/next-intl/pull/600 */ -export const getTranslator = notSupported('getTranslator') as unknown as typeof getTranslator_type; -// prettier-ignore -export const getTranslations = notSupported('getTranslations') as unknown as typeof getTranslations_type; -// prettier-ignore -export const getMessages = notSupported('getMessages') as unknown as typeof getMessages_type; -// prettier-ignore -export const getLocale = notSupported('getLocale') as unknown as typeof getLocale_type; -// prettier-ignore -export const unstable_setRequestLocale = notSupported('unstable_setRequestLocale') as unknown as typeof unstable_setRequestLocale_type; diff --git a/packages/next-intl/test/server/index.test.tsx b/packages/next-intl/test/server/index.test.tsx index 53f9c25e9..f464f3306 100644 --- a/packages/next-intl/test/server/index.test.tsx +++ b/packages/next-intl/test/server/index.test.tsx @@ -7,14 +7,12 @@ import { getFormatter, getNow, getTimeZone -} from '../../src/server.react-server'; +} from '../../src/server'; import {HEADER_LOCALE_NAME} from '../../src/shared/constants'; vi.mock('next-intl/config', () => ({ default: async () => - ( - (await vi.importActual('../../src/server.react-server')) as any - ).getRequestConfig({ + ((await vi.importActual('../../src/server')) as any).getRequestConfig({ locale: 'en', now: new Date('2020-01-01T00:00:00.000Z'), timeZone: 'Europe/London', diff --git a/packages/use-intl/README.md b/packages/use-intl/README.md index 0029d488a..d40163eac 100644 --- a/packages/use-intl/README.md +++ b/packages/use-intl/README.md @@ -35,7 +35,7 @@ export default function UserProfile({user}) { } ``` -```json +```js // en.json { "UserProfile": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 396426128..6cdf78d32 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -517,7 +517,7 @@ importers: specifier: ^17.0.23 version: 17.0.23 '@types/react': - specifier: ^18.2.29 + specifier: 18.2.34 version: 18.2.34 eslint: specifier: ^8.46.0 From 763c69acf02bae28663ffaadf10457405ad44fa0 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 9 Nov 2023 20:14:50 +0100 Subject: [PATCH 301/312] Remove unused import in docs --- docs/pages/docs/getting-started/app-router.mdx | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/pages/docs/getting-started/app-router.mdx b/docs/pages/docs/getting-started/app-router.mdx index c74365967..48c7e419c 100644 --- a/docs/pages/docs/getting-started/app-router.mdx +++ b/docs/pages/docs/getting-started/app-router.mdx @@ -113,7 +113,6 @@ export const config = { The `locale` that was matched by the middleware is available via the `locale` param and can be used to configure the document language. ```tsx filename="app/[locale]/layout.tsx" -import {useLocale} from 'next-intl'; import {notFound} from 'next/navigation'; const locales = ['en', 'de']; From 4c5e5aaa0fa269398e706096281bb808adfa4ff7 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Thu, 9 Nov 2023 21:04:09 +0100 Subject: [PATCH 302/312] docs: Add links for dynamic rendering --- docs/pages/blog/next-intl-3-0.mdx | 2 +- docs/pages/docs/getting-started/app-router.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pages/blog/next-intl-3-0.mdx b/docs/pages/blog/next-intl-3-0.mdx index 1fe437565..483b99c01 100644 --- a/docs/pages/blog/next-intl-3-0.mdx +++ b/docs/pages/blog/next-intl-3-0.mdx @@ -95,7 +95,7 @@ If you want to stay on the `as-needed` strategy, you can [configure this option] With the newly introduced Server Components support comes a temporary workaround for static rendering. -If you call APIs like `useTranslations` in a Server Component, by default, the hook will opt the page into dynamic rendering. This is a limitation that we aim to remove in the future, but as a stopgap solution, we've added the [`unstable_setRequestLocale`](https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/docs/getting-started/app-router-server-components#static-rendering) API so that you can keep your pages fully static. +If you call APIs like `useTranslations` in a Server Component, by default, the hook will opt the page into [dynamic rendering](https://nextjs.org/docs/app/building-your-application/rendering/server-components#dynamic-rendering). This is a limitation that we aim to remove in the future, but as a stopgap solution, we've added the [`unstable_setRequestLocale`](https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/docs/getting-started/app-router-server-components#static-rendering) API so that you can keep your pages fully static. Note that if you're using `next-intl` exclusively in Client Components, this doesn't apply to your app and static rendering will continue to work as it did before. diff --git a/docs/pages/docs/getting-started/app-router.mdx b/docs/pages/docs/getting-started/app-router.mdx index 48c7e419c..7687f6404 100644 --- a/docs/pages/docs/getting-started/app-router.mdx +++ b/docs/pages/docs/getting-started/app-router.mdx @@ -179,7 +179,7 @@ That's all it takes! ## Static rendering -By using APIs like `useTranslations` from `next-intl` in Server Components, your pages will currently opt into dynamic rendering. This is a limitation that we aim to remove in the future, but as a stopgap solution, `next-intl` provides a temporary API that can be used to enable static rendering: +By using APIs like `useTranslations` from `next-intl` in Server Components, your pages will currently opt into [dynamic rendering](https://nextjs.org/docs/app/building-your-application/rendering/server-components#dynamic-rendering). This is a limitation that we aim to remove in the future, but as a stopgap solution, `next-intl` provides a temporary API that can be used to enable static rendering: From 1b21dbffdb43745af75a81f77378733d1372459c Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 10 Nov 2023 08:51:51 +0100 Subject: [PATCH 303/312] Update banner and blog post --- docs/pages/blog/next-intl-3-0.mdx | 71 +++++++++++++++++++------------ docs/theme.config.js | 2 +- 2 files changed, 44 insertions(+), 29 deletions(-) diff --git a/docs/pages/blog/next-intl-3-0.mdx b/docs/pages/blog/next-intl-3-0.mdx index 483b99c01..b6ba7be2a 100644 --- a/docs/pages/blog/next-intl-3-0.mdx +++ b/docs/pages/blog/next-intl-3-0.mdx @@ -1,23 +1,25 @@ --- -title: next-intl 3.0 release candidate +title: next-intl 3.0 --- -# next-intl 3.0 release candidate +import PartnerContentLink from 'components/PartnerContentLink'; -Sep 28, 2023 · by Jan Amann +# next-intl 3.0 -Almost one year ago, on Oct 25, 2022, [Next.js 13 was announced](https://nextjs.org/blog/next-13) with beta support for the App Router and Server Components. Ever since then, `next-intl` began an exploration on what it means to provide an ideal experience for implementing i18n with the newly added capabilities. +Nov 9, 2023 · by Jan Amann -Today, [after more than 300 commits and the involvement of over 50 community members](https://github.com/amannn/next-intl/pull/149), I'm absolutely thrilled to share **the first release candidate of `next-intl` 3.0**, which is now App Router-first. +More than a year ago, on Oct 25, 2022, [Next.js 13 was announced](https://nextjs.org/blog/next-13) with beta support for the App Router and Server Components. Ever since then, `next-intl` began an exploration on what it means to provide an ideal experience for implementing i18n with the newly added capabilities. + +Today, [after more than 360 commits and the involvement of over 60 community members](https://github.com/amannn/next-intl/pull/149), I'm absolutely thrilled to announce **next-intl 3.0**, which is now App Router-first. If you're still happy with the Pages Router, rest assured that `next-intl` is dedicated to support this paradigm for as long as Next.js does. For those who have already migrated to the App Router, this means that `next-intl` now takes full advantage of the new capabilities. ## New features -1. **Support for React Server Components**: The APIs `useTranslations`, `useFormatter`, `useLocale`, `useNow` and `useTimeZone` can now be used in Server Components ([proposed docs](https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/docs/environments/server-client-components)). -2. **New async APIs to handle i18n outside of components**: To handle i18n in the Metadata API and Route Handlers, the APIs `getTranslations`, `getFormatter`, `getNow`, and `getTimeZone` have been added ([proposed docs](https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/docs/environments/metadata-route-handlers)). -3. **Middleware for internationalized routing**: While Next.js has built-in support for this with the Pages Router, the App Router doesn't include a built-in solution anymore. `next-intl` now provides a drop-in solution that has you covered ([proposed docs](https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/docs/routing/middleware)). -4. **Internationalized navigation APIs**: Similar to the middleware, this provides a drop-in solution that adds internationalization support for Next.js' navigation APIs: `Link`, `useRouter`, `usePathname` and `redirect`. These APIs allow you to handle locale prefixes behind the scenes and also provide support for localizing pathnames (e.g. `/en/about` vs. `/de/ueber-uns`, see the [proposed docs](https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/docs/routing/navigation)). +1. **Support for React Server Components**: The APIs `useTranslations`, `useFormatter`, `useLocale`, `useNow` and `useTimeZone` can now be used in Server Components ([docs](https://next-intl-docs.vercel.app/docs/environments/server-client-components)). +2. **New async APIs**: To handle i18n in async components, the Metadata API and Route Handlers, the APIs `getTranslations`, `getFormatter`, `getNow`, and `getTimeZone` have been added ([docs](https://next-intl-docs.vercel.app/docs/environments/metadata-route-handlers)). +3. **Middleware for internationalized routing**: While Next.js has built-in support for this with the Pages Router, the App Router doesn't include a built-in solution anymore. `next-intl` now provides a drop-in solution that has you covered ([docs](https://next-intl-docs.vercel.app/docs/routing/middleware)). +4. **Internationalized navigation APIs**: Similar to the middleware, this provides a drop-in solution that adds internationalization support for Next.js' navigation APIs: `Link`, `useRouter`, `usePathname` and `redirect`. These APIs allow you to handle locale prefixes behind the scenes and also provide support for localizing pathnames (e.g. `/en/about` vs. `/de/ueber-uns`, see the [docs](https://next-intl-docs.vercel.app/docs/routing/navigation)). The latter two have already been added in minor versions, but 3.0 cleans up the API and includes many improvements and bug fixes. @@ -29,8 +31,8 @@ If you've been part of the Server Components beta and have already tried out pre `next-intl` now requires two additional setup steps when you're using the App Router: -1. [The `i18n.ts` module](https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/docs/getting-started/app-router-server-components#i18nts) provides configuration for Server Components -2. [`next-intl/plugin`](https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/docs/getting-started/app-router-server-components#nextconfigjs) needs to be added to link your `i18n.ts` module to `next-intl` +1. [The `i18n.ts` module](https://next-intl-docs.vercel.app/docs/getting-started/app-router-server-components#i18nts) provides configuration for Server Components +2. [`next-intl/plugin`](https://next-intl-docs.vercel.app/docs/getting-started/app-router-server-components#nextconfigjs) needs to be added to link your `i18n.ts` module to `next-intl` ### New navigation APIs for the App Router @@ -49,9 +51,9 @@ With 3.0, we're cleaning up these APIs by moving them to a shared namespace as w + const {Link, useRouter, usePathname, redirect} = createSharedPathnamesNavigation({locales}); ``` -Typically, you'll want to call this factory function in a central place in your app where you can easily import from (see [the proposed navigation docs](https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/docs/routing/navigation#shared-pathnames)). +Typically, you'll want to call this factory function in a central place in your app where you can easily import from (see [the navigation docs](https://next-intl-docs.vercel.app/docs/routing/navigation#shared-pathnames)). -These changes bring the existing APIs in line with the new [`createLocalizedPathnamesNavigation` API](https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/docs/routing/navigation#localized-pathnames) that allows you to localize pathnames: +These changes bring the existing APIs in line with the new [`createLocalizedPathnamesNavigation` API](https://next-intl-docs.vercel.app/docs/routing/navigation#localized-pathnames) that allows you to localize pathnames: ```tsx filename="navigation.ts" import {createLocalizedPathnamesNavigation, Pathnames} from 'next-intl/navigation'; @@ -82,44 +84,57 @@ By using a similar API, you can upgrade from shared pathnames to localized pathn ### Switching the middleware default of `localePrefix` to `always` -Previously, the [`localePrefix` of the middleware](https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/docs/routing/middleware#locale-prefix) defaulted to `as-needed`, meaning that a locale prefix was only added for non-default locales. +Previously, the [`localePrefix` of the middleware](https://next-intl-docs.vercel.app/docs/routing/middleware#locale-prefix) defaulted to `as-needed`, meaning that a locale prefix was only added for non-default locales. This default has now been changed to `always` since this has two advantages: -1. We can recommend [a safer default `matcher`](https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/docs/routing/middleware#matcher-config) that needs no extra treatment for pathnames with dots (e.g. `/users/jane.doe`) -2. It avoids an [edge case of `Link`](https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/docs/routing/middleware#locale-prefix-as-needed) where we include a prefix for the default locale on the server side but patch this on the client side by removing the prefix (certain SEO tools might report a hint that a link points to a redirect in this case). +1. We can recommend [a safer default `matcher`](https://next-intl-docs.vercel.app/docs/routing/middleware#matcher-config) that needs no extra treatment for pathnames with dots (e.g. `/users/jane.doe`) +2. It avoids an [edge case of `Link`](https://next-intl-docs.vercel.app/docs/routing/middleware#locale-prefix-as-needed) where we include a prefix for the default locale on the server side but patch this on the client side by removing the prefix (certain SEO tools might report a hint that a link points to a redirect in this case). -If you want to stay on the `as-needed` strategy, you can [configure this option](https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/docs/routing/middleware#locale-prefix-as-needed) in the middleware. +If you want to stay on the `as-needed` strategy, you can [configure this option](https://next-intl-docs.vercel.app/docs/routing/middleware#locale-prefix-as-needed) in the middleware. ### Static rendering of Server Components With the newly introduced Server Components support comes a temporary workaround for static rendering. -If you call APIs like `useTranslations` in a Server Component, by default, the hook will opt the page into [dynamic rendering](https://nextjs.org/docs/app/building-your-application/rendering/server-components#dynamic-rendering). This is a limitation that we aim to remove in the future, but as a stopgap solution, we've added the [`unstable_setRequestLocale`](https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/docs/getting-started/app-router-server-components#static-rendering) API so that you can keep your pages fully static. +If you call APIs from `next-intl` in Server Components, the page will by default opt into [dynamic rendering](https://nextjs.org/docs/app/building-your-application/rendering/server-components#dynamic-rendering). This is a limitation that we aim to remove in the future, but as a stopgap solution, we've added the [`unstable_setRequestLocale`](https://next-intl-docs.vercel.app/docs/getting-started/app-router-server-components#static-rendering) API so that you can keep your pages fully static. Note that if you're using `next-intl` exclusively in Client Components, this doesn't apply to your app and static rendering will continue to work as it did before. ### Other notable changes 1. `next-intl` now uses [`exports` in `package.json`](https://nodejs.org/api/packages.html#subpath-exports) to clearly define which modules are exported. This should not affect you, unless you've previously imported undocumented internals. -2. `NextIntlProvider` has been removed in favor of [`NextIntlClientProvider`](https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/docs/configuration#client-server-components) +2. `NextIntlProvider` has been removed in favor of [`NextIntlClientProvider`](https://next-intl-docs.vercel.app/docs/configuration#client-server-components) 3. `NextIntlClientProvider` now needs to be imported from `next-intl` instead of `next-intl/client`. -4. [The middleware](https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/docs/routing/middleware) now needs to be imported from `next-intl/middleware` instead of `next-intl/server` (deprecated since v2.14). +4. [The middleware](https://next-intl-docs.vercel.app/docs/routing/middleware) now needs to be imported from `next-intl/middleware` instead of `next-intl/server` (deprecated since v2.14). 5. `next@^13.4` is now required for the RSC APIs. Next.js 12 is still supported for the Pages Router integration. 6. If you're using `NextIntlClientProvider` outside of the App Router (e.g. with the Pages Router), you need to define the `locale` prop explicitly. 7. `useMessages` now has a non-nullable return type for easier consumption and will throw if no messages are configured. 8. `createTranslator(…).rich` now returns a `ReactNode`. Previously, this was somewhat confusing, since `t.rich` accepted and returned either React elements or strings depending on if you retrieve the fuction via `useTranslations` or `createTranslator`. Now, an explicit [`t.markup`](/docs/usage/messages#html-markup) function has been added to generate markup strings like `'Hello'` outside of React components. -9. `useIntl` has been replaced with [`useFormatter`](https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/docs/usage/dates-times) (deprecated since v2.11). -10. `createIntl` has been replaced with [`createFormatter`](https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/docs/environments/core-library) (deprecated since v2.11). +9. `useIntl` has been replaced with [`useFormatter`](https://next-intl-docs.vercel.app/docs/usage/dates-times) (deprecated since v2.11). +10. `createIntl` has been replaced with [`createFormatter`](https://next-intl-docs.vercel.app/docs/environments/core-library) (deprecated since v2.11). ## Upgrade now -Along with the release candidate also comes a [preview of the updated docs](https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/). - -We're still looking for more feedback, please try out the release candidate and [reach out](https://github.com/amannn/next-intl/pull/149)! - ``` -npm install next-intl@3.0.0-rc.10 +npm install next-intl@3.0.0 ``` -This release was truly a team effort and couldn't be nearly where it is today without the involvement of the community. Thank you so much for being part of this! +## Thank you + +This release was truly a team effort and couldn't be nearly where it is today without the involvement of the community. + +Thank you so much for: + +- All the encouraging words along the way +- Testing out prereleases +- Providing feedback +- Contributing code +- Questioning ideas +- Helping each other + +I had the pleasure to get in touch with so many of you along the way and I'm incredibly grateful for the willingness to help and support each other in our community. + +A special thank you goes to Crowdin, being the primary sponsor for `next-intl` and enabling me to regularly dedicate time for this project. + +—Jan diff --git a/docs/theme.config.js b/docs/theme.config.js index 3727aec68..96ad47798 100644 --- a/docs/theme.config.js +++ b/docs/theme.config.js @@ -82,7 +82,7 @@ export default { banner: { text: ( <> - 3.0 preview (see{' '} + next-intl 3.0 is out! (
    Date: Fri, 10 Nov 2023 16:02:19 +0100 Subject: [PATCH 304/312] Add meta description and title for twitter --- docs/theme.config.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/docs/theme.config.js b/docs/theme.config.js index 96ad47798..dee26d4ce 100644 --- a/docs/theme.config.js +++ b/docs/theme.config.js @@ -156,25 +156,32 @@ export default { + + + - + + + + - - ) }; From e17b9dbc38b2ea3d029ad5e72f288244c9206de5 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Fri, 10 Nov 2023 17:27:20 +0100 Subject: [PATCH 305/312] Fix link --- docs/pages/blog/next-intl-3-0.mdx | 6 +++++- docs/theme.config.js | 8 +++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/pages/blog/next-intl-3-0.mdx b/docs/pages/blog/next-intl-3-0.mdx index b6ba7be2a..975775495 100644 --- a/docs/pages/blog/next-intl-3-0.mdx +++ b/docs/pages/blog/next-intl-3-0.mdx @@ -6,7 +6,7 @@ import PartnerContentLink from 'components/PartnerContentLink'; # next-intl 3.0 -Nov 9, 2023 · by Jan Amann +Nov 10, 2023 · by Jan Amann More than a year ago, on Oct 25, 2022, [Next.js 13 was announced](https://nextjs.org/blog/next-13) with beta support for the App Router and Server Components. Ever since then, `next-intl` began an exploration on what it means to provide an ideal experience for implementing i18n with the newly added capabilities. @@ -138,3 +138,7 @@ I had the pleasure to get in touch with so many of you along the way and I'm inc A special thank you goes to Crowdin, being the primary sponsor for `next-intl` and enabling me to regularly dedicate time for this project. —Jan + +--- + +(this post has been updated from an initial announcement for the 3.0 release candidate) diff --git a/docs/theme.config.js b/docs/theme.config.js index dee26d4ce..ac0a11a02 100644 --- a/docs/theme.config.js +++ b/docs/theme.config.js @@ -1,5 +1,6 @@ import Footer from 'components/Footer'; import PartnerSidebar from 'components/PartnerSidebar'; +import Link from 'next/link'; import {useRouter} from 'next/router'; import {Navbar, ThemeSwitch} from 'nextra-theme-docs'; @@ -83,12 +84,9 @@ export default { text: ( <> next-intl 3.0 is out! ( - + announcement - + ) ) From 2c88df37170c23a65e4d68891ef4f96d367709dc Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Sun, 12 Nov 2023 11:59:07 +0100 Subject: [PATCH 306/312] docs: Add example for additional rewrites in middleware --- docs/pages/docs/routing/middleware.mdx | 35 ++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/docs/pages/docs/routing/middleware.mdx b/docs/pages/docs/routing/middleware.mdx index ec265eb06..aee827a4c 100644 --- a/docs/pages/docs/routing/middleware.mdx +++ b/docs/pages/docs/routing/middleware.mdx @@ -368,6 +368,41 @@ export const config = { }; ``` +### Example: Additional rewrites + +If you need to handle rewrites apart from the ones provided by `next-intl`, you can adjust the `pathname` of the `request` before invoking the `next-intl` middleware (based on ["A/B Testing with Cookies" by Vercel](https://vercel.com/templates/next.js/cookies)). + +This example rewrites requests for `/[locale]/profile` to `/[locale]/profile/new` if a special cookie is set. + +```tsx filename="middleware.ts" +import createIntlMiddleware from 'next-intl/middleware'; +import {NextRequest} from 'next/server'; + +export default async function middleware(request: NextRequest) { + const [, locale, pathname] = request.nextUrl.pathname.split('/'); + + if (pathname === 'profile') { + const usesNewProfile = + (request.cookies.get('NEW_PROFILE')?.value || 'false') === 'true'; + + if (usesNewProfile) { + request.nextUrl.pathname = `/${locale}/profile/new`; + } + } + + const handleI18nRouting = createIntlMiddleware({ + locales: ['en', 'de'], + defaultLocale: 'en' + }); + const response = handleI18nRouting(request); + return response; +} + +export const config = { + matcher: ['/', '/(de|en)/:path*'] +}; +``` + ### Example: Integrating with Clerk [`@clerk/nextjs`](https://clerk.com/docs/references/nextjs/overview) provides a middleware that can be integrated with `next-intl` by using the [`beforeAuth` hook](https://clerk.com/docs/references/nextjs/auth-middleware#using-before-auth-to-execute-middleware-before-authentication). By doing this, the middleware from `next-intl` will run first, potentially redirect or rewrite incoming requests, followed by the middleware from `@clerk/next` acting on the response. From a0a1f045dd6ce1b347a37f38ee39bb1e1aa8987e Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Mon, 13 Nov 2023 17:07:28 +0100 Subject: [PATCH 307/312] Avoid re-rendering of context consumers if possible --- packages/next-intl/package.json | 2 +- .../src/navigation/react-server/index.tsx | 1 + packages/use-intl/package.json | 2 +- packages/use-intl/src/react/IntlProvider.tsx | 58 +++++++++++++++---- .../use-intl/test/react/IntlProvider.test.tsx | 44 ++++++++++++++ 5 files changed, 94 insertions(+), 13 deletions(-) create mode 100644 packages/use-intl/test/react/IntlProvider.test.tsx diff --git a/packages/next-intl/package.json b/packages/next-intl/package.json index 84734e651..f80405784 100644 --- a/packages/next-intl/package.json +++ b/packages/next-intl/package.json @@ -102,7 +102,7 @@ "size-limit": [ { "path": "dist/production/index.js", - "limit": "12.75 KB" + "limit": "12.81 KB" }, { "path": "dist/production/navigation.js", diff --git a/packages/next-intl/src/navigation/react-server/index.tsx b/packages/next-intl/src/navigation/react-server/index.tsx index 20649060b..ebfc28f20 100644 --- a/packages/next-intl/src/navigation/react-server/index.tsx +++ b/packages/next-intl/src/navigation/react-server/index.tsx @@ -1,2 +1,3 @@ export {default as createSharedPathnamesNavigation} from './createSharedPathnamesNavigation'; export {default as createLocalizedPathnamesNavigation} from './createLocalizedPathnamesNavigation'; +export type {Pathnames} from '../../shared/types'; diff --git a/packages/use-intl/package.json b/packages/use-intl/package.json index 5fea6ec17..1449896a8 100644 --- a/packages/use-intl/package.json +++ b/packages/use-intl/package.json @@ -86,7 +86,7 @@ "size-limit": [ { "path": "dist/production/index.js", - "limit": "12.3 kB" + "limit": "12.355 kB" } ] } diff --git a/packages/use-intl/src/react/IntlProvider.tsx b/packages/use-intl/src/react/IntlProvider.tsx index 9bf1cc5ee..22445b512 100644 --- a/packages/use-intl/src/react/IntlProvider.tsx +++ b/packages/use-intl/src/react/IntlProvider.tsx @@ -1,4 +1,4 @@ -import React, {ReactNode, useState} from 'react'; +import React, {ReactNode, useMemo, useState} from 'react'; import IntlConfig from '../core/IntlConfig'; import initializeConfig from '../core/initializeConfig'; import IntlContext from './IntlContext'; @@ -7,17 +7,53 @@ type Props = IntlConfig & { children: ReactNode; }; -export default function IntlProvider({children, ...config}: Props) { +export default function IntlProvider({ + children, + defaultTranslationValues, + formats, + getMessageFallback, + locale, + messages, + now, + onError, + timeZone +}: Props) { const [messageFormatCache] = useState(() => new Map()); - return ( - - {children} - + // Memoizing this value helps to avoid triggering a re-render of all + // context consumers in case the configuration didn't change. However, + // if some of the non-primitive values change, a re-render will still + // be triggered. Note that there's no need to put `memo` on `IntlProvider` + // itself, because the `children` typically change on every render. + // There's some burden on the consumer side if it's important to reduce + // re-renders, put that's how React works. + // See: https://blog.isquaredsoftware.com/2020/05/blogged-answers-a-mostly-complete-guide-to-react-rendering-behavior/#context-updates-and-render-optimizations + const value = useMemo( + () => ({ + ...initializeConfig({ + locale, + defaultTranslationValues, + formats, + getMessageFallback, + messages, + now, + onError, + timeZone + }), + messageFormatCache + }), + [ + defaultTranslationValues, + formats, + getMessageFallback, + locale, + messageFormatCache, + messages, + now, + onError, + timeZone + ] ); + + return {children}; } diff --git a/packages/use-intl/test/react/IntlProvider.test.tsx b/packages/use-intl/test/react/IntlProvider.test.tsx new file mode 100644 index 000000000..e21dd27c1 --- /dev/null +++ b/packages/use-intl/test/react/IntlProvider.test.tsx @@ -0,0 +1,44 @@ +import {fireEvent, render, screen} from '@testing-library/react'; +import React, {memo, useState} from 'react'; +import {expect, it} from 'vitest'; +import {IntlProvider, useTranslations} from '../../src'; + +it("doesn't re-render context consumers unnecessarily", () => { + const messages = {StaticText: {hello: 'Hello!'}}; + + let numCounterRenders = 0; + function Counter() { + const [count, setCount] = useState(0); + numCounterRenders++; + + return ( + <> + +

    Count: {count}

    + + + + + ); + } + + // `memo` is required on this component, as otherwise + // React doesn't bail out of rendering it. + let numStaticTextRenders = 0; + const StaticText = memo(() => { + const t = useTranslations('StaticText'); + numStaticTextRenders++; + return t('hello'); + }); + + render(); + screen.getByText('Count: 0'); + expect(numCounterRenders).toBe(1); + expect(numStaticTextRenders).toBe(1); + fireEvent.click(screen.getByText('Increment')); + screen.getByText('Count: 1'); + expect(numCounterRenders).toBe(2); + expect(numStaticTextRenders).toBe(1); +}); From f542802fb6058c0632842812b434b4c1e08242a3 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 14 Nov 2023 11:11:47 +0100 Subject: [PATCH 308/312] docs: Sync pathnames tabs in docs --- docs/pages/docs/routing/navigation.mdx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/pages/docs/routing/navigation.mdx b/docs/pages/docs/routing/navigation.mdx index 8f1937455..ff24b31c2 100644 --- a/docs/pages/docs/routing/navigation.mdx +++ b/docs/pages/docs/routing/navigation.mdx @@ -126,7 +126,7 @@ export default createMiddleware({ This component wraps [`next/link`](https://nextjs.org/docs/app/api-reference/components/link) and automatically prefixes the `href` with the current locale as necessary. If the default locale is matched, the `href` remains unchanged and no prefix is added. - + ```tsx @@ -318,7 +318,7 @@ Just like `next/link`, by default all links are prefetched. The one exception to If you need to navigate programmatically, e.g. in an event handler, `next-intl` provides a convience API that wraps [`useRouter` from Next.js](https://nextjs.org/docs/app/api-reference/functions/use-router) and automatically applies the locale of the user. - + ```tsx 'use client'; @@ -423,7 +423,7 @@ router.replace( To retrieve the pathname without a potential locale prefix, you can call `usePathname`. - + ```tsx @@ -458,7 +458,7 @@ Note that internal pathnames are returned without params being resolved (e.g. `/ If you want to interrupt the render and redirect to another page, you can invoke the `redirect` function. This wraps [the `redirect` function from Next.js](https://nextjs.org/docs/app/api-reference/functions/redirect) and automatically applies the current locale. - + ```tsx @@ -502,7 +502,7 @@ redirect({ If you need to construct a particular pathname based on a locale, you can call the `getPathname` function. This can for example be useful to retrieve a [canonical link](https://nextjs.org/docs/app/api-reference/functions/generate-metadata#alternates) for a page that accepts search params. - + (This API is only available for localized pathnames, since it is not necessary for shared pathnames.) From c7b26269105c358dbaec70cd1abf3dd57535c856 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 14 Nov 2023 14:24:55 +0100 Subject: [PATCH 309/312] docs: Various fixes --- ...anslations-outside-of-react-components.mdx | 2 +- docs/pages/docs/environments/error-files.mdx | 3 +- .../environments/metadata-route-handlers.mdx | 6 ++ .../environments/server-client-components.mdx | 4 +- .../pages/docs/getting-started/app-router.mdx | 25 +++--- docs/pages/docs/usage/messages.mdx | 79 ++++++++----------- docs/pages/examples/_meta.json | 4 +- docs/pages/examples/pages-router-advanced.mdx | 11 --- 8 files changed, 59 insertions(+), 75 deletions(-) delete mode 100644 docs/pages/examples/pages-router-advanced.mdx diff --git a/docs/pages/blog/translations-outside-of-react-components.mdx b/docs/pages/blog/translations-outside-of-react-components.mdx index 608337aee..3280699c8 100644 --- a/docs/pages/blog/translations-outside-of-react-components.mdx +++ b/docs/pages/blog/translations-outside-of-react-components.mdx @@ -122,7 +122,7 @@ import {getTranslations} from 'next-intl/server'; const locale = params.locale; // This creates the same function that is returned by `useTranslations`. -const t = await getTranslations(locale); +const t = await getTranslations({locale}); // Result: "Hello world!" t('hello', {name: 'world'}); diff --git a/docs/pages/docs/environments/error-files.mdx b/docs/pages/docs/environments/error-files.mdx index c98b576fb..52a0d2828 100644 --- a/docs/pages/docs/environments/error-files.mdx +++ b/docs/pages/docs/environments/error-files.mdx @@ -41,7 +41,7 @@ export default function CatchAllPage() { } ``` -After this change, all requests that are matched within the `[locale]` segment will render the `not-found` page when an unknown route is encountered. +After this change, all requests that are matched within the `[locale]` segment will render the `not-found` page when an unknown route is encountered (e.g. `/en/unknown`). ### Catching non-localized requests @@ -54,6 +54,7 @@ You can add a root `not-found` page to handle these cases too. import {redirect, usePathname} from 'next/navigation'; +// Can be imported from a shared config const defaultLocale = 'en'; export default function NotFound() { diff --git a/docs/pages/docs/environments/metadata-route-handlers.mdx b/docs/pages/docs/environments/metadata-route-handlers.mdx index fa8bc0c8f..cc18a4c52 100644 --- a/docs/pages/docs/environments/metadata-route-handlers.mdx +++ b/docs/pages/docs/environments/metadata-route-handlers.mdx @@ -27,6 +27,12 @@ export async function generateMetadata({params: {locale}}) { } ``` + + By passing an explicit `locale` to the awaitable functions from `next-intl`, + you can make the metadata handler eligable for [static + rendering](/docs/getting-started/app-router#static-rendering). + + ### Metadata files If you need to internationalize content within [metadata files](https://nextjs.org/docs/app/api-reference/file-conventions/metadata), such as an Open Graph image, you can call APIs from `next-intl` in the exported function. diff --git a/docs/pages/docs/environments/server-client-components.mdx b/docs/pages/docs/environments/server-client-components.mdx index 7135c1d24..f2ef00cff 100644 --- a/docs/pages/docs/environments/server-client-components.mdx +++ b/docs/pages/docs/environments/server-client-components.mdx @@ -113,7 +113,9 @@ The one restriction that currently comes with this pattern is that hooks can not
    Should I use async or non-async functions for my components? -If you implement components that qualify as shared components, it can be beneficial to implement them as non-async functions. This allows to use these components either in a server or client environment, making them really flexible. Even if you don't intend to to ever run a particular component on the client side, this compatibility can still be helpful, e.g. for simplified testing. However, there's no need to dogmatically use non-async functions exclusively for handling internationalization—use what fits your app best. +If you implement components that qualify as shared components, it can be beneficial to implement them as non-async functions. This allows to use these components either in a server or client environment, making them really flexible. Even if you don't intend to to ever run a particular component on the client side, this compatibility can still be helpful, e.g. for simplified testing. + +However, there's no need to dogmatically use non-async functions exclusively for handling internationalization—use what fits your app best.
    diff --git a/docs/pages/docs/getting-started/app-router.mdx b/docs/pages/docs/getting-started/app-router.mdx index 7687f6404..00d531226 100644 --- a/docs/pages/docs/getting-started/app-router.mdx +++ b/docs/pages/docs/getting-started/app-router.mdx @@ -7,9 +7,13 @@ The Next.js App Router introduces support for [React Server Components](https:// ## Getting started -If you haven't done so already, [create a Next.js app that uses the App Router](https://nextjs.org/docs/getting-started/installation). All pages should be moved within a `[locale]` folder so that we can use this segment to provide content in different languages (e.g. `/en`, `/en/about`, etc.). +If you haven't done so already, [create a Next.js app that uses the App Router](https://nextjs.org/docs/getting-started/installation). -**Start by running `npm install next-intl` and create the following file structure:** +`next-intl` integrates with the App Router, by using a `[locale]` [dynamic segment](https://nextjs.org/docs/pages/building-your-application/routing/dynamic-routes) so that we can use this segment to provide content in different languages (e.g. `/en`, `/en/about`, etc.). + +Let's get started! + +**Run `npm install next-intl` and create the following file structure:** ``` ├── messages (1) @@ -45,7 +49,7 @@ The simplest option is to add JSON files in your project based on locales, e.g. ### `next.config.js` -Now, set up the plugin which provides i18n configuration for Server Components. +Now, set up the plugin which creates an alias to import your i18n configuration (specified in the next step) into Server Components. ```js filename="next.config.js" const withNextIntl = require('next-intl/plugin')(); @@ -89,7 +93,7 @@ module.exports = withNextIntl({ ### `middleware.ts` -[The middleware](/docs/routing/middleware) matches a locale for the request and handles redirects and rewrites accordingly. +The middleware matches a locale for the request and handles redirects and rewrites accordingly. ```tsx filename="middleware.ts" import createMiddleware from 'next-intl/middleware'; @@ -115,6 +119,7 @@ The `locale` that was matched by the middleware is available via the `locale` pa ```tsx filename="app/[locale]/layout.tsx" import {notFound} from 'next/navigation'; +// Can be imported from a shared config const locales = ['en', 'de']; export default function LocaleLayout({children, params: {locale}}) { @@ -166,12 +171,8 @@ That's all it takes! navigation docs](/docs/routing/navigation).
  • - Wondering how to link between internationalized pages? Have a look at [the - navigation docs](/docs/routing/navigation). -
  • -
  • - Are you transitioning from the Pages Router to the App Router? Check out the - migration example. + Are you transitioning from the Pages to the App Router? Check out [the + migration example](/examples/app-router-migration).
  • @@ -240,13 +241,13 @@ export default function IndexPage({ **Important:** `unstable_setRequestLocale` needs to be called after the `locale` is validated, but before you call any hooks from `next-intl`. Otherwise, you'll get an error when trying to prerender the page. +Note that Next.js can render layouts and pages indepently. This means that e.g. when you navigate from `/settings/profile` to `/settings/privacy`, the `/settings` segment might not re-render as part of the request. Due to this, it's important that `unstable_setRequestLocale` is called not only in the parent `settings/layout.tsx`, but also in the individual pages `profile/page.tsx` and `privacy/page.tsx`. +
    What does "unstable" mean? `unstable_setRequestLocale` is meant to be used as a stopgap solution and we aim to remove it in the future [in case Next.js adds an API to access parts of the URL](https://github.com/facebook/react/pull/27424#issuecomment-1739464985). If that's the case, you'll get a deprecation notice in a minor version and the API will be removed as part of a major version. -Note that Next.js can render layouts and pages indepently. This means that e.g. when you navigate from `/settings/profile` to `/settings/privacy`, the `/settings` segment might not re-render as part of the request. Due to this, it's important that `unstable_setRequestLocale` is called not only in the parent `settings/layout.tsx`, but also in the individual pages `profile/page.tsx` and `privacy/page.tsx`. - That being said, the API is expected to work reliably if you're cautious to apply it in all relevant places.
    diff --git a/docs/pages/docs/usage/messages.mdx b/docs/pages/docs/usage/messages.mdx index 83f725eeb..836fdb72d 100644 --- a/docs/pages/docs/usage/messages.mdx +++ b/docs/pages/docs/usage/messages.mdx @@ -7,12 +7,12 @@ The main part of handling internationalization (typically referred to as _i18n_) ## Terminology -- **Locale**: We use this term to describe an identifier that contains the language and formatting preferences of users. Apart from the language, this includes optional regional information (e.g. `en-US`). -- **Messages**: These are collections of namespace-label pairs that provide grouping by locale (e.g. `en-US.json`). +- **Locale**: We use this term to describe an identifier that contains the language and formatting preferences of users. Apart from the language, a locale can include optional regional information (e.g. `en-US`). Locales are specified as [IETF BCP 47 language tags](https://en.wikipedia.org/wiki/IETF_language_tag). +- **Messages**: These are collections of namespace-label pairs that are grouped by locale (e.g. `en-US.json`). ## Structuring messages -To group your messages within a locale, it's recommended to use component names as namespaces and embrace them as the primary unit of code organization in your app. +To group your messages within a locale, it's recommended to use component names as namespaces and embrace them as the primary unit of code organization in your app. You can of course also use a different structure, depending on what suits your app best. ```json filename="en.json" { @@ -22,9 +22,9 @@ To group your messages within a locale, it's recommended to use component names } ``` -Now, you can render messages from within a React component via the `useTranslations` hook: +You can render messages from within a React component via the `useTranslations` hook: -```js filename="About.tsx" +```tsx filename="About.tsx" import {useTranslations} from 'next-intl'; function About() { @@ -60,7 +60,7 @@ Optionally, you can structure your messages as nested objects. } ``` -```js filename="SignUp.tsx" +```tsx filename="SignUp.tsx" import {useTranslations} from 'next-intl'; function SignUp() { @@ -117,9 +117,7 @@ export default function useLocaleLabel() {
    How can I use translations outside of components? -`next-intl` is heavily based on the `useTranslations` API which is intended to consume translations from within React components. - -This may seem like an unnecessary limitation, but this is intentional and aims to encourage the use of proven patterns that avoid potential issues—especially if they are easy to overlook. +`next-intl` is heavily based on the `useTranslations` API which is intended to consume translations from within React components. This may seem like a limitation, but this is intentional and aims to encourage the use of proven patterns that avoid potential issues—especially if they are easy to overlook. If you're interested to dive deeper into this topic, there's a blog post that discusses the background of this design decision: [How (not) to use translations outside of React components](/blog/translations-outside-of-react-components). @@ -203,7 +201,7 @@ To match a specific number, `next-intl` additionally supports the special `=valu To apply pluralization based on an order of items, the `selectordinal` argument can be used: -```js filename="en.json" +```tsx filename="en.json" "message": "It's your {year, selectordinal, one {#st} two {#nd} few {#rd} other {#th}} birthday!" ``` @@ -235,7 +233,7 @@ To match a specific number, `next-intl` additionally supports the special `=valu To map identifiers to human readable labels, you can use the `select` argument: -```js filename="en.json" +```tsx filename="en.json" "message": "{gender, select, female {She} male {He} other {They}} is online." ``` @@ -296,7 +294,7 @@ Messages can use tags without any chunks as children, but syntax-wise, a closing ```js t.rich('message', { - br: (chunks) =>
    + br: () =>
    }); ``` @@ -385,56 +383,43 @@ If you need to render a list of messages, the recommended approach is to map an ```json filename="en.json" { - "Benefits": { - "zero-config": "Works with zero config", - "customizable": "Easy to customize", - "fast": "Blazingly fast" + "CompanyStats": { + "yearsOfService": { + "title": "Years of service", + "value": "34" + }, + "happyClients": { + "title": "Happy clients", + "value": "1.000+" + }, + "partners": { + "title": "Products", + "value": "5.000+" + } } } ``` -```js filename="Benefits.tsx" +```tsx filename="CompanyStats.tsx" import {useTranslations} from 'next-intl'; -function Benefits() { - const t = useTranslations('Benefits'); - const keys = ['zero-config', 'customizable', 'fast'] as const; +function CompanyStats() { + const t = useTranslations('CompanyStats'); + const keys = ['yearsOfService', 'happyClients', 'partners'] as const; return (
      {keys.map((key) => ( -
    • {t(key)}
    • +
    • +

      {t(`${key}.title`)}

      +

      {t(`${key}.value`)}

      +
    • ))}
    ); } ``` -If the number of items varies between locales, you can solve this by using [rich text](#rich-text). - -```json filename="en.json" -{ - "Benefits": { - "items": "Works with zero configEasy to customizeBlazingly fast" - } -} -``` - -```js filename="Benefits.tsx" -import {useTranslations} from 'next-intl'; - -function Benefits() { - const t = useTranslations('Benefits'); - return ( -
      - {t.rich('items', { - item: (chunks) =>
    • {chunks}
    • - })} -
    - ); -} -``` -
    Why can't I just use arrays in my messages? @@ -450,7 +435,7 @@ The advantage of this approach over supporting arrays in messages is that this w } ``` -```js filename="Benefits.tsx" +```tsx filename="Benefits.tsx" import {useTranslations} from 'next-intl'; function Benefits() { diff --git a/docs/pages/examples/_meta.json b/docs/pages/examples/_meta.json index 405167b90..4a83ca6f4 100644 --- a/docs/pages/examples/_meta.json +++ b/docs/pages/examples/_meta.json @@ -7,8 +7,8 @@ "title": "Pages Router", "theme": {"layout": "full"} }, - "pages-router-advanced": { - "title": "Pages Router (advanced)", + "app-router-migration": { + "title": "App Router migration", "theme": {"layout": "full"} } } diff --git a/docs/pages/examples/pages-router-advanced.mdx b/docs/pages/examples/pages-router-advanced.mdx deleted file mode 100644 index 8fc9e6fea..000000000 --- a/docs/pages/examples/pages-router-advanced.mdx +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Pages Router (advanced) -full: true ---- - -import CodeSandbox from 'components/CodeSandbox'; - - From 2ccb247c456193007886e819808fe557eadf221b Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 14 Nov 2023 15:05:51 +0100 Subject: [PATCH 310/312] feat(RSC): Various fixes (#623) **Changes:** - [Set hreflang on Link](https://github.com/amannn/next-intl/pull/623/commits/dc9150975f58ce9d5a8dd213b1daaa6e89687bfc) - [Throw for missing params in localized pathnames](https://github.com/amannn/next-intl/pull/623/commits/00f0998be1aa5fc48ae16a0b554e8e697a4fa6fd) - [Remove deprecations](https://github.com/amannn/next-intl/pull/623/commits/967f903594d143575d0530f93740bfc9e8816320) --- .../next-intl/src/navigation/BaseLink.tsx | 8 +- packages/next-intl/src/navigation/utils.tsx | 12 +- .../next-intl/src/server/getFormatter.tsx | 4 +- packages/next-intl/src/server/getMessages.tsx | 4 +- packages/next-intl/src/server/getNow.tsx | 4 +- packages/next-intl/src/server/getTimeZone.tsx | 4 +- .../next-intl/src/server/getTranslator.tsx | 124 ------------------ packages/next-intl/src/server/index.tsx | 3 - .../next-intl/src/server/resolveLocaleArg.tsx | 33 +---- .../test/navigation/BaseLink.test.tsx | 7 + .../next-intl/test/navigation/utils.test.tsx | 26 +++- 11 files changed, 65 insertions(+), 164 deletions(-) delete mode 100644 packages/next-intl/src/server/getTranslator.tsx diff --git a/packages/next-intl/src/navigation/BaseLink.tsx b/packages/next-intl/src/navigation/BaseLink.tsx index bb703102f..6de67da93 100644 --- a/packages/next-intl/src/navigation/BaseLink.tsx +++ b/packages/next-intl/src/navigation/BaseLink.tsx @@ -15,8 +15,14 @@ function BaseLink( ref: Props['ref'] ) { const defaultLocale = useLocale(); + const linkLocale = locale || defaultLocale; return ( - + ); } diff --git a/packages/next-intl/src/navigation/utils.tsx b/packages/next-intl/src/navigation/utils.tsx index 80cd6e731..713640ebc 100644 --- a/packages/next-intl/src/navigation/utils.tsx +++ b/packages/next-intl/src/navigation/utils.tsx @@ -106,8 +106,9 @@ export function compileLocalizedPathname({ function compilePath( namedPath: Pathnames[keyof Pathnames] ) { - let compiled = + const template = typeof namedPath === 'string' ? namedPath : namedPath[locale]; + let compiled = template; if (params) { Object.entries(params).forEach(([key, value]) => { @@ -122,6 +123,15 @@ export function compileLocalizedPathname({ }); } + if (process.env.NODE_ENV !== 'production' && compiled.includes('[')) { + // Next.js throws anyway, therefore better provide a more helpful error message + throw new Error( + `Insufficient params provided for localized pathname.\nTemplate: ${template}\nParams: ${JSON.stringify( + params + )}` + ); + } + if (query) { compiled += serializeSearchParams(query); } diff --git a/packages/next-intl/src/server/getFormatter.tsx b/packages/next-intl/src/server/getFormatter.tsx index 8d48e3d39..ed36f11a6 100644 --- a/packages/next-intl/src/server/getFormatter.tsx +++ b/packages/next-intl/src/server/getFormatter.tsx @@ -14,7 +14,7 @@ const getFormatterImpl = cache(async (locale: string) => { * The formatter automatically receives the request config, but * you can override it by passing in additional options. */ -export default async function getFormatter(opts?: {locale?: string} | string) { - const locale = await resolveLocaleArg('getFormatter', opts); +export default async function getFormatter(opts?: {locale?: string}) { + const locale = await resolveLocaleArg(opts); return getFormatterImpl(locale); } diff --git a/packages/next-intl/src/server/getMessages.tsx b/packages/next-intl/src/server/getMessages.tsx index 4be0b86c8..0ccdf556d 100644 --- a/packages/next-intl/src/server/getMessages.tsx +++ b/packages/next-intl/src/server/getMessages.tsx @@ -14,7 +14,7 @@ const getMessagesImpl = cache(async (locale: string) => { return config.messages; }); -export default async function getMessages(opts?: {locale?: string} | string) { - const locale = await resolveLocaleArg('getMessages', opts); +export default async function getMessages(opts?: {locale?: string}) { + const locale = await resolveLocaleArg(opts); return getMessagesImpl(locale); } diff --git a/packages/next-intl/src/server/getNow.tsx b/packages/next-intl/src/server/getNow.tsx index fd06e7387..868420e62 100644 --- a/packages/next-intl/src/server/getNow.tsx +++ b/packages/next-intl/src/server/getNow.tsx @@ -7,7 +7,7 @@ const getNowImpl = cache(async (locale: string) => { return config.now; }); -export default async function getNow(opts?: {locale?: string} | string) { - const locale = await resolveLocaleArg('getNow', opts); +export default async function getNow(opts?: {locale?: string}) { + const locale = await resolveLocaleArg(opts); return getNowImpl(locale); } diff --git a/packages/next-intl/src/server/getTimeZone.tsx b/packages/next-intl/src/server/getTimeZone.tsx index 5f4de5b0e..862a5e2cf 100644 --- a/packages/next-intl/src/server/getTimeZone.tsx +++ b/packages/next-intl/src/server/getTimeZone.tsx @@ -7,7 +7,7 @@ const getTimeZoneImpl = cache(async (locale: string) => { return config.timeZone; }); -export default async function getTimeZone(opts?: {locale?: string} | string) { - const locale = await resolveLocaleArg('getTimeZone', opts); +export default async function getTimeZone(opts?: {locale?: string}) { + const locale = await resolveLocaleArg(opts); return getTimeZoneImpl(locale); } diff --git a/packages/next-intl/src/server/getTranslator.tsx b/packages/next-intl/src/server/getTranslator.tsx deleted file mode 100644 index 5d5800487..000000000 --- a/packages/next-intl/src/server/getTranslator.tsx +++ /dev/null @@ -1,124 +0,0 @@ -import {ReactElement, ReactNodeArray, cache} from 'react'; -import { - Formats, - TranslationValues, - MessageKeys, - NamespaceKeys, - NestedKeyOf, - NestedValueOf, - RichTranslationValues, - MarkupTranslationValues -} from 'use-intl/core'; -import getTranslations from './getTranslations'; - -// TODO: Remove -const getDeprecation = cache(() => ({hasWarned: false})); - -/** @deprecated Deprecated in favor of `getTranslations`. See https://github.com/amannn/next-intl/pull/600 */ -export default async function getTranslator< - NestedKey extends NamespaceKeys< - IntlMessages, - NestedKeyOf - > = never ->( - locale: string, - namespace?: NestedKey -): // Explicitly defining the return type is necessary as TypeScript would get it wrong -Promise<{ - // Default invocation - < - TargetKey extends MessageKeys< - NestedValueOf< - {'!': IntlMessages}, - [NestedKey] extends [never] ? '!' : `!.${NestedKey}` - >, - NestedKeyOf< - NestedValueOf< - {'!': IntlMessages}, - [NestedKey] extends [never] ? '!' : `!.${NestedKey}` - > - > - > - >( - key: TargetKey, - values?: TranslationValues, - formats?: Partial - ): string; - - // `rich` - rich< - TargetKey extends MessageKeys< - NestedValueOf< - {'!': IntlMessages}, - [NestedKey] extends [never] ? '!' : `!.${NestedKey}` - >, - NestedKeyOf< - NestedValueOf< - {'!': IntlMessages}, - [NestedKey] extends [never] ? '!' : `!.${NestedKey}` - > - > - > - >( - key: TargetKey, - values?: RichTranslationValues, - formats?: Partial - ): string | ReactElement | ReactNodeArray; - - // `markup` - markup< - TargetKey extends MessageKeys< - NestedValueOf< - {'!': IntlMessages}, - [NestedKey] extends [never] ? '!' : `!.${NestedKey}` - >, - NestedKeyOf< - NestedValueOf< - {'!': IntlMessages}, - [NestedKey] extends [never] ? '!' : `!.${NestedKey}` - > - > - > - >( - key: TargetKey, - values?: MarkupTranslationValues, - formats?: Partial - ): string; - - // `raw` - raw< - TargetKey extends MessageKeys< - NestedValueOf< - {'!': IntlMessages}, - [NestedKey] extends [never] ? '!' : `!.${NestedKey}` - >, - NestedKeyOf< - NestedValueOf< - {'!': IntlMessages}, - [NestedKey] extends [never] ? '!' : `!.${NestedKey}` - > - > - > - >( - key: TargetKey - ): any; -}> { - if (!getDeprecation().hasWarned) { - console.error( - `\nDEPRECATION WARNING: \`getTranslator\` has been deprecated in favor of \`getTranslations\`: - -import {getTranslations} from 'next-intl/server'; - -// With implicit request locale -const t = await getTranslator('${namespace}'); - -// With explicit locale -const t = await getTranslator({locale: '${locale}', namespace: '${namespace}'}); - -See https://github.com/amannn/next-intl/pull/600\n` - ); - getDeprecation().hasWarned = true; - } - - return getTranslations({locale, namespace}); -} diff --git a/packages/next-intl/src/server/index.tsx b/packages/next-intl/src/server/index.tsx index be2f88348..3d30e3968 100644 --- a/packages/next-intl/src/server/index.tsx +++ b/packages/next-intl/src/server/index.tsx @@ -12,6 +12,3 @@ export {default as getMessages} from './getMessages'; export {default as getLocale} from './getLocale'; export {setRequestLocale as unstable_setRequestLocale} from './RequestLocale'; - -// TODO: Remove -export {default as getTranslator} from './getTranslator'; diff --git a/packages/next-intl/src/server/resolveLocaleArg.tsx b/packages/next-intl/src/server/resolveLocaleArg.tsx index 2634000a9..d4828e69f 100644 --- a/packages/next-intl/src/server/resolveLocaleArg.tsx +++ b/packages/next-intl/src/server/resolveLocaleArg.tsx @@ -1,30 +1,11 @@ -import {cache} from 'react'; import getLocale from './getLocale'; -// TODO: Remove - -const deprecate = cache((fnName: string, locale: string) => { - console.error( - `\nDEPRECATION WARNING: Passing a locale as a string to \`${fnName}\` has been deprecated in favor of passing an object with a \`locale\` property instead: - -${fnName}({locale: '${locale}'}); - -See https://github.com/amannn/next-intl/pull/600\n` - ); -}); - -export default function resolveLocaleArg( - fnName: string, - optsOrDeprecatedLocale?: {locale?: string} | string -) { - if (typeof optsOrDeprecatedLocale === 'string') { - deprecate(fnName, optsOrDeprecatedLocale); - return optsOrDeprecatedLocale; +export default function resolveLocaleArg(opts?: { + locale?: string; +}): Promise { + if (opts?.locale) { + return Promise.resolve(opts.locale); + } else { + return getLocale(); } - - if (optsOrDeprecatedLocale?.locale) { - return optsOrDeprecatedLocale.locale; - } - - return getLocale(); } diff --git a/packages/next-intl/test/navigation/BaseLink.test.tsx b/packages/next-intl/test/navigation/BaseLink.test.tsx index 5f0f887bc..fbabff36c 100644 --- a/packages/next-intl/test/navigation/BaseLink.test.tsx +++ b/packages/next-intl/test/navigation/BaseLink.test.tsx @@ -91,6 +91,13 @@ describe('unprefixed routing', () => { expect(ref).toBeDefined(); }); + + it('sets an hreflang', () => { + render(Test); + expect( + screen.getByRole('link', {name: 'Test'}).getAttribute('hreflang') + ).toBe('en'); + }); }); describe('prefixed routing', () => { diff --git a/packages/next-intl/test/navigation/utils.test.tsx b/packages/next-intl/test/navigation/utils.test.tsx index d5c126cd8..bdf2c0eb7 100644 --- a/packages/next-intl/test/navigation/utils.test.tsx +++ b/packages/next-intl/test/navigation/utils.test.tsx @@ -1,5 +1,8 @@ import {describe, expect, it} from 'vitest'; -import {serializeSearchParams} from '../../src/navigation/utils'; +import { + compileLocalizedPathname, + serializeSearchParams +} from '../../src/navigation/utils'; describe('serializeSearchParams', () => { it('handles strings', () => { @@ -18,3 +21,24 @@ describe('serializeSearchParams', () => { expect(serializeSearchParams({v: ['a', 'b']})).toEqual('?v=a&v=b'); }); }); + +describe('compileLocalizedPathname', () => { + it('throws when params were not resolved', () => { + const locales: ReadonlyArray = ['en']; + expect(() => + // @ts-expect-error -- Purposefully miss a param + compileLocalizedPathname({ + locale: 'en', + pathname: '/test/[one]/[two]', + pathnames: '/test/[one]/[two]', + params: {one: '1'} + }) + ).toThrow( + [ + 'Insufficient params provided for localized pathname.', + 'Template: /test/[one]/[two]', + 'Params: {"one":"1"}' + ].join('\n') + ); + }); +}); From 1603a347101118e70892214ee7da97a7683a29d8 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 14 Nov 2023 15:15:14 +0100 Subject: [PATCH 311/312] Update blog post --- docs/next.config.js | 5 ++++ docs/pages/blog/next-intl-3-0.mdx | 42 +++++++++++++++---------------- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/docs/next.config.js b/docs/next.config.js index 48d6f8710..4e21cad8b 100644 --- a/docs/next.config.js +++ b/docs/next.config.js @@ -28,6 +28,11 @@ module.exports = withNextra({ destination: '/docs/getting-started', permanent: true }, + { + source: '/docs/configuration', + destination: '/docs/usage/configuration', + permanent: true + }, { source: '/docs/getting-started/production-checklist', destination: '/docs/environments/runtime-requirements', diff --git a/docs/pages/blog/next-intl-3-0.mdx b/docs/pages/blog/next-intl-3-0.mdx index 975775495..e7a36ce7b 100644 --- a/docs/pages/blog/next-intl-3-0.mdx +++ b/docs/pages/blog/next-intl-3-0.mdx @@ -6,33 +6,33 @@ import PartnerContentLink from 'components/PartnerContentLink'; # next-intl 3.0 -Nov 10, 2023 · by Jan Amann +Nov 14, 2023 · by Jan Amann More than a year ago, on Oct 25, 2022, [Next.js 13 was announced](https://nextjs.org/blog/next-13) with beta support for the App Router and Server Components. Ever since then, `next-intl` began an exploration on what it means to provide an ideal experience for implementing i18n with the newly added capabilities. -Today, [after more than 360 commits and the involvement of over 60 community members](https://github.com/amannn/next-intl/pull/149), I'm absolutely thrilled to announce **next-intl 3.0**, which is now App Router-first. +Today, [after more than 370 commits and the involvement of over 60 community members](https://github.com/amannn/next-intl/pull/149), I'm absolutely thrilled to announce **next-intl 3.0**, which is now App Router-first. -If you're still happy with the Pages Router, rest assured that `next-intl` is dedicated to support this paradigm for as long as Next.js does. For those who have already migrated to the App Router, this means that `next-intl` now takes full advantage of the new capabilities. +If you're still happy with the Pages Router, rest assured that `next-intl` is dedicated to support this paradigm for as long as Next.js does. For those who have already migrated to the App Router, this means that you can take full advantage of the new capabilities with `next-intl`. ## New features -1. **Support for React Server Components**: The APIs `useTranslations`, `useFormatter`, `useLocale`, `useNow` and `useTimeZone` can now be used in Server Components ([docs](https://next-intl-docs.vercel.app/docs/environments/server-client-components)). -2. **New async APIs**: To handle i18n in async components, the Metadata API and Route Handlers, the APIs `getTranslations`, `getFormatter`, `getNow`, and `getTimeZone` have been added ([docs](https://next-intl-docs.vercel.app/docs/environments/metadata-route-handlers)). -3. **Middleware for internationalized routing**: While Next.js has built-in support for this with the Pages Router, the App Router doesn't include a built-in solution anymore. `next-intl` now provides a drop-in solution that has you covered ([docs](https://next-intl-docs.vercel.app/docs/routing/middleware)). -4. **Internationalized navigation APIs**: Similar to the middleware, this provides a drop-in solution that adds internationalization support for Next.js' navigation APIs: `Link`, `useRouter`, `usePathname` and `redirect`. These APIs allow you to handle locale prefixes behind the scenes and also provide support for localizing pathnames (e.g. `/en/about` vs. `/de/ueber-uns`, see the [docs](https://next-intl-docs.vercel.app/docs/routing/navigation)). +1. **Support for React Server Components**: The APIs `useTranslations`, `useFormatter`, `useLocale`, `useNow` and `useTimeZone` can now be used in Server Components ([docs](/docs/environments/server-client-components)). +2. **New async APIs**: To handle i18n in async components, the Metadata API and Route Handlers, the APIs `getTranslations`, `getFormatter`, `getNow`, and `getTimeZone` have been added ([docs](/docs/environments/metadata-route-handlers)). +3. **Middleware for internationalized routing**: While Next.js has built-in support for this with the Pages Router, the App Router doesn't include a built-in solution anymore. `next-intl` now provides a drop-in solution that has you covered ([docs](/docs/routing/middleware)). +4. **Internationalized navigation APIs**: Similar to the middleware, this provides a drop-in solution that adds internationalization support for Next.js' navigation APIs: `Link`, `useRouter`, `usePathname` and `redirect`. These APIs allow you to handle locale prefixes behind the scenes and also provide support for localizing pathnames (e.g. `/en/about` vs. `/de/ueber-uns`, see the [docs](/docs/routing/navigation)). The latter two have already been added in minor versions, but 3.0 cleans up the API and includes many improvements and bug fixes. ## Breaking changes -If you've been part of the Server Components beta and have already tried out previous releases, first of all, thank you so much! Second: Some APIs saw iterations over the beta period, please carefully review the breaking changes below, even if you're already using some of the new APIs. +If you've already tried out pre-release versions, first of all, thank you so much! Second: Some APIs saw iterations over the beta period, please carefully review the breaking changes below, even if you're already using some of the new APIs. ### Updated setup `next-intl` now requires two additional setup steps when you're using the App Router: -1. [The `i18n.ts` module](https://next-intl-docs.vercel.app/docs/getting-started/app-router-server-components#i18nts) provides configuration for Server Components -2. [`next-intl/plugin`](https://next-intl-docs.vercel.app/docs/getting-started/app-router-server-components#nextconfigjs) needs to be added to link your `i18n.ts` module to `next-intl` +1. [The `i18n.ts` module](/docs/getting-started/app-router#i18nts) provides configuration for Server Components +2. [`next-intl/plugin`](/docs/getting-started/app-router#nextconfigjs) needs to be added to link your `i18n.ts` module to `next-intl` ### New navigation APIs for the App Router @@ -51,9 +51,9 @@ With 3.0, we're cleaning up these APIs by moving them to a shared namespace as w + const {Link, useRouter, usePathname, redirect} = createSharedPathnamesNavigation({locales}); ``` -Typically, you'll want to call this factory function in a central place in your app where you can easily import from (see [the navigation docs](https://next-intl-docs.vercel.app/docs/routing/navigation#shared-pathnames)). +Typically, you'll want to call this factory function in a central place in your app where you can easily import from (see [the navigation docs](/docs/routing/navigation#shared-pathnames)). -These changes bring the existing APIs in line with the new [`createLocalizedPathnamesNavigation` API](https://next-intl-docs.vercel.app/docs/routing/navigation#localized-pathnames) that allows you to localize pathnames: +These changes bring the existing APIs in line with the new [`createLocalizedPathnamesNavigation` API](/docs/routing/navigation#localized-pathnames) that allows you to localize pathnames: ```tsx filename="navigation.ts" import {createLocalizedPathnamesNavigation, Pathnames} from 'next-intl/navigation'; @@ -84,35 +84,35 @@ By using a similar API, you can upgrade from shared pathnames to localized pathn ### Switching the middleware default of `localePrefix` to `always` -Previously, the [`localePrefix` of the middleware](https://next-intl-docs.vercel.app/docs/routing/middleware#locale-prefix) defaulted to `as-needed`, meaning that a locale prefix was only added for non-default locales. +Previously, the [`localePrefix` of the middleware](/docs/routing/middleware#locale-prefix) defaulted to `as-needed`, meaning that a locale prefix was only added for non-default locales. This default has now been changed to `always` since this has two advantages: -1. We can recommend [a safer default `matcher`](https://next-intl-docs.vercel.app/docs/routing/middleware#matcher-config) that needs no extra treatment for pathnames with dots (e.g. `/users/jane.doe`) -2. It avoids an [edge case of `Link`](https://next-intl-docs.vercel.app/docs/routing/middleware#locale-prefix-as-needed) where we include a prefix for the default locale on the server side but patch this on the client side by removing the prefix (certain SEO tools might report a hint that a link points to a redirect in this case). +1. We can recommend [a safer default `matcher`](/docs/routing/middleware#matcher-config) that needs no extra treatment for pathnames with dots (e.g. `/users/jane.doe`) +2. It avoids an [edge case of `Link`](/docs/routing/middleware#locale-prefix-as-needed) where we include a prefix for the default locale on the server side but patch this on the client side by removing the prefix (certain SEO tools might report a hint that a link points to a redirect in this case). -If you want to stay on the `as-needed` strategy, you can [configure this option](https://next-intl-docs.vercel.app/docs/routing/middleware#locale-prefix-as-needed) in the middleware. +If you want to stay on the `as-needed` strategy, you can [configure this option](/docs/routing/middleware#locale-prefix-as-needed) in the middleware. ### Static rendering of Server Components With the newly introduced Server Components support comes a temporary workaround for static rendering. -If you call APIs from `next-intl` in Server Components, the page will by default opt into [dynamic rendering](https://nextjs.org/docs/app/building-your-application/rendering/server-components#dynamic-rendering). This is a limitation that we aim to remove in the future, but as a stopgap solution, we've added the [`unstable_setRequestLocale`](https://next-intl-docs.vercel.app/docs/getting-started/app-router-server-components#static-rendering) API so that you can keep your pages fully static. +If you call APIs from `next-intl` in Server Components, the page will by default opt into [dynamic rendering](https://nextjs.org/docs/app/building-your-application/rendering/server-components#dynamic-rendering). This is a limitation that we aim to remove in the future, but as a stopgap solution, we've added the [`unstable_setRequestLocale`](/docs/getting-started/app-router-server-components#static-rendering) API so that you can keep your pages fully static. Note that if you're using `next-intl` exclusively in Client Components, this doesn't apply to your app and static rendering will continue to work as it did before. ### Other notable changes 1. `next-intl` now uses [`exports` in `package.json`](https://nodejs.org/api/packages.html#subpath-exports) to clearly define which modules are exported. This should not affect you, unless you've previously imported undocumented internals. -2. `NextIntlProvider` has been removed in favor of [`NextIntlClientProvider`](https://next-intl-docs.vercel.app/docs/configuration#client-server-components) +2. `NextIntlProvider` has been removed in favor of [`NextIntlClientProvider`](/docs/usage/configuration#client-server-components) 3. `NextIntlClientProvider` now needs to be imported from `next-intl` instead of `next-intl/client`. -4. [The middleware](https://next-intl-docs.vercel.app/docs/routing/middleware) now needs to be imported from `next-intl/middleware` instead of `next-intl/server` (deprecated since v2.14). +4. [The middleware](/docs/routing/middleware) now needs to be imported from `next-intl/middleware` instead of `next-intl/server` (deprecated since v2.14). 5. `next@^13.4` is now required for the RSC APIs. Next.js 12 is still supported for the Pages Router integration. 6. If you're using `NextIntlClientProvider` outside of the App Router (e.g. with the Pages Router), you need to define the `locale` prop explicitly. 7. `useMessages` now has a non-nullable return type for easier consumption and will throw if no messages are configured. 8. `createTranslator(…).rich` now returns a `ReactNode`. Previously, this was somewhat confusing, since `t.rich` accepted and returned either React elements or strings depending on if you retrieve the fuction via `useTranslations` or `createTranslator`. Now, an explicit [`t.markup`](/docs/usage/messages#html-markup) function has been added to generate markup strings like `'Hello'` outside of React components. -9. `useIntl` has been replaced with [`useFormatter`](https://next-intl-docs.vercel.app/docs/usage/dates-times) (deprecated since v2.11). -10. `createIntl` has been replaced with [`createFormatter`](https://next-intl-docs.vercel.app/docs/environments/core-library) (deprecated since v2.11). +9. `useIntl` has been replaced with [`useFormatter`](/docs/usage/dates-times) (deprecated since v2.11). +10. `createIntl` has been replaced with [`createFormatter`](/docs/environments/core-library) (deprecated since v2.11). ## Upgrade now From acf96981cf197f6697a8cf5de64831e962992c41 Mon Sep 17 00:00:00 2001 From: Jan Amann Date: Tue, 14 Nov 2023 15:31:14 +0100 Subject: [PATCH 312/312] docs: Update links --- docs/pages/docs/environments/server-client-components.mdx | 3 +++ docs/pages/docs/routing/middleware.mdx | 2 +- packages/next-intl/src/react-server/useHook.tsx | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/pages/docs/environments/server-client-components.mdx b/docs/pages/docs/environments/server-client-components.mdx index f2ef00cff..c94e1caa5 100644 --- a/docs/pages/docs/environments/server-client-components.mdx +++ b/docs/pages/docs/environments/server-client-components.mdx @@ -132,7 +132,10 @@ import {useTranslations} from 'next-intl'; import Expandable from './Expandable'; export default function FAQEntry() { + // Call `useTranslations` in a Server Component ... const t = useTranslations('FAQEntry'); + + // ... and pass translated content to a Client Component return ( diff --git a/docs/pages/docs/routing/middleware.mdx b/docs/pages/docs/routing/middleware.mdx index aee827a4c..af21993b8 100644 --- a/docs/pages/docs/routing/middleware.mdx +++ b/docs/pages/docs/routing/middleware.mdx @@ -535,7 +535,7 @@ This can happen either because: To recover from this error, please make sure that: -1. You've [set up the middleware](https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/docs/getting-started/app-router#middlewarets). +1. You've [set up the middleware](/docs/getting-started/app-router#middlewarets). 2. You're using APIs from `next-intl` (including [the navigation APIs](/docs/routing/navigation)) exclusively within the `locale` segment. 3. Your [middleware matcher](#matcher-config) matches all routes of your application, including dynamic segments with potentially unexpected characters like dots (e.g. `/users/jane.doe`). 4. If you're using [`localePrefix: 'as-needed'`](#locale-prefix-as-needed), the `locale` segment effectively acts like a catch-all for all unknown routes. You should make sure that `params.locale` is [validated](/docs/getting-started/app-router#applocalelayouttsx) before it's used by any APIs from `next-intl`. diff --git a/packages/next-intl/src/react-server/useHook.tsx b/packages/next-intl/src/react-server/useHook.tsx index 5aeb5b1c3..e19ceb533 100644 --- a/packages/next-intl/src/react-server/useHook.tsx +++ b/packages/next-intl/src/react-server/useHook.tsx @@ -12,7 +12,7 @@ export default function useHook( error.message.includes("Cannot read properties of null (reading 'use')") ) { throw new Error( - `\`${hookName}\` is not callable within an async component. Please refer to https://next-intl-docs-git-feat-next-13-rsc-next-intl.vercel.app/docs/environments/server-client-components#async-components`, + `\`${hookName}\` is not callable within an async component. Please refer to https://next-intl-docs.vercel.app/docs/environments/server-client-components#async-components`, {cause: error} ); } else {