diff --git a/.eslintignore b/.eslintignore index f0cbbe76..32343497 100644 --- a/.eslintignore +++ b/.eslintignore @@ -24,7 +24,7 @@ pnpm-lock.yaml .docusaurus build docs/docs/reference/core -docs/docs/reference/04-sveltekit +docs/docs/reference/sveltekit static # --------------- Packages --------------- diff --git a/.github/ISSUE_TEMPLATE/1_bug_framework.yml b/.github/ISSUE_TEMPLATE/1_bug_framework.yml index 9e327045..9a20c07f 100644 --- a/.github/ISSUE_TEMPLATE/1_bug_framework.yml +++ b/.github/ISSUE_TEMPLATE/1_bug_framework.yml @@ -30,7 +30,7 @@ body: Run this command in your project's root folder and paste the result: ```sh - npx envinfo --system --binaries --browsers --npmPackages "next,react,next-auth" + npx envinfo --system --binaries --browsers --npmPackages "next,react,next-auth,@auth/*" ``` Alternatively, you can manually gather the version information from your package.json for these packages: "next", "react" and "next-auth". Please also mention your OS and Node.js version, as well as the browser you are using. validations: diff --git a/.github/ISSUE_TEMPLATE/2_bug_provider.yml b/.github/ISSUE_TEMPLATE/2_bug_provider.yml index 28f54450..e5d343b0 100644 --- a/.github/ISSUE_TEMPLATE/2_bug_provider.yml +++ b/.github/ISSUE_TEMPLATE/2_bug_provider.yml @@ -25,6 +25,7 @@ body: - "Custom provider" - "42 School" - "Apple" + - "Asgardeo" - "Atlassian" - "Auth0" - "Authentik" @@ -57,6 +58,7 @@ body: - "Medium" - "Naver" - "Netlify" + - "Notion" - "Okta" - "OneLogin" - "Osso" @@ -87,7 +89,7 @@ body: Run this command in your project's root folder and paste the result: ```sh - npx envinfo --system --binaries --browsers --npmPackages "next,react,next-auth" + npx envinfo --system --binaries --browsers --npmPackages "next,react,next-auth,@auth/*" ``` Alternatively, you can manually gather the version information from your package.json for these packages: "next", "react" and "next-auth". Please also mention your OS and Node.js version, as well as the browser you are using. validations: diff --git a/.github/ISSUE_TEMPLATE/3_bug_adapter.yml b/.github/ISSUE_TEMPLATE/3_bug_adapter.yml index aa4b6b0b..1eea75b3 100644 --- a/.github/ISSUE_TEMPLATE/3_bug_adapter.yml +++ b/.github/ISSUE_TEMPLATE/3_bug_adapter.yml @@ -44,7 +44,7 @@ body: Run this command in your project's root folder and paste the result: ```sh - npx envinfo --system --binaries --browsers --npmPackages "next,react,next-auth" && npx envinfo --npmPackages "@next-auth/*" + npx envinfo --system --binaries --browsers --npmPackages "next,react,next-auth,@auth/*" && npx envinfo --npmPackages "@next-auth/*" ``` Alternatively, if the above command did not work, we need the version of the following packages from your package.json: "next", "react", "next-auth" and your adapter. Please also mention your OS and Node.js version, as well as the browser you are using. validations: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 34e91599..919e9390 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -35,21 +35,22 @@ jobs: UPSTASH_REDIS_KEY: ${{ secrets.UPSTASH_REDIS_KEY }} TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_TEAM: ${{ secrets.TURBO_TEAM }} - - name: Run E2E tests - run: pnpm e2e - timeout-minutes: 15 - env: - AUTH0_USERNAME: ${{ secrets.AUTH0_USERNAME }} - AUTH0_PASSWORD: ${{ secrets.AUTH0_PASSWORD }} - TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} - TURBO_TEAM: ${{ secrets.TURBO_TEAM }} - - name: Upload E2E artifacts - uses: actions/upload-artifact@v3 - if: always() - with: - name: playwright-report - path: apps/dev/nextjs/playwright-report/ - retention-days: 30 + # - name: Run E2E tests + # if: github.repository == 'nextauthjs/next-auth' + # run: pnpm e2e + # timeout-minutes: 15 + # env: + # AUTH0_USERNAME: ${{ secrets.AUTH0_USERNAME }} + # AUTH0_PASSWORD: ${{ secrets.AUTH0_PASSWORD }} + # TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + # TURBO_TEAM: ${{ secrets.TURBO_TEAM }} + # - name: Upload E2E artifacts + # if: github.repository == 'nextauthjs/next-auth' + # uses: actions/upload-artifact@v3 + # with: + # name: playwright-report + # path: apps/dev/nextjs/playwright-report/ + # retention-days: 30 # - name: Coverage # uses: codecov/codecov-action@v1 # with: diff --git a/.gitignore b/.gitignore index 8e73647c..1f4e2442 100644 --- a/.gitignore +++ b/.gitignore @@ -40,7 +40,6 @@ packages/*/*.js packages/*/*.d.ts packages/*/*.d.ts.map - # Development app apps/dev/src/css apps/dev/prisma/migrations @@ -80,11 +79,12 @@ docs/.docusaurus docs/providers.json # Core +packages/core/src/providers/oauth-types.ts packages/core/lib packages/core/providers packages/core/src/lib/pages/styles.ts docs/docs/reference/core -docs/docs/reference/04-sveltekit +docs/docs/reference/sveltekit # SvelteKit diff --git a/.prettierignore b/.prettierignore index ff7fc055..fa687a93 100644 --- a/.prettierignore +++ b/.prettierignore @@ -21,7 +21,7 @@ pnpm-lock.yaml .docusaurus build docs/docs/reference/core -docs/docs/reference/04-sveltekit +docs/docs/reference/sveltekit static docs/providers.json diff --git a/apps/dev/nextjs/.env.local.example b/apps/dev/nextjs/.env.local.example index fa6a263d..51b9bc74 100644 --- a/apps/dev/nextjs/.env.local.example +++ b/apps/dev/nextjs/.env.local.example @@ -9,6 +9,10 @@ NEXTAUTH_URL=http://localhost:3000 # and/or verification tokens. NEXTAUTH_SECRET=secret +ASGARDEO_CLIENT_ID= +ASGARDEO_CLIENT_SECRET= +ASGARDEO_ISSUER= + AUTH0_ID= AUTH0_SECRET= AUTH0_ISSUER= @@ -17,6 +21,10 @@ KEYCLOAK_ID= KEYCLOAK_SECRET= KEYCLOAK_ISSUER= +NOTION_ID= +NOTION_SECRET= +NOTION_REDIRECT_URI= + IDS4_ID= IDS4_SECRET= IDS4_ISSUER= diff --git a/apps/dev/nextjs/pages/api/auth/[...nextauth].ts b/apps/dev/nextjs/pages/api/auth/[...nextauth].ts index c0885779..9daba53f 100644 --- a/apps/dev/nextjs/pages/api/auth/[...nextauth].ts +++ b/apps/dev/nextjs/pages/api/auth/[...nextauth].ts @@ -2,6 +2,7 @@ import { Auth, type AuthConfig } from "@auth/core" // Providers import Apple from "@auth/core/providers/apple" +import Asgardeo from "@auth/core/providers/asgardeo" import Auth0 from "@auth/core/providers/auth0" import AzureAD from "@auth/core/providers/azure-ad" import AzureB2C from "@auth/core/providers/azure-ad-b2c" @@ -23,6 +24,7 @@ import Instagram from "@auth/core/providers/instagram" import Line from "@auth/core/providers/line" import LinkedIn from "@auth/core/providers/linkedin" import Mailchimp from "@auth/core/providers/mailchimp" +import Notion from "@auth/core/providers/notion" // import Okta from "@auth/core/providers/okta" import Osu from "@auth/core/providers/osu" import Patreon from "@auth/core/providers/patreon" @@ -68,7 +70,7 @@ import WorkOS from "@auth/core/providers/workos" export const authConfig: AuthConfig = { // adapter, - // debug: process.env.NODE_ENV !== "production", + debug: process.env.NODE_ENV !== "production", theme: { logo: "https://next-auth.js.org/img/logo/logo-sm.png", brandColor: "#1786fb", @@ -82,6 +84,7 @@ export const authConfig: AuthConfig = { }, }), Apple({ clientId: process.env.APPLE_ID, clientSecret: process.env.APPLE_SECRET }), + Asgardeo({ clientId: process.env.ASGARDEO_CLIENT_ID, clientSecret: process.env.ASGARDEO_CLIENT_SECRET, issuer: process.env.ASGARDEO_ISSUER }), Auth0({ clientId: process.env.AUTH0_ID, clientSecret: process.env.AUTH0_SECRET, issuer: process.env.AUTH0_ISSUER }), AzureAD({ clientId: process.env.AZURE_AD_CLIENT_ID, @@ -105,6 +108,7 @@ export const authConfig: AuthConfig = { Line({ clientId: process.env.LINE_ID, clientSecret: process.env.LINE_SECRET }), LinkedIn({ clientId: process.env.LINKEDIN_ID, clientSecret: process.env.LINKEDIN_SECRET }), Mailchimp({ clientId: process.env.MAILCHIMP_ID, clientSecret: process.env.MAILCHIMP_SECRET }), + Notion({ clientId: process.env.NOTION_ID, clientSecret: process.env.NOTION_SECRET, redirectUri: process.env.NOTION_REDIRECT_URI }), // Okta({ clientId: process.env.OKTA_ID, clientSecret: process.env.OKTA_SECRET, issuer: process.env.OKTA_ISSUER }), Osu({ clientId: process.env.OSU_CLIENT_ID, clientSecret: process.env.OSU_CLIENT_SECRET }), Patreon({ clientId: process.env.PATREON_ID, clientSecret: process.env.PATREON_SECRET }), diff --git a/apps/dev/sveltekit/package.json b/apps/dev/sveltekit/package.json index 196eb8c1..921c5aee 100644 --- a/apps/dev/sveltekit/package.json +++ b/apps/dev/sveltekit/package.json @@ -19,8 +19,8 @@ "vite": "4.0.1" }, "dependencies": { - "@auth/core": "0.2.5", - "@auth/sveltekit": "0.1.12" + "@auth/core": "workspace:*", + "@auth/sveltekit": "workspace:*" }, "type": "module" } diff --git a/apps/playgrounds/nuxt/package.json b/apps/playgrounds/nuxt/package.json index 28f07b11..f082b590 100644 --- a/apps/playgrounds/nuxt/package.json +++ b/apps/playgrounds/nuxt/package.json @@ -2,11 +2,10 @@ "name": "playground-nuxt", "private": true, "scripts": { - "build": "nuxt build", - "dev": "export NODE_OPTIONS='--no-experimental-fetch' && nuxt dev", + "build": "nuxt prepare && nuxt build", + "dev": "nuxt prepare && export NODE_OPTIONS='--no-experimental-fetch' && nuxt dev", "generate": "nuxt generate", - "preview": "nuxt preview", - "postinstall": "nuxt prepare" + "preview": "nuxt preview" }, "devDependencies": { "@nuxt/eslint-config": "^0.1.1", diff --git a/docs/docs/getting-started/05-typescript.md b/docs/docs/getting-started/05-typescript.md index e205c870..b78adaa6 100644 --- a/docs/docs/getting-started/05-typescript.md +++ b/docs/docs/getting-started/05-typescript.md @@ -5,7 +5,7 @@ title: TypeScript Auth.js has its own type definitions to use in your TypeScript projects safely. Even if you don't use TypeScript, IDEs like VSCode will pick this up to provide you with a better developer experience. While you are typing, you will get suggestions about what certain objects/functions look like, and sometimes links to documentation, examples, and other valuable resources. Check out the example repository showcasing how to use `next-auth` on a Next.js application with TypeScript: -https://github.com/nextauthjs/next-auth-typescript-example +https://github.com/nextauthjs/next-auth-example --- diff --git a/docs/docs/guides/03-basics/role-based-authentication.md b/docs/docs/guides/03-basics/role-based-authentication.md new file mode 100644 index 00000000..2b5a00c1 --- /dev/null +++ b/docs/docs/guides/03-basics/role-based-authentication.md @@ -0,0 +1,153 @@ +--- +title: Role-based authentication +--- + +There are two ways to add role-based authentication (RBAC) to your application, based on the [session strategy](/concepts/session-strategies) you choose. Let's see an example for each of these. + +## Getting the role + +We are going to start by adding a `profile()` callback to the providers' config to determine the user role: + +```ts title="/pages/api/auth/[...nextauth].ts" +import NextAuth from "next-auth" +import Google from "next-auth/providers/google" + +export default NextAuth({ + providers: [ + Google({ + profile(profile) { + return { role: profile.role ?? "user", ... } + }, + ... + }) + ], +}) +``` + +:::tip +To determine the user's role, you can either add your logic or if your provider assigns roles already, use that instead. +::: + +## Persisting the role +### With JWT + +When you don't have a database configured, the role will be persisted in a cookie, by using the `jwt()` callback. On sign-in, the `role` property is exposed from the `profile` callback on the `user` object. Persist the `user.role` value by assigning it to `token.role`. That's it! + +If you also want to use the role on the client, you can expose it via the `session` callback. + +```ts title="/pages/api/auth/[...nextauth].ts" +import NextAuth from "next-auth" +import Google from "next-auth/providers/google" + +export default NextAuth({ + providers: [ + Google({ + profile(profile) { + return { role: profile.role ?? "user", ... } + }, + ... + }) + ], + // highlight-start + callbacks: { + jwt({ token, user }) { + if(user) token.role = user.role + return token + }, + session({ session, token }) { + session.user.role = token.role + return session + } + } + // highlight-end +}) +``` + +:::info +With this strategy, if you want to update the role, the user needs to be forced to sign in again. +::: + +### With Database + +When you have a database, you can save the user role on the [User model](/reference/adapters/models#user). The below example is showing you how to do this with Prisma, but the idea is the same for all adapters. + +First, add a `role` column to the User model. + +```ts title="/prisma/schema.prisma" +model User { + id String @id @default(cuid()) + name String? + email String? @unique + emailVerified DateTime? + image String? + role String? // New column + accounts Account[] + sessions Session[] +} +``` + +The `profile()` callback's return value is used to create users in the database. That's it! Your newly created users will now have an assigned role. + +If you also want to use the role on the client, you can expose it via the `session` callback. + +```ts title="/pages/api/auth/[...nextauth].ts" +import NextAuth from "next-auth" +import Google from "next-auth/providers/google" + // highlight-next-line +import prisma from "lib/prisma" + +export default NextAuth({ + // highlight-next-line + adapter: PrismaAdapter(prisma), + providers: [ + Google({ + profile(profile) { + return { role: profile.role ?? "user", ... } + } + ... + }) + ], + // highlight-start + callbacks: { + session({ session, user }) { + session.user.role = user.role + return session + } + } + // highlight-end +}) +``` + +:::info +It is up to you how you want to manage to update the roles, either through direct database access or building your role update API. +::: + +## Using the role + +If you want to use the role in the client, for both cases above, when using the `useSession` hook, `session.user.role` will have the required role if you exposed it via the `session` callback. You can use this to render a different UI for different users. + +```ts title="/pages/admin.tsx" +import { useSession } from "next-auth/react" + +export default function Page() { + const session = await useSession() + + if (session?.user.role === "admin") { + return

You are an admin, welcome!

+ } + + return

You are not authorized to view this page!

+} +``` + +:::tip +When using Next.js and JWT, you can alternatively also use [Middleware](https://next-auth.js.org/configuration/nextjs#wrap-middleware) to redirect the user based on their role, even before rendering the page. +::: + +## Resources + +- [Concepts: Session strategies](/concepts/session-strategies) +- [Next.js: Middleware](https://next-auth.js.org/configuration/nextjs#wrap-middleware) +- [Adapters: User model](/reference/adapters/models#user) +- [Adapters: Prisma adapter](/reference/adapters/prisma) +- [TypeScript](/getting-started/typescript) \ No newline at end of file diff --git a/docs/docs/guides/03-basics/role-based-login-strategy.md b/docs/docs/guides/03-basics/role-based-login-strategy.md deleted file mode 100644 index 299909fa..00000000 --- a/docs/docs/guides/03-basics/role-based-login-strategy.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Role based logins ---- - -To add role based authentication to your application, you must do three things. - -1. Update your database schema -2. Add the `role` to the session object -3. Check for `role` in your pages/components - -First modify the `user` table and add a `role` column with the type of `String?`. - -Below is an example Prisma schema file. - -```javascript title="/prisma/schema.prisma" -model User { - id String @id @default(cuid()) - name String? - email String? @unique - emailVerified DateTime? - image String? - role String? // New Column - accounts Account[] - sessions Session[] -} - -``` - -Next, implement a custom session callback in the `[...nextauth].js` file, as shown below. - -```javascript title="/pages/api/auth/[...nextauth].js" -callbacks: { - async session({ session, token, user }) { - session.user.role = user.role; // Add role value to user object so it is passed along with session - return session; -}, -``` - -Going forward, when using the `getSession` hook, check that `session.user.role` matches the required role. The example below assumes the role `'admin'` is required. - -```javascript title="/pages/admin.js" -import { getSession } from "next-auth/react" - -export default function Page() { - const session = await getSession({ req }) - - if (session && session.user.role === "admin") { - return ( -
-

Admin

-

Welcome to the Admin Portal!

-
- ) - } else { - return ( -
-

You are not authorized to view this page!

-
- ) - } -} -``` - -Then it is up to you how you manage your roles, either through direct database access or building your own role update API. diff --git a/docs/docs/reference/04-providers/04-email.md b/docs/docs/reference/04-providers/04-email.md index a4d59c8b..ec8279f7 100644 --- a/docs/docs/reference/04-providers/04-email.md +++ b/docs/docs/reference/04-providers/04-email.md @@ -16,4 +16,4 @@ sidebar_label: Email options See our guides on magic links authentication for further tips on how to customize this provider: - [Tutorial](/getting-started/email-tutorial) -- [Guide deep-dive](guides/providers/email) +- [Guide deep-dive](/guides/providers/email) diff --git a/docs/docs/reference/06-adapters/prisma.md b/docs/docs/reference/06-adapters/prisma.md index 828cb2a0..cafa3574 100644 --- a/docs/docs/reference/06-adapters/prisma.md +++ b/docs/docs/reference/06-adapters/prisma.md @@ -139,9 +139,10 @@ Prisma supports MongoDB, and so does Auth.js. Following the instructions of the id String @id @default(auto()) @map("_id") @db.ObjectId ``` -2. The Native database type attribute to `@db.String` from `@db.Text`. +2. The Native database type attribute to `@db.String` from `@db.Text` and userId to `@db.ObjectId`. ```prisma +user_id String @db.ObjectId refresh_token String? @db.String access_token String? @db.String id_token String? @db.String diff --git a/docs/docs/reference/index.md b/docs/docs/reference/index.md deleted file mode 100644 index 11f2038a..00000000 --- a/docs/docs/reference/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Overview -sidebar_label: Overview -sidebar_position: 0 ---- - -## Core - -## Providers - -- OAuth/OIDC -- Email/Passwordless -- Credentials - -## Database Adapters - -## Frameworks - -- Next.js -- SvelteKit -- SolidStart -- Remix -- Nuxt -- Gatsby -- etc. diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index ba8cfcc1..0ae8e673 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -220,7 +220,7 @@ const docusaurusConfig = { watch: process.env.TYPEDOC_WATCH, entryPoints: ["index.ts", "client.ts"].map((e) => `../packages/frameworks-sveltekit/src/lib/${e}`), tsconfig: "../packages/frameworks-sveltekit/tsconfig.json", - out: "reference/04-sveltekit", + out: "reference/sveltekit", sidebar: { indexLabel: "index", }, diff --git a/docs/sidebars.js b/docs/sidebars.js index 70e4a500..f02bb455 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -14,7 +14,6 @@ module.exports = { }, ], referenceSidebar: [ - "reference/index", { type: "category", label: "@auth/core", @@ -25,7 +24,7 @@ module.exports = { type: "category", label: "@auth/sveltekit", link: { type: "doc", id: "reference/sveltekit/index" }, - items: [{ type: "autogenerated", dirName: "reference/04-sveltekit" }], + items: [{ type: "autogenerated", dirName: "reference/sveltekit" }], }, { type: "category", diff --git a/docs/src/css/index.css b/docs/src/css/index.css index f5f096a4..bb8f5aac 100644 --- a/docs/src/css/index.css +++ b/docs/src/css/index.css @@ -272,27 +272,4 @@ html[data-theme="dark"] #carbonads > span { html[data-theme="dark"] #carbonads .carbon-poweredby { color: #aaa; background: #1e2021; -} - -/* - This is a hack to hide the "Reflection" category and "main" module from the sidebar. - This is because: - 1. opening any page under the "Reflection" category would hide the entire sidebar. - 2. the "main" module would show up twice. - See sidebars.js -*/ -.reflection-category, -.theme-doc-sidebar-item-link-level-2 [href="/reference/core/modules/main"], -.theme-doc-sidebar-item-link-level-2 - [href="/reference/sveltekit/modules/main"] { - display: none; -} - -/* - HACK: to hide the "Classes" header and duplicate items together with the "typedoc-plugin-markdown" patch. - See: https://github.com/TypeStrong/typedoc/issues/2006 -*/ -/* h3.anchor + p:has(code, strong), */ /** hack did not work as it hides property types elsewhere */ -#classes { - display: none; -} +} \ No newline at end of file diff --git a/docs/static/img/providers/asgardeo-dark.svg b/docs/static/img/providers/asgardeo-dark.svg new file mode 100644 index 00000000..18eb0027 --- /dev/null +++ b/docs/static/img/providers/asgardeo-dark.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/static/img/providers/asgardeo.svg b/docs/static/img/providers/asgardeo.svg new file mode 100644 index 00000000..2ff92735 --- /dev/null +++ b/docs/static/img/providers/asgardeo.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/static/img/providers/notion.svg b/docs/static/img/providers/notion.svg new file mode 100644 index 00000000..3b1781b1 --- /dev/null +++ b/docs/static/img/providers/notion.svg @@ -0,0 +1,5 @@ + + Notion icon + + + diff --git a/packages/adapter-dynamodb/package.json b/packages/adapter-dynamodb/package.json index 5b528f69..173c4da8 100644 --- a/packages/adapter-dynamodb/package.json +++ b/packages/adapter-dynamodb/package.json @@ -1,7 +1,7 @@ { "name": "@next-auth/dynamodb-adapter", "repository": "https://github.com/nextauthjs/next-auth", - "version": "1.0.6", + "version": "1.2.0", "description": "AWS DynamoDB adapter for next-auth.", "keywords": [ "next-auth", diff --git a/packages/adapter-firebase/src/getFirebase.ts b/packages/adapter-firebase/src/getFirebase.ts new file mode 100644 index 00000000..b38f67b1 --- /dev/null +++ b/packages/adapter-firebase/src/getFirebase.ts @@ -0,0 +1,11 @@ +import { initializeApp, getApps, FirebaseOptions } from "firebase/app" + +export default function getFirebase(firebaseOptions: FirebaseOptions) { + const apps = getApps() + const app = apps.find((app) => app.name === firebaseOptions.projectId) + if (app) { + return app + } else { + return initializeApp(firebaseOptions) + } +} diff --git a/packages/adapter-xata/package.json b/packages/adapter-xata/package.json index a063f135..e3dd8e5d 100644 --- a/packages/adapter-xata/package.json +++ b/packages/adapter-xata/package.json @@ -1,6 +1,6 @@ { "name": "@next-auth/xata-adapter", - "version": "0.2.0", + "version": "0.2.2", "description": "Xata adapter for next-auth.", "homepage": "https://authjs.dev", "repository": "https://github.com/nextauthjs/next-auth", @@ -43,4 +43,4 @@ "jest": { "preset": "@next-auth/adapter-test/jest" } -} +} \ No newline at end of file diff --git a/packages/core/package.json b/packages/core/package.json index 7d5093a6..0b6392ee 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@auth/core", - "version": "0.2.5", + "version": "0.3.0", "description": "Authentication for the Web.", "keywords": [ "authentication", @@ -69,7 +69,7 @@ "preact-render-to-string": "5.2.3" }, "peerDependencies": { - "nodemailer": "6.8.0" + "nodemailer": "^6.8.0" }, "peerDependenciesMeta": { "nodemailer": { @@ -77,10 +77,11 @@ } }, "scripts": { - "build": "pnpm css && tsc", + "build": "pnpm css && pnpm providers && tsc", "clean": "rm -rf *.js *.d.ts* lib providers", "css": "node scripts/generate-css", - "dev": "pnpm css && tsc -w" + "dev": "pnpm css && pnpm providers && tsc -w", + "providers": "node scripts/generate-providers" }, "devDependencies": { "@next-auth/tsconfig": "workspace:*", diff --git a/packages/core/scripts/generate-providers.js b/packages/core/scripts/generate-providers.js new file mode 100644 index 00000000..f8bef7df --- /dev/null +++ b/packages/core/scripts/generate-providers.js @@ -0,0 +1,18 @@ +import { join } from "path" +import { readdirSync, writeFileSync } from "fs" + +const providersPath = join(process.cwd(), "src/providers") + +const files = readdirSync(providersPath, "utf8") + +const providers = files.map((file) => { + const strippedProviderName = file.substring(0, file.indexOf(".")) + return `"${strippedProviderName}"` +}).filter((provider) => provider !== '"oauth-types"' && provider !== '"index"') + +const result = ` +// THIS FILE IS AUTOGENERATED. DO NOT EDIT. +export type OAuthProviderType = + | ${providers.join("\n | ")}` + +writeFileSync(join(providersPath, "oauth-types.ts"), result) diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index d454126a..fc35ca4f 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -31,14 +31,14 @@ * ## Resources * * - [Getting started](https://authjs.dev/getting-started/introduction) - * - [Most common use case guides](https://authjs.dev/guides/overview) + * - [Most common use case guides](https://authjs.dev/guides) * * @module index */ import { assertConfig } from "./lib/assert.js" import { ErrorPageLoop } from "./errors.js" -import { AuthInternal } from "./lib/index.js" +import { AuthInternal, skipCSRFCheck } from "./lib/index.js" import renderPage from "./lib/pages/index.js" import { logger, setLogger, type LoggerInstance } from "./lib/utils/logger.js" import { toInternalRequest, toResponse } from "./lib/web.js" @@ -55,6 +55,8 @@ import type { import type { Provider } from "./providers/index.js" import { JWTOptions } from "./jwt.js" +export { skipCSRFCheck } + /** * Core functionality provided by Auth.js. * @@ -302,14 +304,3 @@ export interface AuthConfig { trustHost?: boolean skipCSRFCheck?: typeof skipCSRFCheck } - -/** - * :::danger - * This option is inteded for framework authors. - * ::: - * - * Auth.js comes with built-in {@link https://authjs.dev/concepts/security#csrf CSRF} protection, but - * if you are implementing a framework that is already protected against CSRF attacks, you can skip this check by - * passing this value to {@link AuthConfig.skipCSRFCheck}. - */ -export const skipCSRFCheck = Symbol("skip-csrf-check") diff --git a/packages/core/src/lib/index.ts b/packages/core/src/lib/index.ts index 5aab02c4..d4e35836 100644 --- a/packages/core/src/lib/index.ts +++ b/packages/core/src/lib/index.ts @@ -1,5 +1,4 @@ import { UnknownAction } from "../errors.js" -import { skipCSRFCheck } from "../index.js" import { SessionStore } from "./cookie.js" import { init } from "./init.js" import renderPage from "./pages/index.js" @@ -72,9 +71,9 @@ export async function AuthInternal< if (pages.signIn) { let signinUrl = `${pages.signIn}${ pages.signIn.includes("?") ? "&" : "?" - }callbackUrl=${encodeURIComponent(options.callbackUrl)}` + }${new URLSearchParams({ callbackUrl: options.callbackUrl })}` if (error) - signinUrl = `${signinUrl}&error=${encodeURIComponent(error)}` + signinUrl = `${signinUrl}&${new URLSearchParams({ error })}` return { redirect: signinUrl, cookies } } @@ -186,3 +185,14 @@ export async function AuthInternal< } throw new UnknownAction(`Cannot handle action: ${action}`) } + +/** + * :::danger + * This option is intended for framework authors. + * ::: + * + * Auth.js comes with built-in {@link https://authjs.dev/concepts/security#csrf CSRF} protection, but + * if you are implementing a framework that is already protected against CSRF attacks, you can skip this check by + * passing this value to {@link AuthConfig.skipCSRFCheck}. + */ +export const skipCSRFCheck = Symbol("skip-csrf-check") diff --git a/packages/core/src/lib/oauth/authorization-url.ts b/packages/core/src/lib/oauth/authorization-url.ts index 81b8af7f..983cf29f 100644 --- a/packages/core/src/lib/oauth/authorization-url.ts +++ b/packages/core/src/lib/oauth/authorization-url.ts @@ -1,7 +1,7 @@ +import * as checks from "./checks.js" import * as o from "oauth4webapi" import type { - CookiesOptions, InternalOptions, RequestInternal, ResponseInternal, @@ -58,10 +58,10 @@ export async function getAuthorizationUrl( const cookies: Cookie[] = [] - if (provider.checks?.includes("state")) { - const { value, raw } = await createState(options) - authParams.set("state", raw) - cookies.push(value) + const state = await checks.state.create(options) + if (state) { + authParams.set("state", state.value) + cookies.push(state.cookie) } if (provider.checks?.includes("pkce")) { @@ -70,17 +70,17 @@ export async function getAuthorizationUrl( // a random `nonce` must be used for CSRF protection. provider.checks = ["nonce"] } else { - const { code_challenge, pkce } = await createPKCE(options) - authParams.set("code_challenge", code_challenge) + const { value, cookie } = await checks.pkce.create(options) + authParams.set("code_challenge", value) authParams.set("code_challenge_method", "S256") - cookies.push(pkce) + cookies.push(cookie) } } - if (provider.checks?.includes("nonce")) { - const nonce = await createNonce(options) + const nonce = await checks.nonce.create(options) + if (nonce) { authParams.set("nonce", nonce.value) - cookies.push(nonce) + cookies.push(nonce.cookie) } // TODO: This does not work in normalizeOAuth because authorization endpoint can come from discovery @@ -90,54 +90,5 @@ export async function getAuthorizationUrl( } logger.debug("authorization url is ready", { url, cookies, provider }) - return { redirect: url, cookies } -} - -/** Returns a signed cookie. */ -export async function signCookie( - type: keyof CookiesOptions, - value: string, - maxAge: number, - options: InternalOptions<"oauth"> -): Promise { - const { cookies, jwt, logger } = options - - logger.debug(`CREATE_${type.toUpperCase()}`, { value, maxAge }) - - const expires = new Date() - expires.setTime(expires.getTime() + maxAge * 1000) - return { - name: cookies[type].name, - value: await jwt.encode({ ...jwt, maxAge, token: { value } }), - options: { ...cookies[type].options, expires }, - } -} - -const STATE_MAX_AGE = 60 * 15 // 15 minutes in seconds -async function createState(options: InternalOptions<"oauth">) { - const raw = o.generateRandomState() - const maxAge = STATE_MAX_AGE - const value = await signCookie("state", raw, maxAge, options) - return { value, raw } -} - -const PKCE_MAX_AGE = 60 * 15 // 15 minutes in seconds -async function createPKCE(options: InternalOptions<"oauth">) { - const code_verifier = o.generateRandomCodeVerifier() - const code_challenge = await o.calculatePKCECodeChallenge(code_verifier) - const maxAge = PKCE_MAX_AGE - const pkce = await signCookie( - "pkceCodeVerifier", - code_verifier, - maxAge, - options - ) - return { code_challenge, pkce } -} - -const NONCE_MAX_AGE = 60 * 15 // 15 minutes in seconds -async function createNonce(options: InternalOptions<"oauth">) { - const raw = o.generateRandomNonce() - const maxAge = NONCE_MAX_AGE - return await signCookie("nonce", raw, maxAge, options) + return { redirect: url.toString(), cookies } } diff --git a/packages/core/src/lib/oauth/callback.ts b/packages/core/src/lib/oauth/callback.ts index 925560bb..717fabaa 100644 --- a/packages/core/src/lib/oauth/callback.ts +++ b/packages/core/src/lib/oauth/callback.ts @@ -1,8 +1,6 @@ +import * as checks from "./checks.js" import * as o from "oauth4webapi" import { OAuthCallbackError, OAuthProfileParseError } from "../../errors.js" -import { useNonce } from "./nonce-handler.js" -import { usePKCECodeVerifier } from "./pkce-handler.js" -import { useState } from "./state-handler.js" import type { InternalOptions, @@ -73,7 +71,7 @@ export async function handleOAuth( const resCookies: Cookie[] = [] - const state = await useState(cookies, resCookies, options) + const state = await checks.state.use(cookies, resCookies, options) const parameters = o.validateAuthResponse( as, @@ -91,7 +89,7 @@ export async function handleOAuth( throw new OAuthCallbackError(parameters.error) } - const codeVerifier = await usePKCECodeVerifier( + const codeVerifier = await checks.pkce.use( cookies?.[options.cookies.pkceCodeVerifier.name], options ) @@ -99,7 +97,10 @@ export async function handleOAuth( if (codeVerifier) resCookies.push(codeVerifier.cookie) // TODO: - const nonce = await useNonce(cookies?.[options.cookies.nonce.name], options) + const nonce = await checks.nonce.use( + cookies?.[options.cookies.nonce.name], + options + ) if (nonce && provider.type === "oidc") { resCookies.push(nonce.cookie) } @@ -202,7 +203,7 @@ async function getProfile( // If we didn't get a response either there was a problem with the provider // response *or* the user cancelled the action with the provider. // - // Unfortuately, we can't tell which - at least not in a way that works for + // Unfortunately, we can't tell which - at least not in a way that works for // all providers, so we return an empty object; the user should then be // redirected back to the sign up page. We log the error to help developers // who might be trying to debug this when configuring a new provider. diff --git a/packages/core/src/lib/oauth/checks.ts b/packages/core/src/lib/oauth/checks.ts new file mode 100644 index 00000000..d0f336d9 --- /dev/null +++ b/packages/core/src/lib/oauth/checks.ts @@ -0,0 +1,155 @@ +import * as o from "oauth4webapi" +import * as jwt from "../../jwt.js" + +import type { + InternalOptions, + RequestInternal, + CookiesOptions, +} from "../../types.js" +import type { Cookie } from "../cookie.js" + +import { InvalidState } from "../../errors.js" + +/** Returns a signed cookie. */ +export async function signCookie( + type: keyof CookiesOptions, + value: string, + maxAge: number, + options: InternalOptions<"oauth"> +): Promise { + const { cookies, logger } = options + + logger.debug(`CREATE_${type.toUpperCase()}`, { value, maxAge }) + + const expires = new Date() + expires.setTime(expires.getTime() + maxAge * 1000) + return { + name: cookies[type].name, + value: await jwt.encode({ ...options.jwt, maxAge, token: { value } }), + options: { ...cookies[type].options, expires }, + } +} + +const PKCE_MAX_AGE = 60 * 15 // 15 minutes in seconds +export const pkce = { + async create(options: InternalOptions<"oauth">) { + const code_verifier = o.generateRandomCodeVerifier() + const value = await o.calculatePKCECodeChallenge(code_verifier) + const maxAge = PKCE_MAX_AGE + const cookie = await signCookie( + "pkceCodeVerifier", + code_verifier, + maxAge, + options + ) + return { cookie, value } + }, + + /** + * Returns code_verifier if provider uses PKCE, + * and clears the container cookie afterwards. + */ + async use( + codeVerifier: string | undefined, + options: InternalOptions<"oauth"> + ): Promise<{ codeVerifier: string; cookie: Cookie } | undefined> { + const { cookies, provider } = options + + if (!provider?.checks?.includes("pkce") || !codeVerifier) { + return + } + + const pkce = (await jwt.decode({ + ...options.jwt, + token: codeVerifier, + })) as any + + return { + codeVerifier: pkce?.value ?? undefined, + cookie: { + name: cookies.pkceCodeVerifier.name, + value: "", + options: { ...cookies.pkceCodeVerifier.options, maxAge: 0 }, + }, + } + }, +} + +const STATE_MAX_AGE = 60 * 15 // 15 minutes in seconds +export const state = { + async create(options: InternalOptions<"oauth">) { + if (!options.provider.checks.includes("state")) return + // TODO: support customizing the state + const value = o.generateRandomState() + const maxAge = STATE_MAX_AGE + const cookie = await signCookie("state", value, maxAge, options) + return { cookie, value } + }, + /** + * Returns state from the saved cookie + * if the provider supports states, + * and clears the container cookie afterwards. + */ + async use( + cookies: RequestInternal["cookies"], + resCookies: Cookie[], + options: InternalOptions<"oauth"> + ): Promise { + const { provider, jwt } = options + if (!provider.checks.includes("state")) return + + const state = cookies?.[options.cookies.state.name] + + if (!state) throw new InvalidState("State was missing from the cookies.") + + // IDEA: Let the user do something with the returned state + const value = (await jwt.decode({ ...options.jwt, token: state })) as any + + if (!value?.value) throw new InvalidState("Could not parse state cookie.") + + // Clear the state cookie after use + resCookies.push({ + name: options.cookies.state.name, + value: "", + options: { ...options.cookies.state.options, maxAge: 0 }, + }) + + return value.value + }, +} + +const NONCE_MAX_AGE = 60 * 15 // 15 minutes in seconds +export const nonce = { + async create(options: InternalOptions<"oauth">) { + if (!options.provider.checks.includes("nonce")) return + const value = o.generateRandomNonce() + const maxAge = NONCE_MAX_AGE + const cookie = await signCookie("nonce", value, maxAge, options) + return { cookie, value } + }, + /** + * Returns nonce from if the provider supports nonce, + * and clears the container cookie afterwards. + */ + async use( + nonce: string | undefined, + options: InternalOptions<"oauth"> + ): Promise<{ value: string; cookie: Cookie } | undefined> { + const { cookies, provider } = options + + if (!provider?.checks?.includes("nonce") || !nonce) { + return + } + + const value = (await jwt.decode({ ...options.jwt, token: nonce })) as any + + return { + value: value?.value ?? undefined, + cookie: { + name: cookies.nonce.name, + value: "", + options: { ...cookies.nonce.options, maxAge: 0 }, + }, + } + }, +} diff --git a/packages/core/src/lib/oauth/nonce-handler.ts b/packages/core/src/lib/oauth/nonce-handler.ts deleted file mode 100644 index 6f4dc77a..00000000 --- a/packages/core/src/lib/oauth/nonce-handler.ts +++ /dev/null @@ -1,77 +0,0 @@ -import * as o from "oauth4webapi" -import * as jwt from "../../jwt.js" - -import type { InternalOptions } from "../../types.js" -import type { Cookie } from "../cookie.js" - -const NONCE_MAX_AGE = 60 * 15 // 15 minutes in seconds - -/** - * Returns nonce if the provider supports it - * and saves it in a cookie - */ -export async function createNonce(options: InternalOptions<"oauth">): Promise< - | undefined - | { - value: string - cookie: Cookie - } -> { - const { cookies, logger, provider } = options - if (!provider.checks?.includes("nonce")) { - // Provider does not support nonce, return nothing. - return - } - - const nonce = o.generateRandomNonce() - - const expires = new Date() - expires.setTime(expires.getTime() + NONCE_MAX_AGE * 1000) - - // Encrypt nonce and save it to an encrypted cookie - const encryptedNonce = await jwt.encode({ - ...options.jwt, - maxAge: NONCE_MAX_AGE, - token: { nonce }, - }) - - logger.debug("CREATE_ENCRYPTED_NONCE", { - nonce, - maxAge: NONCE_MAX_AGE, - }) - - return { - cookie: { - name: cookies.nonce.name, - value: encryptedNonce, - options: { ...cookies.nonce.options, expires }, - }, - value: nonce, - } -} - -/** - * Returns nonce from if the provider supports nonce, - * and clears the container cookie afterwards. - */ -export async function useNonce( - nonce: string | undefined, - options: InternalOptions<"oauth"> -): Promise<{ value: string; cookie: Cookie } | undefined> { - const { cookies, provider } = options - - if (!provider?.checks?.includes("nonce") || !nonce) { - return - } - - const value = (await jwt.decode({ ...options.jwt, token: nonce })) as any - - return { - value: value?.value ?? undefined, - cookie: { - name: cookies.nonce.name, - value: "", - options: { ...cookies.nonce.options, maxAge: 0 }, - }, - } -} diff --git a/packages/core/src/lib/oauth/pkce-handler.ts b/packages/core/src/lib/oauth/pkce-handler.ts deleted file mode 100644 index 6aa6fcda..00000000 --- a/packages/core/src/lib/oauth/pkce-handler.ts +++ /dev/null @@ -1,87 +0,0 @@ -import * as o from "oauth4webapi" -import * as jwt from "../../jwt.js" - -import type { InternalOptions } from "../../types.js" -import type { Cookie } from "../cookie.js" - -const PKCE_CODE_CHALLENGE_METHOD = "S256" -const PKCE_MAX_AGE = 60 * 15 // 15 minutes in seconds - -/** - * Returns `code_challenge` and `code_challenge_method` - * and saves them in a cookie. - */ -export async function createPKCE(options: InternalOptions<"oauth">): Promise< - | undefined - | { - code_challenge: string - code_challenge_method: "S256" - cookie: Cookie - } -> { - const { cookies, logger, provider } = options - if (!provider.checks?.includes("pkce")) { - // Provider does not support PKCE, return nothing. - return - } - const code_verifier = o.generateRandomCodeVerifier() - const code_challenge = await o.calculatePKCECodeChallenge(code_verifier) - - const maxAge = cookies.pkceCodeVerifier.options.maxAge ?? PKCE_MAX_AGE - - const expires = new Date() - expires.setTime(expires.getTime() + maxAge * 1000) - - // Encrypt code_verifier and save it to an encrypted cookie - const encryptedCodeVerifier = await jwt.encode({ - ...options.jwt, - maxAge, - token: { code_verifier }, - }) - - logger.debug("CREATE_PKCE_CHALLENGE_VERIFIER", { - code_challenge, - code_challenge_method: PKCE_CODE_CHALLENGE_METHOD, - code_verifier, - maxAge, - }) - - return { - code_challenge, - code_challenge_method: PKCE_CODE_CHALLENGE_METHOD, - cookie: { - name: cookies.pkceCodeVerifier.name, - value: encryptedCodeVerifier, - options: { ...cookies.pkceCodeVerifier.options, expires }, - }, - } -} - -/** - * Returns code_verifier if provider uses PKCE, - * and clears the container cookie afterwards. - */ -export async function usePKCECodeVerifier( - codeVerifier: string | undefined, - options: InternalOptions<"oauth"> -): Promise<{ codeVerifier: string; cookie: Cookie } | undefined> { - const { cookies, provider } = options - - if (!provider?.checks?.includes("pkce") || !codeVerifier) { - return - } - - const pkce = (await jwt.decode({ - ...options.jwt, - token: codeVerifier, - })) as any - - return { - codeVerifier: pkce?.value ?? undefined, - cookie: { - name: cookies.pkceCodeVerifier.name, - value: "", - options: { ...cookies.pkceCodeVerifier.options, maxAge: 0 }, - }, - } -} diff --git a/packages/core/src/lib/oauth/state-handler.ts b/packages/core/src/lib/oauth/state-handler.ts deleted file mode 100644 index 1655e151..00000000 --- a/packages/core/src/lib/oauth/state-handler.ts +++ /dev/null @@ -1,72 +0,0 @@ -import * as o from "oauth4webapi" -import type { InternalOptions, RequestInternal } from "../../types.js" -import type { Cookie } from "../cookie.js" -import { InvalidState } from "../../errors.js" - -const STATE_MAX_AGE = 60 * 15 // 15 minutes in seconds - -/** Returns state if the provider supports it */ -export async function createState( - options: InternalOptions<"oauth"> -): Promise<{ cookie: Cookie; value: string } | undefined> { - const { logger, provider, jwt, cookies } = options - - if (!provider.checks?.includes("state")) { - // Provider does not support state, return nothing - return - } - - const state = o.generateRandomState() - const maxAge = cookies.state.options.maxAge ?? STATE_MAX_AGE - - const encodedState = await jwt.encode({ - ...jwt, - maxAge, - token: { state }, - }) - - logger.debug("CREATE_STATE", { state, maxAge }) - - const expires = new Date() - expires.setTime(expires.getTime() + maxAge * 1000) - return { - value: state, - cookie: { - name: cookies.state.name, - value: encodedState, - options: { ...cookies.state.options, expires }, - }, - } -} - -/** - * Returns state from the saved cookie - * if the provider supports states, - * and clears the container cookie afterwards. - */ -export async function useState( - cookies: RequestInternal["cookies"], - resCookies: Cookie[], - options: InternalOptions<"oauth"> -): Promise { - const { provider, jwt } = options - if (!provider.checks.includes("state")) return - - const state = cookies?.[options.cookies.state.name] - - if (!state) throw new InvalidState("State was missing from the cookies.") - - // IDEA: Let the user do something with the returned state - const value = (await jwt.decode({ ...options.jwt, token: state })) as any - - if (!value?.value) throw new InvalidState("Could not parse state cookie.") - - // Clear the state cookie after use - resCookies.push({ - name: options.cookies.state.name, - value: "", - options: { ...options.cookies.state.options, maxAge: 0 }, - }) - - return value.value -} diff --git a/packages/core/src/lib/routes/callback.ts b/packages/core/src/lib/routes/callback.ts index 35e33be5..8c683674 100644 --- a/packages/core/src/lib/routes/callback.ts +++ b/packages/core/src/lib/routes/callback.ts @@ -53,7 +53,7 @@ export async function callback(params: { cookies.push(...authorizationResult.cookies) } - logger.debug("authroization result", authorizationResult) + logger.debug("authorization result", authorizationResult) const { profile, account, OAuthProfile } = authorizationResult @@ -149,7 +149,7 @@ export async function callback(params: { return { redirect: `${pages.newUser}${ pages.newUser.includes("?") ? "&" : "?" - }callbackUrl=${encodeURIComponent(callbackUrl)}`, + }${new URLSearchParams({ callbackUrl })}`, cookies, } } @@ -256,7 +256,7 @@ export async function callback(params: { return { redirect: `${pages.newUser}${ pages.newUser.includes("?") ? "&" : "?" - }callbackUrl=${encodeURIComponent(callbackUrl)}`, + }${new URLSearchParams({ callbackUrl })}`, cookies, } } @@ -350,6 +350,6 @@ export async function callback(params: { logger.error(error) url.searchParams.set("error", CallbackRouteError.name) url.pathname += "/error" - return { redirect: url, cookies } + return { redirect: url.toString(), cookies } } } diff --git a/packages/core/src/lib/routes/shared.ts b/packages/core/src/lib/routes/shared.ts index 217dd5f4..9706aa21 100644 --- a/packages/core/src/lib/routes/shared.ts +++ b/packages/core/src/lib/routes/shared.ts @@ -7,19 +7,20 @@ export async function handleAuthorized( params: any, { url, logger, callbacks: { signIn } }: InternalOptions ) { - url.pathname += "/error" try { const authorized = await signIn(params) if (!authorized) { + url.pathname += "/error" logger.debug("User not authorized", params) url.searchParams.set("error", "AccessDenied") - return { status: 403 as const, redirect: url } + return { status: 403 as const, redirect: url.toString() } } } catch (e) { + url.pathname += "/error" const error = new AuthorizedCallbackError(e as Error) logger.error(error) url.searchParams.set("error", "Configuration") - return { status: 500 as const, redirect: url } + return { status: 500 as const, redirect: url.toString() } } } diff --git a/packages/core/src/lib/routes/signin.ts b/packages/core/src/lib/routes/signin.ts index dcc63fb6..3cdd190c 100644 --- a/packages/core/src/lib/routes/signin.ts +++ b/packages/core/src/lib/routes/signin.ts @@ -54,7 +54,7 @@ export async function signin( logger.error(error) url.searchParams.set("error", error.name) url.pathname += "/error" - return { redirect: url } + return { redirect: url.toString() } } } diff --git a/packages/core/src/lib/routes/signout.ts b/packages/core/src/lib/routes/signout.ts index 867d6ba6..4a566eeb 100644 --- a/packages/core/src/lib/routes/signout.ts +++ b/packages/core/src/lib/routes/signout.ts @@ -8,7 +8,7 @@ import type { SessionStore } from "../cookie.js" * If the session strategy is database, * The session is also deleted from the database. * In any case, the session cookie is cleared and - * an `events.signOut` is emitted. + * {@link EventCallbacks.signOut} is emitted. */ export async function signout( sessionStore: SessionStore, diff --git a/packages/core/src/lib/web.ts b/packages/core/src/lib/web.ts index 4c3395bf..fc1a782f 100644 --- a/packages/core/src/lib/web.ts +++ b/packages/core/src/lib/web.ts @@ -76,27 +76,22 @@ export function toResponse(res: ResponseInternal): Response { res.cookies?.forEach((cookie) => { const { name, value, options } = cookie const cookieHeader = serialize(name, value, options) - if (headers.has("Set-Cookie")) { - headers.append("Set-Cookie", cookieHeader) - } else { - headers.set("Set-Cookie", cookieHeader) - } + if (headers.has("Set-Cookie")) headers.append("Set-Cookie", cookieHeader) + else headers.set("Set-Cookie", cookieHeader) // headers.set("Set-Cookie", cookieHeader) // TODO: Remove. Seems to be a bug with Headers in the runtime }) - const body = - headers.get("content-type") === "application/json" - ? JSON.stringify(res.body) - : res.body + let body = res.body - const response = new Response(body, { - headers, - status: res.redirect ? 302 : res.status ?? 200, - }) + if (headers.get("content-type") === "application/json") + body = JSON.stringify(res.body) + else if (headers.get("content-type") === "application/x-www-form-urlencoded") + body = new URLSearchParams(res.body).toString() - if (res.redirect) { - response.headers.set("Location", res.redirect.toString()) - } + const status = res.redirect ? 302 : res.status ?? 200 + const response = new Response(body, { headers, status }) + + if (res.redirect) response.headers.set("Location", res.redirect) return response } diff --git a/packages/core/src/providers/asgardeo.ts b/packages/core/src/providers/asgardeo.ts new file mode 100644 index 00000000..d640a845 --- /dev/null +++ b/packages/core/src/providers/asgardeo.ts @@ -0,0 +1,112 @@ +/** + *
+ * Built-in Asgardeo integration. + * + * + * + *
+ * + * --- + * @module providers/asgardeo + */ + +import type { OIDCConfig, OIDCUserConfig } from "./index.js" + +export interface AsgardeoProfile { + sub: string + given_name: string + email: string + picture: string +} + +/** + * Add Asgardeo login to your page. + * ## Documentation + * + * https://wso2.com/asgardeo/docs/guides/authentication + * + * + * ## Instructions + * + * - Log into https://console.asgardeo.io. + * - Next, go to "Application" tab (More info: https://wso2.com/asgardeo/docs/guides/applications/register-oidc-web-app/). + * - Register standard based - Open id connect, application. + * - Add callback URL: http://localhost:3000/api/auth/callback/asgardeo and https://your-domain.com/api/auth/callback/asgardeo + * - After registering the application, go to protocol tab. + * - Check `code` grant type. + * - Add Authorized redirect URLs & Allowed origins fields. + * - Make Email, First Name, Photo URL user attributes mandatory from the console. + * + * Create a `.env` file in the project root add the following entries: + * + * These values can be collected from the application created. + * + * ``` + * ASGARDEO_CLIENT_ID= + * ASGARDEO_CLIENT_SECRET= + * ASGARDEO_ISSUER= + * ``` + * + * In `pages/api/auth/[...nextauth].js` find or add the `Asgardeo` entries: + * + * ```js + * import Asgardeo from "next-auth/providers/asgardeo"; + * ... + * providers: [ + * Asgardeo({ + * clientId: process.env.ASGARDEO_CLIENT_ID, + * clientSecret: process.env.ASGARDEO_CLIENT_SECRET, + * issuer: process.env.ASGARDEO_ISSUER + * }), + * ], + * + * ... + * ``` + * + * ## Resources + * + * @see [Asgardeo - Authentication Guide](https://wso2.com/asgardeo/docs/guides/authentication) + * @see [Learn more about OAuth](https://authjs.dev/concepts/oauth) + * @see [Source code](https://github.com/nextauthjs/next-auth/blob/main/packages/core/src/providers/asgardeo.ts) + * + * ## Notes + * + * By default, Auth.js assumes that the Asgardeo provider is + * based on the [OAuth 2](https://www.rfc-editor.org/rfc/rfc6749.html) specification. + * + * :::tip + * + * The Asgardeo provider comes with a [default configuration](https://github.com/nextauthjs/next-auth/blob/main/packages/core/src/providers/asgardeo.ts). + * To override the defaults for your use case, check out [customizing a built-in OAuth provider](https://authjs.dev/guides/providers/custom-provider#override-default-options). + * + * ::: + * + * :::info **Disclaimer** + * + * If you think you found a bug in the default configuration, you can [open an issue](https://authjs.dev/new/provider-issue). + * + * Auth.js strictly adheres to the specification and it cannot take responsibility for any deviation from + * the spec by the provider. You can open an issue, but if the problem is non-compliance with the spec, + * we might not pursue a resolution. You can ask for more help in [Discussions](https://authjs.dev/new/github-discussions). + * + * ::: + */ +export default function Asgardeo( + config: OIDCUserConfig +): OIDCConfig { + return { + id: "asgardeo", + name: "Asgardeo", + type: "oidc", + wellKnown: `${config?.issuer}/oauth2/token/.well-known/openid-configuration`, + style: { + logo: "/asgardeo.svg", + logoDark: "/asgardeo-dark.svg", + bg: "#fff", + text: "#000", + bgDark: "#000", + textDark: "#fff", + }, + options: config, + } +} diff --git a/packages/core/src/providers/azure-ad.ts b/packages/core/src/providers/azure-ad.ts index 39e85faa..3e991b92 100644 --- a/packages/core/src/providers/azure-ad.ts +++ b/packages/core/src/providers/azure-ad.ts @@ -34,22 +34,21 @@ export default function AzureAD

( ) // Confirm that profile photo was returned - if (response.ok) { - const pictureBuffer = await response.arrayBuffer() - const pictureBase64 = Buffer.from(pictureBuffer).toString("base64") - return { - id: profile.sub, - name: profile.name, - email: profile.email, - image: `data:image/jpeg;base64, ${pictureBase64}`, - } - } else { - return { - id: profile.sub, - name: profile.name, - email: profile.email, - image: null, - } + let image + // TODO: Do this without Buffer + if (response.ok && typeof Buffer !== "undefined") { + try { + const pictureBuffer = await response.arrayBuffer() + const pictureBase64 = Buffer.from(pictureBuffer).toString("base64") + image = `data:image/jpeg;base64, ${pictureBase64}` + } catch {} + } + + return { + id: profile.sub, + name: profile.name, + email: profile.email, + image: image ?? null, } }, style: { diff --git a/packages/core/src/providers/credentials.ts b/packages/core/src/providers/credentials.ts index d8e71ad9..095678b9 100644 --- a/packages/core/src/providers/credentials.ts +++ b/packages/core/src/providers/credentials.ts @@ -49,10 +49,6 @@ export interface CredentialsConfig< export type CredentialsProviderType = "Credentials" -export type CredentialsConfigInternal< - C extends Record = Record -> = CredentialsConfig & { options: CredentialsConfig } - /** * The Credentials provider allows you to handle signing in with arbitrary credentials, * such as a username and password, domain, or two factor authentication or hardware device (e.g. YubiKey U2F / FIDO). diff --git a/packages/core/src/providers/discord.ts b/packages/core/src/providers/discord.ts index f2b11961..f4d504cd 100644 --- a/packages/core/src/providers/discord.ts +++ b/packages/core/src/providers/discord.ts @@ -1,21 +1,77 @@ import type { OAuthConfig, OAuthUserConfig } from "./index.js" +/** + * Corresponds to the user structure documented here: + * https://discord.com/developers/docs/resources/user#user-object-user-structure + */ export interface DiscordProfile extends Record { - accent_color: number - avatar: string - banner: string - banner_color: string - discriminator: string - email: string - flags: number + /** the user's id (i.e. the numerical snowflake) */ id: string - image_url: string - locale: string - mfa_enabled: boolean - premium_type: number - public_flags: number + /** the user's username, not unique across the platform */ username: string + /** the user's 4-digit discord-tag */ + discriminator: string + /** + * the user's avatar hash: + * https://discord.com/developers/docs/reference#image-formatting + */ + avatar: string | null + /** whether the user belongs to an OAuth2 application */ + bot?: boolean + /** + * whether the user is an Official Discord System user (part of the urgent + * message system) + */ + system?: boolean + /** whether the user has two factor enabled on their account */ + mfa_enabled: boolean + /** + * the user's banner hash: + * https://discord.com/developers/docs/reference#image-formatting + */ + banner: string | null + + /** the user's banner color encoded as an integer representation of hexadecimal color code */ + accent_color: number | null + + /** + * the user's chosen language option: + * https://discord.com/developers/docs/reference#locales + */ + locale: string + /** whether the email on this account has been verified */ verified: boolean + /** the user's email */ + email: string | null + /** + * the flags on a user's account: + * https://discord.com/developers/docs/resources/user#user-object-user-flags + */ + flags: number + /** + * the type of Nitro subscription on a user's account: + * https://discord.com/developers/docs/resources/user#user-object-premium-types + */ + premium_type: number + /** + * the public flags on a user's account: + * https://discord.com/developers/docs/resources/user#user-object-user-flags + */ + public_flags: number + /** undocumented field; corresponds to the user's custom nickname */ + display_name: string | null + /** + * undocumented field; corresponds to the Discord feature where you can e.g. + * put your avatar inside of an ice cube + */ + avatar_decoration: string | null + /** + * undocumented field; corresponds to the premium feature where you can + * select a custom banner color + */ + banner_color: string | null + /** undocumented field; the CDN URL of their profile picture */ + image_url: string } export default function Discord

( diff --git a/packages/core/src/providers/index.ts b/packages/core/src/providers/index.ts index ffa3819b..91da0513 100644 --- a/packages/core/src/providers/index.ts +++ b/packages/core/src/providers/index.ts @@ -65,12 +65,16 @@ export type Provider

= ( | EmailConfig | CredentialsConfig ) & { + /** + * Used to deep merge user-provided config with the default config + * @internal + */ options: Record } export type BuiltInProviders = Record< OAuthProviderType, - (options: Partial>) => OAuthConfig + (config: Partial>) => OAuthConfig > & Record & Record diff --git a/packages/core/src/providers/notion.ts b/packages/core/src/providers/notion.ts new file mode 100644 index 00000000..6d728aa7 --- /dev/null +++ b/packages/core/src/providers/notion.ts @@ -0,0 +1,166 @@ +/** + *

+ * Built-in Notion integration. + * + * + * + *
+ * + * --- + * @module providers/notion + */ + +import type { OAuthConfig, OAuthUserConfig } from "." + +export interface Person extends Record { + email: string +} + +// https://developers.notion.com/reference/user +export interface User extends Record { + object: "user" | "bot" + id: string + type: string + name: string + avatar_url: null | string + person: Person + owner?: { + type: "workspace" | "user" + workspace: string + } + workspace_name?: string | null +} + +export interface Owner { + type: string + user: User +} + +// Notion responds with an access_token + some additional information, which we define here +// More info - https://developers.notion.com/docs/authorization#step-4-notion-responds-with-an-access_token-and-some-additional-information +export interface NotionProfile extends Record { + access_token: string + bot_id: string + duplicated_template_id: string + owner?: Owner + workspace_icon: string + workspace_id: number + workspace_name: string +} + +// Any config required that isn't part of the `OAuthUserConfig` spec should belong here +// For example, we must pass a `redirectUri` to the Notion API when requesting tokens, therefore we add it here +interface AdditionalConfig { + redirectUri: string +} + +const NOTION_HOST = "https://api.notion.com" +const NOTION_API_VERSION = "2022-06-28" + +/** + * Add Notion login to your page. + * + * ## Example + * + * ```ts + * import { Auth } from "@auth/core" + * import Notion from "@auth/core/providers/notion" + * + * const request = new Request("https://example.com") + * const response = await Auth(request, { + * providers: [Notion({ clientId: "", clientSecret: "", redirectUri: "" })], + * }) + * ``` + * + * --- + * + * ## Resources + * - [Notion Docs](https://developers.notion.com/docs) + * - [Notion Authorization Docs](https://developers.notion.com/docs/authorization) + * - [Notion Integrations](https://www.notion.so/my-integrations) + * + * --- + * + * ## Notes + * You need to select "Public Integration" on the configuration page to get an `oauth_id` and `oauth_secret`. Private integrations do not provide these details. + * You must provide a `clientId` and `clientSecret` to use this provider, as-well as a redirect URI (due to this being required by Notion endpoint to fetch tokens). + * + * :::tip + * + * The Notion provider comes with a [default configuration](https://github.com/nextauthjs/next-auth/blob/main/packages/core/src/providers/notion.ts). + * To override the defaults for your use case, check out [customizing a built-in OAuth provider](https://authjs.dev/guides/providers/custom-provider#override-default-options). + * + * ::: + * + * :::info **Disclaimer** + * + * If you think you found a bug in the default configuration, you can [open an issue](https://authjs.dev/new/provider-issue). + * + * Auth.js strictly adheres to the specification and it cannot take responsibility for any deviation from + * the spec by the provider. You can open an issue, but if the problem is non-compliance with the spec, + * we might not pursue a resolution. You can ask for more help in [Discussions](https://authjs.dev/new/github-discussions). + * + * ::: + */ +export default function NotionProvider

( + options: OAuthUserConfig

& AdditionalConfig +): OAuthConfig

{ + return { + id: "notion", + name: "Notion", + type: "oauth", + token: { + url: `${NOTION_HOST}/v1/oauth/token`, + }, + userinfo: { + url: `${NOTION_HOST}/v1/users`, + + // The result of this method will be the input to the `profile` callback. + // We use a custom request handler, since we need to do things such as pass the "Notion-Version" header + // More info: https://next-auth.js.org/configuration/providers/oauth + async request(context) { + const profile = await fetch(`${NOTION_HOST}/v1/users/me`, { + headers: { + Authorization: `Bearer ${context.tokens.access_token}`, + "Notion-Version": NOTION_API_VERSION, + }, + }) + + const { + bot: { + owner: { user }, + }, + } = await profile.json() + + return user + }, + }, + authorization: { + params: { + client_id: options.clientId, + response_type: "code", + owner: "user", + redirect_uri: options.redirectUri, + }, + url: `${NOTION_HOST}/v1/oauth/authorize`, + }, + + async profile(profile, tokens) { + return { + id: profile.id, + name: profile.name, + email: profile.person.email, + image: profile.avatar_url, + } + }, + style: { + logo: "/notion.svg", + logoDark: "/notion.svg", + bg: "#fff", + text: "#000", + bgDark: "#fff", + textDark: "#000", + }, + options, + } +} diff --git a/packages/core/src/providers/oauth-types.ts b/packages/core/src/providers/oauth-types.ts deleted file mode 100644 index 66c75b2f..00000000 --- a/packages/core/src/providers/oauth-types.ts +++ /dev/null @@ -1,69 +0,0 @@ -// THIS FILE IS AUTOGENERATED. DO NOT EDIT. -export type OAuthProviderType = - | "42-school" - | "apple" - | "atlassian" - | "auth0" - | "authentik" - | "azure-ad-b2c" - | "azure-ad" - | "battlenet" - | "box" - | "boxyhq-saml" - | "bungie" - | "cognito" - | "coinbase" - | "credentials" - | "discord" - | "dropbox" - | "duende-identity-server6" - | "email" - | "eveonline" - | "facebook" - | "faceit" - | "foursquare" - | "freshbooks" - | "fusionauth" - | "github" - | "gitlab" - | "google" - | "hubspot" - | "identity-server4" - | "index" - | "instagram" - | "kakao" - | "keycloak" - | "line" - | "linkedin" - | "mailchimp" - | "mailru" - | "medium" - | "naver" - | "netlify" - | "oauth-types.js" - | "oauth" - | "okta" - | "onelogin" - | "osso" - | "osu" - | "patreon" - | "pinterest" - | "pipedrive" - | "reddit" - | "salesforce" - | "slack" - | "spotify" - | "strava" - | "todoist" - | "trakt" - | "twitch" - | "twitter" - | "united-effects" - | "vk" - | "wikimedia" - | "wordpress" - | "workos" - | "yandex" - | "zitadel" - | "zoho" - | "zoom" diff --git a/packages/core/src/providers/oauth.ts b/packages/core/src/providers/oauth.ts index 82aa8840..87edda7f 100644 --- a/packages/core/src/providers/oauth.ts +++ b/packages/core/src/providers/oauth.ts @@ -66,7 +66,7 @@ export type TokenEndpointHandler = EndpointHandler< params: CallbackParamsType /** * When using this custom flow, make sure to do all the necessary security checks. - * Thist object contains parameters you have to match against the request to make sure it is valid. + * This object contains parameters you have to match against the request to make sure it is valid. */ checks: OAuthChecks }, diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index dd37d09e..9e4f0f12 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -203,7 +203,7 @@ export interface CallbacksOptions

{ * Its content is forwarded to the `session` callback, * where you can control what should be returned to the client. * Anything else will be kept inaccessible from the client. - * + * * Returning `null` will invalidate the JWT session by clearing * the user's cookies. You'll still have to monitor and invalidate * unexpired tokens from future requests yourself to prevent @@ -220,7 +220,7 @@ export interface CallbacksOptions

{ account?: A | null profile?: P isNewUser?: boolean - }) => Awaitable + }) => Awaitable } /** [Documentation](https://authjs.dev/reference/configuration/auth-config#cookies) */ @@ -452,7 +452,7 @@ export interface ResponseInternal< status?: number headers?: Headers | HeadersInit body?: Body - redirect?: URL | string + redirect?: string cookies?: Cookie[] } diff --git a/packages/frameworks-sveltekit/package.json b/packages/frameworks-sveltekit/package.json index 22a8dafa..e8c5edb5 100644 --- a/packages/frameworks-sveltekit/package.json +++ b/packages/frameworks-sveltekit/package.json @@ -1,6 +1,6 @@ { "name": "@auth/sveltekit", - "version": "0.1.12", + "version": "0.2.0", "description": "Authentication for SvelteKit.", "keywords": [ "authentication", @@ -69,4 +69,4 @@ }, "./package.json": "./package.json" } -} +} \ No newline at end of file diff --git a/packages/frameworks-sveltekit/scripts/postbuild.js b/packages/frameworks-sveltekit/scripts/postbuild.js index 9c22dd0a..980a64c9 100644 --- a/packages/frameworks-sveltekit/scripts/postbuild.js +++ b/packages/frameworks-sveltekit/scripts/postbuild.js @@ -1,8 +1,16 @@ // After build, copy the files in ./package to the root directory, excluding the package.json file. + import fs from "fs/promises" import path from "path" -const __dirname = path.dirname(new URL(import.meta.url).pathname) +let __dirname = path.dirname(new URL(import.meta.url).pathname) + +// The above hack to polyfill "__dirname" for ESM does not work on Windows computers, +// so we might have to manually perform more steps. +__dirname = __dirname.split(path.sep).join(path.posix.sep) +if (__dirname.match(/^\/\w:\//)) { + __dirname = __dirname.slice(3) // Remove the drive prefix. +} const root = path.join(__dirname, "..") const pkgDir = path.join(root, "package") diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1aec0dd5..a5f416de 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -107,8 +107,8 @@ importers: apps/dev/sveltekit: specifiers: - '@auth/core': 0.2.5 - '@auth/sveltekit': 0.1.12 + '@auth/core': workspace:* + '@auth/sveltekit': workspace:* '@sveltejs/adapter-auto': next '@sveltejs/kit': next svelte: 3.55.0 @@ -136,7 +136,7 @@ importers: vercel: ^23.1.2 dependencies: dotenv: 16.0.3 - gatsby: 5.6.0-next.2_biqbaboplfbrettd7655fr4n2y + gatsby: 5.7.0-next.0_biqbaboplfbrettd7655fr4n2y next-auth: link:../../../packages/next-auth react: 18.2.0 react-dom: 18.2.0_react@18.2.0 @@ -841,10 +841,10 @@ packages: graphql: '*' dependencies: '@babel/core': 7.20.12 - '@babel/generator': 7.20.7 - '@babel/parser': 7.20.7 - '@babel/runtime': 7.20.7 - '@babel/traverse': 7.20.12 + '@babel/generator': 7.20.14 + '@babel/parser': 7.20.15 + '@babel/runtime': 7.20.13 + '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 babel-preset-fbjs: 3.4.0_@babel+core@7.20.12 chalk: 4.1.2 @@ -1564,7 +1564,7 @@ packages: '@types/node-fetch': 2.6.2 '@types/tunnel': 0.0.3 form-data: 4.0.0 - node-fetch: 2.6.7 + node-fetch: 2.6.9 process: 0.11.10 tough-cookie: 4.0.0 tslib: 2.4.1 @@ -1699,7 +1699,7 @@ packages: '@azure/core-auth': 1.3.2 abort-controller: 3.0.0 form-data: 2.5.1 - node-fetch: 2.6.7 + node-fetch: 2.6.9 tough-cookie: 3.0.1 tslib: 1.14.1 tunnel: 0.0.6 @@ -1813,12 +1813,12 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.7 + '@babel/generator': 7.20.14 '@babel/helper-module-transforms': 7.20.11 '@babel/helpers': 7.20.7 - '@babel/parser': 7.20.7 + '@babel/parser': 7.20.15 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.12 + '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 convert-source-map: 1.8.0 debug: 4.3.4 @@ -1861,13 +1861,13 @@ packages: dependencies: '@ampproject/remapping': 2.2.0 '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.7 + '@babel/generator': 7.20.14 '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 '@babel/helper-module-transforms': 7.20.11 '@babel/helpers': 7.20.7 - '@babel/parser': 7.20.7 + '@babel/parser': 7.20.15 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.12 + '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 convert-source-map: 1.8.0 debug: 4.3.4 @@ -1883,13 +1883,13 @@ packages: dependencies: '@ampproject/remapping': 2.2.0 '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.7 + '@babel/generator': 7.20.14 '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.2 '@babel/helper-module-transforms': 7.20.11 '@babel/helpers': 7.20.7 - '@babel/parser': 7.20.7 + '@babel/parser': 7.20.15 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.12 + '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 convert-source-map: 1.8.0 debug: 4.3.4 @@ -1946,6 +1946,14 @@ packages: jsesc: 2.5.2 dev: true + /@babel/generator/7.20.14: + resolution: {integrity: sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.7 + '@jridgewell/gen-mapping': 0.3.2 + jsesc: 2.5.2 + /@babel/generator/7.20.3: resolution: {integrity: sha512-Wl5ilw2UD1+ZYprHVprxHZJCFeBWlzZYOovE4SDYLZnqCOD11j+0QzNeEWKLLTWM7nixrZEh7vNIyb76MyJg3A==} engines: {node: '>=6.9.0'} @@ -2267,7 +2275,7 @@ packages: '@babel/helper-compilation-targets': 7.20.7 '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 - '@babel/traverse': 7.20.12 + '@babel/traverse': 7.20.13 debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.1 @@ -2285,7 +2293,7 @@ packages: '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.18.5 '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 - '@babel/traverse': 7.20.12 + '@babel/traverse': 7.20.13 debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.1 @@ -2423,7 +2431,7 @@ packages: '@babel/helper-split-export-declaration': 7.18.6 '@babel/helper-validator-identifier': 7.19.1 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.12 + '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color @@ -2510,7 +2518,7 @@ packages: '@babel/helper-member-expression-to-functions': 7.20.7 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.12 + '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color @@ -2556,7 +2564,7 @@ packages: dependencies: '@babel/helper-function-name': 7.19.0 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.12 + '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color @@ -2568,7 +2576,7 @@ packages: dependencies: '@babel/helper-function-name': 7.19.0 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.12 + '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color @@ -2578,7 +2586,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.20.7 - '@babel/traverse': 7.20.12 + '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color @@ -2589,7 +2597,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.20.7 - '@babel/traverse': 7.20.12 + '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color @@ -2610,6 +2618,13 @@ packages: '@babel/types': 7.20.7 dev: true + /@babel/parser/7.20.15: + resolution: {integrity: sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.20.7 + /@babel/parser/7.20.7: resolution: {integrity: sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==} engines: {node: '>=6.0.0'} @@ -7133,11 +7148,18 @@ packages: regenerator-runtime: 0.13.11 dev: true + /@babel/runtime/7.20.13: + resolution: {integrity: sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.11 + /@babel/runtime/7.20.7: resolution: {integrity: sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 + dev: true /@babel/standalone/7.20.12: resolution: {integrity: sha512-hK/X+m1il3w1tYS4H8LDaGCEdiT47SVqEXY8RiEAgou26BystipSU8ZL6EvBR6t5l7lTv0ilBiChXWblKJ5iUA==} @@ -7167,7 +7189,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/parser': 7.20.7 + '@babel/parser': 7.20.15 '@babel/types': 7.20.7 /@babel/traverse/7.18.5: @@ -7193,12 +7215,12 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.7 + '@babel/generator': 7.20.14 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.20.7 + '@babel/parser': 7.20.15 '@babel/types': 7.20.7 debug: 4.3.4 globals: 11.12.0 @@ -7211,12 +7233,30 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.7 + '@babel/generator': 7.20.14 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.20.7 + '@babel/parser': 7.20.15 + '@babel/types': 7.20.7 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/traverse/7.20.13: + resolution: {integrity: sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.20.14 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.19.0 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/parser': 7.20.15 '@babel/types': 7.20.7 debug: 4.3.4 globals: 11.12.0 @@ -7277,8 +7317,8 @@ packages: resolution: {integrity: sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==} dev: false - /@builder.io/partytown/0.7.4: - resolution: {integrity: sha512-dcZBPNQiHbMhvDGmdWRFNe75Z/XYmeZ2bubYmC5BeQpF09ObbPcbSqIP2NaNOFonKlWLfsE6u1790o9ZmlfpIw==} + /@builder.io/partytown/0.7.5: + resolution: {integrity: sha512-Zbr2Eo0AQ4yzmQr/36/h+6LKjmdVBB3Q5cGzO6rtlIKB/IOpbQVUZW+XAnhpJmJr9sIF97OZjgbhG9k7Sjn4yw==} hasBin: true dev: false @@ -7448,9 +7488,9 @@ packages: resolution: {integrity: sha512-mAAwCo4n66TMWBH1kXnHVZsakW9VAXJzTO4yZukuL3ro4F+JtkMwKfh42EG75K/J/YIFQG5I/Bzy0UH/hFxaTg==} engines: {node: '>=16.14'} dependencies: - cssnano-preset-advanced: 5.3.8_postcss@8.4.20 - postcss: 8.4.20 - postcss-sort-media-queries: 4.2.1_postcss@8.4.20 + cssnano-preset-advanced: 5.3.8_postcss@8.4.21 + postcss: 8.4.21 + postcss-sort-media-queries: 4.2.1_postcss@8.4.21 tslib: 2.4.1 dev: true @@ -7482,8 +7522,8 @@ packages: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 dependencies: - '@babel/parser': 7.20.7 - '@babel/traverse': 7.20.12 + '@babel/parser': 7.20.15 + '@babel/traverse': 7.20.13 '@docusaurus/logger': 2.2.0 '@docusaurus/utils': 2.2.0_@docusaurus+types@2.2.0 '@mdx-js/mdx': 1.6.22 @@ -8470,20 +8510,20 @@ packages: dev: true optional: true - /@gatsbyjs/parcel-namer-relative-to-cwd/2.6.0-next.0_@parcel+core@2.8.2: - resolution: {integrity: sha512-YAEMsZhRG59bs9Ps3TKh/jxQ2ysnHU7+eVEEq/gssh2o+og//WTiR7KldR6xFEWQWMmmYQThAGyuJe/sN9hVNA==} + /@gatsbyjs/parcel-namer-relative-to-cwd/2.7.0-next.0_@parcel+core@2.8.3: + resolution: {integrity: sha512-9Zg4XkxOgsOUWgrc7RmsietgvH6wesildPtpdT2Z9R45Q05i6OcgBUhX+qQoniQJzci8IEBM2vSkU9E8x6E74Q==} engines: {node: '>=18.0.0', parcel: 2.x} dependencies: - '@babel/runtime': 7.20.7 - '@parcel/namer-default': 2.8.2_@parcel+core@2.8.2 - '@parcel/plugin': 2.8.2_@parcel+core@2.8.2 - gatsby-core-utils: 4.6.0-next.0 + '@babel/runtime': 7.20.13 + '@parcel/namer-default': 2.8.3_@parcel+core@2.8.3 + '@parcel/plugin': 2.8.3_@parcel+core@2.8.3 + gatsby-core-utils: 4.7.0-next.0 transitivePeerDependencies: - '@parcel/core' dev: false - /@gatsbyjs/reach-router/2.0.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-n5nifEBtQCo4Wc/ErBvFEGyX5y8dKPSERre3pmuizkJl9J4l0M0bhu6aMc4uOXhG66UR4jgVDjN2Q2I2FSrVkw==} + /@gatsbyjs/reach-router/2.0.1_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-gmSZniS9/phwgEgpFARMpNg21PkYDZEpfgEzvkgpE/iku4uvXqCrxr86fXbTpI9mkrhKS1SCTYmLGe60VdHcdQ==} peerDependencies: react: 18.x react-dom: 18.x @@ -8624,8 +8664,8 @@ packages: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: '@graphql-codegen/plugin-helpers': 3.1.2_graphql@16.6.0 - '@graphql-tools/schema': 9.0.12_graphql@16.6.0 - '@graphql-tools/utils': 9.1.3_graphql@16.6.0 + '@graphql-tools/schema': 9.0.15_graphql@16.6.0 + '@graphql-tools/utils': 9.2.0_graphql@16.6.0 graphql: 16.6.0 tslib: 2.4.1 dev: false @@ -8649,7 +8689,7 @@ packages: peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-tools/utils': 9.1.3_graphql@16.6.0 + '@graphql-tools/utils': 9.2.0_graphql@16.6.0 change-case-all: 1.0.15 common-tags: 1.8.2 graphql: 16.6.0 @@ -8664,7 +8704,7 @@ packages: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: '@graphql-codegen/plugin-helpers': 3.1.2_graphql@16.6.0 - '@graphql-tools/utils': 9.1.3_graphql@16.6.0 + '@graphql-tools/utils': 9.2.0_graphql@16.6.0 graphql: 16.6.0 tslib: 2.4.1 dev: false @@ -8709,7 +8749,7 @@ packages: '@graphql-codegen/plugin-helpers': 3.1.2_graphql@16.6.0 '@graphql-tools/optimize': 1.3.1_graphql@16.6.0 '@graphql-tools/relay-operation-optimizer': 6.5.14_graphql@16.6.0 - '@graphql-tools/utils': 9.1.3_graphql@16.6.0 + '@graphql-tools/utils': 9.2.0_graphql@16.6.0 auto-bind: 4.0.0 change-case-all: 1.0.15 dependency-graph: 0.11.0 @@ -8722,13 +8762,13 @@ packages: - supports-color dev: false - /@graphql-tools/code-file-loader/7.3.15_hooseksvfyhf37tjwfseq7c3kq: - resolution: {integrity: sha512-cF8VNc/NANTyVSIK8BkD/KSXRF64DvvomuJ0evia7tJu4uGTXgDjimTMWsTjKRGOOBSTEbL6TA8e4DdIYq6Udw==} + /@graphql-tools/code-file-loader/7.3.18_hooseksvfyhf37tjwfseq7c3kq: + resolution: {integrity: sha512-DK0YjsJWKkLF6HQYuuqiDwMr9rwRojm8yR/T+J8vXCOR4ndYa1EvUm9wRHPhxHVOYeptO2u+APoWNEhuMN9Hbw==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/graphql-tag-pluck': 7.4.2_hooseksvfyhf37tjwfseq7c3kq - '@graphql-tools/utils': 9.1.3_graphql@16.6.0 + '@graphql-tools/graphql-tag-pluck': 7.4.4_hooseksvfyhf37tjwfseq7c3kq + '@graphql-tools/utils': 9.2.0_graphql@16.6.0 globby: 11.1.0 graphql: 16.6.0 tslib: 2.4.1 @@ -8738,16 +8778,16 @@ packages: - supports-color dev: false - /@graphql-tools/graphql-tag-pluck/7.4.2_hooseksvfyhf37tjwfseq7c3kq: - resolution: {integrity: sha512-SXM1wR5TExrxocQTxZK5r74jTbg8GxSYLY3mOPCREGz6Fu7PNxMxfguUzGUAB43Mf44Dn8oVztzd2eitv2Qgww==} + /@graphql-tools/graphql-tag-pluck/7.4.4_hooseksvfyhf37tjwfseq7c3kq: + resolution: {integrity: sha512-yHIEcapR/kVSrn4W4Nf3FYpJKPcoGvJbdbye8TnW3dD5GkG4UqVnKuyqFvQPOhgqXKbloFZqUhNqEuyqxqIPRw==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@babel/parser': 7.20.7 + '@babel/parser': 7.20.15 '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.20.12 - '@babel/traverse': 7.20.12 + '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 - '@graphql-tools/utils': 9.1.3_graphql@16.6.0 + '@graphql-tools/utils': 9.2.0_graphql@16.6.0 graphql: 16.6.0 tslib: 2.4.1 transitivePeerDependencies: @@ -8755,24 +8795,24 @@ packages: - supports-color dev: false - /@graphql-tools/load/7.8.8_graphql@16.6.0: - resolution: {integrity: sha512-gMuQdO2jXmI0BNUc1MafxRQTWVMUtuH500pZAQtOdDdNJppV7lJdY6mMhITQ2qnhYDuMrcZPHhIkcftyQfkgUg==} + /@graphql-tools/load/7.8.11_graphql@16.6.0: + resolution: {integrity: sha512-pVn3fYP/qZ3m2NE86gSexyZpEmvTSUe+OIRfWBM60a4L/SycMxgVfYB5+PyDCzruFZg/didIG3v7RfPlZ7zNTQ==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/schema': 9.0.12_graphql@16.6.0 - '@graphql-tools/utils': 9.1.3_graphql@16.6.0 + '@graphql-tools/schema': 9.0.15_graphql@16.6.0 + '@graphql-tools/utils': 9.2.0_graphql@16.6.0 graphql: 16.6.0 p-limit: 3.1.0 tslib: 2.4.1 dev: false - /@graphql-tools/merge/8.3.14_graphql@16.6.0: - resolution: {integrity: sha512-zV0MU1DnxJLIB0wpL4N3u21agEiYFsjm6DI130jqHpwF0pR9HkF+Ni65BNfts4zQelP0GjkHltG+opaozAJ1NA==} + /@graphql-tools/merge/8.3.17_graphql@16.6.0: + resolution: {integrity: sha512-CLzz49lc6BavPhH9gPRm0sJeNA7kC/tF/jLUTQsyef6xj82Jw3rqIJ9PE+bk1cqPCOG01WLOfquBu445OMDO2g==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 9.1.3_graphql@16.6.0 + '@graphql-tools/utils': 9.2.0_graphql@16.6.0 graphql: 16.6.0 tslib: 2.4.1 dev: false @@ -8800,16 +8840,16 @@ packages: - supports-color dev: false - /@graphql-tools/schema/9.0.12_graphql@16.6.0: - resolution: {integrity: sha512-DmezcEltQai0V1y96nwm0Kg11FDS/INEFekD4nnVgzBqawvznWqK6D6bujn+cw6kivoIr3Uq//QmU/hBlBzUlQ==} + /@graphql-tools/schema/9.0.15_graphql@16.6.0: + resolution: {integrity: sha512-p2DbpkOBcsi+yCEjwoS+r4pJ5z+3JjlJdhbPkCwC4q8lGf5r93dVYrExOrqGKTU5kxLXI/mxabSxcunjNIsDIg==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/merge': 8.3.14_graphql@16.6.0 - '@graphql-tools/utils': 9.1.3_graphql@16.6.0 + '@graphql-tools/merge': 8.3.17_graphql@16.6.0 + '@graphql-tools/utils': 9.2.0_graphql@16.6.0 graphql: 16.6.0 tslib: 2.4.1 - value-or-promise: 1.0.11 + value-or-promise: 1.0.12 dev: false /@graphql-tools/utils/8.13.1_graphql@16.6.0: @@ -8830,6 +8870,24 @@ packages: tslib: 2.4.1 dev: false + /@graphql-tools/utils/9.2.0_graphql@16.6.0: + resolution: {integrity: sha512-s3lEG1iYkyYEnKCWrIFECX3XH2wmZvbg6Ir3udCvIDynq+ydaO7JQXobclpPtwSJtjlS353haF//6V7mnBQ4bg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-typed-document-node/core': 3.1.1_graphql@16.6.0 + graphql: 16.6.0 + tslib: 2.4.1 + dev: false + + /@graphql-typed-document-node/core/3.1.1_graphql@16.6.0: + resolution: {integrity: sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + graphql: 16.6.0 + dev: false + /@grpc/grpc-js/1.7.3: resolution: {integrity: sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==} engines: {node: ^8.13.0 || >=10.10.0} @@ -9462,7 +9520,7 @@ packages: istanbul-reports: 3.1.4 jest-message-util: 29.2.1 jest-util: 29.2.1 - jest-worker: 29.3.0 + jest-worker: 29.3.1 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 @@ -10624,67 +10682,67 @@ packages: resolution: {integrity: sha512-MSAs9t3Go7GUkMhpKC44T58DJ5KGk2vBo+h1cqQeqlMfdGkxaVB78ZWpv9gYi/g2fa4sopag9gJsNvS8XGgWJA==} dev: false - /@parcel/bundler-default/2.8.2_@parcel+core@2.8.2: - resolution: {integrity: sha512-/7ao0vc/v8WGHZaS1SyS5R8wzqmmXEr9mhIIB2cbLQ4LA2WUtKsYcvZ2gjJuiAAN1CHC6GxqwYjIJScQCk/QXg==} - engines: {node: '>= 12.0.0', parcel: ^2.8.2} + /@parcel/bundler-default/2.8.3_@parcel+core@2.8.3: + resolution: {integrity: sha512-yJvRsNWWu5fVydsWk3O2L4yIy3UZiKWO2cPDukGOIWMgp/Vbpp+2Ct5IygVRtE22bnseW/E/oe0PV3d2IkEJGg==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} dependencies: - '@parcel/diagnostic': 2.8.2 - '@parcel/graph': 2.8.2 - '@parcel/hash': 2.8.2 - '@parcel/plugin': 2.8.2_@parcel+core@2.8.2 - '@parcel/utils': 2.8.2 + '@parcel/diagnostic': 2.8.3 + '@parcel/graph': 2.8.3 + '@parcel/hash': 2.8.3 + '@parcel/plugin': 2.8.3_@parcel+core@2.8.3 + '@parcel/utils': 2.8.3 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' dev: false - /@parcel/cache/2.8.2_@parcel+core@2.8.2: - resolution: {integrity: sha512-kiyoOgh1RXp5qp+wlb8Pi/Z7o9D82Oj5RlHnKSAauyR7jgnI8Vq8JTeBmlLqrf+kHxcDcp2p86hidSeANhlQNg==} + /@parcel/cache/2.8.3_@parcel+core@2.8.3: + resolution: {integrity: sha512-k7xv5vSQrJLdXuglo+Hv3yF4BCSs1tQ/8Vbd6CHTkOhf7LcGg6CPtLw053R/KdMpd/4GPn0QrAsOLdATm1ELtQ==} engines: {node: '>= 12.0.0'} peerDependencies: - '@parcel/core': ^2.8.2 + '@parcel/core': ^2.8.3 dependencies: - '@parcel/core': 2.8.2 - '@parcel/fs': 2.8.2_@parcel+core@2.8.2 - '@parcel/logger': 2.8.2 - '@parcel/utils': 2.8.2 + '@parcel/core': 2.8.3 + '@parcel/fs': 2.8.3_@parcel+core@2.8.3 + '@parcel/logger': 2.8.3 + '@parcel/utils': 2.8.3 lmdb: 2.5.2 dev: false - /@parcel/codeframe/2.8.2: - resolution: {integrity: sha512-U2GT9gq1Zs3Gr83j8JIs10bLbGOHFl57Y8D57nrdR05F4iilV/UR6K7jkhdoiFc9WiHh3ewvrko5+pSdAVFPgQ==} + /@parcel/codeframe/2.8.3: + resolution: {integrity: sha512-FE7sY53D6n/+2Pgg6M9iuEC6F5fvmyBkRE4d9VdnOoxhTXtkEqpqYgX7RJ12FAQwNlxKq4suBJQMgQHMF2Kjeg==} engines: {node: '>= 12.0.0'} dependencies: chalk: 4.1.2 dev: false - /@parcel/compressor-raw/2.8.2_@parcel+core@2.8.2: - resolution: {integrity: sha512-EFPTer/P+3axifH6LtYHS3E6ABgdZnjZomJZ/Nl19lypZh/NgZzmMZlINlEVqyYhCggoKfXzgeTgkIHPN2d5Vw==} - engines: {node: '>= 12.0.0', parcel: ^2.8.2} + /@parcel/compressor-raw/2.8.3_@parcel+core@2.8.3: + resolution: {integrity: sha512-bVDsqleBUxRdKMakWSlWC9ZjOcqDKE60BE+Gh3JSN6WJrycJ02P5wxjTVF4CStNP/G7X17U+nkENxSlMG77ySg==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} dependencies: - '@parcel/plugin': 2.8.2_@parcel+core@2.8.2 + '@parcel/plugin': 2.8.3_@parcel+core@2.8.3 transitivePeerDependencies: - '@parcel/core' dev: false - /@parcel/core/2.8.2: - resolution: {integrity: sha512-ZGuq6p+Lzx6fgufaVsuOBwgpU3hgskTvIDIMdIDi9gOZyhGPK7U2srXdX+VYUL5ZSGbX04/P6QlB9FMAXK+nEg==} + /@parcel/core/2.8.3: + resolution: {integrity: sha512-Euf/un4ZAiClnlUXqPB9phQlKbveU+2CotZv7m7i+qkgvFn5nAGnrV4h1OzQU42j9dpgOxWi7AttUDMrvkbhCQ==} engines: {node: '>= 12.0.0'} dependencies: '@mischnic/json-sourcemap': 0.1.0 - '@parcel/cache': 2.8.2_@parcel+core@2.8.2 - '@parcel/diagnostic': 2.8.2 - '@parcel/events': 2.8.2 - '@parcel/fs': 2.8.2_@parcel+core@2.8.2 - '@parcel/graph': 2.8.2 - '@parcel/hash': 2.8.2 - '@parcel/logger': 2.8.2 - '@parcel/package-manager': 2.8.2_@parcel+core@2.8.2 - '@parcel/plugin': 2.8.2_@parcel+core@2.8.2 + '@parcel/cache': 2.8.3_@parcel+core@2.8.3 + '@parcel/diagnostic': 2.8.3 + '@parcel/events': 2.8.3 + '@parcel/fs': 2.8.3_@parcel+core@2.8.3 + '@parcel/graph': 2.8.3 + '@parcel/hash': 2.8.3 + '@parcel/logger': 2.8.3 + '@parcel/package-manager': 2.8.3_@parcel+core@2.8.3 + '@parcel/plugin': 2.8.3_@parcel+core@2.8.3 '@parcel/source-map': 2.1.1 - '@parcel/types': 2.8.2_@parcel+core@2.8.2 - '@parcel/utils': 2.8.2 - '@parcel/workers': 2.8.2_@parcel+core@2.8.2 + '@parcel/types': 2.8.3_@parcel+core@2.8.3 + '@parcel/utils': 2.8.3 + '@parcel/workers': 2.8.3_@parcel+core@2.8.3 abortcontroller-polyfill: 1.7.5 base-x: 3.0.9 browserslist: 4.21.4 @@ -10697,180 +10755,180 @@ packages: semver: 5.7.1 dev: false - /@parcel/diagnostic/2.8.2: - resolution: {integrity: sha512-tGSMwM2rSYLjJW0fCd9gb3tNjfCX/83PZ10/5u2E33UZVkk8OIHsQmsrtq2H2g4oQL3rFxkfEx6nGPDGHwlx7A==} + /@parcel/diagnostic/2.8.3: + resolution: {integrity: sha512-u7wSzuMhLGWZjVNYJZq/SOViS3uFG0xwIcqXw12w54Uozd6BH8JlhVtVyAsq9kqnn7YFkw6pXHqAo5Tzh4FqsQ==} engines: {node: '>= 12.0.0'} dependencies: '@mischnic/json-sourcemap': 0.1.0 nullthrows: 1.1.1 dev: false - /@parcel/events/2.8.2: - resolution: {integrity: sha512-o5etrsKm16y8iRPnjtEBNy4lD0WAigD66yt/RZl9Rx0vPVDly/63Rr9+BrXWVW7bJ7x0S0VVpWW4j3f/qZOsXg==} + /@parcel/events/2.8.3: + resolution: {integrity: sha512-hoIS4tAxWp8FJk3628bsgKxEvR7bq2scCVYHSqZ4fTi/s0+VymEATrRCUqf+12e5H47uw1/ZjoqrGtBI02pz4w==} engines: {node: '>= 12.0.0'} dev: false - /@parcel/fs-search/2.8.2: - resolution: {integrity: sha512-ovQnupRm/MoE/tbgH0Ivknk0QYenXAewjcog+T5umDmUlTmnIRZjURrgDf5Xtw8T/CD5Xv+HmIXpJ9Ez/LzJpw==} + /@parcel/fs-search/2.8.3: + resolution: {integrity: sha512-DJBT2N8knfN7Na6PP2mett3spQLTqxFrvl0gv+TJRp61T8Ljc4VuUTb0hqBj+belaASIp3Q+e8+SgaFQu7wLiQ==} engines: {node: '>= 12.0.0'} dependencies: detect-libc: 1.0.3 dev: false - /@parcel/fs/2.8.2_@parcel+core@2.8.2: - resolution: {integrity: sha512-aN8znbMndSqn1xwZEmMblzqmJsxcExv2jKLl/a9RUHAP7LaPYcPZIykDL3YwGCiKTCzjmRpXnNoyosjFFeBaHA==} + /@parcel/fs/2.8.3_@parcel+core@2.8.3: + resolution: {integrity: sha512-y+i+oXbT7lP0e0pJZi/YSm1vg0LDsbycFuHZIL80pNwdEppUAtibfJZCp606B7HOjMAlNZOBo48e3hPG3d8jgQ==} engines: {node: '>= 12.0.0'} peerDependencies: - '@parcel/core': ^2.8.2 + '@parcel/core': ^2.8.3 dependencies: - '@parcel/core': 2.8.2 - '@parcel/fs-search': 2.8.2 - '@parcel/types': 2.8.2_@parcel+core@2.8.2 - '@parcel/utils': 2.8.2 + '@parcel/core': 2.8.3 + '@parcel/fs-search': 2.8.3 + '@parcel/types': 2.8.3_@parcel+core@2.8.3 + '@parcel/utils': 2.8.3 '@parcel/watcher': 2.1.0 - '@parcel/workers': 2.8.2_@parcel+core@2.8.2 + '@parcel/workers': 2.8.3_@parcel+core@2.8.3 dev: false - /@parcel/graph/2.8.2: - resolution: {integrity: sha512-SLEvBQBgfkXgU4EBu30+CNanpuKjcNuEv/x8SwobCF0i3Rk+QKbe7T36bNR7727mao++2Ha69q93Dd9dTPw0kQ==} + /@parcel/graph/2.8.3: + resolution: {integrity: sha512-26GL8fYZPdsRhSXCZ0ZWliloK6DHlMJPWh6Z+3VVZ5mnDSbYg/rRKWmrkhnr99ZWmL9rJsv4G74ZwvDEXTMPBg==} engines: {node: '>= 12.0.0'} dependencies: nullthrows: 1.1.1 dev: false - /@parcel/hash/2.8.2: - resolution: {integrity: sha512-NBnP8Hu0xvAqAfZXRaMM66i8nJyxpKS86BbhwkbgTGbwO1OY87GERliHeREJfcER0E0ZzwNow7MNR8ZDm6IvJQ==} + /@parcel/hash/2.8.3: + resolution: {integrity: sha512-FVItqzjWmnyP4ZsVgX+G00+6U2IzOvqDtdwQIWisCcVoXJFCqZJDy6oa2qDDFz96xCCCynjRjPdQx2jYBCpfYw==} engines: {node: '>= 12.0.0'} dependencies: detect-libc: 1.0.3 xxhash-wasm: 0.4.2 dev: false - /@parcel/logger/2.8.2: - resolution: {integrity: sha512-zlhK6QHxfFJMlVJxxcCw0xxBDrYPFPOhMxSD6p6b0z9Yct1l3NdpmfabgjKX8wnZmHokFsil6daleM+M80n2Ew==} + /@parcel/logger/2.8.3: + resolution: {integrity: sha512-Kpxd3O/Vs7nYJIzkdmB6Bvp3l/85ydIxaZaPfGSGTYOfaffSOTkhcW9l6WemsxUrlts4za6CaEWcc4DOvaMOPA==} engines: {node: '>= 12.0.0'} dependencies: - '@parcel/diagnostic': 2.8.2 - '@parcel/events': 2.8.2 + '@parcel/diagnostic': 2.8.3 + '@parcel/events': 2.8.3 dev: false - /@parcel/markdown-ansi/2.8.2: - resolution: {integrity: sha512-5y29TXgRgG0ybuXaDsDk4Aofg/nDUeAAyVl9/toYCDDhxpQV4yZt8WNPu4PaNYKGLuNgXwsmz+ryZQHGmfbAIQ==} + /@parcel/markdown-ansi/2.8.3: + resolution: {integrity: sha512-4v+pjyoh9f5zuU/gJlNvNFGEAb6J90sOBwpKJYJhdWXLZMNFCVzSigxrYO+vCsi8G4rl6/B2c0LcwIMjGPHmFQ==} engines: {node: '>= 12.0.0'} dependencies: chalk: 4.1.2 dev: false - /@parcel/namer-default/2.8.2_@parcel+core@2.8.2: - resolution: {integrity: sha512-sMLW/bDWXA6IE7TQKOsBnA5agZGNvZ9qIXKZEUTsTloUjMdAWI8NYA1s0i9HovnGxI5uGlgevrftK4S5V4AdkA==} - engines: {node: '>= 12.0.0', parcel: ^2.8.2} + /@parcel/namer-default/2.8.3_@parcel+core@2.8.3: + resolution: {integrity: sha512-tJ7JehZviS5QwnxbARd8Uh63rkikZdZs1QOyivUhEvhN+DddSAVEdQLHGPzkl3YRk0tjFhbqo+Jci7TpezuAMw==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} dependencies: - '@parcel/diagnostic': 2.8.2 - '@parcel/plugin': 2.8.2_@parcel+core@2.8.2 + '@parcel/diagnostic': 2.8.3 + '@parcel/plugin': 2.8.3_@parcel+core@2.8.3 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' dev: false - /@parcel/node-resolver-core/2.8.2: - resolution: {integrity: sha512-D/NJEz/h/C3RmUOWSTg0cLwG3uRVHY9PL+3YGO/c8tKu8PlS2j55XtntdiVfwkK+P6avLCnrJnv/gwTa79dOPw==} + /@parcel/node-resolver-core/2.8.3: + resolution: {integrity: sha512-12YryWcA5Iw2WNoEVr/t2HDjYR1iEzbjEcxfh1vaVDdZ020PiGw67g5hyIE/tsnG7SRJ0xdRx1fQ2hDgED+0Ww==} engines: {node: '>= 12.0.0'} dependencies: - '@parcel/diagnostic': 2.8.2 - '@parcel/utils': 2.8.2 + '@parcel/diagnostic': 2.8.3 + '@parcel/utils': 2.8.3 nullthrows: 1.1.1 semver: 5.7.1 dev: false - /@parcel/optimizer-terser/2.8.2_@parcel+core@2.8.2: - resolution: {integrity: sha512-jFAOh9WaO6oNc8B9qDsCWzNkH7nYlpvaPn0w3ZzpMDi0HWD+w+xgO737rWLJWZapqUDSOs0Q/hDFEZ82/z0yxA==} - engines: {node: '>= 12.0.0', parcel: ^2.8.2} + /@parcel/optimizer-terser/2.8.3_@parcel+core@2.8.3: + resolution: {integrity: sha512-9EeQlN6zIeUWwzrzu6Q2pQSaYsYGah8MtiQ/hog9KEPlYTP60hBv/+utDyYEHSQhL7y5ym08tPX5GzBvwAD/dA==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} dependencies: - '@parcel/diagnostic': 2.8.2 - '@parcel/plugin': 2.8.2_@parcel+core@2.8.2 + '@parcel/diagnostic': 2.8.3 + '@parcel/plugin': 2.8.3_@parcel+core@2.8.3 '@parcel/source-map': 2.1.1 - '@parcel/utils': 2.8.2 + '@parcel/utils': 2.8.3 nullthrows: 1.1.1 terser: 5.16.1 transitivePeerDependencies: - '@parcel/core' dev: false - /@parcel/package-manager/2.8.2_@parcel+core@2.8.2: - resolution: {integrity: sha512-hx4Imi0yhsSS0aNZkEANPYNNKqBuR63EUNWSxMyHh4ZOvbHoOXnMn1ySGdx6v0oi9HvKymNsLMQ1T5CuI4l4Bw==} + /@parcel/package-manager/2.8.3_@parcel+core@2.8.3: + resolution: {integrity: sha512-tIpY5pD2lH53p9hpi++GsODy6V3khSTX4pLEGuMpeSYbHthnOViobqIlFLsjni+QA1pfc8NNNIQwSNdGjYflVA==} engines: {node: '>= 12.0.0'} peerDependencies: - '@parcel/core': ^2.8.2 + '@parcel/core': ^2.8.3 dependencies: - '@parcel/core': 2.8.2 - '@parcel/diagnostic': 2.8.2 - '@parcel/fs': 2.8.2_@parcel+core@2.8.2 - '@parcel/logger': 2.8.2 - '@parcel/types': 2.8.2_@parcel+core@2.8.2 - '@parcel/utils': 2.8.2 - '@parcel/workers': 2.8.2_@parcel+core@2.8.2 + '@parcel/core': 2.8.3 + '@parcel/diagnostic': 2.8.3 + '@parcel/fs': 2.8.3_@parcel+core@2.8.3 + '@parcel/logger': 2.8.3 + '@parcel/types': 2.8.3_@parcel+core@2.8.3 + '@parcel/utils': 2.8.3 + '@parcel/workers': 2.8.3_@parcel+core@2.8.3 semver: 5.7.1 dev: false - /@parcel/packager-js/2.8.2_@parcel+core@2.8.2: - resolution: {integrity: sha512-48LtHP4lJn8J1aBeD4Ix/YjsRxrBUkzbx7czdUeRh2PlCqY4wwIhciVlEFipj/ANr3ieSX44lXyVPk/ttnSdrw==} - engines: {node: '>= 12.0.0', parcel: ^2.8.2} + /@parcel/packager-js/2.8.3_@parcel+core@2.8.3: + resolution: {integrity: sha512-0pGKC3Ax5vFuxuZCRB+nBucRfFRz4ioie19BbDxYnvBxrd4M3FIu45njf6zbBYsI9eXqaDnL1b3DcZJfYqtIzw==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} dependencies: - '@parcel/diagnostic': 2.8.2 - '@parcel/hash': 2.8.2 - '@parcel/plugin': 2.8.2_@parcel+core@2.8.2 + '@parcel/diagnostic': 2.8.3 + '@parcel/hash': 2.8.3 + '@parcel/plugin': 2.8.3_@parcel+core@2.8.3 '@parcel/source-map': 2.1.1 - '@parcel/utils': 2.8.2 + '@parcel/utils': 2.8.3 globals: 13.19.0 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' dev: false - /@parcel/packager-raw/2.8.2_@parcel+core@2.8.2: - resolution: {integrity: sha512-dGonfFptNV1lgqKaD17ecXBUyIfoG6cJI1cCE1sSoYCEt7r+Rq56X/Gq8oiA3+jjMC7QTls+SmFeMZh26fl77Q==} - engines: {node: '>= 12.0.0', parcel: ^2.8.2} + /@parcel/packager-raw/2.8.3_@parcel+core@2.8.3: + resolution: {integrity: sha512-BA6enNQo1RCnco9MhkxGrjOk59O71IZ9DPKu3lCtqqYEVd823tXff2clDKHK25i6cChmeHu6oB1Rb73hlPqhUA==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} dependencies: - '@parcel/plugin': 2.8.2_@parcel+core@2.8.2 + '@parcel/plugin': 2.8.3_@parcel+core@2.8.3 transitivePeerDependencies: - '@parcel/core' dev: false - /@parcel/plugin/2.8.2_@parcel+core@2.8.2: - resolution: {integrity: sha512-YG7TWfKsoNm72jbz3b3TLec0qJHVkuAWSzGzowdIhX37cP1kRfp6BU2VcH+qYPP/KYJLzhcZa9n3by147mGcxw==} + /@parcel/plugin/2.8.3_@parcel+core@2.8.3: + resolution: {integrity: sha512-jZ6mnsS4D9X9GaNnvrixDQwlUQJCohDX2hGyM0U0bY2NWU8Km97SjtoCpWjq+XBCx/gpC4g58+fk9VQeZq2vlw==} engines: {node: '>= 12.0.0'} dependencies: - '@parcel/types': 2.8.2_@parcel+core@2.8.2 + '@parcel/types': 2.8.3_@parcel+core@2.8.3 transitivePeerDependencies: - '@parcel/core' dev: false - /@parcel/reporter-dev-server/2.8.2_@parcel+core@2.8.2: - resolution: {integrity: sha512-A16pAQSAT8Yilo1yCPZcrtWbRhwyiMopEz0mOyGobA1ZDy6B3j4zjobIWzdPQCSIY7+v44vtWMDGbdGrxt6M1Q==} - engines: {node: '>= 12.0.0', parcel: ^2.8.2} + /@parcel/reporter-dev-server/2.8.3_@parcel+core@2.8.3: + resolution: {integrity: sha512-Y8C8hzgzTd13IoWTj+COYXEyCkXfmVJs3//GDBsH22pbtSFMuzAZd+8J9qsCo0EWpiDow7V9f1LischvEh3FbQ==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} dependencies: - '@parcel/plugin': 2.8.2_@parcel+core@2.8.2 - '@parcel/utils': 2.8.2 + '@parcel/plugin': 2.8.3_@parcel+core@2.8.3 + '@parcel/utils': 2.8.3 transitivePeerDependencies: - '@parcel/core' dev: false - /@parcel/resolver-default/2.8.2_@parcel+core@2.8.2: - resolution: {integrity: sha512-mlowJMjFjyps9my8wd13kgeExJ5EgkPAuIxRSSWW+GPR7N3uA5DBJ+SB/CzdhCkPrXR6kwVWxNkkOch38pzOQQ==} - engines: {node: '>= 12.0.0', parcel: ^2.8.2} + /@parcel/resolver-default/2.8.3_@parcel+core@2.8.3: + resolution: {integrity: sha512-k0B5M/PJ+3rFbNj4xZSBr6d6HVIe6DH/P3dClLcgBYSXAvElNDfXgtIimbjCyItFkW9/BfcgOVKEEIZOeySH/A==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} dependencies: - '@parcel/node-resolver-core': 2.8.2 - '@parcel/plugin': 2.8.2_@parcel+core@2.8.2 + '@parcel/node-resolver-core': 2.8.3 + '@parcel/plugin': 2.8.3_@parcel+core@2.8.3 transitivePeerDependencies: - '@parcel/core' dev: false - /@parcel/runtime-js/2.8.2_@parcel+core@2.8.2: - resolution: {integrity: sha512-Vk3Gywn2M9qP5X4lF6tu8QXP4xNI90UOSOhKHQ9W5pCu+zvD0Gdvu7qwQPFuFjIAq08xU7+PvZzGnlnM+8NyRw==} - engines: {node: '>= 12.0.0', parcel: ^2.8.2} + /@parcel/runtime-js/2.8.3_@parcel+core@2.8.3: + resolution: {integrity: sha512-IRja0vNKwvMtPgIqkBQh0QtRn0XcxNC8HU1jrgWGRckzu10qJWO+5ULgtOeR4pv9krffmMPqywGXw6l/gvJKYQ==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} dependencies: - '@parcel/plugin': 2.8.2_@parcel+core@2.8.2 - '@parcel/utils': 2.8.2 + '@parcel/plugin': 2.8.3_@parcel+core@2.8.3 + '@parcel/utils': 2.8.3 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' @@ -10883,18 +10941,18 @@ packages: detect-libc: 1.0.3 dev: false - /@parcel/transformer-js/2.8.2_@parcel+core@2.8.2: - resolution: {integrity: sha512-mLksi6gu/20JdCFDNPl7Y0HTwJOAvf2ybC2HaJcy69PJCeUrrstgiFTjsCwv1eKcesgEHi9kKX+sMHVAH3B/dA==} - engines: {node: '>= 12.0.0', parcel: ^2.8.2} + /@parcel/transformer-js/2.8.3_@parcel+core@2.8.3: + resolution: {integrity: sha512-9Qd6bib+sWRcpovvzvxwy/PdFrLUXGfmSW9XcVVG8pvgXsZPFaNjnNT8stzGQj1pQiougCoxMY4aTM5p1lGHEQ==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} peerDependencies: - '@parcel/core': ^2.8.2 + '@parcel/core': ^2.8.3 dependencies: - '@parcel/core': 2.8.2 - '@parcel/diagnostic': 2.8.2 - '@parcel/plugin': 2.8.2_@parcel+core@2.8.2 + '@parcel/core': 2.8.3 + '@parcel/diagnostic': 2.8.3 + '@parcel/plugin': 2.8.3_@parcel+core@2.8.3 '@parcel/source-map': 2.1.1 - '@parcel/utils': 2.8.2 - '@parcel/workers': 2.8.2_@parcel+core@2.8.2 + '@parcel/utils': 2.8.3 + '@parcel/workers': 2.8.3_@parcel+core@2.8.3 '@swc/helpers': 0.4.14 browserslist: 4.21.4 detect-libc: 1.0.3 @@ -10903,39 +10961,39 @@ packages: semver: 5.7.1 dev: false - /@parcel/transformer-json/2.8.2_@parcel+core@2.8.2: - resolution: {integrity: sha512-eZuaY5tMxcMDJwpHJbPVTgSaBIO4mamwAa3VulN9kRRaf29nc+Q0iM7zMFVHWFQAi/mZZ194IIQXbDX3r6oSSQ==} - engines: {node: '>= 12.0.0', parcel: ^2.8.2} + /@parcel/transformer-json/2.8.3_@parcel+core@2.8.3: + resolution: {integrity: sha512-B7LmVq5Q7bZO4ERb6NHtRuUKWGysEeaj9H4zelnyBv+wLgpo4f5FCxSE1/rTNmP9u1qHvQ3scGdK6EdSSokGPg==} + engines: {node: '>= 12.0.0', parcel: ^2.8.3} dependencies: - '@parcel/plugin': 2.8.2_@parcel+core@2.8.2 + '@parcel/plugin': 2.8.3_@parcel+core@2.8.3 json5: 2.2.3 transitivePeerDependencies: - '@parcel/core' dev: false - /@parcel/types/2.8.2_@parcel+core@2.8.2: - resolution: {integrity: sha512-HAYhokWxM10raIhqaYj9VR9eAvJ+xP2sNfQ1IcQybHpq3qblcBe/4jDeuUpwIyKeQ4gorp7xY+q8KDoR20j43w==} + /@parcel/types/2.8.3_@parcel+core@2.8.3: + resolution: {integrity: sha512-FECA1FB7+0UpITKU0D6TgGBpGxYpVSMNEENZbSJxFSajNy3wrko+zwBKQmFOLOiPcEtnGikxNs+jkFWbPlUAtw==} dependencies: - '@parcel/cache': 2.8.2_@parcel+core@2.8.2 - '@parcel/diagnostic': 2.8.2 - '@parcel/fs': 2.8.2_@parcel+core@2.8.2 - '@parcel/package-manager': 2.8.2_@parcel+core@2.8.2 + '@parcel/cache': 2.8.3_@parcel+core@2.8.3 + '@parcel/diagnostic': 2.8.3 + '@parcel/fs': 2.8.3_@parcel+core@2.8.3 + '@parcel/package-manager': 2.8.3_@parcel+core@2.8.3 '@parcel/source-map': 2.1.1 - '@parcel/workers': 2.8.2_@parcel+core@2.8.2 + '@parcel/workers': 2.8.3_@parcel+core@2.8.3 utility-types: 3.10.0 transitivePeerDependencies: - '@parcel/core' dev: false - /@parcel/utils/2.8.2: - resolution: {integrity: sha512-Ufax7wZxC9FNsUpR0EU7Z22LEY/q9jjsDTwswctCdfpWb7TE/NudOfM9myycfRvwBVEYN50lPbkt1QltEVnXQQ==} + /@parcel/utils/2.8.3: + resolution: {integrity: sha512-IhVrmNiJ+LOKHcCivG5dnuLGjhPYxQ/IzbnF2DKNQXWBTsYlHkJZpmz7THoeLtLliGmSOZ3ZCsbR8/tJJKmxjA==} engines: {node: '>= 12.0.0'} dependencies: - '@parcel/codeframe': 2.8.2 - '@parcel/diagnostic': 2.8.2 - '@parcel/hash': 2.8.2 - '@parcel/logger': 2.8.2 - '@parcel/markdown-ansi': 2.8.2 + '@parcel/codeframe': 2.8.3 + '@parcel/diagnostic': 2.8.3 + '@parcel/hash': 2.8.3 + '@parcel/logger': 2.8.3 + '@parcel/markdown-ansi': 2.8.3 '@parcel/source-map': 2.1.1 chalk: 4.1.2 dev: false @@ -10951,17 +11009,17 @@ packages: node-gyp-build: 4.5.0 dev: false - /@parcel/workers/2.8.2_@parcel+core@2.8.2: - resolution: {integrity: sha512-Eg6CofIrJSNBa2fjXwvnzVLPKwR/6fkfQTFAm3Jl+4JYLVknBtTSFzQNp/Fa+HUEG889H9ucTk2CBi/fVPBAFw==} + /@parcel/workers/2.8.3_@parcel+core@2.8.3: + resolution: {integrity: sha512-+AxBnKgjqVpUHBcHLWIHcjYgKIvHIpZjN33mG5LG9XXvrZiqdWvouEzqEXlVLq5VzzVbKIQQcmsvRy138YErkg==} engines: {node: '>= 12.0.0'} peerDependencies: - '@parcel/core': ^2.8.2 + '@parcel/core': ^2.8.3 dependencies: - '@parcel/core': 2.8.2 - '@parcel/diagnostic': 2.8.2 - '@parcel/logger': 2.8.2 - '@parcel/types': 2.8.2_@parcel+core@2.8.2 - '@parcel/utils': 2.8.2 + '@parcel/core': 2.8.3 + '@parcel/diagnostic': 2.8.3 + '@parcel/logger': 2.8.3 + '@parcel/types': 2.8.3_@parcel+core@2.8.3 + '@parcel/utils': 2.8.3 chrome-trace-event: 1.0.3 nullthrows: 1.1.1 dev: false @@ -11166,7 +11224,7 @@ packages: dependencies: '@rollup/pluginutils': 5.0.2_rollup@2.79.1 '@types/resolve': 1.20.2 - deepmerge: 4.2.2 + deepmerge: 4.3.0 is-builtin-module: 3.2.0 is-module: 1.0.0 resolve: 1.22.1 @@ -11504,7 +11562,7 @@ packages: vite: ^4.0.0 dependencies: debug: 4.3.4 - deepmerge: 4.2.2 + deepmerge: 4.3.0 kleur: 4.1.5 magic-string: 0.27.0 svelte: 3.54.0 @@ -11523,7 +11581,7 @@ packages: vite: ^4.0.0 dependencies: debug: 4.3.4 - deepmerge: 4.2.2 + deepmerge: 4.3.0 kleur: 4.1.5 magic-string: 0.27.0 svelte: 3.55.0 @@ -11665,7 +11723,7 @@ packages: dependencies: '@svgr/core': 6.2.1 cosmiconfig: 7.0.1 - deepmerge: 4.2.2 + deepmerge: 4.3.0 svgo: 2.8.0 dev: true @@ -11955,13 +12013,13 @@ packages: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} - /@turist/fetch/7.2.0_node-fetch@2.6.7: + /@turist/fetch/7.2.0_node-fetch@2.6.9: resolution: {integrity: sha512-2x7EGw+6OJ29phunsbGvtxlNmSfcuPcyYudkMbi8gARCP9eJ1CtuMvnVUHL//O9Ixi9SJiug8wNt6lj86pN8XQ==} peerDependencies: node-fetch: '2' dependencies: '@types/node-fetch': 2.6.2 - node-fetch: 2.6.7 + node-fetch: 2.6.9 dev: false /@turist/time/0.0.2: @@ -11975,7 +12033,7 @@ packages: /@types/babel__core/7.1.19: resolution: {integrity: sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==} dependencies: - '@babel/parser': 7.20.7 + '@babel/parser': 7.20.15 '@babel/types': 7.20.7 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 @@ -11991,7 +12049,7 @@ packages: /@types/babel__template/7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.20.7 + '@babel/parser': 7.20.15 '@babel/types': 7.20.7 dev: true @@ -13286,7 +13344,7 @@ packages: '@babel/helper-module-imports': 7.18.6 '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.12 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.12 + '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 '@vue/babel-helper-vue-transform-on': 1.0.2 camelcase: 6.3.0 @@ -13300,7 +13358,7 @@ packages: /@vue/compiler-core/3.2.45: resolution: {integrity: sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==} dependencies: - '@babel/parser': 7.20.7 + '@babel/parser': 7.20.15 '@vue/shared': 3.2.45 estree-walker: 2.0.2 source-map: 0.6.1 @@ -13316,7 +13374,7 @@ packages: /@vue/compiler-sfc/3.2.45: resolution: {integrity: sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==} dependencies: - '@babel/parser': 7.20.7 + '@babel/parser': 7.20.15 '@vue/compiler-core': 3.2.45 '@vue/compiler-dom': 3.2.45 '@vue/compiler-ssr': 3.2.45 @@ -13324,7 +13382,7 @@ packages: '@vue/shared': 3.2.45 estree-walker: 2.0.2 magic-string: 0.25.9 - postcss: 8.4.20 + postcss: 8.4.21 source-map: 0.6.1 dev: true @@ -13342,7 +13400,7 @@ packages: /@vue/reactivity-transform/3.2.45: resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==} dependencies: - '@babel/parser': 7.20.7 + '@babel/parser': 7.20.15 '@vue/compiler-core': 3.2.45 '@vue/shared': 3.2.45 estree-walker: 2.0.2 @@ -14163,6 +14221,22 @@ packages: picocolors: 1.0.0 postcss: 8.4.20 postcss-value-parser: 4.2.0 + dev: true + + /autoprefixer/10.4.13_postcss@8.4.21: + resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.21.4 + caniuse-lite: 1.0.30001431 + fraction.js: 4.2.0 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 /autoprefixer/10.4.7_postcss@8.4.14: resolution: {integrity: sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==} @@ -14433,7 +14507,7 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 cosmiconfig: 7.0.1 resolve: 1.22.1 dev: false @@ -14612,18 +14686,18 @@ packages: - supports-color dev: true - /babel-plugin-remove-graphql-queries/5.6.0-next.0_x3fnz3zp5bgltr62wwyqvgm7l4: - resolution: {integrity: sha512-hrxx7U73x6TUL+x/h2/OrQT4hdeGkYjK39oiYtt6erSVz8q1iOYl4tfCYN0wuHyrvpRdXJ7UBrAhLgBFIPn8Gw==} + /babel-plugin-remove-graphql-queries/5.7.0-next.0_kwfgdicz63ldiwfqlkadmrpj4y: + resolution: {integrity: sha512-dguL6QCS9duTt22QZYlu4ZY/DW/EjCkUc/43YDkfR/lbx32OqKwg1+zKYAE67bJ5PKhdK7PP+dh0486dt4iavQ==} engines: {node: '>=18.0.0'} peerDependencies: '@babel/core': ^7.0.0 gatsby: ^5.0.0-next dependencies: '@babel/core': 7.20.12 - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 '@babel/types': 7.20.7 - gatsby: 5.6.0-next.2_biqbaboplfbrettd7655fr4n2y - gatsby-core-utils: 4.6.0-next.0 + gatsby: 5.7.0-next.0_biqbaboplfbrettd7655fr4n2y + gatsby-core-utils: 4.7.0-next.0 dev: false /babel-plugin-styled-components/2.0.7_styled-components@5.3.6: @@ -14707,8 +14781,8 @@ packages: - supports-color dev: false - /babel-preset-gatsby/3.6.0-next.0_pp2vm42zn6vfmnpuhar3irht7i: - resolution: {integrity: sha512-Yg3s+TqJcaiolWzERdtCc/nQMnQDGqv6VvB4CEsRFAzZy9YoDLN6BauTpJ/FWeJc595TdszCYLqYLoa0cXcfVw==} + /babel-preset-gatsby/3.7.0-next.0_pp2vm42zn6vfmnpuhar3irht7i: + resolution: {integrity: sha512-nf7aujMeM4gWtiIsdSlap6XaM8zI3pxfTWtIv3LBYN64T59Fi0sDLlDPOicGPrZQxtRWP7zqJBBbnSuy0P3oDA==} engines: {node: '>=18.0.0'} peerDependencies: '@babel/core': ^7.11.6 @@ -14724,13 +14798,13 @@ packages: '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.20.12 '@babel/preset-env': 7.20.2_@babel+core@7.20.12 '@babel/preset-react': 7.18.6_@babel+core@7.20.12 - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 babel-plugin-dynamic-import-node: 2.3.3 babel-plugin-macros: 3.1.0 babel-plugin-transform-react-remove-prop-types: 0.4.24 core-js: 3.26.0 - gatsby-core-utils: 4.6.0-next.0 - gatsby-legacy-polyfills: 3.6.0-next.0 + gatsby-core-utils: 4.7.0-next.0 + gatsby-legacy-polyfills: 3.7.0-next.0 transitivePeerDependencies: - supports-color dev: false @@ -16153,11 +16227,11 @@ packages: readable-stream: 3.6.0 dev: true - /create-gatsby/3.6.0-next.1: - resolution: {integrity: sha512-7PSTSNLa1w0LZ81WXZ09IBVcE+SCuOk8QOPJC3tK2D50iTeKo1rBp2mZEX0ao5sC5q/N869HuLBPkzdvP5Lvig==} + /create-gatsby/3.7.0-next.0: + resolution: {integrity: sha512-9Ywci5zGlfvXKId+tIZdBRN1X1Y2UPgEjEafiCkHgD4+oQX4+xUYp46abQMhTJZOqokz4zMY16Y9JIhp1eAjQw==} hasBin: true dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 dev: false /create-require/1.1.1: @@ -16236,6 +16310,15 @@ packages: postcss: ^8.0.9 dependencies: postcss: 8.4.20 + dev: true + + /css-declaration-sorter/6.3.1_postcss@8.4.21: + resolution: {integrity: sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.9 + dependencies: + postcss: 8.4.21 /css-loader/5.2.7_webpack@5.75.0: resolution: {integrity: sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==} @@ -16243,13 +16326,13 @@ packages: peerDependencies: webpack: ^4.27.0 || ^5.0.0 dependencies: - icss-utils: 5.1.0_postcss@8.4.20 + icss-utils: 5.1.0_postcss@8.4.21 loader-utils: 2.0.4 - postcss: 8.4.20 - postcss-modules-extract-imports: 3.0.0_postcss@8.4.20 - postcss-modules-local-by-default: 4.0.0_postcss@8.4.20 - postcss-modules-scope: 3.0.0_postcss@8.4.20 - postcss-modules-values: 4.0.0_postcss@8.4.20 + postcss: 8.4.21 + postcss-modules-extract-imports: 3.0.0_postcss@8.4.21 + postcss-modules-local-by-default: 4.0.0_postcss@8.4.21 + postcss-modules-scope: 3.0.0_postcss@8.4.21 + postcss-modules-values: 4.0.0_postcss@8.4.21 postcss-value-parser: 4.2.0 schema-utils: 3.1.1 semver: 7.3.8 @@ -16262,12 +16345,12 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - icss-utils: 5.1.0_postcss@8.4.20 - postcss: 8.4.20 - postcss-modules-extract-imports: 3.0.0_postcss@8.4.20 - postcss-modules-local-by-default: 4.0.0_postcss@8.4.20 - postcss-modules-scope: 3.0.0_postcss@8.4.20 - postcss-modules-values: 4.0.0_postcss@8.4.20 + icss-utils: 5.1.0_postcss@8.4.21 + postcss: 8.4.21 + postcss-modules-extract-imports: 3.0.0_postcss@8.4.21 + postcss-modules-local-by-default: 4.0.0_postcss@8.4.21 + postcss-modules-scope: 3.0.0_postcss@8.4.21 + postcss-modules-values: 4.0.0_postcss@8.4.21 postcss-value-parser: 4.2.0 semver: 7.3.8 webpack: 5.73.0 @@ -16286,10 +16369,10 @@ packages: csso: optional: true dependencies: - cssnano: 5.1.14_postcss@8.4.20 + cssnano: 5.1.14_postcss@8.4.21 jest-worker: 26.6.2 p-limit: 3.1.0 - postcss: 8.4.20 + postcss: 8.4.21 schema-utils: 3.1.1 serialize-javascript: 5.0.1 source-map: 0.6.1 @@ -16316,9 +16399,9 @@ packages: optional: true dependencies: clean-css: 5.3.0 - cssnano: 5.1.14_postcss@8.4.20 + cssnano: 5.1.14_postcss@8.4.21 jest-worker: 27.5.1 - postcss: 8.4.20 + postcss: 8.4.21 schema-utils: 4.0.0 serialize-javascript: 6.0.0 source-map: 0.6.1 @@ -16379,19 +16462,19 @@ packages: engines: {node: '>=4'} hasBin: true - /cssnano-preset-advanced/5.3.8_postcss@8.4.20: + /cssnano-preset-advanced/5.3.8_postcss@8.4.21: resolution: {integrity: sha512-xUlLLnEB1LjpEik+zgRNlk8Y/koBPPtONZjp7JKbXigeAmCrFvq9H0pXW5jJV45bQWAlmJ0sKy+IMr0XxLYQZg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - autoprefixer: 10.4.13_postcss@8.4.20 - cssnano-preset-default: 5.2.13_postcss@8.4.20 - postcss: 8.4.20 - postcss-discard-unused: 5.1.0_postcss@8.4.20 - postcss-merge-idents: 5.1.1_postcss@8.4.20 - postcss-reduce-idents: 5.2.0_postcss@8.4.20 - postcss-zindex: 5.1.0_postcss@8.4.20 + autoprefixer: 10.4.13_postcss@8.4.21 + cssnano-preset-default: 5.2.13_postcss@8.4.21 + postcss: 8.4.21 + postcss-discard-unused: 5.1.0_postcss@8.4.21 + postcss-merge-idents: 5.1.1_postcss@8.4.21 + postcss-reduce-idents: 5.2.0_postcss@8.4.21 + postcss-zindex: 5.1.0_postcss@8.4.21 dev: true /cssnano-preset-default/5.2.12_postcss@8.4.14: @@ -16506,6 +16589,44 @@ packages: postcss-reduce-transforms: 5.1.0_postcss@8.4.20 postcss-svgo: 5.1.0_postcss@8.4.20 postcss-unique-selectors: 5.1.1_postcss@8.4.20 + dev: true + + /cssnano-preset-default/5.2.13_postcss@8.4.21: + resolution: {integrity: sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + css-declaration-sorter: 6.3.1_postcss@8.4.21 + cssnano-utils: 3.1.0_postcss@8.4.21 + postcss: 8.4.21 + postcss-calc: 8.2.4_postcss@8.4.21 + postcss-colormin: 5.3.0_postcss@8.4.21 + postcss-convert-values: 5.1.3_postcss@8.4.21 + postcss-discard-comments: 5.1.2_postcss@8.4.21 + postcss-discard-duplicates: 5.1.0_postcss@8.4.21 + postcss-discard-empty: 5.1.1_postcss@8.4.21 + postcss-discard-overridden: 5.1.0_postcss@8.4.21 + postcss-merge-longhand: 5.1.7_postcss@8.4.21 + postcss-merge-rules: 5.1.3_postcss@8.4.21 + postcss-minify-font-values: 5.1.0_postcss@8.4.21 + postcss-minify-gradients: 5.1.1_postcss@8.4.21 + postcss-minify-params: 5.1.4_postcss@8.4.21 + postcss-minify-selectors: 5.2.1_postcss@8.4.21 + postcss-normalize-charset: 5.1.0_postcss@8.4.21 + postcss-normalize-display-values: 5.1.0_postcss@8.4.21 + postcss-normalize-positions: 5.1.1_postcss@8.4.21 + postcss-normalize-repeat-style: 5.1.1_postcss@8.4.21 + postcss-normalize-string: 5.1.0_postcss@8.4.21 + postcss-normalize-timing-functions: 5.1.0_postcss@8.4.21 + postcss-normalize-unicode: 5.1.1_postcss@8.4.21 + postcss-normalize-url: 5.1.0_postcss@8.4.21 + postcss-normalize-whitespace: 5.1.1_postcss@8.4.21 + postcss-ordered-values: 5.1.3_postcss@8.4.21 + postcss-reduce-initial: 5.1.1_postcss@8.4.21 + postcss-reduce-transforms: 5.1.0_postcss@8.4.21 + postcss-svgo: 5.1.0_postcss@8.4.21 + postcss-unique-selectors: 5.1.1_postcss@8.4.21 /cssnano-utils/3.1.0_postcss@8.4.14: resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} @@ -16523,6 +16644,15 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.20 + dev: true + + /cssnano-utils/3.1.0_postcss@8.4.21: + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 /cssnano/5.1.12_postcss@8.4.14: resolution: {integrity: sha512-TgvArbEZu0lk/dvg2ja+B7kYoD7BBCmn3+k58xD0qjrGHsFzXY/wKTo9M5egcUCabPol05e/PVoIu79s2JN4WQ==} @@ -16558,6 +16688,18 @@ packages: lilconfig: 2.0.6 postcss: 8.4.20 yaml: 1.10.2 + dev: true + + /cssnano/5.1.14_postcss@8.4.21: + resolution: {integrity: sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-preset-default: 5.2.13_postcss@8.4.21 + lilconfig: 2.0.6 + postcss: 8.4.21 + yaml: 1.10.2 /csso/4.2.0: resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} @@ -17323,8 +17465,8 @@ packages: /deep-is/0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - /deepmerge/4.2.2: - resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} + /deepmerge/4.3.0: + resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==} engines: {node: '>=0.10.0'} /default-gateway/6.0.3: @@ -18659,7 +18801,7 @@ packages: eslint: 8.30.0 dev: true - /eslint-config-react-app/6.0.0_nnhcjimma6qtaxwhedjmsri3h4: + /eslint-config-react-app/6.0.0_ftuoewqukkbctpkc5t32zy3owy: resolution: {integrity: sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -18688,8 +18830,8 @@ packages: confusing-browser-globals: 1.0.11 eslint: 7.32.0 eslint-plugin-flowtype: 5.10.0_eslint@7.32.0 - eslint-plugin-import: 2.26.0_ffi3uiz42rv3jyhs6cr7p7qqry - eslint-plugin-jsx-a11y: 6.7.0_eslint@7.32.0 + eslint-plugin-import: 2.27.5_ffi3uiz42rv3jyhs6cr7p7qqry + eslint-plugin-jsx-a11y: 6.7.1_eslint@7.32.0 eslint-plugin-react: 7.31.11_eslint@7.32.0 eslint-plugin-react-hooks: 4.6.0_eslint@7.32.0 dev: false @@ -18737,6 +18879,17 @@ packages: resolve: 1.22.1 transitivePeerDependencies: - supports-color + dev: true + + /eslint-import-resolver-node/0.3.7: + resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} + dependencies: + debug: 3.2.7 + is-core-module: 2.11.0 + resolve: 1.22.1 + transitivePeerDependencies: + - supports-color + dev: false /eslint-module-utils/2.7.4_5vuadmvmkyhbtm34phil3e6noa: resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} @@ -18767,7 +18920,7 @@ packages: - supports-color dev: true - /eslint-module-utils/2.7.4_d3sglxdl6hhgcbhsy3jaoc7rpu: + /eslint-module-utils/2.7.4_n7wmpe4hfzj47xhbzj4etqyjdi: resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: @@ -18791,7 +18944,7 @@ packages: '@typescript-eslint/parser': 4.33.0_eslint@7.32.0 debug: 3.2.7 eslint: 7.32.0 - eslint-import-resolver-node: 0.3.6 + eslint-import-resolver-node: 0.3.7 transitivePeerDependencies: - supports-color dev: false @@ -18818,37 +18971,6 @@ packages: string-natural-compare: 3.0.1 dev: false - /eslint-plugin-import/2.26.0_ffi3uiz42rv3jyhs6cr7p7qqry: - resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 4.33.0_eslint@7.32.0 - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 - debug: 2.6.9 - doctrine: 2.1.0 - eslint: 7.32.0 - eslint-import-resolver-node: 0.3.6 - eslint-module-utils: 2.7.4_d3sglxdl6hhgcbhsy3jaoc7rpu - has: 1.0.3 - is-core-module: 2.9.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.1.6 - resolve: 1.22.1 - tsconfig-paths: 3.14.1 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: false - /eslint-plugin-import/2.26.0_tqyj5ytb5g6r5ett7xxedhk6eq: resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} engines: {node: '>=4'} @@ -18880,6 +19002,39 @@ packages: - supports-color dev: true + /eslint-plugin-import/2.27.5_ffi3uiz42rv3jyhs6cr7p7qqry: + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 4.33.0_eslint@7.32.0 + array-includes: 3.1.6 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 7.32.0 + eslint-import-resolver-node: 0.3.7 + eslint-module-utils: 2.7.4_n7wmpe4hfzj47xhbzj4etqyjdi + has: 1.0.3 + is-core-module: 2.11.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.6 + resolve: 1.22.1 + semver: 6.3.0 + tsconfig-paths: 3.14.1 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: false + /eslint-plugin-jest/27.1.4_nwhe2qd7pg7k6t4q57ylogsxam: resolution: {integrity: sha512-evJ9E9id/z2Fu6LR+ncNySJ6UMs5RiJiv4JsmdA3gPWoq0AR+uZyva738+Y9Uln+3WaYX+3OYP9HJoau94Iurg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -18919,13 +19074,13 @@ packages: - supports-color dev: true - /eslint-plugin-jsx-a11y/6.7.0_eslint@7.32.0: - resolution: {integrity: sha512-EGGRKhzejSzXKtjmEjWNtr4SK/DkMkSzkBH7g7e7moBDXZXrqaUIxkmD7uF93upMysc4dKYEJwupu7Dff+ShwA==} + /eslint-plugin-jsx-a11y/6.7.1_eslint@7.32.0: + resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} engines: {node: '>=4.0'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 aria-query: 5.1.3 array-includes: 3.1.6 array.prototype.flatmap: 1.3.1 @@ -20076,7 +20231,7 @@ packages: chalk: 4.1.2 chokidar: 3.5.3 cosmiconfig: 6.0.0 - deepmerge: 4.2.2 + deepmerge: 4.3.0 eslint: 7.32.0 fs-extra: 9.1.0 glob: 7.2.3 @@ -20107,7 +20262,7 @@ packages: chalk: 4.1.2 chokidar: 3.5.3 cosmiconfig: 6.0.0 - deepmerge: 4.2.2 + deepmerge: 4.3.0 fs-extra: 9.1.0 glob: 7.2.3 memfs: 3.4.6 @@ -20304,18 +20459,18 @@ packages: /functions-have-names/1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - /gatsby-cli/5.6.0-next.1: - resolution: {integrity: sha512-tFrTZlEezIxFKMkCXXKu3tKBrjqpZt+PykNABkSgOdMGO1pT/xysSClCbKOMockWosrpgaNup+1rP8sjVRdIsw==} + /gatsby-cli/5.7.0-next.0: + resolution: {integrity: sha512-hhBRqmXNuMx0bMaPvkmAJ1nZRzKkr4K7V19OhFD6iLFuDucN35bU9lTiyJ22Ctvhe0JU93a0ZQW1jrMxNScyyg==} engines: {node: '>=18.0.0'} hasBin: true requiresBuild: true dependencies: '@babel/code-frame': 7.18.6 '@babel/core': 7.20.12 - '@babel/generator': 7.20.7 + '@babel/generator': 7.20.14 '@babel/helper-plugin-utils': 7.20.2 '@babel/preset-typescript': 7.18.6_@babel+core@7.20.12 - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 '@babel/template': 7.20.7 '@babel/types': 7.20.7 '@jridgewell/trace-mapping': 0.3.17 @@ -20326,23 +20481,23 @@ packages: clipboardy: 2.3.0 common-tags: 1.8.2 convert-hrtime: 3.0.0 - create-gatsby: 3.6.0-next.1 + create-gatsby: 3.7.0-next.0 envinfo: 7.8.1 execa: 5.1.1 fs-exists-cached: 1.0.0 fs-extra: 11.1.0 - gatsby-core-utils: 4.6.0-next.0 - gatsby-telemetry: 4.6.0-next.0 + gatsby-core-utils: 4.7.0-next.0 + gatsby-telemetry: 4.7.0-next.0 hosted-git-info: 3.0.8 is-valid-path: 0.1.1 joi: 17.7.0 lodash: 4.17.21 - node-fetch: 2.6.7 + node-fetch: 2.6.9 opentracing: 0.14.7 pretty-error: 2.1.2 progress: 2.0.3 prompts: 2.4.2 - redux: 4.2.0 + redux: 4.2.1 resolve-cwd: 3.0.0 semver: 7.3.8 signal-exit: 3.0.7 @@ -20356,11 +20511,11 @@ packages: - supports-color dev: false - /gatsby-core-utils/4.6.0-next.0: - resolution: {integrity: sha512-4cc4d7WfJmYWprWBIxQBRiwyT2uECR9/40rqPCe62yeshTHIZUVCxeqzEeU6R0qkDpLjHkP0F/itv2oNa0AspQ==} + /gatsby-core-utils/4.7.0-next.0: + resolution: {integrity: sha512-lBZA6akCHFPsR2TuOmyMQaskeyv3bKzgdvIG1KPF5Lgztf4Rs07Z8WvqVGq6lVYMM0rCJCDoO6dfy9pJdHFuUQ==} engines: {node: '>=18.0.0'} dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 ci-info: 2.0.0 configstore: 5.0.1 fastq: 1.15.0 @@ -20378,86 +20533,86 @@ packages: xdg-basedir: 4.0.0 dev: false - /gatsby-graphiql-explorer/3.6.0-next.0: - resolution: {integrity: sha512-pXW8ufxLdklCjVtKyUZ6Nr6ROjH/5dUqbnp6hMdUGLWFjvpj3AWc/DH3wsDOLw//bBEZqHAcEyj2DwNcFv8mHw==} + /gatsby-graphiql-explorer/3.7.0-next.0: + resolution: {integrity: sha512-ZgtnZqz4jSuYMp6Mr7QICpRfsjG9QwsT/HS8nxezGP5p8/hBK5N2kJcvonWAwJnhmuViRiWITrWsaXthBVBmeQ==} engines: {node: '>=18.0.0'} dev: false - /gatsby-legacy-polyfills/3.6.0-next.0: - resolution: {integrity: sha512-XwGPOPDF/Xo/wZWW52YmFlZ/89Qb/jZdxBaPHfs2zRKvTAFmFkHBl+KAy5MBISY4IFWTfOyBN2UjnklmxRn93w==} + /gatsby-legacy-polyfills/3.7.0-next.0: + resolution: {integrity: sha512-6HMpm8T76gHKo/uw7xrWVMOd8O4YPcuP7UVeeMkJIZG68gzqFjQfEHJo4kMDWMXuMlFgi5Brvz6nGRNFrAQL8A==} dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 core-js-compat: 3.9.0 dev: false - /gatsby-link/5.6.0-next.0_y2kppt6lrltqk6wasg3eswwzsa: - resolution: {integrity: sha512-tKTT58UQI3PQdWTmALZ9UYZ7hN4lgxrkLNhHRlfhhjsZXAwqqVXfR51gfV8cvEltEOdqdfrUSMZ9167KxEnp5A==} + /gatsby-link/5.7.0-next.0_uxzdzcrcylloub4rxar25ny6ra: + resolution: {integrity: sha512-BWmj6VytpVyCI8LREDs27PQN5r41mpCXwQ8jVky6h8gHOuMjfVk+O3Q5DGzHBylxJxs6+3ijHVSOVox1fLmRtA==} engines: {node: '>=18.0.0'} peerDependencies: '@gatsbyjs/reach-router': ^2.0.0 react: ^18.0.0 || ^0.0.0 react-dom: ^18.0.0 || ^0.0.0 dependencies: - '@gatsbyjs/reach-router': 2.0.0_biqbaboplfbrettd7655fr4n2y + '@gatsbyjs/reach-router': 2.0.1_biqbaboplfbrettd7655fr4n2y '@types/reach__router': 1.3.11 - gatsby-page-utils: 3.6.0-next.0 + gatsby-page-utils: 3.7.0-next.0 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: false - /gatsby-page-utils/3.6.0-next.0: - resolution: {integrity: sha512-3jul3U94W/33H8DMoaEfo6z26Tlp62Lf9FtS828s1A076ao9CFBpT2xrCCAn+rF8uXKAY1oB3b337Oaxdyx70g==} + /gatsby-page-utils/3.7.0-next.0: + resolution: {integrity: sha512-4heFJsjOPxHjzOmik5Kd4PzDlyZ2U1fOj6JZyppjOa+PZI0jrbsb1O2BeIOkTlB+2MNoG4Zv/aj3UpCnEC1SVg==} engines: {node: '>=18.0.0'} dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 bluebird: 3.7.2 chokidar: 3.5.3 fs-exists-cached: 1.0.0 - gatsby-core-utils: 4.6.0-next.0 + gatsby-core-utils: 4.7.0-next.0 glob: 7.2.3 lodash: 4.17.21 micromatch: 4.0.5 dev: false - /gatsby-parcel-config/1.6.0-next.0_@parcel+core@2.8.2: - resolution: {integrity: sha512-zqNIyHiaegO0hX8LJ6qmPAsZC0G3QmjjDvcmKVp4xvU8c21L7LUDJP++9Ek1iKm45gfuCweXeeKX01W5EWzDFA==} + /gatsby-parcel-config/1.7.0-next.0_@parcel+core@2.8.3: + resolution: {integrity: sha512-cE4ltBaE9kWJ5EsUHSpcudp9dYSd29+VRR7gXdHEo/UxuNkLtcrlKwsPu/2553CX6aBdxt6Xyqcd7YwOs0RQ6w==} engines: {parcel: 2.x} peerDependencies: '@parcel/core': ^2.0.0 dependencies: - '@gatsbyjs/parcel-namer-relative-to-cwd': 2.6.0-next.0_@parcel+core@2.8.2 - '@parcel/bundler-default': 2.8.2_@parcel+core@2.8.2 - '@parcel/compressor-raw': 2.8.2_@parcel+core@2.8.2 - '@parcel/core': 2.8.2 - '@parcel/namer-default': 2.8.2_@parcel+core@2.8.2 - '@parcel/optimizer-terser': 2.8.2_@parcel+core@2.8.2 - '@parcel/packager-js': 2.8.2_@parcel+core@2.8.2 - '@parcel/packager-raw': 2.8.2_@parcel+core@2.8.2 - '@parcel/reporter-dev-server': 2.8.2_@parcel+core@2.8.2 - '@parcel/resolver-default': 2.8.2_@parcel+core@2.8.2 - '@parcel/runtime-js': 2.8.2_@parcel+core@2.8.2 - '@parcel/transformer-js': 2.8.2_@parcel+core@2.8.2 - '@parcel/transformer-json': 2.8.2_@parcel+core@2.8.2 + '@gatsbyjs/parcel-namer-relative-to-cwd': 2.7.0-next.0_@parcel+core@2.8.3 + '@parcel/bundler-default': 2.8.3_@parcel+core@2.8.3 + '@parcel/compressor-raw': 2.8.3_@parcel+core@2.8.3 + '@parcel/core': 2.8.3 + '@parcel/namer-default': 2.8.3_@parcel+core@2.8.3 + '@parcel/optimizer-terser': 2.8.3_@parcel+core@2.8.3 + '@parcel/packager-js': 2.8.3_@parcel+core@2.8.3 + '@parcel/packager-raw': 2.8.3_@parcel+core@2.8.3 + '@parcel/reporter-dev-server': 2.8.3_@parcel+core@2.8.3 + '@parcel/resolver-default': 2.8.3_@parcel+core@2.8.3 + '@parcel/runtime-js': 2.8.3_@parcel+core@2.8.3 + '@parcel/transformer-js': 2.8.3_@parcel+core@2.8.3 + '@parcel/transformer-json': 2.8.3_@parcel+core@2.8.3 dev: false - /gatsby-plugin-page-creator/5.6.0-next.1_wxxlwg4kb5uwyfjvsdo3jviy2e: - resolution: {integrity: sha512-9yE2C4Xbc+llNRzzC9MbpgSM1GQCi4lUqlNy8Hq/C25S0wTTRW+FQZxuWTiR+AUTUL8MK9wJsNF5f0bZc8hfJw==} + /gatsby-plugin-page-creator/5.7.0-next.0_5qnviuipb4fcbildeubwcez6ia: + resolution: {integrity: sha512-Lq7lyHBNiHvgjTXeybUo+cn/QjOjoN1PnoZlKyM0wGpJOX9nn6hrED+C5FylOKf4hS/RjLPaGf4OnYzeOAkWtQ==} engines: {node: '>=18.0.0'} peerDependencies: gatsby: ^5.0.0-next dependencies: - '@babel/runtime': 7.20.7 - '@babel/traverse': 7.20.12 + '@babel/runtime': 7.20.13 + '@babel/traverse': 7.20.13 '@sindresorhus/slugify': 1.1.2 chokidar: 3.5.3 fs-exists-cached: 1.0.0 fs-extra: 11.1.0 - gatsby: 5.6.0-next.2_biqbaboplfbrettd7655fr4n2y - gatsby-core-utils: 4.6.0-next.0 - gatsby-page-utils: 3.6.0-next.0 - gatsby-plugin-utils: 4.6.0-next.1_wxxlwg4kb5uwyfjvsdo3jviy2e - gatsby-telemetry: 4.6.0-next.0 + gatsby: 5.7.0-next.0_biqbaboplfbrettd7655fr4n2y + gatsby-core-utils: 4.7.0-next.0 + gatsby-page-utils: 3.7.0-next.0 + gatsby-plugin-utils: 4.7.0-next.0_5qnviuipb4fcbildeubwcez6ia + gatsby-telemetry: 4.7.0-next.0 globby: 11.1.0 lodash: 4.17.21 transitivePeerDependencies: @@ -20466,8 +20621,8 @@ packages: - supports-color dev: false - /gatsby-plugin-typescript/5.6.0-next.0_gatsby@5.6.0-next.2: - resolution: {integrity: sha512-CUguJx8GjTQHymcfBOcwUXZtetfhLYtgUehkM8ovvNlscgavGxmbGD90gXMmo5JgrLPhdx8krtMsdIeCOOvo4w==} + /gatsby-plugin-typescript/5.7.0-next.0_gatsby@5.7.0-next.0: + resolution: {integrity: sha512-r60b1a2SOAZRYmV+rpPCW58QgeutbCHpOeaG7mDBHSNU3nnL2WWjvSmJFpbvwYRsTUhd54k1EXYENB7nX4Sw/w==} engines: {node: '>=18.0.0'} peerDependencies: gatsby: ^5.0.0-next @@ -20477,26 +20632,26 @@ packages: '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.20.12 '@babel/plugin-proposal-optional-chaining': 7.20.7_@babel+core@7.20.12 '@babel/preset-typescript': 7.18.6_@babel+core@7.20.12 - '@babel/runtime': 7.20.7 - babel-plugin-remove-graphql-queries: 5.6.0-next.0_x3fnz3zp5bgltr62wwyqvgm7l4 - gatsby: 5.6.0-next.2_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.20.13 + babel-plugin-remove-graphql-queries: 5.7.0-next.0_kwfgdicz63ldiwfqlkadmrpj4y + gatsby: 5.7.0-next.0_biqbaboplfbrettd7655fr4n2y transitivePeerDependencies: - supports-color dev: false - /gatsby-plugin-utils/4.6.0-next.1_wxxlwg4kb5uwyfjvsdo3jviy2e: - resolution: {integrity: sha512-RhM2cQ6RYmdGQkXKs4d+KfG5ovGjvbF4fps/H4Sk81nJ1AnlPGbUlMaCdgFhhTJL1ID8l4rYdpQKXM87THJosQ==} + /gatsby-plugin-utils/4.7.0-next.0_5qnviuipb4fcbildeubwcez6ia: + resolution: {integrity: sha512-yWgUlqItsOST/cmqxAYuzZKoLv/lnmztQn5Pk7jtJup/jnISqzq1LVYKS027ZFIRDTp1u0flRwlC3vlhH4kd8Q==} engines: {node: '>=18.0.0'} peerDependencies: gatsby: ^5.0.0-next graphql: ^16.0.0 dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 fastq: 1.15.0 fs-extra: 11.1.0 - gatsby: 5.6.0-next.2_biqbaboplfbrettd7655fr4n2y - gatsby-core-utils: 4.6.0-next.0 - gatsby-sharp: 1.6.0-next.0 + gatsby: 5.7.0-next.0_biqbaboplfbrettd7655fr4n2y + gatsby-core-utils: 4.7.0-next.0 + gatsby-sharp: 1.7.0-next.0 graphql: 16.6.0 graphql-compose: 9.0.10_graphql@16.6.0 import-from: 4.0.0 @@ -20504,77 +20659,77 @@ packages: mime: 3.0.0 dev: false - /gatsby-react-router-scroll/6.6.0-next.0_y2kppt6lrltqk6wasg3eswwzsa: - resolution: {integrity: sha512-zSVEibH40eR64HROVbQ2OTV4sSDVXCgAEIG9yykhGJv5oz2yEFwWcjmPYWEtaiu2qcjPnLSkjsPOw5tVqrFr7A==} + /gatsby-react-router-scroll/6.7.0-next.0_uxzdzcrcylloub4rxar25ny6ra: + resolution: {integrity: sha512-OFKePAMF6n8DseaIIsuuQ4GTadl91m9i1GIj8fUhaInQr4y6fADSvWIR6W+ZxDjKksUm+DNalz+FE8UzGcVDtw==} engines: {node: '>=18.0.0'} peerDependencies: '@gatsbyjs/reach-router': ^2.0.0 react: ^18.0.0 || ^0.0.0 react-dom: ^18.0.0 || ^0.0.0 dependencies: - '@babel/runtime': 7.20.7 - '@gatsbyjs/reach-router': 2.0.0_biqbaboplfbrettd7655fr4n2y + '@babel/runtime': 7.20.13 + '@gatsbyjs/reach-router': 2.0.1_biqbaboplfbrettd7655fr4n2y prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: false - /gatsby-script/2.6.0-next.0_y2kppt6lrltqk6wasg3eswwzsa: - resolution: {integrity: sha512-kJQ+NqtS4ue3I7t0Asgy+bAdnwQ0Wzu6BK3z/jnj57lU6mBthU5XWj9RiCu3W4GjsIW/qqjN1e/rqvukN+sWMw==} + /gatsby-script/2.7.0-next.0_uxzdzcrcylloub4rxar25ny6ra: + resolution: {integrity: sha512-ycmGRe7exnLXf0iL6+W3pyJn/tjCwcZHLI56eV0siWUiixxZMWLRZ5Ysigk+O3WitFCax083/WbpH3TiT9rfnA==} engines: {node: '>=18.0.0'} peerDependencies: '@gatsbyjs/reach-router': ^2.0.0 react: ^18.0.0 || ^0.0.0 react-dom: ^18.0.0 || ^0.0.0 dependencies: - '@gatsbyjs/reach-router': 2.0.0_biqbaboplfbrettd7655fr4n2y + '@gatsbyjs/reach-router': 2.0.1_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: false - /gatsby-sharp/1.6.0-next.0: - resolution: {integrity: sha512-QaGkqU55JaZAbjgU1QyrX0rbyRUEFluMT7LykLlfGMCdox4DzE5ERtP5BVIHCzRXc0JAZtmFCDcFmpPSKxB28w==} + /gatsby-sharp/1.7.0-next.0: + resolution: {integrity: sha512-BzvqeCKt424YChZmb2p4sw1moPeE0SGfzr2IbhM/kkb8Ks3fH+mLy/FUQi/dJ317oa1+AHc8mAjezzxGAFHSsA==} engines: {node: '>=18.0.0'} dependencies: '@types/sharp': 0.31.1 sharp: 0.31.3 dev: false - /gatsby-telemetry/4.6.0-next.0: - resolution: {integrity: sha512-LQcqw21mO0s5sKPoi5MWYqcK7iVp5qej5fTpOYgDenabGDSIxYAoRa5CGQ6tRwGUjMu3NYykmCpPdsY0DHNHyw==} + /gatsby-telemetry/4.7.0-next.0: + resolution: {integrity: sha512-Gnn6g6cYo4YR7bx9CET0k/2/VwO/AMbVkyO4p4jdxUSuNNY1CCFhH4hTD8oc4ln9KTxnyO1AqoT/ArNzL0G1Xw==} engines: {node: '>=18.0.0'} requiresBuild: true dependencies: '@babel/code-frame': 7.18.6 - '@babel/runtime': 7.20.7 - '@turist/fetch': 7.2.0_node-fetch@2.6.7 + '@babel/runtime': 7.20.13 + '@turist/fetch': 7.2.0_node-fetch@2.6.9 '@turist/time': 0.0.2 boxen: 5.1.2 configstore: 5.0.1 fs-extra: 11.1.0 - gatsby-core-utils: 4.6.0-next.0 + gatsby-core-utils: 4.7.0-next.0 git-up: 7.0.0 is-docker: 2.2.1 lodash: 4.17.21 - node-fetch: 2.6.7 + node-fetch: 2.6.9 transitivePeerDependencies: - encoding dev: false - /gatsby-worker/2.6.0-next.0: - resolution: {integrity: sha512-C2bBppw4MqtEo1pEUma2UE06txv22q+ix04G3idMxjqFLtWq+H3+fQmuDZB4laI601ClzyAHK99dSNKQrfGqeA==} + /gatsby-worker/2.7.0-next.0: + resolution: {integrity: sha512-LKGhWzjadmaciZ7KBBebcS+Pi5WrgSRaRiyzogdFHXTRE0WNCGWOrMQVH1nF0ppMEO2vN11GZKb3TZxDu0ho6g==} engines: {node: '>=18.0.0'} dependencies: '@babel/core': 7.20.12 - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 fs-extra: 11.1.0 signal-exit: 3.0.7 transitivePeerDependencies: - supports-color dev: false - /gatsby/5.6.0-next.2_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-cXyyDjlA2V3NhnfJtLhcrShrYU6k/FB67el5MZIqzrHjb7sg77lJztMpoy4PvXs4MlNvhRupSclIO+o9+G0pyg==} + /gatsby/5.7.0-next.0_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-QBYsyxuct7qhGLkl1jdU0zJS5C5B6wDaxUnReaI9qD+R898cc0KZgGcxhWFzXTk3c6mKGXebW0BBcRBMZ8f3+A==} engines: {node: '>=18.0.0'} hasBin: true requiresBuild: true @@ -20586,24 +20741,24 @@ packages: '@babel/core': 7.20.12 '@babel/eslint-parser': 7.19.1_go3kp2l7mdrkdyt3xfyeu7ppfa '@babel/helper-plugin-utils': 7.20.2 - '@babel/parser': 7.20.7 - '@babel/runtime': 7.20.7 - '@babel/traverse': 7.20.12 + '@babel/parser': 7.20.15 + '@babel/runtime': 7.20.13 + '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 - '@builder.io/partytown': 0.7.4 - '@gatsbyjs/reach-router': 2.0.0_biqbaboplfbrettd7655fr4n2y + '@builder.io/partytown': 0.7.5 + '@gatsbyjs/reach-router': 2.0.1_biqbaboplfbrettd7655fr4n2y '@gatsbyjs/webpack-hot-middleware': 2.25.3 '@graphql-codegen/add': 3.2.3_graphql@16.6.0 '@graphql-codegen/core': 2.6.8_graphql@16.6.0 '@graphql-codegen/plugin-helpers': 2.7.2_graphql@16.6.0 '@graphql-codegen/typescript': 2.8.7_graphql@16.6.0 '@graphql-codegen/typescript-operations': 2.5.12_graphql@16.6.0 - '@graphql-tools/code-file-loader': 7.3.15_hooseksvfyhf37tjwfseq7c3kq - '@graphql-tools/load': 7.8.8_graphql@16.6.0 + '@graphql-tools/code-file-loader': 7.3.18_hooseksvfyhf37tjwfseq7c3kq + '@graphql-tools/load': 7.8.11_graphql@16.6.0 '@jridgewell/trace-mapping': 0.3.17 '@nodelib/fs.walk': 1.2.8 - '@parcel/cache': 2.8.2_@parcel+core@2.8.2 - '@parcel/core': 2.8.2 + '@parcel/cache': 2.8.3_@parcel+core@2.8.3 + '@parcel/core': 2.8.3 '@pmmmwh/react-refresh-webpack-plugin': 0.5.10_xsftmjzvfioxqs4ify53ibh7ay '@types/http-proxy': 1.17.9 '@typescript-eslint/eslint-plugin': 4.33.0_ffi3uiz42rv3jyhs6cr7p7qqry @@ -20613,15 +20768,15 @@ packages: acorn-walk: 8.2.0 address: 1.2.2 anser: 2.1.1 - autoprefixer: 10.4.13_postcss@8.4.20 + autoprefixer: 10.4.13_postcss@8.4.21 axios: 0.21.4_debug@4.3.4 babel-jsx-utils: 1.1.0 babel-loader: 8.3.0_la66t7xldg4uecmyawueag5wkm babel-plugin-add-module-exports: 1.0.4 babel-plugin-dynamic-import-node: 2.3.3 babel-plugin-lodash: 3.3.4 - babel-plugin-remove-graphql-queries: 5.6.0-next.0_x3fnz3zp5bgltr62wwyqvgm7l4 - babel-preset-gatsby: 3.6.0-next.0_pp2vm42zn6vfmnpuhar3irht7i + babel-plugin-remove-graphql-queries: 5.7.0-next.0_kwfgdicz63ldiwfqlkadmrpj4y + babel-preset-gatsby: 3.7.0-next.0_pp2vm42zn6vfmnpuhar3irht7i better-opn: 2.1.1 bluebird: 3.7.2 browserslist: 4.21.4 @@ -20638,17 +20793,17 @@ packages: css.escape: 1.5.1 date-fns: 2.29.3 debug: 4.3.4 - deepmerge: 4.2.2 + deepmerge: 4.3.0 detect-port: 1.5.1 devcert: 1.2.2 dotenv: 8.6.0 enhanced-resolve: 5.12.0 error-stack-parser: 2.1.4 eslint: 7.32.0 - eslint-config-react-app: 6.0.0_nnhcjimma6qtaxwhedjmsri3h4 + eslint-config-react-app: 6.0.0_ftuoewqukkbctpkc5t32zy3owy eslint-plugin-flowtype: 5.10.0_eslint@7.32.0 - eslint-plugin-import: 2.26.0_ffi3uiz42rv3jyhs6cr7p7qqry - eslint-plugin-jsx-a11y: 6.7.0_eslint@7.32.0 + eslint-plugin-import: 2.27.5_ffi3uiz42rv3jyhs6cr7p7qqry + eslint-plugin-jsx-a11y: 6.7.1_eslint@7.32.0 eslint-plugin-react: 7.31.11_eslint@7.32.0 eslint-plugin-react-hooks: 4.6.0_eslint@7.32.0 eslint-webpack-plugin: 2.7.0_u2ubl3shblmc7225ne6wflnyua @@ -20662,26 +20817,26 @@ packages: find-cache-dir: 3.3.2 fs-exists-cached: 1.0.0 fs-extra: 11.1.0 - gatsby-cli: 5.6.0-next.1 - gatsby-core-utils: 4.6.0-next.0 - gatsby-graphiql-explorer: 3.6.0-next.0 - gatsby-legacy-polyfills: 3.6.0-next.0 - gatsby-link: 5.6.0-next.0_y2kppt6lrltqk6wasg3eswwzsa - gatsby-page-utils: 3.6.0-next.0 - gatsby-parcel-config: 1.6.0-next.0_@parcel+core@2.8.2 - gatsby-plugin-page-creator: 5.6.0-next.1_wxxlwg4kb5uwyfjvsdo3jviy2e - gatsby-plugin-typescript: 5.6.0-next.0_gatsby@5.6.0-next.2 - gatsby-plugin-utils: 4.6.0-next.1_wxxlwg4kb5uwyfjvsdo3jviy2e - gatsby-react-router-scroll: 6.6.0-next.0_y2kppt6lrltqk6wasg3eswwzsa - gatsby-script: 2.6.0-next.0_y2kppt6lrltqk6wasg3eswwzsa - gatsby-telemetry: 4.6.0-next.0 - gatsby-worker: 2.6.0-next.0 + gatsby-cli: 5.7.0-next.0 + gatsby-core-utils: 4.7.0-next.0 + gatsby-graphiql-explorer: 3.7.0-next.0 + gatsby-legacy-polyfills: 3.7.0-next.0 + gatsby-link: 5.7.0-next.0_uxzdzcrcylloub4rxar25ny6ra + gatsby-page-utils: 3.7.0-next.0 + gatsby-parcel-config: 1.7.0-next.0_@parcel+core@2.8.3 + gatsby-plugin-page-creator: 5.7.0-next.0_5qnviuipb4fcbildeubwcez6ia + gatsby-plugin-typescript: 5.7.0-next.0_gatsby@5.7.0-next.0 + gatsby-plugin-utils: 4.7.0-next.0_5qnviuipb4fcbildeubwcez6ia + gatsby-react-router-scroll: 6.7.0-next.0_uxzdzcrcylloub4rxar25ny6ra + gatsby-script: 2.7.0-next.0_uxzdzcrcylloub4rxar25ny6ra + gatsby-telemetry: 4.7.0-next.0 + gatsby-worker: 2.7.0-next.0 glob: 7.2.3 globby: 11.1.0 got: 11.8.6 graphql: 16.6.0 graphql-compose: 9.0.10_graphql@16.6.0 - graphql-http: 1.11.0_graphql@16.6.0 + graphql-http: 1.13.0_graphql@16.6.0 graphql-tag: 2.12.6_graphql@16.6.0 hasha: 5.2.2 invariant: 2.2.4 @@ -20700,7 +20855,7 @@ packages: mitt: 1.2.0 moment: 2.29.4 multer: 1.4.5-lts.1 - node-fetch: 2.6.7 + node-fetch: 2.6.9 node-html-parser: 5.4.2 normalize-path: 3.0.0 null-loader: 4.0.1_webpack@5.75.0 @@ -20709,9 +20864,9 @@ packages: parseurl: 1.3.3 physical-cpu-count: 2.0.0 platform: 1.3.6 - postcss: 8.4.20 - postcss-flexbugs-fixes: 5.0.2_postcss@8.4.20 - postcss-loader: 5.3.0_qxxfhhrl3yknjjmta266mo3u64 + postcss: 8.4.21 + postcss-flexbugs-fixes: 5.0.2_postcss@8.4.21 + postcss-loader: 5.3.0_6jdsrmfenkuhhw3gx4zvjlznce prompts: 2.4.2 prop-types: 15.8.1 query-string: 6.14.1 @@ -20721,8 +20876,8 @@ packages: react-dom: 18.2.0_react@18.2.0 react-refresh: 0.14.0 react-server-dom-webpack: 0.0.0-experimental-c8b778b7f-20220825_wxnjqhvau3kr4edcdlkxrbquiq - redux: 4.2.0 - redux-thunk: 2.4.2_redux@4.2.0 + redux: 4.2.1 + redux-thunk: 2.4.2_redux@4.2.1 resolve-from: 5.0.0 semver: 7.3.8 shallow-compare: 1.2.2 @@ -20746,10 +20901,10 @@ packages: webpack-merge: 5.8.0 webpack-stats-plugin: 1.1.1 webpack-virtual-modules: 0.5.0 - xstate: 4.35.2 + xstate: 4.35.4 yaml-loader: 0.8.0 optionalDependencies: - gatsby-sharp: 1.6.0-next.0 + gatsby-sharp: 1.7.0-next.0 transitivePeerDependencies: - '@swc/core' - '@types/webpack' @@ -20814,7 +20969,7 @@ packages: extend: 3.0.2 https-proxy-agent: 5.0.1 is-stream: 2.0.1 - node-fetch: 2.6.7 + node-fetch: 2.6.9 transitivePeerDependencies: - encoding - supports-color @@ -20827,7 +20982,7 @@ packages: extend: 3.0.2 https-proxy-agent: 5.0.1 is-stream: 2.0.1 - node-fetch: 2.6.7 + node-fetch: 2.6.9 transitivePeerDependencies: - encoding - supports-color @@ -21230,7 +21385,7 @@ packages: fast-text-encoding: 1.0.4 google-auth-library: 8.7.0 is-stream-ended: 0.1.4 - node-fetch: 2.6.7 + node-fetch: 2.6.9 object-hash: 3.0.0 proto3-json-serializer: 1.1.0 protobufjs: 7.1.2 @@ -21336,8 +21491,8 @@ packages: - graphql dev: false - /graphql-http/1.11.0_graphql@16.6.0: - resolution: {integrity: sha512-BQOwcGQWwjtsItzWS5ucPVZPtEJSkCDlzQvvNN86Ve+WJOlzvA/VqQhyf2xSZ9Q1TvQEZ9CCPHvBYdbxDDt/hQ==} + /graphql-http/1.13.0_graphql@16.6.0: + resolution: {integrity: sha512-3Ia3ql9k+i/GvjNucwRdqdbumLeyJ8Zame4IhniMy/974t+Dy2mDnF08fOCKwXJwd3ErmzhYS/ZyvcXiX4v8wg==} engines: {node: '>=12'} peerDependencies: graphql: '>=0.11 <=16' @@ -21604,7 +21759,7 @@ packages: /history/4.10.1: resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==} dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 loose-envify: 1.4.0 resolve-pathname: 3.0.0 tiny-invariant: 1.2.0 @@ -21916,13 +22071,13 @@ packages: dependencies: safer-buffer: 2.1.2 - /icss-utils/5.1.0_postcss@8.4.20: + /icss-utils/5.1.0_postcss@8.4.21: resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.20 + postcss: 8.4.21 /ieee754/1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -22261,6 +22416,11 @@ packages: dependencies: ci-info: 2.0.0 + /is-core-module/2.11.0: + resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} + dependencies: + has: 1.0.3 + /is-core-module/2.9.0: resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==} dependencies: @@ -22698,7 +22858,7 @@ packages: engines: {node: '>=8'} dependencies: '@babel/core': 7.20.12 - '@babel/parser': 7.20.7 + '@babel/parser': 7.20.15 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -23008,7 +23168,7 @@ packages: babel-jest: 27.5.1_@babel+core@7.20.12 chalk: 4.1.2 ci-info: 3.7.0 - deepmerge: 4.2.2 + deepmerge: 4.3.0 glob: 7.2.3 graceful-fs: 4.2.10 jest-circus: 27.5.1 @@ -23052,7 +23212,7 @@ packages: babel-jest: 28.1.1_@babel+core@7.20.12 chalk: 4.1.2 ci-info: 3.7.0 - deepmerge: 4.2.2 + deepmerge: 4.3.0 glob: 7.2.3 graceful-fs: 4.2.10 jest-circus: 28.1.1 @@ -23091,7 +23251,7 @@ packages: babel-jest: 28.1.1_@babel+core@7.20.12 chalk: 4.1.2 ci-info: 3.7.0 - deepmerge: 4.2.2 + deepmerge: 4.3.0 glob: 7.2.3 graceful-fs: 4.2.10 jest-circus: 28.1.1 @@ -23129,7 +23289,7 @@ packages: babel-jest: 29.3.0_@babel+core@7.20.12 chalk: 4.1.2 ci-info: 3.7.0 - deepmerge: 4.2.2 + deepmerge: 4.3.0 glob: 7.2.3 graceful-fs: 4.2.10 jest-circus: 29.3.0 @@ -23168,7 +23328,7 @@ packages: babel-jest: 29.3.0_@babel+core@7.20.12 chalk: 4.1.2 ci-info: 3.7.0 - deepmerge: 4.2.2 + deepmerge: 4.3.0 glob: 7.2.3 graceful-fs: 4.2.10 jest-circus: 29.3.0 @@ -23206,7 +23366,7 @@ packages: babel-jest: 29.3.1_@babel+core@7.20.12 chalk: 4.1.2 ci-info: 3.7.0 - deepmerge: 4.2.2 + deepmerge: 4.3.0 glob: 7.2.3 graceful-fs: 4.2.10 jest-circus: 29.3.1 @@ -23245,7 +23405,7 @@ packages: babel-jest: 29.3.1_@babel+core@7.20.12 chalk: 4.1.2 ci-info: 3.7.0 - deepmerge: 4.2.2 + deepmerge: 4.3.0 glob: 7.2.3 graceful-fs: 4.2.10 jest-circus: 29.3.1 @@ -23536,7 +23696,7 @@ packages: graceful-fs: 4.2.10 jest-regex-util: 29.2.0 jest-util: 29.2.1 - jest-worker: 29.3.0 + jest-worker: 29.3.1 micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: @@ -24041,7 +24201,7 @@ packages: jest-runtime: 29.3.0 jest-util: 29.2.1 jest-watcher: 29.2.2 - jest-worker: 29.3.0 + jest-worker: 29.3.1 p-limit: 3.1.0 source-map-support: 0.5.13 transitivePeerDependencies: @@ -24210,9 +24370,9 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@babel/core': 7.20.12 - '@babel/generator': 7.20.7 + '@babel/generator': 7.20.14 '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12 - '@babel/traverse': 7.20.12 + '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 @@ -24240,9 +24400,9 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@babel/core': 7.20.12 - '@babel/generator': 7.20.7 + '@babel/generator': 7.20.14 '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12 - '@babel/traverse': 7.20.12 + '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 '@jest/expect-utils': 28.1.1 '@jest/transform': 28.1.1 @@ -24271,10 +24431,10 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.20.12 - '@babel/generator': 7.20.7 + '@babel/generator': 7.20.14 '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.12 '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12 - '@babel/traverse': 7.20.12 + '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 '@jest/expect-utils': 29.2.2 '@jest/transform': 29.3.0 @@ -24303,10 +24463,10 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.20.12 - '@babel/generator': 7.20.7 + '@babel/generator': 7.20.14 '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.12 '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12 - '@babel/traverse': 7.20.12 + '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 '@jest/expect-utils': 29.3.1 '@jest/transform': 29.3.1 @@ -24548,16 +24708,6 @@ packages: supports-color: 8.1.1 dev: true - /jest-worker/29.3.0: - resolution: {integrity: sha512-rP8LYClB5NCWW0p8GdQT9vRmZNrDmjypklEYZuGCIU5iNviVWCZK5MILS3rQwD0FY1u96bY7b+KoU17DdZy6Ww==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@types/node': 18.11.10 - jest-util: 29.3.1 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: true - /jest-worker/29.3.1: resolution: {integrity: sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -24766,7 +24916,7 @@ packages: engines: {node: '>=12.0.0'} hasBin: true dependencies: - '@babel/parser': 7.20.7 + '@babel/parser': 7.20.15 '@types/markdown-it': 12.2.3 bluebird: 3.7.2 catharsis: 0.9.0 @@ -26172,7 +26322,7 @@ packages: prop-types: ^15.0.0 react: ^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 prop-types: 15.8.1 react: 18.2.0 tiny-warning: 1.0.3 @@ -26848,6 +26998,17 @@ packages: dependencies: whatwg-url: 5.0.0 + /node-fetch/2.6.9: + resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + /node-fetch/3.3.0: resolution: {integrity: sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -26975,7 +27136,7 @@ packages: engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.9.0 + is-core-module: 2.11.0 semver: 7.3.8 validate-npm-package-license: 3.0.4 dev: true @@ -27923,6 +28084,16 @@ packages: postcss: 8.4.20 postcss-selector-parser: 6.0.10 postcss-value-parser: 4.2.0 + dev: true + + /postcss-calc/8.2.4_postcss@8.4.21: + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} + peerDependencies: + postcss: ^8.2.2 + dependencies: + postcss: 8.4.21 + postcss-selector-parser: 6.0.10 + postcss-value-parser: 4.2.0 /postcss-cli/9.1.0_postcss@8.4.14: resolution: {integrity: sha512-zvDN2ADbWfza42sAnj+O2uUWyL0eRL1V+6giM2vi4SqTR3gTYy8XzcpfwccayF2szcUif0HMmXiEaDv9iEhcpw==} @@ -27972,6 +28143,19 @@ packages: colord: 2.9.2 postcss: 8.4.20 postcss-value-parser: 4.2.0 + dev: true + + /postcss-colormin/5.3.0_postcss@8.4.21: + resolution: {integrity: sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.4 + caniuse-api: 3.0.0 + colord: 2.9.2 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 /postcss-convert-values/5.1.2_postcss@8.4.14: resolution: {integrity: sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==} @@ -28004,6 +28188,17 @@ packages: browserslist: 4.21.4 postcss: 8.4.20 postcss-value-parser: 4.2.0 + dev: true + + /postcss-convert-values/5.1.3_postcss@8.4.21: + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.4 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 /postcss-discard-comments/5.1.2_postcss@8.4.14: resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} @@ -28021,6 +28216,15 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.20 + dev: true + + /postcss-discard-comments/5.1.2_postcss@8.4.21: + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 /postcss-discard-duplicates/5.1.0_postcss@8.4.14: resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} @@ -28038,6 +28242,15 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.20 + dev: true + + /postcss-discard-duplicates/5.1.0_postcss@8.4.21: + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 /postcss-discard-empty/5.1.1_postcss@8.4.14: resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} @@ -28055,6 +28268,15 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.20 + dev: true + + /postcss-discard-empty/5.1.1_postcss@8.4.21: + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 /postcss-discard-overridden/5.1.0_postcss@8.4.14: resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} @@ -28072,23 +28294,32 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.20 + dev: true - /postcss-discard-unused/5.1.0_postcss@8.4.20: + /postcss-discard-overridden/5.1.0_postcss@8.4.21: + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + + /postcss-discard-unused/5.1.0_postcss@8.4.21: resolution: {integrity: sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.20 + postcss: 8.4.21 postcss-selector-parser: 6.0.10 dev: true - /postcss-flexbugs-fixes/5.0.2_postcss@8.4.20: + /postcss-flexbugs-fixes/5.0.2_postcss@8.4.21: resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==} peerDependencies: postcss: ^8.1.4 dependencies: - postcss: 8.4.20 + postcss: 8.4.21 dev: false /postcss-import-resolver/2.0.0: @@ -28142,7 +28373,7 @@ packages: yaml: 1.10.2 dev: true - /postcss-loader/5.3.0_qxxfhhrl3yknjjmta266mo3u64: + /postcss-loader/5.3.0_6jdsrmfenkuhhw3gx4zvjlznce: resolution: {integrity: sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -28151,7 +28382,7 @@ packages: dependencies: cosmiconfig: 7.0.1 klona: 2.0.5 - postcss: 8.4.20 + postcss: 8.4.21 semver: 7.3.8 webpack: 5.75.0 dev: false @@ -28170,14 +28401,14 @@ packages: webpack: 5.73.0 dev: true - /postcss-merge-idents/5.1.1_postcss@8.4.20: + /postcss-merge-idents/5.1.1_postcss@8.4.21: resolution: {integrity: sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - cssnano-utils: 3.1.0_postcss@8.4.20 - postcss: 8.4.20 + cssnano-utils: 3.1.0_postcss@8.4.21 + postcss: 8.4.21 postcss-value-parser: 4.2.0 dev: true @@ -28212,6 +28443,17 @@ packages: postcss: 8.4.20 postcss-value-parser: 4.2.0 stylehacks: 5.1.1_postcss@8.4.20 + dev: true + + /postcss-merge-longhand/5.1.7_postcss@8.4.21: + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + stylehacks: 5.1.1_postcss@8.4.21 /postcss-merge-rules/5.1.2_postcss@8.4.14: resolution: {integrity: sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==} @@ -28250,6 +28492,19 @@ packages: cssnano-utils: 3.1.0_postcss@8.4.20 postcss: 8.4.20 postcss-selector-parser: 6.0.10 + dev: true + + /postcss-merge-rules/5.1.3_postcss@8.4.21: + resolution: {integrity: sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.4 + caniuse-api: 3.0.0 + cssnano-utils: 3.1.0_postcss@8.4.21 + postcss: 8.4.21 + postcss-selector-parser: 6.0.10 /postcss-minify-font-values/5.1.0_postcss@8.4.14: resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} @@ -28269,6 +28524,16 @@ packages: dependencies: postcss: 8.4.20 postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-font-values/5.1.0_postcss@8.4.21: + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 /postcss-minify-gradients/5.1.1_postcss@8.4.14: resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} @@ -28292,6 +28557,18 @@ packages: cssnano-utils: 3.1.0_postcss@8.4.20 postcss: 8.4.20 postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-gradients/5.1.1_postcss@8.4.21: + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + colord: 2.9.2 + cssnano-utils: 3.1.0_postcss@8.4.21 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 /postcss-minify-params/5.1.3_postcss@8.4.14: resolution: {integrity: sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==} @@ -28327,6 +28604,18 @@ packages: cssnano-utils: 3.1.0_postcss@8.4.20 postcss: 8.4.20 postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-params/5.1.4_postcss@8.4.21: + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.4 + cssnano-utils: 3.1.0_postcss@8.4.21 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 /postcss-minify-selectors/5.2.1_postcss@8.4.14: resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} @@ -28346,43 +28635,53 @@ packages: dependencies: postcss: 8.4.20 postcss-selector-parser: 6.0.10 + dev: true - /postcss-modules-extract-imports/3.0.0_postcss@8.4.20: + /postcss-minify-selectors/5.2.1_postcss@8.4.21: + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-selector-parser: 6.0.10 + + /postcss-modules-extract-imports/3.0.0_postcss@8.4.21: resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.20 + postcss: 8.4.21 - /postcss-modules-local-by-default/4.0.0_postcss@8.4.20: + /postcss-modules-local-by-default/4.0.0_postcss@8.4.21: resolution: {integrity: sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0_postcss@8.4.20 - postcss: 8.4.20 + icss-utils: 5.1.0_postcss@8.4.21 + postcss: 8.4.21 postcss-selector-parser: 6.0.10 postcss-value-parser: 4.2.0 - /postcss-modules-scope/3.0.0_postcss@8.4.20: + /postcss-modules-scope/3.0.0_postcss@8.4.21: resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.20 + postcss: 8.4.21 postcss-selector-parser: 6.0.10 - /postcss-modules-values/4.0.0_postcss@8.4.20: + /postcss-modules-values/4.0.0_postcss@8.4.21: resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0_postcss@8.4.20 - postcss: 8.4.20 + icss-utils: 5.1.0_postcss@8.4.21 + postcss: 8.4.21 /postcss-nested/5.0.6_postcss@8.4.14: resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==, registry: https://registry.npmjs.com/, tarball: https://registry.npmjs.com/postcss-nested/-/postcss-nested-5.0.6.tgz} @@ -28420,6 +28719,15 @@ packages: postcss: ^8.2.15 dependencies: postcss: 8.4.20 + dev: true + + /postcss-normalize-charset/5.1.0_postcss@8.4.21: + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 /postcss-normalize-display-values/5.1.0_postcss@8.4.14: resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} @@ -28439,6 +28747,16 @@ packages: dependencies: postcss: 8.4.20 postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-display-values/5.1.0_postcss@8.4.21: + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 /postcss-normalize-positions/5.1.1_postcss@8.4.14: resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} @@ -28458,6 +28776,16 @@ packages: dependencies: postcss: 8.4.20 postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-positions/5.1.1_postcss@8.4.21: + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 /postcss-normalize-repeat-style/5.1.1_postcss@8.4.14: resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} @@ -28477,6 +28805,16 @@ packages: dependencies: postcss: 8.4.20 postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-repeat-style/5.1.1_postcss@8.4.21: + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 /postcss-normalize-string/5.1.0_postcss@8.4.14: resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} @@ -28496,6 +28834,16 @@ packages: dependencies: postcss: 8.4.20 postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-string/5.1.0_postcss@8.4.21: + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 /postcss-normalize-timing-functions/5.1.0_postcss@8.4.14: resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} @@ -28515,6 +28863,16 @@ packages: dependencies: postcss: 8.4.20 postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-timing-functions/5.1.0_postcss@8.4.21: + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 /postcss-normalize-unicode/5.1.0_postcss@8.4.14: resolution: {integrity: sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==} @@ -28547,6 +28905,17 @@ packages: browserslist: 4.21.4 postcss: 8.4.20 postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-unicode/5.1.1_postcss@8.4.21: + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.4 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 /postcss-normalize-url/5.1.0_postcss@8.4.14: resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} @@ -28568,6 +28937,17 @@ packages: normalize-url: 6.1.0 postcss: 8.4.20 postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-url/5.1.0_postcss@8.4.21: + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + normalize-url: 6.1.0 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 /postcss-normalize-whitespace/5.1.1_postcss@8.4.14: resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} @@ -28587,6 +28967,16 @@ packages: dependencies: postcss: 8.4.20 postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-whitespace/5.1.1_postcss@8.4.21: + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 /postcss-ordered-values/5.1.3_postcss@8.4.14: resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} @@ -28608,14 +28998,25 @@ packages: cssnano-utils: 3.1.0_postcss@8.4.20 postcss: 8.4.20 postcss-value-parser: 4.2.0 + dev: true - /postcss-reduce-idents/5.2.0_postcss@8.4.20: + /postcss-ordered-values/5.1.3_postcss@8.4.21: + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-utils: 3.1.0_postcss@8.4.21 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + + /postcss-reduce-idents/5.2.0_postcss@8.4.21: resolution: {integrity: sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.20 + postcss: 8.4.21 postcss-value-parser: 4.2.0 dev: true @@ -28650,6 +29051,17 @@ packages: browserslist: 4.21.4 caniuse-api: 3.0.0 postcss: 8.4.20 + dev: true + + /postcss-reduce-initial/5.1.1_postcss@8.4.21: + resolution: {integrity: sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.4 + caniuse-api: 3.0.0 + postcss: 8.4.21 /postcss-reduce-transforms/5.1.0_postcss@8.4.14: resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} @@ -28669,6 +29081,16 @@ packages: dependencies: postcss: 8.4.20 postcss-value-parser: 4.2.0 + dev: true + + /postcss-reduce-transforms/5.1.0_postcss@8.4.21: + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 /postcss-reporter/7.0.5_postcss@8.4.14: resolution: {integrity: sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA==} @@ -28688,13 +29110,13 @@ packages: cssesc: 3.0.0 util-deprecate: 1.0.2 - /postcss-sort-media-queries/4.2.1_postcss@8.4.20: + /postcss-sort-media-queries/4.2.1_postcss@8.4.21: resolution: {integrity: sha512-9VYekQalFZ3sdgcTjXMa0dDjsfBVHXlraYJEMiOJ/2iMmI2JGCMavP16z3kWOaRu8NSaJCTgVpB/IVpH5yT9YQ==} engines: {node: '>=10.0.0'} peerDependencies: postcss: ^8.4.4 dependencies: - postcss: 8.4.20 + postcss: 8.4.21 sort-css-media-queries: 2.0.4 dev: true @@ -28718,6 +29140,17 @@ packages: postcss: 8.4.20 postcss-value-parser: 4.2.0 svgo: 2.8.0 + dev: true + + /postcss-svgo/5.1.0_postcss@8.4.21: + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + svgo: 2.8.0 /postcss-unique-selectors/5.1.1_postcss@8.4.14: resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} @@ -28737,6 +29170,16 @@ packages: dependencies: postcss: 8.4.20 postcss-selector-parser: 6.0.10 + dev: true + + /postcss-unique-selectors/5.1.1_postcss@8.4.21: + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-selector-parser: 6.0.10 /postcss-url/10.1.3_postcss@8.4.20: resolution: {integrity: sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==} @@ -28754,13 +29197,13 @@ packages: /postcss-value-parser/4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - /postcss-zindex/5.1.0_postcss@8.4.20: + /postcss-zindex/5.1.0_postcss@8.4.21: resolution: {integrity: sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.20 + postcss: 8.4.21 dev: true /postcss/8.4.14: @@ -28787,6 +29230,15 @@ packages: nanoid: 3.3.4 picocolors: 1.0.0 source-map-js: 1.0.2 + dev: true + + /postcss/8.4.21: + resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.4 + picocolors: 1.0.0 + source-map-js: 1.0.2 /postgres-array/2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} @@ -29602,7 +30054,7 @@ packages: react: ^16.6.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 invariant: 2.2.4 prop-types: 15.8.1 react: 18.2.0 @@ -29650,7 +30102,7 @@ packages: react-loadable: '*' webpack: '>=4.41.1 || 5.x' dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 react-loadable: /@docusaurus/react-loadable/5.5.2_react@18.2.0 webpack: 5.73.0 dev: true @@ -29674,7 +30126,7 @@ packages: react: '>=15' react-router: '>=5' dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 react: 18.2.0 react-router: 5.3.3_react@18.2.0 dev: true @@ -29684,7 +30136,7 @@ packages: peerDependencies: react: '>=15' dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 history: 4.10.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -29699,7 +30151,7 @@ packages: peerDependencies: react: '>=15' dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 history: 4.10.1 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -29732,7 +30184,7 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 react: 18.2.0 use-composed-ref: 1.3.0_react@18.2.0 use-latest: 1.2.1_react@18.2.0 @@ -29879,18 +30331,18 @@ packages: redis-errors: 1.2.0 dev: true - /redux-thunk/2.4.2_redux@4.2.0: + /redux-thunk/2.4.2_redux@4.2.1: resolution: {integrity: sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==} peerDependencies: redux: ^4 dependencies: - redux: 4.2.0 + redux: 4.2.1 dev: false - /redux/4.2.0: - resolution: {integrity: sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==} + /redux/4.2.1: + resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 dev: false /reflect-metadata/0.1.13: @@ -29921,7 +30373,7 @@ packages: /regenerator-transform/0.15.0: resolution: {integrity: sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==} dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 /regexp.prototype.flags/1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} @@ -30011,7 +30463,7 @@ packages: /relay-runtime/12.0.0: resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 fbjs: 3.0.4 invariant: 2.2.4 transitivePeerDependencies: @@ -30396,7 +30848,7 @@ packages: dependencies: find-up: 5.0.0 picocolors: 1.0.0 - postcss: 8.4.20 + postcss: 8.4.21 strip-json-comments: 3.1.1 dev: true @@ -31045,7 +31497,7 @@ packages: peerDependencies: solid-js: ^1.3 dependencies: - '@babel/generator': 7.20.7 + '@babel/generator': 7.20.14 '@babel/helper-module-imports': 7.18.6 '@babel/types': 7.20.7 solid-js: 1.6.6 @@ -31728,6 +32180,17 @@ packages: browserslist: 4.21.4 postcss: 8.4.20 postcss-selector-parser: 6.0.10 + dev: true + + /stylehacks/5.1.1_postcss@8.4.21: + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.4 + postcss: 8.4.21 + postcss-selector-parser: 6.0.10 /stylis/4.1.3: resolution: {integrity: sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==} @@ -32177,7 +32640,7 @@ packages: dependencies: http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 - node-fetch: 2.6.7 + node-fetch: 2.6.9 stream-events: 1.0.5 uuid: 9.0.0 transitivePeerDependencies: @@ -33649,8 +34112,8 @@ packages: resolution: {integrity: sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==} dev: true - /value-or-promise/1.0.11: - resolution: {integrity: sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==} + /value-or-promise/1.0.12: + resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==} engines: {node: '>=12'} dev: false @@ -33827,7 +34290,7 @@ packages: optional: true dependencies: esbuild: 0.15.16 - postcss: 8.4.20 + postcss: 8.4.21 resolve: 1.22.1 rollup: 2.79.1 optionalDependencies: @@ -34739,8 +35202,8 @@ packages: resolution: {integrity: sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==} dev: true - /xstate/4.35.2: - resolution: {integrity: sha512-5X7EyJv5OHHtGQwN7DsmCAbSnDs3Mxl1cXQ4PVaLwi+7p/RRapERnd1dFyHjYin+KQoLLfuXpl1dPBThgyIGNg==} + /xstate/4.35.4: + resolution: {integrity: sha512-mqRBYHhljP1xIItI4xnSQNHEv6CKslSM1cOGmvhmxeoDPAZgNbhSUYAL5N6DZIxRfpYY+M+bSm3mUFHD63iuvg==} dev: false /xtend/4.0.2: diff --git a/turbo.json b/turbo.json index c3cd9745..a88874f0 100644 --- a/turbo.json +++ b/turbo.json @@ -25,6 +25,10 @@ "dependsOn": ["^build"], "outputs": ["lib/**", "providers/**", "*.js", "*.d.ts", "*.d.ts.map"] }, + "@auth/sveltekit#build": { + "dependsOn": ["^build"], + "outputs": ["client.*", "index.*"] + }, "clean": { "cache": false },