diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index a5b1ca7..667b74d 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -26,5 +26,4 @@ jobs: uses: ./.github/workflows/publish.yml with: directory: api - dockerfile: api/Dockerfile imageName: ghcr.io/aldahick/rex-api diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 4091206..3d39266 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -2,9 +2,6 @@ name: Publish on: workflow_call: inputs: - dockerfile: - required: true - type: string directory: required: true type: string @@ -31,6 +28,7 @@ jobs: with: node-version-file: .nvmrc - run: npm i --no-save @athenajs/react-utils + if: ${{ inputs.directory == 'web' }} - uses: docker/setup-qemu-action@v3 if: ${{ matrix.platform != 'amd64' }} with: @@ -49,7 +47,7 @@ jobs: id: build uses: docker/build-push-action@v5 with: - file: ${{ inputs.dockerfile }} + file: ${{ inputs.directory }}/Dockerfile context: . platforms: linux/${{ matrix.platform }} outputs: type=image,name=${{ inputs.imageName }},push-by-digest=true,name-canonical=true,push=true diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index dd3ec31..ff62f77 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -19,7 +19,11 @@ jobs: version: 9 - run: pnpm install working-directory: ${{ inputs.directory }} - - run: pnpm build + - name: Build sdk + run: pnpm build + working-directory: sdk + - name: Build ${{ inputs.directory }} + run: pnpm build working-directory: ${{ inputs.directory }} - run: pnpm lint working-directory: ${{ inputs.directory }} diff --git a/.github/workflows/web.yml b/.github/workflows/web.yml index 29be9f2..bbec583 100644 --- a/.github/workflows/web.yml +++ b/.github/workflows/web.yml @@ -26,5 +26,4 @@ jobs: uses: ./.github/workflows/publish.yml with: directory: web - dockerfile: node_modules/@athenajs/react-utils/Dockerfile imageName: ghcr.io/aldahick/rex-web diff --git a/.gitignore b/.gitignore index 42aa8b8..8e804ba 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ +.cache .env *.log api/media +build coverage dist google-cloud-credentials.json diff --git a/README.md b/README.md index 7f29cee..8cbab4a 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ See the README files in [`api`](./api/README.md) and [`web`](./web/README.md) fo ### Changing GraphQL schema -To generate new TypeScript types based on changes to the [GraphQL schema](./gql/), do `pnpm generate`. You can run this in either package directory, or the root (which runs it for both `api` and `web`). +To generate new TypeScript types based on changes to the [GraphQL schema](./gql/), do `pnpm generate` in `./sdk`. ## Deployment diff --git a/api/Dockerfile b/api/Dockerfile index dca65f0..39a35b2 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -4,12 +4,18 @@ FROM node:20-alpine AS base WORKDIR /rex RUN npm i -g pnpm@latest COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ +COPY sdk/package.json ./sdk/ COPY api/package.json ./api/ FROM base AS builder RUN pnpm install --frozen-lockfile +WORKDIR /rex/sdk +COPY sdk/tsconfig.json ./ +COPY sdk/src src +RUN pnpm build:ci + WORKDIR /rex/api COPY api/tsconfig.json ./ COPY api/src src @@ -19,8 +25,10 @@ FROM base AS server RUN pnpm install --prod --frozen-lockfile -WORKDIR /rex/api -COPY --from=builder /rex/api/dist dist +COPY --from=builder /rex/sdk/dist sdk/dist +COPY --from=builder /rex/api/dist api/dist COPY gql gql -ENV GRAPHQL_SCHEMA_DIRS=/rex/api/gql +ENV GRAPHQL_SCHEMA_DIRS=/rex/gql + +WORKDIR /rex/api CMD node --enable-source-maps dist/main.js diff --git a/api/package.json b/api/package.json index 28fd0c4..9491315 100644 --- a/api/package.json +++ b/api/package.json @@ -1,6 +1,6 @@ { "name": "@aldahick/rex-api", - "version": "0.5.0", + "version": "1.0.1", "description": "Personal API server", "main": "dist/main.js", "type": "module", @@ -27,7 +27,8 @@ }, "homepage": "https://github.com/aldahick/rex#readme", "dependencies": { - "@athenajs/core": "^1.2.2", + "@aldahick/rex-sdk": "workspace:*", + "@athenajs/core": "^1.2.3", "@google-cloud/run": "^1.3.0", "axios": "^1.7.2", "bcrypt": "^5.1.1", diff --git a/api/src/config.ts b/api/src/config.ts index 4f8b528..5dffc5b 100644 --- a/api/src/config.ts +++ b/api/src/config.ts @@ -13,19 +13,9 @@ export class RexConfig extends BaseConfig { readonly graphqlSchemaDirs = this.required("GRAPHQL_SCHEMA_DIRS").split(","); readonly google = { - cloud: { - projectId: this.optional("GOOGLE_CLOUD_PROJECT_ID"), - credentialsPath: this.optional("GOOGLE_CLOUD_CREDENTIALS_PATH"), - }, oauth: { - mobile: { - clientId: this.optional("GOOGLE_CLIENT_ID_MOBILE"), - clientSecret: this.optional("GOOGLE_CLIENT_SECRET_MOBILE"), - }, - web: { - clientId: this.optional("GOOGLE_CLIENT_ID_WEB"), - clientSecret: this.optional("GOOGLE_CLIENT_SECRET_WEB"), - }, + clientId: this.optional("GOOGLE_CLIENT_ID"), + clientSecret: this.optional("GOOGLE_CLIENT_SECRET"), }, }; @@ -49,14 +39,6 @@ export class RexConfig extends BaseConfig { this.optional("MEDIA_SHAREX_URL") ?? `${this.http.url}/v1/sharex`, }; - readonly mzk = { - runner: { - dir: this.optional("MZK_RUNNER_DIR"), - image: this.optional("MZK_RUNNER_IMAGE"), - platform: this.required("MZK_RUNNER_PLATFORM"), - }, - }; - readonly postgresUrl = this.required("POSTGRES_URL"); readonly redisUrl = this.required("REDIS_URL"); diff --git a/api/src/graphql.sdk.ts b/api/src/graphql.sdk.ts deleted file mode 100644 index 9ea825d..0000000 --- a/api/src/graphql.sdk.ts +++ /dev/null @@ -1,453 +0,0 @@ -import { GraphQLClient, RequestOptions } from "graphql-request"; -import { gql } from "graphql-request"; -type Maybe = T | undefined; -type InputMaybe = T | undefined; -type Exact = { [K in keyof T]: T[K] }; -type MakeOptional = Omit & { - [SubKey in K]?: Maybe; -}; -type MakeMaybe = Omit & { - [SubKey in K]: Maybe; -}; -type MakeEmpty = { - [_ in K]?: never; -}; -type Incremental = - | T - | { - [P in keyof T]?: P extends " $fragmentName" | "__typename" ? T[P] : never; - }; -type GraphQLClientRequestHeaders = RequestOptions["requestHeaders"]; -/** All built-in and custom scalars, mapped to their actual values */ -type Scalars = { - ID: { input: string; output: string }; - String: { input: string; output: string }; - Boolean: { input: boolean; output: boolean }; - Int: { input: number; output: number }; - Float: { input: number; output: number }; - DateTime: { input: Date; output: Date }; -}; - -enum IAuthClientType { - Mobile = "MOBILE", - Web = "WEB", -} - -enum IAuthPermission { - AdminMedia = "ADMIN_MEDIA", - AdminNotes = "ADMIN_NOTES", - AdminRoles = "ADMIN_ROLES", - AdminSteam = "ADMIN_STEAM", - AdminUsers = "ADMIN_USERS", - Media = "MEDIA", - Notes = "NOTES", - Projects = "PROJECTS", -} - -type IAuthToken = { - __typename?: "AuthToken"; - token: Scalars["String"]["output"]; - user: IUser; - userId: Scalars["ID"]["output"]; -}; - -type IConfig = { - __typename?: "Config"; - createAnonymousUsers: Scalars["Boolean"]["output"]; - mediaDataLimit?: Maybe; -}; - -type IMediaItem = { - __typename?: "MediaItem"; - children?: Maybe; - key: Scalars["String"]["output"]; - type: IMediaItemType; -}; - -enum IMediaItemType { - Directory = "DIRECTORY", - File = "FILE", - Series = "SERIES", -} - -type IMutation = { - __typename?: "Mutation"; - addMediaDownload: IProgress; - addRoleToUser: Scalars["Boolean"]["output"]; - createAuthToken: IAuthToken; - createAuthTokenGoogle: IAuthToken; - createAuthTokenLocal: IAuthToken; - createMedia: Scalars["Boolean"]["output"]; - createMediaUpload: Scalars["String"]["output"]; - createNote: INote; - createRole: IRole; - createUser: IUser; - deleteMedia: Scalars["Boolean"]["output"]; - deleteProjectConfig: Scalars["Boolean"]["output"]; - deleteRole: Scalars["Boolean"]["output"]; - fetchSteamGames: IProgress; - removeNote: Scalars["Boolean"]["output"]; - setUserPassword: Scalars["Boolean"]["output"]; - updateNoteBody: Scalars["Boolean"]["output"]; - updateProjectConfig: Scalars["Boolean"]["output"]; - updateRole: Scalars["Boolean"]["output"]; - updateRolePermissions: Scalars["Boolean"]["output"]; -}; - -type IMutationAddMediaDownloadArgs = { - destinationKey: Scalars["String"]["input"]; - sync?: InputMaybe; - url: Scalars["String"]["input"]; -}; - -type IMutationAddRoleToUserArgs = { - roleId: Scalars["ID"]["input"]; - userId: Scalars["ID"]["input"]; -}; - -type IMutationCreateAuthTokenArgs = { - userId: Scalars["String"]["input"]; -}; - -type IMutationCreateAuthTokenGoogleArgs = { - clientType: IAuthClientType; - googleIdToken: Scalars["String"]["input"]; -}; - -type IMutationCreateAuthTokenLocalArgs = { - password: Scalars["String"]["input"]; - username: Scalars["String"]["input"]; -}; - -type IMutationCreateMediaArgs = { - data: Scalars["String"]["input"]; - key: Scalars["String"]["input"]; -}; - -type IMutationCreateMediaUploadArgs = { - key: Scalars["String"]["input"]; -}; - -type IMutationCreateNoteArgs = { - title: Scalars["String"]["input"]; -}; - -type IMutationCreateRoleArgs = { - name: Scalars["String"]["input"]; -}; - -type IMutationCreateUserArgs = { - email: Scalars["String"]["input"]; - password?: InputMaybe; - username?: InputMaybe; -}; - -type IMutationDeleteMediaArgs = { - key: Scalars["String"]["input"]; -}; - -type IMutationDeleteProjectConfigArgs = { - adapterType: IProjectAdapterType; -}; - -type IMutationDeleteRoleArgs = { - id: Scalars["ID"]["input"]; -}; - -type IMutationRemoveNoteArgs = { - id: Scalars["ID"]["input"]; -}; - -type IMutationSetUserPasswordArgs = { - password: Scalars["String"]["input"]; - userId: Scalars["ID"]["input"]; -}; - -type IMutationUpdateNoteBodyArgs = { - body: Scalars["String"]["input"]; - id: Scalars["ID"]["input"]; -}; - -type IMutationUpdateProjectConfigArgs = { - params: IUpdateProjectConfigParams; -}; - -type IMutationUpdateRoleArgs = { - id: Scalars["ID"]["input"]; - name: Scalars["String"]["input"]; -}; - -type IMutationUpdateRolePermissionsArgs = { - id: Scalars["ID"]["input"]; - permissions: IAuthPermission[]; -}; - -type INote = { - __typename?: "Note"; - body: Scalars["String"]["output"]; - createdAt: Scalars["DateTime"]["output"]; - id: Scalars["ID"]["output"]; - title: Scalars["String"]["output"]; -}; - -type IProgress = { - __typename?: "Progress"; - action: Scalars["String"]["output"]; - createdAt: Scalars["DateTime"]["output"]; - id: Scalars["ID"]["output"]; - logs: IProgressLog[]; - status: IProgressStatus; -}; - -type IProgressLog = { - __typename?: "ProgressLog"; - createdAt: Scalars["DateTime"]["output"]; - text: Scalars["String"]["output"]; -}; - -enum IProgressStatus { - Complete = "COMPLETE", - Created = "CREATED", - Errored = "ERRORED", - InProgress = "IN_PROGRESS", -} - -type IProject = { - __typename?: "Project"; - boards: IProjectBoard[]; - config: IProjectConfig; - issues: IProjectIssue[]; - sprints: IProjectSprint[]; -}; - -type IProjectIssuesArgs = { - sprintId: Scalars["Int"]["input"]; -}; - -type IProjectSprintsArgs = { - boardId: Scalars["Int"]["input"]; -}; - -enum IProjectAdapterType { - Jira = "JIRA", -} - -type IProjectBoard = { - __typename?: "ProjectBoard"; - id: Scalars["Int"]["output"]; - name: Scalars["String"]["output"]; -}; - -type IProjectConfig = { - __typename?: "ProjectConfig"; - adapterType: IProjectAdapterType; - apiToken: Scalars["String"]["output"]; - email: Scalars["String"]["output"]; - host: Scalars["String"]["output"]; -}; - -type IProjectIssue = { - __typename?: "ProjectIssue"; - id: Scalars["ID"]["output"]; - implementer?: Maybe; - key: Scalars["String"]["output"]; - sprints: IProjectSprint[]; - state: Scalars["String"]["output"]; - statusDurations: IProjectIssueStatusDuration[]; - storyPoints?: Maybe; - title: Scalars["String"]["output"]; - type: Scalars["String"]["output"]; -}; - -type IProjectIssueStatusDuration = { - __typename?: "ProjectIssueStatusDuration"; - fullDuration: Scalars["Int"]["output"]; - status: Scalars["String"]["output"]; - workingDays: Scalars["Int"]["output"]; - workingDuration: Scalars["Int"]["output"]; -}; - -type IProjectSprint = { - __typename?: "ProjectSprint"; - end?: Maybe; - id: Scalars["Int"]["output"]; - name: Scalars["String"]["output"]; - start?: Maybe; - state: Scalars["String"]["output"]; -}; - -type IProjectUser = { - __typename?: "ProjectUser"; - email?: Maybe; - id: Scalars["ID"]["output"]; - name: Scalars["String"]["output"]; -}; - -type IQuery = { - __typename?: "Query"; - config: IConfig; - mediaItem?: Maybe; - note: INote; - notes: INote[]; - progress: IProgress; - progresses: IProgress[]; - project: IProject; - roles: IRole[]; - steamGames: ISteamGame[]; - steamPlayer: ISteamPlayer; - steamPlayers: ISteamPlayer[]; - user: IUser; - users: IUser[]; -}; - -type IQueryMediaItemArgs = { - key: Scalars["String"]["input"]; -}; - -type IQueryNoteArgs = { - id: Scalars["ID"]["input"]; -}; - -type IQueryProgressArgs = { - id: Scalars["ID"]["input"]; -}; - -type IQueryProgressesArgs = { - ids: Scalars["ID"]["input"][]; -}; - -type IQueryProjectArgs = { - adapterType: IProjectAdapterType; -}; - -type IQuerySteamGamesArgs = { - page: Scalars["Int"]["input"]; - search: Scalars["String"]["input"]; -}; - -type IQuerySteamPlayerArgs = { - steamId64: Scalars["String"]["input"]; -}; - -type IQuerySteamPlayersArgs = { - steamIds64: Scalars["String"]["input"][]; -}; - -type IQueryUserArgs = { - id?: InputMaybe; -}; - -type IRole = { - __typename?: "Role"; - id: Scalars["ID"]["output"]; - name: Scalars["String"]["output"]; - permissions: IAuthPermission[]; -}; - -type ISteamGame = { - __typename?: "SteamGame"; - id: Scalars["Int"]["output"]; - name: Scalars["String"]["output"]; -}; - -type ISteamPlayer = { - __typename?: "SteamPlayer"; - avatarUrl: Scalars["String"]["output"]; - id: Scalars["String"]["output"]; - nickname: Scalars["String"]["output"]; - ownedGames: ISteamGame[]; - playingGame?: Maybe; - profileUrl: Scalars["String"]["output"]; -}; - -type IUpdateProjectConfigParams = { - adapterType: IProjectAdapterType; - apiToken: Scalars["String"]["input"]; - email: Scalars["String"]["input"]; - host: Scalars["String"]["input"]; -}; - -type IUser = { - __typename?: "User"; - email: Scalars["String"]["output"]; - id: Scalars["ID"]["output"]; - permissions?: Maybe; - projectConfigs: IProjectConfig[]; - roles?: Maybe; - username?: Maybe; -}; - -type IGetUsersQueryVariables = Exact<{ [key: string]: never }>; - -type IGetUsersQuery = { - __typename?: "Query"; - users: Array<{ - __typename?: "User"; - id: string; - email: string; - username?: string | undefined; - permissions?: IAuthPermission[] | undefined; - roles?: - | Array<{ - __typename?: "Role"; - id: string; - name: string; - permissions: IAuthPermission[]; - }> - | undefined; - }>; -}; - -const GetUsersDocument = gql` - query getUsers { - users { - id - email - username - permissions - roles { - id - name - permissions - } - } -} - `; - -export type SdkFunctionWrapper = ( - action: (requestHeaders?: Record) => Promise, - operationName: string, - operationType?: string, - variables?: any, -) => Promise; - -const defaultWrapper: SdkFunctionWrapper = ( - action, - _operationName, - _operationType, - _variables, -) => action(); - -export function getSdk( - client: GraphQLClient, - withWrapper: SdkFunctionWrapper = defaultWrapper, -) { - return { - getUsers( - variables?: IGetUsersQueryVariables, - requestHeaders?: GraphQLClientRequestHeaders, - ): Promise { - return withWrapper( - (wrappedRequestHeaders) => - client.request(GetUsersDocument, variables, { - ...requestHeaders, - ...wrappedRequestHeaders, - }), - "getUsers", - "query", - variables, - ); - }, - }; -} -export type Sdk = ReturnType; diff --git a/api/src/graphql.ts b/api/src/graphql.ts deleted file mode 100644 index 9418b4b..0000000 --- a/api/src/graphql.ts +++ /dev/null @@ -1,378 +0,0 @@ -export type Maybe = T | undefined; -export type InputMaybe = T | undefined; -export type Exact = { - [K in keyof T]: T[K]; -}; -export type MakeOptional = Omit & { - [SubKey in K]?: Maybe; -}; -export type MakeMaybe = Omit & { - [SubKey in K]: Maybe; -}; -export type MakeEmpty< - T extends { [key: string]: unknown }, - K extends keyof T, -> = { [_ in K]?: never }; -export type Incremental = - | T - | { - [P in keyof T]?: P extends " $fragmentName" | "__typename" ? T[P] : never; - }; -/** All built-in and custom scalars, mapped to their actual values */ -export type Scalars = { - ID: { input: string; output: string }; - String: { input: string; output: string }; - Boolean: { input: boolean; output: boolean }; - Int: { input: number; output: number }; - Float: { input: number; output: number }; - DateTime: { input: Date; output: Date }; -}; - -export enum IAuthClientType { - Mobile = "MOBILE", - Web = "WEB", -} - -export enum IAuthPermission { - AdminMedia = "ADMIN_MEDIA", - AdminNotes = "ADMIN_NOTES", - AdminRoles = "ADMIN_ROLES", - AdminSteam = "ADMIN_STEAM", - AdminUsers = "ADMIN_USERS", - Media = "MEDIA", - Notes = "NOTES", - Projects = "PROJECTS", -} - -export type IAuthToken = { - __typename?: "AuthToken"; - token: Scalars["String"]["output"]; - user: IUser; - userId: Scalars["ID"]["output"]; -}; - -export type IConfig = { - __typename?: "Config"; - createAnonymousUsers: Scalars["Boolean"]["output"]; - mediaDataLimit?: Maybe; -}; - -export type IMediaItem = { - __typename?: "MediaItem"; - children?: Maybe; - key: Scalars["String"]["output"]; - type: IMediaItemType; -}; - -export enum IMediaItemType { - Directory = "DIRECTORY", - File = "FILE", - Series = "SERIES", -} - -export type IMutation = { - __typename?: "Mutation"; - addMediaDownload: IProgress; - addRoleToUser: Scalars["Boolean"]["output"]; - createAuthToken: IAuthToken; - createAuthTokenGoogle: IAuthToken; - createAuthTokenLocal: IAuthToken; - createMedia: Scalars["Boolean"]["output"]; - createMediaUpload: Scalars["String"]["output"]; - createNote: INote; - createRole: IRole; - createUser: IUser; - deleteMedia: Scalars["Boolean"]["output"]; - deleteProjectConfig: Scalars["Boolean"]["output"]; - deleteRole: Scalars["Boolean"]["output"]; - fetchSteamGames: IProgress; - removeNote: Scalars["Boolean"]["output"]; - setUserPassword: Scalars["Boolean"]["output"]; - updateNoteBody: Scalars["Boolean"]["output"]; - updateProjectConfig: Scalars["Boolean"]["output"]; - updateRole: Scalars["Boolean"]["output"]; - updateRolePermissions: Scalars["Boolean"]["output"]; -}; - -export type IMutationAddMediaDownloadArgs = { - destinationKey: Scalars["String"]["input"]; - sync?: InputMaybe; - url: Scalars["String"]["input"]; -}; - -export type IMutationAddRoleToUserArgs = { - roleId: Scalars["ID"]["input"]; - userId: Scalars["ID"]["input"]; -}; - -export type IMutationCreateAuthTokenArgs = { - userId: Scalars["String"]["input"]; -}; - -export type IMutationCreateAuthTokenGoogleArgs = { - clientType: IAuthClientType; - googleIdToken: Scalars["String"]["input"]; -}; - -export type IMutationCreateAuthTokenLocalArgs = { - password: Scalars["String"]["input"]; - username: Scalars["String"]["input"]; -}; - -export type IMutationCreateMediaArgs = { - data: Scalars["String"]["input"]; - key: Scalars["String"]["input"]; -}; - -export type IMutationCreateMediaUploadArgs = { - key: Scalars["String"]["input"]; -}; - -export type IMutationCreateNoteArgs = { - title: Scalars["String"]["input"]; -}; - -export type IMutationCreateRoleArgs = { - name: Scalars["String"]["input"]; -}; - -export type IMutationCreateUserArgs = { - email: Scalars["String"]["input"]; - password?: InputMaybe; - username?: InputMaybe; -}; - -export type IMutationDeleteMediaArgs = { - key: Scalars["String"]["input"]; -}; - -export type IMutationDeleteProjectConfigArgs = { - adapterType: IProjectAdapterType; -}; - -export type IMutationDeleteRoleArgs = { - id: Scalars["ID"]["input"]; -}; - -export type IMutationRemoveNoteArgs = { - id: Scalars["ID"]["input"]; -}; - -export type IMutationSetUserPasswordArgs = { - password: Scalars["String"]["input"]; - userId: Scalars["ID"]["input"]; -}; - -export type IMutationUpdateNoteBodyArgs = { - body: Scalars["String"]["input"]; - id: Scalars["ID"]["input"]; -}; - -export type IMutationUpdateProjectConfigArgs = { - params: IUpdateProjectConfigParams; -}; - -export type IMutationUpdateRoleArgs = { - id: Scalars["ID"]["input"]; - name: Scalars["String"]["input"]; -}; - -export type IMutationUpdateRolePermissionsArgs = { - id: Scalars["ID"]["input"]; - permissions: IAuthPermission[]; -}; - -export type INote = { - __typename?: "Note"; - body: Scalars["String"]["output"]; - createdAt: Scalars["DateTime"]["output"]; - id: Scalars["ID"]["output"]; - title: Scalars["String"]["output"]; -}; - -export type IProgress = { - __typename?: "Progress"; - action: Scalars["String"]["output"]; - createdAt: Scalars["DateTime"]["output"]; - id: Scalars["ID"]["output"]; - logs: IProgressLog[]; - status: IProgressStatus; -}; - -export type IProgressLog = { - __typename?: "ProgressLog"; - createdAt: Scalars["DateTime"]["output"]; - text: Scalars["String"]["output"]; -}; - -export enum IProgressStatus { - Complete = "COMPLETE", - Created = "CREATED", - Errored = "ERRORED", - InProgress = "IN_PROGRESS", -} - -export type IProject = { - __typename?: "Project"; - boards: IProjectBoard[]; - config: IProjectConfig; - issues: IProjectIssue[]; - sprints: IProjectSprint[]; -}; - -export type IProjectIssuesArgs = { - sprintId: Scalars["Int"]["input"]; -}; - -export type IProjectSprintsArgs = { - boardId: Scalars["Int"]["input"]; -}; - -export enum IProjectAdapterType { - Jira = "JIRA", -} - -export type IProjectBoard = { - __typename?: "ProjectBoard"; - id: Scalars["Int"]["output"]; - name: Scalars["String"]["output"]; -}; - -export type IProjectConfig = { - __typename?: "ProjectConfig"; - adapterType: IProjectAdapterType; - apiToken: Scalars["String"]["output"]; - email: Scalars["String"]["output"]; - host: Scalars["String"]["output"]; -}; - -export type IProjectIssue = { - __typename?: "ProjectIssue"; - id: Scalars["ID"]["output"]; - implementer?: Maybe; - key: Scalars["String"]["output"]; - sprints: IProjectSprint[]; - state: Scalars["String"]["output"]; - statusDurations: IProjectIssueStatusDuration[]; - storyPoints?: Maybe; - title: Scalars["String"]["output"]; - type: Scalars["String"]["output"]; -}; - -export type IProjectIssueStatusDuration = { - __typename?: "ProjectIssueStatusDuration"; - fullDuration: Scalars["Int"]["output"]; - status: Scalars["String"]["output"]; - workingDays: Scalars["Int"]["output"]; - workingDuration: Scalars["Int"]["output"]; -}; - -export type IProjectSprint = { - __typename?: "ProjectSprint"; - end?: Maybe; - id: Scalars["Int"]["output"]; - name: Scalars["String"]["output"]; - start?: Maybe; - state: Scalars["String"]["output"]; -}; - -export type IProjectUser = { - __typename?: "ProjectUser"; - email?: Maybe; - id: Scalars["ID"]["output"]; - name: Scalars["String"]["output"]; -}; - -export type IQuery = { - __typename?: "Query"; - config: IConfig; - mediaItem?: Maybe; - note: INote; - notes: INote[]; - progress: IProgress; - progresses: IProgress[]; - project: IProject; - roles: IRole[]; - steamGames: ISteamGame[]; - steamPlayer: ISteamPlayer; - steamPlayers: ISteamPlayer[]; - user: IUser; - users: IUser[]; -}; - -export type IQueryMediaItemArgs = { - key: Scalars["String"]["input"]; -}; - -export type IQueryNoteArgs = { - id: Scalars["ID"]["input"]; -}; - -export type IQueryProgressArgs = { - id: Scalars["ID"]["input"]; -}; - -export type IQueryProgressesArgs = { - ids: Scalars["ID"]["input"][]; -}; - -export type IQueryProjectArgs = { - adapterType: IProjectAdapterType; -}; - -export type IQuerySteamGamesArgs = { - page: Scalars["Int"]["input"]; - search: Scalars["String"]["input"]; -}; - -export type IQuerySteamPlayerArgs = { - steamId64: Scalars["String"]["input"]; -}; - -export type IQuerySteamPlayersArgs = { - steamIds64: Scalars["String"]["input"][]; -}; - -export type IQueryUserArgs = { - id?: InputMaybe; -}; - -export type IRole = { - __typename?: "Role"; - id: Scalars["ID"]["output"]; - name: Scalars["String"]["output"]; - permissions: IAuthPermission[]; -}; - -export type ISteamGame = { - __typename?: "SteamGame"; - id: Scalars["Int"]["output"]; - name: Scalars["String"]["output"]; -}; - -export type ISteamPlayer = { - __typename?: "SteamPlayer"; - avatarUrl: Scalars["String"]["output"]; - id: Scalars["String"]["output"]; - nickname: Scalars["String"]["output"]; - ownedGames: ISteamGame[]; - playingGame?: Maybe; - profileUrl: Scalars["String"]["output"]; -}; - -export type IUpdateProjectConfigParams = { - adapterType: IProjectAdapterType; - apiToken: Scalars["String"]["input"]; - email: Scalars["String"]["input"]; - host: Scalars["String"]["input"]; -}; - -export type IUser = { - __typename?: "User"; - email: Scalars["String"]["output"]; - id: Scalars["ID"]["output"]; - permissions?: Maybe; - projectConfigs: IProjectConfig[]; - roles?: Maybe; - username?: Maybe; -}; diff --git a/api/src/main.ts b/api/src/main.ts index 35c67aa..933e5ae 100644 --- a/api/src/main.ts +++ b/api/src/main.ts @@ -5,7 +5,6 @@ import "./module/config/config.resolver.js"; import "./module/generic/datetime.resolver.js"; import "./module/media/media.resolver.js"; import "./module/media/sharex.controller.js"; -import "./module/note/note.resolver.js"; import "./module/progress/progress.resolver.js"; import "./module/project/project.resolver.js"; import "./module/project/project-config.resolver.js"; diff --git a/api/src/migrations/20230607045016_init.ts b/api/src/migrations/20230607045016_init.ts index d850d27..1fb73df 100644 --- a/api/src/migrations/20230607045016_init.ts +++ b/api/src/migrations/20230607045016_init.ts @@ -1,4 +1,4 @@ -import { IProgressStatus } from "../graphql.js"; +import { IProgressStatus } from "@aldahick/rex-sdk"; import { ProgressTable } from "../model/progress.model.js"; import { RoleTable } from "../model/role.model.js"; import { UserTable } from "../model/user.model.js"; diff --git a/api/src/migrations/20240629102300_removeTranscriptions.ts b/api/src/migrations/20240629102300_removeTranscriptions.ts index 5522b92..8ab07a3 100644 --- a/api/src/migrations/20240629102300_removeTranscriptions.ts +++ b/api/src/migrations/20240629102300_removeTranscriptions.ts @@ -2,4 +2,5 @@ import { change } from "../service/database/database.migration.js"; change(async (db) => { await db.dropTable("transcriptions"); + await db.dropTable("user_notes"); }); diff --git a/api/src/model/index.ts b/api/src/model/index.ts index d10a007..7e9c0f0 100644 --- a/api/src/model/index.ts +++ b/api/src/model/index.ts @@ -4,5 +4,4 @@ export * from "./project-config.model.js"; export * from "./role.model.js"; export * from "./steam-game.model.js"; export * from "./user.model.js"; -export * from "./user-note.model.js"; export * from "./user-role.model.js"; diff --git a/api/src/model/progress.model.ts b/api/src/model/progress.model.ts index c28afce..d0d9e24 100644 --- a/api/src/model/progress.model.ts +++ b/api/src/model/progress.model.ts @@ -1,5 +1,5 @@ +import { IProgressStatus } from "@aldahick/rex-sdk"; import { Selectable } from "orchid-orm"; -import { IProgressStatus } from "../graphql.js"; import { BaseTable } from "./base.table.js"; import { ProgressLogTable } from "./progress-log.model.js"; diff --git a/api/src/model/project-config.model.ts b/api/src/model/project-config.model.ts index 0dc4f02..9dd1adb 100644 --- a/api/src/model/project-config.model.ts +++ b/api/src/model/project-config.model.ts @@ -1,5 +1,5 @@ +import { IProjectAdapterType } from "@aldahick/rex-sdk"; import { Selectable } from "orchid-orm"; -import { IProjectAdapterType } from "../graphql.js"; import { BaseTable } from "./base.table.js"; import { UserTable } from "./user.model.js"; diff --git a/api/src/model/user-note.model.ts b/api/src/model/user-note.model.ts deleted file mode 100644 index 6ff6dcb..0000000 --- a/api/src/model/user-note.model.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Selectable } from "orchid-orm"; -import { BaseTable } from "./base.table.js"; -import { UserTable } from "./user.model.js"; - -export type UserNoteModel = Selectable; -export class UserNoteTable extends BaseTable { - table = "user_notes"; - columns = this.setColumns((t) => ({ - id: t.uuid().primaryKey(), - userId: t.uuid(), - title: t.text(), - body: t.text(), - createdAt: t.timestamp(), - })); - relations = { - user: this.hasOne(() => UserTable, { - columns: ["userId"], - references: ["id"], - }), - }; -} diff --git a/api/src/model/user.model.ts b/api/src/model/user.model.ts index d97dcd7..da5e5a3 100644 --- a/api/src/model/user.model.ts +++ b/api/src/model/user.model.ts @@ -1,6 +1,5 @@ import { Selectable } from "orchid-orm"; import { BaseTable } from "./base.table.js"; -import { UserNoteTable } from "./user-note.model.js"; import { UserRoleTable } from "./user-role.model.js"; export type UserModel = Selectable; @@ -15,10 +14,6 @@ export class UserTable extends BaseTable { jiraApiToken: t.text().nullable(), })); relations = { - notes: this.hasMany(() => UserNoteTable, { - columns: ["id"], - references: ["userId"], - }), roles: this.hasMany(() => UserRoleTable, { columns: ["id"], references: ["userId"], diff --git a/api/src/module/auth/auth.context.ts b/api/src/module/auth/auth.context.ts index b495311..c9352c4 100644 --- a/api/src/module/auth/auth.context.ts +++ b/api/src/module/auth/auth.context.ts @@ -1,9 +1,9 @@ +import { IAuthPermission } from "@aldahick/rex-sdk"; import { ContextGenerator, ContextRequest, contextGenerator, } from "@athenajs/core"; -import { IAuthPermission } from "../../graphql.js"; import { UserManager } from "../user/user.manager.js"; import { AuthManager } from "./auth.manager.js"; diff --git a/api/src/module/auth/auth.resolver.ts b/api/src/module/auth/auth.resolver.ts index 7c911de..8afeb5c 100644 --- a/api/src/module/auth/auth.resolver.ts +++ b/api/src/module/auth/auth.resolver.ts @@ -1,28 +1,17 @@ -import { resolveField, resolveMutation, resolver } from "@athenajs/core"; -import { RexConfig } from "../../config.js"; import { - IAuthClientType, IAuthPermission, IAuthToken, - IMutation, - IMutationCreateAuthTokenArgs, - IMutationCreateAuthTokenGoogleArgs, - IMutationCreateAuthTokenLocalArgs, -} from "../../graphql.js"; + IAuthTokenParams, + IQuery, + IQueryAuthTokenArgs, +} from "@aldahick/rex-sdk"; +import { resolveField, resolveQuery, resolver } from "@athenajs/core"; import { GoogleAuthService } from "../../service/google/google-auth.service.js"; import { UserManager } from "../user/user.manager.js"; import { UserResolver } from "../user/user.resolver.js"; import { RexContext } from "./auth.context.js"; import { AuthManager } from "./auth.manager.js"; -const clientIdsByType: Record< - IAuthClientType, - keyof RexConfig["google"]["oauth"] -> = { - [IAuthClientType.Mobile]: "mobile", - [IAuthClientType.Web]: "web", -}; - @resolver() export class AuthResolver { constructor( @@ -32,59 +21,14 @@ export class AuthResolver { private readonly userResolver: UserResolver, ) {} - @resolveMutation() - async createAuthTokenGoogle( - root: never, - { googleIdToken, clientType }: IMutationCreateAuthTokenGoogleArgs, - ): Promise { - const googlePayload = await this.googleAuthService.getIdTokenPayload( - googleIdToken, - clientIdsByType[clientType], - ); - if (!googlePayload) { - throw new Error("Invalid Google token"); - } - const userId = await this.userManager.fetchId(googlePayload.email); - if (!userId) { - throw Error(`User not found: ${googlePayload.email}`); - } - return this.getAuthToken(userId); - } - - @resolveMutation() - async createAuthTokenLocal( + @resolveQuery() + async authToken( root: never, - { username, password }: IMutationCreateAuthTokenLocalArgs, - ): Promise { - const [user] = await this.userManager - .whereEmailOrUsername(username) - .select("id", "passwordHash"); - if (!user?.passwordHash) { - throw new Error("Invalid username/email or password"); - } - const isValid = await this.authManager.comparePassword( - password, - user.passwordHash, - ); - if (!isValid) { - throw new Error("Invalid username/email or password"); - } - return this.getAuthToken(user.id); - } - - @resolveMutation() - async createAuthToken( - root: never, - { userId }: IMutationCreateAuthTokenArgs, + { params }: IQueryAuthTokenArgs, context: RexContext, - ): Promise { - if (!(await context.isAuthorized(IAuthPermission.AdminUsers))) { - throw new Error("Forbidden"); - } - if (await this.userManager.exists(userId)) { - return this.getAuthToken(userId); - } - throw new Error(`User ${userId} not found`); + ): Promise { + const userId = await this.getUserId(params, context); + return this.getAuthToken(userId); } @resolveField("AuthToken.user", true) @@ -100,6 +44,54 @@ export class AuthResolver { }); } + private async getUserId( + { userId: actingUserId, google, local }: IAuthTokenParams, + context: RexContext, + ) { + if (actingUserId) { + if (!(await context.isAuthorized(IAuthPermission.AdminUsers))) { + throw new Error("Forbidden"); + } + if (!(await this.userManager.exists(actingUserId))) { + throw new Error(`User not found: ${actingUserId}`); + } + return actingUserId; + } + + if (google) { + const googlePayload = await this.googleAuthService.getIdTokenPayload( + google.idToken, + ); + if (!googlePayload) { + throw new Error("Invalid Google token"); + } + const userId = await this.userManager.fetchId(googlePayload.email); + if (!userId) { + throw Error(`User not found: ${googlePayload.email}`); + } + return userId; + } + + if (local) { + const [user] = await this.userManager + .whereEmailOrUsername(local.username) + .select("id", "passwordHash"); + if (!user?.passwordHash) { + throw new Error("Invalid username/email or password"); + } + const isValid = await this.authManager.comparePassword( + local.password, + user.passwordHash, + ); + if (!isValid) { + throw new Error("Invalid username/email or password"); + } + return user.id; + } + + throw new Error("One field must be provided in AuthTokenParams"); + } + private getAuthToken(userId: string): IAuthToken { return { token: this.authManager.signToken(userId), diff --git a/api/src/module/config/config.resolver.ts b/api/src/module/config/config.resolver.ts index 38e0c46..39b65f4 100644 --- a/api/src/module/config/config.resolver.ts +++ b/api/src/module/config/config.resolver.ts @@ -1,6 +1,6 @@ +import { IQuery } from "@aldahick/rex-sdk"; import { resolveQuery, resolver } from "@athenajs/core"; import { RexConfig } from "../../config.js"; -import { IQuery } from "../../graphql.js"; @resolver() export class ConfigResolver { diff --git a/api/src/module/media/media.controller.ts b/api/src/module/media/media.controller.ts index fd2422e..a36a71b 100644 --- a/api/src/module/media/media.controller.ts +++ b/api/src/module/media/media.controller.ts @@ -1,3 +1,4 @@ +import { IAuthPermission } from "@aldahick/rex-sdk"; import { HttpRequest, HttpResponse, @@ -6,7 +7,6 @@ import { post, } from "@athenajs/core"; import mime from "mime"; -import { IAuthPermission } from "../../graphql.js"; import { RexContext } from "../auth/auth.context.js"; import { UserManager } from "../user/user.manager.js"; import { MediaManager, MediaStats } from "./media.manager.js"; diff --git a/api/src/module/media/media.manager.ts b/api/src/module/media/media.manager.ts index 78533b1..f38daa8 100644 --- a/api/src/module/media/media.manager.ts +++ b/api/src/module/media/media.manager.ts @@ -7,10 +7,10 @@ import { } from "node:fs"; import path from "node:path"; import { Readable } from "node:stream"; +import { IMediaItem, IMediaItemType, IProgressStatus } from "@aldahick/rex-sdk"; import { Logger, injectable } from "@athenajs/core"; import axios from "axios"; import { RexConfig } from "../../config.js"; -import { IMediaItem, IMediaItemType, IProgressStatus } from "../../graphql.js"; import { UserModel } from "../../model/index.js"; import { ProgressManager } from "../progress/progress.manager.js"; diff --git a/api/src/module/media/media.resolver.ts b/api/src/module/media/media.resolver.ts index b8cc09c..f650e80 100644 --- a/api/src/module/media/media.resolver.ts +++ b/api/src/module/media/media.resolver.ts @@ -1,10 +1,3 @@ -import { - resolveField, - resolveMutation, - resolveQuery, - resolver, -} from "@athenajs/core"; -import { RexConfig } from "../../config.js"; import { IAuthPermission, IMediaItem, @@ -16,7 +9,14 @@ import { IProgressStatus, IQuery, IQueryMediaItemArgs, -} from "../../graphql.js"; +} from "@aldahick/rex-sdk"; +import { + resolveField, + resolveMutation, + resolveQuery, + resolver, +} from "@athenajs/core"; +import { RexConfig } from "../../config.js"; import { UserModel } from "../../model/index.js"; import { RexContext } from "../auth/auth.context.js"; import { ProgressManager } from "../progress/progress.manager.js"; diff --git a/api/src/module/media/sharex.controller.ts b/api/src/module/media/sharex.controller.ts index 42ad2ce..d329a23 100644 --- a/api/src/module/media/sharex.controller.ts +++ b/api/src/module/media/sharex.controller.ts @@ -1,5 +1,6 @@ import { randomBytes } from "node:crypto"; import path from "node:path"; +import { IAuthPermission } from "@aldahick/rex-sdk"; import { HttpMethod, HttpRequest, @@ -11,7 +12,6 @@ import { } from "@athenajs/core"; import mime from "mime"; import { RexConfig } from "../../config.js"; -import { IAuthPermission } from "../../graphql.js"; import { RexContext } from "../auth/auth.context.js"; import { AuthManager } from "../auth/auth.manager.js"; import { UserManager } from "../user/user.manager.js"; diff --git a/api/src/module/note/note.manager.ts b/api/src/module/note/note.manager.ts deleted file mode 100644 index 5011516..0000000 --- a/api/src/module/note/note.manager.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { injectable } from "@athenajs/core"; -import { UserNoteModel } from "../../model/index.js"; -import { DatabaseService } from "../../service/database/database.service.js"; - -@injectable() -export class NoteManager { - constructor(private readonly db: DatabaseService) {} - - async fetch(id: string, userId: string): Promise { - const [note] = await this.db.userNotes.where({ userId, id }).selectAll(); - return note; - } - - async fetchMany(userId: string): Promise { - return await this.db.userNotes.where({ userId }).selectAll(); - } - - async updateBody(id: string, userId: string, body: string): Promise { - await this.db.userNotes.where({ id, userId }).update({ body }); - } - - async create(userId: string, title: string): Promise { - return await this.db.userNotes.create({ - userId, - title, - createdAt: new Date(), - body: "", - }); - } - - async remove(id: string, userId: string): Promise { - await this.db.userNotes.where({ userId, id }).delete(); - } -} diff --git a/api/src/module/note/note.resolver.ts b/api/src/module/note/note.resolver.ts deleted file mode 100644 index 740de8b..0000000 --- a/api/src/module/note/note.resolver.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { resolveMutation, resolveQuery, resolver } from "@athenajs/core"; -import { - IAuthPermission, - IMutation, - IMutationCreateNoteArgs, - IMutationRemoveNoteArgs, - IMutationUpdateNoteBodyArgs, - INote, - IQuery, - IQueryNoteArgs, -} from "../../graphql.js"; -import { UserNoteModel } from "../../model/user-note.model.js"; -import { RexContext } from "../auth/auth.context.js"; -import { NoteManager } from "./note.manager.js"; - -@resolver() -export class NoteResolver { - constructor(private readonly noteManager: NoteManager) {} - - @resolveQuery() - async note( - root: never, - { id }: IQueryNoteArgs, - context: RexContext, - ): Promise { - const userId = await this.fetchUserId(context); - const note = await this.noteManager.fetch(id, userId); - if (!note) { - throw new Error(`Note ${id} not found`); - } - return this.makeGql(note); - } - - @resolveQuery() - async notes( - root: never, - args: never, - context: RexContext, - ): Promise { - const userId = await this.fetchUserId(context); - const notes = await this.noteManager.fetchMany(userId); - return notes - .sort((a, b) => a.createdAt.localeCompare(b.createdAt)) - .map((n) => this.makeGql(n)); - } - - @resolveMutation() - async updateNoteBody( - root: never, - { id, body }: IMutationUpdateNoteBodyArgs, - context: RexContext, - ): Promise { - const userId = await this.fetchUserId(context); - await this.noteManager.updateBody(id, userId, body); - return true; - } - - @resolveMutation() - async createNote( - root: never, - { title }: IMutationCreateNoteArgs, - context: RexContext, - ): Promise { - const userId = await this.fetchUserId(context); - const note = await this.noteManager.create(userId, title); - return this.makeGql(note); - } - - @resolveMutation() - async removeNote( - root: unknown, - { id }: IMutationRemoveNoteArgs, - context: RexContext, - ): Promise { - const userId = await this.fetchUserId(context); - await this.noteManager.remove(id, userId); - return true; - } - - makeGql(note: UserNoteModel): INote { - return { - ...note, - createdAt: new Date(note.createdAt), - }; - } - - private async fetchUserId(context: RexContext): Promise { - if ( - !( - context.userId && - (await context.isAuthorized(IAuthPermission.AdminNotes)) - ) - ) { - throw new Error("Forbidden"); - } - return context.userId; - } -} diff --git a/api/src/module/progress/progress.manager.ts b/api/src/module/progress/progress.manager.ts index 1a1916c..c7d81d4 100644 --- a/api/src/module/progress/progress.manager.ts +++ b/api/src/module/progress/progress.manager.ts @@ -1,6 +1,6 @@ +import { IProgressStatus } from "@aldahick/rex-sdk"; import { Logger, injectable } from "@athenajs/core"; import { uniqueBy } from "remeda"; -import { IProgressStatus } from "../../graphql.js"; import { ProgressModel } from "../../model/index.js"; import { DatabaseService } from "../../service/database/database.service.js"; diff --git a/api/src/module/progress/progress.resolver.ts b/api/src/module/progress/progress.resolver.ts index f0f58fa..c92da96 100644 --- a/api/src/module/progress/progress.resolver.ts +++ b/api/src/module/progress/progress.resolver.ts @@ -1,10 +1,10 @@ -import { resolveQuery, resolver } from "@athenajs/core"; import { IProgress, IQuery, IQueryProgressArgs, IQueryProgressesArgs, -} from "../../graphql.js"; +} from "@aldahick/rex-sdk"; +import { resolveQuery, resolver } from "@athenajs/core"; import { ProgressModel } from "../../model/index.js"; import { RexContext } from "../auth/auth.context.js"; import { ProgressManager } from "./progress.manager.js"; diff --git a/api/src/module/project/adapter/base.adapter.ts b/api/src/module/project/adapter/base.adapter.ts index 5c32fbf..3de2860 100644 --- a/api/src/module/project/adapter/base.adapter.ts +++ b/api/src/module/project/adapter/base.adapter.ts @@ -1,4 +1,3 @@ -import { injectAll, makeRegistryDecorator } from "@athenajs/core"; import { IProjectAdapterType, IProjectBoard, @@ -7,7 +6,8 @@ import { IProjectIssuesArgs, IProjectSprint, IProjectSprintsArgs, -} from "../../../graphql.js"; +} from "@aldahick/rex-sdk"; +import { injectAll, makeRegistryDecorator } from "@athenajs/core"; const projectAdapterSymbol = Symbol("ProjectAdapter"); export const projectAdapter = makeRegistryDecorator(projectAdapterSymbol); diff --git a/api/src/module/project/adapter/jira.adapter.ts b/api/src/module/project/adapter/jira.adapter.ts index 3aeef6a..8ecbe5c 100644 --- a/api/src/module/project/adapter/jira.adapter.ts +++ b/api/src/module/project/adapter/jira.adapter.ts @@ -1,5 +1,3 @@ -import { differenceInMilliseconds, eachHourOfInterval } from "date-fns"; -import { filter, isTruthy, sortBy } from "remeda"; import { IProjectAdapterType, IProjectBoard, @@ -9,7 +7,9 @@ import { IProjectIssuesArgs, IProjectSprint, IProjectSprintsArgs, -} from "../../../graphql.js"; +} from "@aldahick/rex-sdk"; +import { differenceInMilliseconds, eachHourOfInterval } from "date-fns"; +import { filter, isTruthy, sortBy } from "remeda"; import { JiraChangelog, JiraIssue, diff --git a/api/src/module/project/project-config.manager.ts b/api/src/module/project/project-config.manager.ts index 4329928..ab4305a 100644 --- a/api/src/module/project/project-config.manager.ts +++ b/api/src/module/project/project-config.manager.ts @@ -1,5 +1,5 @@ +import { IProjectAdapterType, IProjectConfig } from "@aldahick/rex-sdk"; import { injectable } from "@athenajs/core"; -import { IProjectAdapterType, IProjectConfig } from "../../graphql.js"; import { DatabaseService } from "../../service/database/database.service.js"; @injectable() diff --git a/api/src/module/project/project-config.resolver.ts b/api/src/module/project/project-config.resolver.ts index 1286d95..ac1dc7f 100644 --- a/api/src/module/project/project-config.resolver.ts +++ b/api/src/module/project/project-config.resolver.ts @@ -1,11 +1,11 @@ -import { resolveField, resolveMutation, resolver } from "@athenajs/core"; import { IAuthPermission, IMutation, IMutationDeleteProjectConfigArgs, IMutationUpdateProjectConfigArgs, IUser, -} from "../../graphql.js"; +} from "@aldahick/rex-sdk"; +import { resolveField, resolveMutation, resolver } from "@athenajs/core"; import { RexContext } from "../auth/auth.context.js"; import { ProjectConfigManager } from "./project-config.manager.js"; diff --git a/api/src/module/project/project.manager.ts b/api/src/module/project/project.manager.ts index d51ca27..413b9b9 100644 --- a/api/src/module/project/project.manager.ts +++ b/api/src/module/project/project.manager.ts @@ -1,7 +1,7 @@ import "./adapter/jira.adapter.js"; +import { IProjectAdapterType } from "@aldahick/rex-sdk"; import { injectable } from "@athenajs/core"; -import { IProjectAdapterType } from "../../graphql.js"; import { BaseProjectAdapter, injectProjectAdapters, diff --git a/api/src/module/project/project.resolver.ts b/api/src/module/project/project.resolver.ts index 334bd4e..7d1c552 100644 --- a/api/src/module/project/project.resolver.ts +++ b/api/src/module/project/project.resolver.ts @@ -1,4 +1,3 @@ -import { resolveField, resolveQuery, resolver } from "@athenajs/core"; import { IAuthPermission, IProject, @@ -6,7 +5,8 @@ import { IProjectSprintsArgs, IQuery, IQueryProjectArgs, -} from "../../graphql.js"; +} from "@aldahick/rex-sdk"; +import { resolveField, resolveQuery, resolver } from "@athenajs/core"; import { RexContext } from "../auth/auth.context.js"; import { ProjectConfigManager } from "./project-config.manager.js"; import { ProjectManager } from "./project.manager.js"; diff --git a/api/src/module/role/role.manager.ts b/api/src/module/role/role.manager.ts index ceb01d3..004106a 100644 --- a/api/src/module/role/role.manager.ts +++ b/api/src/module/role/role.manager.ts @@ -1,5 +1,5 @@ +import { IAuthPermission } from "@aldahick/rex-sdk"; import { injectable } from "@athenajs/core"; -import { IAuthPermission } from "../../graphql.js"; import { RoleModel } from "../../model/index.js"; import { DatabaseService } from "../../service/database/database.service.js"; diff --git a/api/src/module/role/role.resolver.ts b/api/src/module/role/role.resolver.ts index 1cd1c0a..ff912ed 100644 --- a/api/src/module/role/role.resolver.ts +++ b/api/src/module/role/role.resolver.ts @@ -1,4 +1,3 @@ -import { resolveMutation, resolveQuery, resolver } from "@athenajs/core"; import { IAuthPermission, IMutation, @@ -8,7 +7,8 @@ import { IMutationUpdateRolePermissionsArgs, IQuery, IRole, -} from "../../graphql.js"; +} from "@aldahick/rex-sdk"; +import { resolveMutation, resolveQuery, resolver } from "@athenajs/core"; import { RoleModel } from "../../model/index.js"; import { RexContext } from "../auth/auth.context.js"; import { RoleManager } from "./role.manager.js"; diff --git a/api/src/module/steam/steam.resolver.ts b/api/src/module/steam/steam.resolver.ts index d044746..60b2724 100644 --- a/api/src/module/steam/steam.resolver.ts +++ b/api/src/module/steam/steam.resolver.ts @@ -1,4 +1,3 @@ -import { resolveMutation, resolveQuery, resolver } from "@athenajs/core"; import { IAuthPermission, IMutation, @@ -7,7 +6,8 @@ import { IQuerySteamPlayerArgs, IQuerySteamPlayersArgs, ISteamPlayer, -} from "../../graphql.js"; +} from "@aldahick/rex-sdk"; +import { resolveMutation, resolveQuery, resolver } from "@athenajs/core"; import { SteamGameModel } from "../../model/index.js"; import { SteamPlayer } from "../../service/steam/SteamPlayer.js"; import { RexContext } from "../auth/auth.context.js"; diff --git a/api/src/module/steam/steamGame.manager.ts b/api/src/module/steam/steamGame.manager.ts index fb717aa..2bdeb13 100644 --- a/api/src/module/steam/steamGame.manager.ts +++ b/api/src/module/steam/steamGame.manager.ts @@ -1,6 +1,6 @@ +import { IProgressStatus } from "@aldahick/rex-sdk"; import { injectable } from "@athenajs/core"; import { chunk } from "remeda"; -import { IProgressStatus } from "../../graphql.js"; import { SteamGameModel } from "../../model/index.js"; import { DatabaseService } from "../../service/database/database.service.js"; import { SteamService } from "../../service/steam/steam.service.js"; diff --git a/api/src/module/user/user.manager.ts b/api/src/module/user/user.manager.ts index f671e6b..d6d3735 100644 --- a/api/src/module/user/user.manager.ts +++ b/api/src/module/user/user.manager.ts @@ -1,6 +1,6 @@ +import { IAuthPermission } from "@aldahick/rex-sdk"; import { injectable } from "@athenajs/core"; import { filter, isTruthy } from "remeda"; -import { IAuthPermission } from "../../graphql.js"; import { RoleModel } from "../../model/role.model.js"; import { UserModel } from "../../model/user.model.js"; import { DatabaseService } from "../../service/database/database.service.js"; @@ -57,10 +57,6 @@ export class UserManager { return user; } - async addRole(userId: string, roleId: string): Promise { - await this.db.userRoles.create({ userId, roleId }); - } - async fetchRolesByUser(userId: string): Promise { const userRoles = await this.db.userRoles .join("role") @@ -121,9 +117,30 @@ export class UserManager { }); } - async updatePassword(id: string, password: string): Promise { - await this.db.users.find(id).update({ - passwordHash: await this.authManager.hashPassword(password), + async update( + id: string, + { + password, + ...fields + }: Partial & { password: string }>, + ): Promise { + const updateFields = { + ...fields, + ...(password + ? { passwordHash: await this.authManager.hashPassword(password) } + : {}), + }; + await this.db.users.find(id).update(updateFields); + } + + async updateRoles(userId: string, roleIds: string[]): Promise { + await this.db.transaction(async () => { + await this.db.userRoles + .where({ userId, roleId: { notIn: roleIds } }) + .delete(); + await this.db.userRoles + .createMany(roleIds.map((roleId) => ({ userId, roleId }))) + .onConflictDoNothing(); }); } diff --git a/api/src/module/user/user.resolver.ts b/api/src/module/user/user.resolver.ts index 9bc9764..64a882c 100644 --- a/api/src/module/user/user.resolver.ts +++ b/api/src/module/user/user.resolver.ts @@ -1,20 +1,19 @@ -import { - resolveField, - resolveMutation, - resolveQuery, - resolver, -} from "@athenajs/core"; -import { RexConfig } from "../../config.js"; import { IAuthPermission, IMutation, - IMutationAddRoleToUserArgs, IMutationCreateUserArgs, - IMutationSetUserPasswordArgs, + IMutationUpdateUserArgs, IQuery, IQueryUserArgs, IUser, -} from "../../graphql.js"; +} from "@aldahick/rex-sdk"; +import { + resolveField, + resolveMutation, + resolveQuery, + resolver, +} from "@athenajs/core"; +import { RexConfig } from "../../config.js"; import { UserModel } from "../../model/index.js"; import { RexContext } from "../auth/auth.context.js"; import { RoleResolver } from "../role/role.resolver.js"; @@ -57,28 +56,10 @@ export class UserResolver { return users.map((u) => this.makeGql(u)); } - @resolveMutation() - async addRoleToUser( - root: never, - { userId, roleId }: IMutationAddRoleToUserArgs, - context: RexContext, - ): Promise { - if ( - !(await context.isAuthorized( - IAuthPermission.AdminUsers, - IAuthPermission.AdminRoles, - )) - ) { - throw new Error("Forbidden"); - } - await this.userManager.addRole(userId, roleId); - return true; - } - @resolveMutation() async createUser( root: never, - { email, username, password }: IMutationCreateUserArgs, + { params: { email, username, password } }: IMutationCreateUserArgs, context: RexContext, ): Promise { if ( @@ -94,18 +75,26 @@ export class UserResolver { } @resolveMutation() - async setUserPassword( + async updateUser( root: unknown, - { userId, password }: IMutationSetUserPasswordArgs, + { params: { id, roleIds, ...fields } }: IMutationUpdateUserArgs, context: RexContext, - ): Promise { - let id = context.userId; - if (userId && (await context.isAuthorized(IAuthPermission.AdminUsers))) { - id = userId; + ): Promise { + let userId = context.userId; + if (id && (await context.isAuthorized(IAuthPermission.AdminUsers))) { + userId = id; } else if (!id) { throw new Error("Forbidden"); } - await this.userManager.updatePassword(id, password); + if (roleIds) { + if (!(await context.isAuthorized(IAuthPermission.AdminRoles))) { + throw new Error("Forbidden"); + } + await this.userManager.updateRoles(id, roleIds); + } + if (Object.keys(fields).length) { + await this.userManager.update(id, fields); + } return true; } diff --git a/api/src/service/database/database.service.ts b/api/src/service/database/database.service.ts index 9a79f99..0b4f9cd 100644 --- a/api/src/service/database/database.service.ts +++ b/api/src/service/database/database.service.ts @@ -6,7 +6,6 @@ import { ProgressTable } from "../../model/progress.model.js"; import { ProjectConfigTable } from "../../model/project-config.model.js"; import { RoleTable } from "../../model/role.model.js"; import { SteamGameTable } from "../../model/steam-game.model.js"; -import { UserNoteTable } from "../../model/user-note.model.js"; import { UserRoleTable } from "../../model/user-role.model.js"; import { UserTable } from "../../model/user.model.js"; @@ -17,7 +16,6 @@ const tables = { roles: RoleTable, steamGames: SteamGameTable, users: UserTable, - userNotes: UserNoteTable, userRoles: UserRoleTable, }; type Client = OrchidORM; @@ -35,7 +33,6 @@ export class DatabaseService implements DbTables { readonly roles: DbTables["roles"]; readonly steamGames: DbTables["steamGames"]; readonly users: DbTables["users"]; - readonly userNotes: DbTables["userNotes"]; readonly userRoles: DbTables["userRoles"]; constructor(config: RexConfig) { @@ -53,7 +50,10 @@ export class DatabaseService implements DbTables { this.roles = this.orm.roles; this.steamGames = this.orm.steamGames; this.users = this.orm.users; - this.userNotes = this.orm.userNotes; this.userRoles = this.orm.userRoles; } + + transaction(transact: () => Promise): Promise { + return this.orm.$transaction(transact); + } } diff --git a/api/src/service/google/google-auth.service.spec.ts b/api/src/service/google/google-auth.service.spec.ts index 08c74a8..266164a 100644 --- a/api/src/service/google/google-auth.service.spec.ts +++ b/api/src/service/google/google-auth.service.spec.ts @@ -32,10 +32,8 @@ describe("GoogleAuthService", () => { mockConfig.mockReturnValue({ google: { oauth: { - web: { - clientId: "id", - clientSecret: "secret", - }, + clientId: "id", + clientSecret: "secret", }, }, }); @@ -50,9 +48,9 @@ describe("GoogleAuthService", () => { mockConfig.mockReturnValue({ google: { oauth: { web: { clientId: undefined, clientSecret: "" } } }, }); - const actual = () => service().getIdTokenPayload("", "web"); + const actual = () => service().getIdTokenPayload(""); await expect(actual).rejects.toThrow( - new Error("Missing Google credentials for client web"), + new Error("Missing Google credentials"), ); }); @@ -61,7 +59,7 @@ describe("GoogleAuthService", () => { getPayload: () => ({ email: "email" }), getUserId: () => null, }); - const actual = await service().getIdTokenPayload("", "web"); + const actual = await service().getIdTokenPayload(""); expect(actual).toEqual(undefined); }); @@ -70,7 +68,7 @@ describe("GoogleAuthService", () => { getPayload: () => undefined, getUserId: () => "user id", }); - const actual = await service().getIdTokenPayload("", "web"); + const actual = await service().getIdTokenPayload(""); expect(actual).toEqual(undefined); }); @@ -79,7 +77,7 @@ describe("GoogleAuthService", () => { getPayload: () => ({ email: "test@gmail.com", hd: undefined }), getUserId: () => "user id", }); - const actual = await service().getIdTokenPayload("", "web"); + const actual = await service().getIdTokenPayload(""); expect(actual).toEqual({ domain: "gmail.com", email: "test@gmail.com", @@ -92,7 +90,7 @@ describe("GoogleAuthService", () => { getPayload: () => ({ email: "test@ahicks.dev", hd: "alexhicks.net" }), getUserId: () => "user id", }); - const actual = await service().getIdTokenPayload("", "web"); + const actual = await service().getIdTokenPayload(""); expect(actual).toEqual({ domain: "alexhicks.net", email: "test@ahicks.dev", diff --git a/api/src/service/google/google-auth.service.ts b/api/src/service/google/google-auth.service.ts index 0895379..4cbbf14 100644 --- a/api/src/service/google/google-auth.service.ts +++ b/api/src/service/google/google-auth.service.ts @@ -14,11 +14,10 @@ export class GoogleAuthService { async getIdTokenPayload( idToken: string, - clientIdKey: keyof RexConfig["google"]["oauth"], ): Promise { - const { clientId, clientSecret } = this.config.google.oauth[clientIdKey]; + const { clientId, clientSecret } = this.config.google.oauth; if (!(clientId && clientSecret)) { - throw new Error(`Missing Google credentials for client ${clientIdKey}`); + throw new Error("Missing Google credentials"); } const ticket = await new OAuth2Client({ clientId, diff --git a/api/src/service/google/google-cloud.service.spec.ts b/api/src/service/google/google-cloud.service.spec.ts deleted file mode 100644 index 052c1e2..0000000 --- a/api/src/service/google/google-cloud.service.spec.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { container } from "@athenajs/core"; -import { afterAll, beforeAll, describe, expect, it, vi } from "vitest"; -import { RexConfig } from "../../config.js"; -import { GoogleCloudService } from "./google-cloud.service.js"; - -const mocks = vi.hoisted(() => ({ - createJob: vi.fn(), - runJob: vi.fn(), - deleteJob: vi.fn(), -})); - -vi.mock("@google-cloud/run", () => ({ - JobsClient: class { - createJob = mocks.createJob; - runJob = mocks.runJob; - deleteJob = mocks.deleteJob; - }, -})); - -describe("GoogleCloudService", () => { - const service = () => container.resolve(GoogleCloudService); - beforeAll(() => { - container.reset(); - container.register(RexConfig, { - useValue: { - google: { - cloud: {}, - }, - } as RexConfig, - }); - }); - - afterAll(() => { - vi.restoreAllMocks(); - }); - - describe("createAndRun()", () => { - it("should create, run, and delete a job", async () => { - mocks.createJob.mockResolvedValue([{ promise: () => {} }]); - mocks.deleteJob.mockResolvedValue([{ promise: () => {} }]); - mocks.runJob.mockResolvedValue([{ promise: () => {} }]); - await service().createAndRun({ - name: "name", - image: "image", - args: ["arg 1", "arg 2"], - env: [{ name: "env 1", value: "value 1" }], - }); - expect(mocks.createJob).toHaveBeenLastCalledWith({ - job: { - name: "name", - template: { - template: { - containers: [ - { - args: ["arg 1", "arg 2"], - image: "image", - env: [{ name: "env 1", value: "value 1" }], - }, - ], - }, - }, - }, - }); - expect(mocks.runJob).toHaveBeenLastCalledWith({ - name: "name", - }); - expect(mocks.deleteJob).toHaveBeenLastCalledWith({ - name: "name", - }); - }); - }); -}); diff --git a/api/src/service/google/google-cloud.service.ts b/api/src/service/google/google-cloud.service.ts deleted file mode 100644 index d34b029..0000000 --- a/api/src/service/google/google-cloud.service.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { injectable } from "@athenajs/core"; -import { JobsClient } from "@google-cloud/run"; -import { RexConfig } from "../../config.js"; - -export interface CreateJobParams { - name: string; - image: string; - args: string[]; - env?: { name: string; value: string }[]; -} - -@injectable() -export class GoogleCloudService { - readonly jobs; - constructor(private readonly config: RexConfig) { - this.jobs = new JobsClient({ - projectId: this.config.google.cloud.projectId, - keyFilename: this.config.google.cloud.credentialsPath, - }); - } - - /** - * Jobs are paramless on execution, but for simplicity's sake (avoiding major state management), - * we create jobs with params, immediately execute them, and thnen delete the job. - */ - async createAndRun(params: CreateJobParams): Promise { - const { name } = params; - await this.createJob(params); - await this.runJob(name); - await this.deleteJob(name); - } - - private async createJob({ - name, - image, - args, - env = [], - }: CreateJobParams): Promise { - const [operation] = await this.jobs.createJob({ - job: { - name, - template: { - template: { - containers: [ - { - args, - image, - env, - }, - ], - }, - }, - }, - }); - await operation.promise(); - } - - private async runJob(name: string): Promise { - const [operation] = await this.jobs.runJob({ name }); - await operation.promise(); - } - - private async deleteJob(name: string): Promise { - const [operation] = await this.jobs.deleteJob({ name }); - await operation.promise(); - } -} diff --git a/api/src/service/hastebin/hastebin.service.spec.ts b/api/src/service/hastebin/hastebin.service.spec.ts deleted file mode 100644 index 6a46e39..0000000 --- a/api/src/service/hastebin/hastebin.service.spec.ts +++ /dev/null @@ -1,33 +0,0 @@ -import axios from "axios"; -import { - MockInstance, - afterAll, - beforeAll, - describe, - expect, - it, - vi, -} from "vitest"; -import { HastebinService } from "./hastebin.service.js"; - -describe("HastebinService", () => { - const service = new HastebinService(); - let mockPost: MockInstance; - beforeAll(() => { - mockPost = vi.spyOn(axios, "post"); - }); - - afterAll(() => { - vi.restoreAllMocks(); - }); - - describe("create()", () => { - it("should return the created document URL", async () => { - mockPost.mockResolvedValue({ - data: { key: "some-key" }, - }); - const actual = await service.create("some data"); - expect(actual).toEqual("https://hastebin.com/some-key"); - }); - }); -}); diff --git a/api/src/service/hastebin/hastebin.service.ts b/api/src/service/hastebin/hastebin.service.ts deleted file mode 100644 index 8c1c369..0000000 --- a/api/src/service/hastebin/hastebin.service.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { injectable } from "@athenajs/core"; -import axios from "axios"; - -@injectable() -export class HastebinService { - /** returns url */ - async create(body: string): Promise { - const { - data: { key }, - } = await axios.post<{ - key: string; - }>("https://hastebin.com/documents", body); - return `https://hastebin.com/${key}`; - } -} diff --git a/biome.json b/biome.json index b111c2d..22f6438 100644 --- a/biome.json +++ b/biome.json @@ -50,7 +50,16 @@ }, "overrides": [ { - "include": ["*lintstagedrc.mjs", "vitest.config.mts", "codegen*.ts"], + "include": [ + "*lintstagedrc.mjs", + "vitest.config.mts", + "vite.config.ts", + "codegen*.ts", + "app/root.tsx", + "app/routes/*.tsx", + "*.config.js", + "*.config.ts" + ], "linter": { "rules": { "style": { @@ -60,7 +69,9 @@ } }, { - "include": ["graphql*sdk.ts"], + "include": [ + "graphql*sdk.ts" + ], "linter": { "rules": { "suspicious": { diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..2d53edd --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,32 @@ +services: + api: + build: + context: . + dockerfile: api/Dockerfile + env_file: api/.env + environment: + REDIS_URL: redis://redis:6379 + ports: + - 8080:8080 + depends_on: + - postgres + - redis + web: + build: + context: . + dockerfile: web/Dockerfile + env_file: web/.env + environment: + API_URL: http://api:8080/ + PUBLIC_API_URL: http://localhost:8080/ + # HOST: 0.0.0.0 + ports: + - 3000:3000 + depends_on: + - api + postgres: + image: postgres:16-alpine + environment: + POSTGRES_PASSWORD: compose + redis: + image: redis:7-alpine diff --git a/gql/auth.gql b/gql/auth.gql index 26e8165..08baf65 100644 --- a/gql/auth.gql +++ b/gql/auth.gql @@ -1,17 +1,22 @@ -extend type Mutation { - createAuthTokenGoogle( - googleIdToken: String!, - clientType: AuthClientType! - ): AuthToken! - # username can also be email - createAuthTokenLocal(username: String!, password: String!): AuthToken! - # requires auth - createAuthToken(userId: String!): AuthToken! +extend type Query { + authToken(params: AuthTokenParams!): AuthToken! } -enum AuthClientType { - MOBILE - WEB +# only one field may/must be provided +input AuthTokenParams { + google: AuthTokenGoogleParams + local: AuthTokenLocalParams + # requires ADMIN_USERS permission + userId: ID +} + +input AuthTokenGoogleParams { + idToken: String! +} + +input AuthTokenLocalParams { + username: String! + password: String! } type AuthToken { diff --git a/gql/config.gql b/gql/config.gql index ec5747c..0903cbd 100644 --- a/gql/config.gql +++ b/gql/config.gql @@ -6,5 +6,5 @@ type Config { # Whether unauthenticated users can register a user account or not. createAnonymousUsers: Boolean! # Per-user total media limit in bytes. If null, this user cannot upload media. - mediaDataLimit: Int + mediaDataLimit: Float } diff --git a/gql/note.gql b/gql/note.gql deleted file mode 100644 index f70b6d0..0000000 --- a/gql/note.gql +++ /dev/null @@ -1,17 +0,0 @@ -extend type Mutation { - createNote(title: String!): Note! - removeNote(id: ID!): Boolean! - updateNoteBody(id: ID!, body: String!): Boolean! -} - -extend type Query { - note(id: ID!): Note! - notes: [Note!]! -} - -type Note { - id: ID! - createdAt: DateTime! - title: String! - body: String! -} diff --git a/gql/user.gql b/gql/user.gql index 2fff9e2..fbdba66 100644 --- a/gql/user.gql +++ b/gql/user.gql @@ -1,7 +1,6 @@ type Mutation { - addRoleToUser(userId: ID!, roleId: ID!): Boolean! - createUser(email: String!, username: String, password: String): User! - setUserPassword(userId: ID!, password: String!): Boolean! + createUser(params: CreateUserParams!): User! + updateUser(params: UpdateUserParams!): Boolean! } type Query { @@ -16,3 +15,17 @@ type User { roles: [Role!] permissions: [AuthPermission!] } + +input CreateUserParams { + email: String! + username: String + password: String +} + +input UpdateUserParams { + id: ID! + email: String + username: String + password: String + roleIds: [ID!] +} diff --git a/package.json b/package.json index 1d7fd78..40cc4e3 100644 --- a/package.json +++ b/package.json @@ -2,12 +2,11 @@ "name": "@aldahick/rex", "license": "MIT", "private": true, - "version": "0.5.0", + "version": "1.0.1", "scripts": { - "generate": "bash scripts/generate.sh", "version": "bash scripts/version.sh", "build:api": "cd api && pnpm build", - "build:mzk": "docker build -t ghcr.io/aldahick/mzk-runner:local docker/mzk", + "build:sdk": "cd sdk && pnpm build", "build:web": "cd web && pnpm build" }, "engines": { @@ -20,9 +19,6 @@ }, "devDependencies": { "@biomejs/biome": "^1.8.3", - "@graphql-codegen/cli": "^5.0.2", - "@graphql-codegen/typescript": "^4.0.8", - "@graphql-codegen/typescript-operations": "^4.2.2", "tsx": "^4.16.0", "typescript": "^5.5.2" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 74b6870..74f046f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,15 +14,6 @@ importers: '@biomejs/biome': specifier: ^1.8.3 version: 1.8.3 - '@graphql-codegen/cli': - specifier: ^5.0.2 - version: 5.0.2(@types/node@20.14.9)(graphql@16.9.0)(typescript@5.5.2) - '@graphql-codegen/typescript': - specifier: ^4.0.8 - version: 4.0.8(graphql@16.9.0) - '@graphql-codegen/typescript-operations': - specifier: ^4.2.2 - version: 4.2.2(graphql@16.9.0) tsx: specifier: ^4.16.0 version: 4.16.0 @@ -32,9 +23,12 @@ importers: api: dependencies: + '@aldahick/rex-sdk': + specifier: workspace:* + version: link:../sdk '@athenajs/core': - specifier: ^1.2.2 - version: 1.2.2 + specifier: ^1.2.3 + version: 1.2.3 '@google-cloud/run': specifier: ^1.3.0 version: 1.3.0 @@ -92,7 +86,7 @@ importers: version: 6.2.0(graphql-request@6.1.0(graphql@16.9.0))(graphql-tag@2.12.6(graphql@16.9.0))(graphql@16.9.0) '@swc/core': specifier: ^1.6.6 - version: 1.6.6 + version: 1.6.6(@swc/helpers@0.5.11) '@types/bcrypt': specifier: ^5.0.2 version: 5.0.2 @@ -119,64 +113,83 @@ importers: version: 6.2.0(typescript@5.5.2) unplugin-swc: specifier: ^1.4.5 - version: 1.4.5(@swc/core@1.6.6)(rollup@4.18.0) + version: 1.4.5(@swc/core@1.6.6(@swc/helpers@0.5.11))(rollup@4.18.0) vitest: specifier: ^1.6.0 version: 1.6.0(@types/node@20.14.9) + sdk: + dependencies: + graphql-request: + specifier: 6.1.0 + version: 6.1.0(graphql@16.9.0) + devDependencies: + '@graphql-codegen/cli': + specifier: ^5.0.2 + version: 5.0.2(@types/node@20.14.9)(graphql@16.9.0)(typescript@5.5.2) + '@graphql-codegen/typescript': + specifier: ^4.0.8 + version: 4.0.8(graphql@16.9.0) + '@graphql-codegen/typescript-graphql-request': + specifier: ^6.2.0 + version: 6.2.0(graphql-request@6.1.0(graphql@16.9.0))(graphql-tag@2.12.6(graphql@16.9.0))(graphql@16.9.0) + '@graphql-codegen/typescript-operations': + specifier: ^4.2.2 + version: 4.2.2(graphql@16.9.0) + tsc-watch: + specifier: ^6.2.0 + version: 6.2.0(typescript@5.5.2) + web: dependencies: - '@apollo/client': - specifier: ^3.10.8 - version: 3.10.8(@types/react@18.3.3)(graphql-ws@5.16.0(graphql@16.9.0))(graphql@16.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@emotion/react': - specifier: ^11.11.4 - version: 11.11.4(@types/react@18.3.3)(react@18.3.1) - '@emotion/styled': - specifier: ^11.11.5 - version: 11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1) - '@mui/icons-material': - specifier: ^5.15.21 - version: 5.15.21(@mui/material@5.15.21(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.3)(react@18.3.1) - '@mui/material': - specifier: ^5.15.21 - version: 5.15.21(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@aldahick/rex-sdk': + specifier: workspace:* + version: link:../sdk '@react-oauth/google': specifier: ^0.12.1 version: 0.12.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@remix-run/node': + specifier: ^2.10.0 + version: 2.10.0(typescript@5.5.2) + '@remix-run/react': + specifier: ^2.10.0 + version: 2.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2) + '@remix-run/serve': + specifier: ^2.10.0 + version: 2.10.0(typescript@5.5.2) + clsx: + specifier: ^2.1.1 + version: 2.1.1 graphql: specifier: ^16.9.0 version: 16.9.0 + isbot: + specifier: ^4 + version: 4.4.0 + jotai: + specifier: ^2.8.4 + version: 2.8.4(@types/react@18.3.3)(react@18.3.1) + lucide-react: + specifier: ^0.399.0 + version: 0.399.0(react@18.3.1) mime: specifier: ^4.0.3 version: 4.0.3 - mobx: - specifier: ^6.12.4 - version: 6.12.4 - mobx-react-lite: - specifier: ^4.0.7 - version: 4.0.7(mobx@6.12.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - notistack: - specifier: ^3.0.1 - version: 3.0.1(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) pluralize: specifier: ^8.0.0 version: 8.0.0 react: specifier: ^18.3.1 version: 18.3.1 + react-bootstrap: + specifier: ^2.10.4 + version: 2.10.4(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) react-dropzone: specifier: ^14.2.3 version: 14.2.3(react@18.3.1) - react-router: - specifier: ^6.24.0 - version: 6.24.0(react@18.3.1) - react-router-dom: - specifier: ^6.24.0 - version: 6.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) remeda: specifier: ^2.2.1 version: 2.2.1 @@ -192,13 +205,13 @@ importers: web-audio-daw: specifier: ^4.13.2 version: 4.13.2 + zod: + specifier: ^3.23.8 + version: 3.23.8 devDependencies: - '@athenajs/react-utils': - specifier: ^0.2.10 - version: 0.2.10 - '@graphql-codegen/typescript-react-apollo': - specifier: ^4.3.0 - version: 4.3.0(graphql-tag@2.12.6(graphql@16.9.0))(graphql@16.9.0) + '@remix-run/dev': + specifier: ^2.10.0 + version: 2.10.0(@remix-run/react@2.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2))(@remix-run/serve@2.10.0(typescript@5.5.2))(@types/node@20.14.9)(babel-plugin-macros@3.1.0)(typescript@5.5.2)(vite@5.3.2(@types/node@20.14.9)) '@types/node': specifier: ^20.14.9 version: 20.14.9 @@ -211,15 +224,25 @@ importers: '@types/react-dom': specifier: ^18.3.0 version: 18.3.0 - '@vitejs/plugin-react': - specifier: ^4.3.1 - version: 4.3.1(vite@5.3.2(@types/node@20.14.9)) + autoprefixer: + specifier: ^10.4.19 + version: 10.4.19(postcss@8.4.39) + postcss: + specifier: ^8.4.39 + version: 8.4.39 + tailwindcss: + specifier: ^3.4.4 + version: 3.4.4 vite: specifier: ^5.3.2 version: 5.3.2(@types/node@20.14.9) packages: + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -229,24 +252,6 @@ packages: peerDependencies: graphql: 14.x || 15.x || 16.x - '@apollo/client@3.10.8': - resolution: {integrity: sha512-UaaFEitRrPRWV836wY2L7bd3HRCfbMie1jlYMcmazFAK23MVhz/Uq7VG1nwbotPb5xzFsw5RF4Wnp2G3dWPM3g==} - peerDependencies: - graphql: ^15.0.0 || ^16.0.0 - graphql-ws: ^5.5.5 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - subscriptions-transport-ws: ^0.9.0 || ^0.11.0 - peerDependenciesMeta: - graphql-ws: - optional: true - react: - optional: true - react-dom: - optional: true - subscriptions-transport-ws: - optional: true - '@apollo/protobufjs@1.2.7': resolution: {integrity: sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg==} hasBin: true @@ -342,12 +347,8 @@ packages: '@apollo/server': ^4.0.0 fastify: ^4.4.0 - '@athenajs/core@1.2.2': - resolution: {integrity: sha512-fOwFyXqQoPxQzKNYH5Y48Axu1OgnwUjz0Z3/2YEt9TMvy7ygB8arEEzWT69FuZ0Vpuecz0BvDfFCfI3jUr9ZsA==} - engines: {node: ^20.12} - - '@athenajs/react-utils@0.2.10': - resolution: {integrity: sha512-meyYCQPXLd6c6W2oDHsdANFnq/qmt8/DkrCO40XqD1TuvKRZgOOKX26x5q0k8B+3PTThwAKXYhdyYDPqjx7L4A==} + '@athenajs/core@1.2.3': + resolution: {integrity: sha512-tCiD+2TrQ3sfdRumIlIVey+EMbLy47+VeifwdacVCG8WJu2oOMb28/8Vgaj+gaS3e0stpxKXJwLZH00XEB1QhQ==} engines: {node: ^20.12} '@athenajs/utils@1.2.4': @@ -480,6 +481,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-decorators@7.24.7': + resolution: {integrity: sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-flow@7.24.7': resolution: {integrity: sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==} engines: {node: '>=6.9.0'} @@ -503,6 +510,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-typescript@7.24.7': + resolution: {integrity: sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-arrow-functions@7.24.7': resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} engines: {node: '>=6.9.0'} @@ -599,18 +612,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-self@7.24.7': - resolution: {integrity: sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-source@7.24.7': - resolution: {integrity: sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx@7.24.7': resolution: {integrity: sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==} engines: {node: '>=6.9.0'} @@ -635,6 +636,18 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-typescript@7.24.7': + resolution: {integrity: sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-typescript@7.24.7': + resolution: {integrity: sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/runtime@7.24.7': resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} engines: {node: '>=6.9.0'} @@ -714,192 +727,273 @@ packages: '@dabh/diagnostics@2.0.3': resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} - '@emotion/babel-plugin@11.11.0': - resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} - - '@emotion/cache@11.11.0': - resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} - '@emotion/hash@0.9.1': resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} - '@emotion/is-prop-valid@1.2.2': - resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==} - - '@emotion/memoize@0.8.1': - resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} - - '@emotion/react@11.11.4': - resolution: {integrity: sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==} - peerDependencies: - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true - - '@emotion/serialize@1.1.4': - resolution: {integrity: sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==} - - '@emotion/sheet@1.2.2': - resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} - - '@emotion/styled@11.11.5': - resolution: {integrity: sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ==} - peerDependencies: - '@emotion/react': ^11.0.0-rc.0 - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true - - '@emotion/unitless@0.8.1': - resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} - - '@emotion/use-insertion-effect-with-fallbacks@1.0.1': - resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} - peerDependencies: - react: '>=16.8.0' - - '@emotion/utils@1.2.1': - resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} - - '@emotion/weak-memoize@0.3.1': - resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} - '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.17.6': + resolution: {integrity: sha512-YnYSCceN/dUzUr5kdtUzB+wZprCafuD89Hs0Aqv9QSdwhYQybhXTaSTcrl6X/aWThn1a/j0eEpUBGOE7269REg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.21.5': resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] + '@esbuild/android-arm@0.17.6': + resolution: {integrity: sha512-bSC9YVUjADDy1gae8RrioINU6e1lCkg3VGVwm0QQ2E1CWcC4gnMce9+B6RpxuSsrsXsk1yojn7sp1fnG8erE2g==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.21.5': resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] + '@esbuild/android-x64@0.17.6': + resolution: {integrity: sha512-MVcYcgSO7pfu/x34uX9u2QIZHmXAB7dEiLQC5bBl5Ryqtpj9lT2sg3gNDEsrPEmimSJW2FXIaxqSQ501YLDsZQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.21.5': resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.17.6': + resolution: {integrity: sha512-bsDRvlbKMQMt6Wl08nHtFz++yoZHsyTOxnjfB2Q95gato+Yi4WnRl13oC2/PJJA9yLCoRv9gqT/EYX0/zDsyMA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.21.5': resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.17.6': + resolution: {integrity: sha512-xh2A5oPrYRfMFz74QXIQTQo8uA+hYzGWJFoeTE8EvoZGHb+idyV4ATaukaUvnnxJiauhs/fPx3vYhU4wiGfosg==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.21.5': resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.17.6': + resolution: {integrity: sha512-EnUwjRc1inT4ccZh4pB3v1cIhohE2S4YXlt1OvI7sw/+pD+dIE4smwekZlEPIwY6PhU6oDWwITrQQm5S2/iZgg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.21.5': resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.17.6': + resolution: {integrity: sha512-Uh3HLWGzH6FwpviUcLMKPCbZUAFzv67Wj5MTwK6jn89b576SR2IbEp+tqUHTr8DIl0iDmBAf51MVaP7pw6PY5Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.21.5': resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.17.6': + resolution: {integrity: sha512-bUR58IFOMJX523aDVozswnlp5yry7+0cRLCXDsxnUeQYJik1DukMY+apBsLOZJblpH+K7ox7YrKrHmJoWqVR9w==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.21.5': resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.17.6': + resolution: {integrity: sha512-7YdGiurNt7lqO0Bf/U9/arrPWPqdPqcV6JCZda4LZgEn+PTQ5SMEI4MGR52Bfn3+d6bNEGcWFzlIxiQdS48YUw==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.21.5': resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.17.6': + resolution: {integrity: sha512-ujp8uoQCM9FRcbDfkqECoARsLnLfCUhKARTP56TFPog8ie9JG83D5GVKjQ6yVrEVdMie1djH86fm98eY3quQkQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.21.5': resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.17.6': + resolution: {integrity: sha512-y2NX1+X/Nt+izj9bLoiaYB9YXT/LoaQFYvCkVD77G/4F+/yuVXYCWz4SE9yr5CBMbOxOfBcy/xFL4LlOeNlzYQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.21.5': resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.17.6': + resolution: {integrity: sha512-09AXKB1HDOzXD+j3FdXCiL/MWmZP0Ex9eR8DLMBVcHorrWJxWmY8Nms2Nm41iRM64WVx7bA/JVHMv081iP2kUA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.21.5': resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.17.6': + resolution: {integrity: sha512-AmLhMzkM8JuqTIOhxnX4ubh0XWJIznEynRnZAVdA2mMKE6FAfwT2TWKTwdqMG+qEaeyDPtfNoZRpJbD4ZBv0Tg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.21.5': resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.17.6': + resolution: {integrity: sha512-Y4Ri62PfavhLQhFbqucysHOmRamlTVK10zPWlqjNbj2XMea+BOs4w6ASKwQwAiqf9ZqcY9Ab7NOU4wIgpxwoSQ==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.21.5': resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.17.6': + resolution: {integrity: sha512-SPUiz4fDbnNEm3JSdUW8pBJ/vkop3M1YwZAVwvdwlFLoJwKEZ9L98l3tzeyMzq27CyepDQ3Qgoba44StgbiN5Q==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.21.5': resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.17.6': + resolution: {integrity: sha512-a3yHLmOodHrzuNgdpB7peFGPx1iJ2x6m+uDvhP2CKdr2CwOaqEFMeSqYAHU7hG+RjCq8r2NFujcd/YsEsFgTGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.21.5': resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] + '@esbuild/netbsd-x64@0.17.6': + resolution: {integrity: sha512-EanJqcU/4uZIBreTrnbnre2DXgXSa+Gjap7ifRfllpmyAU7YMvaXmljdArptTHmjrkkKm9BK6GH5D5Yo+p6y5A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.21.5': resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] + '@esbuild/openbsd-x64@0.17.6': + resolution: {integrity: sha512-xaxeSunhQRsTNGFanoOkkLtnmMn5QbA0qBhNet/XLVsc+OVkpIWPHcr3zTW2gxVU5YOHFbIHR9ODuaUdNza2Vw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.21.5': resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] + '@esbuild/sunos-x64@0.17.6': + resolution: {integrity: sha512-gnMnMPg5pfMkZvhHee21KbKdc6W3GR8/JuE0Da1kjwpK6oiFU3nqfHuVPgUX2rsOx9N2SadSQTIYV1CIjYG+xw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.21.5': resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.17.6': + resolution: {integrity: sha512-G95n7vP1UnGJPsVdKXllAJPtqjMvFYbN20e8RK8LVLhlTiSOH1sd7+Gt7rm70xiG+I5tM58nYgwWrLs6I1jHqg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.21.5': resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.17.6': + resolution: {integrity: sha512-96yEFzLhq5bv9jJo5JhTs1gI+1cKQ83cUpyxHuGqXVwQtY5Eq54ZEsKs8veKtiKwlrNimtckHEkj4mRh4pPjsg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.21.5': resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.17.6': + resolution: {integrity: sha512-n6d8MOyUrNp6G4VSpRcgjs5xj4A91svJSaiwLIDWVWEsZtpN5FA9NlBbZHDmAJc2e8e6SF4tkBD3HAvPF+7igA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.21.5': resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} @@ -931,21 +1025,6 @@ packages: '@fastify/multipart@8.3.0': resolution: {integrity: sha512-A8h80TTyqUzaMVH0Cr9Qcm6RxSkVqmhK/MVBYHYeRRSUbUYv08WecjWKSlG2aSnD4aGI841pVxAjC+G1GafUeQ==} - '@floating-ui/core@1.6.3': - resolution: {integrity: sha512-1ZpCvYf788/ZXOhRQGFxnYQOVgeU+pi0i+d0Ow34La7qjIXETi6RNswGVKkA6KcDO8/+Ysu2E/CeUmmeEBDvTg==} - - '@floating-ui/dom@1.6.6': - resolution: {integrity: sha512-qiTYajAnh3P+38kECeffMSQgbvXty2VB6rS+42iWR4FPIlZjLK84E9qtLnMTLIpPz2znD/TaFqaiavMUrS+Hcw==} - - '@floating-ui/react-dom@2.1.1': - resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - '@floating-ui/utils@0.2.3': - resolution: {integrity: sha512-XGndio0l5/Gvd6CLIABvsav9HHezgDFFhDfHk1bvLfr9ni8dojqLSvBbotJEjmIwNHL7vK4QzBJTdBRoB+c1ww==} - '@google-cloud/run@1.3.0': resolution: {integrity: sha512-Ke9XZuKbOcA8lDYJ6VqpC1cVg42CWJWBer2R6/ix2EvfX/akDgqQBQMhZ8JwXHc4RtwYy/SeRE838ggQO4TYKQ==} engines: {node: '>=14.0.0'} @@ -1018,13 +1097,6 @@ 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 - '@graphql-codegen/typescript-react-apollo@4.3.0': - resolution: {integrity: sha512-h+IxCGrOTDD60/6ztYDQs81yKDZZq/8aHqM9HHrZ9FiZn145O48VnQNCmGm88I619G9rEET8cCOrtYkCt+ZSzA==} - engines: {node: '>= 16.0.0'} - 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 - graphql-tag: ^2.0.0 - '@graphql-codegen/typescript@4.0.8': resolution: {integrity: sha512-kYS3SjGNnC9vgFS8N3vaxzRFkdXX2umMi1SOpHjMFCPjMe8NR0uNdW4nP9T0YEq+DvWgj+XojjpFy2oyz9q12w==} peerDependencies: @@ -1231,6 +1303,10 @@ packages: '@ioredis/commands@1.2.0': resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + '@istanbuljs/schema@0.1.3': resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} @@ -1263,6 +1339,9 @@ packages: '@js-sdsl/ordered-map@4.4.2': resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + '@jspm/core@2.0.1': + resolution: {integrity: sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==} + '@kamilkisiela/fast-url-parser@1.1.4': resolution: {integrity: sha512-gbkePEBupNydxCelHCESvFSFM8XPh1Zs/OAVRW/rKpEqPAl5PbOM90Si8mv9bvnR53uPD2s/FiRxdvSejpRJew==} @@ -1270,104 +1349,8 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true - '@mui/base@5.0.0-beta.40': - resolution: {integrity: sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - - '@mui/core-downloads-tracker@5.15.21': - resolution: {integrity: sha512-dp9lXBaJZzJYeJfQY3Ow4Rb49QaCEdkl2KKYscdQHQm6bMJ+l4XPY3Cd9PCeeJTsHPIDJ60lzXbeRgs6sx/rpw==} - - '@mui/icons-material@5.15.21': - resolution: {integrity: sha512-yqkq1MbdkmX5ZHyvZTBuAaA6RkvoqkoAgwBSx9Oh0L0jAfj9T/Ih/NhMNjkl8PWVSonjfDUkKroBnjRyo/1M9Q==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@mui/material': ^5.0.0 - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - - '@mui/material@5.15.21': - resolution: {integrity: sha512-nTyCcgduKwHqiuQ/B03EQUa+utSMzn2sQp0QAibsnYe4tvc3zkMbO0amKpl48vhABIY3IvT6w9615BFIgMt0YA==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@emotion/react': ^11.5.0 - '@emotion/styled': ^11.3.0 - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@emotion/react': - optional: true - '@emotion/styled': - optional: true - '@types/react': - optional: true - - '@mui/private-theming@5.15.20': - resolution: {integrity: sha512-BK8F94AIqSrnaPYXf2KAOjGZJgWfvqAVQ2gVR3EryvQFtuBnG6RwodxrCvd3B48VuMy6Wsk897+lQMUxJyk+6g==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - - '@mui/styled-engine@5.15.14': - resolution: {integrity: sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@emotion/react': ^11.4.1 - '@emotion/styled': ^11.3.0 - react: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@emotion/react': - optional: true - '@emotion/styled': - optional: true - - '@mui/system@5.15.20': - resolution: {integrity: sha512-LoMq4IlAAhxzL2VNUDBTQxAb4chnBe8JvRINVNDiMtHE2PiPOoHlhOPutSxEbaL5mkECPVWSv6p8JEV+uykwIA==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@emotion/react': ^11.5.0 - '@emotion/styled': ^11.3.0 - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@emotion/react': - optional: true - '@emotion/styled': - optional: true - '@types/react': - optional: true - - '@mui/types@7.2.14': - resolution: {integrity: sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==} - peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - - '@mui/utils@5.15.20': - resolution: {integrity: sha512-mAbYx0sovrnpAu1zHc3MDIhPqL8RPVC5W5xcO1b7PiSCJPtckIZmBkp8hefamAvUiAV8gpfMOM6Zb+eSisbI2A==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@mdx-js/mdx@2.3.0': + resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -1381,6 +1364,22 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@npmcli/fs@3.1.1': + resolution: {integrity: sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/git@4.1.0': + resolution: {integrity: sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/package-json@4.0.1': + resolution: {integrity: sha512-lRCEGdHZomFsURroh522YvA/2cVb9oPIJrjHanCJZkiasz1BzcnLr3tBJhlV7S86MBJBuAQ33is2D60YitZL2Q==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/promise-spawn@6.0.2': + resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@peculiar/asn1-schema@2.3.8': resolution: {integrity: sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==} @@ -1392,6 +1391,10 @@ packages: resolution: {integrity: sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==} engines: {node: '>=10.12.0'} + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} @@ -1425,19 +1428,116 @@ packages: '@protobufjs/utf8@1.1.0': resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@react-aria/ssr@3.9.4': + resolution: {integrity: sha512-4jmAigVq409qcJvQyuorsmBR4+9r3+JEC60wC+Y0MZV0HCtTmm8D9guYXlJMdx0SSkgj0hHAyFm/HvPNFofCoQ==} + engines: {node: '>= 12'} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + '@react-oauth/google@0.12.1': resolution: {integrity: sha512-qagsy22t+7UdkYAiT5ZhfM4StXi9PPNvw0zuwNmabrWyMKddczMtBIOARflbaIj+wHiQjnMAsZmzsUYuXeyoSg==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' - '@remix-run/router@1.17.0': - resolution: {integrity: sha512-2D6XaHEVvkCn682XBnipbJjgZUU7xjLtA4dGJRBVUKpEaDYOZMENZoZjAOSb7qirxt5RupjzZxz4fK2FO+EFPw==} + '@remix-run/dev@2.10.0': + resolution: {integrity: sha512-GZE4Rck6/1Q16/QtRSq1SyfVf6KhUvJqHZoTmAl56xRVscyA1alDugXVHihwd0YuoaS6/vZ3Rb4eI5roWVrExw==} + engines: {node: '>=18.0.0'} + hasBin: true + peerDependencies: + '@remix-run/react': ^2.10.0 + '@remix-run/serve': ^2.10.0 + typescript: ^5.1.0 + vite: ^5.1.0 + wrangler: ^3.28.2 + peerDependenciesMeta: + '@remix-run/serve': + optional: true + typescript: + optional: true + vite: + optional: true + wrangler: + optional: true + + '@remix-run/express@2.10.0': + resolution: {integrity: sha512-xmHxumbglfbCVJa9a9dMDtOD408DYH27LAHuGfEAPPSf5sc9WMEFBItNxp3bJZ2W2NDeava+h+7BIeR5wNpgxw==} + engines: {node: '>=18.0.0'} + peerDependencies: + express: ^4.19.2 + typescript: ^5.1.0 + peerDependenciesMeta: + typescript: + optional: true + + '@remix-run/node@2.10.0': + resolution: {integrity: sha512-hFBt431leCEoN84kVj6BExv60+3KHFORTU2t24igJNtXPNCHH/pujMMKYaSrS3a5oKDTwwqbCmSztTyyr7uFLA==} + engines: {node: '>=18.0.0'} + peerDependencies: + typescript: ^5.1.0 + peerDependenciesMeta: + typescript: + optional: true + + '@remix-run/react@2.10.0': + resolution: {integrity: sha512-XgNpyAoiNCq0jDZb8HPUS6sNJGWx31iJoqOlPy4KkjNexhq+COCN9QzXvsPIm2LpcPG3w7+loKmLMCTsTlH+Eg==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + typescript: ^5.1.0 + peerDependenciesMeta: + typescript: + optional: true + + '@remix-run/router@1.17.0': + resolution: {integrity: sha512-2D6XaHEVvkCn682XBnipbJjgZUU7xjLtA4dGJRBVUKpEaDYOZMENZoZjAOSb7qirxt5RupjzZxz4fK2FO+EFPw==} engines: {node: '>=14.0.0'} + '@remix-run/serve@2.10.0': + resolution: {integrity: sha512-JOF2x8HwXo4G5hOqKEUEG7Xm2ZYYL0kZJcWdJVIQxaRN/EmbmJCKGLcW21rZ6VZ/FqpEkSnwmiGFoDkPQ9q6lg==} + engines: {node: '>=18.0.0'} + hasBin: true + + '@remix-run/server-runtime@2.10.0': + resolution: {integrity: sha512-lwgMq3m8U+oz0ZmgOrQeAE3tf6g1LPf2+ff3lgb5xb4bx7bV5VGGwKkzRK4+0fDguHXcW+YcppvdYdnKzQn1YQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + typescript: ^5.1.0 + peerDependenciesMeta: + typescript: + optional: true + + '@remix-run/web-blob@3.1.0': + resolution: {integrity: sha512-owGzFLbqPH9PlKb8KvpNJ0NO74HWE2euAn61eEiyCXX/oteoVzTVSN8mpLgDjaxBf2btj5/nUllSUgpyd6IH6g==} + + '@remix-run/web-fetch@4.4.2': + resolution: {integrity: sha512-jgKfzA713/4kAW/oZ4bC3MoLWyjModOVDjFPNseVqcJKSafgIscrYL9G50SurEYLswPuoU3HzSbO0jQCMYWHhA==} + engines: {node: ^10.17 || >=12.3} + + '@remix-run/web-file@3.1.0': + resolution: {integrity: sha512-dW2MNGwoiEYhlspOAXFBasmLeYshyAyhIdrlXBi06Duex5tDr3ut2LFKVj7tyHLmn8nnNwFf1BjNbkQpygC2aQ==} + + '@remix-run/web-form-data@3.1.0': + resolution: {integrity: sha512-NdeohLMdrb+pHxMQ/Geuzdp0eqPbea+Ieo8M8Jx2lGC6TBHsgHzYcBvr0LyPdPVycNRDEpWpiDdCOdCryo3f9A==} + + '@remix-run/web-stream@1.1.0': + resolution: {integrity: sha512-KRJtwrjRV5Bb+pM7zxcTJkhIqWWSy+MYsIxHK+0m5atcznsf15YwUBWHWulZerV2+vvHH1Lp1DD7pw6qKW8SgA==} + '@repeaterjs/repeater@3.0.6': resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} + '@restart/hooks@0.4.16': + resolution: {integrity: sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w==} + peerDependencies: + react: '>=16.8.0' + + '@restart/ui@1.6.9': + resolution: {integrity: sha512-mUbygUsJcRurjZCt1f77gg4DpheD1D+Sc7J3JjAkysUj7t8m4EBJVOqWC9788Qtbc69cJ+HlJc6jBguKwS8Mcw==} + peerDependencies: + react: '>=16.14.0' + react-dom: '>=16.14.0' + '@rollup/pluginutils@5.1.0': resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} @@ -1602,6 +1702,9 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + '@swc/helpers@0.5.11': + resolution: {integrity: sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==} + '@swc/types@0.1.9': resolution: {integrity: sha512-qKnCno++jzcJ4lM4NTfYifm1EFSCeIfKiAHAfkENZAV5Kl9PjJIyd2yeeVv6c/2CckuLyv2NmRC5pv6pm2WQBg==} @@ -1609,17 +1712,8 @@ packages: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.6.8': - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/acorn@4.0.6': + resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} '@types/bcrypt@5.0.2': resolution: {integrity: sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==} @@ -1633,6 +1727,15 @@ packages: '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} @@ -1642,6 +1745,9 @@ packages: '@types/express@4.17.21': resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + '@types/hast@2.3.10': + resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} + '@types/http-errors@2.0.4': resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} @@ -1654,9 +1760,18 @@ packages: '@types/long@4.0.2': resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} + '@types/mdast@3.0.15': + resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} + + '@types/mdx@2.0.13': + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + '@types/ms@0.7.34': + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + '@types/node-fetch@2.6.11': resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} @@ -1705,14 +1820,26 @@ packages: '@types/triple-beam@1.3.5': resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + '@types/unist@2.0.10': + resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} + + '@types/warning@3.0.3': + resolution: {integrity: sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==} + '@types/ws@8.5.10': resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} - '@vitejs/plugin-react@4.3.1': - resolution: {integrity: sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.2.0 || ^5.0.0 + '@vanilla-extract/babel-plugin-debug-ids@1.0.6': + resolution: {integrity: sha512-C188vUEYmw41yxg3QooTs8r1IdbDQQ2mH7L5RkORBnHx74QlmsNfqVmKwAVTgrlYt8JoRaWMtPfGm/Ql0BNQrA==} + + '@vanilla-extract/css@1.15.3': + resolution: {integrity: sha512-mxoskDAxdQAspbkmQRxBvolUi1u1jnyy9WZGm+GeH8V2wwhEvndzl1QoK7w8JfA0WFevTxbev5d+i+xACZlPhA==} + + '@vanilla-extract/integration@6.5.0': + resolution: {integrity: sha512-E2YcfO8vA+vs+ua+gpvy1HRqvgWbI+MTlUpxA8FvatOvybuNcWAY0CKwQ/Gpj7rswYKtC6C7+xw33emM6/ImdQ==} + + '@vanilla-extract/private@1.0.5': + resolution: {integrity: sha512-6YXeOEKYTA3UV+RC8DeAjFk+/okoNz/h88R+McnzA2zpaVqTR/Ep+vszkWYlGBcMNO7vEkqbq5nT/JMMvhi+tw==} '@vitest/coverage-v8@1.6.0': resolution: {integrity: sha512-KvapcbMY/8GYIG0rlwwOKCVNRc0OL20rrhFkg/CHNzncV03TE2XWvO5w9uZYoxNiMEBacAJt3unSOiZ7svePew==} @@ -1734,6 +1861,9 @@ packages: '@vitest/utils@1.6.0': resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==} + '@web3-storage/multipart-parser@1.0.0': + resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==} + '@whatwg-node/events@0.0.3': resolution: {integrity: sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA==} @@ -1755,25 +1885,8 @@ packages: resolution: {integrity: sha512-LS8tSomZa3YHnntpWt3PP43iFEEl6YeIsvDakczHBKlay5LdkXFr8w7v8H6akpG5nRrzydyB0k1iE2eoL6aKIQ==} engines: {node: '>=16.0.0'} - '@wry/caches@1.0.1': - resolution: {integrity: sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA==} - engines: {node: '>=8'} - - '@wry/context@0.7.4': - resolution: {integrity: sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ==} - engines: {node: '>=8'} - - '@wry/equality@0.5.7': - resolution: {integrity: sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw==} - engines: {node: '>=8'} - - '@wry/trie@0.4.3': - resolution: {integrity: sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w==} - engines: {node: '>=8'} - - '@wry/trie@0.5.0': - resolution: {integrity: sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA==} - engines: {node: '>=8'} + '@zxing/text-encoding@0.9.0': + resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==} abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} @@ -1789,6 +1902,11 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-walk@8.3.3: resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} engines: {node: '>=0.4.0'} @@ -1837,6 +1955,10 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -1849,6 +1971,13 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -1861,6 +1990,9 @@ packages: engines: {node: '>=10'} deprecated: This package is no longer supported. + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -1885,6 +2017,10 @@ packages: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} + astring@1.8.6: + resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} + hasBin: true + async-retry@1.3.3: resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} @@ -1906,6 +2042,17 @@ packages: resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} engines: {node: '>=8'} + autoprefixer@10.4.19: + resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + avvio@8.3.2: resolution: {integrity: sha512-st8e519GWHa/azv8S87mcJvZs4WsgTBjOw/Ih1CP6u+8SZvcOeAYNG6JbsIrAUUJJ7JfmrnOkR8ipDS+u9SIRQ==} @@ -1924,12 +2071,19 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + basic-auth@2.0.1: + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} + bcrypt@5.1.1: resolution: {integrity: sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==} engines: {node: '>= 10.0.0'} @@ -1951,10 +2105,16 @@ packages: brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + browserify-zlib@0.1.4: + resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==} + browserslist@4.23.1: resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -1966,6 +2126,9 @@ packages: buffer-equal-constant-time@1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} @@ -1976,6 +2139,10 @@ packages: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} + bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -1984,6 +2151,10 @@ packages: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} + cacache@17.1.4: + resolution: {integrity: sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -1995,6 +2166,10 @@ packages: camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} @@ -2005,6 +2180,9 @@ packages: capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@4.4.1: resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} engines: {node: '>=4'} @@ -2026,6 +2204,18 @@ packages: change-case@4.1.2: resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} @@ -2036,10 +2226,16 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -2071,10 +2267,6 @@ packages: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} - clsx@1.2.1: - resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} - engines: {node: '>=6'} - clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -2116,10 +2308,25 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + common-tags@1.8.2: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} engines: {node: '>=4.0.0'} + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -2140,19 +2347,23 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} - convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + cookie-signature@1.2.1: + resolution: {integrity: sha512-78KWk9T26NhzXtuL26cIJ8/qNHANyJ/ZYrmEXFzUmhZdjpBv+DlWlOANRTGBt48YcyslsLrj0bMLFTmXvLRCOw==} + engines: {node: '>=6.6.0'} + cookie@0.6.0: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + cors@2.8.5: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} @@ -2181,9 +2392,22 @@ packages: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + data-uri-to-buffer@3.0.1: + resolution: {integrity: sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==} + engines: {node: '>= 6'} + dataloader@2.2.2: resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==} @@ -2214,10 +2438,28 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} + decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + deep-eql@4.1.4: resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} engines: {node: '>=6'} + deep-object-diff@1.1.9: + resolution: {integrity: sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} @@ -2244,6 +2486,10 @@ packages: resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} engines: {node: '>= 0.6.0'} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -2256,14 +2502,24 @@ packages: resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} @@ -2281,9 +2537,15 @@ packages: duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + duplexify@3.7.1: + resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} + duplexify@4.1.3: resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} @@ -2296,6 +2558,9 @@ packages: emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + enabled@2.0.0: resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} @@ -2306,6 +2571,9 @@ packages: end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -2317,6 +2585,20 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} + es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + + esbuild-plugins-node-modules-polyfill@1.6.4: + resolution: {integrity: sha512-x3MCOvZrKDGAfqAYS/pZUUSwiN+XH7x84A+Prup0CZBJKuGfuGkTAC4g01D6JPs/GCM9wzZVfd8bmiy+cP/iXA==} + engines: {node: '>=14.0.0'} + peerDependencies: + esbuild: ^0.14.0 || ^0.15.0 || ^0.16.0 || ^0.17.0 || ^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 + + esbuild@0.17.6: + resolution: {integrity: sha512-TKFRp9TxrJDdRWfSsSERKEovm6v30iHnrjlcGhLBOtReE28Yp1VSBRfO3GTaOFMoxsNerx4TjrhzSuma9ha83Q==} + engines: {node: '>=12'} + hasBin: true + esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} @@ -2333,9 +2615,27 @@ packages: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} + estree-util-attach-comments@2.1.1: + resolution: {integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==} + + estree-util-build-jsx@2.2.2: + resolution: {integrity: sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==} + + estree-util-is-identifier-name@1.1.0: + resolution: {integrity: sha512-OVJZ3fGGt9By77Ix9NhaRbzfbDV/2rx9EP7YIDJTmsZSEc5kYn2vWcNccYyahJL2uAQZK2a5Or2i0wtIKTPoRQ==} + + estree-util-is-identifier-name@2.1.0: + resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} + + estree-util-to-js@1.2.0: + resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==} + + estree-util-value-to-estree@1.3.0: + resolution: {integrity: sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==} + engines: {node: '>=12.0.0'} + + estree-util-visit@1.2.1: + resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==} estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} @@ -2347,6 +2647,10 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + eval@0.1.8: + resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==} + engines: {node: '>= 0.8'} + event-stream@3.3.4: resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} @@ -2358,10 +2662,18 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} + exit-hook@2.2.1: + resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} + engines: {node: '>=6'} + express@4.19.2: resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} engines: {node: '>= 0.10.0'} @@ -2415,6 +2727,9 @@ packages: fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -2447,13 +2762,14 @@ packages: resolution: {integrity: sha512-HdWXgFYc6b1BJcOBDBwjqWuHJj1WYiqrxSh25qtU4DabpMFdj/gSunNBQb83t+8Zt67D7CXEzJWTkxaShMTMOA==} engines: {node: '>=14'} - find-root@1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} @@ -2466,6 +2782,13 @@ packages: debug: optional: true + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@3.2.1: + resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} + engines: {node: '>=14'} + form-data@2.5.1: resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} engines: {node: '>= 0.12'} @@ -2474,10 +2797,17 @@ packages: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} + format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} @@ -2485,10 +2815,21 @@ packages: from@0.1.7: resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} + fs-minipass@3.0.3: + resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -2513,6 +2854,9 @@ packages: resolution: {integrity: sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==} engines: {node: '>=14'} + generic-names@4.0.0: + resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -2528,6 +2872,14 @@ packages: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} + get-port@5.1.1: + resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} @@ -2539,6 +2891,15 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.4.2: + resolution: {integrity: sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==} + engines: {node: '>=16 || 14 >=14.18'} + hasBin: true + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -2551,11 +2912,6 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} - goober@2.1.14: - resolution: {integrity: sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg==} - peerDependencies: - csstype: ^3.0.10 - google-auth-library@9.11.0: resolution: {integrity: sha512-epX3ww/mNnhl6tL45EQ/oixsY8JLEgUFoT4A5E/5iAR4esld9Kqv6IJGk7EmGuOgDvaarwF95hU2+v7Irql9lw==} engines: {node: '>=14'} @@ -2567,6 +2923,9 @@ packages: gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graphql-config@5.0.3: resolution: {integrity: sha512-BNGZaoxIBkv9yy6Y7omvsaBUHOzfFcII3UN++tpH8MGOKFPFkCPZuwx09ggANMt8FgyWP1Od8SWPmrUEZca4NQ==} engines: {node: '>= 16.0.0'} @@ -2605,6 +2964,10 @@ packages: resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} engines: {node: '>=14.0.0'} + gunzip-maybe@1.4.2: + resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} + hasBin: true + has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -2624,6 +2987,10 @@ packages: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} @@ -2631,11 +2998,18 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hast-util-to-estree@2.3.3: + resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} + + hast-util-whitespace@2.0.1: + resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} + header-case@2.0.4: resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} - hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + hosted-git-info@6.1.1: + resolution: {integrity: sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -2660,6 +3034,10 @@ packages: resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} engines: {node: '>= 14'} + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} @@ -2668,6 +3046,12 @@ packages: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} + icss-utils@5.1.0: + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -2690,6 +3074,10 @@ packages: resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} engines: {node: '>=12.2'} + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} @@ -2705,6 +3093,9 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + inline-style-parser@0.1.1: + resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + inquirer@8.2.6: resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} engines: {node: '>=12.0.0'} @@ -2724,6 +3115,16 @@ packages: resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} engines: {node: '>=0.10.0'} + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -2734,10 +3135,24 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} + is-buffer@2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + is-core-module@2.14.0: resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} engines: {node: '>= 0.4'} + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + + is-deflate@1.0.0: + resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==} + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -2746,10 +3161,21 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-gzip@1.0.0: + resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==} + engines: {node: '>=0.10.0'} + + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} @@ -2761,6 +3187,17 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-reference@3.0.2: + resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} + is-relative@1.0.0: resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} engines: {node: '>=0.10.0'} @@ -2773,6 +3210,10 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + is-unc-path@1.0.0: resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} engines: {node: '>=0.10.0'} @@ -2788,6 +3229,13 @@ packages: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isbot@4.4.0: + resolution: {integrity: sha512-8ZvOWUA68kyJO4hHJdWjyreq7TYNWTS9y15IzeqVdKxR9pPr3P/3r9AHcoIv9M0Rllkao5qWz2v1lmcyKIVCzQ==} + engines: {node: '>=18'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -2812,6 +3260,13 @@ packages: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} + jackspeak@3.4.0: + resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} + engines: {node: '>=14'} + + javascript-stringify@2.1.0: + resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} + jira.js@4.0.1: resolution: {integrity: sha512-2zf8LozW9rgx5wgTdGSJMhUXDK1g8a/ngm1xDWnREX/h8kuBhNkMro4XELA2XRVvaNTbRMIK3PBgOvWFDddhIw==} @@ -2822,6 +3277,18 @@ packages: jose@5.6.2: resolution: {integrity: sha512-F1t1/WZJ4JdmCE/XoMYw1dPOW5g8JF0xGm6Ox2fwaCAPlCzt+4Bh0EWP59iQuZNHHauDkCdjx+kCZSh5z/PGow==} + jotai@2.8.4: + resolution: {integrity: sha512-f6jwjhBJcDtpeauT2xH01gnqadKEySwwt1qNBLvAXcnojkmb76EdqRt05Ym8IamfHGAQz2qMKAwftnyjeSoHAA==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=17.0.0' + react: '>=17.0.0' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -2837,12 +3304,21 @@ packages: engines: {node: '>=4'} hasBin: true + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + json-bigint@1.0.0: resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-parse-even-better-errors@3.0.2: + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + json-schema-ref-resolver@1.0.1: resolution: {integrity: sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==} @@ -2858,6 +3334,9 @@ packages: engines: {node: '>=6'} hasBin: true + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonwebtoken@9.0.2: resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} engines: {node: '>=12', npm: '>=6'} @@ -2878,12 +3357,24 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + kuler@2.0.0: resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} light-my-request@5.13.0: resolution: {integrity: sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ==} + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lilconfig@3.1.2: + resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} + engines: {node: '>=14'} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -2900,6 +3391,10 @@ packages: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + loader-utils@3.3.1: + resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} + engines: {node: '>= 12.13.0'} + local-pkg@0.5.0: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} @@ -2908,9 +3403,16 @@ packages: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + lodash.defaults@4.2.0: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} @@ -2966,6 +3468,9 @@ packages: long@5.2.3: resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -2979,6 +3484,10 @@ packages: lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + lru-cache@10.3.0: + resolution: {integrity: sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==} + engines: {node: 14 || >=16.14} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -2986,6 +3495,11 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} + lucide-react@0.399.0: + resolution: {integrity: sha512-UyTNa3djBISdzL2UktgCrESXexQXaDQWi/WsDkbw6fBFfHlapajR58WoR+gxQ4laxfEyiHmoFrEIM3V+5XOVQg==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + magic-string@0.30.10: resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} @@ -3007,6 +3521,46 @@ packages: map-stream@0.1.0: resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} + markdown-extensions@1.1.1: + resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} + engines: {node: '>=0.10.0'} + + mdast-util-definitions@5.1.2: + resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} + + mdast-util-from-markdown@1.3.1: + resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + + mdast-util-frontmatter@1.0.1: + resolution: {integrity: sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==} + + mdast-util-mdx-expression@1.3.2: + resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} + + mdast-util-mdx-jsx@2.1.4: + resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} + + mdast-util-mdx@2.0.1: + resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} + + mdast-util-mdxjs-esm@1.3.1: + resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} + + mdast-util-phrasing@3.0.1: + resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + + mdast-util-to-hast@12.3.0: + resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} + + mdast-util-to-markdown@1.5.0: + resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} + + mdast-util-to-string@3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + + media-query-parser@2.0.2: + resolution: {integrity: sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==} + media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} @@ -3034,6 +3588,93 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} + micromark-core-commonmark@1.1.0: + resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + + micromark-extension-frontmatter@1.1.1: + resolution: {integrity: sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==} + + micromark-extension-mdx-expression@1.0.8: + resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==} + + micromark-extension-mdx-jsx@1.0.5: + resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==} + + micromark-extension-mdx-md@1.0.1: + resolution: {integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==} + + micromark-extension-mdxjs-esm@1.0.5: + resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==} + + micromark-extension-mdxjs@1.0.1: + resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} + + micromark-factory-destination@1.1.0: + resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} + + micromark-factory-label@1.1.0: + resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} + + micromark-factory-mdx-expression@1.0.9: + resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==} + + micromark-factory-space@1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + + micromark-factory-title@1.1.0: + resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} + + micromark-factory-whitespace@1.1.0: + resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} + + micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + + micromark-util-chunked@1.1.0: + resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} + + micromark-util-classify-character@1.1.0: + resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} + + micromark-util-combine-extensions@1.1.0: + resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} + + micromark-util-decode-numeric-character-reference@1.1.0: + resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} + + micromark-util-decode-string@1.1.0: + resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + + micromark-util-encode@1.1.0: + resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} + + micromark-util-events-to-acorn@1.2.3: + resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} + + micromark-util-html-tag-name@1.2.0: + resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} + + micromark-util-normalize-identifier@1.1.0: + resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} + + micromark-util-resolve-all@1.1.0: + resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} + + micromark-util-sanitize-uri@1.2.0: + resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} + + micromark-util-subtokenize@1.1.0: + resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} + + micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + + micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + + micromark@3.2.0: + resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + micromatch@4.0.7: resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} @@ -3071,6 +3712,25 @@ packages: resolution: {integrity: sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==} engines: {node: '>=10'} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass-collect@1.0.2: + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} + + minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + + minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + minipass@3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} @@ -3079,10 +3739,17 @@ packages: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} @@ -3094,21 +3761,20 @@ packages: mnemonist@0.39.6: resolution: {integrity: sha512-A/0v5Z59y63US00cRSLiloEIw3t5G+MiKz4BhX21FI+YBJXBOGW0ohFxTxO08dsOYlzxo87T7vGfZKYp2bcAWA==} - mobx-react-lite@4.0.7: - resolution: {integrity: sha512-RjwdseshK9Mg8On5tyJZHtGD+J78ZnCnRaxeQDSiciKVQDUbfZcXhmld0VMxAwvcTnPEHZySGGewm467Fcpreg==} - peerDependencies: - mobx: ^6.9.0 - react: ^16.8.0 || ^17 || ^18 - react-dom: '*' - react-native: '*' - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true + modern-ahocorasick@1.0.1: + resolution: {integrity: sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA==} + + morgan@1.10.0: + resolution: {integrity: sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==} + engines: {node: '>= 0.8.0'} + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} - mobx@6.12.4: - resolution: {integrity: sha512-uIymg89x+HmItX1p3MG+d09irn2k63J6biftZ5Ok+UpNojS1I3NJPLfcmJT9ANnUltNlHi+HQqrVyxiAN8ISYg==} + mrmime@1.0.1: + resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} + engines: {node: '>=10'} ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -3122,6 +3788,9 @@ packages: mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -3163,6 +3832,10 @@ packages: engines: {node: '>=6'} hasBin: true + normalize-package-data@5.0.0: + resolution: {integrity: sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + normalize-path@2.1.1: resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} engines: {node: '>=0.10.0'} @@ -3171,12 +3844,29 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - notistack@3.0.1: - resolution: {integrity: sha512-ntVZXXgSQH5WYfyU+3HfcXuKaapzAJ8fBLQ/G618rn3yvSzEbnOB8ZSOwhX+dAORy/lw+GC2N061JA0+gYWTVA==} - engines: {node: '>=12.0.0', npm: '>=6.0.0'} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + npm-install-checks@6.3.0: + resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-normalize-package-bin@3.0.1: + resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-package-arg@10.1.0: + resolution: {integrity: sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-pick-manifest@8.0.2: + resolution: {integrity: sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} npm-run-path@5.3.0: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} @@ -3211,10 +3901,18 @@ packages: resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} engines: {node: '>=14.0.0'} + on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} + on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -3229,9 +3927,6 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} - optimism@0.18.0: - resolution: {integrity: sha512-tGn8+REwLRNFnb9WmcY5IfpOqeX2kpaYJ1s6Ae3mn12AeydLkR3j+jSCmVQFoXqU8D41PAJ1RG1rCRNWmNZVmQ==} - ora@5.4.1: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} @@ -3248,6 +3943,9 @@ packages: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} + outdent@0.8.0: + resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -3264,6 +3962,10 @@ packages: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} @@ -3272,6 +3974,12 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + + pako@0.2.9: + resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} + param-case@3.0.4: resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} @@ -3279,6 +3987,9 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-entities@4.0.1: + resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} + parse-filepath@1.0.2: resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} engines: {node: '>=0.8'} @@ -3287,6 +3998,10 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parse-ms@2.1.0: + resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} + engines: {node: '>=6'} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -3324,6 +4039,10 @@ packages: resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} engines: {node: '>=0.10.0'} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} @@ -3340,6 +4059,12 @@ packages: pause-stream@0.0.11: resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} + peek-stream@1.1.3: + resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} + + periscopic@3.1.0: + resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} + pg-cloudflare@1.1.1: resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==} @@ -3389,6 +4114,15 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + pino-abstract-transport@1.2.0: resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} @@ -3399,6 +4133,10 @@ packages: resolution: {integrity: sha512-g3/hpwfujK5a4oVbaefoJxezLzsDgLcNJeITvC6yrfwYeT9la+edCK42j5QpEQSQCZgTKapXvnQIdgZwvRaZug==} hasBin: true + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + pkg-types@1.1.1: resolution: {integrity: sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==} @@ -3406,8 +4144,84 @@ packages: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} - postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss-discard-duplicates@5.1.0: + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-modules-extract-imports@3.1.0: + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-local-by-default@4.0.5: + resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-scope@3.2.0: + resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-values@4.0.0: + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules@6.0.0: + resolution: {integrity: sha512-7DGfnlyi/ju82BRzTIjWS5C4Tafmzl3R79YP/PASiocj+aa6yYphHhhKUOEoXQToId5rgyFgJ88+ccOUydjBXQ==} + peerDependencies: + postcss: ^8.0.0 + + postcss-nested@6.0.1: + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.0: + resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.39: + resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} engines: {node: ^10 || ^12 || >=14} postgres-array@2.0.0: @@ -3448,10 +4262,26 @@ packages: pqb@0.36.5: resolution: {integrity: sha512-Jli8JefAQkEHtRm2MrJZpBPtT4/Yx5XcyWbl6F6lXJbK6TuuLMQ2AMomJ7F/grZEyDemfUSoPBH9h6ZI6nGCqg==} + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + pretty-format@29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-ms@7.0.1: + resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} + engines: {node: '>=10'} + + proc-log@3.0.0: + resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + process-warning@3.0.0: resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} @@ -3459,6 +4289,18 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + promise@7.3.1: resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} @@ -3466,9 +4308,17 @@ packages: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} + prop-types-extra@1.1.1: + resolution: {integrity: sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==} + peerDependencies: + react: '>=0.14.0' + prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + proto3-json-serializer@2.0.2: resolution: {integrity: sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ==} engines: {node: '>=14.0.0'} @@ -3489,6 +4339,15 @@ packages: engines: {node: '>= 0.10'} hasBin: true + pump@2.0.1: + resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} + + pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + + pumpify@1.5.1: + resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} + punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} @@ -3524,6 +4383,16 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + react-bootstrap@2.10.4: + resolution: {integrity: sha512-W3398nBM2CBfmGP2evneEO3ZZwEMPtHs72q++eNw60uDGDAdiGn0f9yNys91eo7/y8CTF5Ke1C0QO8JFVPU40Q==} + peerDependencies: + '@types/react': '>=16.14.8' + react: '>=16.14.0' + react-dom: '>=16.14.0' + peerDependenciesMeta: + '@types/react': + optional: true + react-dom@18.3.1: resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: @@ -3541,6 +4410,9 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + react-lifecycles-compat@3.0.4: + resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} + react-refresh@0.14.2: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} @@ -3568,6 +4440,12 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} @@ -3598,20 +4476,25 @@ packages: regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - rehackt@0.1.0: - resolution: {integrity: sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw==} - peerDependencies: - '@types/react': '*' - react: '*' - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true - relay-runtime@12.0.0: resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} + remark-frontmatter@4.0.1: + resolution: {integrity: sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==} + + remark-mdx-frontmatter@1.1.1: + resolution: {integrity: sha512-7teX9DW4tI2WZkXS4DBxneYSY7NHiXl4AKdWDO9LXVweULlCT8OPWsOjLEnMIXViN1j+QcY8mfbq3k0EK6x3uA==} + engines: {node: '>=12.2.0'} + + remark-mdx@2.3.0: + resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==} + + remark-parse@10.0.2: + resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} + + remark-rehype@10.1.0: + resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} + remeda@2.2.1: resolution: {integrity: sha512-/nC9lgpfV45nfN5nySynVZ7etCg5OCDlW3+Ga908306TxMv52bV7Av5TcOQq55oFQSDrbNdV1Jw92Nyxu6oIkQ==} @@ -3632,6 +4515,9 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + require-like@0.1.2: + resolution: {integrity: sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==} + require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} @@ -3646,14 +4532,14 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} + resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true - response-iterator@0.2.6: - resolution: {integrity: sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==} - engines: {node: '>=0.8'} - restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} @@ -3666,6 +4552,10 @@ packages: resolution: {integrity: sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==} engines: {node: '>=14'} + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} @@ -3700,6 +4590,13 @@ packages: rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -3818,10 +4715,32 @@ packages: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} - source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.18: + resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} + split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} @@ -3832,6 +4751,10 @@ packages: sponge-case@1.0.1: resolution: {integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==} + ssri@10.0.6: + resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + stack-trace@0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} @@ -3857,6 +4780,9 @@ packages: stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + stream-slice@0.1.2: + resolution: {integrity: sha512-QzQxpoacatkreL6jsxnVb7X5R/pGw9OUv2qWTYWnmLpg4NdN31snPy/f3TdQE1ZUXaThRvj1Zw4/OGg0ZkaLMA==} + stream-wormhole@1.1.0: resolution: {integrity: sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew==} engines: {node: '>=4.0.0'} @@ -3872,17 +4798,42 @@ packages: string-env-interpolation@1.0.1: resolution: {integrity: sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==} + string-hash@1.1.3: + resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} @@ -3893,8 +4844,13 @@ packages: stubs@3.0.0: resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==} - stylis@4.2.0: - resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + style-to-object@0.4.4: + resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} @@ -3911,9 +4867,17 @@ packages: swap-case@2.0.2: resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} - symbol-observable@4.0.0: - resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} - engines: {node: '>=0.10'} + tailwindcss@3.4.4: + resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==} + engines: {node: '>=14.0.0'} + hasBin: true + + tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} @@ -3930,9 +4894,19 @@ packages: text-hex@1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thread-stream@3.1.0: resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -3970,16 +4944,24 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + triple-beam@1.4.1: resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} engines: {node: '>= 14.0.0'} - ts-invariant@0.10.3: - resolution: {integrity: sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==} - engines: {node: '>=8'} + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} ts-log@2.2.5: resolution: {integrity: sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA==} @@ -3991,6 +4973,10 @@ packages: peerDependencies: typescript: '*' + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -4012,6 +4998,9 @@ packages: tunajs@1.0.15: resolution: {integrity: sha512-es0bgyTHP8ftyWEot7YqLlLH30yZqHUTT6K5TKFhVqIB1Y6Cuu8WvBunfTVQSmzrpuhz15PQjyen7uuwi4gjdw==} + turbo-stream@2.2.0: + resolution: {integrity: sha512-FKFg7A0To1VU4CH9YmSMON5QphK0BXjSoiC7D9yMh+mEEbXLUP9qJ4hEt1qcjKtzncs1OpcnjZO8NgrlVbZH+g==} + type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} @@ -4046,9 +5035,62 @@ packages: resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} engines: {node: '>=0.10.0'} + uncontrollable@7.2.1: + resolution: {integrity: sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==} + peerDependencies: + react: '>=15.0.0' + + uncontrollable@8.0.4: + resolution: {integrity: sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ==} + peerDependencies: + react: '>=16.14.0' + undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici@6.19.2: + resolution: {integrity: sha512-JfjKqIauur3Q6biAtHJ564e3bWa8VvT+7cSiOJHFbX4Erv6CLGDpg8z+Fmg/1OI/47RA+GI2QZaF48SSaLvyBA==} + engines: {node: '>=18.17'} + + unified@10.1.2: + resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + + unique-filename@3.0.0: + resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + unique-slug@4.0.0: + resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + unist-util-generated@2.0.1: + resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} + + unist-util-is@5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + + unist-util-position-from-estree@1.1.2: + resolution: {integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==} + + unist-util-position@4.0.4: + resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} + + unist-util-remove-position@4.0.2: + resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==} + + unist-util-stringify-position@3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + + unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + + unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + unixify@1.0.0: resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} engines: {node: '>=0.10.0'} @@ -4093,14 +5135,12 @@ packages: immer: '>=8.0.0' react: ^16.8.0 || ^17.0.1 || ^18.0.0 - use-sync-external-store@1.2.2: - resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} @@ -4113,6 +5153,18 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true + uvu@0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + value-or-promise@1.0.12: resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==} engines: {node: '>=12'} @@ -4121,6 +5173,12 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + vfile-message@3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + + vfile@5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + vite-node@1.6.0: resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==} engines: {node: ^18.0.0 || >=20.0.0} @@ -4179,12 +5237,18 @@ packages: jsdom: optional: true + warning@4.0.3: + resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==} + wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} web-audio-daw@4.13.2: resolution: {integrity: sha512-PdcqFXZemxlJtUT1/eROxcMZ6UB6Mu9g73DOORBcWbRdlISTvOObZToEYMf2M/lGyo+eOGqFPYtVsYmW3RrvcA==} + web-encoding@1.1.5: + resolution: {integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==} + web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} @@ -4212,11 +5276,20 @@ packages: which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true + which@3.0.1: + resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + why-is-node-running@2.2.2: resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} engines: {node: '>=8'} @@ -4241,11 +5314,27 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.17.1: - resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -4309,14 +5398,16 @@ packages: resolution: {integrity: sha512-cMojmlnwkAgIXqga+2sXshlgrrcI0QEPJ5n58pEvtuFo4PaekfomlCudArDD7hj8Hkswjl0/x4eu4q+Xa0WFgQ==} engines: {node: '>=12.20'} - zen-observable-ts@1.2.5: - resolution: {integrity: sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==} + zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} - zen-observable@0.8.15: - resolution: {integrity: sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==} + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} snapshots: + '@alloc/quick-lru@5.2.0': {} + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.5 @@ -4326,30 +5417,6 @@ snapshots: dependencies: graphql: 16.9.0 - '@apollo/client@3.10.8(@types/react@18.3.3)(graphql-ws@5.16.0(graphql@16.9.0))(graphql@16.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) - '@wry/caches': 1.0.1 - '@wry/equality': 0.5.7 - '@wry/trie': 0.5.0 - graphql: 16.9.0 - graphql-tag: 2.12.6(graphql@16.9.0) - hoist-non-react-statics: 3.3.2 - optimism: 0.18.0 - prop-types: 15.8.1 - rehackt: 0.1.0(@types/react@18.3.3)(react@18.3.1) - response-iterator: 0.2.6 - symbol-observable: 4.0.0 - ts-invariant: 0.10.3 - tslib: 2.6.3 - zen-observable-ts: 1.2.5 - optionalDependencies: - graphql-ws: 5.16.0(graphql@16.9.0) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - transitivePeerDependencies: - - '@types/react' - '@apollo/protobufjs@1.2.7': dependencies: '@protobufjs/aspromise': 1.1.2 @@ -4494,7 +5561,7 @@ snapshots: fastify: 4.28.1 fastify-plugin: 4.5.1 - '@athenajs/core@1.2.2': + '@athenajs/core@1.2.3': dependencies: '@apollo/server': 4.10.4(graphql@16.9.0) '@as-integrations/fastify': 2.1.1(@apollo/server@4.10.4(graphql@16.9.0))(fastify@4.28.1) @@ -4512,8 +5579,6 @@ snapshots: - encoding - supports-color - '@athenajs/react-utils@0.2.10': {} - '@athenajs/utils@1.2.4': dependencies: graphql: 16.9.0 @@ -4694,6 +5759,11 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-decorators@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-flow@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 @@ -4714,6 +5784,11 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 @@ -4817,16 +5892,6 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 @@ -4856,6 +5921,27 @@ snapshots: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-transform-typescript@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + + '@babel/preset-typescript@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-validator-option': 7.24.7 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-typescript': 7.24.7(@babel/core@7.24.7) + transitivePeerDependencies: + - supports-color + '@babel/runtime@7.24.7': dependencies: regenerator-runtime: 0.14.1 @@ -4932,155 +6018,140 @@ snapshots: enabled: 2.0.0 kuler: 2.0.0 - '@emotion/babel-plugin@11.11.0': - dependencies: - '@babel/helper-module-imports': 7.24.7 - '@babel/runtime': 7.24.7 - '@emotion/hash': 0.9.1 - '@emotion/memoize': 0.8.1 - '@emotion/serialize': 1.1.4 - babel-plugin-macros: 3.1.0 - convert-source-map: 1.9.0 - escape-string-regexp: 4.0.0 - find-root: 1.1.0 - source-map: 0.5.7 - stylis: 4.2.0 - transitivePeerDependencies: - - supports-color - - '@emotion/cache@11.11.0': - dependencies: - '@emotion/memoize': 0.8.1 - '@emotion/sheet': 1.2.2 - '@emotion/utils': 1.2.1 - '@emotion/weak-memoize': 0.3.1 - stylis: 4.2.0 - '@emotion/hash@0.9.1': {} - '@emotion/is-prop-valid@1.2.2': - dependencies: - '@emotion/memoize': 0.8.1 - - '@emotion/memoize@0.8.1': {} - - '@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1)': - dependencies: - '@babel/runtime': 7.24.7 - '@emotion/babel-plugin': 11.11.0 - '@emotion/cache': 11.11.0 - '@emotion/serialize': 1.1.4 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1) - '@emotion/utils': 1.2.1 - '@emotion/weak-memoize': 0.3.1 - hoist-non-react-statics: 3.3.2 - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.3 - transitivePeerDependencies: - - supports-color - - '@emotion/serialize@1.1.4': - dependencies: - '@emotion/hash': 0.9.1 - '@emotion/memoize': 0.8.1 - '@emotion/unitless': 0.8.1 - '@emotion/utils': 1.2.1 - csstype: 3.1.3 - - '@emotion/sheet@1.2.2': {} - - '@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1)': - dependencies: - '@babel/runtime': 7.24.7 - '@emotion/babel-plugin': 11.11.0 - '@emotion/is-prop-valid': 1.2.2 - '@emotion/react': 11.11.4(@types/react@18.3.3)(react@18.3.1) - '@emotion/serialize': 1.1.4 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1) - '@emotion/utils': 1.2.1 - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.3 - transitivePeerDependencies: - - supports-color - - '@emotion/unitless@0.8.1': {} - - '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@emotion/utils@1.2.1': {} - - '@emotion/weak-memoize@0.3.1': {} - '@esbuild/aix-ppc64@0.21.5': optional: true + '@esbuild/android-arm64@0.17.6': + optional: true + '@esbuild/android-arm64@0.21.5': optional: true + '@esbuild/android-arm@0.17.6': + optional: true + '@esbuild/android-arm@0.21.5': optional: true + '@esbuild/android-x64@0.17.6': + optional: true + '@esbuild/android-x64@0.21.5': optional: true + '@esbuild/darwin-arm64@0.17.6': + optional: true + '@esbuild/darwin-arm64@0.21.5': optional: true + '@esbuild/darwin-x64@0.17.6': + optional: true + '@esbuild/darwin-x64@0.21.5': optional: true + '@esbuild/freebsd-arm64@0.17.6': + optional: true + '@esbuild/freebsd-arm64@0.21.5': optional: true + '@esbuild/freebsd-x64@0.17.6': + optional: true + '@esbuild/freebsd-x64@0.21.5': optional: true + '@esbuild/linux-arm64@0.17.6': + optional: true + '@esbuild/linux-arm64@0.21.5': optional: true + '@esbuild/linux-arm@0.17.6': + optional: true + '@esbuild/linux-arm@0.21.5': optional: true + '@esbuild/linux-ia32@0.17.6': + optional: true + '@esbuild/linux-ia32@0.21.5': optional: true + '@esbuild/linux-loong64@0.17.6': + optional: true + '@esbuild/linux-loong64@0.21.5': optional: true + '@esbuild/linux-mips64el@0.17.6': + optional: true + '@esbuild/linux-mips64el@0.21.5': optional: true + '@esbuild/linux-ppc64@0.17.6': + optional: true + '@esbuild/linux-ppc64@0.21.5': optional: true + '@esbuild/linux-riscv64@0.17.6': + optional: true + '@esbuild/linux-riscv64@0.21.5': optional: true + '@esbuild/linux-s390x@0.17.6': + optional: true + '@esbuild/linux-s390x@0.21.5': optional: true + '@esbuild/linux-x64@0.17.6': + optional: true + '@esbuild/linux-x64@0.21.5': optional: true + '@esbuild/netbsd-x64@0.17.6': + optional: true + '@esbuild/netbsd-x64@0.21.5': optional: true + '@esbuild/openbsd-x64@0.17.6': + optional: true + '@esbuild/openbsd-x64@0.21.5': optional: true + '@esbuild/sunos-x64@0.17.6': + optional: true + '@esbuild/sunos-x64@0.21.5': optional: true + '@esbuild/win32-arm64@0.17.6': + optional: true + '@esbuild/win32-arm64@0.21.5': optional: true + '@esbuild/win32-ia32@0.17.6': + optional: true + '@esbuild/win32-ia32@0.21.5': optional: true + '@esbuild/win32-x64@0.17.6': + optional: true + '@esbuild/win32-x64@0.21.5': optional: true @@ -5118,23 +6189,6 @@ snapshots: secure-json-parse: 2.7.0 stream-wormhole: 1.1.0 - '@floating-ui/core@1.6.3': - dependencies: - '@floating-ui/utils': 0.2.3 - - '@floating-ui/dom@1.6.6': - dependencies: - '@floating-ui/core': 1.6.3 - '@floating-ui/utils': 0.2.3 - - '@floating-ui/react-dom@2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@floating-ui/dom': 1.6.6 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@floating-ui/utils@0.2.3': {} - '@google-cloud/run@1.3.0': dependencies: google-gax: 4.3.7 @@ -5310,19 +6364,6 @@ snapshots: - encoding - supports-color - '@graphql-codegen/typescript-react-apollo@4.3.0(graphql-tag@2.12.6(graphql@16.9.0))(graphql@16.9.0)': - dependencies: - '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.9.0) - '@graphql-codegen/visitor-plugin-common': 2.13.1(graphql@16.9.0) - auto-bind: 4.0.0 - change-case-all: 1.0.15 - graphql: 16.9.0 - graphql-tag: 2.12.6(graphql@16.9.0) - tslib: 2.6.3 - transitivePeerDependencies: - - encoding - - supports-color - '@graphql-codegen/typescript@4.0.8(graphql@16.9.0)': dependencies: '@graphql-codegen/plugin-helpers': 5.0.4(graphql@16.9.0) @@ -5685,6 +6726,15 @@ snapshots: '@ioredis/commands@1.2.0': {} + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + '@istanbuljs/schema@0.1.3': {} '@jest/schemas@29.6.3': @@ -5712,6 +6762,8 @@ snapshots: '@js-sdsl/ordered-map@4.4.2': {} + '@jspm/core@2.0.1': {} + '@kamilkisiela/fast-url-parser@1.1.4': {} '@mapbox/node-pre-gyp@1.0.11': @@ -5729,112 +6781,72 @@ snapshots: - encoding - supports-color - '@mui/base@5.0.0-beta.40(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@babel/runtime': 7.24.7 - '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mui/types': 7.2.14(@types/react@18.3.3) - '@mui/utils': 5.15.20(@types/react@18.3.3)(react@18.3.1) - '@popperjs/core': 2.11.8 - clsx: 2.1.1 - prop-types: 15.8.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.3 - - '@mui/core-downloads-tracker@5.15.21': {} - - '@mui/icons-material@5.15.21(@mui/material@5.15.21(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.3)(react@18.3.1)': + '@mdx-js/mdx@2.3.0': dependencies: - '@babel/runtime': 7.24.7 - '@mui/material': 5.15.21(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.3 + '@types/estree-jsx': 1.0.5 + '@types/mdx': 2.0.13 + estree-util-build-jsx: 2.2.2 + estree-util-is-identifier-name: 2.1.0 + estree-util-to-js: 1.2.0 + estree-walker: 3.0.3 + hast-util-to-estree: 2.3.3 + markdown-extensions: 1.1.1 + periscopic: 3.1.0 + remark-mdx: 2.3.0 + remark-parse: 10.0.2 + remark-rehype: 10.1.0 + unified: 10.1.2 + unist-util-position-from-estree: 1.1.2 + unist-util-stringify-position: 3.0.3 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + transitivePeerDependencies: + - supports-color - '@mui/material@5.15.21(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@nodelib/fs.scandir@2.1.5': dependencies: - '@babel/runtime': 7.24.7 - '@mui/base': 5.0.0-beta.40(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mui/core-downloads-tracker': 5.15.21 - '@mui/system': 5.15.20(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1) - '@mui/types': 7.2.14(@types/react@18.3.3) - '@mui/utils': 5.15.20(@types/react@18.3.3)(react@18.3.1) - '@types/react-transition-group': 4.4.10 - clsx: 2.1.1 - csstype: 3.1.3 - prop-types: 15.8.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-is: 18.3.1 - react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - optionalDependencies: - '@emotion/react': 11.11.4(@types/react@18.3.3)(react@18.3.1) - '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 - '@mui/private-theming@5.15.20(@types/react@18.3.3)(react@18.3.1)': - dependencies: - '@babel/runtime': 7.24.7 - '@mui/utils': 5.15.20(@types/react@18.3.3)(react@18.3.1) - prop-types: 15.8.1 - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.3 + '@nodelib/fs.stat@2.0.5': {} - '@mui/styled-engine@5.15.14(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1)': + '@nodelib/fs.walk@1.2.8': dependencies: - '@babel/runtime': 7.24.7 - '@emotion/cache': 11.11.0 - csstype: 3.1.3 - prop-types: 15.8.1 - react: 18.3.1 - optionalDependencies: - '@emotion/react': 11.11.4(@types/react@18.3.3)(react@18.3.1) - '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1) + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 - '@mui/system@5.15.20(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1)': + '@npmcli/fs@3.1.1': dependencies: - '@babel/runtime': 7.24.7 - '@mui/private-theming': 5.15.20(@types/react@18.3.3)(react@18.3.1) - '@mui/styled-engine': 5.15.14(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1))(react@18.3.1) - '@mui/types': 7.2.14(@types/react@18.3.3) - '@mui/utils': 5.15.20(@types/react@18.3.3)(react@18.3.1) - clsx: 2.1.1 - csstype: 3.1.3 - prop-types: 15.8.1 - react: 18.3.1 - optionalDependencies: - '@emotion/react': 11.11.4(@types/react@18.3.3)(react@18.3.1) - '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(react@18.3.1) - '@types/react': 18.3.3 - - '@mui/types@7.2.14(@types/react@18.3.3)': - optionalDependencies: - '@types/react': 18.3.3 + semver: 7.6.2 - '@mui/utils@5.15.20(@types/react@18.3.3)(react@18.3.1)': + '@npmcli/git@4.1.0': dependencies: - '@babel/runtime': 7.24.7 - '@types/prop-types': 15.7.12 - prop-types: 15.8.1 - react: 18.3.1 - react-is: 18.3.1 - optionalDependencies: - '@types/react': 18.3.3 + '@npmcli/promise-spawn': 6.0.2 + lru-cache: 7.18.3 + npm-pick-manifest: 8.0.2 + proc-log: 3.0.0 + promise-inflight: 1.0.1 + promise-retry: 2.0.1 + semver: 7.6.2 + which: 3.0.1 + transitivePeerDependencies: + - bluebird - '@nodelib/fs.scandir@2.1.5': + '@npmcli/package-json@4.0.1': dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} + '@npmcli/git': 4.1.0 + glob: 10.4.2 + hosted-git-info: 6.1.1 + json-parse-even-better-errors: 3.0.2 + normalize-package-data: 5.0.0 + proc-log: 3.0.0 + semver: 7.6.2 + transitivePeerDependencies: + - bluebird - '@nodelib/fs.walk@1.2.8': + '@npmcli/promise-spawn@6.0.2': dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 + which: 3.0.1 '@peculiar/asn1-schema@2.3.8': dependencies: @@ -5854,6 +6866,9 @@ snapshots: tslib: 2.6.3 webcrypto-core: 1.8.0 + '@pkgjs/parseargs@0.11.0': + optional: true + '@popperjs/core@2.11.8': {} '@protobufjs/aspromise@1.1.2': {} @@ -5879,23 +6894,207 @@ snapshots: '@protobufjs/utf8@1.1.0': {} + '@react-aria/ssr@3.9.4(react@18.3.1)': + dependencies: + '@swc/helpers': 0.5.11 + react: 18.3.1 + '@react-oauth/google@0.12.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@remix-run/router@1.17.0': {} - - '@repeaterjs/repeater@3.0.6': {} - - '@rollup/pluginutils@5.1.0(rollup@4.18.0)': + '@remix-run/dev@2.10.0(@remix-run/react@2.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2))(@remix-run/serve@2.10.0(typescript@5.5.2))(@types/node@20.14.9)(babel-plugin-macros@3.1.0)(typescript@5.5.2)(vite@5.3.2(@types/node@20.14.9))': dependencies: - '@types/estree': 1.0.5 - estree-walker: 2.0.2 - picomatch: 2.3.1 - optionalDependencies: - rollup: 4.18.0 - + '@babel/core': 7.24.7 + '@babel/generator': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/plugin-syntax-decorators': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) + '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + '@mdx-js/mdx': 2.3.0 + '@npmcli/package-json': 4.0.1 + '@remix-run/node': 2.10.0(typescript@5.5.2) + '@remix-run/react': 2.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2) + '@remix-run/router': 1.17.0 + '@remix-run/server-runtime': 2.10.0(typescript@5.5.2) + '@types/mdx': 2.0.13 + '@vanilla-extract/integration': 6.5.0(@types/node@20.14.9)(babel-plugin-macros@3.1.0) + arg: 5.0.2 + cacache: 17.1.4 + chalk: 4.1.2 + chokidar: 3.6.0 + cross-spawn: 7.0.3 + dotenv: 16.4.5 + es-module-lexer: 1.5.4 + esbuild: 0.17.6 + esbuild-plugins-node-modules-polyfill: 1.6.4(esbuild@0.17.6) + execa: 5.1.1 + exit-hook: 2.2.1 + express: 4.19.2 + fs-extra: 10.1.0 + get-port: 5.1.1 + gunzip-maybe: 1.4.2 + jsesc: 3.0.2 + json5: 2.2.3 + lodash: 4.17.21 + lodash.debounce: 4.0.8 + minimatch: 9.0.5 + ora: 5.4.1 + picocolors: 1.0.1 + picomatch: 2.3.1 + pidtree: 0.6.0 + postcss: 8.4.39 + postcss-discard-duplicates: 5.1.0(postcss@8.4.39) + postcss-load-config: 4.0.2(postcss@8.4.39) + postcss-modules: 6.0.0(postcss@8.4.39) + prettier: 2.8.8 + pretty-ms: 7.0.1 + react-refresh: 0.14.2 + remark-frontmatter: 4.0.1 + remark-mdx-frontmatter: 1.1.1 + semver: 7.6.2 + set-cookie-parser: 2.6.0 + tar-fs: 2.1.1 + tsconfig-paths: 4.2.0 + ws: 7.5.10 + optionalDependencies: + '@remix-run/serve': 2.10.0(typescript@5.5.2) + typescript: 5.5.2 + vite: 5.3.2(@types/node@20.14.9) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - bluebird + - bufferutil + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + - ts-node + - utf-8-validate + + '@remix-run/express@2.10.0(express@4.19.2)(typescript@5.5.2)': + dependencies: + '@remix-run/node': 2.10.0(typescript@5.5.2) + express: 4.19.2 + optionalDependencies: + typescript: 5.5.2 + + '@remix-run/node@2.10.0(typescript@5.5.2)': + dependencies: + '@remix-run/server-runtime': 2.10.0(typescript@5.5.2) + '@remix-run/web-fetch': 4.4.2 + '@web3-storage/multipart-parser': 1.0.0 + cookie-signature: 1.2.1 + source-map-support: 0.5.21 + stream-slice: 0.1.2 + undici: 6.19.2 + optionalDependencies: + typescript: 5.5.2 + + '@remix-run/react@2.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.2)': + dependencies: + '@remix-run/router': 1.17.0 + '@remix-run/server-runtime': 2.10.0(typescript@5.5.2) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-router: 6.24.0(react@18.3.1) + react-router-dom: 6.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + turbo-stream: 2.2.0 + optionalDependencies: + typescript: 5.5.2 + + '@remix-run/router@1.17.0': {} + + '@remix-run/serve@2.10.0(typescript@5.5.2)': + dependencies: + '@remix-run/express': 2.10.0(express@4.19.2)(typescript@5.5.2) + '@remix-run/node': 2.10.0(typescript@5.5.2) + chokidar: 3.6.0 + compression: 1.7.4 + express: 4.19.2 + get-port: 5.1.1 + morgan: 1.10.0 + source-map-support: 0.5.21 + transitivePeerDependencies: + - supports-color + - typescript + + '@remix-run/server-runtime@2.10.0(typescript@5.5.2)': + dependencies: + '@remix-run/router': 1.17.0 + '@types/cookie': 0.6.0 + '@web3-storage/multipart-parser': 1.0.0 + cookie: 0.6.0 + set-cookie-parser: 2.6.0 + source-map: 0.7.4 + turbo-stream: 2.2.0 + optionalDependencies: + typescript: 5.5.2 + + '@remix-run/web-blob@3.1.0': + dependencies: + '@remix-run/web-stream': 1.1.0 + web-encoding: 1.1.5 + + '@remix-run/web-fetch@4.4.2': + dependencies: + '@remix-run/web-blob': 3.1.0 + '@remix-run/web-file': 3.1.0 + '@remix-run/web-form-data': 3.1.0 + '@remix-run/web-stream': 1.1.0 + '@web3-storage/multipart-parser': 1.0.0 + abort-controller: 3.0.0 + data-uri-to-buffer: 3.0.1 + mrmime: 1.0.1 + + '@remix-run/web-file@3.1.0': + dependencies: + '@remix-run/web-blob': 3.1.0 + + '@remix-run/web-form-data@3.1.0': + dependencies: + web-encoding: 1.1.5 + + '@remix-run/web-stream@1.1.0': + dependencies: + web-streams-polyfill: 3.3.3 + + '@repeaterjs/repeater@3.0.6': {} + + '@restart/hooks@0.4.16(react@18.3.1)': + dependencies: + dequal: 2.0.3 + react: 18.3.1 + + '@restart/ui@1.6.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.7 + '@popperjs/core': 2.11.8 + '@react-aria/ssr': 3.9.4(react@18.3.1) + '@restart/hooks': 0.4.16(react@18.3.1) + '@types/warning': 3.0.3 + dequal: 2.0.3 + dom-helpers: 5.2.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + uncontrollable: 8.0.4(react@18.3.1) + warning: 4.0.3 + + '@rollup/pluginutils@5.1.0(rollup@4.18.0)': + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + optionalDependencies: + rollup: 4.18.0 + '@rollup/rollup-android-arm-eabi@4.18.0': optional: true @@ -5976,7 +7175,7 @@ snapshots: '@swc/core-win32-x64-msvc@1.6.6': optional: true - '@swc/core@1.6.6': + '@swc/core@1.6.6(@swc/helpers@0.5.11)': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.9 @@ -5991,35 +7190,23 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.6.6 '@swc/core-win32-ia32-msvc': 1.6.6 '@swc/core-win32-x64-msvc': 1.6.6 + '@swc/helpers': 0.5.11 '@swc/counter@0.1.3': {} + '@swc/helpers@0.5.11': + dependencies: + tslib: 2.6.3 + '@swc/types@0.1.9': dependencies: '@swc/counter': 0.1.3 '@tootallnate/once@2.0.0': {} - '@types/babel__core@7.20.5': + '@types/acorn@4.0.6': dependencies: - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.6 - - '@types/babel__generator@7.6.8': - dependencies: - '@babel/types': 7.24.7 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - - '@types/babel__traverse@7.20.6': - dependencies: - '@babel/types': 7.24.7 + '@types/estree': 1.0.5 '@types/bcrypt@5.0.2': dependencies: @@ -6036,6 +7223,16 @@ snapshots: dependencies: '@types/node': 20.14.9 + '@types/cookie@0.6.0': {} + + '@types/debug@4.1.12': + dependencies: + '@types/ms': 0.7.34 + + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.5 + '@types/estree@1.0.5': {} '@types/express-serve-static-core@4.19.5': @@ -6052,6 +7249,10 @@ snapshots: '@types/qs': 6.9.15 '@types/serve-static': 1.15.7 + '@types/hast@2.3.10': + dependencies: + '@types/unist': 2.0.10 + '@types/http-errors@2.0.4': {} '@types/js-yaml@4.0.9': {} @@ -6062,8 +7263,16 @@ snapshots: '@types/long@4.0.2': {} + '@types/mdast@3.0.15': + dependencies: + '@types/unist': 2.0.10 + + '@types/mdx@2.0.13': {} + '@types/mime@1.3.5': {} + '@types/ms@0.7.34': {} + '@types/node-fetch@2.6.11': dependencies: '@types/node': 20.14.9 @@ -6073,7 +7282,8 @@ snapshots: dependencies: undici-types: 5.26.5 - '@types/parse-json@4.0.2': {} + '@types/parse-json@4.0.2': + optional: true '@types/pg@8.11.6': dependencies: @@ -6124,20 +7334,63 @@ snapshots: '@types/triple-beam@1.3.5': {} + '@types/unist@2.0.10': {} + + '@types/warning@3.0.3': {} + '@types/ws@8.5.10': dependencies: '@types/node': 20.14.9 - '@vitejs/plugin-react@4.3.1(vite@5.3.2(@types/node@20.14.9))': + '@vanilla-extract/babel-plugin-debug-ids@1.0.6': dependencies: '@babel/core': 7.24.7 - '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.24.7) - '@types/babel__core': 7.20.5 - react-refresh: 0.14.2 + transitivePeerDependencies: + - supports-color + + '@vanilla-extract/css@1.15.3(babel-plugin-macros@3.1.0)': + dependencies: + '@emotion/hash': 0.9.1 + '@vanilla-extract/private': 1.0.5 + css-what: 6.1.0 + cssesc: 3.0.0 + csstype: 3.1.3 + dedent: 1.5.3(babel-plugin-macros@3.1.0) + deep-object-diff: 1.1.9 + deepmerge: 4.3.1 + media-query-parser: 2.0.2 + modern-ahocorasick: 1.0.1 + picocolors: 1.0.1 + transitivePeerDependencies: + - babel-plugin-macros + + '@vanilla-extract/integration@6.5.0(@types/node@20.14.9)(babel-plugin-macros@3.1.0)': + dependencies: + '@babel/core': 7.24.7 + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.7) + '@vanilla-extract/babel-plugin-debug-ids': 1.0.6 + '@vanilla-extract/css': 1.15.3(babel-plugin-macros@3.1.0) + esbuild: 0.17.6 + eval: 0.1.8 + find-up: 5.0.0 + javascript-stringify: 2.1.0 + lodash: 4.17.21 + mlly: 1.7.1 + outdent: 0.8.0 vite: 5.3.2(@types/node@20.14.9) + vite-node: 1.6.0(@types/node@20.14.9) transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - less + - lightningcss + - sass + - stylus + - sugarss - supports-color + - terser + + '@vanilla-extract/private@1.0.5': {} '@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@20.14.9))': dependencies: @@ -6187,6 +7440,8 @@ snapshots: loupe: 2.3.7 pretty-format: 29.7.0 + '@web3-storage/multipart-parser@1.0.0': {} + '@whatwg-node/events@0.0.3': {} '@whatwg-node/events@0.1.1': {} @@ -6220,25 +7475,8 @@ snapshots: fast-querystring: 1.1.2 tslib: 2.6.3 - '@wry/caches@1.0.1': - dependencies: - tslib: 2.6.3 - - '@wry/context@0.7.4': - dependencies: - tslib: 2.6.3 - - '@wry/equality@0.5.7': - dependencies: - tslib: 2.6.3 - - '@wry/trie@0.4.3': - dependencies: - tslib: 2.6.3 - - '@wry/trie@0.5.0': - dependencies: - tslib: 2.6.3 + '@zxing/text-encoding@0.9.0': + optional: true abbrev@1.1.1: {} @@ -6253,6 +7491,10 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 + acorn-jsx@5.3.2(acorn@8.12.0): + dependencies: + acorn: 8.12.0 + acorn-walk@8.3.3: dependencies: acorn: 8.12.0 @@ -6297,6 +7539,8 @@ snapshots: ansi-regex@5.0.1: {} + ansi-regex@6.0.1: {} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 @@ -6307,6 +7551,10 @@ snapshots: ansi-styles@5.2.0: {} + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 @@ -6319,6 +7567,8 @@ snapshots: delegates: 1.0.0 readable-stream: 3.6.2 + arg@5.0.2: {} + argparse@2.0.1: {} array-flatten@1.1.1: {} @@ -6337,6 +7587,8 @@ snapshots: astral-regex@2.0.0: {} + astring@1.8.6: {} + async-retry@1.3.3: dependencies: retry: 0.13.1 @@ -6351,6 +7603,20 @@ snapshots: auto-bind@4.0.0: {} + autoprefixer@10.4.19(postcss@8.4.39): + dependencies: + browserslist: 4.23.1 + caniuse-lite: 1.0.30001638 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.1 + postcss: 8.4.39 + postcss-value-parser: 4.2.0 + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + avvio@8.3.2: dependencies: '@fastify/error': 3.4.1 @@ -6369,6 +7635,7 @@ snapshots: '@babel/runtime': 7.24.7 cosmiconfig: 7.1.0 resolve: 1.22.8 + optional: true babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: {} @@ -6405,10 +7672,16 @@ snapshots: transitivePeerDependencies: - supports-color + bail@2.0.2: {} + balanced-match@1.0.2: {} base64-js@1.5.1: {} + basic-auth@2.0.1: + dependencies: + safe-buffer: 5.1.2 + bcrypt@5.1.1: dependencies: '@mapbox/node-pre-gyp': 1.0.11 @@ -6449,10 +7722,18 @@ snapshots: balanced-match: 1.0.2 concat-map: 0.0.1 + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + braces@3.0.3: dependencies: fill-range: 7.1.1 + browserify-zlib@0.1.4: + dependencies: + pako: 0.2.9 + browserslist@4.23.1: dependencies: caniuse-lite: 1.0.30001638 @@ -6466,6 +7747,8 @@ snapshots: buffer-equal-constant-time@1.0.1: {} + buffer-from@1.1.2: {} + buffer@5.7.1: dependencies: base64-js: 1.5.1 @@ -6480,10 +7763,27 @@ snapshots: dependencies: streamsearch: 1.1.0 + bytes@3.0.0: {} + bytes@3.1.2: {} cac@6.7.14: {} + cacache@17.1.4: + dependencies: + '@npmcli/fs': 3.1.1 + fs-minipass: 3.0.3 + glob: 10.4.2 + lru-cache: 7.18.3 + minipass: 7.1.2 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + p-map: 4.0.0 + ssri: 10.0.6 + tar: 6.2.1 + unique-filename: 3.0.0 + call-bind@1.0.7: dependencies: es-define-property: 1.0.0 @@ -6499,6 +7799,8 @@ snapshots: pascal-case: 3.1.2 tslib: 2.6.3 + camelcase-css@2.0.1: {} + camelcase@5.3.1: {} caniuse-lite@1.0.30001638: {} @@ -6509,6 +7811,8 @@ snapshots: tslib: 2.6.3 upper-case-first: 2.0.2 + ccount@2.0.1: {} + chai@4.4.1: dependencies: assertion-error: 1.1.0 @@ -6571,6 +7875,14 @@ snapshots: snake-case: 3.0.4 tslib: 2.6.3 + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + character-reference-invalid@2.0.1: {} + chardet@0.7.0: {} check-error@1.0.3: @@ -6589,8 +7901,12 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + chownr@1.1.4: {} + chownr@2.0.0: {} + classnames@2.5.1: {} + clean-stack@2.2.0: {} cli-cursor@3.1.0: @@ -6620,8 +7936,6 @@ snapshots: clone@1.0.4: {} - clsx@1.2.1: {} - clsx@2.1.1: {} cluster-key-slot@1.1.2: {} @@ -6661,8 +7975,28 @@ snapshots: dependencies: delayed-stream: 1.0.0 + comma-separated-tokens@2.0.3: {} + + commander@4.1.1: {} + common-tags@1.8.2: {} + compressible@2.0.18: + dependencies: + mime-db: 1.52.0 + + compression@1.7.4: + dependencies: + accepts: 1.3.8 + bytes: 3.0.0 + compressible: 2.0.18 + debug: 2.6.9 + on-headers: 1.0.2 + safe-buffer: 5.1.2 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + concat-map@0.0.1: {} confbox@0.1.7: {} @@ -6681,14 +8015,16 @@ snapshots: content-type@1.0.5: {} - convert-source-map@1.9.0: {} - convert-source-map@2.0.0: {} cookie-signature@1.0.6: {} + cookie-signature@1.2.1: {} + cookie@0.6.0: {} + core-util-is@1.0.3: {} + cors@2.8.5: dependencies: object-assign: 4.1.1 @@ -6701,6 +8037,7 @@ snapshots: parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 + optional: true cosmiconfig@8.3.6(typescript@5.5.2): dependencies: @@ -6727,8 +8064,14 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + css-what@6.1.0: {} + + cssesc@3.0.0: {} + csstype@3.1.3: {} + data-uri-to-buffer@3.0.1: {} + dataloader@2.2.2: {} date-fns@3.6.0: {} @@ -6745,10 +8088,22 @@ snapshots: decamelize@1.2.0: {} + decode-named-character-reference@1.0.2: + dependencies: + character-entities: 2.0.2 + + dedent@1.5.3(babel-plugin-macros@3.1.0): + optionalDependencies: + babel-plugin-macros: 3.1.0 + deep-eql@4.1.4: dependencies: type-detect: 4.0.8 + deep-object-diff@1.1.9: {} + + deepmerge@4.3.1: {} + defaults@1.0.4: dependencies: clone: 1.0.4 @@ -6769,18 +8124,26 @@ snapshots: dependency-graph@0.11.0: {} + dequal@2.0.3: {} + destroy@1.2.0: {} detect-indent@6.1.0: {} detect-libc@2.0.3: {} + didyoumean@1.2.2: {} + diff-sequences@29.6.3: {} + diff@5.2.0: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 + dlv@1.1.3: {} + dom-helpers@5.2.1: dependencies: '@babel/runtime': 7.24.7 @@ -6797,6 +8160,13 @@ snapshots: duplexer@0.1.2: {} + duplexify@3.7.1: + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 2.3.8 + stream-shift: 1.0.3 + duplexify@4.1.3: dependencies: end-of-stream: 1.4.4 @@ -6804,6 +8174,8 @@ snapshots: readable-stream: 3.6.2 stream-shift: 1.0.3 + eastasianwidth@0.2.0: {} + ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer: 5.2.1 @@ -6814,6 +8186,8 @@ snapshots: emoji-regex@8.0.0: {} + emoji-regex@9.2.2: {} + enabled@2.0.0: {} encodeurl@1.0.2: {} @@ -6822,6 +8196,8 @@ snapshots: dependencies: once: 1.4.0 + err-code@2.0.3: {} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -6832,6 +8208,40 @@ snapshots: es-errors@1.3.0: {} + es-module-lexer@1.5.4: {} + + esbuild-plugins-node-modules-polyfill@1.6.4(esbuild@0.17.6): + dependencies: + '@jspm/core': 2.0.1 + esbuild: 0.17.6 + local-pkg: 0.5.0 + resolve.exports: 2.0.2 + + esbuild@0.17.6: + optionalDependencies: + '@esbuild/android-arm': 0.17.6 + '@esbuild/android-arm64': 0.17.6 + '@esbuild/android-x64': 0.17.6 + '@esbuild/darwin-arm64': 0.17.6 + '@esbuild/darwin-x64': 0.17.6 + '@esbuild/freebsd-arm64': 0.17.6 + '@esbuild/freebsd-x64': 0.17.6 + '@esbuild/linux-arm': 0.17.6 + '@esbuild/linux-arm64': 0.17.6 + '@esbuild/linux-ia32': 0.17.6 + '@esbuild/linux-loong64': 0.17.6 + '@esbuild/linux-mips64el': 0.17.6 + '@esbuild/linux-ppc64': 0.17.6 + '@esbuild/linux-riscv64': 0.17.6 + '@esbuild/linux-s390x': 0.17.6 + '@esbuild/linux-x64': 0.17.6 + '@esbuild/netbsd-x64': 0.17.6 + '@esbuild/openbsd-x64': 0.17.6 + '@esbuild/sunos-x64': 0.17.6 + '@esbuild/win32-arm64': 0.17.6 + '@esbuild/win32-ia32': 0.17.6 + '@esbuild/win32-x64': 0.17.6 + esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -6858,13 +8268,40 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 - escalade@3.1.2: {} + escalade@3.1.2: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + estree-util-attach-comments@2.1.1: + dependencies: + '@types/estree': 1.0.5 + + estree-util-build-jsx@2.2.2: + dependencies: + '@types/estree-jsx': 1.0.5 + estree-util-is-identifier-name: 2.1.0 + estree-walker: 3.0.3 + + estree-util-is-identifier-name@1.1.0: {} - escape-html@1.0.3: {} + estree-util-is-identifier-name@2.1.0: {} - escape-string-regexp@1.0.5: {} + estree-util-to-js@1.2.0: + dependencies: + '@types/estree-jsx': 1.0.5 + astring: 1.8.6 + source-map: 0.7.4 + + estree-util-value-to-estree@1.3.0: + dependencies: + is-plain-obj: 3.0.0 - escape-string-regexp@4.0.0: {} + estree-util-visit@1.2.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/unist': 2.0.10 estree-walker@2.0.2: {} @@ -6874,6 +8311,11 @@ snapshots: etag@1.8.1: {} + eval@0.1.8: + dependencies: + '@types/node': 20.14.9 + require-like: 0.1.2 + event-stream@3.3.4: dependencies: duplexer: 0.1.2 @@ -6888,6 +8330,18 @@ snapshots: events@3.3.0: {} + execa@5.1.1: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + execa@8.0.1: dependencies: cross-spawn: 7.0.3 @@ -6900,6 +8354,8 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 + exit-hook@2.2.1: {} + express@4.19.2: dependencies: accepts: 1.3.8 @@ -7007,6 +8463,10 @@ snapshots: dependencies: reusify: 1.0.4 + fault@2.0.1: + dependencies: + format: 0.2.2 + fb-watchman@2.0.2: dependencies: bser: 2.1.1 @@ -7057,17 +8517,29 @@ snapshots: fast-querystring: 1.1.2 safe-regex2: 3.1.0 - find-root@1.1.0: {} - find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + fn.name@1.1.0: {} follow-redirects@1.15.6: {} + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + foreground-child@3.2.1: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + form-data@2.5.1: dependencies: asynckit: 0.4.0 @@ -7080,16 +8552,32 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 + format@0.2.2: {} + forwarded@0.2.0: {} + fraction.js@4.3.7: {} + fresh@0.5.2: {} from@0.1.7: {} + fs-constants@1.0.0: {} + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + fs-minipass@2.1.0: dependencies: minipass: 3.3.6 + fs-minipass@3.0.3: + dependencies: + minipass: 7.1.2 + fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -7128,6 +8616,10 @@ snapshots: - encoding - supports-color + generic-names@4.0.0: + dependencies: + loader-utils: 3.3.1 + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -7142,6 +8634,10 @@ snapshots: has-symbols: 1.0.3 hasown: 2.0.2 + get-port@5.1.1: {} + + get-stream@6.0.1: {} + get-stream@8.0.1: {} get-tsconfig@4.7.5: @@ -7152,6 +8648,19 @@ snapshots: dependencies: is-glob: 4.0.3 + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.2: + dependencies: + foreground-child: 3.2.1 + jackspeak: 3.4.0 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -7172,10 +8681,6 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 - goober@2.1.14(csstype@3.1.3): - dependencies: - csstype: 3.1.3 - google-auth-library@9.11.0: dependencies: base64-js: 1.5.1 @@ -7210,6 +8715,8 @@ snapshots: dependencies: get-intrinsic: 1.2.4 + graceful-fs@4.2.11: {} + graphql-config@5.0.3(@types/node@20.14.9)(graphql@16.9.0)(typescript@5.5.2): dependencies: '@graphql-tools/graphql-file-loader': 8.0.1(graphql@16.9.0) @@ -7260,6 +8767,15 @@ snapshots: - encoding - supports-color + gunzip-maybe@1.4.2: + dependencies: + browserify-zlib: 0.1.4 + is-deflate: 1.0.0 + is-gzip: 1.0.0 + peek-stream: 1.1.3 + pumpify: 1.5.1 + through2: 2.0.5 + has-flag@3.0.0: {} has-flag@4.0.0: {} @@ -7272,20 +8788,46 @@ snapshots: has-symbols@1.0.3: {} + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + has-unicode@2.0.1: {} hasown@2.0.2: dependencies: function-bind: 1.1.2 + hast-util-to-estree@2.3.3: + dependencies: + '@types/estree': 1.0.5 + '@types/estree-jsx': 1.0.5 + '@types/hast': 2.3.10 + '@types/unist': 2.0.10 + comma-separated-tokens: 2.0.3 + estree-util-attach-comments: 2.1.1 + estree-util-is-identifier-name: 2.1.0 + hast-util-whitespace: 2.0.1 + mdast-util-mdx-expression: 1.3.2 + mdast-util-mdxjs-esm: 1.3.1 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + style-to-object: 0.4.4 + unist-util-position: 4.0.4 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + + hast-util-whitespace@2.0.1: {} + header-case@2.0.4: dependencies: capital-case: 1.0.4 tslib: 2.6.3 - hoist-non-react-statics@3.3.2: + hosted-git-info@6.1.1: dependencies: - react-is: 16.13.1 + lru-cache: 7.18.3 html-escaper@2.0.2: {} @@ -7326,12 +8868,18 @@ snapshots: transitivePeerDependencies: - supports-color + human-signals@2.1.0: {} + human-signals@5.0.0: {} iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 + icss-utils@5.1.0(postcss@8.4.39): + dependencies: + postcss: 8.4.39 + ieee754@1.2.1: {} ignore@5.3.1: {} @@ -7347,6 +8895,8 @@ snapshots: import-from@4.0.0: {} + imurmurhash@0.1.4: {} + indent-string@4.0.0: {} inflection@3.0.0: {} @@ -7358,6 +8908,8 @@ snapshots: inherits@2.0.4: {} + inline-style-parser@0.1.1: {} + inquirer@8.2.6: dependencies: ansi-escapes: 4.3.2 @@ -7401,6 +8953,18 @@ snapshots: is-relative: 1.0.0 is-windows: 1.0.2 + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + is-arrayish@0.2.1: {} is-arrayish@0.3.2: {} @@ -7409,18 +8973,34 @@ snapshots: dependencies: binary-extensions: 2.3.0 + is-buffer@2.0.5: {} + + is-callable@1.2.7: {} + is-core-module@2.14.0: dependencies: hasown: 2.0.2 + is-decimal@2.0.1: {} + + is-deflate@1.0.0: {} + is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 + is-gzip@1.0.0: {} + + is-hexadecimal@2.0.1: {} + is-interactive@1.0.0: {} is-lower-case@2.0.2: @@ -7429,6 +9009,14 @@ snapshots: is-number@7.0.0: {} + is-plain-obj@3.0.0: {} + + is-plain-obj@4.1.0: {} + + is-reference@3.0.2: + dependencies: + '@types/estree': 1.0.5 + is-relative@1.0.0: dependencies: is-unc-path: 1.0.0 @@ -7437,6 +9025,10 @@ snapshots: is-stream@3.0.0: {} + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + is-unc-path@1.0.0: dependencies: unc-path-regex: 0.1.2 @@ -7449,6 +9041,10 @@ snapshots: is-windows@1.0.2: {} + isarray@1.0.0: {} + + isbot@4.4.0: {} + isexe@2.0.0: {} isomorphic-ws@5.0.0(ws@8.17.1): @@ -7476,6 +9072,14 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 + jackspeak@3.4.0: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + javascript-stringify@2.1.0: {} + jira.js@4.0.1: dependencies: axios: 1.7.2 @@ -7488,6 +9092,11 @@ snapshots: jose@5.6.2: {} + jotai@2.8.4(@types/react@18.3.3)(react@18.3.1): + optionalDependencies: + '@types/react': 18.3.3 + react: 18.3.1 + js-tokens@4.0.0: {} js-tokens@9.0.0: {} @@ -7498,12 +9107,16 @@ snapshots: jsesc@2.5.2: {} + jsesc@3.0.2: {} + json-bigint@1.0.0: dependencies: bignumber.js: 9.1.2 json-parse-even-better-errors@2.3.1: {} + json-parse-even-better-errors@3.0.2: {} + json-schema-ref-resolver@1.0.1: dependencies: fast-deep-equal: 3.1.3 @@ -7517,6 +9130,12 @@ snapshots: json5@2.2.3: {} + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + jsonwebtoken@9.0.2: dependencies: jws: 3.2.2 @@ -7554,6 +9173,8 @@ snapshots: kleur@3.0.3: {} + kleur@4.1.5: {} + kuler@2.0.0: {} light-my-request@5.13.0: @@ -7562,6 +9183,10 @@ snapshots: process-warning: 3.0.0 set-cookie-parser: 2.6.0 + lilconfig@2.1.0: {} + + lilconfig@3.1.2: {} + lines-and-columns@1.2.4: {} listr2@4.0.5: @@ -7577,6 +9202,8 @@ snapshots: load-tsconfig@0.2.5: {} + loader-utils@3.3.1: {} + local-pkg@0.5.0: dependencies: mlly: 1.7.1 @@ -7586,8 +9213,14 @@ snapshots: dependencies: p-locate: 4.1.0 + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + lodash.camelcase@4.3.0: {} + lodash.debounce@4.0.8: {} + lodash.defaults@4.2.0: {} lodash.includes@4.3.0: {} @@ -7637,6 +9270,8 @@ snapshots: long@5.2.3: {} + longest-streak@3.1.0: {} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -7653,12 +9288,18 @@ snapshots: dependencies: tslib: 2.6.3 + lru-cache@10.3.0: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 lru-cache@7.18.3: {} + lucide-react@0.399.0(react@18.3.1): + dependencies: + react: 18.3.1 + magic-string@0.30.10: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 @@ -7681,6 +9322,119 @@ snapshots: map-stream@0.1.0: {} + markdown-extensions@1.1.1: {} + + mdast-util-definitions@5.1.2: + dependencies: + '@types/mdast': 3.0.15 + '@types/unist': 2.0.10 + unist-util-visit: 4.1.2 + + mdast-util-from-markdown@1.3.1: + dependencies: + '@types/mdast': 3.0.15 + '@types/unist': 2.0.10 + decode-named-character-reference: 1.0.2 + mdast-util-to-string: 3.2.0 + micromark: 3.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-decode-string: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-stringify-position: 3.0.3 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + + mdast-util-frontmatter@1.0.1: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-markdown: 1.5.0 + micromark-extension-frontmatter: 1.1.1 + + mdast-util-mdx-expression@1.3.2: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 2.3.10 + '@types/mdast': 3.0.15 + mdast-util-from-markdown: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@2.1.4: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 2.3.10 + '@types/mdast': 3.0.15 + '@types/unist': 2.0.10 + ccount: 2.0.1 + mdast-util-from-markdown: 1.3.1 + mdast-util-to-markdown: 1.5.0 + parse-entities: 4.0.1 + stringify-entities: 4.0.4 + unist-util-remove-position: 4.0.2 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx@2.0.1: + dependencies: + mdast-util-from-markdown: 1.3.1 + mdast-util-mdx-expression: 1.3.2 + mdast-util-mdx-jsx: 2.1.4 + mdast-util-mdxjs-esm: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + + mdast-util-mdxjs-esm@1.3.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 2.3.10 + '@types/mdast': 3.0.15 + mdast-util-from-markdown: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@3.0.1: + dependencies: + '@types/mdast': 3.0.15 + unist-util-is: 5.2.1 + + mdast-util-to-hast@12.3.0: + dependencies: + '@types/hast': 2.3.10 + '@types/mdast': 3.0.15 + mdast-util-definitions: 5.1.2 + micromark-util-sanitize-uri: 1.2.0 + trim-lines: 3.0.1 + unist-util-generated: 2.0.1 + unist-util-position: 4.0.4 + unist-util-visit: 4.1.2 + + mdast-util-to-markdown@1.5.0: + dependencies: + '@types/mdast': 3.0.15 + '@types/unist': 2.0.10 + longest-streak: 3.1.0 + mdast-util-phrasing: 3.0.1 + mdast-util-to-string: 3.2.0 + micromark-util-decode-string: 1.1.0 + unist-util-visit: 4.1.2 + zwitch: 2.0.4 + + mdast-util-to-string@3.2.0: + dependencies: + '@types/mdast': 3.0.15 + + media-query-parser@2.0.2: + dependencies: + '@babel/runtime': 7.24.7 + media-typer@0.3.0: {} merge-descriptors@1.0.1: {} @@ -7695,6 +9449,219 @@ snapshots: methods@1.1.2: {} + micromark-core-commonmark@1.1.0: + dependencies: + decode-named-character-reference: 1.0.2 + micromark-factory-destination: 1.1.0 + micromark-factory-label: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-factory-title: 1.1.0 + micromark-factory-whitespace: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-html-tag-name: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + + micromark-extension-frontmatter@1.1.1: + dependencies: + fault: 2.0.1 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-extension-mdx-expression@1.0.8: + dependencies: + '@types/estree': 1.0.5 + micromark-factory-mdx-expression: 1.0.9 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-events-to-acorn: 1.2.3 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + + micromark-extension-mdx-jsx@1.0.5: + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.5 + estree-util-is-identifier-name: 2.1.0 + micromark-factory-mdx-expression: 1.0.9 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + vfile-message: 3.1.4 + + micromark-extension-mdx-md@1.0.1: + dependencies: + micromark-util-types: 1.1.0 + + micromark-extension-mdxjs-esm@1.0.5: + dependencies: + '@types/estree': 1.0.5 + micromark-core-commonmark: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-events-to-acorn: 1.2.3 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-position-from-estree: 1.1.2 + uvu: 0.5.6 + vfile-message: 3.1.4 + + micromark-extension-mdxjs@1.0.1: + dependencies: + acorn: 8.12.0 + acorn-jsx: 5.3.2(acorn@8.12.0) + micromark-extension-mdx-expression: 1.0.8 + micromark-extension-mdx-jsx: 1.0.5 + micromark-extension-mdx-md: 1.0.1 + micromark-extension-mdxjs-esm: 1.0.5 + micromark-util-combine-extensions: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-factory-destination@1.1.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-factory-label@1.1.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + + micromark-factory-mdx-expression@1.0.9: + dependencies: + '@types/estree': 1.0.5 + micromark-util-character: 1.2.0 + micromark-util-events-to-acorn: 1.2.3 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-position-from-estree: 1.1.2 + uvu: 0.5.6 + vfile-message: 3.1.4 + + micromark-factory-space@1.1.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-types: 1.1.0 + + micromark-factory-title@1.1.0: + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-factory-whitespace@1.1.0: + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-util-character@1.2.0: + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-util-chunked@1.1.0: + dependencies: + micromark-util-symbol: 1.1.0 + + micromark-util-classify-character@1.1.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-util-combine-extensions@1.1.0: + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-types: 1.1.0 + + micromark-util-decode-numeric-character-reference@1.1.0: + dependencies: + micromark-util-symbol: 1.1.0 + + micromark-util-decode-string@1.1.0: + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-symbol: 1.1.0 + + micromark-util-encode@1.1.0: {} + + micromark-util-events-to-acorn@1.2.3: + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.5 + '@types/unist': 2.0.10 + estree-util-visit: 1.2.1 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + vfile-message: 3.1.4 + + micromark-util-html-tag-name@1.2.0: {} + + micromark-util-normalize-identifier@1.1.0: + dependencies: + micromark-util-symbol: 1.1.0 + + micromark-util-resolve-all@1.1.0: + dependencies: + micromark-util-types: 1.1.0 + + micromark-util-sanitize-uri@1.2.0: + dependencies: + micromark-util-character: 1.2.0 + micromark-util-encode: 1.1.0 + micromark-util-symbol: 1.1.0 + + micromark-util-subtokenize@1.1.0: + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + + micromark-util-symbol@1.1.0: {} + + micromark-util-types@1.1.0: {} + + micromark@3.2.0: + dependencies: + '@types/debug': 4.1.12 + debug: 4.3.5 + decode-named-character-reference: 1.0.2 + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-combine-extensions: 1.1.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-encode: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + micromatch@4.0.7: dependencies: braces: 3.0.3 @@ -7722,17 +9689,39 @@ snapshots: dependencies: brace-expansion: 1.1.11 + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass-collect@1.0.2: + dependencies: + minipass: 3.3.6 + + minipass-flush@1.0.5: + dependencies: + minipass: 3.3.6 + + minipass-pipeline@1.2.4: + dependencies: + minipass: 3.3.6 + minipass@3.3.6: dependencies: yallist: 4.0.0 minipass@5.0.0: {} + minipass@7.1.2: {} + minizlib@2.1.2: dependencies: minipass: 3.3.6 yallist: 4.0.0 + mkdirp-classic@0.5.3: {} + mkdirp@1.0.4: {} mlly@1.7.1: @@ -7746,15 +9735,21 @@ snapshots: dependencies: obliterator: 2.0.4 - mobx-react-lite@4.0.7(mobx@6.12.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + modern-ahocorasick@1.0.1: {} + + morgan@1.10.0: dependencies: - mobx: 6.12.4 - react: 18.3.1 - use-sync-external-store: 1.2.2(react@18.3.1) - optionalDependencies: - react-dom: 18.3.1(react@18.3.1) + basic-auth: 2.0.1 + debug: 2.6.9 + depd: 2.0.0 + on-finished: 2.3.0 + on-headers: 1.0.2 + transitivePeerDependencies: + - supports-color + + mri@1.2.0: {} - mobx@6.12.4: {} + mrmime@1.0.1: {} ms@2.0.0: {} @@ -7764,6 +9759,12 @@ snapshots: mute-stream@0.0.8: {} + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + nanoid@3.3.7: {} negotiator@0.6.3: {} @@ -7791,20 +9792,44 @@ snapshots: dependencies: abbrev: 1.1.1 + normalize-package-data@5.0.0: + dependencies: + hosted-git-info: 6.1.1 + is-core-module: 2.14.0 + semver: 7.6.2 + validate-npm-package-license: 3.0.4 + normalize-path@2.1.1: dependencies: remove-trailing-separator: 1.1.0 normalize-path@3.0.0: {} - notistack@3.0.1(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + normalize-range@0.1.2: {} + + npm-install-checks@6.3.0: dependencies: - clsx: 1.2.1 - goober: 2.1.14(csstype@3.1.3) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - transitivePeerDependencies: - - csstype + semver: 7.6.2 + + npm-normalize-package-bin@3.0.1: {} + + npm-package-arg@10.1.0: + dependencies: + hosted-git-info: 6.1.1 + proc-log: 3.0.0 + semver: 7.6.2 + validate-npm-package-name: 5.0.1 + + npm-pick-manifest@8.0.2: + dependencies: + npm-install-checks: 6.3.0 + npm-normalize-package-bin: 3.0.1 + npm-package-arg: 10.1.0 + semver: 7.6.2 + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 npm-run-path@5.3.0: dependencies: @@ -7831,10 +9856,16 @@ snapshots: on-exit-leak-free@2.1.2: {} + on-finished@2.3.0: + dependencies: + ee-first: 1.1.1 + on-finished@2.4.1: dependencies: ee-first: 1.1.1 + on-headers@1.0.2: {} + once@1.4.0: dependencies: wrappy: 1.0.2 @@ -7851,13 +9882,6 @@ snapshots: dependencies: mimic-fn: 4.0.0 - optimism@0.18.0: - dependencies: - '@wry/caches': 1.0.1 - '@wry/context': 0.7.4 - '@wry/trie': 0.4.3 - tslib: 2.6.3 - ora@5.4.1: dependencies: bl: 4.1.0 @@ -7885,6 +9909,8 @@ snapshots: os-tmpdir@1.0.2: {} + outdent@0.8.0: {} + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -7901,12 +9927,20 @@ snapshots: dependencies: p-limit: 2.3.0 + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + p-map@4.0.0: dependencies: aggregate-error: 3.1.0 p-try@2.2.0: {} + package-json-from-dist@1.0.0: {} + + pako@0.2.9: {} + param-case@3.0.4: dependencies: dot-case: 3.0.4 @@ -7916,6 +9950,17 @@ snapshots: dependencies: callsites: 3.1.0 + parse-entities@4.0.1: + dependencies: + '@types/unist': 2.0.10 + character-entities: 2.0.2 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.0.2 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + parse-filepath@1.0.2: dependencies: is-absolute: 1.0.0 @@ -7929,6 +9974,8 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parse-ms@2.1.0: {} + parseurl@1.3.3: {} pascal-case@3.1.2: @@ -7957,6 +10004,11 @@ snapshots: dependencies: path-root-regex: 0.1.2 + path-scurry@1.11.1: + dependencies: + lru-cache: 10.3.0 + minipass: 7.1.2 + path-to-regexp@0.1.7: {} path-type@4.0.0: {} @@ -7969,6 +10021,18 @@ snapshots: dependencies: through: 2.3.8 + peek-stream@1.1.3: + dependencies: + buffer-from: 1.1.2 + duplexify: 3.7.1 + through2: 2.0.5 + + periscopic@3.1.0: + dependencies: + '@types/estree': 1.0.5 + estree-walker: 3.0.3 + is-reference: 3.0.2 + pg-cloudflare@1.1.1: optional: true @@ -8020,6 +10084,10 @@ snapshots: picomatch@2.3.1: {} + pidtree@0.6.0: {} + + pify@2.3.0: {} + pino-abstract-transport@1.2.0: dependencies: readable-stream: 4.5.2 @@ -8041,6 +10109,8 @@ snapshots: sonic-boom: 4.0.1 thread-stream: 3.1.0 + pirates@4.0.6: {} + pkg-types@1.1.1: dependencies: confbox: 0.1.7 @@ -8049,7 +10119,77 @@ snapshots: pluralize@8.0.0: {} - postcss@8.4.38: + possible-typed-array-names@1.0.0: {} + + postcss-discard-duplicates@5.1.0(postcss@8.4.39): + dependencies: + postcss: 8.4.39 + + postcss-import@15.1.0(postcss@8.4.39): + dependencies: + postcss: 8.4.39 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + + postcss-js@4.0.1(postcss@8.4.39): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.39 + + postcss-load-config@4.0.2(postcss@8.4.39): + dependencies: + lilconfig: 3.1.2 + yaml: 2.4.5 + optionalDependencies: + postcss: 8.4.39 + + postcss-modules-extract-imports@3.1.0(postcss@8.4.39): + dependencies: + postcss: 8.4.39 + + postcss-modules-local-by-default@4.0.5(postcss@8.4.39): + dependencies: + icss-utils: 5.1.0(postcss@8.4.39) + postcss: 8.4.39 + postcss-selector-parser: 6.1.0 + postcss-value-parser: 4.2.0 + + postcss-modules-scope@3.2.0(postcss@8.4.39): + dependencies: + postcss: 8.4.39 + postcss-selector-parser: 6.1.0 + + postcss-modules-values@4.0.0(postcss@8.4.39): + dependencies: + icss-utils: 5.1.0(postcss@8.4.39) + postcss: 8.4.39 + + postcss-modules@6.0.0(postcss@8.4.39): + dependencies: + generic-names: 4.0.0 + icss-utils: 5.1.0(postcss@8.4.39) + lodash.camelcase: 4.3.0 + postcss: 8.4.39 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.39) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.39) + postcss-modules-scope: 3.2.0(postcss@8.4.39) + postcss-modules-values: 4.0.0(postcss@8.4.39) + string-hash: 1.1.3 + + postcss-nested@6.0.1(postcss@8.4.39): + dependencies: + postcss: 8.4.39 + postcss-selector-parser: 6.1.0 + + postcss-selector-parser@6.1.0: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.39: dependencies: nanoid: 3.3.7 picocolors: 1.0.1 @@ -8085,16 +10225,33 @@ snapshots: transitivePeerDependencies: - pg-native + prettier@2.8.8: {} + pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 react-is: 18.3.1 + pretty-ms@7.0.1: + dependencies: + parse-ms: 2.1.0 + + proc-log@3.0.0: {} + + process-nextick-args@2.0.1: {} + process-warning@3.0.0: {} process@0.11.10: {} + promise-inflight@1.0.1: {} + + promise-retry@2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + promise@7.3.1: dependencies: asap: 2.0.6 @@ -8104,12 +10261,20 @@ snapshots: kleur: 3.0.3 sisteransi: 1.0.5 + prop-types-extra@1.1.1(react@18.3.1): + dependencies: + react: 18.3.1 + react-is: 16.13.1 + warning: 4.0.3 + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 + property-information@6.5.0: {} + proto3-json-serializer@2.0.2: dependencies: protobufjs: 7.3.2 @@ -8140,6 +10305,22 @@ snapshots: dependencies: event-stream: 3.3.4 + pump@2.0.1: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + pump@3.0.0: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + pumpify@1.5.1: + dependencies: + duplexify: 3.7.1 + inherits: 2.0.4 + pump: 2.0.1 + punycode@1.4.1: {} punycode@2.3.1: {} @@ -8175,6 +10356,25 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + react-bootstrap@2.10.4(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.24.7 + '@restart/hooks': 0.4.16(react@18.3.1) + '@restart/ui': 1.6.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/react-transition-group': 4.4.10 + classnames: 2.5.1 + dom-helpers: 5.2.1 + invariant: 2.2.4 + prop-types: 15.8.1 + prop-types-extra: 1.1.1(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + uncontrollable: 7.2.1(react@18.3.1) + warning: 4.0.3 + optionalDependencies: + '@types/react': 18.3.3 + react-dom@18.3.1(react@18.3.1): dependencies: loose-envify: 1.4.0 @@ -8192,6 +10392,8 @@ snapshots: react-is@18.3.1: {} + react-lifecycles-compat@3.0.4: {} + react-refresh@0.14.2: {} react-router-dom@6.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): @@ -8219,6 +10421,20 @@ snapshots: dependencies: loose-envify: 1.4.0 + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + readable-stream@3.6.2: dependencies: inherits: 2.0.4 @@ -8249,11 +10465,6 @@ snapshots: regenerator-runtime@0.14.1: {} - rehackt@0.1.0(@types/react@18.3.3)(react@18.3.1): - optionalDependencies: - '@types/react': 18.3.3 - react: 18.3.1 - relay-runtime@12.0.0: dependencies: '@babel/runtime': 7.24.7 @@ -8262,6 +10473,42 @@ snapshots: transitivePeerDependencies: - encoding + remark-frontmatter@4.0.1: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-frontmatter: 1.0.1 + micromark-extension-frontmatter: 1.1.1 + unified: 10.1.2 + + remark-mdx-frontmatter@1.1.1: + dependencies: + estree-util-is-identifier-name: 1.1.0 + estree-util-value-to-estree: 1.3.0 + js-yaml: 4.1.0 + toml: 3.0.0 + + remark-mdx@2.3.0: + dependencies: + mdast-util-mdx: 2.0.1 + micromark-extension-mdxjs: 1.0.1 + transitivePeerDependencies: + - supports-color + + remark-parse@10.0.2: + dependencies: + '@types/mdast': 3.0.15 + mdast-util-from-markdown: 1.3.1 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + + remark-rehype@10.1.0: + dependencies: + '@types/hast': 2.3.10 + '@types/mdast': 3.0.15 + mdast-util-to-hast: 12.3.0 + unified: 10.1.2 + remeda@2.2.1: dependencies: type-fest: 4.20.1 @@ -8276,6 +10523,8 @@ snapshots: require-from-string@2.0.2: {} + require-like@0.1.2: {} + require-main-filename@2.0.0: {} resolve-from@4.0.0: {} @@ -8284,14 +10533,14 @@ snapshots: resolve-pkg-maps@1.0.0: {} + resolve.exports@2.0.2: {} + resolve@1.22.8: dependencies: is-core-module: 2.14.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - response-iterator@0.2.6: {} - restore-cursor@3.1.0: dependencies: onetime: 5.1.2 @@ -8308,6 +10557,8 @@ snapshots: - encoding - supports-color + retry@0.12.0: {} + retry@0.13.1: {} reusify@1.0.4: {} @@ -8352,6 +10603,12 @@ snapshots: dependencies: tslib: 2.6.3 + sade@1.8.1: + dependencies: + mri: 1.2.0 + + safe-buffer@5.1.2: {} + safe-buffer@5.2.1: {} safe-regex2@3.1.0: @@ -8483,7 +10740,30 @@ snapshots: source-map-js@1.2.0: {} - source-map@0.5.7: {} + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + source-map@0.7.4: {} + + space-separated-tokens@2.0.2: {} + + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.18 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.18 + + spdx-license-ids@3.0.18: {} split2@4.2.0: {} @@ -8495,6 +10775,10 @@ snapshots: dependencies: tslib: 2.6.3 + ssri@10.0.6: + dependencies: + minipass: 7.1.2 + stack-trace@0.0.10: {} stackback@0.0.2: {} @@ -8515,6 +10799,8 @@ snapshots: stream-shift@1.0.3: {} + stream-slice@0.1.2: {} + stream-wormhole@1.1.0: {} streamsearch@1.1.0: {} @@ -8523,20 +10809,45 @@ snapshots: string-env-interpolation@1.0.1: {} + string-hash@1.1.3: {} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.0.1 + + strip-bom@3.0.0: {} + + strip-final-newline@2.0.0: {} + strip-final-newline@3.0.0: {} strip-literal@2.1.0: @@ -8545,7 +10856,19 @@ snapshots: stubs@3.0.0: {} - stylis@4.2.0: {} + style-to-object@0.4.4: + dependencies: + inline-style-parser: 0.1.1 + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + commander: 4.1.1 + glob: 10.4.2 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 supports-color@5.5.0: dependencies: @@ -8561,7 +10884,47 @@ snapshots: dependencies: tslib: 2.6.3 - symbol-observable@4.0.0: {} + tailwindcss@3.4.4: + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.6 + lilconfig: 2.1.0 + micromatch: 4.0.7 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.1 + postcss: 8.4.39 + postcss-import: 15.1.0(postcss@8.4.39) + postcss-js: 4.0.1(postcss@8.4.39) + postcss-load-config: 4.0.2(postcss@8.4.39) + postcss-nested: 6.0.1(postcss@8.4.39) + postcss-selector-parser: 6.1.0 + resolve: 1.22.8 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + tar-fs@2.1.1: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 tar@6.2.1: dependencies: @@ -8591,10 +10954,23 @@ snapshots: text-hex@1.0.0: {} + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + thread-stream@3.1.0: dependencies: real-require: 0.2.0 + through2@2.0.5: + dependencies: + readable-stream: 2.3.8 + xtend: 4.0.2 + through@2.3.8: {} tinybench@2.8.0: {} @@ -8621,13 +10997,17 @@ snapshots: toidentifier@1.0.1: {} + toml@3.0.0: {} + tr46@0.0.3: {} + trim-lines@3.0.1: {} + triple-beam@1.4.1: {} - ts-invariant@0.10.3: - dependencies: - tslib: 2.6.3 + trough@2.2.0: {} + + ts-interface-checker@0.1.13: {} ts-log@2.2.5: {} @@ -8639,6 +11019,12 @@ snapshots: string-argv: 0.3.2 typescript: 5.5.2 + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + tslib@1.14.1: {} tslib@2.4.1: {} @@ -8658,6 +11044,8 @@ snapshots: tunajs@1.0.15: {} + turbo-stream@2.2.0: {} + type-detect@4.0.8: {} type-fest@0.21.3: {} @@ -8679,18 +11067,86 @@ snapshots: unc-path-regex@0.1.2: {} + uncontrollable@7.2.1(react@18.3.1): + dependencies: + '@babel/runtime': 7.24.7 + '@types/react': 18.3.3 + invariant: 2.2.4 + react: 18.3.1 + react-lifecycles-compat: 3.0.4 + + uncontrollable@8.0.4(react@18.3.1): + dependencies: + react: 18.3.1 + undici-types@5.26.5: {} + undici@6.19.2: {} + + unified@10.1.2: + dependencies: + '@types/unist': 2.0.10 + bail: 2.0.2 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 5.3.7 + + unique-filename@3.0.0: + dependencies: + unique-slug: 4.0.0 + + unique-slug@4.0.0: + dependencies: + imurmurhash: 0.1.4 + + unist-util-generated@2.0.1: {} + + unist-util-is@5.2.1: + dependencies: + '@types/unist': 2.0.10 + + unist-util-position-from-estree@1.1.2: + dependencies: + '@types/unist': 2.0.10 + + unist-util-position@4.0.4: + dependencies: + '@types/unist': 2.0.10 + + unist-util-remove-position@4.0.2: + dependencies: + '@types/unist': 2.0.10 + unist-util-visit: 4.1.2 + + unist-util-stringify-position@3.0.3: + dependencies: + '@types/unist': 2.0.10 + + unist-util-visit-parents@5.1.3: + dependencies: + '@types/unist': 2.0.10 + unist-util-is: 5.2.1 + + unist-util-visit@4.1.2: + dependencies: + '@types/unist': 2.0.10 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + + universalify@2.0.1: {} + unixify@1.0.0: dependencies: normalize-path: 2.1.1 unpipe@1.0.0: {} - unplugin-swc@1.4.5(@swc/core@1.6.6)(rollup@4.18.0): + unplugin-swc@1.4.5(@swc/core@1.6.6(@swc/helpers@0.5.11))(rollup@4.18.0): dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.18.0) - '@swc/core': 1.6.6 + '@swc/core': 1.6.6(@swc/helpers@0.5.11) load-tsconfig: 0.2.5 unplugin: 1.10.2 transitivePeerDependencies: @@ -8730,22 +11186,52 @@ snapshots: immer: 10.1.1 react: 18.3.1 - use-sync-external-store@1.2.2(react@18.3.1): - dependencies: - react: 18.3.1 - util-deprecate@1.0.2: {} + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 + utils-merge@1.0.1: {} uuid@10.0.0: {} uuid@9.0.1: {} + uvu@0.5.6: + dependencies: + dequal: 2.0.3 + diff: 5.2.0 + kleur: 4.1.5 + sade: 1.8.1 + + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + validate-npm-package-name@5.0.1: {} + value-or-promise@1.0.12: {} vary@1.1.2: {} + vfile-message@3.1.4: + dependencies: + '@types/unist': 2.0.10 + unist-util-stringify-position: 3.0.3 + + vfile@5.3.7: + dependencies: + '@types/unist': 2.0.10 + is-buffer: 2.0.5 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 + vite-node@1.6.0(@types/node@20.14.9): dependencies: cac: 6.7.14 @@ -8766,7 +11252,7 @@ snapshots: vite@5.3.2(@types/node@20.14.9): dependencies: esbuild: 0.21.5 - postcss: 8.4.38 + postcss: 8.4.39 rollup: 4.18.0 optionalDependencies: '@types/node': 20.14.9 @@ -8805,6 +11291,10 @@ snapshots: - supports-color - terser + warning@4.0.3: + dependencies: + loose-envify: 1.4.0 + wcwidth@1.0.1: dependencies: defaults: 1.0.4 @@ -8814,6 +11304,12 @@ snapshots: lodash: 4.17.21 tunajs: 1.0.15 + web-encoding@1.1.5: + dependencies: + util: 0.12.5 + optionalDependencies: + '@zxing/text-encoding': 0.9.0 + web-streams-polyfill@3.3.3: {} webcrypto-core@1.8.0: @@ -8839,10 +11335,22 @@ snapshots: which-module@2.0.1: {} + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + which@2.0.2: dependencies: isexe: 2.0.0 + which@3.0.1: + dependencies: + isexe: 2.0.0 + why-is-node-running@2.2.2: dependencies: siginfo: 2.0.0 @@ -8884,8 +11392,16 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + wrappy@1.0.2: {} + ws@7.5.10: {} + ws@8.17.1: {} xtend@4.0.2: {} @@ -8900,7 +11416,8 @@ snapshots: yaml-ast-parser@0.0.43: {} - yaml@1.10.2: {} + yaml@1.10.2: + optional: true yaml@2.4.5: {} @@ -8939,8 +11456,6 @@ snapshots: yocto-queue@1.1.0: {} - zen-observable-ts@1.2.5: - dependencies: - zen-observable: 0.8.15 + zod@3.23.8: {} - zen-observable@0.8.15: {} + zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 5ca30d7..e32de46 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,4 @@ packages: - api + - sdk - web diff --git a/web/codegen.graphql.ts b/sdk/codegen.graphql.ts similarity index 59% rename from web/codegen.graphql.ts rename to sdk/codegen.graphql.ts index f91b2d7..84de45f 100644 --- a/web/codegen.graphql.ts +++ b/sdk/codegen.graphql.ts @@ -6,21 +6,23 @@ const config: CodegenConfig = { maybeValue: "T | undefined", typesPrefix: "I", scalars: { - DateTime: "string", - Upload: "File", + DateTime: "Date", }, }, hooks: { - afterAllFileWrite: "biome check --apply-unsafe", + afterAllFileWrite: "biome check --write --unsafe", }, generates: { - "src/graphql.ts": { - documents: "./src/**/*.gql", + "src/graphql.sdk.ts": { + documents: "gql/*.sdk.gql", plugins: [ "typescript", "typescript-operations", - "typescript-react-apollo", + "typescript-graphql-request", ], + config: { + gqlImport: "graphql-request#gql", + }, }, }, }; diff --git a/sdk/gql/auth.sdk.gql b/sdk/gql/auth.sdk.gql new file mode 100644 index 0000000..c9bed09 --- /dev/null +++ b/sdk/gql/auth.sdk.gql @@ -0,0 +1,19 @@ +fragment FullAuthToken on AuthToken { + token + user { + id + email + username + roles { + id + name + permissions + } + } +} + +query getAuthToken($params: AuthTokenParams!) { + authToken(params: $params) { + ...FullAuthToken + } +} diff --git a/sdk/gql/config.sdk.gql b/sdk/gql/config.sdk.gql new file mode 100644 index 0000000..9f7ecd5 --- /dev/null +++ b/sdk/gql/config.sdk.gql @@ -0,0 +1,6 @@ +query getConfig { + config { + createAnonymousUsers + mediaDataLimit + } +} diff --git a/web/src/features/media/media.gql b/sdk/gql/media.sdk.gql similarity index 58% rename from web/src/features/media/media.gql rename to sdk/gql/media.sdk.gql index 821122e..c9ed3e9 100644 --- a/web/src/features/media/media.gql +++ b/sdk/gql/media.sdk.gql @@ -1,4 +1,4 @@ -query MediaItem($key: String!) { +query getMediaItem($key: String!) { mediaItem(key: $key) { key type @@ -9,10 +9,10 @@ query MediaItem($key: String!) { } } -mutation CreateMediaUpload($key: String!) { +mutation createMediaUpload($key: String!) { uploadUrl: createMediaUpload(key: $key) } -mutation DeleteMedia($key: String!) { +mutation deleteMedia($key: String!) { deleteMedia(key: $key) } diff --git a/web/src/features/project/project.gql b/sdk/gql/project.sdk.gql similarity index 58% rename from web/src/features/project/project.gql rename to sdk/gql/project.sdk.gql index 33a79ec..2a698f9 100644 --- a/web/src/features/project/project.gql +++ b/sdk/gql/project.sdk.gql @@ -1,9 +1,7 @@ -query projectConfigs { +query getProjectConfigs { user { projectConfigs { - adapterType - host - email + ...ProjectConfigFragment apiToken } } @@ -17,22 +15,24 @@ mutation deleteProjectConfig($adapterType: ProjectAdapterType!) { deleted: deleteProjectConfig(adapterType: $adapterType) } -query projectBoards($adapterType: ProjectAdapterType!) { +query getProjectBoards($adapterType: ProjectAdapterType!) { project(adapterType: $adapterType) { config { - adapterType + ...ProjectConfigFragment } boards { - id - name + ...ProjectBoardFragment } } } -query projectSprints($adapterType: ProjectAdapterType!, $boardId: Int!) { +query getProjectBoard($adapterType: ProjectAdapterType!, $boardId: Int!) { project(adapterType: $adapterType) { config { - adapterType + ...ProjectConfigFragment + } + boards { + ...ProjectBoardFragment } sprints(boardId: $boardId) { ...ProjectSprintFragment @@ -40,10 +40,16 @@ query projectSprints($adapterType: ProjectAdapterType!, $boardId: Int!) { } } -query projectIssues($adapterType: ProjectAdapterType!, $sprintId: Int!) { +query getProjectSprint($adapterType: ProjectAdapterType!, $boardId: Int!, $sprintId: Int!) { project(adapterType: $adapterType) { config { - adapterType + ...ProjectConfigFragment + } + boards { + ...ProjectBoardFragment + } + sprints(boardId: $boardId) { + ...ProjectSprintFragment } issues(sprintId: $sprintId) { id @@ -70,6 +76,17 @@ query projectIssues($adapterType: ProjectAdapterType!, $sprintId: Int!) { } } +fragment ProjectConfigFragment on ProjectConfig { + adapterType + host + email +} + +fragment ProjectBoardFragment on ProjectBoard { + id + name +} + fragment ProjectSprintFragment on ProjectSprint { id name diff --git a/sdk/gql/user.sdk.gql b/sdk/gql/user.sdk.gql new file mode 100644 index 0000000..d9f5cf9 --- /dev/null +++ b/sdk/gql/user.sdk.gql @@ -0,0 +1,9 @@ +mutation createUser($params: CreateUserParams!) { + created: createUser(params: $params) { + id + } +} + +mutation updateUser($params: UpdateUserParams!) { + updated: updateUser(params: $params) +} diff --git a/sdk/package.json b/sdk/package.json new file mode 100644 index 0000000..df9de01 --- /dev/null +++ b/sdk/package.json @@ -0,0 +1,38 @@ +{ + "name": "@aldahick/rex-sdk", + "version": "0.0.0", + "license": "MIT", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "type": "module", + "engines": { + "node": "^20.15" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/aldahick/rex.git" + }, + "author": "Alex Hicks ", + "bugs": { + "url": "https://github.com/aldahick/rex/issues" + }, + "homepage": "https://github.com/aldahick/rex#readme", + "files": [ + "dist" + ], + "scripts": { + "build": "pnpm generate && tsc", + "build:ci": "tsc", + "generate": "graphql-codegen -c codegen.graphql.ts" + }, + "dependencies": { + "graphql-request": "6.1.0" + }, + "devDependencies": { + "@graphql-codegen/cli": "^5.0.2", + "@graphql-codegen/typescript": "^4.0.8", + "@graphql-codegen/typescript-graphql-request": "^6.2.0", + "@graphql-codegen/typescript-operations": "^4.2.2", + "tsc-watch": "^6.2.0" + } +} diff --git a/sdk/src/graphql.sdk.ts b/sdk/src/graphql.sdk.ts new file mode 100644 index 0000000..2453aa2 --- /dev/null +++ b/sdk/src/graphql.sdk.ts @@ -0,0 +1,1027 @@ +import { GraphQLClient, RequestOptions } from "graphql-request"; +import { gql } from "graphql-request"; +export type Maybe = T | undefined; +export type InputMaybe = T | undefined; +export type Exact = { + [K in keyof T]: T[K]; +}; +export type MakeOptional = Omit & { + [SubKey in K]?: Maybe; +}; +export type MakeMaybe = Omit & { + [SubKey in K]: Maybe; +}; +export type MakeEmpty< + T extends { [key: string]: unknown }, + K extends keyof T, +> = { [_ in K]?: never }; +export type Incremental = + | T + | { + [P in keyof T]?: P extends " $fragmentName" | "__typename" ? T[P] : never; + }; +type GraphQLClientRequestHeaders = RequestOptions["requestHeaders"]; +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: { input: string; output: string }; + String: { input: string; output: string }; + Boolean: { input: boolean; output: boolean }; + Int: { input: number; output: number }; + Float: { input: number; output: number }; + DateTime: { input: Date; output: Date }; +}; + +export enum IAuthPermission { + AdminMedia = "ADMIN_MEDIA", + AdminNotes = "ADMIN_NOTES", + AdminRoles = "ADMIN_ROLES", + AdminSteam = "ADMIN_STEAM", + AdminUsers = "ADMIN_USERS", + Media = "MEDIA", + Notes = "NOTES", + Projects = "PROJECTS", +} + +export type IAuthToken = { + __typename?: "AuthToken"; + token: Scalars["String"]["output"]; + user: IUser; + userId: Scalars["ID"]["output"]; +}; + +export type IAuthTokenGoogleParams = { + idToken: Scalars["String"]["input"]; +}; + +export type IAuthTokenLocalParams = { + password: Scalars["String"]["input"]; + username: Scalars["String"]["input"]; +}; + +export type IAuthTokenParams = { + google?: InputMaybe; + local?: InputMaybe; + userId?: InputMaybe; +}; + +export type IConfig = { + __typename?: "Config"; + createAnonymousUsers: Scalars["Boolean"]["output"]; + mediaDataLimit?: Maybe; +}; + +export type ICreateUserParams = { + email: Scalars["String"]["input"]; + password?: InputMaybe; + username?: InputMaybe; +}; + +export type IMediaItem = { + __typename?: "MediaItem"; + children?: Maybe; + key: Scalars["String"]["output"]; + type: IMediaItemType; +}; + +export enum IMediaItemType { + Directory = "DIRECTORY", + File = "FILE", + Series = "SERIES", +} + +export type IMutation = { + __typename?: "Mutation"; + addMediaDownload: IProgress; + createMedia: Scalars["Boolean"]["output"]; + createMediaUpload: Scalars["String"]["output"]; + createRole: IRole; + createUser: IUser; + deleteMedia: Scalars["Boolean"]["output"]; + deleteProjectConfig: Scalars["Boolean"]["output"]; + deleteRole: Scalars["Boolean"]["output"]; + fetchSteamGames: IProgress; + updateProjectConfig: Scalars["Boolean"]["output"]; + updateRole: Scalars["Boolean"]["output"]; + updateRolePermissions: Scalars["Boolean"]["output"]; + updateUser: Scalars["Boolean"]["output"]; +}; + +export type IMutationAddMediaDownloadArgs = { + destinationKey: Scalars["String"]["input"]; + sync?: InputMaybe; + url: Scalars["String"]["input"]; +}; + +export type IMutationCreateMediaArgs = { + data: Scalars["String"]["input"]; + key: Scalars["String"]["input"]; +}; + +export type IMutationCreateMediaUploadArgs = { + key: Scalars["String"]["input"]; +}; + +export type IMutationCreateRoleArgs = { + name: Scalars["String"]["input"]; +}; + +export type IMutationCreateUserArgs = { + params: ICreateUserParams; +}; + +export type IMutationDeleteMediaArgs = { + key: Scalars["String"]["input"]; +}; + +export type IMutationDeleteProjectConfigArgs = { + adapterType: IProjectAdapterType; +}; + +export type IMutationDeleteRoleArgs = { + id: Scalars["ID"]["input"]; +}; + +export type IMutationUpdateProjectConfigArgs = { + params: IUpdateProjectConfigParams; +}; + +export type IMutationUpdateRoleArgs = { + id: Scalars["ID"]["input"]; + name: Scalars["String"]["input"]; +}; + +export type IMutationUpdateRolePermissionsArgs = { + id: Scalars["ID"]["input"]; + permissions: IAuthPermission[]; +}; + +export type IMutationUpdateUserArgs = { + params: IUpdateUserParams; +}; + +export type IProgress = { + __typename?: "Progress"; + action: Scalars["String"]["output"]; + createdAt: Scalars["DateTime"]["output"]; + id: Scalars["ID"]["output"]; + logs: IProgressLog[]; + status: IProgressStatus; +}; + +export type IProgressLog = { + __typename?: "ProgressLog"; + createdAt: Scalars["DateTime"]["output"]; + text: Scalars["String"]["output"]; +}; + +export enum IProgressStatus { + Complete = "COMPLETE", + Created = "CREATED", + Errored = "ERRORED", + InProgress = "IN_PROGRESS", +} + +export type IProject = { + __typename?: "Project"; + boards: IProjectBoard[]; + config: IProjectConfig; + issues: IProjectIssue[]; + sprints: IProjectSprint[]; +}; + +export type IProjectIssuesArgs = { + sprintId: Scalars["Int"]["input"]; +}; + +export type IProjectSprintsArgs = { + boardId: Scalars["Int"]["input"]; +}; + +export enum IProjectAdapterType { + Jira = "JIRA", +} + +export type IProjectBoard = { + __typename?: "ProjectBoard"; + id: Scalars["Int"]["output"]; + name: Scalars["String"]["output"]; +}; + +export type IProjectConfig = { + __typename?: "ProjectConfig"; + adapterType: IProjectAdapterType; + apiToken: Scalars["String"]["output"]; + email: Scalars["String"]["output"]; + host: Scalars["String"]["output"]; +}; + +export type IProjectIssue = { + __typename?: "ProjectIssue"; + id: Scalars["ID"]["output"]; + implementer?: Maybe; + key: Scalars["String"]["output"]; + sprints: IProjectSprint[]; + state: Scalars["String"]["output"]; + statusDurations: IProjectIssueStatusDuration[]; + storyPoints?: Maybe; + title: Scalars["String"]["output"]; + type: Scalars["String"]["output"]; +}; + +export type IProjectIssueStatusDuration = { + __typename?: "ProjectIssueStatusDuration"; + fullDuration: Scalars["Int"]["output"]; + status: Scalars["String"]["output"]; + workingDays: Scalars["Int"]["output"]; + workingDuration: Scalars["Int"]["output"]; +}; + +export type IProjectSprint = { + __typename?: "ProjectSprint"; + end?: Maybe; + id: Scalars["Int"]["output"]; + name: Scalars["String"]["output"]; + start?: Maybe; + state: Scalars["String"]["output"]; +}; + +export type IProjectUser = { + __typename?: "ProjectUser"; + email?: Maybe; + id: Scalars["ID"]["output"]; + name: Scalars["String"]["output"]; +}; + +export type IQuery = { + __typename?: "Query"; + authToken: IAuthToken; + config: IConfig; + mediaItem?: Maybe; + progress: IProgress; + progresses: IProgress[]; + project: IProject; + roles: IRole[]; + steamGames: ISteamGame[]; + steamPlayer: ISteamPlayer; + steamPlayers: ISteamPlayer[]; + user: IUser; + users: IUser[]; +}; + +export type IQueryAuthTokenArgs = { + params: IAuthTokenParams; +}; + +export type IQueryMediaItemArgs = { + key: Scalars["String"]["input"]; +}; + +export type IQueryProgressArgs = { + id: Scalars["ID"]["input"]; +}; + +export type IQueryProgressesArgs = { + ids: Scalars["ID"]["input"][]; +}; + +export type IQueryProjectArgs = { + adapterType: IProjectAdapterType; +}; + +export type IQuerySteamGamesArgs = { + page: Scalars["Int"]["input"]; + search: Scalars["String"]["input"]; +}; + +export type IQuerySteamPlayerArgs = { + steamId64: Scalars["String"]["input"]; +}; + +export type IQuerySteamPlayersArgs = { + steamIds64: Scalars["String"]["input"][]; +}; + +export type IQueryUserArgs = { + id?: InputMaybe; +}; + +export type IRole = { + __typename?: "Role"; + id: Scalars["ID"]["output"]; + name: Scalars["String"]["output"]; + permissions: IAuthPermission[]; +}; + +export type ISteamGame = { + __typename?: "SteamGame"; + id: Scalars["Int"]["output"]; + name: Scalars["String"]["output"]; +}; + +export type ISteamPlayer = { + __typename?: "SteamPlayer"; + avatarUrl: Scalars["String"]["output"]; + id: Scalars["String"]["output"]; + nickname: Scalars["String"]["output"]; + ownedGames: ISteamGame[]; + playingGame?: Maybe; + profileUrl: Scalars["String"]["output"]; +}; + +export type IUpdateProjectConfigParams = { + adapterType: IProjectAdapterType; + apiToken: Scalars["String"]["input"]; + email: Scalars["String"]["input"]; + host: Scalars["String"]["input"]; +}; + +export type IUpdateUserParams = { + email?: InputMaybe; + id: Scalars["ID"]["input"]; + password?: InputMaybe; + roleIds?: InputMaybe; + username?: InputMaybe; +}; + +export type IUser = { + __typename?: "User"; + email: Scalars["String"]["output"]; + id: Scalars["ID"]["output"]; + permissions?: Maybe; + projectConfigs: IProjectConfig[]; + roles?: Maybe; + username?: Maybe; +}; + +export type IFullAuthTokenFragment = { + __typename?: "AuthToken"; + token: string; + user: { + __typename?: "User"; + id: string; + email: string; + username?: string | undefined; + roles?: + | Array<{ + __typename?: "Role"; + id: string; + name: string; + permissions: IAuthPermission[]; + }> + | undefined; + }; +}; + +export type IGetAuthTokenQueryVariables = Exact<{ + params: IAuthTokenParams; +}>; + +export type IGetAuthTokenQuery = { + __typename?: "Query"; + authToken: { + __typename?: "AuthToken"; + token: string; + user: { + __typename?: "User"; + id: string; + email: string; + username?: string | undefined; + roles?: + | Array<{ + __typename?: "Role"; + id: string; + name: string; + permissions: IAuthPermission[]; + }> + | undefined; + }; + }; +}; + +export type IGetConfigQueryVariables = Exact<{ [key: string]: never }>; + +export type IGetConfigQuery = { + __typename?: "Query"; + config: { + __typename?: "Config"; + createAnonymousUsers: boolean; + mediaDataLimit?: number | undefined; + }; +}; + +export type IGetMediaItemQueryVariables = Exact<{ + key: Scalars["String"]["input"]; +}>; + +export type IGetMediaItemQuery = { + __typename?: "Query"; + mediaItem?: + | { + __typename?: "MediaItem"; + key: string; + type: IMediaItemType; + children?: + | Array<{ + __typename?: "MediaItem"; + key: string; + type: IMediaItemType; + }> + | undefined; + } + | undefined; +}; + +export type ICreateMediaUploadMutationVariables = Exact<{ + key: Scalars["String"]["input"]; +}>; + +export type ICreateMediaUploadMutation = { + __typename?: "Mutation"; + uploadUrl: string; +}; + +export type IDeleteMediaMutationVariables = Exact<{ + key: Scalars["String"]["input"]; +}>; + +export type IDeleteMediaMutation = { + __typename?: "Mutation"; + deleteMedia: boolean; +}; + +export type IGetProjectConfigsQueryVariables = Exact<{ [key: string]: never }>; + +export type IGetProjectConfigsQuery = { + __typename?: "Query"; + user: { + __typename?: "User"; + projectConfigs: Array<{ + __typename?: "ProjectConfig"; + apiToken: string; + adapterType: IProjectAdapterType; + host: string; + email: string; + }>; + }; +}; + +export type IUpdateProjectConfigMutationVariables = Exact<{ + params: IUpdateProjectConfigParams; +}>; + +export type IUpdateProjectConfigMutation = { + __typename?: "Mutation"; + updated: boolean; +}; + +export type IDeleteProjectConfigMutationVariables = Exact<{ + adapterType: IProjectAdapterType; +}>; + +export type IDeleteProjectConfigMutation = { + __typename?: "Mutation"; + deleted: boolean; +}; + +export type IGetProjectBoardsQueryVariables = Exact<{ + adapterType: IProjectAdapterType; +}>; + +export type IGetProjectBoardsQuery = { + __typename?: "Query"; + project: { + __typename?: "Project"; + config: { + __typename?: "ProjectConfig"; + adapterType: IProjectAdapterType; + host: string; + email: string; + }; + boards: Array<{ __typename?: "ProjectBoard"; id: number; name: string }>; + }; +}; + +export type IGetProjectBoardQueryVariables = Exact<{ + adapterType: IProjectAdapterType; + boardId: Scalars["Int"]["input"]; +}>; + +export type IGetProjectBoardQuery = { + __typename?: "Query"; + project: { + __typename?: "Project"; + config: { + __typename?: "ProjectConfig"; + adapterType: IProjectAdapterType; + host: string; + email: string; + }; + boards: Array<{ __typename?: "ProjectBoard"; id: number; name: string }>; + sprints: Array<{ + __typename?: "ProjectSprint"; + id: number; + name: string; + state: string; + start?: Date | undefined; + end?: Date | undefined; + }>; + }; +}; + +export type IGetProjectSprintQueryVariables = Exact<{ + adapterType: IProjectAdapterType; + boardId: Scalars["Int"]["input"]; + sprintId: Scalars["Int"]["input"]; +}>; + +export type IGetProjectSprintQuery = { + __typename?: "Query"; + project: { + __typename?: "Project"; + config: { + __typename?: "ProjectConfig"; + adapterType: IProjectAdapterType; + host: string; + email: string; + }; + boards: Array<{ __typename?: "ProjectBoard"; id: number; name: string }>; + sprints: Array<{ + __typename?: "ProjectSprint"; + id: number; + name: string; + state: string; + start?: Date | undefined; + end?: Date | undefined; + }>; + issues: Array<{ + __typename?: "ProjectIssue"; + id: string; + key: string; + type: string; + state: string; + title: string; + storyPoints?: number | undefined; + implementer?: + | { + __typename?: "ProjectUser"; + id: string; + name: string; + email?: string | undefined; + } + | undefined; + sprints: Array<{ + __typename?: "ProjectSprint"; + id: number; + name: string; + state: string; + start?: Date | undefined; + end?: Date | undefined; + }>; + statusDurations: Array<{ + __typename?: "ProjectIssueStatusDuration"; + status: string; + workingDays: number; + workingDuration: number; + fullDuration: number; + }>; + }>; + }; +}; + +export type IProjectConfigFragmentFragment = { + __typename?: "ProjectConfig"; + adapterType: IProjectAdapterType; + host: string; + email: string; +}; + +export type IProjectBoardFragmentFragment = { + __typename?: "ProjectBoard"; + id: number; + name: string; +}; + +export type IProjectSprintFragmentFragment = { + __typename?: "ProjectSprint"; + id: number; + name: string; + state: string; + start?: Date | undefined; + end?: Date | undefined; +}; + +export type ICreateUserMutationVariables = Exact<{ + params: ICreateUserParams; +}>; + +export type ICreateUserMutation = { + __typename?: "Mutation"; + created: { __typename?: "User"; id: string }; +}; + +export type IUpdateUserMutationVariables = Exact<{ + params: IUpdateUserParams; +}>; + +export type IUpdateUserMutation = { __typename?: "Mutation"; updated: boolean }; + +export const FullAuthTokenFragmentDoc = gql` + fragment FullAuthToken on AuthToken { + token + user { + id + email + username + roles { + id + name + permissions + } + } +} + `; +export const ProjectConfigFragmentFragmentDoc = gql` + fragment ProjectConfigFragment on ProjectConfig { + adapterType + host + email +} + `; +export const ProjectBoardFragmentFragmentDoc = gql` + fragment ProjectBoardFragment on ProjectBoard { + id + name +} + `; +export const ProjectSprintFragmentFragmentDoc = gql` + fragment ProjectSprintFragment on ProjectSprint { + id + name + state + start + end +} + `; +export const GetAuthTokenDocument = gql` + query getAuthToken($params: AuthTokenParams!) { + authToken(params: $params) { + ...FullAuthToken + } +} + ${FullAuthTokenFragmentDoc}`; +export const GetConfigDocument = gql` + query getConfig { + config { + createAnonymousUsers + mediaDataLimit + } +} + `; +export const GetMediaItemDocument = gql` + query getMediaItem($key: String!) { + mediaItem(key: $key) { + key + type + children { + key + type + } + } +} + `; +export const CreateMediaUploadDocument = gql` + mutation createMediaUpload($key: String!) { + uploadUrl: createMediaUpload(key: $key) +} + `; +export const DeleteMediaDocument = gql` + mutation deleteMedia($key: String!) { + deleteMedia(key: $key) +} + `; +export const GetProjectConfigsDocument = gql` + query getProjectConfigs { + user { + projectConfigs { + ...ProjectConfigFragment + apiToken + } + } +} + ${ProjectConfigFragmentFragmentDoc}`; +export const UpdateProjectConfigDocument = gql` + mutation updateProjectConfig($params: UpdateProjectConfigParams!) { + updated: updateProjectConfig(params: $params) +} + `; +export const DeleteProjectConfigDocument = gql` + mutation deleteProjectConfig($adapterType: ProjectAdapterType!) { + deleted: deleteProjectConfig(adapterType: $adapterType) +} + `; +export const GetProjectBoardsDocument = gql` + query getProjectBoards($adapterType: ProjectAdapterType!) { + project(adapterType: $adapterType) { + config { + ...ProjectConfigFragment + } + boards { + ...ProjectBoardFragment + } + } +} + ${ProjectConfigFragmentFragmentDoc} +${ProjectBoardFragmentFragmentDoc}`; +export const GetProjectBoardDocument = gql` + query getProjectBoard($adapterType: ProjectAdapterType!, $boardId: Int!) { + project(adapterType: $adapterType) { + config { + ...ProjectConfigFragment + } + boards { + ...ProjectBoardFragment + } + sprints(boardId: $boardId) { + ...ProjectSprintFragment + } + } +} + ${ProjectConfigFragmentFragmentDoc} +${ProjectBoardFragmentFragmentDoc} +${ProjectSprintFragmentFragmentDoc}`; +export const GetProjectSprintDocument = gql` + query getProjectSprint($adapterType: ProjectAdapterType!, $boardId: Int!, $sprintId: Int!) { + project(adapterType: $adapterType) { + config { + ...ProjectConfigFragment + } + boards { + ...ProjectBoardFragment + } + sprints(boardId: $boardId) { + ...ProjectSprintFragment + } + issues(sprintId: $sprintId) { + id + key + type + state + title + storyPoints + implementer { + id + name + email + } + sprints { + ...ProjectSprintFragment + } + statusDurations { + status + workingDays + workingDuration + fullDuration + } + } + } +} + ${ProjectConfigFragmentFragmentDoc} +${ProjectBoardFragmentFragmentDoc} +${ProjectSprintFragmentFragmentDoc}`; +export const CreateUserDocument = gql` + mutation createUser($params: CreateUserParams!) { + created: createUser(params: $params) { + id + } +} + `; +export const UpdateUserDocument = gql` + mutation updateUser($params: UpdateUserParams!) { + updated: updateUser(params: $params) +} + `; + +export type SdkFunctionWrapper = ( + action: (requestHeaders?: Record) => Promise, + operationName: string, + operationType?: string, + variables?: any, +) => Promise; + +const defaultWrapper: SdkFunctionWrapper = ( + action, + _operationName, + _operationType, + _variables, +) => action(); + +export function getSdk( + client: GraphQLClient, + withWrapper: SdkFunctionWrapper = defaultWrapper, +) { + return { + getAuthToken( + variables: IGetAuthTokenQueryVariables, + requestHeaders?: GraphQLClientRequestHeaders, + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request(GetAuthTokenDocument, variables, { + ...requestHeaders, + ...wrappedRequestHeaders, + }), + "getAuthToken", + "query", + variables, + ); + }, + getConfig( + variables?: IGetConfigQueryVariables, + requestHeaders?: GraphQLClientRequestHeaders, + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request(GetConfigDocument, variables, { + ...requestHeaders, + ...wrappedRequestHeaders, + }), + "getConfig", + "query", + variables, + ); + }, + getMediaItem( + variables: IGetMediaItemQueryVariables, + requestHeaders?: GraphQLClientRequestHeaders, + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request(GetMediaItemDocument, variables, { + ...requestHeaders, + ...wrappedRequestHeaders, + }), + "getMediaItem", + "query", + variables, + ); + }, + createMediaUpload( + variables: ICreateMediaUploadMutationVariables, + requestHeaders?: GraphQLClientRequestHeaders, + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request( + CreateMediaUploadDocument, + variables, + { ...requestHeaders, ...wrappedRequestHeaders }, + ), + "createMediaUpload", + "mutation", + variables, + ); + }, + deleteMedia( + variables: IDeleteMediaMutationVariables, + requestHeaders?: GraphQLClientRequestHeaders, + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request(DeleteMediaDocument, variables, { + ...requestHeaders, + ...wrappedRequestHeaders, + }), + "deleteMedia", + "mutation", + variables, + ); + }, + getProjectConfigs( + variables?: IGetProjectConfigsQueryVariables, + requestHeaders?: GraphQLClientRequestHeaders, + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request( + GetProjectConfigsDocument, + variables, + { ...requestHeaders, ...wrappedRequestHeaders }, + ), + "getProjectConfigs", + "query", + variables, + ); + }, + updateProjectConfig( + variables: IUpdateProjectConfigMutationVariables, + requestHeaders?: GraphQLClientRequestHeaders, + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request( + UpdateProjectConfigDocument, + variables, + { ...requestHeaders, ...wrappedRequestHeaders }, + ), + "updateProjectConfig", + "mutation", + variables, + ); + }, + deleteProjectConfig( + variables: IDeleteProjectConfigMutationVariables, + requestHeaders?: GraphQLClientRequestHeaders, + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request( + DeleteProjectConfigDocument, + variables, + { ...requestHeaders, ...wrappedRequestHeaders }, + ), + "deleteProjectConfig", + "mutation", + variables, + ); + }, + getProjectBoards( + variables: IGetProjectBoardsQueryVariables, + requestHeaders?: GraphQLClientRequestHeaders, + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request( + GetProjectBoardsDocument, + variables, + { ...requestHeaders, ...wrappedRequestHeaders }, + ), + "getProjectBoards", + "query", + variables, + ); + }, + getProjectBoard( + variables: IGetProjectBoardQueryVariables, + requestHeaders?: GraphQLClientRequestHeaders, + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request( + GetProjectBoardDocument, + variables, + { ...requestHeaders, ...wrappedRequestHeaders }, + ), + "getProjectBoard", + "query", + variables, + ); + }, + getProjectSprint( + variables: IGetProjectSprintQueryVariables, + requestHeaders?: GraphQLClientRequestHeaders, + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request( + GetProjectSprintDocument, + variables, + { ...requestHeaders, ...wrappedRequestHeaders }, + ), + "getProjectSprint", + "query", + variables, + ); + }, + createUser( + variables: ICreateUserMutationVariables, + requestHeaders?: GraphQLClientRequestHeaders, + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request(CreateUserDocument, variables, { + ...requestHeaders, + ...wrappedRequestHeaders, + }), + "createUser", + "mutation", + variables, + ); + }, + updateUser( + variables: IUpdateUserMutationVariables, + requestHeaders?: GraphQLClientRequestHeaders, + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request(UpdateUserDocument, variables, { + ...requestHeaders, + ...wrappedRequestHeaders, + }), + "updateUser", + "mutation", + variables, + ); + }, + }; +} +export type Sdk = ReturnType; diff --git a/sdk/src/index.ts b/sdk/src/index.ts new file mode 100644 index 0000000..21f2988 --- /dev/null +++ b/sdk/src/index.ts @@ -0,0 +1,14 @@ +import { GraphQLClient } from "graphql-request"; +import { getSdk } from "./graphql.sdk.js"; + +export * from "./graphql.sdk.js"; + +export type RexSdk = ReturnType; + +export interface RexSdkOptions { + graphqlUrl: string; + config?: GraphQLClient["requestConfig"]; +} + +export const getBaseRexSdk = ({ graphqlUrl, config }: RexSdkOptions): RexSdk => + getSdk(new GraphQLClient(graphqlUrl, config)); diff --git a/sdk/tsconfig.json b/sdk/tsconfig.json new file mode 100644 index 0000000..84b28d7 --- /dev/null +++ b/sdk/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "es2022", + "module": "node16", + "outDir": "./dist", + "rootDir": "./src", + "declaration": true, + "inlineSourceMap": true, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "incremental": true, + "tsBuildInfoFile": "dist/.tsbuildinfo", + "skipLibCheck": true, + "strict": true, + "noImplicitAny": true, + "useUnknownInCatchVariables": true, + "noUncheckedIndexedAccess": true, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["src"] +} diff --git a/web/Dockerfile b/web/Dockerfile new file mode 100644 index 0000000..ccfc0fa --- /dev/null +++ b/web/Dockerfile @@ -0,0 +1,35 @@ +# Make sure to build this image using the root context, not "web" context +FROM node:20-alpine AS base + +WORKDIR /rex +RUN npm i -g pnpm@latest +COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ +COPY sdk/package.json ./sdk/ +COPY web/package.json ./web/ + +FROM base AS builder + +RUN pnpm install --frozen-lockfile + +WORKDIR /rex/sdk +COPY sdk/tsconfig.json ./ +COPY sdk/src src +RUN pnpm build:ci + +WORKDIR /rex/web +COPY web/postcss.config.js web/tailwind.config.ts web/tsconfig.json web/vite.config.ts ./ +COPY web/public public +COPY web/app app +RUN pnpm build + +FROM base AS server + +RUN pnpm install --prod --frozen-lockfile + +WORKDIR /rex +COPY --from=builder /rex/sdk/dist sdk/dist +COPY --from=builder /rex/web/build web/build +COPY --from=builder /rex/web/public web/public + +WORKDIR /rex/web +CMD pnpm start diff --git a/web/app/components/auth/AuthGoogleButton.tsx b/web/app/components/auth/AuthGoogleButton.tsx new file mode 100644 index 0000000..c26280b --- /dev/null +++ b/web/app/components/auth/AuthGoogleButton.tsx @@ -0,0 +1,54 @@ +import { + CredentialResponse, + GoogleLogin, + GoogleOAuthProvider, +} from "@react-oauth/google"; +import { useLoaderData, useSubmit } from "@remix-run/react"; +import React from "react"; +import { useStatus } from "../../hooks/useStatus.hook"; +import { LoginLoader } from "../../routes/login"; +import { objectToForm } from "../../utils/form.util"; + +export const AuthGoogleButton: React.FC = () => { + const { + config: { googleClientId }, + } = useLoaderData(); + const status = useStatus(); + const submit = useSubmit(); + + const handleSuccess = (response: CredentialResponse) => { + if (!response.credential) { + status.error("No credential returned from Google OAuth"); + return; + } + submit( + objectToForm({ + provider: "google", + idToken: response.credential, + }), + { method: "POST" }, + ); + }; + + const handleError = () => { + status.error("Failed to fetch OAuth token from Google. Not sure why!"); + }; + + if (!googleClientId) { + return null; + } + + return ( + + + + ); +}; diff --git a/web/app/components/auth/AuthLoginForm.tsx b/web/app/components/auth/AuthLoginForm.tsx new file mode 100644 index 0000000..d973e9a --- /dev/null +++ b/web/app/components/auth/AuthLoginForm.tsx @@ -0,0 +1,43 @@ +import { + Link, + Form as RemixForm, + useLoaderData, + useSearchParams, +} from "@remix-run/react"; +import React from "react"; +import { Button, FloatingLabel, Form, Stack } from "react-bootstrap"; +import { LoginLoader } from "../../routes/login"; + +export const AuthLoginForm: React.FC = () => { + const [searchParams] = useSearchParams(); + const { config } = useLoaderData(); + const canRegister = config.createAnonymousUsers; + + return ( + + + + + + + + +
+ {canRegister !== false && ( + + + + )} + +
+
+
+ ); +}; diff --git a/web/app/components/auth/AuthRegisterForm.tsx b/web/app/components/auth/AuthRegisterForm.tsx new file mode 100644 index 0000000..071dade --- /dev/null +++ b/web/app/components/auth/AuthRegisterForm.tsx @@ -0,0 +1,40 @@ +import { Form as RemixForm } from "@remix-run/react"; +import React from "react"; +import { Button, FloatingLabel, Form, Stack } from "react-bootstrap"; +import { useStatus } from "../../hooks/useStatus.hook"; +import { getFormInput } from "../../utils/form.util"; + +export const AuthRegisterForm: React.FC = () => { + const status = useStatus(); + + const handleSubmit = (evt: React.FormEvent) => { + const password1 = getFormInput(evt.currentTarget, "password")?.value; + const password2 = getFormInput(evt.currentTarget, "password2")?.value; + if (password1 !== password2) { + status.error("Passwords must match"); + return evt.preventDefault(); + } + }; + + return ( + + + + + + + + + + + + + + +
+ +
+
+
+ ); +}; diff --git a/web/app/components/auth/auth.atom.ts b/web/app/components/auth/auth.atom.ts new file mode 100644 index 0000000..19a288b --- /dev/null +++ b/web/app/components/auth/auth.atom.ts @@ -0,0 +1,7 @@ +import { IAuthPermission, IFullAuthTokenFragment } from "@aldahick/rex-sdk"; +import { atom } from "jotai"; + +type AuthAtomValue = IFullAuthTokenFragment & { + permissions: IAuthPermission[]; +}; +export const authAtom = atom(undefined); diff --git a/web/src/features/cat/CatCanvas.tsx b/web/app/components/cat/CatCanvas.tsx similarity index 58% rename from web/src/features/cat/CatCanvas.tsx rename to web/app/components/cat/CatCanvas.tsx index d4ca39b..749efd1 100644 --- a/web/src/features/cat/CatCanvas.tsx +++ b/web/app/components/cat/CatCanvas.tsx @@ -1,27 +1,14 @@ import React, { useState } from "react"; -import { useStores } from "../../hooks"; -import { ThemeSetting } from "../../store/settings.store"; import { CatGame } from "./CatGame"; -const getCatColors = (theme?: ThemeSetting) => - theme === ThemeSetting.Light || !theme - ? { - color: "#121212", - backgroundColor: "white", - } - : { - color: "white", - backgroundColor: "#121212", - }; - /** * Displays a moving dot, because that's all it takes to entertain my cat */ export const CatCanvas: React.FC = () => { - const { settingsStore } = useStores(); const [game] = useState( new CatGame({ - ...getCatColors(settingsStore.get("theme")), + color: "white", + backgroundColor: "#121212", speed: 5, radius: 16, count: 3, diff --git a/web/src/features/cat/CatGame.ts b/web/app/components/cat/CatGame.ts similarity index 93% rename from web/src/features/cat/CatGame.ts rename to web/app/components/cat/CatGame.ts index a8c5aee..5715c0a 100644 --- a/web/src/features/cat/CatGame.ts +++ b/web/app/components/cat/CatGame.ts @@ -1,6 +1,18 @@ import { clamp, range } from "remeda"; -import { XYCoord } from "../utils/XYCoord"; -import { CatSettings } from "./CatSettings"; + +export interface XYCoord { + x: number; + y: number; +} + +export interface CatSettings { + backgroundColor: string; + color: string; + count: number; + speed: number; + radius: number; + frameRate: number; +} const randomInt = (max: number) => Math.floor(Math.random() * max); diff --git a/web/app/components/file/FileBrowser.tsx b/web/app/components/file/FileBrowser.tsx new file mode 100644 index 0000000..706df10 --- /dev/null +++ b/web/app/components/file/FileBrowser.tsx @@ -0,0 +1,18 @@ +import { useLoaderData } from "@remix-run/react"; +import React from "react"; +import { Container, FloatingLabel, Form } from "react-bootstrap"; +import { MediaLoader } from "../../routes/media.$"; +import { FileList } from "./FileList"; + +export const FileBrowser: React.FC = () => { + const { root } = useLoaderData(); + + return ( + + + + + + + ); +}; diff --git a/web/app/components/file/FileContent.tsx b/web/app/components/file/FileContent.tsx new file mode 100644 index 0000000..573508f --- /dev/null +++ b/web/app/components/file/FileContent.tsx @@ -0,0 +1,69 @@ +import { IMediaItem } from "@aldahick/rex-sdk"; +import { Await, useAsyncValue, useLoaderData } from "@remix-run/react"; +import mime from "mime"; +import React from "react"; +import { MediaLoader } from "../../routes/media.$"; + +const TextContent: React.FC<{ mimeType: string }> = ({ mimeType }) => { + const text = useAsyncValue() as string; + + return mimeType === "text/html" ? ( + // biome-ignore lint/security/noDangerouslySetInnerHtml: what do you even want + + ) : ( + {text} + ); +}; + +export const FileContent: React.FC<{ + item: IMediaItem; + onClick?: () => void; +}> = ({ item, onClick }) => { + const { auth, config } = useLoaderData(); + const mimeType = mime.getType(item.key); + const params = new URLSearchParams({ key: item.key, token: auth.token }); + const contentUrl = `${config.publicApiUrl}v1/media/content?${params}`; + + switch (mimeType) { + case "audio/mp4": + case "audio/mpeg": + // biome-ignore lint/a11y/useMediaCaption: nope + return