From 019d92a08d90b70d74b78aeb5950abf2b1c3af0e Mon Sep 17 00:00:00 2001 From: Vijak Khajornritdacha Date: Tue, 12 Sep 2023 16:07:29 +0700 Subject: [PATCH 1/8] feat: backoffice (#560) * feat(codegen): add getPendingReviews query * feat(admin-web): setup apollo and add getPendingReviews api * feat: add override query in frontend * refactor: migrate apollo provider to AppProvider * Configure pre-release mode * change sync workflow * Version Packages (#512) Co-authored-by: github-actions[bot] * install changeset in workflow * fix sync beta workflow * add commit identity * Enter pre-release mode * fix transform packages * feat: add override query in frontend * fix: edit import path * feat: add HtmlSanitizer and Navbar * feat: add approvedReviews and GenEd Page * ci: update pnpm-lock * move transpile packages out of experimental * refactor: migrate appProvider to context folder * refactor: create pendingReviews page and remove api page * ci(gitignore): remove .env from gitignore * refactor: create genEd module * refactor: migrate pendingReviews to its own module * refactor: migrate approvedReviews to its own module * refactor: remove unused codes Including 1. Logging 2. proxy in httpClient 3. Admin access token leaked in apollo * fix(homePage): move router.push inside useEffect * refactor(pendingReviews): remove unused codes * refactor(apollo): remove course search cache from apollo client * ci(env): remove unused variables * feat: add MUI and create pendingReviews design * feat(pendingReviews): add skeleton * install mui * feat: add themeProvider * feat: add Poppin and Prompts fonts * feat: recreate Navbar with MUI's appbar * feat: add styling to Navbar(Appbar) * docs: add required environment variables to readme * feat: Demo genEd table * setup review with graphql * feat(admin-api): add override * feat(admin-api): add get-all-reviews query * refactor(admin-api): remove unused codes and comments * add graphql asset * add enum graphql * remove unused file * remove unused env from template and config * fix lockfile broken * add dashboard url to env * fix env and config * match dependencies version to api's * feat(sidebar): add sidebar * feat(sidebar): decorate sidebar * feat: add fonts * feat: add theme palette * feat: add highlight link when selected * fix(index): remove import .css * feat: pendingReview header * feat: upper Review page * feat: table header and card layout wip * feat(pendingReviews): add html sanitize to content * fix: padding * feat: WIP pendingReview * setup auth to request id_token * feat: add Thai font * feat: add mui icon * feat: polish pendingReview page * add config variable * feat: add login page and generate token page * add template env, validate token * feat(auth): add protectedRoutes * format: apply format * fix: update design to final WIP * format: format code * fix: remove .env files from remote and add .env.example * refactor: migrate code to its own module * ci: config tsconfig.json * feat(GenEd): decorate gened page * setup review with graphql * feat(admin-api): add override * feat(admin-api): add get-all-reviews query * refactor(admin-api): remove unused codes and comments * add enum graphql * remove unused env from template and config * fix lockfile broken * fix env and config * match dependencies version to api's * setup auth to request id_token * add config variable * add template env, validate token * fix: tsconfig * refactor: change 'Topbar' component name to 'Sidebar' * feat(gened): add topbar to gened page * feat(sidebar): add cugetreg logo * add jwt module * feat(pending reviews): add topbar * feat: cancel button * fix(topbar): center rightside buttons vertically * feat(pending reviews): add API for approve and reject reviews * feat: improve textfield * feat: error handling pendingReview * feat(gened): add delete button * feat(gened): add delete gened api * fix: change dependecy installation scope * feat(gened): add input for new gened course * change review and override schema * add idToken validation, me and remove unused code * feat(gened): add refresh button * feat(gened): add react toast for gened page * refactor: migrate toast config to /config * fix(sidebar): fix highlight current page bug * fix(gened): table head is now sticky * fix: make the program compilable * fix: fix sending code * feat: handle validating id_token and generate access_token * feat: handle sending cookie both frontend and backend * feat: add auth guard * feat: lazy query review * feat: add global auth guard * fix: first fetch * fix: fix circular structure by removing passthrough in res * feat(frontend): add protected routes * fix(frontend/generateToken): change from fetch to axios and add spinner * refactor: remove unused code in backend auth * feat: add logout feature * feat(frontend): add authApi * edit readme * fix(backend-api): change cookie expiry date to 30 days * fix(pendingReviews): fix select form type * refactor: remove unused code * feat: filter wip * feat: wip filter * regenerate lockfile * fix admin-web * migrate changes from api to admin-api * fix(admin-api): setReviewStatus return type * fix(admin-api): authentication for graphql * feat(frontend): add login page * feat(frontend): add user feedback approve review * fix(frontend): redirect if login fail * refactor(frontend): remove year and semester * feat(api): add filter to overrides * ci(admin-api): add Dockerfile * Revert "ci(admin-api): add Dockerfile" This reverts commit 1a3e4dfaad8532b7813602ca2d3e12b73d1adb8b. * ci(admin-web): add Dockerfile * ci(admin-web): edit Dockerfile --------- Co-authored-by: Chanatip Pattanapen Co-authored-by: bombnp Co-authored-by: Nut Pinyo Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] Co-authored-by: nac Co-authored-by: Saenyakorn Siangsanoh Co-authored-by: Nutthapat Pongtanyavichai <59821765+Leomotors@users.noreply.github.com> --- .dockerignore | 2 + .prettierignore | 1 + apps/admin-api/.env.template | 11 +- apps/admin-api/.gitignore | 11 + apps/admin-api/.prettierignore | 1 - apps/admin-api/Dockerfile | 45 + apps/admin-api/package.json | 13 +- apps/admin-api/src/app/app.controller.ts | 22 +- apps/admin-api/src/app/app.module.ts | 42 +- apps/admin-api/src/auth/auth.controller.ts | 79 + apps/admin-api/src/auth/auth.dto.ts | 18 + apps/admin-api/src/auth/auth.guard.ts | 43 + apps/admin-api/src/auth/auth.module.ts | 26 + apps/admin-api/src/auth/auth.service.ts | 69 + apps/admin-api/src/auth/oidc.guard.ts | 10 + .../src/common/decorators/SkipAuth.ts | 4 + .../src/common/errors/BadRequestError.ts | 11 + .../src/common/errors/NotFoundError.ts | 11 + apps/admin-api/src/common/errors/index.ts | 2 + apps/admin-api/src/config/configuration.ts | 33 +- apps/admin-api/src/config/cookieOption.ts | 4 + apps/admin-api/src/course/course.graphql | 160 - apps/admin-api/src/generate-typings.ts | 1 + apps/admin-api/src/graphql.ts | 180 +- apps/admin-api/src/main.ts | 6 +- apps/admin-api/src/override/override.graphql | 28 +- .../admin-api/src/override/override.module.ts | 5 +- .../src/override/override.resolver.ts | 17 +- .../src/override/override.service.ts | 45 +- apps/admin-api/src/review/review.cron.ts | 45 - apps/admin-api/src/review/review.graphql | 1 + apps/admin-api/src/review/review.module.ts | 8 +- apps/admin-api/src/review/review.resolver.ts | 39 +- apps/admin-api/src/review/review.service.ts | 222 +- apps/admin-api/src/schemas/override.schema.ts | 33 - apps/admin-api/src/schemas/review.schema.ts | 62 - apps/admin-api/tsconfig.json | 2 +- apps/admin-web/.env | 23 + apps/admin-web/.env.beta | 23 + apps/admin-web/.env.dev | 23 + apps/admin-web/.env.local | 29 - apps/admin-web/.env.prod | 23 + apps/admin-web/Dockerfile | 70 + apps/admin-web/README.md | 6 +- apps/admin-web/package.json | 3 + apps/admin-web/public/GetRegLogo.png | Bin 0 -> 4742 bytes apps/admin-web/src/common/Layout/index.tsx | 24 + apps/admin-web/src/common/Layout/styled.ts | 8 + .../src/common/LogoutButton/index.tsx | 13 + .../src/common/LogoutButton/styled.tsx | 19 + .../Sidebar/components/SectionLink/index.tsx | 25 + .../Sidebar/components/SectionLink/styled.ts | 15 + .../Sidebar/components/singleLink/index.tsx | 47 + .../components/singleLink/styled.ts | 0 apps/admin-web/src/common/Sidebar/index.tsx | 22 + .../src/common/Sidebar/linkConstant.ts | 26 + .../{Topbar => Sidebar}/style.module.css | 0 apps/admin-web/src/common/Sidebar/styled.ts | 25 + apps/admin-web/src/common/Topbar/Topbar.tsx | 23 - .../Topbar/components/singleLink/index.tsx | 19 - apps/admin-web/src/common/Topbar/styled.ts | 6 - apps/admin-web/src/common/deepAssign/index.ts | 17 + apps/admin-web/src/common/types/UserDto.ts | 5 + apps/admin-web/src/config/theme/index.ts | 17 +- apps/admin-web/src/config/theme/palette.ts | 87 + apps/admin-web/src/config/toastConfig.ts | 16 + apps/admin-web/src/context/AppProvider.tsx | 18 +- apps/admin-web/src/context/AuthProvider.tsx | 44 + .../admin-web/src/context/ProtectedRoutes.tsx | 44 + apps/admin-web/src/env/index.ts | 2 - apps/admin-web/src/hooks/useFetchData.tsx | 13 + .../genEd/components/AddGenEdDialog/index.tsx | 73 + .../components/AddGenEdDialog/styled.tsx | 16 + .../src/module/genEd/components/GenEdList.tsx | 37 + .../genEd/components/GenEdTableHeader.tsx | 14 + .../genEd/components/SingleGenEd/index.tsx | 76 + .../genEd/components/SingleGenEd/styled.tsx | 13 + .../module/genEd/components/Topbar/index.tsx | 50 + .../module/genEd/components/Topbar/styled.tsx | 57 + .../src/module/genEd/components/genEdList.tsx | 43 - .../module/genEd/components/singleGenEd.tsx | 25 - apps/admin-web/src/module/genEd/index.tsx | 33 +- apps/admin-web/src/module/genEd/styled.tsx | 18 + .../src/module/generateToken/index.tsx | 45 + .../src/module/generateToken/styled.ts | 9 + .../Topbar/components/SelectForm/index.tsx | 39 + .../Topbar/components/SelectForm/styled.tsx | 13 + .../components/Topbar/index.tsx | 21 + .../components/Topbar/styled.tsx | 37 + .../components/pendingReviewHeader.tsx | 76 + .../components/pendingReviewList.tsx | 32 - .../components/singlePendingReview.tsx | 155 +- .../src/module/pendingReviews/index.tsx | 29 +- .../genEd/{index.tsx => [[...slug]].tsx} | 0 .../src/pages/generateToken/index.tsx | 1 + apps/admin-web/src/pages/index.tsx | 2 +- apps/admin-web/src/pages/login.tsx | 26 + apps/admin-web/src/services/apollo/index.ts | 8 + apps/admin-web/src/styles/globals.css | 4 + apps/admin-web/src/utils/authAxios.ts | 6 + packages/codegen/src/generated/index.tsx | 86 + packages/codegen/src/query/override.graphql | 6 + packages/codegen/src/query/review.graphql | 4 + packages/project-config/eslint/base.js | 1 + pnpm-lock.yaml | 3130 ++++------------- 105 files changed, 2918 insertions(+), 3314 deletions(-) create mode 100644 apps/admin-api/.gitignore delete mode 100644 apps/admin-api/.prettierignore create mode 100644 apps/admin-api/Dockerfile create mode 100644 apps/admin-api/src/auth/auth.controller.ts create mode 100644 apps/admin-api/src/auth/auth.dto.ts create mode 100644 apps/admin-api/src/auth/auth.guard.ts create mode 100644 apps/admin-api/src/auth/auth.module.ts create mode 100644 apps/admin-api/src/auth/auth.service.ts create mode 100644 apps/admin-api/src/auth/oidc.guard.ts create mode 100644 apps/admin-api/src/common/decorators/SkipAuth.ts create mode 100644 apps/admin-api/src/common/errors/BadRequestError.ts create mode 100644 apps/admin-api/src/common/errors/NotFoundError.ts create mode 100644 apps/admin-api/src/common/errors/index.ts create mode 100644 apps/admin-api/src/config/cookieOption.ts delete mode 100644 apps/admin-api/src/course/course.graphql delete mode 100644 apps/admin-api/src/review/review.cron.ts delete mode 100644 apps/admin-api/src/schemas/override.schema.ts delete mode 100644 apps/admin-api/src/schemas/review.schema.ts create mode 100644 apps/admin-web/.env create mode 100644 apps/admin-web/.env.beta create mode 100644 apps/admin-web/.env.dev delete mode 100644 apps/admin-web/.env.local create mode 100644 apps/admin-web/.env.prod create mode 100644 apps/admin-web/Dockerfile create mode 100644 apps/admin-web/public/GetRegLogo.png create mode 100644 apps/admin-web/src/common/Layout/index.tsx create mode 100644 apps/admin-web/src/common/Layout/styled.ts create mode 100644 apps/admin-web/src/common/LogoutButton/index.tsx create mode 100644 apps/admin-web/src/common/LogoutButton/styled.tsx create mode 100644 apps/admin-web/src/common/Sidebar/components/SectionLink/index.tsx create mode 100644 apps/admin-web/src/common/Sidebar/components/SectionLink/styled.ts create mode 100644 apps/admin-web/src/common/Sidebar/components/singleLink/index.tsx rename apps/admin-web/src/common/{Topbar => Sidebar}/components/singleLink/styled.ts (100%) create mode 100644 apps/admin-web/src/common/Sidebar/index.tsx create mode 100644 apps/admin-web/src/common/Sidebar/linkConstant.ts rename apps/admin-web/src/common/{Topbar => Sidebar}/style.module.css (100%) create mode 100644 apps/admin-web/src/common/Sidebar/styled.ts delete mode 100644 apps/admin-web/src/common/Topbar/Topbar.tsx delete mode 100644 apps/admin-web/src/common/Topbar/components/singleLink/index.tsx delete mode 100644 apps/admin-web/src/common/Topbar/styled.ts create mode 100644 apps/admin-web/src/common/deepAssign/index.ts create mode 100644 apps/admin-web/src/common/types/UserDto.ts create mode 100644 apps/admin-web/src/config/theme/palette.ts create mode 100644 apps/admin-web/src/config/toastConfig.ts create mode 100644 apps/admin-web/src/context/AuthProvider.tsx create mode 100644 apps/admin-web/src/context/ProtectedRoutes.tsx create mode 100644 apps/admin-web/src/hooks/useFetchData.tsx create mode 100644 apps/admin-web/src/module/genEd/components/AddGenEdDialog/index.tsx create mode 100644 apps/admin-web/src/module/genEd/components/AddGenEdDialog/styled.tsx create mode 100644 apps/admin-web/src/module/genEd/components/GenEdList.tsx create mode 100644 apps/admin-web/src/module/genEd/components/GenEdTableHeader.tsx create mode 100644 apps/admin-web/src/module/genEd/components/SingleGenEd/index.tsx create mode 100644 apps/admin-web/src/module/genEd/components/SingleGenEd/styled.tsx create mode 100644 apps/admin-web/src/module/genEd/components/Topbar/index.tsx create mode 100644 apps/admin-web/src/module/genEd/components/Topbar/styled.tsx delete mode 100644 apps/admin-web/src/module/genEd/components/genEdList.tsx delete mode 100644 apps/admin-web/src/module/genEd/components/singleGenEd.tsx create mode 100644 apps/admin-web/src/module/genEd/styled.tsx create mode 100644 apps/admin-web/src/module/generateToken/index.tsx create mode 100644 apps/admin-web/src/module/generateToken/styled.ts create mode 100644 apps/admin-web/src/module/pendingReviews/components/Topbar/components/SelectForm/index.tsx create mode 100644 apps/admin-web/src/module/pendingReviews/components/Topbar/components/SelectForm/styled.tsx create mode 100644 apps/admin-web/src/module/pendingReviews/components/Topbar/index.tsx create mode 100644 apps/admin-web/src/module/pendingReviews/components/Topbar/styled.tsx create mode 100644 apps/admin-web/src/module/pendingReviews/components/pendingReviewHeader.tsx delete mode 100644 apps/admin-web/src/module/pendingReviews/components/pendingReviewList.tsx rename apps/admin-web/src/pages/genEd/{index.tsx => [[...slug]].tsx} (100%) create mode 100644 apps/admin-web/src/pages/generateToken/index.tsx create mode 100644 apps/admin-web/src/pages/login.tsx create mode 100644 apps/admin-web/src/utils/authAxios.ts diff --git a/.dockerignore b/.dockerignore index 4ec3f3b51..7e9a25ad8 100644 --- a/.dockerignore +++ b/.dockerignore @@ -32,3 +32,5 @@ Dockerfile # turbo cache .turbo **/.turbo + +volumes/ \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index 614b2bd35..386fe60f1 100644 --- a/.prettierignore +++ b/.prettierignore @@ -9,5 +9,6 @@ pnpm-lock.yaml # Generate files +apps/admin-api/src/graphql.ts apps/api/src/graphql.ts packages/codegen/src/generated/**/* diff --git a/apps/admin-api/.env.template b/apps/admin-api/.env.template index e7f24bac8..9d9a96b33 100644 --- a/apps/admin-api/.env.template +++ b/apps/admin-api/.env.template @@ -5,9 +5,16 @@ ENV=development GOOGLE_OAUTH_ID= GOOGLE_OAUTH_SECRET= +CLIENT_ID= +CLIENT_SECRET= +AUTHORIZATION_URL= +TOKEN_URL= +USERINFO_URL= +REDIRECT_URI= +CORS_ORIGIN= JWT_SECRET= -ADMIN_TOKEN= - DASHBOARD_URL=https://appsmith.internal.cugetreg.com/applications/6155d8914a99086ac822a925/pages/61b73ebe0599052fee9c8295 +# don't forget /slack suffix if using discord webhook url +SLACK_WEBHOOK_URL=https://discord.com/api/webhooks/xxxx/xxxx/slack diff --git a/apps/admin-api/.gitignore b/apps/admin-api/.gitignore new file mode 100644 index 000000000..061970070 --- /dev/null +++ b/apps/admin-api/.gitignore @@ -0,0 +1,11 @@ +# ENV files +.env.local + +.env.development +.env.production +.env.local.development +.env.local.production + +generate-typings.js + +dist diff --git a/apps/admin-api/.prettierignore b/apps/admin-api/.prettierignore deleted file mode 100644 index c0cc143f8..000000000 --- a/apps/admin-api/.prettierignore +++ /dev/null @@ -1 +0,0 @@ -src/graphql.ts \ No newline at end of file diff --git a/apps/admin-api/Dockerfile b/apps/admin-api/Dockerfile new file mode 100644 index 000000000..fc4b77fce --- /dev/null +++ b/apps/admin-api/Dockerfile @@ -0,0 +1,45 @@ +# When copying this Dockerfile for use in other apps, don't forget to change the scope (api, web, etc.) in RUN commands + +FROM node:18-alpine AS pnpm +# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. +RUN apk add --no-cache libc6-compat +RUN apk update + +ENV PNPM_HOME="/root/.local/share/pnpm" +ENV PATH="${PATH}:${PNPM_HOME}" +RUN npm install -g pnpm + +# -------------------------------------------------------- + +FROM pnpm AS pruner +WORKDIR /app +RUN pnpm install -g turbo +COPY . . +RUN turbo prune --scope=admin-api --docker + +# -------------------------------------------------------- + +FROM pnpm AS builder +WORKDIR /app + +COPY --from=pruner /app/out/json/ . +COPY --from=pruner /app/out/pnpm-lock.yaml ./pnpm-lock.yaml +RUN pnpm install --frozen-lockfile + +COPY --from=pruner /app/out/full/ . +COPY turbo.json turbo.json +RUN pnpm turbo build --filter=admin-api... + +# -------------------------------------------------------- + +FROM pnpm AS runner +WORKDIR /app + +COPY --from=pruner /app/out/json/ . +COPY --from=pruner /app/out/pnpm-lock.yaml ./pnpm-lock.yaml +RUN pnpm install --frozen-lockfile --production + +COPY --from=builder /app/apps/admin-api/dist/ apps/admin-api/dist/ +COPY --from=builder /app/packages/ packages/ + +CMD node apps/admin-api/dist/main.js diff --git a/apps/admin-api/package.json b/apps/admin-api/package.json index 24d8fcfbd..9bc71c932 100644 --- a/apps/admin-api/package.json +++ b/apps/admin-api/package.json @@ -14,23 +14,30 @@ "prebuild": "rimraf dist" }, "dependencies": { + "@apollo/server": "^4.7.1", + "@cgr/schema": "workspace:*", + "@nestjs/apollo": "^11.0.5", + "@nestjs/axios": "^2.0.0", "@nestjs/cli": "^9.0.0", "@nestjs/common": "9.4.0", "@nestjs/config": "2.2.0", "@nestjs/core": "9.4.0", - "@nestjs/graphql": "7.9.8", + "@nestjs/graphql": "11.0.5", + "@nestjs/jwt": "7.2.0", "@nestjs/mongoose": "9.2.1", "@nestjs/platform-express": "9.4.0", "@nestjs/schedule": "2.1.0", "@slack/webhook": "6.0.0", - "@thinc-org/chula-courses": "^2.3.0", + "axios": "0.23.0", "class-transformer": "0.3.1", "class-validator": "0.14.0", - "graphql": "15.5.0", + "cookie-parser": "1.4.6", + "graphql": "16.6.0", "mongoose": "6.12.0", "rxjs": "^7.8.0" }, "devDependencies": { + "@types/cookie-parser": "^1.4.3", "@types/express": "^4.17.16", "@types/jest": "28.1.8", "@types/node": "^18.11.18", diff --git a/apps/admin-api/src/app/app.controller.ts b/apps/admin-api/src/app/app.controller.ts index d222891c9..2f3cc3564 100644 --- a/apps/admin-api/src/app/app.controller.ts +++ b/apps/admin-api/src/app/app.controller.ts @@ -1,13 +1,31 @@ -import { Controller, Get } from '@nestjs/common' +import { Controller, Get, Req, UnauthorizedException, UseGuards } from '@nestjs/common' +import { Query } from '@nestjs/graphql' + +import { Request } from 'express' + +import { AuthService } from '@admin-api/auth/auth.service' +import { JwtAuthGuard } from '@admin-api/auth/oidc.guard' import { AppService } from './app.service' @Controller() export class AppController { - constructor(private readonly appService: AppService) {} + constructor(private readonly appService: AppService, private readonly authService: AuthService) {} @Get() getHello(): string { return this.appService.getHello() } + + @Query('me') + @UseGuards(JwtAuthGuard) + async getMe(@Req() req: Request) { + if (!req.cookies['accessToken']) { + throw new UnauthorizedException('No access token') + } + + return { + success: true, + } + } } diff --git a/apps/admin-api/src/app/app.module.ts b/apps/admin-api/src/app/app.module.ts index 6c39388dd..2039315d2 100644 --- a/apps/admin-api/src/app/app.module.ts +++ b/apps/admin-api/src/app/app.module.ts @@ -1,3 +1,4 @@ +import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo' import { Module } from '@nestjs/common' import { ConfigModule, ConfigService } from '@nestjs/config' import { GraphQLModule } from '@nestjs/graphql' @@ -7,6 +8,7 @@ import { ScheduleModule } from '@nestjs/schedule' import { GraphQLError } from 'graphql' import { join } from 'path' +import { AuthModule } from '@admin-api/auth/auth.module' import { OverrideModule } from '@admin-api/override/override.module' import { GraphQLExpressContext } from '../common/types/context.type' @@ -22,32 +24,43 @@ import { AppService } from './app.service' load: [configuration], envFilePath: ['.env', '.env.local'], }), - GraphQLModule.forRootAsync({ + GraphQLModule.forRootAsync({ + driver: ApolloDriver, useFactory: (configService: ConfigService) => ({ // needed in production, to make apollo server work typePaths: [join(__dirname, '/../**/*.graphql')], - definitions: { - path: join(process.cwd(), 'src/graphql.ts'), - outputAs: 'class', - }, + definitions: + configService.get('env') === 'development' + ? { + path: join(__dirname, '../graphql.ts'), + outputAs: 'class', + enumsAsTypes: true, + } + : null, playground: true, introspection: true, cors: { origin: configService.get('origin'), + credentials: true, }, path: '/_api/graphql', context: ({ req, res }: GraphQLExpressContext) => ({ req, res }), - formatError: (error: GraphQLError) => { - const graphQLFormattedError = { - message: error?.extensions?.exception?.response?.message || error.message, - path: error.path, - locations: error.locations, - reason: error?.extensions?.exception?.response?.reason, - status: error?.extensions?.exception?.status, - exception: error?.extensions?.exception, + formatError: (formattedError, error: unknown) => { + if (error instanceof GraphQLError) { + const graphQLFormattedError = { + message: error.message, + path: error.path, + locations: error.locations, + extensions: { + code: error?.extensions?.code, + }, + } + return graphQLFormattedError } - return graphQLFormattedError + return formattedError }, + includeStacktraceInErrorResponses: false, + allowBatchedHttpRequests: true, }), inject: [ConfigService], }), @@ -61,6 +74,7 @@ import { AppService } from './app.service' ReviewModule, OverrideModule, ScheduleModule.forRoot(), + AuthModule, ], controllers: [AppController], providers: [AppService], diff --git a/apps/admin-api/src/auth/auth.controller.ts b/apps/admin-api/src/auth/auth.controller.ts new file mode 100644 index 000000000..d089394ca --- /dev/null +++ b/apps/admin-api/src/auth/auth.controller.ts @@ -0,0 +1,79 @@ +import { BadRequestException, Controller, Get, Logger, Post, Query, Req, Res } from '@nestjs/common' + +import { Request, Response } from 'express' + +import { SkipAuth } from '@admin-api/common/decorators/SkipAuth' +import { accessTokenCookieOption } from '@admin-api/config/cookieOption' + +import { AuthService } from './auth.service' + +@Controller('auth') +export class AuthController { + logger: Logger + constructor(private readonly authService: AuthService) { + this.logger = new Logger('Auth Controller') + } + + @Get() + @SkipAuth() + async sayHello() { + return 'Hello' + } + + @Get('/validateCode') + @SkipAuth() + async auth(@Query() query, @Res() res: Response) { + if (!query.code) { + throw new BadRequestException('authentication code is required') + } + + const payload = await this.authService.verifyAuthenticationCode(query.code) + + if (!payload || !payload.id_token) { + throw new BadRequestException('Authentication code is invalid') + } + + const id_token = payload.id_token + + const userInfo = await this.authService.validateIdToken(id_token) + + if (!userInfo) { + throw new BadRequestException('Invalid Id token') + } + + try { + const access_token = await this.authService.issueAccessToken(userInfo) + + this.setCookie(res, 'access_token', access_token) + + return res.status(200).json({ message: 'Validate code successfully' }) + } catch (err) { + this.logger.error( + 'Error occurs in validating code (could be issue access token or setting cookie)' + ) + return res.status(400).json({ message: 'Something went wrong' }) + } + } + + // TODO: Test this route + @Get('/logout') + async logout(@Req() req: Request, @Res() res: Response) { + this.logger.log(`User: ${req['user'].name} is logging out`) + res.clearCookie('access_token', accessTokenCookieOption) + return res.status(200).json({ message: 'Logout successfully' }) + } + + @Get('me') + async getUserInfo(@Req() req: Request, @Res() res: Response) { + this.logger.log(`User: ${req['user'].name}`) + return res.json(req['user']) + } + + // TODO: lessen expiry + private setCookie(res: Response, name: string, value: string, maxAge = 1000 * 60 * 60 * 24 * 30) { + res.cookie(name, value, { + maxAge, + ...accessTokenCookieOption, + }) + } +} diff --git a/apps/admin-api/src/auth/auth.dto.ts b/apps/admin-api/src/auth/auth.dto.ts new file mode 100644 index 000000000..a19a861d0 --- /dev/null +++ b/apps/admin-api/src/auth/auth.dto.ts @@ -0,0 +1,18 @@ +export type AccessTokenPayload = { + _id: string +} + +export type TokenUrlResponse = { + data: { + access_token: string + id_token: string + } +} + +export type UserInfoDto = { + email: string + name: string + groups: string[] + exp: string + iat: string +} diff --git a/apps/admin-api/src/auth/auth.guard.ts b/apps/admin-api/src/auth/auth.guard.ts new file mode 100644 index 000000000..e6607c401 --- /dev/null +++ b/apps/admin-api/src/auth/auth.guard.ts @@ -0,0 +1,43 @@ +import { CanActivate, ExecutionContext, Injectable, UnauthorizedException } from '@nestjs/common' +import { Reflector } from '@nestjs/core' +import { GqlExecutionContext } from '@nestjs/graphql' +import { JwtService } from '@nestjs/jwt' + +import { Request } from 'express' + +import { SKIP_AUTH } from '@admin-api/common/decorators/SkipAuth' + +@Injectable() +export class AuthGuard implements CanActivate { + constructor(private jwtService: JwtService, private reflector: Reflector) {} + + async canActivate(context: ExecutionContext): Promise { + const ctx = GqlExecutionContext.create(context) + const isSkippedAuth = this.reflector.getAllAndOverride(SKIP_AUTH, [ + ctx.getHandler(), + ctx.getClass(), + ]) + if (isSkippedAuth) return true + + if (!ctx.getContext()?.req) throw new UnauthorizedException("Can't find request object") + const request = ctx.getContext()?.req + + const token = this.extractTokenFromCookie(request) + try { + const payload = await this.jwtService.verifyAsync(token) + // 💡 We're assigning the payload to the request object here + // so that we can access it in our route handlers + request['user'] = payload + } catch { + throw new UnauthorizedException("Can't verify access token") + } + return true + } + + private extractTokenFromCookie(request: Request): string | undefined { + if (!request.cookies || !request.cookies['access_token']) + throw new UnauthorizedException("Can't find cookie or access token in cookie") + const token = request.cookies['access_token'] + return token + } +} diff --git a/apps/admin-api/src/auth/auth.module.ts b/apps/admin-api/src/auth/auth.module.ts new file mode 100644 index 000000000..b93cb0e54 --- /dev/null +++ b/apps/admin-api/src/auth/auth.module.ts @@ -0,0 +1,26 @@ +import { Module } from '@nestjs/common' +import { ConfigService } from '@nestjs/config' +import { APP_GUARD } from '@nestjs/core' +import { JwtModule } from '@nestjs/jwt' + +import { AuthController } from './auth.controller' +import { AuthGuard } from './auth.guard' +import { AuthService } from './auth.service' + +@Module({ + imports: [ + JwtModule.registerAsync({ + useFactory: async (configService: ConfigService) => ({ + secret: configService.get('jwtSecret'), + signOptions: { + expiresIn: '30days', + }, + }), + inject: [ConfigService], + }), + ], + providers: [AuthService, { provide: APP_GUARD, useClass: AuthGuard }], + controllers: [AuthController], + exports: [AuthService], +}) +export class AuthModule {} diff --git a/apps/admin-api/src/auth/auth.service.ts b/apps/admin-api/src/auth/auth.service.ts new file mode 100644 index 000000000..af6f6333b --- /dev/null +++ b/apps/admin-api/src/auth/auth.service.ts @@ -0,0 +1,69 @@ +import { BadRequestException, Injectable, Logger } from '@nestjs/common' +import { ConfigService } from '@nestjs/config' +import { JwtService } from '@nestjs/jwt' + +import axios, { AxiosRequestConfig } from 'axios' + +import { TokenUrlResponse, UserInfoDto } from './auth.dto' + +@Injectable() +export class AuthService { + logger: Logger + + constructor(private configService: ConfigService, private jwtService: JwtService) { + this.logger = new Logger('Auth Service') + } + + async verifyAuthenticationCode(authenticationCode: string) { + const config: AxiosRequestConfig = { + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + } + + const reqBody = new URLSearchParams({ + code: authenticationCode, + client_id: this.configService.get('clientId'), + client_secret: this.configService.get('clientSecret'), + redirect_uri: this.configService.get('redirectUrl'), + grant_type: 'authorization_code', + }) + + try { + const response = (await axios.post( + this.configService.get('tokenUrl'), + reqBody.toString(), + config + )) as TokenUrlResponse + + return { + id_token: response.data?.id_token, + access_token: response.data?.access_token, + } + } catch (err) { + return null + } + } + + async validateIdToken(idToken: string) { + try { + const userInfo = this.jwtService.decode(idToken) as UserInfoDto + + if (!userInfo || !userInfo.groups) throw new Error("User is null or User doesn't have groups") + + // TODO: Check if user is in cugetreg group + const payload = { + email: userInfo.email, + name: userInfo.name, + groups: userInfo.groups, + } as UserInfoDto + + return payload + } catch (e) { + return null + } + } + + async issueAccessToken(userInfo: UserInfoDto): Promise { + this.logger.log(`Issued access token for: ${userInfo.name}`) + return this.jwtService.sign(userInfo) + } +} diff --git a/apps/admin-api/src/auth/oidc.guard.ts b/apps/admin-api/src/auth/oidc.guard.ts new file mode 100644 index 000000000..2caac9f2f --- /dev/null +++ b/apps/admin-api/src/auth/oidc.guard.ts @@ -0,0 +1,10 @@ +import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common' +import { GqlExecutionContext } from '@nestjs/graphql' + +@Injectable() +export class JwtAuthGuard implements CanActivate { + canActivate(context: ExecutionContext): Promise { + const ctx = GqlExecutionContext.create(context) + return ctx.getContext().req + } +} diff --git a/apps/admin-api/src/common/decorators/SkipAuth.ts b/apps/admin-api/src/common/decorators/SkipAuth.ts new file mode 100644 index 000000000..04cef81e4 --- /dev/null +++ b/apps/admin-api/src/common/decorators/SkipAuth.ts @@ -0,0 +1,4 @@ +import { SetMetadata } from '@nestjs/common' + +export const SKIP_AUTH = 'isSkippedAuth' +export const SkipAuth = () => SetMetadata(SKIP_AUTH, true) diff --git a/apps/admin-api/src/common/errors/BadRequestError.ts b/apps/admin-api/src/common/errors/BadRequestError.ts new file mode 100644 index 000000000..e100fa6a7 --- /dev/null +++ b/apps/admin-api/src/common/errors/BadRequestError.ts @@ -0,0 +1,11 @@ +import { GraphQLError } from 'graphql' + +export class BadRequestError extends GraphQLError { + constructor(message: string) { + super(message, { + extensions: { + code: 'BAD_REQUEST', + }, + }) + } +} diff --git a/apps/admin-api/src/common/errors/NotFoundError.ts b/apps/admin-api/src/common/errors/NotFoundError.ts new file mode 100644 index 000000000..dc83eb0a5 --- /dev/null +++ b/apps/admin-api/src/common/errors/NotFoundError.ts @@ -0,0 +1,11 @@ +import { GraphQLError } from 'graphql' + +export class NotFoundError extends GraphQLError { + constructor(message: string) { + super(message, { + extensions: { + code: 'NOT_FOUND', + }, + }) + } +} diff --git a/apps/admin-api/src/common/errors/index.ts b/apps/admin-api/src/common/errors/index.ts new file mode 100644 index 000000000..0e3f2d186 --- /dev/null +++ b/apps/admin-api/src/common/errors/index.ts @@ -0,0 +1,2 @@ +export * from './BadRequestError' +export * from './NotFoundError' diff --git a/apps/admin-api/src/config/configuration.ts b/apps/admin-api/src/config/configuration.ts index 8379c375c..f8d337953 100644 --- a/apps/admin-api/src/config/configuration.ts +++ b/apps/admin-api/src/config/configuration.ts @@ -5,31 +5,48 @@ export interface Configuration { mongoURI: string port: number origin: string - googleOAuthId: string - googleOAuthSecret: string + // TODO: add "authentik" prefix to these variables + clientId: string + clientSecret: string + // TODO: merge authorizationUrl, tokenUrl, and userInfoUrl into one url with different paths? + authorizationUrl: string + tokenUrl: string + userInfoUrl: string + redirectUrl: string jwtSecret: string - adminToken: string clientLoggerUrl: string dashBoardUrl: string env: string + slackWebhookUrl?: string } export const configuration = (): Configuration => { return { - mongoURI: process.env.MONGO_URI || 'mongodb://localhost:27017/cugetreg', + mongoURI: process.env.MONGO_URI || 'mongodb://127.0.0.1:27017/cugetreg', port: parseInt(process.env.PORT, 10) || 3333, origin: process.env.CORS_ORIGIN || '*', - googleOAuthId: process.env.GOOGLE_OAUTH_ID, - googleOAuthSecret: process.env.GOOGLE_OAUTH_SECRET, + clientId: process.env.CLIENT_ID, + clientSecret: process.env.CLIENT_SECRET, + authorizationUrl: process.env.AUTHORIZATION_URL, + tokenUrl: process.env.TOKEN_URL, + userInfoUrl: process.env.USERINFO_URL, + redirectUrl: process.env.REDIRECT_URL || 'localhost:4201', jwtSecret: process.env.JWT_SECRET, - adminToken: process.env.ADMIN_TOKEN, clientLoggerUrl: process.env.CLIENT_LOGGER_URL, dashBoardUrl: process.env.DASHBOARD_URL, env: process.env.ENV || 'development', + slackWebhookUrl: process.env.SLACK_WEBHOOK_URL, } } -const requiredConfigs = ['googleOAuthId', 'googleOAuthSecret', 'jwtSecret', 'adminToken'] +const requiredConfigs = [ + 'clientId', + 'clientSecret', + 'tokenUrl', + 'userInfoUrl', + 'redirectUrl', + 'jwtSecret', +] export function validateConfig(configService: ConfigService): void { const logger = new Logger('ConfigService') diff --git a/apps/admin-api/src/config/cookieOption.ts b/apps/admin-api/src/config/cookieOption.ts new file mode 100644 index 000000000..234acc992 --- /dev/null +++ b/apps/admin-api/src/config/cookieOption.ts @@ -0,0 +1,4 @@ +export const accessTokenCookieOption = { + httpOnly: true, + secure: true, +} diff --git a/apps/admin-api/src/course/course.graphql b/apps/admin-api/src/course/course.graphql deleted file mode 100644 index 33215469d..000000000 --- a/apps/admin-api/src/course/course.graphql +++ /dev/null @@ -1,160 +0,0 @@ -""" -Pair of start and end time. Format is `HH:MM`. -""" -type Period { - start: String! - end: String! -} - -""" -Pair of exam date and period. -""" -type ExamPeriod { - """ - Date of the exam. The value is formatted as ISO8601 representation: `YYYY-MM-DDT00:00:00.000Z`. - """ - date: String! - period: Period! -} - -type Capacity { - current: Int! - max: Int! -} - -type Class { - type: String! - dayOfWeek: DayOfWeek - period: Period - building: String - room: String - teachers: [String!]! -} - -type Section { - sectionNo: String! - closed: Boolean! - capacity: Capacity! - note: String - classes: [Class!]! - """ - `GenEdType` of this section. If this section is not a GenEd section, the value will be `NO`. - """ - genEdType: GenEdType! -} - -type Course { - # General info - studyProgram: StudyProgram! - semester: String! - academicYear: String! - - # Course info - courseNo: String! - courseDescTh: String - courseDescEn: String - abbrName: String! - courseNameTh: String! - courseNameEn: String! - faculty: String! - department: String! - credit: Float! - creditHours: String! - courseCondition: String! - """ - `GenEdType` of this course. If this course is not a GenEd course, the value will be `NO`. - """ - genEdType: GenEdType! - - # Exam - midterm: ExamPeriod - final: ExamPeriod - - # Section - sections: [Section!]! - - # Rating - rating: String - - # Deprecated - courseDesc: String @deprecated(reason: "Use courseDescTh or courseDescEn instead") -} -""" -Filter for searching courses that have class inside the given time period. -""" -input PeriodRangeInput { - start: String! - end: String! -} -""" -Filters for searching courses. If a filter is not specified, it will not be used in the search. -""" -input FilterInput { - """ - Keyword to search for courses. This filter is passed IF any of `courseNo`, `abbrName`, - `courseNameTh`, or `courseNameEn` contains the keyword as a substring (except for `courseNo` - which checks if value **starts with** the keyword). - """ - keyword: String - - """ - List of `GenEdTypes`. This filter is passed IF the course's `genEdType` matches ANY of the `genEdTypes` in the list. - """ - genEdTypes: [GenEdType!] - - """ - List of `DayOfWeeks`. This filter is passed IF ANY of the course's sections have class in ANY of the `dayOfWeeks` in the list. - """ - dayOfWeeks: [DayOfWeek!] - - """ - Range of the classes' period. This filter is passed IF ANY of the course's sections - have class that intersects with the `periodRange`. - """ - periodRange: PeriodRangeInput - - """ - Number of courses to return in this query. Used for pagination. - """ - limit: Int - - """ - Number of courses to skip through. Used for pagination. - """ - offset: Int -} - -""" -Combination of `semester`, `academicYear`, and `studyProgram`. Used to differentiate courses between time periods and program. -""" -input CourseGroupInput { - semester: String! - academicYear: String! - studyProgram: StudyProgram! -} - -""" -List of all course nos. in all `studyPrograms`. -""" -type CourseNosOutput { - S: [String!]! - T: [String!]! - I: [String!]! -} - -type Query { - """ - Returns a list of all course nos. - """ - courseNos: CourseNosOutput - - """ - Find a course and returns it - """ - course(courseNo: String!, courseGroup: CourseGroupInput!): Course! - - """ - Search courses using the given course filters. Supports pagination with limit and offset fields in `FilterInput`. - """ - search(filter: FilterInput!, courseGroup: CourseGroupInput!): [Course!]! -} diff --git a/apps/admin-api/src/generate-typings.ts b/apps/admin-api/src/generate-typings.ts index 42b24cdd0..54d8f70d7 100644 --- a/apps/admin-api/src/generate-typings.ts +++ b/apps/admin-api/src/generate-typings.ts @@ -7,4 +7,5 @@ definitionsFactory.generate({ typePaths: [join(__dirname, '/**/*.graphql')], path: join(__dirname, '/graphql.ts'), outputAs: 'class', + enumsAsTypes: true, }) diff --git a/apps/admin-api/src/graphql.ts b/apps/admin-api/src/graphql.ts index 9dac09627..18123311a 100644 --- a/apps/admin-api/src/graphql.ts +++ b/apps/admin-api/src/graphql.ts @@ -1,78 +1,20 @@ -/** ------------------------------------------------------ +/* + * ------------------------------------------------------- * THIS FILE WAS AUTOMATICALLY GENERATED (DO NOT MODIFY) * ------------------------------------------------------- */ /* tslint:disable */ /* eslint-disable */ -export enum DayOfWeek { - MO = 'MO', - TU = 'TU', - WE = 'WE', - TH = 'TH', - FR = 'FR', - SA = 'SA', - SU = 'SU', - IA = 'IA', - AR = 'AR', -} - -export enum StudyProgram { - S = 'S', - T = 'T', - I = 'I', -} - -export enum GenEdType { - SO = 'SO', - HU = 'HU', - SC = 'SC', - IN = 'IN', - NO = 'NO', -} - -export enum ReviewInteractionType { - L = 'L', - D = 'D', -} - -export enum ReviewStatus { - APPROVED = 'APPROVED', - REJECTED = 'REJECTED', - PENDING = 'PENDING', -} - -export class PeriodRangeInput { - start: string - end: string -} - -export class FilterInput { - keyword?: string - genEdTypes?: GenEdType[] - dayOfWeeks?: DayOfWeek[] - periodRange?: PeriodRangeInput - limit?: number - offset?: number -} - -export class CourseGroupInput { - semester: string - academicYear: string - studyProgram: StudyProgram -} - -export class GenEdOverrideInput { - genEdType: GenEdType - sections: string[] -} +export type DayOfWeek = 'MO' | 'TU' | 'WE' | 'TH' | 'FR' | 'SA' | 'SU' | 'IA' | 'AR' +export type StudyProgram = 'S' | 'T' | 'I' +export type GenEdType = 'SO' | 'HU' | 'SC' | 'IN' | 'NO' +export type ReviewInteractionType = 'L' | 'D' +export type ReviewStatus = 'APPROVED' | 'REJECTED' | 'PENDING' export class OverrideInput { courseNo: string - studyProgram: StudyProgram - semester: string - academicYear: string - genEd?: GenEdOverrideInput + genEdType: GenEdType } export class CreateReviewInput { @@ -81,85 +23,22 @@ export class CreateReviewInput { semester: string academicYear: string studyProgram: StudyProgram - content?: string + content?: Nullable } export class EditReviewInput { - rating?: number - semester?: string - academicYear?: string - content?: string -} - -export class Period { - start: string - end: string -} - -export class ExamPeriod { - date: string - period: Period -} - -export class Capacity { - current: number - max: number -} - -export class Class { - type: string - dayOfWeek?: DayOfWeek - period?: Period - building?: string - room?: string - teachers: string[] -} - -export class Section { - sectionNo: string - closed: boolean - capacity: Capacity - note?: string - classes: Class[] - genEdType: GenEdType + rating?: Nullable + semester?: Nullable + academicYear?: Nullable + content?: Nullable } -export class Course { - studyProgram: StudyProgram - semester: string - academicYear: string +export class Override { courseNo: string - courseDescTh?: string - courseDescEn?: string - abbrName: string - courseNameTh: string - courseNameEn: string - faculty: string - department: string - credit: number - creditHours: string - courseCondition: string genEdType: GenEdType - midterm?: ExamPeriod - final?: ExamPeriod - sections: Section[] - rating?: string - courseDesc?: string -} - -export class CourseNosOutput { - S: string[] - T: string[] - I: string[] } export abstract class IQuery { - abstract courseNos(): CourseNosOutput | Promise - - abstract course(courseNo: string, courseGroup: CourseGroupInput): Course | Promise - - abstract search(filter: FilterInput, courseGroup: CourseGroupInput): Course[] | Promise - abstract overrides(): Override[] | Promise abstract reviews(courseNo: string, studyProgram: StudyProgram): Review[] | Promise @@ -172,26 +51,10 @@ export abstract class IQuery { abstract pendingReviews(): Review[] | Promise } -export class GenEdOverride { - genEdType: GenEdType - sections: string[] -} - -export class Override { - courseNo: string - studyProgram: StudyProgram - semester: string - academicYear: string - genEd?: GenEdOverride -} - export abstract class IMutation { abstract createOrUpdateOverride(override: OverrideInput): Override | Promise - abstract deleteOverride( - courseNo: string, - courseGroup: CourseGroupInput - ): Override | Promise + abstract deleteOverride(courseNo: string): Nullable | Promise> abstract createReview(createReviewInput: CreateReviewInput): Review | Promise @@ -207,7 +70,7 @@ export abstract class IMutation { abstract setReviewStatus( reviewId: string, status: ReviewStatus, - rejectionReason?: string + rejectionReason?: Nullable ): string | Promise } @@ -215,14 +78,17 @@ export class Review { _id: string rating: number courseNo: string + courseTitle: string semester: string academicYear: string studyProgram: StudyProgram - content?: string + content?: Nullable likeCount: number dislikeCount: number - myInteraction?: ReviewInteractionType - status?: ReviewStatus - rejectionReason?: string + myInteraction?: Nullable + status?: Nullable + rejectionReason?: Nullable isOwner: boolean } + +type Nullable = T | null diff --git a/apps/admin-api/src/main.ts b/apps/admin-api/src/main.ts index 9e46e10b6..e0ed633b1 100644 --- a/apps/admin-api/src/main.ts +++ b/apps/admin-api/src/main.ts @@ -7,6 +7,8 @@ import { ConfigService } from '@nestjs/config' import { NestFactory } from '@nestjs/core' import { NestExpressApplication } from '@nestjs/platform-express' +import cookieParser from 'cookie-parser' + import { AppModule } from './app/app.module' import { Configuration } from './config/configuration' @@ -22,9 +24,11 @@ async function bootstrap() { // Enable CORS policy const origin = configService.get('origin') - app.enableCors({ origin: origin }) + app.enableCors({ origin: origin, credentials: true }) app.set('trust proxy', 1) + app.use(cookieParser()) + // Setup application port const port = configService.get('port') || 3333 await app.listen(port, () => { diff --git a/apps/admin-api/src/override/override.graphql b/apps/admin-api/src/override/override.graphql index 24a660f3c..69b09310d 100644 --- a/apps/admin-api/src/override/override.graphql +++ b/apps/admin-api/src/override/override.graphql @@ -1,28 +1,9 @@ -""" -Overrides GenEdType for specific sections. Other sections without an override will have the value set as `NO` (Not GenEd) during scraping. -""" -type GenEdOverride { - genEdType: GenEdType! - sections: [String!]! -} - """ Course override for overriding course info from Reg Chula during course scraping. """ type Override { courseNo: String! - studyProgram: StudyProgram! - semester: String! - academicYear: String! - genEd: GenEdOverride -} - -""" -Overrides GenEdType for specific sections. Other sections without an override will have the value set as `NO` (Not GenEd) during scraping. -""" -input GenEdOverrideInput { genEdType: GenEdType! - sections: [String!]! } """ @@ -30,14 +11,11 @@ Course override for overriding course info from Reg Chula during course scraping """ input OverrideInput { courseNo: String! - studyProgram: StudyProgram! - semester: String! - academicYear: String! - genEd: GenEdOverrideInput + genEdType: GenEdType! } type Query { - overrides: [Override!]! + overrides(genEdType: GenEdType): [Override!]! } type Mutation { @@ -52,5 +30,5 @@ type Mutation { Requires admin authentication. """ - deleteOverride(courseNo: String!, courseGroup: CourseGroupInput!): Override + deleteOverride(courseNo: String!): Override } diff --git a/apps/admin-api/src/override/override.module.ts b/apps/admin-api/src/override/override.module.ts index eb26911a3..04866e722 100644 --- a/apps/admin-api/src/override/override.module.ts +++ b/apps/admin-api/src/override/override.module.ts @@ -1,12 +1,13 @@ import { Module } from '@nestjs/common' import { MongooseModule } from '@nestjs/mongoose' -import { OverrideSchema } from '../schemas/override.schema' +import { ModelName, OverrideSchema } from '@cgr/schema' + import { OverrideResolver } from './override.resolver' import { OverrideService } from './override.service' @Module({ - imports: [MongooseModule.forFeature([{ name: 'override', schema: OverrideSchema }])], + imports: [MongooseModule.forFeature([{ name: ModelName.Override, schema: OverrideSchema }])], providers: [OverrideResolver, OverrideService], exports: [OverrideService], }) diff --git a/apps/admin-api/src/override/override.resolver.ts b/apps/admin-api/src/override/override.resolver.ts index 486a993fc..00c4917f7 100644 --- a/apps/admin-api/src/override/override.resolver.ts +++ b/apps/admin-api/src/override/override.resolver.ts @@ -1,7 +1,8 @@ import { Args, Mutation, Query, Resolver } from '@nestjs/graphql' -import { CourseGroupInput, OverrideInput } from '@admin-api/graphql' -import { Override } from '@admin-api/schemas/override.schema' +import { Override as GraphQLOverride, OverrideInput } from '@admin-api/graphql' + +import { GenEdType } from '@cgr/schema' import { OverrideService } from './override.service' @@ -10,8 +11,8 @@ export class OverrideResolver { constructor(private readonly overrideService: OverrideService) {} @Query('overrides') - getOverrides(): Promise { - return this.overrideService.getOverrides() + getOverrides(@Args('genEdType') genEdType?: GenEdType): Promise { + return this.overrideService.getOverrides(genEdType) } @Mutation('createOrUpdateOverride') @@ -20,11 +21,7 @@ export class OverrideResolver { } @Mutation('deleteOverride') - deleteOverride( - @Args('courseNo') courseNo: string, - @Args('courseGroup') courseGroup: CourseGroupInput - ) { - const { studyProgram, academicYear, semester } = courseGroup - return this.overrideService.deleteOverride(courseNo, studyProgram, academicYear, semester) + deleteOverride(@Args('courseNo') courseNo: string) { + return this.overrideService.deleteOverride(courseNo) } } diff --git a/apps/admin-api/src/override/override.service.ts b/apps/admin-api/src/override/override.service.ts index 61a3eba94..ca315c743 100644 --- a/apps/admin-api/src/override/override.service.ts +++ b/apps/admin-api/src/override/override.service.ts @@ -1,11 +1,11 @@ import { Injectable } from '@nestjs/common' import { InjectModel } from '@nestjs/mongoose' -import { StudyProgram } from '@thinc-org/chula-courses' import { Model } from 'mongoose' +import { GenEdType, Override, OverrideDocument } from '@cgr/schema' + import { OverrideInput } from '../graphql' -import { Override, OverrideDocument } from '../schemas/override.schema' @Injectable() export class OverrideService { @@ -14,41 +14,30 @@ export class OverrideService { private overrideModel: Model ) {} - async getOverrides(): Promise { - const result = await this.overrideModel.find().lean() + async getOverrides(genEdType: GenEdType = null): Promise { + const query = {} + if (genEdType) query['genEdType'] = genEdType + const result = await this.overrideModel.find(query) return result } async createOrUpdateOverride(override: OverrideInput): Promise { - const result = await this.overrideModel - .findOneAndUpdate( - { - courseNo: override.courseNo, - studyProgram: override.studyProgram, - academicYear: override.academicYear, - semester: override.semester, - }, - override, - { - new: true, - upsert: true, - } - ) - .lean() + const result = await this.overrideModel.findOneAndUpdate( + { + courseNo: override.courseNo, + }, + override, + { + new: true, + upsert: true, + } + ) return result } - async deleteOverride( - courseNo: string, - studyProgram: StudyProgram, - academicYear: string, - semester: string - ): Promise { + async deleteOverride(courseNo: string): Promise { const result = await this.overrideModel.findOneAndDelete({ courseNo, - studyProgram, - academicYear, - semester, }) return result } diff --git a/apps/admin-api/src/review/review.cron.ts b/apps/admin-api/src/review/review.cron.ts deleted file mode 100644 index 01d529f1b..000000000 --- a/apps/admin-api/src/review/review.cron.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common' -import { ConfigService } from '@nestjs/config' -import { InjectModel } from '@nestjs/mongoose' -import { Cron } from '@nestjs/schedule' - -import { IncomingWebhook } from '@slack/webhook' -import { Model } from 'mongoose' - -import { ReviewStatus } from '../graphql' -import { ReviewDocument } from '../schemas/review.schema' - -@Injectable() -export class ReviewCron { - private logger = new Logger('ReviewCron') - private webhook: IncomingWebhook - - constructor( - private configService: ConfigService, - @InjectModel('review') private reviewModel: Model - ) { - const url = this.configService.get('slackWebhookUrl') - if (url) { - this.webhook = new IncomingWebhook(url) - } - } - - @Cron('0 0 19 * * *', { timeZone: 'Asia/Bangkok' }) - async alertPendingReviews() { - const env = this.configService.get('env') - if (env != 'production') { - return - } - const pendingReviewCount = await this.reviewModel.count({ - status: ReviewStatus.PENDING, - }) - if (pendingReviewCount > 0) { - this.logger.log(`There are ${pendingReviewCount} pending reviews, alerting team via Slack...`) - await this.webhook.send({ - text: `There are *${pendingReviewCount}* pending reviews. Review them now in <${this.configService.get( - 'DASHBOARD_URL' - )}|Review Dashboard>.`, - }) - } - } -} diff --git a/apps/admin-api/src/review/review.graphql b/apps/admin-api/src/review/review.graphql index 180dd136e..8c5c2c23a 100644 --- a/apps/admin-api/src/review/review.graphql +++ b/apps/admin-api/src/review/review.graphql @@ -37,6 +37,7 @@ type Review { _id: String! rating: Int! courseNo: String! + courseTitle: String! semester: String! academicYear: String! studyProgram: StudyProgram! diff --git a/apps/admin-api/src/review/review.module.ts b/apps/admin-api/src/review/review.module.ts index 80a25f627..45373e9a6 100644 --- a/apps/admin-api/src/review/review.module.ts +++ b/apps/admin-api/src/review/review.module.ts @@ -1,14 +1,14 @@ import { Module } from '@nestjs/common' import { MongooseModule } from '@nestjs/mongoose' -import { ReviewSchema } from '../schemas/review.schema' -import { ReviewCron } from './review.cron' +import { ModelName, ReviewSchema } from '@cgr/schema' + import { ReviewResolver } from './review.resolver' import { ReviewService } from './review.service' @Module({ - imports: [MongooseModule.forFeature([{ name: 'review', schema: ReviewSchema }])], - providers: [ReviewResolver, ReviewService, ReviewCron], + imports: [MongooseModule.forFeature([{ name: ModelName.Review, schema: ReviewSchema }])], + providers: [ReviewResolver, ReviewService], exports: [ReviewService], }) export class ReviewModule {} diff --git a/apps/admin-api/src/review/review.resolver.ts b/apps/admin-api/src/review/review.resolver.ts index 362766af4..0bd2cfad1 100644 --- a/apps/admin-api/src/review/review.resolver.ts +++ b/apps/admin-api/src/review/review.resolver.ts @@ -1,8 +1,8 @@ import { Args, Mutation, Query, Resolver } from '@nestjs/graphql' -import { ReviewDocument } from '@admin-api/schemas/review.schema' +import { ReviewDocument } from '@cgr/schema' -import { Review, ReviewStatus } from '../graphql' +import { Review as GraphQLReview, ReviewStatus } from '../graphql' import { ReviewService } from './review.service' @Resolver('Review') @@ -10,13 +10,15 @@ export class ReviewResolver { constructor(private readonly reviewService: ReviewService) {} @Query('reviews') - async getReviews(): Promise { - return this.reviewService.getReviews() + async getReviews(): Promise { + const reviews = await this.reviewService.getReviews() + return reviews.map((review) => this.toGraphQLReview(review)) } @Query('pendingReviews') - async getPending(): Promise { - return this.reviewService.getPending() + async getPending(): Promise { + const reviews = await this.reviewService.getPending() + return reviews.map((review) => this.toGraphQLReview(review)) } @Mutation('setReviewStatus') @@ -25,6 +27,29 @@ export class ReviewResolver { @Args('status') status: ReviewStatus, @Args('rejectionReason') rejectionReason?: string ): Promise { - return this.reviewService.setStatus(reviewId, status, rejectionReason) + return await this.reviewService.setStatus(reviewId, status, rejectionReason) + } + + private toGraphQLReview(rawReview: ReviewDocument): GraphQLReview { + const likeCount = rawReview.interactions.filter( + (interaction) => interaction.type === 'L' + ).length + const dislikeCount = rawReview.interactions.length - likeCount + return { + _id: rawReview._id.toString(), + rating: rawReview.rating, + courseNo: rawReview.courseNo, + courseTitle: 'demo', + semester: rawReview.semester, + academicYear: rawReview.academicYear, + studyProgram: rawReview.studyProgram, + content: rawReview.content, + likeCount: likeCount, + dislikeCount: dislikeCount, + myInteraction: null, // null because admin can't match owner + status: rawReview.status, + rejectionReason: rawReview.rejectionReason, + isOwner: false, // null because admin can't match owner + } } } diff --git a/apps/admin-api/src/review/review.service.ts b/apps/admin-api/src/review/review.service.ts index 84a964dd4..e4153c4da 100644 --- a/apps/admin-api/src/review/review.service.ts +++ b/apps/admin-api/src/review/review.service.ts @@ -1,38 +1,180 @@ -import { BadRequestException, Injectable, NotFoundException } from '@nestjs/common' +import { UserInputError } from '@nestjs/apollo' +import { Injectable, Logger } from '@nestjs/common' +import { ConfigService } from '@nestjs/config' import { InjectModel } from '@nestjs/mongoose' -import { Model } from 'mongoose' +import { IncomingWebhook } from '@slack/webhook' +import { Model, Types } from 'mongoose' -import { StudyProgram as GraphQLStudyProgram, Review, ReviewStatus } from '../graphql' -import { ReviewDocument } from '../schemas/review.schema' +import { BadRequestError, NotFoundError } from '@admin-api/common/errors' + +import { + Review, + ReviewDocument, + ReviewInteractionType, + ReviewStatus, + StudyProgram, +} from '@cgr/schema' + +import { CreateReviewInput, EditReviewInput } from '../graphql' @Injectable() export class ReviewService { - constructor(@InjectModel('review') private reviewModel: Model) {} + private logger: Logger = new Logger('ReviewService') + private webhook: IncomingWebhook + + constructor( + private configService: ConfigService, + @InjectModel('review') private reviewModel: Model + ) { + const env = this.configService.get('env') + const url = this.configService.get('slackWebhookUrl') + if (url && env == 'production') { + this.logger.log(`Slack webhook is configured: ${url}`) + this.webhook = new IncomingWebhook(url) + } + } + + async sendReviewAlert(review: ReviewDocument) { + if (!this.webhook) { + return + } + const reviewDashboardUrl = this.configService.get('reviewDashboardUrl') + this.logger.log(`sent alert`) + return this.webhook.send({ + text: `A new review is created for course ${review.courseNo} ${review.studyProgram} ${review.semester}/${review.academicYear}. Review them now in <${reviewDashboardUrl}|Review Dashboard>.`, + }) + } async getReviews(): Promise { const reviews = await this.reviewModel.find() return reviews } - async getPending(): Promise { + async create( + { courseNo, semester, academicYear, studyProgram, rating, content }: CreateReviewInput, + userId: string + ): Promise { + if (rating < 0 || rating > 10) { + throw new UserInputError(`Rating must be between 0 and 10. Got ${rating}`) + } + + const review = await this.reviewModel.findOne({ + ownerId: userId, + courseNo, + studyProgram, + }) + if (review) { + throw new BadRequestError('User already created a review for this course.') + } + + const newReview = new this.reviewModel({ + ownerId: new Types.ObjectId(userId), + courseNo, + semester, + academicYear, + studyProgram, + rating, + content, + status: 'PENDING', + }) + await newReview.save() + await this.sendReviewAlert(newReview) + return newReview + } + + async getApprovedReviews( + courseNo: string, + studyProgram: StudyProgram, + userId: string + ): Promise { + const reviews = await this.reviewModel.find({ + courseNo, + studyProgram, + status: 'APPROVED', + }) + return reviews.sort((reviewA, reviewB) => { + if (reviewA.ownerId.equals(userId)) { + return -1 + } + if (reviewB.ownerId.equals(userId)) { + return 1 + } + // Sort by _id descending + return reviewB._id.toString().localeCompare(reviewA._id.toString()) + }) + } + + async getPending(): Promise { + const reviews = await this.reviewModel.find({ + status: 'PENDING', + }) + return reviews + } + + async getPendingForUser( + courseNo: string, + studyProgram: StudyProgram, + userId: string + ): Promise { const reviews = await this.reviewModel.find({ - status: ReviewStatus.PENDING, + $or: [{ status: 'PENDING' }, { status: 'REJECTED' }], + ownerId: userId, + courseNo, + studyProgram, }) - return reviews.map((rawReview) => this.transformReview(rawReview, null)) + return reviews + } + + async editMyReview( + reviewId: string, + reviewInput: EditReviewInput, + userId: string + ): Promise { + if (reviewInput.rating != null && (reviewInput.rating < 0 || reviewInput.rating > 10)) { + throw new UserInputError(`Rating must be between 0 and 10. Got ${reviewInput.rating}`) + } + + const review = await this.reviewModel.findById(reviewId) + if (!review) { + throw new NotFoundError('Review with the given id does not exist.') + } + if (!review.ownerId.equals(userId)) { + throw new BadRequestError('User is not owner of this review.') + } + const newReview = await this.reviewModel.findByIdAndUpdate( + reviewId, + { + $set: { + ...reviewInput, + status: 'PENDING', + }, + }, + { new: true } + ) + return newReview + } + + async remove(reviewId: string, userId: string): Promise { + const review = await this.reviewModel.findOneAndDelete({ + _id: reviewId, + ownerId: userId, + }) + if (!review) { + throw new NotFoundError( + 'Either the review does not exist or the user is not the owner of the review' + ) + } + return review } - // TODO: hide reviews? async setStatus( reviewId: string, status: ReviewStatus, rejectionReason: string = null ): Promise { - if (status !== ReviewStatus.APPROVED && status !== ReviewStatus.REJECTED) { - throw new BadRequestException({ - reason: 'INVALID_STATUS', - message: 'Only APPROVED and REJECTED status is supported', - }) + if (status !== 'APPROVED' && status !== 'REJECTED') { + throw new UserInputError(`Only APPROVED and REJECTED status is supported. Got ${status}`) } const review = await this.reviewModel.findByIdAndUpdate(reviewId, { $set: { @@ -41,36 +183,34 @@ export class ReviewService { }, }) if (!review) { - throw new NotFoundException({ - reason: 'REVIEW_NOT_FOUND', - message: `Error setting status for review ${reviewId}: Review not found`, - }) + throw new NotFoundError('Review with the given id does not exist.') } - return 'Review status updated successfully' + return `${status}` } - private transformReview(rawReview: ReviewDocument, userId: string): Review { - const likeCount = rawReview.interactions.filter( - (interaction) => interaction.type === 'L' - ).length - const dislikeCount = rawReview.interactions.length - likeCount - const interactionType = rawReview.interactions.find((interaction) => - interaction.userId.equals(userId) - )?.type - return { - _id: rawReview._id.toString(), - rating: rawReview.rating, - courseNo: rawReview.courseNo, - semester: rawReview.semester, - academicYear: rawReview.academicYear, - studyProgram: rawReview.studyProgram as GraphQLStudyProgram, - content: rawReview.content, - likeCount: likeCount, - dislikeCount: dislikeCount, - myInteraction: interactionType, - status: rawReview.status, - rejectionReason: rawReview.rejectionReason, - isOwner: rawReview.ownerId.equals(userId), + async setInteraction( + reviewId: string, + interaction: ReviewInteractionType, + userId: string + ): Promise { + const review = await this.reviewModel.findById(reviewId) + if (!review) { + throw new NotFoundError('Review with the given id does not exist.') + } + + const index = review.interactions.findIndex((interaction) => interaction.userId.equals(userId)) + if (index === -1) { + review.interactions.push({ + userId: new Types.ObjectId(userId), + type: interaction, + }) + } else if (review.interactions[index].type === interaction) { + review.interactions[index].remove() + } else { + review.interactions[index].set('type', interaction) } + + await review.save() + return review } } diff --git a/apps/admin-api/src/schemas/override.schema.ts b/apps/admin-api/src/schemas/override.schema.ts deleted file mode 100644 index d009ec361..000000000 --- a/apps/admin-api/src/schemas/override.schema.ts +++ /dev/null @@ -1,33 +0,0 @@ -import * as mongoose from 'mongoose' - -import { GenEdType, StudyProgram } from '@admin-api/graphql' - -export const GenEdSchema = new mongoose.Schema({ - genEdType: { - type: String, - required: true, - enum: Object.values(GenEdType), - }, - sections: { type: [String], required: true }, -}) - -export const OverrideSchema = new mongoose.Schema({ - courseNo: { type: String, required: true }, - studyProgram: { type: String, required: true, enum: Object.values(StudyProgram) }, - semester: { type: String, required: true }, - academicYear: { type: String, required: true }, - genEd: { type: GenEdSchema }, -}) - -export interface Override { - courseNo: string - studyProgram: StudyProgram - semester: string - academicYear: string - genEd?: { - genEdType: GenEdType - sections: string[] - } -} - -export type OverrideDocument = Override & mongoose.Document diff --git a/apps/admin-api/src/schemas/review.schema.ts b/apps/admin-api/src/schemas/review.schema.ts deleted file mode 100644 index bb04411e2..000000000 --- a/apps/admin-api/src/schemas/review.schema.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { StudyProgram } from '@thinc-org/chula-courses' -import mongoose from 'mongoose' - -import { ReviewInteractionType, ReviewStatus } from '../graphql' - -export const InteractionSchema = new mongoose.Schema({ - userId: { - type: mongoose.Schema.Types.ObjectId, - required: true, - ref: 'user', - }, - type: { - type: String, - required: true, - enum: Object.values(ReviewInteractionType), - }, -}) - -export const ReviewSchema = new mongoose.Schema({ - ownerId: { - type: mongoose.Schema.Types.ObjectId, - required: true, - ref: 'user', - }, - courseNo: { type: String, required: true }, - semester: { type: String, required: true }, - academicYear: { type: String, required: true }, - studyProgram: { type: String, required: true }, - rating: { type: Number, required: true }, - content: { type: String }, - interactions: [InteractionSchema], - status: { - type: String, - enum: Object.values(ReviewStatus), - default: ReviewStatus.PENDING, - }, - rejectionReason: { type: String }, -}) - -ReviewSchema.index({ studyProgram: 1, courseNo: 1 }) - -export interface ReviewInteraction { - userId: mongoose.Types.ObjectId - type: ReviewInteractionType -} - -export type ReviewInteractionDocument = ReviewInteraction & mongoose.Document - -export interface Review { - ownerId: mongoose.Types.ObjectId - rating: number - courseNo: string - semester: string - academicYear: string - studyProgram: StudyProgram - content?: string - interactions: mongoose.Types.DocumentArray - status: ReviewStatus - rejectionReason?: string -} - -export type ReviewDocument = Review & mongoose.Document diff --git a/apps/admin-api/tsconfig.json b/apps/admin-api/tsconfig.json index ad327ab11..6adfb7879 100644 --- a/apps/admin-api/tsconfig.json +++ b/apps/admin-api/tsconfig.json @@ -9,7 +9,7 @@ "experimentalDecorators": true, "types": ["node"] }, - "include": ["next-env.d.ts", "src/**/*.ts"], + "include": ["next-env.d.ts", "src/**/*.ts", "generate-typings.ts"], "exclude": [ "node_modules", "jest.config.ts", diff --git a/apps/admin-web/.env b/apps/admin-web/.env new file mode 100644 index 000000000..f34af0363 --- /dev/null +++ b/apps/admin-web/.env @@ -0,0 +1,23 @@ +# Environment +NEXT_PUBLIC_ENVIRONMENT=local + +# Backend +NEXT_PUBLIC_BACKEND_URL=http://localhost:3333 + +# GraphQL +NEXT_PUBLIC_BACKEND_URL=${NEXT_PUBLIC_BACKEND_URL}/_api/graphql + +# Sitemap (Frontend URL) +NEXT_PUBLIC_SITE_URL=http://localhost:4201 + +# OAuth url +NEXT_PUBLIC_AUTHORIZE_URL=https://auth.internal.cugetreg.com/application/o/authorize/ + +# Client ID of OAuth +NEXT_PUBLIC_CLIENT_ID=2f3a5527c10a61c0489d75825011c69f59743981 + +# Redirect URI of OAuth in frontend +NEXT_PUBLIC_REDIRECT_URI=${NEXT_PUBLIC_SITE_URL}/generateToken + +# Auth URL of backend +NEXT_PUBLIC_AUTH_URL=${NEXT_PUBLIC_BACKEND_URL}/_api/auth diff --git a/apps/admin-web/.env.beta b/apps/admin-web/.env.beta new file mode 100644 index 000000000..e5d7a8166 --- /dev/null +++ b/apps/admin-web/.env.beta @@ -0,0 +1,23 @@ +# Environment +NEXT_PUBLIC_ENVIRONMENT=beta + +# Backend +NEXT_PUBLIC_BACKEND_URL=http://localhost:3333 + +# GraphQL +NEXT_PUBLIC_BACKEND_URL=${NEXT_PUBLIC_BACKEND_URL}/_api/graphql + +# Sitemap (Frontend URL) +NEXT_PUBLIC_SITE_URL=http://localhost:4200 + +# OAuth url +NEXT_PUBLIC_AUTHORIZE_URL=https://auth.internal.cugetreg.com/application/o/authorize/ + +# Client ID of OAuth +NEXT_PUBLIC_CLIENT_ID=2f3a5527c10a61c0489d75825011c69f59743981 + +# Redirect URI of OAuth in frontend +NEXT_PUBLIC_REDIRECT_URI=${NEXT_PUBLIC_SITE_URL}/generateToken + +# Auth URL of backend +NEXT_PUBLIC_AUTH_URL=${NEXT_PUBLIC_BACKEND_URL}/_api/auth diff --git a/apps/admin-web/.env.dev b/apps/admin-web/.env.dev new file mode 100644 index 000000000..329091885 --- /dev/null +++ b/apps/admin-web/.env.dev @@ -0,0 +1,23 @@ +# Environment +NEXT_PUBLIC_ENVIRONMENT=dev + +# Backend +NEXT_PUBLIC_BACKEND_URL=http://localhost:3333 + +# GraphQL +NEXT_PUBLIC_BACKEND_URL=${NEXT_PUBLIC_BACKEND_URL}/_api/graphql + +# Sitemap (Frontend URL) +NEXT_PUBLIC_SITE_URL=http://localhost:4200 + +# OAuth url +NEXT_PUBLIC_AUTHORIZE_URL=https://auth.internal.cugetreg.com/application/o/authorize/ + +# Client ID of OAuth +NEXT_PUBLIC_CLIENT_ID=2f3a5527c10a61c0489d75825011c69f59743981 + +# Redirect URI of OAuth in frontend +NEXT_PUBLIC_REDIRECT_URI=${NEXT_PUBLIC_SITE_URL}/generateToken + +# Auth URL of backend +NEXT_PUBLIC_AUTH_URL=${NEXT_PUBLIC_BACKEND_URL}/_api/auth diff --git a/apps/admin-web/.env.local b/apps/admin-web/.env.local deleted file mode 100644 index 889afd58f..000000000 --- a/apps/admin-web/.env.local +++ /dev/null @@ -1,29 +0,0 @@ -# Environment -NEXT_PUBLIC_ENVIRONMENT=local - -# GraphQL -NEXT_PUBLIC_BACKEND_URL=https://beta.cugetreg.com/_api - -# Google OAuth ID (for One Tap) -NEXT_PUBLIC_GOOGLE_OAUTH_ID=297489937770-g4p9q7jsmgaddbl074tbn9b6j2ba2kf4.apps.googleusercontent.com - -# Google Tag Maneger -NEXT_PUBLIC_GOOGLE_TAG_MANAGER_CONTAINER_ID=GTM-T89NLK4 - -# Google Optimize -NEXT_PUBLIC_GOOGLE_OPTIMIZE_FILTER_ORDER=2CbLN8N3T0mOVBxgrDnm_g - -# Google Analytic -NEXT_PUBLIC_GOOGLE_ANALYTIC_PROPERTY_ID=UA-188367232-1 - -# Sitemap -NEXT_PUBLIC_SITE_URL=http://localhost:4201 - -# Enable -NEXT_PUBLIC_ENABLE_DAY_OF_WEEK_THUMBNAIL=true -NEXT_PUBLIC_ENABLE_COURSE_THUMBNAIL=true -NEXT_PUBLIC_ENABLE_DARK_THEME=false -NEXT_PUBLIC_ENABLE_LOGGING=true - -# Admin Access Token -NEXT_PUBLIC_ADMIN_ACCESS_TOKEN=wqbglfcqoJx1L3rTOIIx4W31hdHZQN8RV6f9rzW9Jy5eec9TYuR3TQ5e6XVvykt \ No newline at end of file diff --git a/apps/admin-web/.env.prod b/apps/admin-web/.env.prod new file mode 100644 index 000000000..f6e505867 --- /dev/null +++ b/apps/admin-web/.env.prod @@ -0,0 +1,23 @@ +# Environment +NEXT_PUBLIC_ENVIRONMENT=production + +# Backend +NEXT_PUBLIC_BACKEND_URL=http://localhost:3333 + +# GraphQL +NEXT_PUBLIC_BACKEND_URL=${NEXT_PUBLIC_BACKEND_URL}/_api/graphql + +# Sitemap (Frontend URL) +NEXT_PUBLIC_SITE_URL=http://localhost:4200 + +# OAuth url +NEXT_PUBLIC_AUTHORIZE_URL=https://auth.internal.cugetreg.com/application/o/authorize/ + +# Client ID of OAuth +NEXT_PUBLIC_CLIENT_ID=2f3a5527c10a61c0489d75825011c69f59743981 + +# Redirect URI of OAuth in frontend +NEXT_PUBLIC_REDIRECT_URI=${NEXT_PUBLIC_SITE_URL}/generateToken + +# Auth URL of backend +NEXT_PUBLIC_AUTH_URL=${NEXT_PUBLIC_BACKEND_URL}/_api/auth diff --git a/apps/admin-web/Dockerfile b/apps/admin-web/Dockerfile new file mode 100644 index 000000000..56120ad9c --- /dev/null +++ b/apps/admin-web/Dockerfile @@ -0,0 +1,70 @@ +# When copying this Dockerfile for use in other apps, don't forget to change the scope (api, web, etc.) in RUN commands + +FROM node:18-alpine AS pnpm +# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. +RUN apk add --no-cache libc6-compat +RUN apk update + +ENV PNPM_HOME="/root/.local/share/pnpm" +ENV PATH="${PATH}:${PNPM_HOME}" +RUN npm install -g pnpm + +# -------------------------------------------------------- + +FROM pnpm AS pruner +WORKDIR /app +RUN pnpm install -g turbo +COPY . . +RUN turbo prune --scope=admin-web --docker + +# -------------------------------------------------------- + +FROM pnpm AS builder +WORKDIR /app +RUN apk add --update --no-cache \ + make \ + g++ \ + jpeg-dev \ + cairo-dev \ + giflib-dev \ + pango-dev \ + libtool \ + autoconf \ + automake + +COPY --from=pruner /app/out/json/ . +COPY pnpm-lock.yaml ./pnpm-lock.yaml +RUN pnpm install --frozen-lockfile + +COPY --from=pruner /app/out/full/ . +COPY turbo.json turbo.json +RUN pnpm turbo run build --filter=admin-web... + +# -------------------------------------------------------- + +FROM node:18-alpine AS runner +WORKDIR /app + +RUN apk add --no-cache --update \ + jpeg \ + cairo \ + giflib \ + pango + +# Don't run production as root +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs +USER nextjs + +COPY --from=builder /app/apps/admin-web/next.config.js . +COPY --from=builder /app/apps/admin-web/package.json . + +# Automatically leverage output traces to reduce image size +# https://nextjs.org/docs/advanced-features/output-file-tracing +COPY --from=builder --chown=nextjs:nodejs /app/apps/admin-web/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/apps/admin-web/public ./apps/admin-web/public +COPY --from=builder --chown=nextjs:nodejs /app/apps/admin-web/.next/static ./apps/admin-web/.next/static + +ENV PORT 4200 + +CMD node apps/admin-web/server.js diff --git a/apps/admin-web/README.md b/apps/admin-web/README.md index 2516ce423..a2da2a270 100644 --- a/apps/admin-web/README.md +++ b/apps/admin-web/README.md @@ -2,11 +2,7 @@ This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next ## Getting Started -First, create .env.local with the following variables: - -1. NEXT_PUBLIC_ENVIRONMENT (could be "local") -2. NEXT_PUBLIC_BACKEND_URL (backend url) -3. NEXT_PUBLIC_ADMIN_ACCESS_TOKEN +Create .env.local with the variables in .env.example ```bash npm run dev diff --git a/apps/admin-web/package.json b/apps/admin-web/package.json index f08d734b3..413958bd7 100644 --- a/apps/admin-web/package.json +++ b/apps/admin-web/package.json @@ -22,13 +22,16 @@ "@cgr/course-utils": "workspace:*", "@emotion/react": "11.10.4", "@emotion/styled": "11.10.4", + "@mui/icons-material": "5.8.4", "@mui/material": "5.9.1", + "@mui/styled-engine-sc": "^5.11.0", "@next/font": "13.1.6", "axios": "0.23.0", "isomorphic-dompurify": "0.20.0", "next": "^13.0.0", "react": "18.2.0", "react-dom": "18.2.0", + "react-hot-toast": "2.3.0", "styled-components": "5.3.5" } } diff --git a/apps/admin-web/public/GetRegLogo.png b/apps/admin-web/public/GetRegLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..4ec1c77e440914e98a048a56a3317141febfc27c GIT binary patch literal 4742 zcmV;15_#>3P){X^*1* z0u6!1CZq#sd=Z&!05^psFc1S71BpmGnpb)Cx`*tZ>6z*7sh(e~41lGB@7u3l zRlO^yx7Q{;x zgEDKJ**s1JL=U@OwJE z>korX1gsA-wfyV1pYp%t!CGXh@&Bw~VHXfv@XkC7{{QPHC`tyL5cmns=1}|vHg&wW zOAm$(=Fa;Kn1^veSW#`iIXZZhdcGA9k@p-rgTFrkw&_9IV%(ZxG~~TjQ@Ek)79|Uz z5LQ-SCf5YCdwh7X4mpVlqGqqLj3-Oix`pI_`o$V8w4a_o#WVbn1|9^z+uw;F%OV6z zaD2Fb4HRVv3vM>B?$P)`B<}$fz&?Eg`_CqS?Od;2xbNk4iNKmd)W*8Uu2_q)g2cF~ z1kU_<>|g(nW^nY|#`)W5BYJHocD<%Oz5|Mq6ST9zWBX{`>Kw2pP2HL_n@|G1Gmjm( zCyRG`W(}TM(AY&e-isYheY$HLL6LyHM%Bat&y*4z^FR5r+9iS@O$6=*JF~nwJlL>y zTO)o6J1f*cQA%LJE{dzxv^YC}^z*)+mLhJ^$Xv4DsU3g1vuU$EbRkao$evg`Kj85- z8lWh`EOakgzdiiFwlK_ei#%^~h=1SpElu}u+L8oSX5li?J zn=m~>2%65GALx_kNHM2aoFAc~!8k>k2JDQ04eK+lbq*M+@YgS(2%fnYH-BtUpmFwf zV&-wF5c&Q6geokh6c+4Y-HT^gBhZF@vOhWV_T+#lxtK+SGgoYK=COh}U3`)yeM3>k zfybViq`w}Qc_9lq;iNrCt{;Nn=-@ohhi9HRmrm|Mmg`z?)!CnvXmtXl%xN2n5+_W< zMw3jbunXCbuixH=jMzcC(Ve-~vtzccHaimhZJu?KVDpaN>z5graIjJ9f~?P42{?-M57nOEJe zR79%VWA^&y2SD#L`}E)FIfqOwZC`|6tu51!C$AvYtxL`0!-JckC`0Jkygxt;L+LjY zB(HzV3J723Ny8qrx4~WWJpG$pzljL8oka!~C{Pq8b&#ZOv>Aw<1rW@3znyGp*N@^2 z{=gG?i|9MpoMe>@SVpuH}fy!T99tcs#2ilQirq9}@@D2k#?hSGvfF8$*2Y1O(~IroR7(7sEG>)D{= zT(PatWy<>(I4!*W4V=E;oCnvb|H&;blw9SAxed7ZQB`sGQsTt;eE>;9+HhceaK3N2gl^=6;^& zaVi|B<5X_K7vs1Y5`+(czpvR_dnZ|ras*t!66^M>y=lJ>@du!N_^pA=_F5K4gIf^5 zPfLx?gTY@}y-(!6$H-vDig82npkkkP?R6V?dnoeD?_=caJgy5Jmab+lr{Td*fphuz)x-|bq-;wdNG6pz&s|xaeVeTQ*j^8 zdudEy4|>;r`;jgsC4})qO(bu9Ql`S03D{dfe5`~|NAJnRfh1;EFW3&p#g`U@FTW{c;;-7%mum<)dFLFTelk zeybInLdm$@cnJSvzw^Js)PR?*|8MPs5C08+`2J4~D3P$E5`TV}t8K9}Y#Q~@>{m-w ziayO$rVQG}lcmiv?t_10b!VPtfjBd48uj4Jm7yE_3o;ubU~tXe2N9QeoR3#-*XLCP z%sdH!@p%wPi(z&|a7Ojx8@F>;BIyTz{;vJwbH}_1fvLjc-^B*4TNuuk2prrtOTv*b zgAaj1%+nenL0Y@1yky=|I>jKh@Aj)gGK>)_pwArhI3qa7qlY86x%CV`34NGh2rEyE zn2P+KWF6c2W^RR0v|?X}uxOb~_;G z%#O|^x&Z5fIAd!RGARfu{0nX5d5@b7fP5$ef`)ZNHp4EWmB1bI%rY3N+UQ`dtel-_ zcFfjjkxfFHfpSn>?uQG*fvc%igAth9#d4gy3&upJPMIH|MFw`f)1{#mz&rW-gr4~N z#15Kk!*Y^lVu74eM=PwNNYCwS)dE+XbJHjyniVp^vjNBsz$O~+CRggq67A)IYJb6X zJ818sjS_<(2F&nSKRgW%Fp@O%)ml*7aDo(|7(xrK1g!Kz(D74*1BSA4;$oo6XZ>FCKl!pMwEs0Iqe~C>x^sJU1&CS*CpkTx9uW-ah0$|9r-2Ck z-o%B#t9z*pn$ zv#jp(;9Xke8xw#4){gA|uS>9m_m1TGg$ zZljRsVwt0TAWYC~wCrMNM`UL3u>UU`QDh*H2Rk-0EjNqBuMIK~px<*4Q;rqAzV-Il zh3;nb-xqe!?%8955+DQKUJ4nJS{KBToDqVeopXkAY4MqieLS!a^IUC49|-o&2-agH z^7*?&;IO809s78yAgs@n&($1?$_GK@gkY#NlYnOhd$Z~=GW{1-bb(TiQy&O4x)9Pt z&>=Y7Po33~%toHbyW25WLSmwr5Ri-amI;|}piGc1&Ww=$K=5G%28p19bBQ9HJurE3 zoX3hNGd)~xMnF^Aj1W?3K$(Lf7vxzSGiC0WlM_N4et;5j)2EOh zT@i(C{PoNyzy7+(@gZIpKn~a>f)dSFF|QFW{Oqq#HlZJVlqYupiYVyJn|$dc93RSa z{x~X$%vAR2=zesaQ9@GgL&4cLI65e`8h2Dgpzz-FtX!NlY-Uho_ClFmDfgjZ)Vk=N z@XRcoY{M8ldKXFvt|e1Hq|z5=0ZN%!5ej{NLhre2k5vMpNi?1^le4vX|73C9Tm0z* zCADX(Xb>8oQ=2gwhEzxROA||6nnXRWCE5PVIEZslPEQ*LO4TeAdID%o;GrWq96R74&;&Rdp#lBFi+zT{&bY}mgMHOU@{ zB4s8A5tdmocR&Ph&u#lmf6WHRXaj^m#D`W4@aE`XJJTB`SZY#*kfZ?uLg*A9F4~tM zPT0JVBdan41o2(}&v*H96MlLt*1I_Te%Zv}uiRdnWc6`1jpFbIAR$~|f)V>Ol(7>F z-oD>A?OAT$M-mo;zjEvGpmPXt;Ok|hLWto8f}BaigZOz-F+@2w&p~qGXoG!2cY?{4 zjY(b>ye;nQmR5SRgnF~NQ6Y3gSh$dE3fvU^WnMA3nIP| zmgPj3<5Q|HpIT0ogssRq;lqScA*A46zhxJwURilA0RlCxtq>Q4AEkGc7L2p5(TzMQ z({}Ot+}iCk851dj3ZV~IZ>+wWmJ)~pWS$K=gpD_33J=c$x<=>&8q8FCa~9xTWRR1v z@rLMnX{u2n^nn+RqU9zh1Xr3Xx{It|36^<8g)jiga+4Dx@W31CsqXFpLdg|MCXWhX z04}b8W_?z-aq`bzq-|9kcMpuKQW3x$qe2*hD?ehqnOiTos^qU_c8o>q1unl5z?`B& z$bhTeDc-oGJY0Eo;i}|kVwh7iNrjLR*SMsAA={}TZ;ydIuo#YC@86uq1+)qw2kb?$ z!LaGHm%}df8)bXFlvfEFSCORp#aWA z=rlZ>ut$kaAv{^UIjVQ42>d<6*#WO*?~Ee^xx~N*2%$n40k>|jPvWr;0>%ym9)N5L ziS=_Xh!e!o!6yGaY%-OVy~^Jz68@Frqy4)!Vjh4HnrkEk=jIqN56f(t?)p}@vF@SS zEv-9|5MioyyJi6IVDW^)ut_~q6X9pO-Q&x@e)}n*%&xY{Y!IDu{2QxZ8AEF#qF~d@ zVABT2cH!i`XOn*VkAi>WRu#;`2UZ}yYs?Z)=;P1HWj8&pFJ+G5?R&wn&#FS0A>1z? zysM@SHP3@8g=OvekDoX(8VIi9H&6K(rD~tP_suL1{xb1bR$ofBky0TjGmD%MsHKZ# zWo99{s)B(EL77SXYHe9;(~vbuRS3##^5feY2tf!sM0^?u zUy1ay04}fxfeJxMKvHoK&-nK5QiS04Q-hH!EP$q|rje4sx)Ej4tfR7*PzD}sh!z#F zE@~Bmk_1s~zkw@znNrzq6vQiL6ErwZqe4)U7?4cea25Nc#1K`*6D>T35SGGMAt*_> zBDQQsZPkk5l|Vt{nya%UoyXNCSL;g|nM#GAq~i7@m$%bw(gfb=Qli|A3PI@)nz<>29EXb{ckl72 zfTHxF^_M??cjcpB{$RiSPnZ+fBsxwhd80FeGLW#A)7+RyeTyQi5R~CuT3ny`QjcK) zw7dOc80tP%G7(E}@L|?q5dhsCR1{ff1SJ!$2=JxFn=@x7We@?Qi)AGII=&XnqdU0#^ex_}_1i4j!~x!D;5Vfuf8^tlZ@WObRCe*x`tA zk%DL{1VxNay;DMucaZro4n`Ef*=0acO2C!6B)DT8lWVRJmu%zmzz+Uh$zsU=1lEr6 UpvrVQ6#xJL07*qoM6N<$g4#^%(*OVf literal 0 HcmV?d00001 diff --git a/apps/admin-web/src/common/Layout/index.tsx b/apps/admin-web/src/common/Layout/index.tsx new file mode 100644 index 000000000..cc2df54fc --- /dev/null +++ b/apps/admin-web/src/common/Layout/index.tsx @@ -0,0 +1,24 @@ +import { Toaster } from 'react-hot-toast' + +import { useRouter } from 'next/router' + +import SideBar from '@admin-web/common/Sidebar' +import { toastConfig } from '@admin-web/config/toastConfig' + +import { LayoutContainer } from './styled' + +interface AppProviderProps { + children: React.ReactNode +} + +export function Layout({ children }: AppProviderProps) { + const router = useRouter() + const disableSideBar = router.pathname.startsWith('/login') + return ( + + {!disableSideBar && } + {children} + + + ) +} diff --git a/apps/admin-web/src/common/Layout/styled.ts b/apps/admin-web/src/common/Layout/styled.ts new file mode 100644 index 000000000..c954f8787 --- /dev/null +++ b/apps/admin-web/src/common/Layout/styled.ts @@ -0,0 +1,8 @@ +import { styled } from '@mui/material' + +export const LayoutContainer = styled('div')({ + display: 'grid', + gridTemplateColumns: '240px 1fr', + padding: '0', + margin: '0', +}) diff --git a/apps/admin-web/src/common/LogoutButton/index.tsx b/apps/admin-web/src/common/LogoutButton/index.tsx new file mode 100644 index 000000000..c82eaaf13 --- /dev/null +++ b/apps/admin-web/src/common/LogoutButton/index.tsx @@ -0,0 +1,13 @@ +import { StyledLogoutButton } from './styled' + +interface LogoutButtonProps { + handleClick?: () => Promise | void +} + +export default function LogoutButton({ handleClick }: LogoutButtonProps) { + return ( + <> + Log out + + ) +} diff --git a/apps/admin-web/src/common/LogoutButton/styled.tsx b/apps/admin-web/src/common/LogoutButton/styled.tsx new file mode 100644 index 000000000..fb9836895 --- /dev/null +++ b/apps/admin-web/src/common/LogoutButton/styled.tsx @@ -0,0 +1,19 @@ +import { Button, styled } from '@mui/material' + +export const StyledLogoutButton = styled(Button)({ + width: '120px', + height: '40px', + background: '#FFFFFF', + border: '2px solid #D54C0C', + color: '#D54C0C', + fontStyle: 'normal', + fontWeight: '700', + fontSize: '16px', + lineHeight: '24px', + borderRadius: '8px', + textTransform: 'initial', + '&:hover': { + background: '#D54C0C', + color: '#FFFFFF', + }, +}) diff --git a/apps/admin-web/src/common/Sidebar/components/SectionLink/index.tsx b/apps/admin-web/src/common/Sidebar/components/SectionLink/index.tsx new file mode 100644 index 000000000..33b3e2714 --- /dev/null +++ b/apps/admin-web/src/common/Sidebar/components/SectionLink/index.tsx @@ -0,0 +1,25 @@ +import { Typography } from '@mui/material' + +import { LinkType } from '../../linkConstant' +import SingleLink from '../singleLink' +import { StyledList, StyledListItem } from './styled' + +interface SectionLinkProps { + links: LinkType[] + sectionTitle: string +} + +export default function SectionLink({ links, sectionTitle }: SectionLinkProps) { + return ( + + + {sectionTitle} + + + {links.map((link) => ( + + ))} + + + ) +} diff --git a/apps/admin-web/src/common/Sidebar/components/SectionLink/styled.ts b/apps/admin-web/src/common/Sidebar/components/SectionLink/styled.ts new file mode 100644 index 000000000..a99f7059e --- /dev/null +++ b/apps/admin-web/src/common/Sidebar/components/SectionLink/styled.ts @@ -0,0 +1,15 @@ +import { AppBar, List, ListItem, styled } from '@mui/material' + +export const StyledAppBar = styled(AppBar)({ + backgroundColor: 'black', + padding: '15px 10px', +}) + +export const StyledListItem = styled(ListItem)({ + display: 'flex', + flexDirection: 'column', +}) + +export const StyledList = styled(List)({}) + +export const StyledNav = styled('nav')({}) diff --git a/apps/admin-web/src/common/Sidebar/components/singleLink/index.tsx b/apps/admin-web/src/common/Sidebar/components/singleLink/index.tsx new file mode 100644 index 000000000..43ffc70ba --- /dev/null +++ b/apps/admin-web/src/common/Sidebar/components/singleLink/index.tsx @@ -0,0 +1,47 @@ +import { ListItemButton, Typography } from '@mui/material' +import Link from 'next/link' +import { NextRouter, useRouter } from 'next/router' + +interface SingleLinkProps { + title: string + url: string +} + +export default function SingleLink({ title, url }: SingleLinkProps) { + const router = useRouter() + + const isSelected = isSelectedLink(router, url) + + return ( + + + + {title} + + + + ) +} + +function isSelectedLink(router: NextRouter, url: string): boolean { + if (router.pathname === url) return true + const genEdRegex = /^\/genEd/ + const isGenEd = genEdRegex.test(router.pathname) + if (isGenEd) { + const { slug } = router.query + if (!slug && url === '/genEd') return true + if (!!slug && url === `/genEd/${slug[0]}`) return true + } + return false +} diff --git a/apps/admin-web/src/common/Topbar/components/singleLink/styled.ts b/apps/admin-web/src/common/Sidebar/components/singleLink/styled.ts similarity index 100% rename from apps/admin-web/src/common/Topbar/components/singleLink/styled.ts rename to apps/admin-web/src/common/Sidebar/components/singleLink/styled.ts diff --git a/apps/admin-web/src/common/Sidebar/index.tsx b/apps/admin-web/src/common/Sidebar/index.tsx new file mode 100644 index 000000000..b1948738e --- /dev/null +++ b/apps/admin-web/src/common/Sidebar/index.tsx @@ -0,0 +1,22 @@ +import GetRegLogo from '/public/GetRegLogo.png' +import Image from 'next/image' + +import SectionLink from './components/SectionLink' +import { LinkSectionType, links } from './linkConstant' +import { StyledLogoContainer, StyledNav } from './styled' + +// TODO: change route names +export default function SideBar() { + return ( + <> + + + CuGetReg Logo + + {Object.keys(links).map((key: keyof LinkSectionType) => ( + + ))} + + + ) +} diff --git a/apps/admin-web/src/common/Sidebar/linkConstant.ts b/apps/admin-web/src/common/Sidebar/linkConstant.ts new file mode 100644 index 000000000..f78658079 --- /dev/null +++ b/apps/admin-web/src/common/Sidebar/linkConstant.ts @@ -0,0 +1,26 @@ +export interface LinkType { + title: string + url: string +} + +export interface LinkSectionType { + [key: string]: LinkType[] +} + +export const links: LinkSectionType = { + Review: [ + { title: 'Review Approval', url: '/pendingReviews' }, + { title: 'All Review', url: '/approvedReviews' }, + ], + Gened: [ + { title: 'All Type', url: '/genEd' }, + { title: 'HU (มนุษย์)', url: '/genEd/hu' }, + { title: 'SCI (วิทย์-คณิต)', url: '/genEd/sci' }, + { title: 'IN (สห)', url: '/genEd/in' }, + { title: 'SOC (สังคม)', url: '/genEd/soc' }, + ], +} + +export const loginLink = '/auth/login' + +export const generateTokenLink = '/auth/generateToken' diff --git a/apps/admin-web/src/common/Topbar/style.module.css b/apps/admin-web/src/common/Sidebar/style.module.css similarity index 100% rename from apps/admin-web/src/common/Topbar/style.module.css rename to apps/admin-web/src/common/Sidebar/style.module.css diff --git a/apps/admin-web/src/common/Sidebar/styled.ts b/apps/admin-web/src/common/Sidebar/styled.ts new file mode 100644 index 000000000..169a4ce44 --- /dev/null +++ b/apps/admin-web/src/common/Sidebar/styled.ts @@ -0,0 +1,25 @@ +import { AppBar, List, ListItem, styled } from '@mui/material' + +export const StyledAppBar = styled(AppBar)({ + backgroundColor: 'black', + padding: '15px 10px', +}) + +export const StyledListItem = styled(ListItem)({ + display: 'flex', + flexDirection: 'column', +}) + +export const StyledList = styled(List)({}) + +export const StyledNav = styled('nav')({ + backgroundColor: '#F3F4F6', + height: '100vh', + borderRight: '1px solid #E5E7EB', + position: 'sticky', + top: 0, +}) + +export const StyledLogoContainer = styled('div')({ + padding: '24px 0 24px 24px', +}) diff --git a/apps/admin-web/src/common/Topbar/Topbar.tsx b/apps/admin-web/src/common/Topbar/Topbar.tsx deleted file mode 100644 index f2caebacb..000000000 --- a/apps/admin-web/src/common/Topbar/Topbar.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { Box } from '@mui/material' - -import SingleLink from './components/singleLink' -import { StyledAppBar } from './styled' - -// Todo: change route names -const pages = [ - { title: 'Pending Reviews', url: '/pendingReviews' }, - { title: 'Approved Reviews', url: '/approvedReviews' }, - { title: 'GenEd', url: '/genEd' }, -] - -export default function Topbar() { - return ( - - - {pages.map((data) => ( - - ))} - - - ) -} diff --git a/apps/admin-web/src/common/Topbar/components/singleLink/index.tsx b/apps/admin-web/src/common/Topbar/components/singleLink/index.tsx deleted file mode 100644 index 0c63fda93..000000000 --- a/apps/admin-web/src/common/Topbar/components/singleLink/index.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { Typography } from '@mui/material' -import Link from 'next/link' - -import { StyledButtonLink } from './styled' - -interface SingleLinkProps { - title: string - url: string -} - -export default function SingleLink({ title, url }: SingleLinkProps) { - return ( - - - {title} - - - ) -} diff --git a/apps/admin-web/src/common/Topbar/styled.ts b/apps/admin-web/src/common/Topbar/styled.ts deleted file mode 100644 index 86d390f03..000000000 --- a/apps/admin-web/src/common/Topbar/styled.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { AppBar, styled } from '@mui/material' - -export const StyledAppBar = styled(AppBar)({ - backgroundColor: 'black', - padding: '15px 10px', -}) diff --git a/apps/admin-web/src/common/deepAssign/index.ts b/apps/admin-web/src/common/deepAssign/index.ts new file mode 100644 index 000000000..d950e41d4 --- /dev/null +++ b/apps/admin-web/src/common/deepAssign/index.ts @@ -0,0 +1,17 @@ +const { hasOwnProperty } = Object.prototype + +export function deepAssign(to: T, from: T): T { + const result = { ...to } + for (const key in from) { + if (hasOwnProperty.call(from, key)) { + const toValue = result[key] + const fromValue = from[key] + if (typeof toValue === 'object' && typeof fromValue === 'object') { + result[key] = deepAssign(toValue, fromValue) + } else if (typeof fromValue !== 'undefined') { + result[key] = fromValue + } + } + } + return result +} diff --git a/apps/admin-web/src/common/types/UserDto.ts b/apps/admin-web/src/common/types/UserDto.ts new file mode 100644 index 000000000..440b9c969 --- /dev/null +++ b/apps/admin-web/src/common/types/UserDto.ts @@ -0,0 +1,5 @@ +export interface UserDto { + email: string + name: string + groups: string[] +} diff --git a/apps/admin-web/src/config/theme/index.ts b/apps/admin-web/src/config/theme/index.ts index aae2e356c..f33b4a870 100644 --- a/apps/admin-web/src/config/theme/index.ts +++ b/apps/admin-web/src/config/theme/index.ts @@ -1,9 +1,17 @@ import { ThemeOptions, createTheme } from '@mui/material' +import { deepAssign } from '@admin-web/common/deepAssign' + +import { lightPaletteOptions } from './palette' + const themeBaseOptions: ThemeOptions = { typography: { - htmlFontSize: (16 * 16) / 18, - fontFamily: ['Poppins', 'Prompt', 'sans-serif'].join(','), + // htmlFontSize: (16 * 16) / 18, + fontFamily: "'JetBrains Mono','IBM Plex Sans Thai', monospace", + h1: { + fontWeight: 700, + fontSize: 32, + }, }, breakpoints: { values: { @@ -16,4 +24,9 @@ const themeBaseOptions: ThemeOptions = { }, } +const lightThemeOptions: ThemeOptions = deepAssign(themeBaseOptions, { + palette: lightPaletteOptions, +}) + export const defaultTheme = createTheme(themeBaseOptions) +export const lightTheme = createTheme(lightThemeOptions) diff --git a/apps/admin-web/src/config/theme/palette.ts b/apps/admin-web/src/config/theme/palette.ts new file mode 100644 index 000000000..66d05c895 --- /dev/null +++ b/apps/admin-web/src/config/theme/palette.ts @@ -0,0 +1,87 @@ +import { PaletteOptions } from '@mui/material/styles' + +export type PaletteRange = 10 | 30 | 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 + +export type HighlightColor = + | 'pink' + | 'red' + | 'orange' + | 'green' + | 'teal' + | 'blue' + | 'purple' + | 'yellow' + | 'indigo' + | 'deepGray' + +export type PaletteRangeOptions = Record + +export type HighlightColorRange = Pick + +declare module '@mui/material/styles' { + interface Palette { + white?: string + primaryRange?: PaletteRangeOptions + secondaryRange?: Omit + } + interface PaletteOptions { + white?: string + primaryRange?: PaletteRangeOptions + secondaryRange?: Omit + } +} + +const paletteBaseOptions: PaletteOptions = { + primary: { + light: '#E3E5F8', + main: '#2A2D48', + dark: '#0C0E1D', + contrastText: '#FAFAFF', + }, + secondary: { + light: '#E3E5F8', + main: '#FED239', + dark: '#FCDF7D', + contrastText: '#2A2D48', + }, + error: { + light: '#B10C0C', + main: '#B10C0C', + dark: '#B10C0C', + }, + text: { + primary: '#2A2D48', // primary main + }, + primaryRange: { + 10: '#FAFAFF', + 30: '#E3E5F8', + 50: '#C9CCE4', + 100: '#9C9FBA', + 200: '#7C7F9B', + 300: '#555872', + 400: '#393C55', + 500: '#2A2D48', + 600: '#191D36', + 700: '#0C0E1D', + 800: '#050611', + 900: '#02030A', + }, + secondaryRange: { + 50: '#FFFAE7', + 100: '#FFF2C4', + 200: '#FFE99C', + 300: '#FCDF7D', + 400: '#FED957', + 500: '#FED239', + 600: '#FEC614', + 700: '#FDBC06', + 800: '#F8AA14', + 900: '#EB9C03', + }, + white: '#FFFFFF', +} + +export const lightPaletteOptions: PaletteOptions = { + ...paletteBaseOptions, + mode: 'light', +} diff --git a/apps/admin-web/src/config/toastConfig.ts b/apps/admin-web/src/config/toastConfig.ts new file mode 100644 index 000000000..21cd1d27e --- /dev/null +++ b/apps/admin-web/src/config/toastConfig.ts @@ -0,0 +1,16 @@ +export const toastConfig = { + style: { + fontFamily: "'JetBrains Mono','IBM Plex Sans Thai','monospace'", + fontWeight: '700', + }, + success: { + style: { + background: '#D1FAE5', + }, + }, + error: { + style: { + background: '#FEE2E2', + }, + }, +} diff --git a/apps/admin-web/src/context/AppProvider.tsx b/apps/admin-web/src/context/AppProvider.tsx index 39e059aef..aecbd978f 100644 --- a/apps/admin-web/src/context/AppProvider.tsx +++ b/apps/admin-web/src/context/AppProvider.tsx @@ -1,10 +1,13 @@ import { ApolloProvider } from '@apollo/client' import { ThemeProvider } from '@mui/material' -import Topbar from '@admin-web/common/Topbar/Topbar' -import { defaultTheme } from '@admin-web/config/theme/index' +import { Layout } from '@admin-web/common/Layout' +import { defaultTheme } from '@admin-web/config/theme' import { client } from '@admin-web/services/apollo' +import AuthProvider from './AuthProvider' +import { ProtectedRoutes } from './ProtectedRoutes' + interface AppProviderProps { children: React.ReactNode } @@ -12,10 +15,13 @@ interface AppProviderProps { export function AppProvider({ children }: AppProviderProps) { return ( - - - {children} - + + + + {children} + + + ) } diff --git a/apps/admin-web/src/context/AuthProvider.tsx b/apps/admin-web/src/context/AuthProvider.tsx new file mode 100644 index 000000000..c8de73310 --- /dev/null +++ b/apps/admin-web/src/context/AuthProvider.tsx @@ -0,0 +1,44 @@ +import { Dispatch, SetStateAction, createContext, useContext, useState } from 'react' + +import { useRouter } from 'next/router' + +import { UserDto } from '@admin-web/common/types/UserDto' +import { authApi } from '@admin-web/utils/authAxios' + +interface AuthProviderProps { + children: React.ReactNode +} + +interface IAuthContext { + user: UserDto | null + logout: () => Promise + setUser: Dispatch> +} + +export const useAuth = () => { + const context = useContext(AuthContext) + if (!context) { + throw new Error('useAuth must be used within an AuthProvider') + } + return context +} + +export const AuthContext = createContext(null) + +export default function AuthProvider({ children }: AuthProviderProps) { + const [user, setUser] = useState(null) + const router = useRouter() + const logout = async () => { + // TODO: send api for logging user out + try { + const res = await authApi.get('/logout') + console.log(res) + setUser(null) + router.push('/login') + } catch (err) { + console.log(`Error when logging user out: ${err}`) + } + } + + return {children} +} diff --git a/apps/admin-web/src/context/ProtectedRoutes.tsx b/apps/admin-web/src/context/ProtectedRoutes.tsx new file mode 100644 index 000000000..c7eb1b216 --- /dev/null +++ b/apps/admin-web/src/context/ProtectedRoutes.tsx @@ -0,0 +1,44 @@ +import { useEffect } from 'react' +import { toast } from 'react-hot-toast' + +import { useRouter } from 'next/router' + +import { UserDto } from '@admin-web/common/types/UserDto' +import { authApi } from '@admin-web/utils/authAxios' + +import { useAuth } from './AuthProvider' + +interface ProctectedRoutesProps { + children: React.ReactNode +} + +export const unProtectedRoutes = ['/login', '/generateToken'] + +export const ProtectedRoutes = (props: ProctectedRoutesProps) => { + const { children } = props + const router = useRouter() + + const { user, setUser } = useAuth() + + useEffect(() => { + if (!router) return + if (unProtectedRoutes.includes(router.pathname)) return + if (!!user) return + + const loadUserData = async () => { + try { + const res = await authApi.get('/me') + const user = res.data as UserDto + setUser(user) + } catch (err) { + // TODO: add error handler + if (err instanceof Error) toast.error(err.message) + else toast.error('Error logging user in. Retry logging in') + router.push('/login') + } + } + loadUserData() + }, [router]) + + return <>{children} +} diff --git a/apps/admin-web/src/env/index.ts b/apps/admin-web/src/env/index.ts index 85f882661..d1de070e8 100644 --- a/apps/admin-web/src/env/index.ts +++ b/apps/admin-web/src/env/index.ts @@ -1,4 +1,2 @@ export const BACKEND_URI = process.env.NEXT_PUBLIC_BACKEND_URL || '' export const ENVIRONMENT = process.env.NEXT_PUBLIC_ENVIRONMENT || 'local' - -export const ADMIN_ACCESS_TOKEN = process.env.NEXT_PUBLIC_ADMIN_ACCESS_TOKEN || '' diff --git a/apps/admin-web/src/hooks/useFetchData.tsx b/apps/admin-web/src/hooks/useFetchData.tsx new file mode 100644 index 000000000..320b2b44e --- /dev/null +++ b/apps/admin-web/src/hooks/useFetchData.tsx @@ -0,0 +1,13 @@ +import { useRouter } from 'next/router' + +// TODO: explicit function types +export async function useFetchData(f: any) { + const router = useRouter() + try { + const res = await f() + return res + } catch (err) { + console.log(err) + router.push('/login') + } +} diff --git a/apps/admin-web/src/module/genEd/components/AddGenEdDialog/index.tsx b/apps/admin-web/src/module/genEd/components/AddGenEdDialog/index.tsx new file mode 100644 index 000000000..02dd3aedb --- /dev/null +++ b/apps/admin-web/src/module/genEd/components/AddGenEdDialog/index.tsx @@ -0,0 +1,73 @@ +import { ChangeEvent, Dispatch, SetStateAction, useState } from 'react' + +import Button from '@mui/material/Button' +import TextField from '@mui/material/TextField' +import Typography from '@mui/material/Typography' + +import { ButtonContainer, DialogContainer } from './styled' + +interface AddGenEdDialogProps { + setOpenAddGenEdDialog: Dispatch> +} + +const REGEX = /^[0-9]*$/ + +// TODO: Add transiton when render +// TODO: Fix the bug that has delay when open +export default function AddGenEdDialog({ setOpenAddGenEdDialog }: AddGenEdDialogProps) { + const [courseNo, setCourseNo] = useState('') + const [isFirstInput, setIsFirstInput] = useState(true) + const handleAdd = async () => { + // TODO: Add API + // TODO: Add toast + + setOpenAddGenEdDialog(false) + } + + const handleChange = (e: ChangeEvent) => { + const newValue = e.target.value + setIsFirstInput(false) + + // Validate input here + const isValidInput = REGEX.test(newValue) + + if (isValidInput) { + setCourseNo(newValue) + } + } + + const isError = !isFirstInput && (courseNo.length !== 7 || !REGEX.test(courseNo)) + + return ( + + Enter The Course Number To Add New Course + + + + + + + ) +} diff --git a/apps/admin-web/src/module/genEd/components/AddGenEdDialog/styled.tsx b/apps/admin-web/src/module/genEd/components/AddGenEdDialog/styled.tsx new file mode 100644 index 000000000..14e23b3f2 --- /dev/null +++ b/apps/admin-web/src/module/genEd/components/AddGenEdDialog/styled.tsx @@ -0,0 +1,16 @@ +import { styled } from '@mui/material' + +export const DialogContainer = styled('div')({ + display: 'flex', + flexDirection: 'column', + alignContent: 'start', + rowGap: '16px', + padding: '24px', + background: '#ECFEFF', +}) + +export const ButtonContainer = styled('div')({ + display: 'flex', + alignContent: 'center', + columnGap: '16px', +}) diff --git a/apps/admin-web/src/module/genEd/components/GenEdList.tsx b/apps/admin-web/src/module/genEd/components/GenEdList.tsx new file mode 100644 index 000000000..a7cd4c364 --- /dev/null +++ b/apps/admin-web/src/module/genEd/components/GenEdList.tsx @@ -0,0 +1,37 @@ +import { ApolloQueryResult } from '@apollo/client' + +import { Exact, GetOverridesQuery, Override } from '@cgr/codegen' + +import SingleGenEd from './SingleGenEd' + +interface GenEdListProps { + data: GetOverridesQuery | undefined + loading: boolean + refetchOverrides: ( + variables?: + | Partial< + Exact<{ + [key: string]: never + }> + > + | undefined + ) => Promise> +} + +export function GenEdList({ data, loading, refetchOverrides }: GenEdListProps) { + if (loading) return null + + return ( +
+ {data?.overrides.map((course: Override) => { + return ( + + ) + })} +
+ ) +} diff --git a/apps/admin-web/src/module/genEd/components/GenEdTableHeader.tsx b/apps/admin-web/src/module/genEd/components/GenEdTableHeader.tsx new file mode 100644 index 000000000..6ed744bb5 --- /dev/null +++ b/apps/admin-web/src/module/genEd/components/GenEdTableHeader.tsx @@ -0,0 +1,14 @@ +import { Typography } from '@mui/material' + +import { GenEdTableHeaderContainer } from '../styled' + +export function GenEdTableHeader() { + return ( + + Context + Number + Course title + + + ) +} diff --git a/apps/admin-web/src/module/genEd/components/SingleGenEd/index.tsx b/apps/admin-web/src/module/genEd/components/SingleGenEd/index.tsx new file mode 100644 index 000000000..7226560b0 --- /dev/null +++ b/apps/admin-web/src/module/genEd/components/SingleGenEd/index.tsx @@ -0,0 +1,76 @@ +import { useState } from 'react' +import { toast } from 'react-hot-toast' + +import { ApolloQueryResult } from '@apollo/client' +import DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined' +import MoreVertIcon from '@mui/icons-material/MoreVert' +import IconButton from '@mui/material/IconButton' +import ListItemIcon from '@mui/material/ListItemIcon' +import ListItemText from '@mui/material/ListItemText' +import Menu from '@mui/material/Menu' +import MenuItem from '@mui/material/MenuItem' +import Typography from '@mui/material/Typography' + +import { Exact, GetOverridesQuery, Override, useDeleteOverrideMutation } from '@cgr/codegen' + +import { GenEdRowContainer } from './styled' + +interface SingleGenEdProps { + course: Override + refetchOverrides: ( + variables?: + | Partial< + Exact<{ + [key: string]: never + }> + > + | undefined + ) => Promise> +} + +export default function SingleGenEd({ course, refetchOverrides }: SingleGenEdProps) { + const [deleteOverride] = useDeleteOverrideMutation() + const [anchorEl, setAnchorEl] = useState(null) + const open = Boolean(anchorEl) + const handleClick = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget) + } + const handleClose = () => { + setAnchorEl(null) + } + + const handleDelete = async () => { + handleClose() + const toastId = toast.loading('Deleting Gened...') + await deleteOverride({ + variables: { + courseNo: course.courseNo, + }, + onCompleted(data) { + if (data.deleteOverride) toast.success('Delete GenEd Successfully', { id: toastId }) + else toast.error('Fail to delete GenEd', { id: toastId }) + }, + }) + await refetchOverrides() + } + + return ( + + {course.genEdType} + {course.courseNo} + {course.courseNo} + + + + + + + + + + Delete + + + + ) +} diff --git a/apps/admin-web/src/module/genEd/components/SingleGenEd/styled.tsx b/apps/admin-web/src/module/genEd/components/SingleGenEd/styled.tsx new file mode 100644 index 000000000..c280e0aad --- /dev/null +++ b/apps/admin-web/src/module/genEd/components/SingleGenEd/styled.tsx @@ -0,0 +1,13 @@ +import { styled } from '@mui/material' + +export const GenEdRowContainer = styled('div')({ + display: 'grid', + gridTemplateColumns: '160px 70px 280px 1fr 160px', + columnGap: '30px', + alignItems: 'center', + justifyItems: 'center', + padding: '16px 24px', + fontStyle: 'normal', + fontWeight: '700', + fontSize: '16px', +}) diff --git a/apps/admin-web/src/module/genEd/components/Topbar/index.tsx b/apps/admin-web/src/module/genEd/components/Topbar/index.tsx new file mode 100644 index 000000000..de8b1bf6e --- /dev/null +++ b/apps/admin-web/src/module/genEd/components/Topbar/index.tsx @@ -0,0 +1,50 @@ +import { Dispatch, SetStateAction } from 'react' + +import { ApolloQueryResult } from '@apollo/client' +import { Typography } from '@mui/material' + +import LogoutButton from '@admin-web/common/LogoutButton' + +import { Exact, GetOverridesQuery } from '@cgr/codegen' + +import { LeftContainer, RightContainer, StyledButton, TopbarContainer } from './styled' + +interface TopbarProps { + setOpenAddGenEdDialog: Dispatch> + refetchOverrides: ( + variables?: + | Partial< + Exact<{ + [key: string]: never + }> + > + | undefined + ) => Promise> +} + +export default function Topbar({ setOpenAddGenEdDialog, refetchOverrides }: TopbarProps) { + const handleClick = () => { + setOpenAddGenEdDialog(true) + window.scrollTo({ + top: 0, + behavior: 'smooth', + }) + } + + return ( + + + Gen-ed + + + refetchOverrides()}> + Refresh + + + + Add + + + + + ) +} diff --git a/apps/admin-web/src/module/genEd/components/Topbar/styled.tsx b/apps/admin-web/src/module/genEd/components/Topbar/styled.tsx new file mode 100644 index 000000000..89241a864 --- /dev/null +++ b/apps/admin-web/src/module/genEd/components/Topbar/styled.tsx @@ -0,0 +1,57 @@ +import { Button, styled } from '@mui/material' + +export const GenEdTableHeaderContainer = styled('div')({ + display: 'grid', + gridTemplateColumns: '160px 70px 280px 1fr', + borderBottom: '2px solid #e5e7eb', + columnGap: '30px', + alignItems: 'center', + justifyItems: 'center', + padding: '16px 88px 16px 24px', + fontStyle: 'normal', + fontWeight: '700', + fontSize: '16px', +}) + +export const TopbarContainer = styled(`div`)({ + display: 'flex', + justifyContent: 'space-between', + alignContent: 'center', + padding: '36px 24px', + backgroundColor: '#F2F5F8', + position: 'sticky', + top: '0', + zIndex: '1', + borderBottom: '1px solid #F2F5F8', +}) + +export const LeftContainer = styled(`div`)({ + display: 'flex', + columnGap: '24px', + justifyContent: 'space-between', + alignContent: 'center', +}) + +export const RightContainer = styled(`div`)({ + display: 'flex', + alignContent: 'center', + flexWrap: 'wrap', + columnGap: '24px', + justifyContent: 'space-between', +}) + +export const StyledButton = styled(Button)({ + width: '120px', + height: '40px', + background: '#6B7280', + borderRadius: '8px', + color: '#fff', + fontStyle: 'normal', + fontWeight: '700', + fontSize: '16px', + lineHeight: '24px', + textTransform: 'initial', + '&:hover': { + backgroundColor: '#6B7280', + }, +}) diff --git a/apps/admin-web/src/module/genEd/components/genEdList.tsx b/apps/admin-web/src/module/genEd/components/genEdList.tsx deleted file mode 100644 index badbe8620..000000000 --- a/apps/admin-web/src/module/genEd/components/genEdList.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { - Paper, - Table, - TableBody, - TableCell, - TableContainer, - TableHead, - TableRow, -} from '@mui/material' - -import { Override, useGetOverridesQuery } from '@cgr/codegen' - -import SingleGenEd from './singleGenEd' - -export default function GenEdList() { - const overridesQuery = useGetOverridesQuery() - console.log(overridesQuery) - return ( - - - - - - Academic Year - Course No. - GenEd Type - Semester - Study Program - - - - {overridesQuery.data?.overrides?.map((data: Override) => ( - - ))} - -
-
- - //
- // {overridesQuery.data?.overrides?.map((data: Override) => )} - //
- ) -} diff --git a/apps/admin-web/src/module/genEd/components/singleGenEd.tsx b/apps/admin-web/src/module/genEd/components/singleGenEd.tsx deleted file mode 100644 index 8b0e64aab..000000000 --- a/apps/admin-web/src/module/genEd/components/singleGenEd.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { Checkbox, TableCell, TableRow } from '@mui/material' - -import { Override } from '@cgr/codegen' - -interface SingleGenEdProps { - data: Override -} - -export default function SingleGenEd({ data }: SingleGenEdProps) { - return ( - - - - - {/* TODO: temporarily fixed to fix linter */} - {/* - {data.academicYear} - */} - {data.courseNo} - {/* {data.genEd?.genEdType} - {data.semester} - {data.studyProgram} */} - - ) -} diff --git a/apps/admin-web/src/module/genEd/index.tsx b/apps/admin-web/src/module/genEd/index.tsx index 0f64aa1ca..aa72fd254 100644 --- a/apps/admin-web/src/module/genEd/index.tsx +++ b/apps/admin-web/src/module/genEd/index.tsx @@ -1,11 +1,34 @@ -import { Container } from '@mui/material' +import { useEffect, useState } from 'react' -import GenEdList from '@admin-web/module/genEd/components/genEdList' +import { useRouter } from 'next/router' + +import { useGetOverridesQuery } from '@cgr/codegen' + +import AddGenEdDialog from './components/AddGenEdDialog' +import { GenEdList } from './components/GenEdList' +import { GenEdTableHeader } from './components/GenEdTableHeader' +import Topbar from './components/Topbar' export function GenEdPage() { + const [openAddGenEdDialog, setOpenAddGenEdDialog] = useState(false) + const { + data, + loading, + refetch: refetchOverrides, + networkStatus, + } = useGetOverridesQuery({ notifyOnNetworkStatusChange: true }) + + // TODO: set stale content's color to gray + useEffect(() => { + console.log('Status: ', networkStatus) + }, [networkStatus]) + return ( - - - +
+ + + {openAddGenEdDialog && } + +
) } diff --git a/apps/admin-web/src/module/genEd/styled.tsx b/apps/admin-web/src/module/genEd/styled.tsx new file mode 100644 index 000000000..6800c4d56 --- /dev/null +++ b/apps/admin-web/src/module/genEd/styled.tsx @@ -0,0 +1,18 @@ +import { styled } from '@mui/material' + +export const GenEdTableHeaderContainer = styled('div')({ + display: 'grid', + gridTemplateColumns: '160px 70px 280px 1fr', + borderBottom: '2px solid #e5e7eb', + columnGap: '30px', + alignItems: 'center', + justifyItems: 'center', + padding: '16px 88px 16px 24px', + fontStyle: 'normal', + fontWeight: '700', + fontSize: '16px', + position: 'sticky', + top: '126.8px', + zIndex: '1', + background: 'white', +}) diff --git a/apps/admin-web/src/module/generateToken/index.tsx b/apps/admin-web/src/module/generateToken/index.tsx new file mode 100644 index 000000000..224795d67 --- /dev/null +++ b/apps/admin-web/src/module/generateToken/index.tsx @@ -0,0 +1,45 @@ +import { useEffect } from 'react' +import { toast } from 'react-hot-toast' + +import { CircularProgress } from '@mui/material' +import { useRouter } from 'next/router' + +import { authApi } from '@admin-web/utils/authAxios' + +import { SpinnerContainer } from './styled' + +export function GenerateToken() { + const router = useRouter() + + useEffect(() => { + if (!router) return + + const { code } = router.query + + const getToken = async () => { + try { + if (!code || typeof code !== 'string') { + throw new Error('Code is not defined or is invalid') + } + + await authApi.get('/validateCode', { + params: { + code, + }, + }) + router.push('/pendingReviews') + } catch (err) { + if (err instanceof Error) toast.error(err.message) + else toast.error('Unknown error') + router.push('/login') + } + } + getToken() + }, [router]) + + return ( + + + + ) +} diff --git a/apps/admin-web/src/module/generateToken/styled.ts b/apps/admin-web/src/module/generateToken/styled.ts new file mode 100644 index 000000000..40148036b --- /dev/null +++ b/apps/admin-web/src/module/generateToken/styled.ts @@ -0,0 +1,9 @@ +import { styled } from '@mui/material' + +export const SpinnerContainer = styled('div')({ + display: 'flex', + height: '100vh', + flexWrap: 'wrap', + justifyContent: 'center', + alignContent: 'center', +}) diff --git a/apps/admin-web/src/module/pendingReviews/components/Topbar/components/SelectForm/index.tsx b/apps/admin-web/src/module/pendingReviews/components/Topbar/components/SelectForm/index.tsx new file mode 100644 index 000000000..d14352b38 --- /dev/null +++ b/apps/admin-web/src/module/pendingReviews/components/Topbar/components/SelectForm/index.tsx @@ -0,0 +1,39 @@ +import { ReactNode } from 'react' + +import { FormControl, MenuItem, SelectChangeEvent } from '@mui/material' + +import { StyledInputLabel, StyledSelect } from './styled' + +interface SelectFormProps { + name: string + data: { text: string; value: string }[] + value: string + setValue: React.Dispatch> +} + +export default function SelectForm(props: SelectFormProps) { + const { name, data, value, setValue } = props + + const handleChange = (event: SelectChangeEvent) => { + if (typeof event.target?.value === 'string') setValue(event.target?.value) + } + + return ( + + {name} + + {data.map((d) => ( + + {d.text} + + ))} + + + ) +} diff --git a/apps/admin-web/src/module/pendingReviews/components/Topbar/components/SelectForm/styled.tsx b/apps/admin-web/src/module/pendingReviews/components/Topbar/components/SelectForm/styled.tsx new file mode 100644 index 000000000..57f5bf991 --- /dev/null +++ b/apps/admin-web/src/module/pendingReviews/components/Topbar/components/SelectForm/styled.tsx @@ -0,0 +1,13 @@ +import { InputLabel, Select, styled } from '@mui/material' + +export const StyledSelect = styled(Select)({ + color: '#FFFFFF', + background: '#6B7280', + borderRadius: '8px', + fontWeight: '700', + fontSize: '16px', +}) + +export const StyledInputLabel = styled(InputLabel)({ + color: '#FFFFFF !important', +}) diff --git a/apps/admin-web/src/module/pendingReviews/components/Topbar/index.tsx b/apps/admin-web/src/module/pendingReviews/components/Topbar/index.tsx new file mode 100644 index 000000000..0934dd41d --- /dev/null +++ b/apps/admin-web/src/module/pendingReviews/components/Topbar/index.tsx @@ -0,0 +1,21 @@ +import { Typography } from '@mui/material' + +import LogoutButton from '@admin-web/common/LogoutButton' +import { useAuth } from '@admin-web/context/AuthProvider' + +import { LeftContainer, RightContainer, TopbarContainer } from './styled' + +export default function Topbar() { + const { logout } = useAuth() + + return ( + + + Review Approval + + + + + + ) +} diff --git a/apps/admin-web/src/module/pendingReviews/components/Topbar/styled.tsx b/apps/admin-web/src/module/pendingReviews/components/Topbar/styled.tsx new file mode 100644 index 000000000..846cf2e21 --- /dev/null +++ b/apps/admin-web/src/module/pendingReviews/components/Topbar/styled.tsx @@ -0,0 +1,37 @@ +import { styled } from '@mui/material' + +export const GenEdTableHeaderContainer = styled('div')({ + display: 'grid', + gridTemplateColumns: '160px 70px 280px 1fr', + borderBottom: '2px solid #e5e7eb', + columnGap: '30px', + alignItems: 'center', + justifyItems: 'center', + padding: '16px 88px 16px 24px', + fontStyle: 'normal', + fontWeight: '700', + fontSize: '16px', +}) + +export const TopbarContainer = styled(`div`)({ + display: 'flex', + justifyContent: 'space-between', + alignContent: 'center', + padding: '36px 24px', + backgroundColor: '#F2F5F8', +}) + +export const LeftContainer = styled(`div`)({ + display: 'flex', + columnGap: '24px', + justifyContent: 'space-between', + alignContent: 'center', +}) + +export const RightContainer = styled(`div`)({ + display: 'flex', + columnGap: '24px', + alignContent: 'center', + flexWrap: 'wrap', + justifyContent: 'space-between', +}) diff --git a/apps/admin-web/src/module/pendingReviews/components/pendingReviewHeader.tsx b/apps/admin-web/src/module/pendingReviews/components/pendingReviewHeader.tsx new file mode 100644 index 000000000..b4c11c937 --- /dev/null +++ b/apps/admin-web/src/module/pendingReviews/components/pendingReviewHeader.tsx @@ -0,0 +1,76 @@ +import { + FormControl, + Grid, + InputLabel, + MenuItem, + Select, + TextField, + Typography, +} from '@mui/material' + +export default function PendingReviewHeader() { + return ( + <> + + + Review Approval + + + + + + + Year + + + + + + Sem + + + + + + + + + + + ) +} diff --git a/apps/admin-web/src/module/pendingReviews/components/pendingReviewList.tsx b/apps/admin-web/src/module/pendingReviews/components/pendingReviewList.tsx deleted file mode 100644 index 8916c1d5a..000000000 --- a/apps/admin-web/src/module/pendingReviews/components/pendingReviewList.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { Container, Grid, Skeleton, Typography } from '@mui/material' - -import { useGetPendingReviewsQuery } from '@cgr/codegen' - -import SinglePendingReview from './singlePendingReview' - -export default function PendingReviewsList() { - const reviewQuery = useGetPendingReviewsQuery() - - return ( - <> - - - Reviews - - {reviewQuery.loading ? ( - // Todo: Reduce gaps between each skeleton - // Todo: Add more skeleton (dynamically?) - - - - - - ) : ( - reviewQuery.data?.pendingReviews.map((data) => ( - - )) - )} - - - ) -} diff --git a/apps/admin-web/src/module/pendingReviews/components/singlePendingReview.tsx b/apps/admin-web/src/module/pendingReviews/components/singlePendingReview.tsx index 3fe22f24a..0a428a046 100644 --- a/apps/admin-web/src/module/pendingReviews/components/singlePendingReview.tsx +++ b/apps/admin-web/src/module/pendingReviews/components/singlePendingReview.tsx @@ -1,33 +1,150 @@ -import { useState } from 'react' +import { useEffect, useState } from 'react' +import toast from 'react-hot-toast' -import { Button, Card, CardActions, Typography } from '@mui/material' +import { ApolloQueryResult } from '@apollo/client' +import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline' +import HighlightOffIcon from '@mui/icons-material/HighlightOff' +import StarIcon from '@mui/icons-material/Star' +import { Button, IconButton, Stack, TextField, Typography } from '@mui/material' import DOMPurify from 'isomorphic-dompurify' -import RejectModal from '@admin-web/module/pendingReviews/components/rejectModal' - -import { Review } from '@cgr/codegen' +import { + Exact, + GetPendingReviewsQuery, + Review, + ReviewStatus, + Semester, + useSetReviewStatusMutation, +} from '@cgr/codegen' interface SinglePendingReviewProps { data: Review + refetchReviews: ( + variables?: + | Partial< + Exact<{ + [key: string]: never + }> + > + | undefined + ) => Promise> } -export default function SinglePendingReview({ data }: SinglePendingReviewProps) { - const [open, setOpen] = useState(false) - const handleOpen = () => setOpen(true) - const handleClose = () => setOpen(false) +// TODO: add toast to enhance user experience +// TODO: add error handler +export default function SinglePendingReview({ data, refetchReviews }: SinglePendingReviewProps) { + const [reject, setReject] = useState(false) + const [setReviewStatus, { error: mutateError }] = useSetReviewStatusMutation() + const [rejectionReason, setRejectionReason] = useState('') + const handleReject = () => { + setReject(true) + } + const handleClose = () => setReject(false) + const bgcolor = reject ? '#FFEDD5' : undefined + + useEffect(() => { + if (mutateError) toast.error(mutateError.message) + }, [mutateError]) + + const handleApproved = async () => { + await setReviewStatus({ + variables: { + reviewId: data._id, + status: ReviewStatus.Approved, + }, + }) + await refetchReviews() + toast.success('Approved') + } + + const handleSendReject = async () => { + await setReviewStatus({ + variables: { + reviewId: data._id, + status: ReviewStatus.Rejected, + rejectionReason: rejectionReason, + }, + }) + await refetchReviews() + toast.error('Rejected') + } return ( <> - - 2100101 - {/* Todo: change p tag to highlightHtml */} - - - - - - - + + + + + + {data.rating / 2} + + {data.courseNo} PARAGRAPH WRITING + + + + + + + + + + + + + + + {data.academicYear} + + + + + + {getSemesterName(data.semester as Semester)} + + + + + + + + + {reject && ( + + + Reject Reason + + setRejectionReason(e.target.value)} /> + + + + + + )} ) } + +export const getSemesterName = (semester: Semester) => { + switch (semester) { + case Semester.First: + return 'ภาคต้น' + case Semester.Second: + return 'ภาคปลาย' + case Semester.Third: + return 'ภาคฤดูร้อน' + } +} diff --git a/apps/admin-web/src/module/pendingReviews/index.tsx b/apps/admin-web/src/module/pendingReviews/index.tsx index 94b58424d..ee375d6c1 100644 --- a/apps/admin-web/src/module/pendingReviews/index.tsx +++ b/apps/admin-web/src/module/pendingReviews/index.tsx @@ -1,5 +1,30 @@ -import PendingReviewsList from '@admin-web/module/pendingReviews/components/pendingReviewList' +/* eslint-disable react-hooks/rules-of-hooks */ +import { useEffect, useState } from 'react' + +import { Container } from '@mui/material' + +import { useGetPendingReviewsLazyQuery } from '@cgr/codegen' + +import Topbar from './components/Topbar' +import SinglePendingReview from './components/singlePendingReview' export function PendingReviewsPage() { - return + const [loadMore, { data: lazyData, refetch, called }] = useGetPendingReviewsLazyQuery() + + useEffect(() => { + if (!called) { + loadMore() + } + }, [called, loadMore]) + + return ( +
+ + + {lazyData?.pendingReviews.map((data) => ( + + ))} + +
+ ) } diff --git a/apps/admin-web/src/pages/genEd/index.tsx b/apps/admin-web/src/pages/genEd/[[...slug]].tsx similarity index 100% rename from apps/admin-web/src/pages/genEd/index.tsx rename to apps/admin-web/src/pages/genEd/[[...slug]].tsx diff --git a/apps/admin-web/src/pages/generateToken/index.tsx b/apps/admin-web/src/pages/generateToken/index.tsx new file mode 100644 index 000000000..f12f9d276 --- /dev/null +++ b/apps/admin-web/src/pages/generateToken/index.tsx @@ -0,0 +1 @@ +export { GenerateToken as default } from '@admin-web/module/generateToken' \ No newline at end of file diff --git a/apps/admin-web/src/pages/index.tsx b/apps/admin-web/src/pages/index.tsx index 9ed501c41..19491326b 100644 --- a/apps/admin-web/src/pages/index.tsx +++ b/apps/admin-web/src/pages/index.tsx @@ -7,6 +7,6 @@ export default function Home() { useEffect(() => { router.push('/pendingReviews') - }, []) + }, [router]) return null } diff --git a/apps/admin-web/src/pages/login.tsx b/apps/admin-web/src/pages/login.tsx new file mode 100644 index 000000000..db4f67bcd --- /dev/null +++ b/apps/admin-web/src/pages/login.tsx @@ -0,0 +1,26 @@ +import { useRouter } from 'next/router' + +export default function LoginPage() { + const router = useRouter() + + // TODO: decorate this page + const handleLogin = () => { + const auth_url = new URL(process.env.NEXT_PUBLIC_AUTHORIZE_URL || '') + const response_type = 'code' + const client_id = process.env.NEXT_PUBLIC_CLIENT_ID || '' + const scope = 'openid profile email' + const redirect_uri = process.env.NEXT_PUBLIC_REDIRECT_URI || '' + auth_url.searchParams.append('response_type', response_type) + auth_url.searchParams.append('client_id', client_id) + auth_url.searchParams.append('scope', scope) + auth_url.searchParams.append('redirect_uri', redirect_uri) + router.push(auth_url) + } + + return ( +
+

Login Page

+ +
+ ) +} diff --git a/apps/admin-web/src/services/apollo/index.ts b/apps/admin-web/src/services/apollo/index.ts index f6b51018c..64b26e6f4 100644 --- a/apps/admin-web/src/services/apollo/index.ts +++ b/apps/admin-web/src/services/apollo/index.ts @@ -8,6 +8,9 @@ import { apiUrl } from '@admin-web/services/httpClient' const createHttpLink = () => new BatchHttpLink({ uri: `${apiUrl}/graphql`, + + // For cross-site cookie + credentials: 'include', }) const authLink = setContext(async (_, { headers }) => { @@ -24,6 +27,11 @@ export const client = new ApolloClient({ link: authLink.concat(createHttpLink()), cache: new InMemoryCache(), connectToDevTools: ENVIRONMENT !== 'production', + defaultOptions: { + mutate: { + errorPolicy: 'all', + }, + }, }) export function createApolloServerClient() { diff --git a/apps/admin-web/src/styles/globals.css b/apps/admin-web/src/styles/globals.css index 6057418c2..5394e13ec 100644 --- a/apps/admin-web/src/styles/globals.css +++ b/apps/admin-web/src/styles/globals.css @@ -1,4 +1,8 @@ +@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans+Thai:wght@400;500;700&display=swap'); + * { box-sizing: border-box; margin: 0; + padding: 0; } diff --git a/apps/admin-web/src/utils/authAxios.ts b/apps/admin-web/src/utils/authAxios.ts new file mode 100644 index 000000000..cfcbddbbe --- /dev/null +++ b/apps/admin-web/src/utils/authAxios.ts @@ -0,0 +1,6 @@ +import axios from 'axios' + +export const authApi = axios.create({ + baseURL: process.env.NEXT_PUBLIC_AUTH_URL, + withCredentials: true, +}) diff --git a/packages/codegen/src/generated/index.tsx b/packages/codegen/src/generated/index.tsx index cc3e91df4..7339146ba 100644 --- a/packages/codegen/src/generated/index.tsx +++ b/packages/codegen/src/generated/index.tsx @@ -511,6 +511,13 @@ export type GetOverridesQueryVariables = Exact<{ [key: string]: never; }>; export type GetOverridesQuery = { __typename?: 'Query', overrides: Array<{ __typename?: 'Override', courseNo: string, genEdType: GenEdType }> }; +export type DeleteOverrideMutationVariables = Exact<{ + courseNo: Scalars['String']; +}>; + + +export type DeleteOverrideMutation = { __typename?: 'Mutation', deleteOverride?: { __typename?: 'Override', courseNo: string, genEdType: GenEdType } | null }; + export type CreateReviewMutationVariables = Exact<{ createReviewInput: CreateReviewInput; }>; @@ -562,6 +569,15 @@ export type SetReviewInteractionMutationVariables = Exact<{ export type SetReviewInteractionMutation = { __typename?: 'Mutation', setReviewInteraction: { __typename?: 'Review', _id: string, rating: number, courseNo: string, semester: string, academicYear: string, studyProgram: StudyProgram, content?: string | null, likeCount: number, dislikeCount: number, myInteraction?: ReviewInteractionType | null, status?: ReviewStatus | null, rejectionReason?: string | null, isOwner: boolean } }; +export type SetReviewStatusMutationVariables = Exact<{ + reviewId: Scalars['String']; + status: ReviewStatus; + rejectionReason?: InputMaybe; +}>; + + +export type SetReviewStatusMutation = { __typename?: 'Mutation', setReviewStatus: string }; + export type GetAllCourseNoQueryVariables = Exact<{ filter: FilterInput; courseGroup: CourseGroupInput; @@ -832,6 +848,39 @@ export function useGetOverridesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptio export type GetOverridesQueryHookResult = ReturnType; export type GetOverridesLazyQueryHookResult = ReturnType; export type GetOverridesQueryResult = Apollo.QueryResult; +export const DeleteOverrideDocument = gql` + mutation DeleteOverride($courseNo: String!) { + deleteOverride(courseNo: $courseNo) { + ...OverrideDataFields + } +} + ${OverrideDataFieldsFragmentDoc}`; +export type DeleteOverrideMutationFn = Apollo.MutationFunction; + +/** + * __useDeleteOverrideMutation__ + * + * To run a mutation, you first call `useDeleteOverrideMutation` within a React component and pass it any options that fit your needs. + * When your component renders, `useDeleteOverrideMutation` returns a tuple that includes: + * - A mutate function that you can call at any time to execute the mutation + * - An object with fields that represent the current status of the mutation's execution + * + * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; + * + * @example + * const [deleteOverrideMutation, { data, loading, error }] = useDeleteOverrideMutation({ + * variables: { + * courseNo: // value for 'courseNo' + * }, + * }); + */ +export function useDeleteOverrideMutation(baseOptions?: Apollo.MutationHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useMutation(DeleteOverrideDocument, options); + } +export type DeleteOverrideMutationHookResult = ReturnType; +export type DeleteOverrideMutationResult = Apollo.MutationResult; +export type DeleteOverrideMutationOptions = Apollo.BaseMutationOptions; export const CreateReviewDocument = gql` mutation CreateReview($createReviewInput: CreateReviewInput!) { createReview(createReviewInput: $createReviewInput) { @@ -1072,6 +1121,43 @@ export function useSetReviewInteractionMutation(baseOptions?: Apollo.MutationHoo export type SetReviewInteractionMutationHookResult = ReturnType; export type SetReviewInteractionMutationResult = Apollo.MutationResult; export type SetReviewInteractionMutationOptions = Apollo.BaseMutationOptions; +export const SetReviewStatusDocument = gql` + mutation SetReviewStatus($reviewId: String!, $status: ReviewStatus!, $rejectionReason: String) { + setReviewStatus( + reviewId: $reviewId + status: $status + rejectionReason: $rejectionReason + ) +} + `; +export type SetReviewStatusMutationFn = Apollo.MutationFunction; + +/** + * __useSetReviewStatusMutation__ + * + * To run a mutation, you first call `useSetReviewStatusMutation` within a React component and pass it any options that fit your needs. + * When your component renders, `useSetReviewStatusMutation` returns a tuple that includes: + * - A mutate function that you can call at any time to execute the mutation + * - An object with fields that represent the current status of the mutation's execution + * + * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; + * + * @example + * const [setReviewStatusMutation, { data, loading, error }] = useSetReviewStatusMutation({ + * variables: { + * reviewId: // value for 'reviewId' + * status: // value for 'status' + * rejectionReason: // value for 'rejectionReason' + * }, + * }); + */ +export function useSetReviewStatusMutation(baseOptions?: Apollo.MutationHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useMutation(SetReviewStatusDocument, options); + } +export type SetReviewStatusMutationHookResult = ReturnType; +export type SetReviewStatusMutationResult = Apollo.MutationResult; +export type SetReviewStatusMutationOptions = Apollo.BaseMutationOptions; export const GetAllCourseNoDocument = gql` query GetAllCourseNo($filter: FilterInput!, $courseGroup: CourseGroupInput!) { search(filter: $filter, courseGroup: $courseGroup) { diff --git a/packages/codegen/src/query/override.graphql b/packages/codegen/src/query/override.graphql index 1eb0e56d3..4b3dd71d9 100644 --- a/packages/codegen/src/query/override.graphql +++ b/packages/codegen/src/query/override.graphql @@ -3,3 +3,9 @@ query GetOverrides { ...OverrideDataFields } } + +mutation DeleteOverride($courseNo: String!) { + deleteOverride(courseNo: $courseNo) { + ...OverrideDataFields + } +} diff --git a/packages/codegen/src/query/review.graphql b/packages/codegen/src/query/review.graphql index a1f8acc26..a8e1f91c1 100644 --- a/packages/codegen/src/query/review.graphql +++ b/packages/codegen/src/query/review.graphql @@ -39,3 +39,7 @@ mutation SetReviewInteraction($reviewId: String!, $interactionType: ReviewIntera ...ReviewDataFields } } + +mutation SetReviewStatus($reviewId: String!, $status: ReviewStatus!, $rejectionReason: String) { + setReviewStatus(reviewId: $reviewId, status: $status, rejectionReason: $rejectionReason) +} diff --git a/packages/project-config/eslint/base.js b/packages/project-config/eslint/base.js index 33dcf2c4e..eed699f07 100644 --- a/packages/project-config/eslint/base.js +++ b/packages/project-config/eslint/base.js @@ -23,6 +23,7 @@ const config = { ignorePatterns: [ '.next', 'dist', + 'apps/admin-api/src/graphql.ts', 'apps/api/src/graphql.ts', 'packages/codegen/src/generated/index.tsx', ], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f4a8ce263..03dfd37d5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,13 +25,25 @@ importers: version: 3.0.3 prettier-plugin-organize-imports: specifier: ^3.2.3 - version: 3.2.3(prettier@3.0.3)(typescript@5.2.2) + version: 3.2.3(prettier@3.0.3)(typescript@4.7.4) turbo: specifier: latest version: 1.10.13 apps/admin-api: dependencies: + '@apollo/server': + specifier: ^4.7.1 + version: 4.7.1(graphql@16.6.0) + '@cgr/schema': + specifier: workspace:* + version: link:../../packages/schema + '@nestjs/apollo': + specifier: ^11.0.5 + version: 11.0.5(@apollo/server@4.7.1)(@apollo/subgraph@2.5.3)(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(@nestjs/graphql@11.0.5)(graphql@16.6.0) + '@nestjs/axios': + specifier: ^2.0.0 + version: 2.0.0(@nestjs/common@9.4.0)(axios@0.23.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/cli': specifier: ^9.0.0 version: 9.1.9 @@ -45,8 +57,11 @@ importers: specifier: 9.4.0 version: 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/graphql': - specifier: 7.9.8 - version: 7.9.8(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.3.1)(class-validator@0.14.0)(graphql@15.5.0)(reflect-metadata@0.1.13) + specifier: 11.0.5 + version: 11.0.5(@apollo/subgraph@2.5.3)(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.3.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13)(ts-morph@18.0.0) + '@nestjs/jwt': + specifier: 7.2.0 + version: 7.2.0(@nestjs/common@9.4.0) '@nestjs/mongoose': specifier: 9.2.1 version: 9.2.1(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(mongoose@6.12.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) @@ -59,18 +74,21 @@ importers: '@slack/webhook': specifier: 6.0.0 version: 6.0.0 - '@thinc-org/chula-courses': - specifier: ^2.3.0 - version: 2.3.0 + axios: + specifier: 0.23.0 + version: 0.23.0 class-transformer: specifier: 0.3.1 version: 0.3.1 class-validator: specifier: 0.14.0 version: 0.14.0 + cookie-parser: + specifier: 1.4.6 + version: 1.4.6 graphql: - specifier: 15.5.0 - version: 15.5.0 + specifier: 16.6.0 + version: 16.6.0 mongoose: specifier: 6.12.0 version: 6.12.0 @@ -78,6 +96,9 @@ importers: specifier: ^7.8.0 version: 7.8.0 devDependencies: + '@types/cookie-parser': + specifier: ^1.4.3 + version: 1.4.3 '@types/express': specifier: ^4.17.16 version: 4.17.16 @@ -107,7 +128,7 @@ importers: dependencies: '@apollo/client': specifier: ^3.7.7 - version: 3.7.7(graphql@16.8.0)(react-dom@18.2.0)(react@18.2.0) + version: 3.7.7(graphql@16.6.0)(react-dom@18.2.0)(react@18.2.0) '@cgr/codegen': specifier: workspace:* version: link:../../packages/codegen @@ -116,13 +137,19 @@ importers: version: link:../../packages/course-utils '@emotion/react': specifier: 11.10.4 - version: 11.10.4(@babel/core@7.22.17)(@types/react@18.0.20)(react@18.2.0) + version: 11.10.4(@babel/core@7.20.12)(@types/react@18.0.20)(react@18.2.0) '@emotion/styled': specifier: 11.10.4 - version: 11.10.4(@babel/core@7.22.17)(@emotion/react@11.10.4)(@types/react@18.0.20)(react@18.2.0) + version: 11.10.4(@babel/core@7.20.12)(@emotion/react@11.10.4)(@types/react@18.0.20)(react@18.2.0) + '@mui/icons-material': + specifier: 5.8.4 + version: 5.8.4(@mui/material@5.9.1)(@types/react@18.0.20)(react@18.2.0) '@mui/material': specifier: 5.9.1 version: 5.9.1(@emotion/react@11.10.4)(@emotion/styled@11.10.4)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) + '@mui/styled-engine-sc': + specifier: ^5.11.0 + version: 5.11.0(styled-components@5.3.5) '@next/font': specifier: 13.1.6 version: 13.1.6 @@ -134,13 +161,16 @@ importers: version: 0.20.0(canvas@2.11.0) next: specifier: ^13.0.0 - version: 13.1.6(@babel/core@7.22.17)(react-dom@18.2.0)(react@18.2.0) + version: 13.1.6(@babel/core@7.20.12)(react-dom@18.2.0)(react@18.2.0) react: specifier: 18.2.0 version: 18.2.0 react-dom: specifier: 18.2.0 version: 18.2.0(react@18.2.0) + react-hot-toast: + specifier: 2.3.0 + version: 2.3.0(csstype@3.1.1)(react-dom@18.2.0)(react@18.2.0) styled-components: specifier: 5.3.5 version: 5.3.5(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) @@ -177,7 +207,7 @@ importers: version: 0.6.7 '@nestjs/apollo': specifier: ^11.0.5 - version: 11.0.5(@apollo/server@4.7.1)(@apollo/subgraph@2.5.4)(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(@nestjs/graphql@11.0.5)(graphql@16.6.0) + version: 11.0.5(@apollo/server@4.7.1)(@apollo/subgraph@2.5.3)(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(@nestjs/graphql@11.0.5)(graphql@16.6.0) '@nestjs/common': specifier: 9.4.0 version: 9.4.0(class-transformer@0.3.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) @@ -189,7 +219,7 @@ importers: version: 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/graphql': specifier: 11.0.5 - version: 11.0.5(@apollo/subgraph@2.5.4)(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.3.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13)(ts-morph@18.0.0) + version: 11.0.5(@apollo/subgraph@2.5.3)(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.3.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13)(ts-morph@18.0.0) '@nestjs/jwt': specifier: 7.2.0 version: 7.2.0(@nestjs/common@9.4.0) @@ -286,7 +316,7 @@ importers: version: 28.1.3(@types/node@18.11.18) ts-jest: specifier: 28.0.8 - version: 28.0.8(@babel/core@7.22.17)(jest@28.1.3)(typescript@4.7.4) + version: 28.0.8(@babel/core@7.20.12)(jest@28.1.3)(typescript@4.7.4) ts-morph: specifier: ^18.0.0 version: 18.0.0 @@ -395,7 +425,7 @@ importers: dependencies: '@apollo/client': specifier: 3.6.9 - version: 3.6.9(graphql@16.8.0)(react@18.2.0) + version: 3.6.9(graphql@16.6.0)(react@18.2.0) '@cgr/codegen': specifier: workspace:* version: link:../../packages/codegen @@ -410,13 +440,13 @@ importers: version: 1.2.0 '@emotion/react': specifier: 11.10.4 - version: 11.10.4(@babel/core@7.22.17)(@types/react@18.0.20)(react@18.2.0) + version: 11.10.4(@babel/core@7.20.12)(@types/react@18.0.20)(react@18.2.0) '@emotion/server': specifier: 11.10.0 version: 11.10.0 '@emotion/styled': specifier: 11.10.4 - version: 11.10.4(@babel/core@7.22.17)(@emotion/react@11.10.4)(@types/react@18.0.20)(react@18.2.0) + version: 11.10.4(@babel/core@7.20.12)(@emotion/react@11.10.4)(@types/react@18.0.20)(react@18.2.0) '@emotion/utils': specifier: 1.2.0 version: 1.2.0 @@ -452,7 +482,7 @@ importers: version: 8.3.0(react-dom@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0) '@udecode/plate-code-block-ui': specifier: 8.3.0 - version: 8.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0)(styled-components@5.3.5) + version: 8.3.0(@popperjs/core@2.11.6)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0)(styled-components@5.3.5) '@udecode/plate-core': specifier: 8.3.0 version: 8.3.0(react-dom@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0) @@ -467,7 +497,7 @@ importers: version: 8.3.0(react-dom@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0) '@udecode/plate-list-ui': specifier: 8.3.0 - version: 8.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0)(styled-components@5.3.5) + version: 8.3.0(@popperjs/core@2.11.6)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0)(styled-components@5.3.5) '@udecode/plate-paragraph': specifier: 8.3.0 version: 8.3.0(react-dom@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0) @@ -479,7 +509,7 @@ importers: version: 8.3.0(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0)(styled-components@5.3.5) '@udecode/plate-toolbar': specifier: 8.3.0 - version: 8.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0)(styled-components@5.3.5) + version: 8.3.0(@popperjs/core@2.11.6)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0)(styled-components@5.3.5) axios: specifier: 0.23.0 version: 0.23.0 @@ -521,13 +551,13 @@ importers: version: 6.0.5(mobx@6.6.1) next: specifier: ^13.0.0 - version: 13.0.0(@babel/core@7.22.17)(react-dom@18.2.0)(react@18.2.0) + version: 13.0.0(@babel/core@7.20.12)(react-dom@18.2.0)(react@18.2.0) next-seo: specifier: ^5.15.0 version: 5.15.0(next@13.0.0)(react-dom@18.2.0)(react@18.2.0) next-sitemap: specifier: ^3.1.47 - version: 3.1.47(@next/env@13.4.19)(next@13.0.0) + version: 3.1.47(@next/env@13.1.6)(next@13.0.0) nprogress: specifier: ^0.2.0 version: 0.2.0 @@ -548,7 +578,7 @@ importers: version: 7.33.1(react@18.2.0) react-hot-toast: specifier: 2.3.0 - version: 2.3.0(csstype@3.1.2)(react-dom@18.2.0)(react@18.2.0) + version: 2.3.0(csstype@3.1.1)(react-dom@18.2.0)(react@18.2.0) react-i18next: specifier: 11.8.1 version: 11.8.1(i18next@21.9.0)(react@18.2.0) @@ -663,22 +693,22 @@ importers: dependencies: '@apollo/client': specifier: 3.7.7 - version: 3.7.7(graphql@16.8.0)(react-dom@18.2.0)(react@18.2.0) + version: 3.7.7(graphql@16.6.0)(react-dom@18.2.0)(react@18.2.0) '@graphql-codegen/cli': specifier: 3.0.0 - version: 3.0.0(@babel/core@7.22.17)(@types/node@18.17.15)(graphql@16.8.0)(typescript@5.2.2) + version: 3.0.0(@babel/core@7.20.12)(@types/node@18.11.18)(graphql@16.6.0)(typescript@4.7.4) '@graphql-codegen/typescript': specifier: 3.0.0 - version: 3.0.0(graphql@16.8.0) + version: 3.0.0(graphql@16.6.0) '@graphql-codegen/typescript-operations': specifier: 3.0.0 - version: 3.0.0(graphql@16.8.0) + version: 3.0.0(graphql@16.6.0) '@graphql-codegen/typescript-react-apollo': specifier: 3.3.7 - version: 3.3.7(graphql-tag@2.12.6)(graphql@16.8.0) + version: 3.3.7(graphql-tag@2.12.6)(graphql@16.6.0) graphql-tag: specifier: 2.12.6 - version: 2.12.6(graphql@16.8.0) + version: 2.12.6(graphql@16.6.0) devDependencies: eslint: specifier: 8.49.0 @@ -701,16 +731,16 @@ importers: version: 4.2.0(prettier@3.0.3) '@typescript-eslint/eslint-plugin': specifier: ^6.7.0 - version: 6.7.0(@typescript-eslint/parser@6.7.0)(eslint@8.49.0)(typescript@5.2.2) + version: 6.7.0(@typescript-eslint/parser@6.7.0)(eslint@8.49.0)(typescript@4.7.4) '@typescript-eslint/parser': specifier: ^6.7.0 - version: 6.7.0(eslint@8.49.0)(typescript@5.2.2) + version: 6.7.0(eslint@8.49.0)(typescript@4.7.4) eslint: specifier: 8.49.0 version: 8.49.0 eslint-config-next: specifier: 13.0.0 - version: 13.0.0(eslint@8.49.0)(typescript@5.2.2) + version: 13.0.0(eslint@8.49.0)(typescript@4.7.4) eslint-config-prettier: specifier: ^9.0.0 version: 9.0.0(eslint@8.49.0) @@ -754,13 +784,6 @@ packages: '@jridgewell/gen-mapping': 0.1.1 '@jridgewell/trace-mapping': 0.3.17 - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 - /@angular-devkit/core@15.0.4(chokidar@3.5.3): resolution: {integrity: sha512-4ITpRAevd652SxB+qNesIQ9qfbm7wT5UBU5kJOPPwGL77I21g8CQpkmV1n5VSacPvC9Zbz90feOWexf7w7JzcA==} engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -811,7 +834,7 @@ packages: graphql: 16.6.0 dev: false - /@apollo/client@3.6.9(graphql@16.8.0)(react@18.2.0): + /@apollo/client@3.6.9(graphql@16.6.0)(react@18.2.0): resolution: {integrity: sha512-Y1yu8qa2YeaCUBVuw08x8NHenFi0sw2I3KCu7Kw9mDSu86HmmtHJkCAifKVrN2iPgDTW/BbP3EpSV8/EQCcxZA==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 @@ -826,12 +849,12 @@ packages: subscriptions-transport-ws: optional: true dependencies: - '@graphql-typed-document-node/core': 3.1.1(graphql@16.8.0) + '@graphql-typed-document-node/core': 3.1.1(graphql@16.6.0) '@wry/context': 0.6.1 '@wry/equality': 0.5.3 '@wry/trie': 0.3.2 - graphql: 16.8.0 - graphql-tag: 2.12.6(graphql@16.8.0) + graphql: 16.6.0 + graphql-tag: 2.12.6(graphql@16.6.0) hoist-non-react-statics: 3.3.2 optimism: 0.16.2 prop-types: 15.8.1 @@ -842,7 +865,7 @@ packages: zen-observable-ts: 1.2.5 dev: false - /@apollo/client@3.7.7(graphql@16.8.0)(react-dom@18.2.0)(react@18.2.0): + /@apollo/client@3.7.7(graphql@16.6.0)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Rp/pCWuJSjLN7Xl5Qi2NoeURmZYEU/TIUz0n/LOwEo1tGdU2W7/fGVZ8+5um58JeVYq4UoTGBKFxSVeG4s411A==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 @@ -860,12 +883,12 @@ packages: subscriptions-transport-ws: optional: true dependencies: - '@graphql-typed-document-node/core': 3.1.1(graphql@16.8.0) + '@graphql-typed-document-node/core': 3.1.1(graphql@16.6.0) '@wry/context': 0.7.0 '@wry/equality': 0.5.3 '@wry/trie': 0.3.2 - graphql: 16.8.0 - graphql-tag: 2.12.6(graphql@16.8.0) + graphql: 16.6.0 + graphql-tag: 2.12.6(graphql@16.6.0) hoist-non-react-statics: 3.3.2 optimism: 0.16.2 prop-types: 15.8.1 @@ -878,90 +901,19 @@ packages: zen-observable-ts: 1.2.5 dev: false - /@apollo/federation-internals@2.5.4(graphql@16.6.0): - resolution: {integrity: sha512-SJCbP90KNlk6QJqUfvBrL/PdYzXKz3aZx2vP2kqJE9Ccc6UrUVrI70XuJ09o6n080sgCArDTC9+ngjdh6P5vTg==} + /@apollo/federation-internals@2.5.3(graphql@16.6.0): + resolution: {integrity: sha512-KHYpXa9XudQmbp5NX7wEEj0bxTkJIGtmKkZnOsKW9jDvHXurV/QTfzMDRqPVExMn+mdEVPTN3nySIp6vVhcs1Q==} engines: {node: '>=14.15.0'} peerDependencies: graphql: ^16.5.0 dependencies: - '@types/uuid': 9.0.3 + '@types/uuid': 9.0.0 chalk: 4.1.2 graphql: 16.6.0 js-levenshtein: 1.1.6 uuid: 9.0.0 dev: false - /@apollo/federation@0.17.0(graphql@15.5.0): - resolution: {integrity: sha512-vSW/M8+SGdu5xALsA/RL37GgB+wNFZpXCyPAcg3b68c8x7uoQHgYwqwUu7D+GnAGeOpDUrNnFPdKAYW7elYkyQ==} - engines: {node: '>=8'} - deprecated: The @apollo/federation package is deprecated and will reach end-of-life September 22, 2023. It contains outdated utilities for both running subgraphs and composing supergraph schemas. Please migrate to the appropriate package for your use case (@apollo/subgraph or @apollo/composition). For more details, see our announcement blog post (https://www.apollographql.com/blog/announcement/backend/announcing-the-end-of-life-schedule-for-apollo-gateway-v0-x/) and documentation (https://www.apollographql.com/docs/federation/federation-2/backward-compatibility/#is-official-support-ending-for-apollogateway-v0x). - requiresBuild: true - peerDependencies: - graphql: ^14.5.0 || ^15.0.0 - dependencies: - apollo-graphql: 0.4.5(graphql@15.5.0) - apollo-server-env: 2.4.5 - core-js: 3.27.2 - graphql: 15.5.0 - lodash.xorby: 4.7.0 - transitivePeerDependencies: - - encoding - dev: false - optional: true - - /@apollo/gateway@0.17.0(graphql@15.5.0): - resolution: {integrity: sha512-r6xr0ljiyGqMuGCrNosTq+lSrWQgFAi9+51ODfJaEZ2xEaEIRrKGfJ04N1RrPN0vcWGvnUAZAgO9jL7oEQ1lCg==} - engines: {node: '>=12.13.0'} - deprecated: All v0.x versions of @apollo/gateway are now deprecated (end-of-life September 22, 2023). Apollo recommends upgrading to v2.x or migrating to the Apollo Router as soon as possible. For more details, see our announcement blog post (https://www.apollographql.com/blog/announcement/backend/announcing-the-end-of-life-schedule-for-apollo-gateway-v0-x/) and documentation (https://www.apollographql.com/docs/federation/federation-2/backward-compatibility/#is-official-support-ending-for-apollogateway-v0x). - requiresBuild: true - peerDependencies: - graphql: ^14.5.0 || ^15.0.0 - dependencies: - '@apollo/federation': 0.17.0(graphql@15.5.0) - '@types/node-fetch': 2.5.4 - apollo-engine-reporting-protobuf: 0.5.2 - apollo-env: 0.6.5 - apollo-graphql: 0.4.5(graphql@15.5.0) - apollo-server-caching: 0.5.3 - apollo-server-core: 2.26.1(graphql@15.5.0) - apollo-server-env: 2.4.5 - apollo-server-errors: 2.5.0(graphql@15.5.0) - apollo-server-types: 0.5.1(graphql@15.5.0) - graphql: 15.5.0 - graphql-extensions: 0.12.8(graphql@15.5.0) - loglevel: 1.8.1 - make-fetch-happen: 8.0.14 - pretty-format: 26.6.2 - transitivePeerDependencies: - - bluebird - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: false - optional: true - - /@apollo/protobufjs@1.2.2: - resolution: {integrity: sha512-vF+zxhPiLtkwxONs6YanSt1EpwpGilThpneExUN5K3tCymuxNnVq2yojTvnpRjv2QfsEIt/n7ozPIIzBLwGIDQ==} - hasBin: true - requiresBuild: true - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.4 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.0 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.0 - '@types/long': 4.0.2 - '@types/node': 10.17.60 - long: 4.0.0 - dev: false - optional: true - /@apollo/protobufjs@1.2.7: resolution: {integrity: sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg==} hasBin: true @@ -1042,14 +994,14 @@ packages: - supports-color dev: false - /@apollo/subgraph@2.5.4(graphql@16.6.0): - resolution: {integrity: sha512-6F7D36C2fhy54hZLqcqVhFat5/7QuZJaTjeVUYTbnl3vMx5KSaCdRh30gdfn2V8lNoekmcLGRvVBc4PzBOO5jw==} + /@apollo/subgraph@2.5.3(graphql@16.6.0): + resolution: {integrity: sha512-OaRyJmB4nI3JfAZs6RA5vd+AHMMEMRWBx5Ns0iDhkm/KEZqj5dcD0Vsyu9vCJm3zyAfYClHC3ZUlxSKYRDi/zQ==} engines: {node: '>=14.15.0'} peerDependencies: graphql: ^16.5.0 dependencies: '@apollo/cache-control-types': 1.0.3(graphql@16.6.0) - '@apollo/federation-internals': 2.5.4(graphql@16.6.0) + '@apollo/federation-internals': 2.5.3(graphql@16.6.0) graphql: 16.6.0 dev: false @@ -1156,75 +1108,13 @@ packages: engines: {node: '>=14'} dev: false - /@apollographql/apollo-tools@0.4.14(graphql@15.5.0): - resolution: {integrity: sha512-oTTq9G3rC47H/xd6MEtLgpbXNUbsu0WpclJ5RjSARJvUd7jKwmwUABr9g1EG68tK7pCdCRU93QL3WQT0XWhDcw==} - engines: {node: '>=8', npm: '>=6'} - peerDependencies: - graphql: ^14.2.1 || ^15.0.0 - dependencies: - apollo-env: 0.9.2 - graphql: 15.5.0 - transitivePeerDependencies: - - encoding - dev: false - - /@apollographql/apollo-tools@0.5.4(graphql@15.5.0): - resolution: {integrity: sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw==} - engines: {node: '>=8', npm: '>=6'} - requiresBuild: true - peerDependencies: - graphql: ^14.2.1 || ^15.0.0 || ^16.0.0 - dependencies: - graphql: 15.5.0 - dev: false - optional: true - - /@apollographql/graphql-playground-html@1.6.26: - resolution: {integrity: sha512-XAwXOIab51QyhBxnxySdK3nuMEUohhDsHQ5Rbco/V1vjlP75zZ0ZLHD9dTpXTN8uxKxopb2lUvJTq+M4g2Q0HQ==} - dependencies: - xss: 1.0.14 - dev: false - - /@apollographql/graphql-playground-html@1.6.27: - resolution: {integrity: sha512-tea2LweZvn6y6xFV11K0KC8ETjmm52mQrW+ezgB2O/aTQf8JGyFmMcRPFgUaQZeHbWdm8iisDC6EjOKsXu0nfw==} - requiresBuild: true - dependencies: - xss: 1.0.14 - dev: false - optional: true - /@apollographql/graphql-playground-html@1.6.29: resolution: {integrity: sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA==} dependencies: xss: 1.0.14 dev: false - /@apollographql/graphql-upload-8-fork@8.1.4(graphql@15.5.0): - resolution: {integrity: sha512-lHAj/PUegYu02zza9Pg0bQQYH5I0ah1nyIzu2YIqOv41P0vu3GCBISAmQCfFHThK7N3dy7dLFPhoKcXlXRLPoQ==} - engines: {node: '>=8.5'} - requiresBuild: true - peerDependencies: - graphql: 0.13.1 - 15 - dependencies: - '@types/express': 4.17.16 - '@types/fs-capacitor': 2.0.0 - '@types/koa': 2.13.5 - busboy: 0.3.1 - fs-capacitor: 2.0.4 - graphql: 15.5.0 - http-errors: 1.8.1 - object-path: 0.11.8 - dev: false - optional: true - - /@ardatan/aggregate-error@0.0.6: - resolution: {integrity: sha512-vyrkEHG1jrukmzTPtyWB4NLPauUw5bQeg4uhn8f+1SSynmrOcyvlb1GKQjjgoBzElLdfXCRYX8UnBlhklOHYRQ==} - engines: {node: '>=8'} - dependencies: - tslib: 2.0.3 - dev: false - - /@ardatan/relay-compiler@12.0.0(graphql@16.8.0): + /@ardatan/relay-compiler@12.0.0(graphql@16.6.0): resolution: {integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==} hasBin: true peerDependencies: @@ -1232,16 +1122,16 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/generator': 7.20.7 - '@babel/parser': 7.20.13 + '@babel/parser': 7.22.11 '@babel/runtime': 7.20.13 '@babel/traverse': 7.20.13(supports-color@5.5.0) - '@babel/types': 7.20.7 + '@babel/types': 7.22.11 babel-preset-fbjs: 3.4.0(@babel/core@7.20.12) chalk: 4.1.2 fb-watchman: 2.0.2 fbjs: 3.0.5 glob: 7.2.3 - graphql: 16.8.0 + graphql: 16.6.0 immutable: 3.7.6 invariant: 2.2.4 nullthrows: 1.1.1 @@ -1791,14 +1681,6 @@ packages: dependencies: '@babel/highlight': 7.22.10 chalk: 2.4.2 - dev: false - - /@babel/code-frame@7.22.13: - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.22.13 - chalk: 2.4.2 /@babel/compat-data@7.20.10: resolution: {integrity: sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==} @@ -1807,43 +1689,22 @@ packages: /@babel/compat-data@7.22.9: resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} engines: {node: '>=6.9.0'} + dev: false /@babel/core@7.20.12: resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.0 - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.10 '@babel/generator': 7.20.7 '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.20.12) '@babel/helper-module-transforms': 7.20.11 '@babel/helpers': 7.20.13 - '@babel/parser': 7.20.13 - '@babel/template': 7.20.7 + '@babel/parser': 7.22.11 + '@babel/template': 7.22.5 '@babel/traverse': 7.20.13(supports-color@5.5.0) - '@babel/types': 7.20.7 - convert-source-map: 1.9.0 - debug: 4.3.4(supports-color@5.5.0) - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - /@babel/core@7.22.17: - resolution: {integrity: sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.22.15 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.22.17(@babel/core@7.22.17) - '@babel/helpers': 7.22.15 - '@babel/parser': 7.22.16 - '@babel/template': 7.22.15 - '@babel/traverse': 7.22.17 - '@babel/types': 7.22.17 + '@babel/types': 7.22.11 convert-source-map: 1.9.0 debug: 4.3.4(supports-color@5.5.0) gensync: 1.0.0-beta.2 @@ -1856,7 +1717,7 @@ packages: resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.17.0 + '@babel/types': 7.22.11 jsesc: 2.5.2 source-map: 0.5.7 dev: true @@ -1865,24 +1726,15 @@ packages: resolution: {integrity: sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.22.11 '@jridgewell/gen-mapping': 0.3.2 jsesc: 2.5.2 - /@babel/generator@7.22.15: - resolution: {integrity: sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.17 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 - jsesc: 2.5.2 - /@babel/helper-annotate-as-pure@7.18.6: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.22.11 dev: false /@babel/helper-annotate-as-pure@7.22.5: @@ -1916,16 +1768,6 @@ packages: semver: 6.3.1 dev: false - /@babel/helper-compilation-targets@7.22.15: - resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.22.9 - '@babel/helper-validator-option': 7.22.15 - browserslist: 4.21.10 - lru-cache: 5.1.1 - semver: 6.3.1 - /@babel/helper-create-class-features-plugin@7.22.11(@babel/core@7.20.12): resolution: {integrity: sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==} engines: {node: '>=6.9.0'} @@ -1957,26 +1799,20 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.20.7 - '@babel/types': 7.20.7 + '@babel/types': 7.22.11 /@babel/helper-function-name@7.22.5: resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.22.17 + '@babel/template': 7.22.5 + '@babel/types': 7.22.11 /@babel/helper-hoist-variables@7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 - - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.17 + '@babel/types': 7.22.11 /@babel/helper-member-expression-to-functions@7.22.5: resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} @@ -1989,13 +1825,7 @@ packages: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 - - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.17 + '@babel/types': 7.22.11 /@babel/helper-module-imports@7.22.5: resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} @@ -2008,30 +1838,17 @@ packages: resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-module-imports': 7.18.6 '@babel/helper-simple-access': 7.20.2 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/helper-validator-identifier': 7.19.1 - '@babel/template': 7.20.7 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.5 + '@babel/template': 7.22.5 '@babel/traverse': 7.20.13(supports-color@5.5.0) - '@babel/types': 7.20.7 + '@babel/types': 7.22.11 transitivePeerDependencies: - supports-color - /@babel/helper-module-transforms@7.22.17(@babel/core@7.22.17): - resolution: {integrity: sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.22.17 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.15 - /@babel/helper-module-transforms@7.22.9(@babel/core@7.20.12): resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} engines: {node: '>=6.9.0'} @@ -2078,13 +1895,14 @@ packages: resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.22.11 /@babel/helper-simple-access@7.22.5: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.11 + dev: false /@babel/helper-skip-transparent-expression-wrappers@7.22.5: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} @@ -2097,30 +1915,23 @@ packages: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.22.11 /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.17 + '@babel/types': 7.22.11 /@babel/helper-string-parser@7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} + dev: false /@babel/helper-string-parser@7.22.5: resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.19.1: - resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} - engines: {node: '>=6.9.0'} - - /@babel/helper-validator-identifier@7.22.15: - resolution: {integrity: sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==} - engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.22.5: resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} engines: {node: '>=6.9.0'} @@ -2129,10 +1940,6 @@ packages: resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option@7.22.15: - resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} - engines: {node: '>=6.9.0'} - /@babel/helper-validator-option@7.22.5: resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} engines: {node: '>=6.9.0'} @@ -2142,19 +1949,9 @@ packages: resolution: {integrity: sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.20.7 + '@babel/template': 7.22.5 '@babel/traverse': 7.20.13(supports-color@5.5.0) - '@babel/types': 7.20.7 - transitivePeerDependencies: - - supports-color - - /@babel/helpers@7.22.15: - resolution: {integrity: sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.22.17 - '@babel/types': 7.22.17 + '@babel/types': 7.22.11 transitivePeerDependencies: - supports-color @@ -2162,7 +1959,7 @@ packages: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-validator-identifier': 7.22.5 chalk: 2.4.2 js-tokens: 4.0.0 @@ -2173,22 +1970,6 @@ packages: '@babel/helper-validator-identifier': 7.22.5 chalk: 2.4.2 js-tokens: 4.0.0 - dev: false - - /@babel/highlight@7.22.13: - resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.15 - chalk: 2.4.2 - js-tokens: 4.0.0 - - /@babel/parser@7.20.13: - resolution: {integrity: sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.20.7 /@babel/parser@7.22.11: resolution: {integrity: sha512-R5zb8eJIBPJriQtbH/htEQy4k7E2dHWlD2Y2VT07JCzwYZHBxV5ZYtM0UhXSNMT74LyxuM+b1jdL7pSesXbC/g==} @@ -2196,14 +1977,6 @@ packages: hasBin: true dependencies: '@babel/types': 7.22.11 - dev: false - - /@babel/parser@7.22.16: - resolution: {integrity: sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.17.0 /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} @@ -2266,13 +2039,13 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.17): + /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.20.12): resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.17 + '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.22.5 dev: false @@ -2304,16 +2077,6 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: false - /@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.22.17): - resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.17 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.20.12): resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} engines: {node: '>=6.9.0'} @@ -2627,17 +2390,9 @@ packages: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 - '@babel/parser': 7.20.13 - '@babel/types': 7.20.7 - - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.13 - '@babel/parser': 7.22.16 - '@babel/types': 7.22.17 + '@babel/code-frame': 7.22.10 + '@babel/parser': 7.22.11 + '@babel/types': 7.22.11 /@babel/template@7.22.5: resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} @@ -2646,21 +2401,20 @@ packages: '@babel/code-frame': 7.22.10 '@babel/parser': 7.22.11 '@babel/types': 7.22.11 - dev: false /@babel/traverse@7.17.3: resolution: {integrity: sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.17.7 + '@babel/code-frame': 7.22.10 + '@babel/generator': 7.20.7 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 - '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.22.16 - '@babel/types': 7.17.0 - debug: 4.3.4 + '@babel/parser': 7.22.11 + '@babel/types': 7.22.11 + debug: 4.3.4(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -2676,44 +2430,29 @@ packages: '@babel/helper-function-name': 7.19.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.20.13 - '@babel/types': 7.20.7 + '@babel/parser': 7.22.11 + '@babel/types': 7.22.11 debug: 4.3.4(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/traverse@7.22.17: - resolution: {integrity: sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==} + /@babel/types@7.17.0: + resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.22.15 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.22.16 - '@babel/types': 7.22.17 - debug: 4.3.4(supports-color@5.5.0) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - /@babel/types@7.17.0: - resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.15 + '@babel/helper-validator-identifier': 7.22.5 to-fast-properties: 2.0.0 + dev: true /@babel/types@7.20.7: resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.19.4 - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-validator-identifier': 7.22.5 to-fast-properties: 2.0.0 + dev: false /@babel/types@7.22.11: resolution: {integrity: sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==} @@ -2723,14 +2462,6 @@ packages: '@babel/helper-validator-identifier': 7.22.5 to-fast-properties: 2.0.0 - /@babel/types@7.22.17: - resolution: {integrity: sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.15 - to-fast-properties: 2.0.0 - /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true @@ -2961,24 +2692,14 @@ packages: kuler: 2.0.0 dev: false - /@dsherret/to-absolute-glob@2.0.2: - resolution: {integrity: sha512-InCaQ/KEOcFtAFztn47wadritBLP2nT6m/ucbBnIgI5YwxuMzKKCHtqazR2+D1yR6y1ZTnPea9aLFEUrTttUSQ==} - engines: {node: '>=0.10.0'} - requiresBuild: true - dependencies: - is-absolute: 1.0.0 - is-negated-glob: 1.0.0 - dev: false - optional: true - - /@emotion/babel-plugin@11.10.5(@babel/core@7.22.17): + /@emotion/babel-plugin@11.10.5(@babel/core@7.20.12): resolution: {integrity: sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.17 + '@babel/core': 7.20.12 '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.17) + '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.20.12) '@babel/runtime': 7.20.13 '@emotion/hash': 0.9.0 '@emotion/memoize': 0.8.0 @@ -3043,7 +2764,7 @@ packages: resolution: {integrity: sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==} dev: false - /@emotion/react@11.10.4(@babel/core@7.22.17)(@types/react@18.0.20)(react@18.2.0): + /@emotion/react@11.10.4(@babel/core@7.20.12)(@types/react@18.0.20)(react@18.2.0): resolution: {integrity: sha512-j0AkMpr6BL8gldJZ6XQsQ8DnS9TxEQu1R+OGmDZiWjBAJtCcbt0tS3I/YffoqHXxH6MjgI7KdMbYKw3MEiU9eA==} peerDependencies: '@babel/core': ^7.0.0 @@ -3055,9 +2776,9 @@ packages: '@types/react': optional: true dependencies: - '@babel/core': 7.22.17 + '@babel/core': 7.20.12 '@babel/runtime': 7.20.13 - '@emotion/babel-plugin': 11.10.5(@babel/core@7.22.17) + '@emotion/babel-plugin': 11.10.5(@babel/core@7.20.12) '@emotion/cache': 11.10.5 '@emotion/serialize': 1.1.1 '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0) @@ -3096,7 +2817,7 @@ packages: resolution: {integrity: sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==} dev: false - /@emotion/styled@11.10.4(@babel/core@7.22.17)(@emotion/react@11.10.4)(@types/react@18.0.20)(react@18.2.0): + /@emotion/styled@11.10.4(@babel/core@7.20.12)(@emotion/react@11.10.4)(@types/react@18.0.20)(react@18.2.0): resolution: {integrity: sha512-pRl4R8Ez3UXvOPfc2bzIoV8u9P97UedgHS4FPX594ntwEuAMA114wlaHvOK24HB48uqfXiGlYIZYCxVJ1R1ttQ==} peerDependencies: '@babel/core': ^7.0.0 @@ -3109,11 +2830,11 @@ packages: '@types/react': optional: true dependencies: - '@babel/core': 7.22.17 + '@babel/core': 7.20.12 '@babel/runtime': 7.20.13 - '@emotion/babel-plugin': 11.10.5(@babel/core@7.22.17) + '@emotion/babel-plugin': 11.10.5(@babel/core@7.20.12) '@emotion/is-prop-valid': 1.2.0 - '@emotion/react': 11.10.4(@babel/core@7.22.17)(@types/react@18.0.20)(react@18.2.0) + '@emotion/react': 11.10.4(@babel/core@7.20.12)(@types/react@18.0.20)(react@18.2.0) '@emotion/serialize': 1.1.1 '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0) '@emotion/utils': 1.2.0 @@ -3173,9 +2894,9 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) espree: 9.6.1 - globals: 13.21.0 + globals: 13.19.0 ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -3190,13 +2911,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@gar/promisify@1.1.3: - resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} - requiresBuild: true - dev: false - optional: true - - /@graphql-codegen/cli@3.0.0(@babel/core@7.22.17)(@types/node@18.17.15)(graphql@16.8.0)(typescript@5.2.2): + /@graphql-codegen/cli@3.0.0(@babel/core@7.20.12)(@types/node@18.11.18)(graphql@16.6.0)(typescript@4.7.4): resolution: {integrity: sha512-16nuFabHCfPQ/d+v52OvR1ueL8eiJvS/nRuvuEV8d9T1fkborHKRw4lhyKVebu9izFBs6G0CvVCLhgVzQwHSLw==} hasBin: true peerDependencies: @@ -3205,27 +2920,27 @@ packages: '@babel/generator': 7.20.7 '@babel/template': 7.20.7 '@babel/types': 7.20.7 - '@graphql-codegen/core': 3.1.0(graphql@16.8.0) - '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.8.0) - '@graphql-tools/apollo-engine-loader': 7.3.26(graphql@16.8.0) - '@graphql-tools/code-file-loader': 7.3.23(@babel/core@7.22.17)(graphql@16.8.0) - '@graphql-tools/git-loader': 7.3.0(@babel/core@7.22.17)(graphql@16.8.0) - '@graphql-tools/github-loader': 7.3.28(@babel/core@7.22.17)(@types/node@18.17.15)(graphql@16.8.0) - '@graphql-tools/graphql-file-loader': 7.5.17(graphql@16.8.0) - '@graphql-tools/json-file-loader': 7.4.18(graphql@16.8.0) - '@graphql-tools/load': 7.8.14(graphql@16.8.0) - '@graphql-tools/prisma-loader': 7.2.72(@types/node@18.17.15)(graphql@16.8.0) - '@graphql-tools/url-loader': 7.17.18(@types/node@18.17.15)(graphql@16.8.0) - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) - '@whatwg-node/fetch': 0.6.9(@types/node@18.17.15) + '@graphql-codegen/core': 3.1.0(graphql@16.6.0) + '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.6.0) + '@graphql-tools/apollo-engine-loader': 7.3.26(graphql@16.6.0) + '@graphql-tools/code-file-loader': 7.3.23(@babel/core@7.20.12)(graphql@16.6.0) + '@graphql-tools/git-loader': 7.3.0(@babel/core@7.20.12)(graphql@16.6.0) + '@graphql-tools/github-loader': 7.3.28(@babel/core@7.20.12)(@types/node@18.11.18)(graphql@16.6.0) + '@graphql-tools/graphql-file-loader': 7.5.17(graphql@16.6.0) + '@graphql-tools/json-file-loader': 7.4.18(graphql@16.6.0) + '@graphql-tools/load': 7.8.14(graphql@16.6.0) + '@graphql-tools/prisma-loader': 7.2.72(@types/node@18.11.18)(graphql@16.6.0) + '@graphql-tools/url-loader': 7.17.18(@types/node@18.11.18)(graphql@16.6.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) + '@whatwg-node/fetch': 0.6.9(@types/node@18.11.18) chalk: 4.1.2 chokidar: 3.5.3 cosmiconfig: 7.1.0 - cosmiconfig-typescript-loader: 4.4.0(@types/node@18.17.15)(cosmiconfig@7.1.0)(ts-node@10.9.1)(typescript@5.2.2) + cosmiconfig-typescript-loader: 4.4.0(@types/node@18.11.18)(cosmiconfig@7.1.0)(ts-node@10.9.1)(typescript@4.7.4) debounce: 1.2.1 detect-indent: 6.1.0 - graphql: 16.8.0 - graphql-config: 4.5.0(@types/node@18.17.15)(graphql@16.8.0) + graphql: 16.6.0 + graphql-config: 4.5.0(@types/node@18.11.18)(graphql@16.6.0) inquirer: 8.2.4 is-glob: 4.0.3 json-to-pretty-yaml: 1.2.2 @@ -3234,7 +2949,7 @@ packages: shell-quote: 1.8.1 string-env-interpolation: 1.0.1 ts-log: 2.2.5 - ts-node: 10.9.1(@types/node@18.17.15)(typescript@5.2.2) + ts-node: 10.9.1(@types/node@18.11.18)(typescript@4.7.4) tslib: 2.5.0 yaml: 1.10.2 yargs: 17.6.2 @@ -3252,121 +2967,121 @@ packages: - utf-8-validate dev: false - /@graphql-codegen/core@3.1.0(graphql@16.8.0): + /@graphql-codegen/core@3.1.0(graphql@16.6.0): resolution: {integrity: sha512-DH1/yaR7oJE6/B+c6ZF2Tbdh7LixF1K8L+8BoSubjNyQ8pNwR4a70mvc1sv6H7qgp6y1bPQ9tKE+aazRRshysw==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.8.0) - '@graphql-tools/schema': 9.0.19(graphql@16.8.0) - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) - graphql: 16.8.0 + '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.6.0) + '@graphql-tools/schema': 9.0.19(graphql@16.6.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) + graphql: 16.6.0 tslib: 2.5.0 dev: false - /@graphql-codegen/plugin-helpers@2.7.2(graphql@16.8.0): + /@graphql-codegen/plugin-helpers@2.7.2(graphql@16.6.0): resolution: {integrity: sha512-kln2AZ12uii6U59OQXdjLk5nOlh1pHis1R98cDZGFnfaiAbX9V3fxcZ1MMJkB7qFUymTALzyjZoXXdyVmPMfRg==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-tools/utils': 8.13.1(graphql@16.8.0) + '@graphql-tools/utils': 8.13.1(graphql@16.6.0) change-case-all: 1.0.14 common-tags: 1.8.2 - graphql: 16.8.0 + graphql: 16.6.0 import-from: 4.0.0 lodash: 4.17.21 tslib: 2.4.1 dev: false - /@graphql-codegen/plugin-helpers@4.2.0(graphql@16.8.0): + /@graphql-codegen/plugin-helpers@4.2.0(graphql@16.6.0): resolution: {integrity: sha512-THFTCfg+46PXlXobYJ/OoCX6pzjI+9woQqCjdyKtgoI0tn3Xq2HUUCiidndxUpEYVrXb5pRiRXb7b/ZbMQqD0A==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) change-case-all: 1.0.15 common-tags: 1.8.2 - graphql: 16.8.0 + graphql: 16.6.0 import-from: 4.0.0 lodash: 4.17.21 tslib: 2.5.0 dev: false - /@graphql-codegen/schema-ast@3.0.1(graphql@16.8.0): + /@graphql-codegen/schema-ast@3.0.1(graphql@16.6.0): resolution: {integrity: sha512-rTKTi4XiW4QFZnrEqetpiYEWVsOFNoiR/v3rY9mFSttXFbIwNXPme32EspTiGWmEEdHY8UuTDtZN3vEcs/31zw==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.8.0) - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) - graphql: 16.8.0 + '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.6.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) + graphql: 16.6.0 tslib: 2.5.0 dev: false - /@graphql-codegen/typescript-operations@3.0.0(graphql@16.8.0): + /@graphql-codegen/typescript-operations@3.0.0(graphql@16.6.0): resolution: {integrity: sha512-t+Lk+lxkUFDh6F0t8CErowOccP3bZwxhl66qmEeBcOrC7jQrSCnRZoFvOXhFKFBJe/y4DIJiizgSr34AqjiJIQ==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.8.0) - '@graphql-codegen/typescript': 3.0.0(graphql@16.8.0) - '@graphql-codegen/visitor-plugin-common': 3.0.0(graphql@16.8.0) + '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.6.0) + '@graphql-codegen/typescript': 3.0.0(graphql@16.6.0) + '@graphql-codegen/visitor-plugin-common': 3.0.0(graphql@16.6.0) auto-bind: 4.0.0 - graphql: 16.8.0 + graphql: 16.6.0 tslib: 2.4.1 transitivePeerDependencies: - encoding - supports-color dev: false - /@graphql-codegen/typescript-react-apollo@3.3.7(graphql-tag@2.12.6)(graphql@16.8.0): + /@graphql-codegen/typescript-react-apollo@3.3.7(graphql-tag@2.12.6)(graphql@16.6.0): resolution: {integrity: sha512-9DUiGE8rcwwEkf/S1kpBT/Py/UUs9Qak14bOnTT1JHWs1MWhiDA7vml+A8opU7YFI1EVbSSaE5jjRv11WHoikQ==} 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 dependencies: - '@graphql-codegen/plugin-helpers': 2.7.2(graphql@16.8.0) - '@graphql-codegen/visitor-plugin-common': 2.13.1(graphql@16.8.0) + '@graphql-codegen/plugin-helpers': 2.7.2(graphql@16.6.0) + '@graphql-codegen/visitor-plugin-common': 2.13.1(graphql@16.6.0) auto-bind: 4.0.0 change-case-all: 1.0.14 - graphql: 16.8.0 - graphql-tag: 2.12.6(graphql@16.8.0) + graphql: 16.6.0 + graphql-tag: 2.12.6(graphql@16.6.0) tslib: 2.4.1 transitivePeerDependencies: - encoding - supports-color dev: false - /@graphql-codegen/typescript@3.0.0(graphql@16.8.0): + /@graphql-codegen/typescript@3.0.0(graphql@16.6.0): resolution: {integrity: sha512-FQWyuIUy1y+fxb9+EZfvdBHBQpYExlIBHV5sg2WGNCsyVyCqBTl0mO8icyOtsQPVg6YFMFe8JJO69vQbwHma5w==} peerDependencies: graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.8.0) - '@graphql-codegen/schema-ast': 3.0.1(graphql@16.8.0) - '@graphql-codegen/visitor-plugin-common': 3.0.0(graphql@16.8.0) + '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.6.0) + '@graphql-codegen/schema-ast': 3.0.1(graphql@16.6.0) + '@graphql-codegen/visitor-plugin-common': 3.0.0(graphql@16.6.0) auto-bind: 4.0.0 - graphql: 16.8.0 + graphql: 16.6.0 tslib: 2.4.1 transitivePeerDependencies: - encoding - supports-color dev: false - /@graphql-codegen/visitor-plugin-common@2.13.1(graphql@16.8.0): + /@graphql-codegen/visitor-plugin-common@2.13.1(graphql@16.6.0): resolution: {integrity: sha512-mD9ufZhDGhyrSaWQGrU1Q1c5f01TeWtSWy/cDwXYjJcHIj1Y/DG2x0tOflEfCvh5WcnmHNIw4lzDsg1W7iFJEg==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-codegen/plugin-helpers': 2.7.2(graphql@16.8.0) - '@graphql-tools/optimize': 1.4.0(graphql@16.8.0) - '@graphql-tools/relay-operation-optimizer': 6.5.18(graphql@16.8.0) - '@graphql-tools/utils': 8.13.1(graphql@16.8.0) + '@graphql-codegen/plugin-helpers': 2.7.2(graphql@16.6.0) + '@graphql-tools/optimize': 1.4.0(graphql@16.6.0) + '@graphql-tools/relay-operation-optimizer': 6.5.18(graphql@16.6.0) + '@graphql-tools/utils': 8.13.1(graphql@16.6.0) auto-bind: 4.0.0 change-case-all: 1.0.14 dependency-graph: 0.11.0 - graphql: 16.8.0 - graphql-tag: 2.12.6(graphql@16.8.0) + graphql: 16.6.0 + graphql-tag: 2.12.6(graphql@16.6.0) parse-filepath: 1.0.2 tslib: 2.4.1 transitivePeerDependencies: @@ -3374,20 +3089,20 @@ packages: - supports-color dev: false - /@graphql-codegen/visitor-plugin-common@3.0.0(graphql@16.8.0): + /@graphql-codegen/visitor-plugin-common@3.0.0(graphql@16.6.0): resolution: {integrity: sha512-ZoNlCmmkGClB137SpJT9og/nkihLN7Z4Ynl9Ir3OlbDuI20dbpyXsclpr9QGLcxEcfQeVfhGw9CooW7wZJJ8LA==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.8.0) - '@graphql-tools/optimize': 1.4.0(graphql@16.8.0) - '@graphql-tools/relay-operation-optimizer': 6.5.18(graphql@16.8.0) - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) + '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.6.0) + '@graphql-tools/optimize': 1.4.0(graphql@16.6.0) + '@graphql-tools/relay-operation-optimizer': 6.5.18(graphql@16.6.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) auto-bind: 4.0.0 change-case-all: 1.0.15 dependency-graph: 0.11.0 - graphql: 16.8.0 - graphql-tag: 2.12.6(graphql@16.8.0) + graphql: 16.6.0 + graphql-tag: 2.12.6(graphql@16.6.0) parse-filepath: 1.0.2 tslib: 2.4.1 transitivePeerDependencies: @@ -3395,73 +3110,73 @@ packages: - supports-color dev: false - /@graphql-tools/apollo-engine-loader@7.3.26(graphql@16.8.0): + /@graphql-tools/apollo-engine-loader@7.3.26(graphql@16.6.0): resolution: {integrity: sha512-h1vfhdJFjnCYn9b5EY1Z91JTF0KB3hHVJNQIsiUV2mpQXZdeOXQoaWeYEKaiI5R6kwBw5PP9B0fv3jfUIG8LyQ==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@ardatan/sync-fetch': 0.0.1 - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) '@whatwg-node/fetch': 0.8.8 - graphql: 16.8.0 - tslib: 2.5.0 + graphql: 16.6.0 + tslib: 2.6.2 transitivePeerDependencies: - encoding dev: false - /@graphql-tools/batch-execute@8.5.22(graphql@16.8.0): + /@graphql-tools/batch-execute@8.5.22(graphql@16.6.0): resolution: {integrity: sha512-hcV1JaY6NJQFQEwCKrYhpfLK8frSXDbtNMoTur98u10Cmecy1zrqNKSqhEyGetpgHxaJRqszGzKeI3RuroDN6A==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) dataloader: 2.2.2 - graphql: 16.8.0 + graphql: 16.6.0 tslib: 2.6.2 value-or-promise: 1.0.12 dev: false - /@graphql-tools/code-file-loader@7.3.23(@babel/core@7.22.17)(graphql@16.8.0): + /@graphql-tools/code-file-loader@7.3.23(@babel/core@7.20.12)(graphql@16.6.0): resolution: {integrity: sha512-8Wt1rTtyTEs0p47uzsPJ1vAtfAx0jmxPifiNdmo9EOCuUPyQGEbMaik/YkqZ7QUFIEYEQu+Vgfo8tElwOPtx5Q==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/graphql-tag-pluck': 7.5.2(@babel/core@7.22.17)(graphql@16.8.0) - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) + '@graphql-tools/graphql-tag-pluck': 7.5.2(@babel/core@7.20.12)(graphql@16.6.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) globby: 11.1.0 - graphql: 16.8.0 - tslib: 2.5.0 + graphql: 16.6.0 + tslib: 2.6.2 unixify: 1.0.0 transitivePeerDependencies: - '@babel/core' - supports-color dev: false - /@graphql-tools/delegate@9.0.35(graphql@16.8.0): + /@graphql-tools/delegate@9.0.35(graphql@16.6.0): resolution: {integrity: sha512-jwPu8NJbzRRMqi4Vp/5QX1vIUeUPpWmlQpOkXQD2r1X45YsVceyUUBnktCrlJlDB4jPRVy7JQGwmYo3KFiOBMA==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/batch-execute': 8.5.22(graphql@16.8.0) - '@graphql-tools/executor': 0.0.20(graphql@16.8.0) - '@graphql-tools/schema': 9.0.19(graphql@16.8.0) - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) + '@graphql-tools/batch-execute': 8.5.22(graphql@16.6.0) + '@graphql-tools/executor': 0.0.20(graphql@16.6.0) + '@graphql-tools/schema': 9.0.19(graphql@16.6.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) dataloader: 2.2.2 - graphql: 16.8.0 + graphql: 16.6.0 tslib: 2.6.2 value-or-promise: 1.0.12 dev: false - /@graphql-tools/executor-graphql-ws@0.0.14(graphql@16.8.0): + /@graphql-tools/executor-graphql-ws@0.0.14(graphql@16.6.0): resolution: {integrity: sha512-P2nlkAsPZKLIXImFhj0YTtny5NQVGSsKnhi7PzXiaHSXc6KkzqbWZHKvikD4PObanqg+7IO58rKFpGXP7eeO+w==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) '@repeaterjs/repeater': 3.0.4 '@types/ws': 8.5.5 - graphql: 16.8.0 - graphql-ws: 5.12.1(graphql@16.8.0) + graphql: 16.6.0 + graphql-ws: 5.12.1(graphql@16.6.0) isomorphic-ws: 5.0.0(ws@8.13.0) tslib: 2.6.2 ws: 8.13.0 @@ -3470,32 +3185,32 @@ packages: - utf-8-validate dev: false - /@graphql-tools/executor-http@0.1.10(@types/node@18.17.15)(graphql@16.8.0): + /@graphql-tools/executor-http@0.1.10(@types/node@18.11.18)(graphql@16.6.0): resolution: {integrity: sha512-hnAfbKv0/lb9s31LhWzawQ5hghBfHS+gYWtqxME6Rl0Aufq9GltiiLBcl7OVVOnkLF0KhwgbYP1mB5VKmgTGpg==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) '@repeaterjs/repeater': 3.0.4 '@whatwg-node/fetch': 0.8.8 dset: 3.1.2 extract-files: 11.0.0 - graphql: 16.8.0 - meros: 1.3.0(@types/node@18.17.15) + graphql: 16.6.0 + meros: 1.3.0(@types/node@18.11.18) tslib: 2.6.2 value-or-promise: 1.0.12 transitivePeerDependencies: - '@types/node' dev: false - /@graphql-tools/executor-legacy-ws@0.0.11(graphql@16.8.0): + /@graphql-tools/executor-legacy-ws@0.0.11(graphql@16.6.0): resolution: {integrity: sha512-4ai+NnxlNfvIQ4c70hWFvOZlSUN8lt7yc+ZsrwtNFbFPH/EroIzFMapAxM9zwyv9bH38AdO3TQxZ5zNxgBdvUw==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) '@types/ws': 8.5.5 - graphql: 16.8.0 + graphql: 16.6.0 isomorphic-ws: 5.0.0(ws@8.13.0) tslib: 2.6.2 ws: 8.13.0 @@ -3504,48 +3219,48 @@ packages: - utf-8-validate dev: false - /@graphql-tools/executor@0.0.20(graphql@16.8.0): + /@graphql-tools/executor@0.0.20(graphql@16.6.0): resolution: {integrity: sha512-GdvNc4vszmfeGvUqlcaH1FjBoguvMYzxAfT6tDd4/LgwymepHhinqLNA5otqwVLW+JETcDaK7xGENzFomuE6TA==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) - '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.6.0) '@repeaterjs/repeater': 3.0.4 - graphql: 16.8.0 + graphql: 16.6.0 tslib: 2.6.2 value-or-promise: 1.0.12 dev: false - /@graphql-tools/git-loader@7.3.0(@babel/core@7.22.17)(graphql@16.8.0): + /@graphql-tools/git-loader@7.3.0(@babel/core@7.20.12)(graphql@16.6.0): resolution: {integrity: sha512-gcGAK+u16eHkwsMYqqghZbmDquh8QaO24Scsxq+cVR+vx1ekRlsEiXvu+yXVDbZdcJ6PBIbeLcQbEu+xhDLmvQ==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/graphql-tag-pluck': 7.5.2(@babel/core@7.22.17)(graphql@16.8.0) - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) - graphql: 16.8.0 + '@graphql-tools/graphql-tag-pluck': 7.5.2(@babel/core@7.20.12)(graphql@16.6.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) + graphql: 16.6.0 is-glob: 4.0.3 micromatch: 4.0.5 - tslib: 2.5.0 + tslib: 2.6.2 unixify: 1.0.0 transitivePeerDependencies: - '@babel/core' - supports-color dev: false - /@graphql-tools/github-loader@7.3.28(@babel/core@7.22.17)(@types/node@18.17.15)(graphql@16.8.0): + /@graphql-tools/github-loader@7.3.28(@babel/core@7.20.12)(@types/node@18.11.18)(graphql@16.6.0): resolution: {integrity: sha512-OK92Lf9pmxPQvjUNv05b3tnVhw0JRfPqOf15jZjyQ8BfdEUrJoP32b4dRQQem/wyRL24KY4wOfArJNqzpsbwCA==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@ardatan/sync-fetch': 0.0.1 - '@graphql-tools/executor-http': 0.1.10(@types/node@18.17.15)(graphql@16.8.0) - '@graphql-tools/graphql-tag-pluck': 7.5.2(@babel/core@7.22.17)(graphql@16.8.0) - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) + '@graphql-tools/executor-http': 0.1.10(@types/node@18.11.18)(graphql@16.6.0) + '@graphql-tools/graphql-tag-pluck': 7.5.2(@babel/core@7.20.12)(graphql@16.6.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) '@whatwg-node/fetch': 0.8.8 - graphql: 16.8.0 - tslib: 2.5.0 + graphql: 16.6.0 + tslib: 2.6.2 value-or-promise: 1.0.12 transitivePeerDependencies: - '@babel/core' @@ -3554,80 +3269,69 @@ packages: - supports-color dev: false - /@graphql-tools/graphql-file-loader@7.5.17(graphql@16.8.0): + /@graphql-tools/graphql-file-loader@7.5.17(graphql@16.6.0): resolution: {integrity: sha512-hVwwxPf41zOYgm4gdaZILCYnKB9Zap7Ys9OhY1hbwuAuC4MMNY9GpUjoTU3CQc3zUiPoYStyRtUGkHSJZ3HxBw==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/import': 6.7.18(graphql@16.8.0) - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) + '@graphql-tools/import': 6.7.18(graphql@16.6.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) globby: 11.1.0 - graphql: 16.8.0 - tslib: 2.5.0 + graphql: 16.6.0 + tslib: 2.6.2 unixify: 1.0.0 dev: false - /@graphql-tools/graphql-tag-pluck@7.5.2(@babel/core@7.22.17)(graphql@16.8.0): + /@graphql-tools/graphql-tag-pluck@7.5.2(@babel/core@7.20.12)(graphql@16.6.0): resolution: {integrity: sha512-RW+H8FqOOLQw0BPXaahYepVSRjuOHw+7IL8Opaa5G5uYGOBxoXR7DceyQ7BcpMgktAOOmpDNQ2WtcboChOJSRA==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@babel/parser': 7.20.13 - '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.22.17) + '@babel/parser': 7.22.11 + '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.20.12) '@babel/traverse': 7.20.13(supports-color@5.5.0) - '@babel/types': 7.20.7 - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) - graphql: 16.8.0 + '@babel/types': 7.22.11 + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) + graphql: 16.6.0 tslib: 2.6.2 transitivePeerDependencies: - '@babel/core' - supports-color dev: false - /@graphql-tools/import@6.7.18(graphql@16.8.0): + /@graphql-tools/import@6.7.18(graphql@16.6.0): resolution: {integrity: sha512-XQDdyZTp+FYmT7as3xRWH/x8dx0QZA2WZqfMF5EWb36a0PiH7WwlRQYIdyYXj8YCLpiWkeBXgBRHmMnwEYR8iQ==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) - graphql: 16.8.0 + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) + graphql: 16.6.0 resolve-from: 5.0.0 tslib: 2.6.2 dev: false - /@graphql-tools/json-file-loader@7.4.18(graphql@16.8.0): + /@graphql-tools/json-file-loader@7.4.18(graphql@16.6.0): resolution: {integrity: sha512-AJ1b6Y1wiVgkwsxT5dELXhIVUPs/u3VZ8/0/oOtpcoyO/vAeM5rOvvWegzicOOnQw8G45fgBRMkkRfeuwVt6+w==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) globby: 11.1.0 - graphql: 16.8.0 - tslib: 2.5.0 + graphql: 16.6.0 + tslib: 2.6.2 unixify: 1.0.0 dev: false - /@graphql-tools/load@7.8.14(graphql@16.8.0): + /@graphql-tools/load@7.8.14(graphql@16.6.0): resolution: {integrity: sha512-ASQvP+snHMYm+FhIaLxxFgVdRaM0vrN9wW2BKInQpktwWTXVyk+yP5nQUCEGmn0RTdlPKrffBaigxepkEAJPrg==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/schema': 9.0.19(graphql@16.8.0) - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) - graphql: 16.8.0 + '@graphql-tools/schema': 9.0.19(graphql@16.6.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) + graphql: 16.6.0 p-limit: 3.1.0 - tslib: 2.5.0 - dev: false - - /@graphql-tools/merge@6.2.7(graphql@15.5.0): - resolution: {integrity: sha512-9acgDkkYeAHpuqhOa3E63NZPCX/iWo819Q320sCCMkydF1xgx0qCRYz/V03xPdpQETKRqBG2i2N2csneeEYYig==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 - dependencies: - '@graphql-tools/schema': 7.1.5(graphql@15.5.0) - '@graphql-tools/utils': 7.10.0(graphql@15.5.0) - graphql: 15.5.0 - tslib: 2.1.0 + tslib: 2.6.2 dev: false /@graphql-tools/merge@8.4.0(graphql@16.6.0): @@ -3637,7 +3341,7 @@ packages: dependencies: '@graphql-tools/utils': 9.2.1(graphql@16.6.0) graphql: 16.6.0 - tslib: 2.5.0 + tslib: 2.6.2 dev: false /@graphql-tools/merge@8.4.2(graphql@16.6.0): @@ -3650,40 +3354,30 @@ packages: tslib: 2.6.2 dev: false - /@graphql-tools/merge@8.4.2(graphql@16.8.0): - resolution: {integrity: sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) - graphql: 16.8.0 - tslib: 2.6.2 - dev: false - - /@graphql-tools/optimize@1.4.0(graphql@16.8.0): + /@graphql-tools/optimize@1.4.0(graphql@16.6.0): resolution: {integrity: sha512-dJs/2XvZp+wgHH8T5J2TqptT9/6uVzIYvA6uFACha+ufvdMBedkfR4b4GbT8jAKLRARiqRTxy3dctnwkTM2tdw==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - graphql: 16.8.0 + graphql: 16.6.0 tslib: 2.6.2 dev: false - /@graphql-tools/prisma-loader@7.2.72(@types/node@18.17.15)(graphql@16.8.0): + /@graphql-tools/prisma-loader@7.2.72(@types/node@18.11.18)(graphql@16.6.0): resolution: {integrity: sha512-0a7uV7Fky6yDqd0tI9+XMuvgIo6GAqiVzzzFV4OSLry4AwiQlI3igYseBV7ZVOGhedOTqj/URxjpiv07hRcwag==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/url-loader': 7.17.18(@types/node@18.17.15)(graphql@16.8.0) - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) + '@graphql-tools/url-loader': 7.17.18(@types/node@18.11.18)(graphql@16.6.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) '@types/js-yaml': 4.0.5 '@types/json-stable-stringify': 1.0.34 '@whatwg-node/fetch': 0.8.8 chalk: 4.1.2 debug: 4.3.4(supports-color@5.5.0) dotenv: 16.0.1 - graphql: 16.8.0 - graphql-request: 6.1.0(graphql@16.8.0) + graphql: 16.6.0 + graphql-request: 6.1.0(graphql@16.6.0) http-proxy-agent: 6.1.1 https-proxy-agent: 6.2.1 jose: 4.14.4 @@ -3691,7 +3385,7 @@ packages: json-stable-stringify: 1.0.2 lodash: 4.17.21 scuid: 1.1.0 - tslib: 2.5.0 + tslib: 2.6.2 yaml-ast-parser: 0.0.43 transitivePeerDependencies: - '@types/node' @@ -3701,41 +3395,20 @@ packages: - utf-8-validate dev: false - /@graphql-tools/relay-operation-optimizer@6.5.18(graphql@16.8.0): + /@graphql-tools/relay-operation-optimizer@6.5.18(graphql@16.6.0): resolution: {integrity: sha512-mc5VPyTeV+LwiM+DNvoDQfPqwQYhPV/cl5jOBjTgSniyaq8/86aODfMkrE2OduhQ5E00hqrkuL2Fdrgk0w1QJg==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ardatan/relay-compiler': 12.0.0(graphql@16.8.0) - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) - graphql: 16.8.0 + '@ardatan/relay-compiler': 12.0.0(graphql@16.6.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) + graphql: 16.6.0 tslib: 2.6.2 transitivePeerDependencies: - encoding - supports-color dev: false - /@graphql-tools/schema@6.2.4(graphql@15.5.0): - resolution: {integrity: sha512-rh+14lSY1q8IPbEv2J9x8UBFJ5NrDX9W5asXEUlPp+7vraLp/Tiox4GXdgyA92JhwpYco3nTf5Bo2JDMt1KnAQ==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 - dependencies: - '@graphql-tools/utils': 6.2.4(graphql@15.5.0) - graphql: 15.5.0 - tslib: 2.0.3 - dev: false - - /@graphql-tools/schema@7.1.5(graphql@15.5.0): - resolution: {integrity: sha512-uyn3HSNSckf4mvQSq0Q07CPaVZMNFCYEVxroApOaw802m9DcZPgf9XVPy/gda5GWj9AhbijfRYVTZQgHnJ4CXA==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 - dependencies: - '@graphql-tools/utils': 7.10.0(graphql@15.5.0) - graphql: 15.5.0 - tslib: 2.2.0 - value-or-promise: 1.0.6 - dev: false - /@graphql-tools/schema@9.0.17(graphql@16.6.0): resolution: {integrity: sha512-HVLq0ecbkuXhJlpZ50IHP5nlISqH2GbNgjBJhhRzHeXhfwlUOT4ISXGquWTmuq61K0xSaO0aCjMpxe4QYbKTng==} peerDependencies: @@ -3744,7 +3417,7 @@ packages: '@graphql-tools/merge': 8.4.0(graphql@16.6.0) '@graphql-tools/utils': 9.2.1(graphql@16.6.0) graphql: 16.6.0 - tslib: 2.5.0 + tslib: 2.6.2 value-or-promise: 1.0.12 dev: false @@ -3756,39 +3429,27 @@ packages: '@graphql-tools/merge': 8.4.2(graphql@16.6.0) '@graphql-tools/utils': 9.2.1(graphql@16.6.0) graphql: 16.6.0 - tslib: 2.5.0 - value-or-promise: 1.0.12 - dev: false - - /@graphql-tools/schema@9.0.19(graphql@16.8.0): - resolution: {integrity: sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-tools/merge': 8.4.2(graphql@16.8.0) - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) - graphql: 16.8.0 - tslib: 2.5.0 + tslib: 2.6.2 value-or-promise: 1.0.12 dev: false - /@graphql-tools/url-loader@7.17.18(@types/node@18.17.15)(graphql@16.8.0): + /@graphql-tools/url-loader@7.17.18(@types/node@18.11.18)(graphql@16.6.0): resolution: {integrity: sha512-ear0CiyTj04jCVAxi7TvgbnGDIN2HgqzXzwsfcqiVg9cvjT40NcMlZ2P1lZDgqMkZ9oyLTV8Bw6j+SyG6A+xPw==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@ardatan/sync-fetch': 0.0.1 - '@graphql-tools/delegate': 9.0.35(graphql@16.8.0) - '@graphql-tools/executor-graphql-ws': 0.0.14(graphql@16.8.0) - '@graphql-tools/executor-http': 0.1.10(@types/node@18.17.15)(graphql@16.8.0) - '@graphql-tools/executor-legacy-ws': 0.0.11(graphql@16.8.0) - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) - '@graphql-tools/wrap': 9.4.2(graphql@16.8.0) + '@graphql-tools/delegate': 9.0.35(graphql@16.6.0) + '@graphql-tools/executor-graphql-ws': 0.0.14(graphql@16.6.0) + '@graphql-tools/executor-http': 0.1.10(@types/node@18.11.18)(graphql@16.6.0) + '@graphql-tools/executor-legacy-ws': 0.0.11(graphql@16.6.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) + '@graphql-tools/wrap': 9.4.2(graphql@16.6.0) '@types/ws': 8.5.5 '@whatwg-node/fetch': 0.8.8 - graphql: 16.8.0 + graphql: 16.6.0 isomorphic-ws: 5.0.0(ws@8.13.0) - tslib: 2.5.0 + tslib: 2.6.2 value-or-promise: 1.0.12 ws: 8.13.0 transitivePeerDependencies: @@ -3798,34 +3459,12 @@ packages: - utf-8-validate dev: false - /@graphql-tools/utils@6.2.4(graphql@15.5.0): - resolution: {integrity: sha512-ybgZ9EIJE3JMOtTrTd2VcIpTXtDrn2q6eiYkeYMKRVh3K41+LZa6YnR2zKERTXqTWqhobROwLt4BZbw2O3Aeeg==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 - dependencies: - '@ardatan/aggregate-error': 0.0.6 - camel-case: 4.1.1 - graphql: 15.5.0 - tslib: 2.0.3 - dev: false - - /@graphql-tools/utils@7.10.0(graphql@15.5.0): - resolution: {integrity: sha512-d334r6bo9mxdSqZW6zWboEnnOOFRrAPVQJ7LkU8/6grglrbcu6WhwCLzHb90E94JI3TD3ricC3YGbUqIi9Xg0w==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 - dependencies: - '@ardatan/aggregate-error': 0.0.6 - camel-case: 4.1.2 - graphql: 15.5.0 - tslib: 2.2.0 - dev: false - - /@graphql-tools/utils@8.13.1(graphql@16.8.0): + /@graphql-tools/utils@8.13.1(graphql@16.6.0): resolution: {integrity: sha512-qIh9yYpdUFmctVqovwMdheVNJqFh+DQNWIhX87FJStfXYnmweBUDATok9fWPleKeFwxnW8IapKmY8m8toJEkAw==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - graphql: 16.8.0 + graphql: 16.6.0 tslib: 2.6.2 dev: false @@ -3834,30 +3473,20 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-typed-document-node/core': 3.1.1(graphql@16.6.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.6.0) graphql: 16.6.0 - tslib: 2.5.0 - dev: false - - /@graphql-tools/utils@9.2.1(graphql@16.8.0): - resolution: {integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-typed-document-node/core': 3.1.1(graphql@16.8.0) - graphql: 16.8.0 - tslib: 2.5.0 + tslib: 2.6.2 dev: false - /@graphql-tools/wrap@9.4.2(graphql@16.8.0): + /@graphql-tools/wrap@9.4.2(graphql@16.6.0): resolution: {integrity: sha512-DFcd9r51lmcEKn0JW43CWkkI2D6T9XI1juW/Yo86i04v43O9w2/k4/nx2XTJv4Yv+iXwUw7Ok81PGltwGJSDSA==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/delegate': 9.0.35(graphql@16.8.0) - '@graphql-tools/schema': 9.0.19(graphql@16.8.0) - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) - graphql: 16.8.0 + '@graphql-tools/delegate': 9.0.35(graphql@16.6.0) + '@graphql-tools/schema': 9.0.19(graphql@16.6.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) + graphql: 16.6.0 tslib: 2.6.2 value-or-promise: 1.0.12 dev: false @@ -3870,20 +3499,12 @@ packages: graphql: 16.6.0 dev: false - /@graphql-typed-document-node/core@3.1.1(graphql@16.8.0): - resolution: {integrity: sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg==} - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - graphql: 16.8.0 - dev: false - - /@graphql-typed-document-node/core@3.2.0(graphql@16.8.0): + /@graphql-typed-document-node/core@3.2.0(graphql@16.6.0): resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} 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 || ^17.0.0 dependencies: - graphql: 16.8.0 + graphql: 16.6.0 dev: false /@grpc/grpc-js@1.4.4: @@ -3923,7 +3544,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -4160,19 +3781,6 @@ packages: - supports-color dev: true - /@jest/types@26.6.2: - resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} - engines: {node: '>= 10.14.2'} - requiresBuild: true - dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.1 - '@types/node': 18.11.18 - '@types/yargs': 15.0.15 - chalk: 4.1.2 - dev: false - optional: true - /@jest/types@28.1.3: resolution: {integrity: sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} @@ -4204,22 +3812,10 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 '@jridgewell/trace-mapping': 0.3.17 - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.19 - /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} - /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} @@ -4233,21 +3829,12 @@ packages: /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.17: resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 - /@jridgewell/trace-mapping@0.3.19: - resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: @@ -4322,7 +3909,7 @@ packages: '@motionone/types': 10.15.1 '@motionone/utils': 10.15.1 hey-listen: 1.0.8 - tslib: 2.5.0 + tslib: 2.6.2 dev: false /@motionone/easing@10.15.1: @@ -4484,8 +4071,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.20.13 - '@emotion/react': 11.10.4(@babel/core@7.22.17)(@types/react@18.0.20)(react@18.2.0) - '@emotion/styled': 11.10.4(@babel/core@7.22.17)(@emotion/react@11.10.4)(@types/react@18.0.20)(react@18.2.0) + '@emotion/react': 11.10.4(@babel/core@7.20.12)(@types/react@18.0.20)(react@18.2.0) + '@emotion/styled': 11.10.4(@babel/core@7.20.12)(@emotion/react@11.10.4)(@types/react@18.0.20)(react@18.2.0) '@mui/base': 5.0.0-alpha.92(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) '@mui/material': 5.9.1(@emotion/react@11.10.4)(@emotion/styled@11.10.4)(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) '@mui/system': 5.11.5(@emotion/react@11.10.4)(@emotion/styled@11.10.4)(@types/react@18.0.20)(react@18.2.0) @@ -4516,8 +4103,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.20.13 - '@emotion/react': 11.10.4(@babel/core@7.22.17)(@types/react@18.0.20)(react@18.2.0) - '@emotion/styled': 11.10.4(@babel/core@7.22.17)(@emotion/react@11.10.4)(@types/react@18.0.20)(react@18.2.0) + '@emotion/react': 11.10.4(@babel/core@7.20.12)(@types/react@18.0.20)(react@18.2.0) + '@emotion/styled': 11.10.4(@babel/core@7.20.12)(@emotion/react@11.10.4)(@types/react@18.0.20)(react@18.2.0) '@mui/base': 5.0.0-alpha.90(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) '@mui/system': 5.11.5(@emotion/react@11.10.4)(@emotion/styled@11.10.4)(@types/react@18.0.20)(react@18.2.0) '@mui/types': 7.2.3(@types/react@18.0.20) @@ -4550,6 +4137,21 @@ packages: react: 18.2.0 dev: false + /@mui/styled-engine-sc@5.11.0(styled-components@5.3.5): + resolution: {integrity: sha512-U8cA7DHB3fnLpDVM5qd/9FGnw5y+LrmwIXQ9Lzk3HYkF903tSMx9jXIbiz1vltpOfZTKX/Rn02m/nkH4OF6Pcg==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/styled-components': ^5.1.14 + styled-components: ^5.3.1 + peerDependenciesMeta: + '@types/styled-components': + optional: true + dependencies: + '@babel/runtime': 7.20.13 + prop-types: 15.8.1 + styled-components: 5.3.5(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) + dev: false + /@mui/styled-engine@5.11.0(@emotion/react@11.10.4)(@emotion/styled@11.10.4)(react@18.2.0): resolution: {integrity: sha512-AF06K60Zc58qf0f7X+Y/QjaHaZq16znliLnGc9iVrV/+s8Ln/FCoeNuFvhlCbZZQ5WQcJvcy59zp0nXrklGGPQ==} engines: {node: '>=12.0.0'} @@ -4565,8 +4167,8 @@ packages: dependencies: '@babel/runtime': 7.20.13 '@emotion/cache': 11.10.5 - '@emotion/react': 11.10.4(@babel/core@7.22.17)(@types/react@18.0.20)(react@18.2.0) - '@emotion/styled': 11.10.4(@babel/core@7.22.17)(@emotion/react@11.10.4)(@types/react@18.0.20)(react@18.2.0) + '@emotion/react': 11.10.4(@babel/core@7.20.12)(@types/react@18.0.20)(react@18.2.0) + '@emotion/styled': 11.10.4(@babel/core@7.20.12)(@emotion/react@11.10.4)(@types/react@18.0.20)(react@18.2.0) csstype: 3.1.1 prop-types: 15.8.1 react: 18.2.0 @@ -4589,8 +4191,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.20.13 - '@emotion/react': 11.10.4(@babel/core@7.22.17)(@types/react@18.0.20)(react@18.2.0) - '@emotion/styled': 11.10.4(@babel/core@7.22.17)(@emotion/react@11.10.4)(@types/react@18.0.20)(react@18.2.0) + '@emotion/react': 11.10.4(@babel/core@7.20.12)(@types/react@18.0.20)(react@18.2.0) + '@emotion/styled': 11.10.4(@babel/core@7.20.12)(@emotion/react@11.10.4)(@types/react@18.0.20)(react@18.2.0) '@mui/private-theming': 5.11.2(@types/react@18.0.20)(react@18.2.0) '@mui/styled-engine': 5.11.0(@emotion/react@11.10.4)(@emotion/styled@11.10.4)(react@18.2.0) '@mui/types': 7.2.3(@types/react@18.0.20) @@ -4627,7 +4229,7 @@ packages: react-is: 18.2.0 dev: false - /@nestjs/apollo@11.0.5(@apollo/server@4.7.1)(@apollo/subgraph@2.5.4)(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(@nestjs/graphql@11.0.5)(graphql@16.6.0): + /@nestjs/apollo@11.0.5(@apollo/server@4.7.1)(@apollo/subgraph@2.5.3)(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(@nestjs/graphql@11.0.5)(graphql@16.6.0): resolution: {integrity: sha512-6+V+fw2tBT4MskOV012k2UoEL0D2nteDbpOTlb42tur0yCQseBx1E+HdqpLAeRr25F6H6LipgEOum9y9NF4DGQ==} peerDependencies: '@apollo/gateway': ^2.0.0 @@ -4646,16 +4248,30 @@ packages: dependencies: '@apollo/server': 4.7.1(graphql@16.6.0) '@apollo/server-plugin-landing-page-graphql-playground': 4.0.0(@apollo/server@4.7.1) - '@apollo/subgraph': 2.5.4(graphql@16.6.0) + '@apollo/subgraph': 2.5.3(graphql@16.6.0) '@nestjs/common': 9.4.0(class-transformer@0.3.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/graphql': 11.0.5(@apollo/subgraph@2.5.4)(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.3.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13)(ts-morph@18.0.0) + '@nestjs/graphql': 11.0.5(@apollo/subgraph@2.5.3)(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.3.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13)(ts-morph@18.0.0) graphql: 16.6.0 iterall: 1.3.0 lodash.omit: 4.5.0 tslib: 2.5.0 dev: false + /@nestjs/axios@2.0.0(@nestjs/common@9.4.0)(axios@0.23.0)(reflect-metadata@0.1.13)(rxjs@7.8.0): + resolution: {integrity: sha512-F6oceoQLEn031uun8NiommeMkRIojQqVryxQy/mK7fx0CI0KbgkJL3SloCQcsOD+agoEnqKJKXZpEvL6FNswJg==} + peerDependencies: + '@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 + axios: ^1.3.1 + reflect-metadata: ^0.1.12 + rxjs: ^6.0.0 || ^7.0.0 + dependencies: + '@nestjs/common': 9.4.0(class-transformer@0.3.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) + axios: 0.23.0 + reflect-metadata: 0.1.13 + rxjs: 7.8.0 + dev: false + /@nestjs/bull-shared@0.1.2(@nestjs/common@9.4.0)(@nestjs/core@9.4.0): resolution: {integrity: sha512-q1JqieWb2YjA6OIal5XjtbF28LgJxEflwJB9x3OnE2OUgI0kWvaMlYMaW3opFmgcWPjx4o5lVhcGnwXeIhZfgg==} peerDependencies: @@ -4788,7 +4404,7 @@ packages: - encoding dev: false - /@nestjs/graphql@11.0.5(@apollo/subgraph@2.5.4)(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.3.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13)(ts-morph@18.0.0): + /@nestjs/graphql@11.0.5(@apollo/subgraph@2.5.3)(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.3.1)(class-validator@0.14.0)(graphql@16.6.0)(reflect-metadata@0.1.13)(ts-morph@18.0.0): resolution: {integrity: sha512-yWDxorb3efDpY55i8exSlJTRRdIISoaQAWm1LukvVJAn4FiRAMUOUlAgNOSU+oX4TMjMp6LffA2cG66WpIssPg==} peerDependencies: '@apollo/subgraph': ^2.0.0 @@ -4809,7 +4425,7 @@ packages: ts-morph: optional: true dependencies: - '@apollo/subgraph': 2.5.4(graphql@16.6.0) + '@apollo/subgraph': 2.5.3(graphql@16.6.0) '@graphql-tools/merge': 8.4.0(graphql@16.6.0) '@graphql-tools/schema': 9.0.17(graphql@16.6.0) '@graphql-tools/utils': 9.2.1(graphql@16.6.0) @@ -4836,45 +4452,6 @@ packages: - utf-8-validate dev: false - /@nestjs/graphql@7.9.8(@nestjs/common@9.4.0)(@nestjs/core@9.4.0)(class-transformer@0.3.1)(class-validator@0.14.0)(graphql@15.5.0)(reflect-metadata@0.1.13): - resolution: {integrity: sha512-z8zkiiRSJ4f4FsLVK3usnXcyAytTuLL34MGNSVJqrrTaLB1t/M/sWv+N4C6v9ZbQ3Ev1GUdAaGyeAp+B7J051w==} - peerDependencies: - '@nestjs/common': ^7.0.0 - '@nestjs/core': ^7.0.0 - graphql: ^14.1.1 || ^15.0.0 - reflect-metadata: ^0.1.12 - dependencies: - '@graphql-tools/merge': 6.2.7(graphql@15.5.0) - '@graphql-tools/schema': 6.2.4(graphql@15.5.0) - '@graphql-tools/utils': 6.2.4(graphql@15.5.0) - '@nestjs/common': 9.4.0(class-transformer@0.3.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/core': 9.4.0(@nestjs/common@9.4.0)(@nestjs/platform-express@9.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - '@nestjs/mapped-types': 0.3.0(@nestjs/common@9.4.0)(class-transformer@0.3.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) - apollo-env: 0.6.5 - apollo-server-core: 2.16.1(graphql@15.5.0) - chokidar: 3.5.1 - fast-glob: 3.2.5 - graphql: 15.5.0 - iterall: 1.2.2 - lodash: 4.17.20 - normalize-path: 3.0.0 - reflect-metadata: 0.1.13 - tslib: 2.1.0 - uuid: 8.3.2 - optionalDependencies: - '@apollo/gateway': 0.17.0(graphql@15.5.0) - apollo-server-testing: 2.25.3(graphql@15.5.0) - ts-morph: 9.1.0 - transitivePeerDependencies: - - bluebird - - bufferutil - - class-transformer - - class-validator - - encoding - - supports-color - - utf-8-validate - dev: false - /@nestjs/jwt@7.2.0(@nestjs/common@9.4.0): resolution: {integrity: sha512-uOTqYmWNpu+oS/MrdYjrWXtKGV4HkCYmAEVEFPP/KfiP/7K6fNy+boLllE6cnqESAXh9u0CLa1noAAavs+LHEQ==} peerDependencies: @@ -4885,20 +4462,6 @@ packages: jsonwebtoken: 8.5.1 dev: false - /@nestjs/mapped-types@0.3.0(@nestjs/common@9.4.0)(class-transformer@0.3.1)(class-validator@0.14.0)(reflect-metadata@0.1.13): - resolution: {integrity: sha512-AdWVTOg3AhAEcVhPGgUJiLbLXb7L5Pe7vc20YQ0oOXP/KD/nJj0I3BcytVdBhzmgepol67BdivNUvo27Hx3Ndw==} - peerDependencies: - '@nestjs/common': ^7.0.8 - class-transformer: ^0.2.0 || ^0.3.0 - class-validator: ^0.11.1 || ^0.12.0 || ^0.13.0 - reflect-metadata: ^0.1.12 - dependencies: - '@nestjs/common': 9.4.0(class-transformer@0.3.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.0) - class-transformer: 0.3.1 - class-validator: 0.14.0 - reflect-metadata: 0.1.13 - dev: false - /@nestjs/mapped-types@1.2.2(@nestjs/common@9.4.0)(class-transformer@0.3.1)(class-validator@0.14.0)(reflect-metadata@0.1.13): resolution: {integrity: sha512-3dHxLXs3M0GPiriAcCFFJQHoDFUuzTD5w6JDhE7TyfT89YKpe6tcCCIqOZWdXmt9AZjjK30RkHRSFF+QEnWFQg==} peerDependencies: @@ -5006,10 +4569,6 @@ packages: resolution: {integrity: sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg==} dev: false - /@next/env@13.4.19: - resolution: {integrity: sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ==} - dev: false - /@next/eslint-plugin-next@13.0.0: resolution: {integrity: sha512-z+gnX4Zizatqatc6f4CQrcC9oN8Us3Vrq/OLyc98h7K/eWctrnV91zFZodmJHUjx0cITY8uYM7LXD7IdYkg3kg==} dependencies: @@ -5272,30 +4831,10 @@ packages: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - /@npmcli/fs@1.1.1: - resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} - requiresBuild: true - dependencies: - '@gar/promisify': 1.1.3 - semver: 7.5.4 - dev: false - optional: true - - /@npmcli/move-file@1.1.2: - resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} - engines: {node: '>=10'} - deprecated: This functionality has been moved to @npmcli/fs - requiresBuild: true - dependencies: - mkdirp: 1.0.4 - rimraf: 3.0.2 - dev: false - optional: true - - /@nuxtjs/opencollective@0.3.2: - resolution: {integrity: sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==} - engines: {node: '>=8.0.0', npm: '>=5.0.0'} - hasBin: true + /@nuxtjs/opencollective@0.3.2: + resolution: {integrity: sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==} + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true dependencies: chalk: 4.1.2 consola: 2.15.3 @@ -5378,10 +4917,6 @@ packages: resolution: {integrity: sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==} dev: false - /@popperjs/core@2.11.8: - resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - dev: false - /@protobufjs/aspromise@1.1.2: resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} dev: false @@ -5890,13 +5425,13 @@ packages: /@swc/helpers@0.4.11: resolution: {integrity: sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==} dependencies: - tslib: 2.5.0 + tslib: 2.6.2 dev: false /@swc/helpers@0.4.14: resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} dependencies: - tslib: 2.5.0 + tslib: 2.6.2 dev: false /@testing-library/dom@8.20.0: @@ -5950,14 +5485,6 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@thinc-org/chula-courses@2.3.0: - resolution: {integrity: sha512-ooi0sK83sLDMhhDSwDDwyy0EsvX7hZduU6jwG0v+n74t+DbJiFZnncR/6bsZoT4N/9u35FKKPGMHFNyUHSYVyA==} - dependencies: - axios: 0.21.4 - transitivePeerDependencies: - - debug - dev: false - /@tippyjs/react@4.2.6(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-91RicDR+H7oDSyPycI13q3b7o4O60wa2oRbjlz2fyRLmHImc4vyDwuUP8NtZaN0VARJY5hybvDYrFzhY9+Lbyw==} peerDependencies: @@ -5969,13 +5496,6 @@ packages: tippy.js: 6.3.7 dev: false - /@tootallnate/once@1.1.2: - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - requiresBuild: true - dev: false - optional: true - /@tootallnate/once@2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} @@ -5990,7 +5510,7 @@ packages: optional: true dependencies: '@babel/generator': 7.17.7 - '@babel/parser': 7.22.16 + '@babel/parser': 7.22.11 '@babel/traverse': 7.17.3 '@babel/types': 7.17.0 javascript-natural-sort: 0.7.1 @@ -6008,19 +5528,6 @@ packages: mkdirp: 2.1.6 path-browserify: 1.0.1 - /@ts-morph/common@0.7.5: - resolution: {integrity: sha512-nlFunSKAsFWI0Ol/uPxJcpVqXxTGNuaWXTmoQDhcnwj1UM4QmBSUVWzqoQ0OzUlqo4sV1gobfFBkMHuZVemMAQ==} - requiresBuild: true - dependencies: - '@dsherret/to-absolute-glob': 2.0.2 - fast-glob: 3.2.5 - is-negated-glob: 1.0.0 - mkdirp: 1.0.4 - multimatch: 5.0.0 - typescript: 4.1.6 - dev: false - optional: true - /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: false @@ -6051,12 +5558,6 @@ packages: tslib: 2.5.0 dev: false - /@types/accepts@1.3.5: - resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==} - dependencies: - '@types/node': 18.11.18 - dev: false - /@types/aria-query@5.0.1: resolution: {integrity: sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==} dev: true @@ -6064,8 +5565,8 @@ packages: /@types/babel__core@7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: - '@babel/parser': 7.20.13 - '@babel/types': 7.20.7 + '@babel/parser': 7.22.11 + '@babel/types': 7.22.11 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.18.3 @@ -6074,20 +5575,20 @@ packages: /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.22.11 dev: true /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.20.13 - '@babel/types': 7.20.7 + '@babel/parser': 7.22.11 + '@babel/types': 7.22.11 dev: true /@types/babel__traverse@7.18.3: resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.22.11 dev: true /@types/body-parser@1.19.2: @@ -6107,10 +5608,6 @@ packages: dependencies: '@types/node': 18.11.18 - /@types/content-disposition@0.5.5: - resolution: {integrity: sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==} - dev: false - /@types/cookie-parser@1.4.3: resolution: {integrity: sha512-CqSKwFwefj4PzZ5n/iwad/bow2hTCh0FlNAeWLtQM3JA/NX/iYagIpWG2cf1bQKQ2c9gU2log5VUCrn7LDOs0w==} dependencies: @@ -6121,15 +5618,6 @@ packages: resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} dev: false - /@types/cookies@0.7.7: - resolution: {integrity: sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==} - dependencies: - '@types/connect': 3.4.35 - '@types/express': 4.17.16 - '@types/keygrip': 1.0.2 - '@types/node': 18.11.18 - dev: false - /@types/dompurify@2.4.0: resolution: {integrity: sha512-IDBwO5IZhrKvHFUl+clZxgf3hn2b/lU6H1KaBShPkQyGJUQ0xwebezIPSuiyGwfz1UzJWQl4M7BDxtHtCCPlTg==} dependencies: @@ -6180,14 +5668,6 @@ packages: '@types/qs': 6.9.7 '@types/serve-static': 1.15.0 - /@types/fs-capacitor@2.0.0: - resolution: {integrity: sha512-FKVPOCFbhCvZxpVAMhdBdTfVfXUpsh15wFHgqOKxh9N9vzWZVuWCSijZ5T4U34XYNnuj2oduh6xcs1i+LPI+BQ==} - requiresBuild: true - dependencies: - '@types/node': 18.11.18 - dev: false - optional: true - /@types/google-one-tap@1.2.2: resolution: {integrity: sha512-7uAOjukbJnzJ5P8fKPSy7QDrbLbCEyUrSH/M4K+8wnk+cbSxE3t2MmrLPX7ejUl8rDZv3oUl0/uwQRlIIrLMBA==} dev: true @@ -6198,15 +5678,6 @@ packages: '@types/node': 18.11.18 dev: true - /@types/graphql-upload@8.0.12: - resolution: {integrity: sha512-M0ZPZqNUzKNB16q5woEzgG/Q8DjICV80K7JvDSRnDmDFfrRdfFX/n6PbmqAN7gCzECcHVnw1gk6N4Cg0FwxCqA==} - dependencies: - '@types/express': 4.17.16 - '@types/koa': 2.13.5 - fs-capacitor: 8.0.0 - graphql: 16.6.0 - dev: false - /@types/gtag.js@0.0.3: resolution: {integrity: sha512-iRF/4Q3G1t0OTNMjK52tpGSQPgEsYzWQL1IdVXt9BywK6MUK3ypB7LaoEQa8sW9gPXENoU1xAyCxqJhMkB2rCA==} dev: false @@ -6218,14 +5689,6 @@ packages: hoist-non-react-statics: 3.3.2 dev: false - /@types/http-assert@1.5.3: - resolution: {integrity: sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==} - dev: false - - /@types/http-errors@2.0.1: - resolution: {integrity: sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==} - dev: false - /@types/is-ci@3.0.0: resolution: {integrity: sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==} dependencies: @@ -6238,16 +5701,19 @@ packages: /@types/istanbul-lib-coverage@2.0.4: resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + dev: true /@types/istanbul-lib-report@3.0.0: resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} dependencies: '@types/istanbul-lib-coverage': 2.0.4 + dev: true /@types/istanbul-reports@3.0.1: resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} dependencies: '@types/istanbul-lib-report': 3.0.0 + dev: true /@types/jest@28.1.8: resolution: {integrity: sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw==} @@ -6292,29 +5758,6 @@ packages: dependencies: '@types/node': 18.11.18 - /@types/keygrip@1.0.2: - resolution: {integrity: sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==} - dev: false - - /@types/koa-compose@3.2.5: - resolution: {integrity: sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==} - dependencies: - '@types/koa': 2.13.5 - dev: false - - /@types/koa@2.13.5: - resolution: {integrity: sha512-HSUOdzKz3by4fnqagwthW/1w/yJspTgppyyalPVbgZf8jQWvdIXcVW5h2DGtw4zYntOaeRGx49r1hxoPWrD4aA==} - dependencies: - '@types/accepts': 1.3.5 - '@types/content-disposition': 0.5.5 - '@types/cookies': 0.7.7 - '@types/http-assert': 1.5.3 - '@types/http-errors': 2.0.1 - '@types/keygrip': 1.0.2 - '@types/koa-compose': 3.2.5 - '@types/node': 18.11.18 - dev: false - /@types/lodash@4.14.191: resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==} dev: false @@ -6330,38 +5773,10 @@ packages: /@types/mime@3.0.1: resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} - /@types/minimatch@3.0.5: - resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} - requiresBuild: true - dev: false - optional: true - /@types/minimist@1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true - /@types/node-fetch@2.5.10: - resolution: {integrity: sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ==} - dependencies: - '@types/node': 18.11.18 - form-data: 3.0.1 - dev: false - - /@types/node-fetch@2.5.4: - resolution: {integrity: sha512-Oz6id++2qAOFuOlE1j0ouk1dzl3mmI1+qINPNBhi9nt/gVOz0G+13Ao6qjhdF0Ys+eOkhu6JnFmt38bR3H0POQ==} - requiresBuild: true - dependencies: - '@types/node': 18.11.18 - dev: false - optional: true - - /@types/node-fetch@2.5.7: - resolution: {integrity: sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw==} - dependencies: - '@types/node': 18.11.18 - form-data: 3.0.1 - dev: false - /@types/node-fetch@2.6.4: resolution: {integrity: sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==} dependencies: @@ -6369,12 +5784,6 @@ packages: form-data: 3.0.1 dev: false - /@types/node@10.17.60: - resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} - requiresBuild: true - dev: false - optional: true - /@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: true @@ -6386,10 +5795,6 @@ packages: /@types/node@18.11.18: resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} - /@types/node@18.17.15: - resolution: {integrity: sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==} - dev: false - /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true @@ -6509,8 +5914,8 @@ packages: resolution: {integrity: sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A==} dev: true - /@types/semver@7.5.1: - resolution: {integrity: sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==} + /@types/semver@7.5.0: + resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} dev: true /@types/serve-static@1.15.0: @@ -6533,11 +5938,6 @@ packages: /@types/uuid@9.0.0: resolution: {integrity: sha512-kr90f+ERiQtKWMz5rP32ltJ/BtULDI5RVO0uavn1HQUOwjx0R1h0rnDYNL0CepF1zL5bSY6FISAfd9tOdDhU5Q==} - dev: true - - /@types/uuid@9.0.3: - resolution: {integrity: sha512-taHQQH/3ZyI3zP8M/puluDEIEvtQHVYcC6y3N8ijFtAd28+Ey/G4sg1u2gB01S8MwybLOKAp9/yCMu/uR5l3Ug==} - dev: false /@types/validator@13.11.1: resolution: {integrity: sha512-d/MUkJYdOeKycmm75Arql4M5+UuXmf4cHdHKsyw1GcvnNgL6s77UkgSgJ8TE/rI5PYsnwYq5jkcWBLuN/MpQ1A==} @@ -6554,12 +5954,6 @@ packages: '@types/webidl-conversions': 7.0.0 dev: false - /@types/ws@7.4.7: - resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} - dependencies: - '@types/node': 18.11.18 - dev: false - /@types/ws@8.5.5: resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} dependencies: @@ -6568,14 +5962,7 @@ packages: /@types/yargs-parser@21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} - - /@types/yargs@15.0.15: - resolution: {integrity: sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==} - requiresBuild: true - dependencies: - '@types/yargs-parser': 21.0.0 - dev: false - optional: true + dev: true /@types/yargs@17.0.20: resolution: {integrity: sha512-eknWrTHofQuPk2iuqDm1waA7V6xPlbgBoaaXEgYkClhLOnB0TtbW+srJaOToAgawPxPlHQzwypFA2bhZaUGP5A==} @@ -6583,7 +5970,7 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin@6.7.0(@typescript-eslint/parser@6.7.0)(eslint@8.49.0)(typescript@5.2.2): + /@typescript-eslint/eslint-plugin@6.7.0(@typescript-eslint/parser@6.7.0)(eslint@8.49.0)(typescript@4.7.4): resolution: {integrity: sha512-gUqtknHm0TDs1LhY12K2NA3Rmlmp88jK9Tx8vGZMfHeNMLE3GH2e9TRub+y+SOjuYgtOmok+wt1AyDPZqxbNag==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -6595,25 +5982,25 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.8.1 - '@typescript-eslint/parser': 6.7.0(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.7.0(eslint@8.49.0)(typescript@4.7.4) '@typescript-eslint/scope-manager': 6.7.0 - '@typescript-eslint/type-utils': 6.7.0(eslint@8.49.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.7.0(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/type-utils': 6.7.0(eslint@8.49.0)(typescript@4.7.4) + '@typescript-eslint/utils': 6.7.0(eslint@8.49.0)(typescript@4.7.4) '@typescript-eslint/visitor-keys': 6.7.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) eslint: 8.49.0 graphemer: 1.4.0 ignore: 5.2.4 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 + ts-api-utils: 1.0.3(typescript@4.7.4) + typescript: 4.7.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.49.0)(typescript@5.2.2): - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + /@typescript-eslint/parser@5.52.0(eslint@8.49.0)(typescript@4.7.4): + resolution: {integrity: sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -6622,17 +6009,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) - debug: 4.3.4 + '@typescript-eslint/scope-manager': 5.52.0 + '@typescript-eslint/types': 5.52.0 + '@typescript-eslint/typescript-estree': 5.52.0(typescript@4.7.4) + debug: 4.3.4(supports-color@5.5.0) eslint: 8.49.0 - typescript: 5.2.2 + typescript: 4.7.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.7.0(eslint@8.49.0)(typescript@5.2.2): + /@typescript-eslint/parser@6.7.0(eslint@8.49.0)(typescript@4.7.4): resolution: {integrity: sha512-jZKYwqNpNm5kzPVP5z1JXAuxjtl2uG+5NpaMocFPTNC2EdYIgbXIPImObOkhbONxtFTTdoZstLZefbaK+wXZng==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -6644,21 +6031,21 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.7.0 '@typescript-eslint/types': 6.7.0 - '@typescript-eslint/typescript-estree': 6.7.0(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 6.7.0(typescript@4.7.4) '@typescript-eslint/visitor-keys': 6.7.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) eslint: 8.49.0 - typescript: 5.2.2 + typescript: 4.7.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + /@typescript-eslint/scope-manager@5.52.0: + resolution: {integrity: sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 + '@typescript-eslint/types': 5.52.0 + '@typescript-eslint/visitor-keys': 5.52.0 dev: true /@typescript-eslint/scope-manager@6.7.0: @@ -6669,7 +6056,7 @@ packages: '@typescript-eslint/visitor-keys': 6.7.0 dev: true - /@typescript-eslint/type-utils@6.7.0(eslint@8.49.0)(typescript@5.2.2): + /@typescript-eslint/type-utils@6.7.0(eslint@8.49.0)(typescript@4.7.4): resolution: {integrity: sha512-f/QabJgDAlpSz3qduCyQT0Fw7hHpmhOzY/Rv6zO3yO+HVIdPfIWhrQoAyG+uZVtWAIS85zAyzgAFfyEr+MgBpg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -6679,18 +6066,18 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.7.0(typescript@5.2.2) - '@typescript-eslint/utils': 6.7.0(eslint@8.49.0)(typescript@5.2.2) - debug: 4.3.4 + '@typescript-eslint/typescript-estree': 6.7.0(typescript@4.7.4) + '@typescript-eslint/utils': 6.7.0(eslint@8.49.0)(typescript@4.7.4) + debug: 4.3.4(supports-color@5.5.0) eslint: 8.49.0 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 + ts-api-utils: 1.0.3(typescript@4.7.4) + typescript: 4.7.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + /@typescript-eslint/types@5.52.0: + resolution: {integrity: sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -6699,8 +6086,8 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.2.2): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + /@typescript-eslint/typescript-estree@5.52.0(typescript@4.7.4): + resolution: {integrity: sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -6708,19 +6095,19 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 + '@typescript-eslint/types': 5.52.0 + '@typescript-eslint/visitor-keys': 5.52.0 + debug: 4.3.4(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.4 - tsutils: 3.21.0(typescript@5.2.2) - typescript: 5.2.2 + semver: 7.3.8 + tsutils: 3.21.0(typescript@4.7.4) + typescript: 4.7.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.7.0(typescript@5.2.2): + /@typescript-eslint/typescript-estree@6.7.0(typescript@4.7.4): resolution: {integrity: sha512-dPvkXj3n6e9yd/0LfojNU8VMUGHWiLuBZvbM6V6QYD+2qxqInE7J+J/ieY2iGwR9ivf/R/haWGkIj04WVUeiSQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -6731,17 +6118,17 @@ packages: dependencies: '@typescript-eslint/types': 6.7.0 '@typescript-eslint/visitor-keys': 6.7.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 + ts-api-utils: 1.0.3(typescript@4.7.4) + typescript: 4.7.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@6.7.0(eslint@8.49.0)(typescript@5.2.2): + /@typescript-eslint/utils@6.7.0(eslint@8.49.0)(typescript@4.7.4): resolution: {integrity: sha512-MfCq3cM0vh2slSikQYqK2Gq52gvOhe57vD2RM3V4gQRZYX4rDPnKLu5p6cm89+LJiGlwEXU8hkYxhqqEC/V3qA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -6749,10 +6136,10 @@ packages: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) '@types/json-schema': 7.0.12 - '@types/semver': 7.5.1 + '@types/semver': 7.5.0 '@typescript-eslint/scope-manager': 6.7.0 '@typescript-eslint/types': 6.7.0 - '@typescript-eslint/typescript-estree': 6.7.0(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 6.7.0(typescript@4.7.4) eslint: 8.49.0 semver: 7.5.4 transitivePeerDependencies: @@ -6760,11 +6147,11 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + /@typescript-eslint/visitor-keys@5.52.0: + resolution: {integrity: sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/types': 5.52.0 eslint-visitor-keys: 3.4.3 dev: true @@ -6867,7 +6254,7 @@ packages: slate-react: 0.82.0(react-dom@18.2.0)(react@18.2.0)(slate@0.82.0) dev: false - /@udecode/plate-code-block-ui@8.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0)(styled-components@5.3.5): + /@udecode/plate-code-block-ui@8.3.0(@popperjs/core@2.11.6)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0)(styled-components@5.3.5): resolution: {integrity: sha512-I9VpyTdlog3W7QiqEVNwmaqkxfoUUjOkkKTTR9pfRDFt+3yUbmRpLOkwzvhZACIEPntXolr23rJFpHTQrCawcA==} peerDependencies: react: '>=16.8.0' @@ -6880,7 +6267,7 @@ packages: '@udecode/plate-code-block': 8.3.0(react-dom@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0) '@udecode/plate-core': 8.3.0(react-dom@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0) '@udecode/plate-styled-components': 8.3.0(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0)(styled-components@5.3.5) - '@udecode/plate-toolbar': 8.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0)(styled-components@5.3.5) + '@udecode/plate-toolbar': 8.3.0(@popperjs/core@2.11.6)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0)(styled-components@5.3.5) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) slate: 0.82.0 @@ -6963,7 +6350,7 @@ packages: slate-react: 0.82.0(react-dom@18.2.0)(react@18.2.0)(slate@0.82.0) dev: false - /@udecode/plate-list-ui@8.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0)(styled-components@5.3.5): + /@udecode/plate-list-ui@8.3.0(@popperjs/core@2.11.6)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0)(styled-components@5.3.5): resolution: {integrity: sha512-ORSZx/HBhplAtxjaK+7Zssgl84hSZDBu7flncT2O6kF6x4ItP4Ye5nR3OOyu0Q2LaOuGfY/sV73xkDrI+d/dbw==} peerDependencies: react: '>=16.8.0' @@ -6976,7 +6363,7 @@ packages: '@udecode/plate-core': 8.3.0(react-dom@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0) '@udecode/plate-list': 8.3.0(react-dom@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0) '@udecode/plate-styled-components': 8.3.0(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0)(styled-components@5.3.5) - '@udecode/plate-toolbar': 8.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0)(styled-components@5.3.5) + '@udecode/plate-toolbar': 8.3.0(@popperjs/core@2.11.6)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0)(styled-components@5.3.5) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) slate: 0.82.0 @@ -7081,7 +6468,7 @@ packages: styled-components: 5.3.5(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) dev: false - /@udecode/plate-toolbar@8.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0)(styled-components@5.3.5): + /@udecode/plate-toolbar@8.3.0(@popperjs/core@2.11.6)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0)(styled-components@5.3.5): resolution: {integrity: sha512-LDNxs4ZFLF2W3mCT64u8i+QQn+DAb2sNHfenOfxUysI+Ucju+tgY0zJMdXMQ12CCxaR4fUqXN1x7kiKd4bdrdA==} peerDependencies: react: '>=16.8.0' @@ -7097,7 +6484,7 @@ packages: '@udecode/plate-styled-components': 8.3.0(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0)(slate-history@0.66.0)(slate-react@0.82.0)(slate@0.82.0)(styled-components@5.3.5) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-popper: 2.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0)(react@18.2.0) + react-popper: 2.3.0(@popperjs/core@2.11.6)(react-dom@18.2.0)(react@18.2.0) react-use: 17.4.0(react-dom@18.2.0)(react@18.2.0) slate: 0.82.0 slate-history: 0.66.0(slate@0.82.0) @@ -7207,11 +6594,11 @@ packages: resolution: {integrity: sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA==} dev: false - /@whatwg-node/fetch@0.6.9(@types/node@18.17.15): + /@whatwg-node/fetch@0.6.9(@types/node@18.11.18): resolution: {integrity: sha512-JfrBCJdMu9n9OARc0e/hPHcD98/8Nz1CKSdGYDg6VbObDkV/Ys30xe5i/wPOatYbxuvatj1kfWeHf7iNX3i17w==} dependencies: '@peculiar/webcrypto': 1.4.3 - '@whatwg-node/node-fetch': 0.0.5(@types/node@18.17.15) + '@whatwg-node/node-fetch': 0.0.5(@types/node@18.11.18) busboy: 1.6.0 urlpattern-polyfill: 6.0.2 web-streams-polyfill: 3.2.1 @@ -7229,12 +6616,12 @@ packages: web-streams-polyfill: 3.2.1 dev: false - /@whatwg-node/node-fetch@0.0.5(@types/node@18.17.15): + /@whatwg-node/node-fetch@0.0.5(@types/node@18.11.18): resolution: {integrity: sha512-hbccmaSZaItdsRuBKBEEhLoO+5oXJPxiyd0kG2xXd0Dh3Rt+vZn4pADHxuSiSHLd9CM+S2z4+IxlEGbWUgiz9g==} peerDependencies: '@types/node': ^18.0.6 dependencies: - '@types/node': 18.17.15 + '@types/node': 18.11.18 '@whatwg-node/events': 0.0.2 busboy: 1.6.0 tslib: 2.6.2 @@ -7266,34 +6653,28 @@ packages: resolution: {integrity: sha512-LOmVnY1iTU2D8tv4Xf6MVMZZ+juIJ87Kt/plMijjN20NMAXGmH4u8bS1t0uT74cZ5gwpocYueV58YwyI8y+GKw==} engines: {node: '>=8'} dependencies: - tslib: 2.5.0 + tslib: 2.6.2 dev: false /@wry/context@0.7.0: resolution: {integrity: sha512-LcDAiYWRtwAoSOArfk7cuYvFXytxfVrdX7yxoUmK7pPITLk5jYh2F8knCwS7LjgYL8u1eidPlKKV6Ikqq0ODqQ==} engines: {node: '>=8'} dependencies: - tslib: 2.5.0 - dev: false - - /@wry/equality@0.1.11: - resolution: {integrity: sha512-mwEVBDUVODlsQQ5dfuLUS5/Tf7jqUKyhKYHmVi4fPB6bDMOfWvUPJmKgS1Z7Za/sOI3vzWt4+O7yCiL/70MogA==} - dependencies: - tslib: 1.14.1 + tslib: 2.6.2 dev: false /@wry/equality@0.5.3: resolution: {integrity: sha512-avR+UXdSrsF2v8vIqIgmeTY0UR91UT+IyablCyKe/uk22uOJ8fusKZnH9JH9e1/EtLeNJBtagNmL3eJdnOV53g==} engines: {node: '>=8'} dependencies: - tslib: 2.5.0 + tslib: 2.6.2 dev: false /@wry/trie@0.3.2: resolution: {integrity: sha512-yRTyhWSls2OY/pYLfwff867r8ekooZ4UI+/gxot5Wj8EFwSf2rG+n+Mo/6LoLQm1TKA4GRj2+LCpbfS937dClQ==} engines: {node: '>=8'} dependencies: - tslib: 2.5.0 + tslib: 2.6.2 dev: false /@xobotyi/scrollbar-width@1.9.5: @@ -7355,7 +6736,7 @@ packages: /acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: - acorn: 8.8.2 + acorn: 8.10.0 acorn-walk: 8.2.0 dev: false @@ -7416,19 +6797,6 @@ packages: - supports-color dev: false - /agentkeepalive@4.2.1: - resolution: {integrity: sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==} - engines: {node: '>= 8.0.0'} - requiresBuild: true - dependencies: - debug: 4.3.4(supports-color@5.5.0) - depd: 1.1.2 - humanize-ms: 1.2.1 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - /aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -7460,501 +6828,53 @@ packages: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - /ajv@8.11.0: - resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - - /ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.21.3 - - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - - /ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - dev: true - - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - /apollo-cache-control@0.11.6(graphql@15.5.0): - resolution: {integrity: sha512-YZ+uuIG+fPy+mkpBS2qKF0v1qlzZ3PW6xZVaDukeK3ed3iAs4L/2YnkTqau3OmoF/VPzX2FmSkocX/OVd59YSw==} - engines: {node: '>=6.0'} - deprecated: The functionality provided by the `apollo-cache-control` package is built in to `apollo-server-core` starting with Apollo Server 3. See https://www.apollographql.com/docs/apollo-server/migration/#cachecontrol for details. - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - apollo-server-env: 3.2.0 - apollo-server-plugin-base: 0.10.4(graphql@15.5.0) - graphql: 15.5.0 - transitivePeerDependencies: - - encoding - dev: false - - /apollo-cache-control@0.15.0(graphql@15.5.0): - resolution: {integrity: sha512-U2uYvHZsWmR6s6CD5zlq3PepfbUAM8953CeVM2Y2QYMtJ8i4CYplEPbIWb3zTIXSPbIPeWGddM56pChI6Iz3zA==} - engines: {node: '>=6.0'} - deprecated: The functionality provided by the `apollo-cache-control` package is built in to `apollo-server-core` starting with Apollo Server 3. See https://www.apollographql.com/docs/apollo-server/migration/#cachecontrol for details. - requiresBuild: true - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - apollo-server-env: 3.2.0 - apollo-server-plugin-base: 0.14.0(graphql@15.5.0) - graphql: 15.5.0 - transitivePeerDependencies: - - encoding - dev: false - optional: true - - /apollo-datasource@0.10.0: - resolution: {integrity: sha512-wrLhuoM2MtA0KA0+3qyioe0H2FjAxjTvuFOlNCk6WberA887m0MQlWULZImCWTkKuN+zEAMerHfxN+F+W8+lBA==} - engines: {node: '>=6'} - deprecated: The `apollo-datasource` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. - requiresBuild: true - dependencies: - apollo-server-caching: 0.7.0 - apollo-server-env: 3.2.0 - transitivePeerDependencies: - - encoding - dev: false - optional: true - - /apollo-datasource@0.7.3: - resolution: {integrity: sha512-PE0ucdZYjHjUyXrFWRwT02yLcx2DACsZ0jm1Mp/0m/I9nZu/fEkvJxfsryXB6JndpmQO77gQHixf/xGCN976kA==} - engines: {node: '>=6'} - deprecated: The `apollo-datasource` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. - dependencies: - apollo-server-caching: 0.5.3 - apollo-server-env: 3.2.0 - transitivePeerDependencies: - - encoding - dev: false - - /apollo-engine-reporting-protobuf@0.5.2: - resolution: {integrity: sha512-4wm9FR3B7UvJxcK/69rOiS5CAJPEYKufeRWb257ZLfX7NGFTMqvbc1hu4q8Ch7swB26rTpkzfsftLED9DqH9qg==} - dependencies: - '@apollo/protobufjs': 1.2.7 - dev: false - - /apollo-engine-reporting@2.3.0(graphql@15.5.0): - resolution: {integrity: sha512-SbcPLFuUZcRqDEZ6mSs8uHM9Ftr8yyt2IEu0JA8c3LNBmYXSLM7MHqFe80SVcosYSTBgtMz8mLJO8orhYoSYZw==} - engines: {node: '>=6.0'} - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - apollo-engine-reporting-protobuf: 0.5.2 - apollo-graphql: 0.5.0(graphql@15.5.0) - apollo-server-caching: 0.5.3 - apollo-server-env: 2.4.5 - apollo-server-errors: 2.5.0(graphql@15.5.0) - apollo-server-plugin-base: 0.9.1(graphql@15.5.0) - apollo-server-types: 0.5.1(graphql@15.5.0) - async-retry: 1.3.3 - graphql: 15.5.0 - uuid: 8.3.2 - transitivePeerDependencies: - - encoding - dev: false - - /apollo-env@0.6.5: - resolution: {integrity: sha512-jeBUVsGymeTHYWp3me0R2CZRZrFeuSZeICZHCeRflHTfnQtlmbSXdy5E0pOyRM9CU4JfQkKDC98S1YglQj7Bzg==} - engines: {node: '>=8'} - dependencies: - '@types/node-fetch': 2.5.7 - core-js: 3.27.2 - node-fetch: 2.6.8 - sha.js: 2.4.11 - transitivePeerDependencies: - - encoding - dev: false - - /apollo-env@0.9.2: - resolution: {integrity: sha512-YUai2qCVenzOr3v1K1Ad/cUqLqvIQxIWjjAWDU0Q00VjegHxjIOyamdpcYkACCIkrb0Kthj4Slql4+d5ZXyeXQ==} - engines: {node: '>=8'} - dependencies: - '@types/node-fetch': 2.5.10 - core-js: 3.27.2 - node-fetch: 2.6.8 - sha.js: 2.4.11 - transitivePeerDependencies: - - encoding - dev: false - - /apollo-graphql@0.4.5(graphql@15.5.0): - resolution: {integrity: sha512-0qa7UOoq7E71kBYE7idi6mNQhHLVdMEDInWk6TNw3KsSWZE2/I68gARP84Mj+paFTO5NYuw1Dht66PVX76Cc2w==} - engines: {node: '>=6'} - requiresBuild: true - peerDependencies: - graphql: ^14.2.1 - dependencies: - apollo-env: 0.6.5 - graphql: 15.5.0 - lodash.sortby: 4.7.0 - transitivePeerDependencies: - - encoding - dev: false - optional: true - - /apollo-graphql@0.5.0(graphql@15.5.0): - resolution: {integrity: sha512-YSdF/BKPbsnQpxWpmCE53pBJX44aaoif31Y22I/qKpB6ZSGzYijV5YBoCL5Q15H2oA/v/02Oazh9lbp4ek3eig==} - engines: {node: '>=6'} - peerDependencies: - graphql: ^14.2.1 || ^15.0.0 - dependencies: - apollo-env: 0.6.5 - graphql: 15.5.0 - lodash.sortby: 4.7.0 - transitivePeerDependencies: - - encoding - dev: false - - /apollo-graphql@0.9.7(graphql@15.5.0): - resolution: {integrity: sha512-bezL9ItUWUGHTm1bI/XzIgiiZbhXpsC7uxk4UxFPmcVJwJsDc3ayZ99oXxAaK+3Rbg/IoqrHckA6CwmkCsbaSA==} - engines: {node: '>=6'} - requiresBuild: true - peerDependencies: - graphql: ^14.2.1 || ^15.0.0 - dependencies: - core-js-pure: 3.27.2 - graphql: 15.5.0 - lodash.sortby: 4.7.0 - sha.js: 2.4.11 - dev: false - optional: true - - /apollo-link@1.2.14(graphql@15.5.0): - resolution: {integrity: sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg==} - peerDependencies: - graphql: ^0.11.3 || ^0.12.3 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - apollo-utilities: 1.3.4(graphql@15.5.0) - graphql: 15.5.0 - ts-invariant: 0.4.4 - tslib: 1.14.1 - zen-observable-ts: 0.8.21 - dev: false - - /apollo-reporting-protobuf@0.6.2: - resolution: {integrity: sha512-WJTJxLM+MRHNUxt1RTl4zD0HrLdH44F2mDzMweBj1yHL0kSt8I1WwoiF/wiGVSpnG48LZrBegCaOJeuVbJTbtw==} - deprecated: The `apollo-reporting-protobuf` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/usage-reporting-protobuf` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. - requiresBuild: true - dependencies: - '@apollo/protobufjs': 1.2.7 - dev: false - - /apollo-reporting-protobuf@0.8.0: - resolution: {integrity: sha512-B3XmnkH6Y458iV6OsA7AhfwvTgeZnFq9nPVjbxmLKnvfkEl8hYADtz724uPa0WeBiD7DSFcnLtqg9yGmCkBohg==} - deprecated: The `apollo-reporting-protobuf` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/usage-reporting-protobuf` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. - requiresBuild: true - dependencies: - '@apollo/protobufjs': 1.2.2 - dev: false - optional: true - - /apollo-server-caching@0.5.3: - resolution: {integrity: sha512-iMi3087iphDAI0U2iSBE9qtx9kQoMMEWr6w+LwXruBD95ek9DWyj7OeC2U/ngLjRsXM43DoBDXlu7R+uMjahrQ==} - engines: {node: '>=6'} - deprecated: This package is part of the legacy caching implementation used by Apollo Server v2 and v3, and is no longer maintained. We recommend you switch to the newer Keyv-based implementation (which is compatible with all versions of Apollo Server). See https://www.apollographql.com/docs/apollo-server/v3/performance/cache-backends#legacy-caching-implementation for more details. - dependencies: - lru-cache: 6.0.0 - dev: false - - /apollo-server-caching@0.7.0: - resolution: {integrity: sha512-MsVCuf/2FxuTFVhGLK13B+TZH9tBd2qkyoXKKILIiGcZ5CDUEBO14vIV63aNkMkS1xxvK2U4wBcuuNj/VH2Mkw==} - engines: {node: '>=6'} - deprecated: This package is part of the legacy caching implementation used by Apollo Server v2 and v3, and is no longer maintained. We recommend you switch to the newer Keyv-based implementation (which is compatible with all versions of Apollo Server). See https://www.apollographql.com/docs/apollo-server/v3/performance/cache-backends#legacy-caching-implementation for more details. - requiresBuild: true - dependencies: - lru-cache: 6.0.0 - dev: false - optional: true - - /apollo-server-core@2.16.1(graphql@15.5.0): - resolution: {integrity: sha512-nuwn5ZBbmzPwDetb3FgiFFJlNK7ZBFg8kis/raymrjd3eBGdNcOyMTJDl6J9673X9Xqp+dXQmFYDW/G3G8S1YA==} - engines: {node: '>=6'} - deprecated: The `apollo-server-core` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - '@apollographql/apollo-tools': 0.4.14(graphql@15.5.0) - '@apollographql/graphql-playground-html': 1.6.26 - '@types/graphql-upload': 8.0.12 - '@types/ws': 7.4.7 - apollo-cache-control: 0.11.6(graphql@15.5.0) - apollo-datasource: 0.7.3 - apollo-engine-reporting: 2.3.0(graphql@15.5.0) - apollo-server-caching: 0.5.3 - apollo-server-env: 2.4.5 - apollo-server-errors: 2.5.0(graphql@15.5.0) - apollo-server-plugin-base: 0.9.1(graphql@15.5.0) - apollo-server-types: 0.5.1(graphql@15.5.0) - apollo-tracing: 0.11.4(graphql@15.5.0) - fast-json-stable-stringify: 2.1.0 - graphql: 15.5.0 - graphql-extensions: 0.12.8(graphql@15.5.0) - graphql-tag: 2.12.6(graphql@15.5.0) - graphql-tools: 4.0.8(graphql@15.5.0) - graphql-upload: 8.1.0(graphql@15.5.0) - loglevel: 1.8.1 - sha.js: 2.4.11 - subscriptions-transport-ws: 0.9.19(graphql@15.5.0) - ws: 6.2.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: false - - /apollo-server-core@2.26.1(graphql@15.5.0): - resolution: {integrity: sha512-YnO1YXhHOnCY7Q2SZ0uUtPq6SLCw+t2uI19l59mzWuCyZYdHrtSy3zUEU6pM3tR9vvUuRGkYIfMRlo/Q8a1U5g==} - engines: {node: '>=6'} - deprecated: The `apollo-server-core` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. - requiresBuild: true - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - '@apollographql/apollo-tools': 0.5.4(graphql@15.5.0) - '@apollographql/graphql-playground-html': 1.6.27 - '@apollographql/graphql-upload-8-fork': 8.1.4(graphql@15.5.0) - '@josephg/resolvable': 1.0.1 - '@types/ws': 7.4.7 - apollo-cache-control: 0.15.0(graphql@15.5.0) - apollo-datasource: 0.10.0 - apollo-graphql: 0.9.7(graphql@15.5.0) - apollo-reporting-protobuf: 0.8.0 - apollo-server-caching: 0.7.0 - apollo-server-env: 3.2.0 - apollo-server-errors: 2.5.0(graphql@15.5.0) - apollo-server-plugin-base: 0.14.0(graphql@15.5.0) - apollo-server-types: 0.10.0(graphql@15.5.0) - apollo-tracing: 0.16.0(graphql@15.5.0) - async-retry: 1.3.3 - fast-json-stable-stringify: 2.1.0 - graphql: 15.5.0 - graphql-extensions: 0.16.0(graphql@15.5.0) - graphql-tag: 2.12.6(graphql@15.5.0) - graphql-tools: 4.0.8(graphql@15.5.0) - loglevel: 1.8.1 - lru-cache: 6.0.0 - sha.js: 2.4.11 - subscriptions-transport-ws: 0.9.19(graphql@15.5.0) - uuid: 8.3.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: false - optional: true - - /apollo-server-env@2.4.5: - resolution: {integrity: sha512-nfNhmGPzbq3xCEWT8eRpoHXIPNcNy3QcEoBlzVMjeglrBGryLG2LXwBSPnVmTRRrzUYugX0ULBtgE3rBFNoUgA==} - engines: {node: '>=6'} - deprecated: The `apollo-server-env` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/utils.fetcher` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. - dependencies: - node-fetch: 2.6.8 - util.promisify: 1.1.1 - transitivePeerDependencies: - - encoding - dev: false - - /apollo-server-env@3.2.0: - resolution: {integrity: sha512-V+kO5e6vUo2JwqV1/Ng71ZE3J6x1hCOC+nID2/++bCYl0/fPY9iLChbBNSgN/uoFcjhgmBchOv+m4o0Nie/TFQ==} - engines: {node: '>=6'} - deprecated: The `apollo-server-env` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/utils.fetcher` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. - dependencies: - node-fetch: 2.6.8 - util.promisify: 1.1.1 - transitivePeerDependencies: - - encoding - dev: false - - /apollo-server-errors@2.5.0(graphql@15.5.0): - resolution: {integrity: sha512-lO5oTjgiC3vlVg2RKr3RiXIIQ5pGXBFxYGGUkKDhTud3jMIhs+gel8L8zsEjKaKxkjHhCQAA/bcEfYiKkGQIvA==} - engines: {node: '>=6'} - deprecated: The `apollo-server-errors` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - graphql: 15.5.0 - dev: false - - /apollo-server-plugin-base@0.10.4(graphql@15.5.0): - resolution: {integrity: sha512-HRhbyHgHFTLP0ImubQObYhSgpmVH4Rk1BinnceZmwudIVLKrqayIVOELdyext/QnSmmzg5W7vF3NLGBcVGMqDg==} - engines: {node: '>=6'} - deprecated: The `apollo-server-plugin-base` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - apollo-server-types: 0.6.3(graphql@15.5.0) - graphql: 15.5.0 - transitivePeerDependencies: - - encoding - dev: false - - /apollo-server-plugin-base@0.14.0(graphql@15.5.0): - resolution: {integrity: sha512-nTNSFuBhZURGjtWptdVqwemYUOdsvABj/GSKzeNvepiEubiv4N0rt4Gvy1inHDiMbo98wQTdF/7XohNcB9A77g==} - engines: {node: '>=6'} - deprecated: The `apollo-server-plugin-base` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. - requiresBuild: true - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - apollo-server-types: 0.10.0(graphql@15.5.0) - graphql: 15.5.0 - transitivePeerDependencies: - - encoding - dev: false - optional: true - - /apollo-server-plugin-base@0.9.1(graphql@15.5.0): - resolution: {integrity: sha512-kvrX4Z3FdpjrZdHkyl5iY2A1Wvp4b6KQp00DeZqss7GyyKNUBKr80/7RQgBLEw7EWM7WB19j459xM/TjvW0FKQ==} - engines: {node: '>=6'} - deprecated: The `apollo-server-plugin-base` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - apollo-server-types: 0.5.1(graphql@15.5.0) - graphql: 15.5.0 - transitivePeerDependencies: - - encoding - dev: false - - /apollo-server-testing@2.25.3(graphql@15.5.0): - resolution: {integrity: sha512-EELtuDk1dn//fNxeYELuwwAy8bvhV9d60WhZfs3JrXqpzRDZhJmyyGqlMoHmkvCqK/mCOkc4hL54tM9rrFhU5Q==} - engines: {node: '>=6'} - requiresBuild: true - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - apollo-server-core: 2.26.1(graphql@15.5.0) - graphql: 15.5.0 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: false - optional: true - - /apollo-server-types@0.10.0(graphql@15.5.0): - resolution: {integrity: sha512-LsB3epw1X3Co/HGiKHCGtzWG35J59gG8Ypx0p22+wgdM9AVDm1ylsNGZy+osNIVJc1lUJf3nF5kZ90vA866K/w==} - engines: {node: '>=6'} - deprecated: The `apollo-server-types` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. - requiresBuild: true - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - apollo-reporting-protobuf: 0.8.0 - apollo-server-caching: 0.7.0 - apollo-server-env: 3.2.0 - graphql: 15.5.0 - transitivePeerDependencies: - - encoding - dev: false - optional: true + uri-js: 4.4.1 - /apollo-server-types@0.5.1(graphql@15.5.0): - resolution: {integrity: sha512-my2cPw+DAb2qVnIuBcsRKGyS28uIc2vjFxa1NpRoJZe9gK0BWUBk7wzXnIzWy3HZ5Er11e/40MPTUesNfMYNVA==} - engines: {node: '>=6'} - deprecated: The `apollo-server-types` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 + /ajv@8.11.0: + resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} dependencies: - apollo-engine-reporting-protobuf: 0.5.2 - apollo-server-caching: 0.5.3 - apollo-server-env: 2.4.5 - graphql: 15.5.0 - transitivePeerDependencies: - - encoding - dev: false + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 - /apollo-server-types@0.6.3(graphql@15.5.0): - resolution: {integrity: sha512-aVR7SlSGGY41E1f11YYz5bvwA89uGmkVUtzMiklDhZ7IgRJhysT5Dflt5IuwDxp+NdQkIhVCErUXakopocFLAg==} + /ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} - deprecated: The `apollo-server-types` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 + + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} dependencies: - apollo-reporting-protobuf: 0.6.2 - apollo-server-caching: 0.5.3 - apollo-server-env: 3.2.0 - graphql: 15.5.0 - transitivePeerDependencies: - - encoding - dev: false + type-fest: 0.21.3 - /apollo-tracing@0.11.4(graphql@15.5.0): - resolution: {integrity: sha512-zBu/SwQlXfbdpcKLzWARGVjrEkIZUW3W9Mb4CCIzv07HbBQ8IQpmf9w7HIJJefC7rBiBJYg6JBGyuro3N2lxCA==} - engines: {node: '>=4.0'} - deprecated: The `apollo-tracing` package is no longer part of Apollo Server 3. See https://www.apollographql.com/docs/apollo-server/migration/#tracing for details - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} dependencies: - apollo-server-env: 2.4.5 - apollo-server-plugin-base: 0.10.4(graphql@15.5.0) - graphql: 15.5.0 - transitivePeerDependencies: - - encoding - dev: false + color-convert: 1.9.3 - /apollo-tracing@0.16.0(graphql@15.5.0): - resolution: {integrity: sha512-Oy8kTggB+fJ/hHXwHyMpuTl5KW7u1XetKFDErZVOobUKc2zjc/NgWiC/s7SGYZCgfLodBjvwfa6rMcvLkz7c0w==} - engines: {node: '>=4.0'} - deprecated: The `apollo-tracing` package is no longer part of Apollo Server 3. See https://www.apollographql.com/docs/apollo-server/migration/#tracing for details - requiresBuild: true - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} dependencies: - apollo-server-env: 3.2.0 - apollo-server-plugin-base: 0.14.0(graphql@15.5.0) - graphql: 15.5.0 - transitivePeerDependencies: - - encoding - dev: false - optional: true + color-convert: 2.0.1 - /apollo-utilities@1.3.4(graphql@15.5.0): - resolution: {integrity: sha512-pk2hiWrCXMAy2fRPwEyhvka+mqwzeP60Jr1tRYi5xru+3ko94HI9o6lK0CT33/w4RDlxWchmdhDCrvdr+pHCig==} - peerDependencies: - graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} dependencies: - '@wry/equality': 0.1.11 - fast-json-stable-stringify: 2.1.0 - graphql: 15.5.0 - ts-invariant: 0.4.4 - tslib: 1.14.1 - dev: false + normalize-path: 3.0.0 + picomatch: 2.3.1 /append-field@1.0.0: resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} @@ -7994,13 +6914,7 @@ packages: dependencies: call-bind: 1.0.2 is-array-buffer: 3.0.2 - - /array-differ@3.0.0: - resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} - engines: {node: '>=8'} - requiresBuild: true - dev: false - optional: true + dev: true /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} @@ -8017,17 +6931,6 @@ packages: is-string: 1.0.7 dev: true - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - get-intrinsic: 1.2.1 - is-string: 1.0.7 - dev: true - /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -8053,16 +6956,6 @@ packages: es-shim-unscopables: 1.0.0 dev: true - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-shim-unscopables: 1.0.0 - dev: true - /array.prototype.flatmap@1.3.1: resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} engines: {node: '>= 0.4'} @@ -8073,36 +6966,14 @@ packages: es-shim-unscopables: 1.0.0 dev: true - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-shim-unscopables: 1.0.0 - dev: true - - /array.prototype.reduce@1.0.5: - resolution: {integrity: sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==} - engines: {node: '>= 0.4'} - requiresBuild: true - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-array-method-boxes-properly: 1.0.0 - is-string: 1.0.7 - dev: false - - /array.prototype.tosorted@1.1.2: - resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} + /array.prototype.tosorted@1.1.1: + resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} dependencies: call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + define-properties: 1.1.4 + es-abstract: 1.21.1 es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.0 dev: true /arraybuffer.prototype.slice@1.0.2: @@ -8116,6 +6987,7 @@ packages: get-intrinsic: 1.2.1 is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 + dev: true /arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} @@ -8149,10 +7021,6 @@ packages: engines: {node: '>=8'} dev: false - /async-limiter@1.0.1: - resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} - dev: false - /async-retry@1.3.3: resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} dependencies: @@ -8180,6 +7048,7 @@ packages: /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} + dev: true /aws4@1.12.0: resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} @@ -8247,8 +7116,8 @@ packages: resolution: {integrity: sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@babel/template': 7.20.7 - '@babel/types': 7.20.7 + '@babel/template': 7.22.5 + '@babel/types': 7.22.11 '@types/babel__core': 7.20.0 '@types/babel__traverse': 7.18.3 dev: true @@ -8495,6 +7364,7 @@ packages: electron-to-chromium: 1.4.503 node-releases: 2.0.13 update-browserslist-db: 1.0.11(browserslist@4.21.10) + dev: false /browserslist@4.21.4: resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} @@ -8566,13 +7436,6 @@ packages: run-applescript: 5.0.0 dev: true - /busboy@0.3.1: - resolution: {integrity: sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==} - engines: {node: '>=4.5.0'} - dependencies: - dicer: 0.3.0 - dev: false - /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -8585,34 +7448,6 @@ packages: engines: {node: '>= 0.8'} dev: false - /cacache@15.3.0: - resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} - engines: {node: '>= 10'} - requiresBuild: true - dependencies: - '@npmcli/fs': 1.1.1 - '@npmcli/move-file': 1.1.2 - chownr: 2.0.0 - fs-minipass: 2.1.0 - glob: 7.2.3 - infer-owner: 1.0.4 - lru-cache: 6.0.0 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - mkdirp: 1.0.4 - p-map: 4.0.0 - promise-inflight: 1.0.1 - rimraf: 3.0.2 - ssri: 8.0.1 - tar: 6.1.13 - unique-filename: 1.1.1 - transitivePeerDependencies: - - bluebird - dev: false - optional: true - /call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: @@ -8623,13 +7458,6 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - /camel-case@4.1.1: - resolution: {integrity: sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==} - dependencies: - pascal-case: 3.1.2 - tslib: 1.14.1 - dev: false - /camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} dependencies: @@ -8664,6 +7492,7 @@ packages: /caniuse-lite@1.0.30001523: resolution: {integrity: sha512-I5q5cisATTPZ1mc588Z//pj/Ox80ERYDfR71YnvY7raS/NOk8xXlZcB0sF7JdqaV//kOaa6aus7lRfpdnt1eBA==} + dev: false /canvas@2.11.0: resolution: {integrity: sha512-bdTjFexjKJEwtIo0oRx8eD4G2yWoUOXP9lj279jmQ2zMnTQhT8C3512OKz3s+ZOaQlLbE7TuVvRDYDB3Llyy5g==} @@ -8788,21 +7617,6 @@ packages: parse5: 7.1.2 parse5-htmlparser2-tree-adapter: 7.0.0 - /chokidar@3.5.1: - resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.5.0 - optionalDependencies: - fsevents: 2.3.3 - dev: false - /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -8815,7 +7629,7 @@ packages: normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: 2.3.3 + fsevents: 2.3.2 /chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} @@ -8927,12 +7741,6 @@ packages: engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} dev: true - /code-block-writer@10.1.1: - resolution: {integrity: sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw==} - requiresBuild: true - dev: false - optional: true - /code-block-writer@12.0.0: resolution: {integrity: sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==} @@ -9097,17 +7905,6 @@ packages: toggle-selection: 1.0.6 dev: false - /core-js-pure@3.27.2: - resolution: {integrity: sha512-Cf2jqAbXgWH3VVzjyaaFkY1EBazxugUepGymDoeteyYr9ByX51kD2jdHZlsEF/xnJMyN3Prua7mQuzwMg6Zc9A==} - requiresBuild: true - dev: false - optional: true - - /core-js@3.27.2: - resolution: {integrity: sha512-9ashVQskuh5AZEZ1JdQWp1GqSoC1e1G87MzRqg2gIfVAQ7Qn9K+uFj8EcniUFA4P2NLZfV+TOlX1SzoKfo+s7w==} - requiresBuild: true - dev: false - /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: false @@ -9120,7 +7917,7 @@ packages: vary: 1.1.2 dev: false - /cosmiconfig-typescript-loader@4.4.0(@types/node@18.17.15)(cosmiconfig@7.1.0)(ts-node@10.9.1)(typescript@5.2.2): + /cosmiconfig-typescript-loader@4.4.0(@types/node@18.11.18)(cosmiconfig@7.1.0)(ts-node@10.9.1)(typescript@4.7.4): resolution: {integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==} engines: {node: '>=v14.21.3'} peerDependencies: @@ -9129,10 +7926,10 @@ packages: ts-node: '>=10' typescript: '>=4' dependencies: - '@types/node': 18.17.15 + '@types/node': 18.11.18 cosmiconfig: 7.1.0 - ts-node: 10.9.1(@types/node@18.17.15)(typescript@5.2.2) - typescript: 5.2.2 + ts-node: 10.9.1(@types/node@18.11.18)(typescript@4.7.4) + typescript: 4.7.4 dev: false /cosmiconfig@7.1.0: @@ -9271,10 +8068,6 @@ packages: /csstype@3.1.1: resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} - /csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - dev: false - /csv-generate@3.4.3: resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} dev: true @@ -9352,18 +8145,6 @@ packages: ms: 2.1.3 dev: true - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - /debug@4.3.4(supports-color@5.5.0): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -9468,6 +8249,7 @@ packages: dependencies: has-property-descriptors: 1.0.0 object-keys: 1.1.1 + dev: true /define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} @@ -9475,6 +8257,7 @@ packages: dependencies: has-property-descriptors: 1.0.0 object-keys: 1.1.1 + dev: true /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} @@ -9488,11 +8271,6 @@ packages: engines: {node: '>=0.10'} dev: false - /depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - dev: false - /depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -9503,10 +8281,6 @@ packages: engines: {node: '>= 0.6.0'} dev: false - /deprecated-decorator@0.1.6: - resolution: {integrity: sha512-MHidOOnCHGlZDKsI21+mbIIhf4Fff+hhCTB7gtVg4uoIqjcrTZc5v6M+GS2zVI0sV7PqK415rb8XaOSQsQkHOw==} - dev: false - /destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -9529,13 +8303,6 @@ packages: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} dev: false - /dicer@0.3.0: - resolution: {integrity: sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==} - engines: {node: '>=4.5.0'} - dependencies: - streamsearch: 0.1.2 - dev: false - /diff-sequences@28.1.1: resolution: {integrity: sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} @@ -9671,6 +8438,7 @@ packages: /electron-to-chromium@1.4.503: resolution: {integrity: sha512-LF2IQit4B0VrUHFeQkWhZm97KuJSGF2WJqq1InpY+ECpFRkXd8yTIaTtJxsO0OKDmiBYwWqcrNaXOurn2T2wiA==} + dev: false /emittery@0.10.2: resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} @@ -9693,14 +8461,6 @@ packages: engines: {node: '>= 0.8'} dev: false - /encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - requiresBuild: true - dependencies: - iconv-lite: 0.6.3 - dev: false - optional: true - /end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: @@ -9770,12 +8530,6 @@ packages: string.prototype.trim: 1.2.7 dev: true - /err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - requiresBuild: true - dev: false - optional: true - /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: @@ -9836,7 +8590,7 @@ packages: call-bind: 1.0.2 es-set-tostringtag: 2.0.1 es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 + function.prototype.name: 1.1.5 get-intrinsic: 1.2.1 get-symbol-description: 1.0.0 globalthis: 1.0.3 @@ -9852,7 +8606,7 @@ packages: is-regex: 1.1.4 is-shared-array-buffer: 1.0.2 is-string: 1.0.7 - is-typed-array: 1.1.12 + is-typed-array: 1.1.10 is-weakref: 1.0.2 object-inspect: 1.12.3 object-keys: 1.1.1 @@ -9860,18 +8614,20 @@ packages: regexp.prototype.flags: 1.5.0 safe-array-concat: 1.0.1 safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 + string.prototype.trim: 1.2.7 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 typed-array-buffer: 1.0.0 typed-array-byte-length: 1.0.0 typed-array-byte-offset: 1.0.0 typed-array-length: 1.0.4 unbox-primitive: 1.0.2 which-typed-array: 1.1.11 + dev: true /es-array-method-boxes-properly@1.0.0: resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + dev: true /es-get-iterator@1.1.3: resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} @@ -9916,6 +8672,7 @@ packages: get-intrinsic: 1.2.0 has: 1.0.3 has-tostringtag: 1.0.0 + dev: true /es-shim-unscopables@1.0.0: resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} @@ -9930,6 +8687,7 @@ packages: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 + dev: true /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} @@ -9964,7 +8722,7 @@ packages: optionalDependencies: source-map: 0.6.1 - /eslint-config-next@13.0.0(eslint@8.49.0)(typescript@5.2.2): + /eslint-config-next@13.0.0(eslint@8.49.0)(typescript@4.7.4): resolution: {integrity: sha512-y2nqWS2tycWySdVhb+rhp6CuDmDazGySqkzzQZf3UTyfHyC7og1m5m/AtMFwCo5mtvDqvw1BENin52kV9733lg==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 @@ -9975,7 +8733,7 @@ packages: dependencies: '@next/eslint-plugin-next': 13.0.0 '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/parser': 5.52.0(eslint@8.49.0)(typescript@4.7.4) eslint: 8.49.0 eslint-import-resolver-node: 0.3.7 eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.27.5)(eslint@8.49.0) @@ -9983,7 +8741,7 @@ packages: eslint-plugin-jsx-a11y: 6.7.1(eslint@8.49.0) eslint-plugin-react: 7.33.2(eslint@8.49.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.49.0) - typescript: 5.2.2 + typescript: 4.7.4 transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color @@ -10015,7 +8773,7 @@ packages: eslint: '*' eslint-plugin-import: '*' dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) eslint: 8.49.0 eslint-plugin-import: 2.27.5(@typescript-eslint/parser@6.7.0)(eslint@8.49.0) glob: 7.2.3 @@ -10047,7 +8805,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.7.0(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.7.0(eslint@8.49.0)(typescript@4.7.4) debug: 3.2.7 eslint: 8.49.0 eslint-import-resolver-node: 0.3.7 @@ -10065,7 +8823,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.7.0(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.7.0(eslint@8.49.0)(typescript@4.7.4) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 @@ -10080,7 +8838,7 @@ packages: minimatch: 3.1.2 object.values: 1.1.6 resolve: 1.22.1 - semver: 6.3.0 + semver: 6.3.1 tsconfig-paths: 3.14.1 transitivePeerDependencies: - eslint-import-resolver-typescript @@ -10110,7 +8868,7 @@ packages: minimatch: 3.1.2 object.entries: 1.1.6 object.fromentries: 2.0.6 - semver: 6.3.0 + semver: 6.3.1 dev: true /eslint-plugin-prettier@5.0.0(eslint-config-prettier@9.0.0)(eslint@8.49.0)(prettier@3.0.3): @@ -10149,23 +8907,23 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - array-includes: 3.1.7 - array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.2 + array-includes: 3.1.6 + array.prototype.flatmap: 1.3.1 + array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 es-iterator-helpers: 1.0.14 eslint: 8.49.0 estraverse: 5.3.0 - jsx-ast-utils: 3.3.5 + jsx-ast-utils: 3.3.3 minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.1.7 + object.entries: 1.1.6 + object.fromentries: 2.0.6 + object.hasown: 1.1.2 + object.values: 1.1.6 prop-types: 15.8.1 resolve: 2.0.0-next.4 semver: 6.3.1 - string.prototype.matchall: 4.0.9 + string.prototype.matchall: 4.0.8 dev: true /eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.7.0)(eslint@8.49.0): @@ -10178,7 +8936,7 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.7.0(@typescript-eslint/parser@6.7.0)(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/eslint-plugin': 6.7.0(@typescript-eslint/parser@6.7.0)(eslint@8.49.0)(typescript@4.7.4) eslint: 8.49.0 eslint-rule-composer: 0.3.0 dev: true @@ -10223,7 +8981,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -10235,7 +8993,7 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.21.0 + globals: 13.19.0 graphemer: 1.4.0 ignore: 5.2.4 imurmurhash: 0.1.4 @@ -10452,18 +9210,6 @@ packages: merge2: 1.4.1 micromatch: 4.0.5 - /fast-glob@3.2.5: - resolution: {integrity: sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==} - engines: {node: '>=8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - picomatch: 2.3.1 - dev: false - /fast-glob@3.3.1: resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} engines: {node: '>=8.6.0'} @@ -10564,7 +9310,7 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: 3.1.0 + flat-cache: 3.0.4 dev: true /fill-range@7.0.1: @@ -10614,12 +9360,11 @@ packages: pkg-dir: 4.2.0 dev: true - /flat-cache@3.1.0: - resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==} - engines: {node: '>=12.0.0'} + /flat-cache@3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: flatted: 3.2.7 - keyv: 4.5.3 rimraf: 3.0.2 dev: true @@ -10645,6 +9390,7 @@ packages: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 + dev: true /fork-ts-checker-webpack-plugin@7.2.14(typescript@4.9.4)(webpack@5.75.0): resolution: {integrity: sha512-Tg2feh/n8k486KX0EbXVUfJj3j0xnnbKYTJw0fnIb2QdV0+lblOYZSal5ed9hARoWVwKeOC7sYE2EakSRLo5ZA==} @@ -10715,7 +9461,7 @@ packages: /framesync@6.1.1: resolution: {integrity: sha512-ApprAm7ey4LSp7BPucYz/JPMdRvL1VnBmQ64e61dkns/WPM4aCU8oSKiMRF/p4NtVEG9sZeVyHOBoVaA9+p3sA==} dependencies: - tslib: 2.5.0 + tslib: 2.6.2 dev: false /fresh@0.5.2: @@ -10723,16 +9469,6 @@ packages: engines: {node: '>= 0.6'} dev: false - /fs-capacitor@2.0.4: - resolution: {integrity: sha512-8S4f4WsCryNw2mJJchi46YgB6CR5Ze+4L1h8ewl9tEpL4SJ3ZO+c/bS4BWhB8bK+O3TMqhuZarTitd0S0eh2pA==} - engines: {node: '>=8.5'} - dev: false - - /fs-capacitor@8.0.0: - resolution: {integrity: sha512-+Lk6iSKajdGw+7XYxUkwIzreJ2G1JFlYOdnKJv5PzwFLVsoJYBpCuS7WPIUSNT1IbQaEWT1nhYU63Ud03DyzLA==} - engines: {node: ^14.17.0 || >=16.0.0} - dev: false - /fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -10784,14 +9520,6 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true - dev: true - optional: true - - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true optional: true /function-bind@1.1.1: @@ -10807,17 +9535,9 @@ packages: functions-have-names: 1.2.3 dev: true - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - functions-have-names: 1.2.3 - /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true /gauge@3.0.2: resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} @@ -10904,6 +9624,7 @@ packages: has: 1.0.3 has-proto: 1.0.1 has-symbols: 1.0.3 + dev: true /get-node-dimensions@1.2.1: resolution: {integrity: sha512-2MSPMu7S1iOTL+BOa6K1S62hB2zUAYNF/lV0gSVlOaacd087lc6nR1H1r0e3B1CerTo+RceOmi1iJW+vp21xcQ==} @@ -10936,6 +9657,7 @@ packages: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.0 + dev: true /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -10978,8 +9700,8 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - /globals@13.21.0: - resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} + /globals@13.19.0: + resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -10989,7 +9711,8 @@ packages: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: - define-properties: 1.1.4 + define-properties: 1.2.0 + dev: true /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} @@ -11002,12 +9725,12 @@ packages: merge2: 1.4.1 slash: 3.0.0 - /goober@2.1.11(csstype@3.1.2): + /goober@2.1.11(csstype@3.1.1): resolution: {integrity: sha512-5SS2lmxbhqH0u9ABEWq7WPU69a4i2pYcHeCxqaNq6Cw3mnrF0ghWNM4tEGid4dKy8XNIAUbuThuozDHHKJVh3A==} peerDependencies: csstype: ^3.0.10 dependencies: - csstype: 3.1.2 + csstype: 3.1.1 dev: false /google-auth-library@7.14.1: @@ -11092,6 +9815,7 @@ packages: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.0 + dev: true /graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} @@ -11104,7 +9828,7 @@ packages: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true - /graphql-config@4.5.0(@types/node@18.17.15)(graphql@16.8.0): + /graphql-config@4.5.0(@types/node@18.11.18)(graphql@16.6.0): resolution: {integrity: sha512-x6D0/cftpLUJ0Ch1e5sj1TZn6Wcxx4oMfmhaG9shM0DKajA9iR+j1z86GSTQ19fShbGvrSSvbIQsHku6aQ6BBw==} engines: {node: '>= 10.0.0'} peerDependencies: @@ -11114,18 +9838,18 @@ packages: cosmiconfig-toml-loader: optional: true dependencies: - '@graphql-tools/graphql-file-loader': 7.5.17(graphql@16.8.0) - '@graphql-tools/json-file-loader': 7.4.18(graphql@16.8.0) - '@graphql-tools/load': 7.8.14(graphql@16.8.0) - '@graphql-tools/merge': 8.4.2(graphql@16.8.0) - '@graphql-tools/url-loader': 7.17.18(@types/node@18.17.15)(graphql@16.8.0) - '@graphql-tools/utils': 9.2.1(graphql@16.8.0) + '@graphql-tools/graphql-file-loader': 7.5.17(graphql@16.6.0) + '@graphql-tools/json-file-loader': 7.4.18(graphql@16.6.0) + '@graphql-tools/load': 7.8.14(graphql@16.6.0) + '@graphql-tools/merge': 8.4.2(graphql@16.6.0) + '@graphql-tools/url-loader': 7.17.18(@types/node@18.11.18)(graphql@16.6.0) + '@graphql-tools/utils': 9.2.1(graphql@16.6.0) cosmiconfig: 8.0.0 - graphql: 16.8.0 + graphql: 16.6.0 jiti: 1.17.1 minimatch: 4.2.3 string-env-interpolation: 1.0.1 - tslib: 2.5.0 + tslib: 2.6.2 transitivePeerDependencies: - '@types/node' - bufferutil @@ -11133,60 +9857,18 @@ packages: - utf-8-validate dev: false - /graphql-extensions@0.12.8(graphql@15.5.0): - resolution: {integrity: sha512-xjsSaB6yKt9jarFNNdivl2VOx52WySYhxPgf8Y16g6GKZyAzBoIFiwyGw5PJDlOSUa6cpmzn6o7z8fVMbSAbkg==} - engines: {node: '>=6.0'} - deprecated: 'The `graphql-extensions` API has been removed from Apollo Server 3. Use the plugin API instead: https://www.apollographql.com/docs/apollo-server/integrations/plugins/' - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - '@apollographql/apollo-tools': 0.4.14(graphql@15.5.0) - apollo-server-env: 3.2.0 - apollo-server-types: 0.6.3(graphql@15.5.0) - graphql: 15.5.0 - transitivePeerDependencies: - - encoding - dev: false - - /graphql-extensions@0.16.0(graphql@15.5.0): - resolution: {integrity: sha512-rZQc/USoEIw437BGRUwoHoLPR1LA791Ltj6axONqgKIyyx2sqIO3YT9kTbB/eIUdJBrCozp4KuUeZ09xKeQDxg==} - engines: {node: '>=6.0'} - deprecated: 'The `graphql-extensions` API has been removed from Apollo Server 3. Use the plugin API instead: https://www.apollographql.com/docs/apollo-server/integrations/plugins/' - requiresBuild: true - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - '@apollographql/apollo-tools': 0.5.4(graphql@15.5.0) - apollo-server-env: 3.2.0 - apollo-server-types: 0.10.0(graphql@15.5.0) - graphql: 15.5.0 - transitivePeerDependencies: - - encoding - dev: false - optional: true - - /graphql-request@6.1.0(graphql@16.8.0): + /graphql-request@6.1.0(graphql@16.6.0): resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} peerDependencies: graphql: 14 - 16 dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.6.0) cross-fetch: 3.1.8 - graphql: 16.8.0 + graphql: 16.6.0 transitivePeerDependencies: - encoding dev: false - /graphql-tag@2.12.6(graphql@15.5.0): - resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} - engines: {node: '>=10'} - peerDependencies: - graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - graphql: 15.5.0 - tslib: 2.5.0 - dev: false - /graphql-tag@2.12.6(graphql@16.6.0): resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} engines: {node: '>=10'} @@ -11194,48 +9876,7 @@ packages: graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: graphql: 16.6.0 - tslib: 2.5.0 - dev: false - - /graphql-tag@2.12.6(graphql@16.8.0): - resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} - engines: {node: '>=10'} - peerDependencies: - graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - graphql: 16.8.0 - tslib: 2.5.0 - dev: false - - /graphql-tools@4.0.8(graphql@15.5.0): - resolution: {integrity: sha512-MW+ioleBrwhRjalKjYaLQbr+920pHBgy9vM/n47sswtns8+96sRn5M/G+J1eu7IMeKWiN/9p6tmwCHU7552VJg==} - deprecated: |- - This package has been deprecated and now it only exports makeExecutableSchema. - And it will no longer receive updates. - We recommend you to migrate to scoped packages such as @graphql-tools/schema, @graphql-tools/utils and etc. - Check out https://www.graphql-tools.com to learn what package you should use instead - peerDependencies: - graphql: ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - apollo-link: 1.2.14(graphql@15.5.0) - apollo-utilities: 1.3.4(graphql@15.5.0) - deprecated-decorator: 0.1.6 - graphql: 15.5.0 - iterall: 1.3.0 - uuid: 3.4.0 - dev: false - - /graphql-upload@8.1.0(graphql@15.5.0): - resolution: {integrity: sha512-U2OiDI5VxYmzRKw0Z2dmfk0zkqMRaecH9Smh1U277gVgVe9Qn+18xqf4skwr4YJszGIh7iQDZ57+5ygOK9sM/Q==} - engines: {node: '>=8.5'} - peerDependencies: - graphql: 0.13.1 - 14 - dependencies: - busboy: 0.3.1 - fs-capacitor: 2.0.4 - graphql: 15.5.0 - http-errors: 1.8.1 - object-path: 0.11.8 + tslib: 2.6.2 dev: false /graphql-ws@5.12.1(graphql@16.6.0): @@ -11247,30 +9888,11 @@ packages: graphql: 16.6.0 dev: false - /graphql-ws@5.12.1(graphql@16.8.0): - resolution: {integrity: sha512-umt4f5NnMK46ChM2coO36PTFhHouBrK9stWWBczERguwYrGnPNxJ9dimU6IyOBfOkC6Izhkg4H8+F51W/8CYDg==} - engines: {node: '>=10'} - peerDependencies: - graphql: '>=0.11 <=16' - dependencies: - graphql: 16.8.0 - dev: false - - /graphql@15.5.0: - resolution: {integrity: sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA==} - engines: {node: '>= 10.x'} - dev: false - /graphql@16.6.0: resolution: {integrity: sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} dev: false - /graphql@16.8.0: - resolution: {integrity: sha512-0oKGaR+y3qcS5mCu1vb7KG+a89vjn06C7Ihq/dDl3jA+A8B3TKomvi3CiEcVLJQGalbu8F52LxkOym7U5sSfbg==} - engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - dev: false - /gtoken@5.3.2: resolution: {integrity: sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==} engines: {node: '>=10'} @@ -11309,6 +9931,7 @@ packages: /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} @@ -11321,11 +9944,13 @@ packages: /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 + dev: true /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} + dev: true /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} @@ -11336,6 +9961,7 @@ packages: engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 + dev: true /has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} @@ -11421,12 +10047,6 @@ packages: domutils: 3.0.1 entities: 4.4.0 - /http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - requiresBuild: true - dev: false - optional: true - /http-cookie-agent@5.0.2(tough-cookie@4.1.2): resolution: {integrity: sha512-BiBmZyIMGl5mLKmY7KH2uCVlcNUl1jexjdtWXFCUF4DFOrNZg1c5iPPTzWDzU7Ngfb6fB03DPpJQ80KQWmycsg==} engines: {node: '>=14.18.0 <15.0.0 || >=16.0.0'} @@ -11446,17 +10066,6 @@ packages: - supports-color dev: false - /http-errors@1.8.1: - resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} - engines: {node: '>= 0.6'} - dependencies: - depd: 1.1.2 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 1.5.0 - toidentifier: 1.0.1 - dev: false - /http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} @@ -11468,19 +10077,6 @@ packages: toidentifier: 1.0.1 dev: false - /http-proxy-agent@4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} - requiresBuild: true - dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - dev: false - optional: true - /http-proxy-agent@5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} @@ -11538,14 +10134,6 @@ packages: engines: {node: '>=14.18.0'} dev: true - /humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - requiresBuild: true - dependencies: - ms: 2.1.3 - dev: false - optional: true - /hyphenate-style-name@1.0.4: resolution: {integrity: sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==} dev: false @@ -11607,17 +10195,12 @@ packages: /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + dev: true /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} - /infer-owner@1.0.4: - resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} - requiresBuild: true - dev: false - optional: true - /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: @@ -11688,6 +10271,7 @@ packages: get-intrinsic: 1.2.1 has: 1.0.3 side-channel: 1.0.4 + dev: true /interpret@1.4.0: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} @@ -11754,7 +10338,8 @@ packages: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 - is-typed-array: 1.1.12 + is-typed-array: 1.1.10 + dev: true /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -11774,6 +10359,7 @@ packages: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 + dev: true /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} @@ -11787,6 +10373,7 @@ packages: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 + dev: true /is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} @@ -11795,6 +10382,7 @@ packages: /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} + dev: true /is-ci@3.0.1: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} @@ -11808,17 +10396,12 @@ packages: dependencies: has: 1.0.3 - /is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} - dependencies: - has: 1.0.3 - dev: true - /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 + dev: true /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} @@ -11880,12 +10463,6 @@ packages: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} - /is-lambda@1.0.1: - resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} - requiresBuild: true - dev: false - optional: true - /is-lower-case@2.0.2: resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==} dependencies: @@ -11896,22 +10473,17 @@ packages: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} dev: true - /is-negated-glob@1.0.0: - resolution: {integrity: sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==} - engines: {node: '>=0.10.0'} - requiresBuild: true - dev: false - optional: true - /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} + dev: true /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 + dev: true /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} @@ -11941,6 +10513,7 @@ packages: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 + dev: true /is-relative@1.0.0: resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} @@ -11957,6 +10530,7 @@ packages: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.2 + dev: true /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} @@ -11972,6 +10546,7 @@ packages: engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 + dev: true /is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} @@ -11989,6 +10564,7 @@ packages: engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 + dev: true /is-typed-array@1.1.10: resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} @@ -11999,12 +10575,7 @@ packages: for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 - - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} - dependencies: - which-typed-array: 1.1.11 + dev: true /is-unc-path@1.0.0: resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} @@ -12031,6 +10602,7 @@ packages: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 + dev: true /is-weakset@2.0.2: resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} @@ -12060,6 +10632,7 @@ packages: /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -12095,7 +10668,7 @@ packages: engines: {node: '>=8'} dependencies: '@babel/core': 7.20.12 - '@babel/parser': 7.20.13 + '@babel/parser': 7.22.11 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.1 @@ -12131,10 +10704,6 @@ packages: istanbul-lib-report: 3.0.0 dev: true - /iterall@1.2.2: - resolution: {integrity: sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==} - dev: false - /iterall@1.3.0: resolution: {integrity: sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==} dev: false @@ -12339,7 +10908,7 @@ packages: micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: - fsevents: 2.3.3 + fsevents: 2.3.2 dev: true /jest-leak-detector@28.1.3: @@ -12364,7 +10933,7 @@ packages: resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.10 '@jest/types': 28.1.3 '@types/stack-utils': 2.0.1 chalk: 4.1.2 @@ -12492,7 +11061,7 @@ packages: '@babel/generator': 7.20.7 '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.20.12) '@babel/traverse': 7.20.13(supports-color@5.5.0) - '@babel/types': 7.20.7 + '@babel/types': 7.22.11 '@jest/expect-utils': 28.1.3 '@jest/transform': 28.1.3 '@jest/types': 28.1.3 @@ -12639,7 +11208,7 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.8.2 + acorn: 8.10.0 acorn-globals: 6.0.0 canvas: 2.11.0 cssom: 0.5.0 @@ -12664,7 +11233,7 @@ packages: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 10.0.0 - ws: 8.12.0 + ws: 8.13.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -12706,7 +11275,7 @@ packages: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - ws: 8.12.0 + ws: 8.13.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -12725,10 +11294,6 @@ packages: bignumber.js: 9.1.1 dev: false - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true - /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -12816,16 +11381,6 @@ packages: object.assign: 4.1.4 dev: true - /jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - dependencies: - array-includes: 3.1.7 - array.prototype.flat: 1.3.2 - object.assign: 4.1.4 - object.values: 1.1.7 - dev: true - /jwa@1.4.1: resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} dependencies: @@ -12861,12 +11416,6 @@ packages: engines: {node: '>=12.0.0'} dev: false - /keyv@4.5.3: - resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} - dependencies: - json-buffer: 3.0.1 - dev: true - /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -13041,16 +11590,6 @@ packages: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} dev: true - /lodash.xorby@4.7.0: - resolution: {integrity: sha512-gYiD6nvuQy0AEkMoUju+t4f4Rn18fjsLB/7x7YZFqtFT9kmegRLrj/uGEQVyVDy7otTmSrIMXNOk2wwuLcfHCQ==} - requiresBuild: true - dev: false - optional: true - - /lodash@4.17.20: - resolution: {integrity: sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==} - dev: false - /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -13164,32 +11703,6 @@ packages: /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - /make-fetch-happen@8.0.14: - resolution: {integrity: sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==} - engines: {node: '>= 10'} - requiresBuild: true - dependencies: - agentkeepalive: 4.2.1 - cacache: 15.3.0 - http-cache-semantics: 4.1.1 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.1 - is-lambda: 1.0.1 - lru-cache: 6.0.0 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-fetch: 1.4.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - promise-retry: 2.0.1 - socks-proxy-agent: 5.0.1 - ssri: 8.0.1 - transitivePeerDependencies: - - bluebird - - supports-color - dev: false - optional: true - /makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: @@ -13272,7 +11785,7 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - /meros@1.3.0(@types/node@18.17.15): + /meros@1.3.0(@types/node@18.11.18): resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==} engines: {node: '>=13'} peerDependencies: @@ -13281,7 +11794,7 @@ packages: '@types/node': optional: true dependencies: - '@types/node': 18.17.15 + '@types/node': 18.11.18 dev: false /methods@1.1.2: @@ -13364,55 +11877,6 @@ packages: /minimist@1.2.7: resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} - /minipass-collect@1.0.2: - resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} - engines: {node: '>= 8'} - requiresBuild: true - dependencies: - minipass: 3.3.6 - dev: false - optional: true - - /minipass-fetch@1.4.1: - resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==} - engines: {node: '>=8'} - requiresBuild: true - dependencies: - minipass: 3.3.6 - minipass-sized: 1.0.3 - minizlib: 2.1.2 - optionalDependencies: - encoding: 0.1.13 - dev: false - optional: true - - /minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} - requiresBuild: true - dependencies: - minipass: 3.3.6 - dev: false - optional: true - - /minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} - requiresBuild: true - dependencies: - minipass: 3.3.6 - dev: false - optional: true - - /minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} - requiresBuild: true - dependencies: - minipass: 3.3.6 - dev: false - optional: true - /minipass@3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} @@ -13608,19 +12072,6 @@ packages: xtend: 4.0.2 dev: false - /multimatch@5.0.0: - resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} - engines: {node: '>=10'} - requiresBuild: true - dependencies: - '@types/minimatch': 3.0.5 - array-differ: 3.0.0 - array-union: 2.1.0 - arrify: 2.0.1 - minimatch: 3.1.2 - dev: false - optional: true - /multipipe@1.0.2: resolution: {integrity: sha512-6uiC9OvY71vzSGX8lZvSqscE7ft9nPupJ8fMjrCNRAUy2LREUW42UL+V/NTrogr6rFgRydUrCX4ZitfpSNkSCQ==} dependencies: @@ -13714,12 +12165,12 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - next: 13.0.0(@babel/core@7.22.17)(react-dom@18.2.0)(react@18.2.0) + next: 13.0.0(@babel/core@7.20.12)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /next-sitemap@3.1.47(@next/env@13.4.19)(next@13.0.0): + /next-sitemap@3.1.47(@next/env@13.1.6)(next@13.0.0): resolution: {integrity: sha512-LZxCWZ6lhQBfv1cuGob3tnsaHWffQM7VDmkXXp8u3n4LD7EJAR/SamlMj3mpHa8bFeuR6TjjRqrq/7e4WSOcLQ==} engines: {node: '>=14.18'} hasBin: true @@ -13728,12 +12179,12 @@ packages: next: '*' dependencies: '@corex/deepmerge': 4.0.37 - '@next/env': 13.4.19 + '@next/env': 13.1.6 minimist: 1.2.7 - next: 13.0.0(@babel/core@7.22.17)(react-dom@18.2.0)(react@18.2.0) + next: 13.0.0(@babel/core@7.20.12)(react-dom@18.2.0)(react@18.2.0) dev: false - /next@13.0.0(@babel/core@7.22.17)(react-dom@18.2.0)(react@18.2.0): + /next@13.0.0(@babel/core@7.20.12)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-puH1WGM6rGeFOoFdXXYfUxN9Sgi4LMytCV5HkQJvVUOhHfC1DoVqOfvzaEteyp6P04IW+gbtK2Q9pInVSrltPA==} engines: {node: '>=14.6.0'} hasBin: true @@ -13757,7 +12208,7 @@ packages: postcss: 8.4.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.0(@babel/core@7.22.17)(react@18.2.0) + styled-jsx: 5.1.0(@babel/core@7.20.12)(react@18.2.0) use-sync-external-store: 1.2.0(react@18.2.0) optionalDependencies: '@next/swc-android-arm-eabi': 13.0.0 @@ -13778,7 +12229,7 @@ packages: - babel-plugin-macros dev: false - /next@13.1.6(@babel/core@7.22.17)(react-dom@18.2.0)(react@18.2.0): + /next@13.1.6(@babel/core@7.20.12)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw==} engines: {node: '>=14.6.0'} hasBin: true @@ -13802,7 +12253,7 @@ packages: postcss: 8.4.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.22.17)(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.20.12)(react@18.2.0) optionalDependencies: '@next/swc-android-arm-eabi': 13.1.6 '@next/swc-android-arm64': 13.1.6 @@ -13877,6 +12328,7 @@ packages: /node-releases@2.0.13: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: false /node-releases@2.0.8: resolution: {integrity: sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==} @@ -13967,11 +12419,7 @@ packages: /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - - /object-path@0.11.8: - resolution: {integrity: sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==} - engines: {node: '>= 10.12.0'} - dev: false + dev: true /object.assign@4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} @@ -13981,6 +12429,7 @@ packages: define-properties: 1.1.4 has-symbols: 1.0.3 object-keys: 1.1.1 + dev: true /object.entries@1.1.6: resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} @@ -13991,15 +12440,6 @@ packages: es-abstract: 1.21.1 dev: true - /object.entries@1.1.7: - resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - dev: true - /object.fromentries@2.0.6: resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} engines: {node: '>= 0.4'} @@ -14009,49 +12449,20 @@ packages: es-abstract: 1.21.1 dev: true - /object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - dev: true - - /object.getownpropertydescriptors@2.1.5: - resolution: {integrity: sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==} - engines: {node: '>= 0.8'} - requiresBuild: true - dependencies: - array.prototype.reduce: 1.0.5 - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - dev: false - - /object.hasown@1.1.3: - resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} - dependencies: - define-properties: 1.2.0 - es-abstract: 1.22.1 - dev: true - - /object.values@1.1.6: - resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} - engines: {node: '>= 0.4'} + /object.hasown@1.1.2: + resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} dependencies: - call-bind: 1.0.2 define-properties: 1.1.4 es-abstract: 1.21.1 dev: true - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + /object.values@1.1.6: + resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + define-properties: 1.1.4 + es-abstract: 1.21.1 dev: true /oblivious-set@1.0.0: @@ -14249,7 +12660,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.22.10 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -14404,7 +12815,7 @@ packages: framesync: 6.1.1 hey-listen: 1.0.8 style-value-types: 5.1.1 - tslib: 2.5.0 + tslib: 2.6.2 dev: false /postcss-value-parser@4.2.0: @@ -14446,7 +12857,7 @@ packages: fast-diff: 1.3.0 dev: true - /prettier-plugin-organize-imports@3.2.3(prettier@3.0.3)(typescript@5.2.2): + /prettier-plugin-organize-imports@3.2.3(prettier@3.0.3)(typescript@4.7.4): resolution: {integrity: sha512-KFvk8C/zGyvUaE3RvxN2MhCLwzV6OBbFSkwZ2OamCrs9ZY4i5L77jQ/w4UmUr+lqX8qbaqVq6bZZkApn+IgJSg==} peerDependencies: '@volar/vue-language-plugin-pug': ^1.0.4 @@ -14460,7 +12871,7 @@ packages: optional: true dependencies: prettier: 3.0.3 - typescript: 5.2.2 + typescript: 4.7.4 dev: true /prettier@2.8.8: @@ -14475,18 +12886,6 @@ packages: hasBin: true dev: true - /pretty-format@26.6.2: - resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==} - engines: {node: '>= 10'} - requiresBuild: true - dependencies: - '@jest/types': 26.6.2 - ansi-regex: 5.0.1 - ansi-styles: 4.3.0 - react-is: 17.0.2 - dev: false - optional: true - /pretty-format@27.5.1: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -14515,27 +12914,6 @@ packages: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: false - /promise-inflight@1.0.1: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - requiresBuild: true - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true - dev: false - optional: true - - /promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} - requiresBuild: true - dependencies: - err-code: 2.0.3 - retry: 0.12.0 - dev: false - optional: true - /promise@7.3.1: resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} dependencies: @@ -14749,14 +13127,14 @@ packages: react: 18.2.0 dev: false - /react-hot-toast@2.3.0(csstype@3.1.2)(react-dom@18.2.0)(react@18.2.0): + /react-hot-toast@2.3.0(csstype@3.1.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-/RxV+bfjld7tSJR1SCLzMAXgFuNW7fCpK6+vbYqfmbGSWcqTMz2rizrvfWKvtcPH5HK0NqxmBaC5SrAy1F42zA==} engines: {node: '>=10'} peerDependencies: react: '>=16' react-dom: '>=16' dependencies: - goober: 2.1.11(csstype@3.1.2) + goober: 2.1.11(csstype@3.1.1) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -14818,14 +13196,14 @@ packages: warning: 4.0.3 dev: false - /react-popper@2.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0)(react@18.2.0): + /react-popper@2.3.0(@popperjs/core@2.11.6)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==} peerDependencies: '@popperjs/core': ^2.0.0 react: ^16.8.0 || ^17 || ^18 react-dom: ^16.8.0 || ^17 || ^18 dependencies: - '@popperjs/core': 2.11.8 + '@popperjs/core': 2.11.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-fast-compare: 3.2.0 @@ -14889,14 +13267,14 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /react-universal-interface@0.6.2(react@18.2.0)(tslib@2.5.0): + /react-universal-interface@0.6.2(react@18.2.0)(tslib@2.6.2): resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==} peerDependencies: react: '*' tslib: '*' dependencies: react: 18.2.0 - tslib: 2.5.0 + tslib: 2.6.2 dev: false /react-use@17.4.0(react-dom@18.2.0)(react@18.2.0): @@ -14914,13 +13292,13 @@ packages: nano-css: 5.3.5(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-universal-interface: 0.6.2(react@18.2.0)(tslib@2.5.0) + react-universal-interface: 0.6.2(react@18.2.0)(tslib@2.6.2) resize-observer-polyfill: 1.5.1 screenfull: 5.2.0 set-harmonic-interval: 1.0.1 throttle-debounce: 3.0.1 ts-easing: 0.2.0 - tslib: 2.5.0 + tslib: 2.6.2 dev: false /react@18.2.0: @@ -14987,13 +13365,6 @@ packages: string_decoder: 1.1.1 util-deprecate: 1.0.2 - /readdirp@3.5.0: - resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - dev: false - /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -15067,6 +13438,7 @@ packages: call-bind: 1.0.2 define-properties: 1.2.0 functions-have-names: 1.2.3 + dev: true /relay-runtime@12.0.0: resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} @@ -15140,7 +13512,7 @@ packages: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} hasBin: true dependencies: - is-core-module: 2.13.0 + is-core-module: 2.11.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -15162,13 +13534,6 @@ packages: engines: {node: '>=0.12'} dev: true - /retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - requiresBuild: true - dev: false - optional: true - /retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} @@ -15236,6 +13601,7 @@ packages: get-intrinsic: 1.2.1 has-symbols: 1.0.3 isarray: 2.0.5 + dev: true /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -15249,6 +13615,7 @@ packages: call-bind: 1.0.2 get-intrinsic: 1.2.0 is-regex: 1.1.4 + dev: true /safe-stable-stringify@2.4.2: resolution: {integrity: sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA==} @@ -15308,11 +13675,6 @@ packages: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true - /semver@6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} - hasBin: true - dev: true - /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -15330,6 +13692,7 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 + dev: true /send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} @@ -15587,19 +13950,6 @@ packages: tslib: 2.6.2 dev: false - /socks-proxy-agent@5.0.1: - resolution: {integrity: sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==} - engines: {node: '>= 6'} - requiresBuild: true - dependencies: - agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) - socks: 2.7.1 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - /socks@2.7.1: resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} @@ -15694,15 +14044,6 @@ packages: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true - /ssri@8.0.1: - resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} - engines: {node: '>= 8'} - requiresBuild: true - dependencies: - minipass: 3.3.6 - dev: false - optional: true - /stack-generator@2.0.10: resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} dependencies: @@ -15743,11 +14084,6 @@ packages: resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} dev: false - /statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - dev: false - /statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} @@ -15766,11 +14102,6 @@ packages: mixme: 0.5.5 dev: true - /streamsearch@0.1.2: - resolution: {integrity: sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA==} - engines: {node: '>=0.8.0'} - dev: false - /streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -15796,16 +14127,16 @@ packages: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string.prototype.matchall@4.0.9: - resolution: {integrity: sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA==} + /string.prototype.matchall@4.0.8: + resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} dependencies: call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - get-intrinsic: 1.2.1 + define-properties: 1.1.4 + es-abstract: 1.21.1 + get-intrinsic: 1.2.0 has-symbols: 1.0.3 - internal-slot: 1.0.5 - regexp.prototype.flags: 1.5.0 + internal-slot: 1.0.4 + regexp.prototype.flags: 1.4.3 side-channel: 1.0.4 dev: true @@ -15818,14 +14149,6 @@ packages: es-abstract: 1.21.1 dev: true - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - /string.prototype.trimend@1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: @@ -15834,13 +14157,6 @@ packages: es-abstract: 1.21.1 dev: true - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - /string.prototype.trimstart@1.0.6: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: @@ -15849,13 +14165,6 @@ packages: es-abstract: 1.21.1 dev: true - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - /string_decoder@0.10.31: resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} dev: false @@ -15911,7 +14220,7 @@ packages: resolution: {integrity: sha512-s1p02MYD7E2f1b8lr6CjW8n6CEt+6PdK6QMuUfuTA3yqA6jYktZ1MOWpk7ZpaADl5WAkktBcJAOlDgYIg4yEsQ==} dependencies: hey-listen: 1.0.8 - tslib: 2.5.0 + tslib: 2.6.2 dev: false /styled-components@5.3.5(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0): @@ -15938,7 +14247,7 @@ packages: supports-color: 5.5.0 dev: false - /styled-jsx@5.1.0(@babel/core@7.22.17)(react@18.2.0): + /styled-jsx@5.1.0(@babel/core@7.20.12)(react@18.2.0): resolution: {integrity: sha512-/iHaRJt9U7T+5tp6TRelLnqBqiaIT0HsO0+vgyj8hK2KUk7aejFqRrumqPUlAqDwAj8IbS/1hk3IhBAAK/FCUQ==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -15951,12 +14260,12 @@ packages: babel-plugin-macros: optional: true dependencies: - '@babel/core': 7.22.17 + '@babel/core': 7.20.12 client-only: 0.0.1 react: 18.2.0 dev: false - /styled-jsx@5.1.1(@babel/core@7.22.17)(react@18.2.0): + /styled-jsx@5.1.1(@babel/core@7.20.12)(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -15969,7 +14278,7 @@ packages: babel-plugin-macros: optional: true dependencies: - '@babel/core': 7.22.17 + '@babel/core': 7.20.12 client-only: 0.0.1 react: 18.2.0 dev: false @@ -15999,23 +14308,6 @@ packages: - utf-8-validate dev: false - /subscriptions-transport-ws@0.9.19(graphql@15.5.0): - resolution: {integrity: sha512-dxdemxFFB0ppCLg10FTtRqH/31FNRL1y1BQv8209MK5I4CwALb7iihQg+7p65lFcIl8MHatINWBLOqpgU4Kyyw==} - deprecated: The `subscriptions-transport-ws` package is no longer maintained. We recommend you use `graphql-ws` instead. For help migrating Apollo software to `graphql-ws`, see https://www.apollographql.com/docs/apollo-server/data/subscriptions/#switching-from-subscriptions-transport-ws For general help using `graphql-ws`, see https://github.com/enisdenjo/graphql-ws/blob/master/README.md - peerDependencies: - graphql: '>=0.10.0' - dependencies: - backo2: 1.0.2 - eventemitter3: 3.1.2 - graphql: 15.5.0 - iterall: 1.3.0 - symbol-observable: 1.2.0 - ws: 7.5.9 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -16261,13 +14553,13 @@ packages: resolution: {integrity: sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==} dev: false - /ts-api-utils@1.0.3(typescript@5.2.2): + /ts-api-utils@1.0.3(typescript@4.7.4): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.2.2 + typescript: 4.7.4 dev: true /ts-easing@0.2.0: @@ -16278,13 +14570,7 @@ packages: resolution: {integrity: sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==} engines: {node: '>=8'} dependencies: - tslib: 2.5.0 - dev: false - - /ts-invariant@0.4.4: - resolution: {integrity: sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA==} - dependencies: - tslib: 1.14.1 + tslib: 2.6.2 dev: false /ts-jest@28.0.8(@babel/core@7.20.12)(jest@28.1.3)(typescript@4.7.4): @@ -16321,40 +14607,6 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-jest@28.0.8(@babel/core@7.22.17)(jest@28.1.3)(typescript@4.7.4): - resolution: {integrity: sha512-5FaG0lXmRPzApix8oFG8RKjAz4ehtm8yMKOTy5HX3fY6W8kmvOrmcY0hKDElW52FJov+clhUbrKAqofnj4mXTg==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/types': ^28.0.0 - babel-jest: ^28.0.0 - esbuild: '*' - jest: ^28.0.0 - typescript: '>=4.3' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - dependencies: - '@babel/core': 7.22.17 - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - jest: 28.1.3(@types/node@18.11.18) - jest-util: 28.1.3 - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.3.8 - typescript: 4.7.4 - yargs-parser: 21.1.1 - dev: true - /ts-log@2.2.5: resolution: {integrity: sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA==} dev: false @@ -16365,17 +14617,7 @@ packages: '@ts-morph/common': 0.19.0 code-block-writer: 12.0.0 - /ts-morph@9.1.0: - resolution: {integrity: sha512-sei4u651MBenr27sD6qLDXN3gZ4thiX71E3qV7SuVtDas0uvK2LtgZkIYUf9DKm/fLJ6AB/+yhRJ1vpEBJgy7Q==} - requiresBuild: true - dependencies: - '@dsherret/to-absolute-glob': 2.0.2 - '@ts-morph/common': 0.7.5 - code-block-writer: 10.1.1 - dev: false - optional: true - - /ts-node@10.9.1(@types/node@18.17.15)(typescript@5.2.2): + /ts-node@10.9.1(@types/node@18.11.18)(typescript@4.7.4): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -16394,14 +14636,14 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 18.17.15 + '@types/node': 18.11.18 acorn: 8.10.0 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.2.2 + typescript: 4.7.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: false @@ -16434,18 +14676,6 @@ packages: /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - /tslib@2.0.3: - resolution: {integrity: sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==} - dev: false - - /tslib@2.1.0: - resolution: {integrity: sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==} - dev: false - - /tslib@2.2.0: - resolution: {integrity: sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==} - dev: false - /tslib@2.4.1: resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} dev: false @@ -16456,14 +14686,14 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsutils@3.21.0(typescript@5.2.2): + /tsutils@3.21.0(typescript@4.7.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.2.2 + typescript: 4.7.4 dev: true /tty-table@4.1.6: @@ -16595,7 +14825,8 @@ packages: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 - is-typed-array: 1.1.12 + is-typed-array: 1.1.10 + dev: true /typed-array-byte-length@1.0.0: resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} @@ -16604,7 +14835,8 @@ packages: call-bind: 1.0.2 for-each: 0.3.3 has-proto: 1.0.1 - is-typed-array: 1.1.12 + is-typed-array: 1.1.10 + dev: true /typed-array-byte-offset@1.0.0: resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} @@ -16614,7 +14846,8 @@ packages: call-bind: 1.0.2 for-each: 0.3.3 has-proto: 1.0.1 - is-typed-array: 1.1.12 + is-typed-array: 1.1.10 + dev: true /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} @@ -16622,35 +14855,22 @@ packages: call-bind: 1.0.2 for-each: 0.3.3 is-typed-array: 1.1.10 + dev: true /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: false - /typescript@4.1.6: - resolution: {integrity: sha512-pxnwLxeb/Z5SP80JDRzVjh58KsM6jZHRAOtTpS7sXLS4ogXNKC9ANxHHZqLLeVHZN35jCtI4JdmLLbLiC1kBow==} - engines: {node: '>=4.2.0'} - hasBin: true - requiresBuild: true - dev: false - optional: true - /typescript@4.7.4: resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} engines: {node: '>=4.2.0'} hasBin: true - dev: true /typescript@4.9.4: resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} engines: {node: '>=4.2.0'} hasBin: true - /typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} - engines: {node: '>=14.17'} - hasBin: true - /ua-parser-js@1.0.35: resolution: {integrity: sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==} dev: false @@ -16669,28 +14889,13 @@ packages: has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + dev: true /unc-path-regex@0.1.2: resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} engines: {node: '>=0.10.0'} dev: false - /unique-filename@1.1.1: - resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} - requiresBuild: true - dependencies: - unique-slug: 2.0.2 - dev: false - optional: true - - /unique-slug@2.0.2: - resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} - requiresBuild: true - dependencies: - imurmurhash: 0.1.4 - dev: false - optional: true - /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -16747,6 +14952,7 @@ packages: browserslist: 4.21.10 escalade: 3.1.1 picocolors: 1.0.0 + dev: false /upper-case-first@2.0.2: resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} @@ -16804,17 +15010,6 @@ packages: /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - /util.promisify@1.1.1: - resolution: {integrity: sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==} - requiresBuild: true - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - for-each: 0.3.3 - has-symbols: 1.0.3 - object.getownpropertydescriptors: 2.1.5 - dev: false - /utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} @@ -16826,12 +15021,6 @@ packages: base64-arraybuffer: 1.0.2 dev: false - /uuid@3.4.0: - resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - hasBin: true - dev: false - /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true @@ -16872,11 +15061,6 @@ packages: engines: {node: '>=12'} dev: false - /value-or-promise@1.0.6: - resolution: {integrity: sha512-9r0wQsWD8z/BxPOvnwbPf05ZvFngXyouE9EKB+5GbYix+BYnAwrIChCUyFIinfbf2FL/U71z+CPpbnmTdxrwBg==} - engines: {node: '>=12'} - dev: false - /vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -16959,7 +15143,7 @@ packages: engines: {node: '>= 10.13.0'} hasBin: true dependencies: - acorn: 8.8.2 + acorn: 8.10.0 acorn-walk: 8.2.0 chalk: 4.1.2 commander: 7.2.0 @@ -17059,12 +15243,13 @@ packages: is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 + dev: true /which-builtin-type@1.1.3: resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} engines: {node: '>= 0.4'} dependencies: - function.prototype.name: 1.1.6 + function.prototype.name: 1.1.5 has-tostringtag: 1.0.0 is-async-function: 2.0.0 is-date-object: 1.0.5 @@ -17075,7 +15260,7 @@ packages: isarray: 2.0.5 which-boxed-primitive: 1.0.2 which-collection: 1.0.1 - which-typed-array: 1.1.11 + which-typed-array: 1.1.9 dev: true /which-collection@1.0.1: @@ -17107,6 +15292,7 @@ packages: for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 + dev: true /which-typed-array@1.1.9: resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} @@ -17202,20 +15388,6 @@ packages: signal-exit: 3.0.7 dev: true - /ws@6.2.2: - resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dependencies: - async-limiter: 1.0.1 - dev: false - /ws@7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} @@ -17228,18 +15400,6 @@ packages: utf-8-validate: optional: true - /ws@8.12.0: - resolution: {integrity: sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - /ws@8.13.0: resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} engines: {node: '>=10.0.0'} @@ -17251,7 +15411,6 @@ packages: optional: true utf-8-validate: optional: true - dev: false /xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} @@ -17372,13 +15531,6 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - /zen-observable-ts@0.8.21: - resolution: {integrity: sha512-Yj3yXweRc8LdRMrCC8nIc4kkjWecPAUVh0TI0OUrWXx6aX790vLcDlWca6I4vsyCGH3LpWxq0dJRcMOFoVqmeg==} - dependencies: - tslib: 1.14.1 - zen-observable: 0.8.15 - dev: false - /zen-observable-ts@1.2.5: resolution: {integrity: sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==} dependencies: From d57aa7eb397b035f206a64f166114e8caacb41e5 Mon Sep 17 00:00:00 2001 From: Vijak Khajornritdacha Date: Tue, 12 Sep 2023 16:10:32 +0700 Subject: [PATCH 2/8] chore: add changeset --- change.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 change.md diff --git a/change.md b/change.md new file mode 100644 index 000000000..af4a088b2 --- /dev/null +++ b/change.md @@ -0,0 +1,6 @@ +--- +'admin-api': major +'admin-web': major +--- + +init admin-api and admin-web From f771ad381f8b9469e83640e65a217e05c0b5ee38 Mon Sep 17 00:00:00 2001 From: Vijak Khajornritdacha Date: Tue, 12 Sep 2023 16:11:42 +0700 Subject: [PATCH 3/8] chore: add changeset --- change.md => .changeset/change.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename change.md => .changeset/change.md (100%) diff --git a/change.md b/.changeset/change.md similarity index 100% rename from change.md rename to .changeset/change.md From 46e520b24b068f2d6829dba1a686c1c6f79ebe64 Mon Sep 17 00:00:00 2001 From: Nutthapat Pongtanyavichai <59821765+Leomotors@users.noreply.github.com> Date: Wed, 13 Sep 2023 09:08:45 +0700 Subject: [PATCH 4/8] feat(web): not reg chula warning (#629) * feat(web): not reg chula warning * chore: update changeset msg --- .changeset/thin-houses-rhyme.md | 5 ++++ .../AnnouncementBar/announcements.ts | 17 +++++++++--- .../components/AnnouncementBar/index.tsx | 26 +++++++++---------- .../components/AnnouncementBar/types.ts | 5 +++- .../src/common/components/TopBar/index.tsx | 14 ++++++++-- 5 files changed, 47 insertions(+), 20 deletions(-) create mode 100644 .changeset/thin-houses-rhyme.md diff --git a/.changeset/thin-houses-rhyme.md b/.changeset/thin-houses-rhyme.md new file mode 100644 index 000000000..372a66c84 --- /dev/null +++ b/.changeset/thin-houses-rhyme.md @@ -0,0 +1,5 @@ +--- +'web': minor +--- + +feat: explicit warning not reg chula at first page (Close #623) diff --git a/apps/web/src/common/components/TopBar/components/AnnouncementBar/announcements.ts b/apps/web/src/common/components/TopBar/components/AnnouncementBar/announcements.ts index 5bd4d5808..3c2ea782d 100644 --- a/apps/web/src/common/components/TopBar/components/AnnouncementBar/announcements.ts +++ b/apps/web/src/common/components/TopBar/components/AnnouncementBar/announcements.ts @@ -1,9 +1,20 @@ -import { AnnoucementItem } from '@web/common/components/TopBar/components/AnnouncementBar/types' +import { AnnouncementItem } from '@web/common/components/TopBar/components/AnnouncementBar/types' -// TODO Admin should b able to change the annoucement -export function getCurrentAnnoucement(): AnnoucementItem { +// TODO Admin should be able to change the annoucement + +export function getAnnouncement1(): AnnouncementItem { return { id: 'annoucement_1', label: 'CU Get Reg เป็นเว็บไซต์ที่จัดทำโดยนิสิต ซึ่งได้รับการสนับสนุนเซิฟเวอร์จาก Reg Chula', + severity: 'info', + } +} + +export function getNotRegChulaWarning(): AnnouncementItem { + return { + id: 'not_reg_chula', + label: + 'CU Get Reg เป็นเพียงเครื่องมือที่ช่วยให้การวางแผนลงทะเบียนเรียนง่ายขึ้น แต่ไม่ใช่การลงทะเบียนเรียนจริง คุณสามารถลงทะเบียนเรียนได้ที่ https://www2.reg.chula.ac.th/ เพียงช่องทางเดียวเท่านั้น', + severity: 'warning', } } diff --git a/apps/web/src/common/components/TopBar/components/AnnouncementBar/index.tsx b/apps/web/src/common/components/TopBar/components/AnnouncementBar/index.tsx index df2872d00..9e09302dc 100644 --- a/apps/web/src/common/components/TopBar/components/AnnouncementBar/index.tsx +++ b/apps/web/src/common/components/TopBar/components/AnnouncementBar/index.tsx @@ -1,36 +1,34 @@ -import React from 'react' -import { useEffect, useState } from 'react' +import { FC, useEffect, useState } from 'react' import { Alert, Container, styled } from '@mui/material' import { Storage } from '@web/common/storage' import { StorageKey } from '@web/common/storage/constants' -import { getCurrentAnnoucement } from './announcements' -import { AnnoucementItem } from './types' +import { AnnouncementItem } from './types' const AlertContainer = styled(Container)` padding-top: 16px; ` -export const AnnouncementBar: React.FC = () => { - const currentAnnoucement = getCurrentAnnoucement() +type AnnouncementBarProps = { announcement: AnnouncementItem } +export const AnnouncementBar: FC = ({ announcement }) => { const [show, setShow] = useState(false) useEffect(() => { const storage = new Storage('localStorage') - const seenAnnoucements = storage.get(StorageKey.SeenAnnoucements) ?? [] - const seen = seenAnnoucements.some(({ id }) => id === currentAnnoucement.id) + const seenAnnoucements = storage.get(StorageKey.SeenAnnoucements) ?? [] + const seen = seenAnnoucements.some(({ id }) => id === announcement.id) setShow(!seen) - }, [currentAnnoucement]) + }, [announcement]) const handleClose = () => { const storage = new Storage('localStorage') - const seenAnnoucements = storage.get(StorageKey.SeenAnnoucements) ?? [] - storage.set(StorageKey.SeenAnnoucements, [ + const seenAnnoucements = storage.get(StorageKey.SeenAnnoucements) ?? [] + storage.set(StorageKey.SeenAnnoucements, [ ...seenAnnoucements, - currentAnnoucement, + announcement, ]) setShow(false) } @@ -41,8 +39,8 @@ export const AnnouncementBar: React.FC = () => { return ( - - {currentAnnoucement.label} + + {announcement.label} ) diff --git a/apps/web/src/common/components/TopBar/components/AnnouncementBar/types.ts b/apps/web/src/common/components/TopBar/components/AnnouncementBar/types.ts index b48242f3a..894fa69dd 100644 --- a/apps/web/src/common/components/TopBar/components/AnnouncementBar/types.ts +++ b/apps/web/src/common/components/TopBar/components/AnnouncementBar/types.ts @@ -1,4 +1,7 @@ -export interface AnnoucementItem { +import { AlertColor } from '@mui/material' + +export interface AnnouncementItem { id: string label: string + severity: AlertColor } diff --git a/apps/web/src/common/components/TopBar/index.tsx b/apps/web/src/common/components/TopBar/index.tsx index eaef0827f..34dde74ac 100644 --- a/apps/web/src/common/components/TopBar/index.tsx +++ b/apps/web/src/common/components/TopBar/index.tsx @@ -1,12 +1,22 @@ import { useRouter } from 'next/router' import { AnnouncementBar } from './components/AnnouncementBar' +import { getAnnouncement1, getNotRegChulaWarning } from './components/AnnouncementBar/announcements' import { ConfigBar } from './components/ConfigBar' import { ConfigBarLayout } from './components/ConfigBar/styled' import { NavBar } from './components/NavBar' import { NavBarLayout } from './components/NavBar/styled' import { StickyContainer, StickySpace, TopBarLayout } from './styled' +export function AnnouncementSection() { + return ( + <> + + + + ) +} + export function TopBar() { const { pathname } = useRouter() @@ -22,7 +32,7 @@ export function TopBar() { - + ) } @@ -33,7 +43,7 @@ export function TopBar() { - + ) } From 19186715c4f943d3a1e01b8a870d29752598968b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 14 Sep 2023 08:38:15 +0700 Subject: [PATCH 5/8] Version Packages (beta) (#630) Co-authored-by: github-actions[bot] --- .changeset/pre.json | 2 ++ apps/admin-api/CHANGELOG.md | 6 ++++++ apps/admin-api/package.json | 2 +- apps/admin-web/CHANGELOG.md | 6 ++++++ apps/admin-web/package.json | 2 +- apps/web/CHANGELOG.md | 6 ++++++ apps/web/package.json | 2 +- 7 files changed, 23 insertions(+), 3 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index 5cfbdd84e..a664fdce4 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -14,7 +14,9 @@ "@cgr/schema": "1.1.1" }, "changesets": [ + "change", "enhance-search-engine", + "thin-houses-rhyme", "unlucky-cars-hang", "violet-sloths-reply" ] diff --git a/apps/admin-api/CHANGELOG.md b/apps/admin-api/CHANGELOG.md index 98b8345ff..71ff9191b 100644 --- a/apps/admin-api/CHANGELOG.md +++ b/apps/admin-api/CHANGELOG.md @@ -1,5 +1,11 @@ # admin-api +## 1.0.0-beta.1 + +### Major Changes + +- f771ad38: init admin-api and admin-web + ## 0.2.0-beta.0 ### Minor Changes diff --git a/apps/admin-api/package.json b/apps/admin-api/package.json index 9bc71c932..1b5107bb3 100644 --- a/apps/admin-api/package.json +++ b/apps/admin-api/package.json @@ -1,6 +1,6 @@ { "name": "admin-api", - "version": "0.2.0-beta.0", + "version": "1.0.0-beta.1", "description": "", "author": "", "private": true, diff --git a/apps/admin-web/CHANGELOG.md b/apps/admin-web/CHANGELOG.md index 14233f0e4..ac7841f34 100644 --- a/apps/admin-web/CHANGELOG.md +++ b/apps/admin-web/CHANGELOG.md @@ -1,5 +1,11 @@ # admin-web +## 1.0.0-beta.1 + +### Major Changes + +- f771ad38: init admin-api and admin-web + ## 0.1.2-beta.0 ### Patch Changes diff --git a/apps/admin-web/package.json b/apps/admin-web/package.json index 413958bd7..1dc7d1b8a 100644 --- a/apps/admin-web/package.json +++ b/apps/admin-web/package.json @@ -1,6 +1,6 @@ { "name": "admin-web", - "version": "0.1.2-beta.0", + "version": "1.0.0-beta.1", "private": true, "scripts": { "dev": "next dev -p 4201", diff --git a/apps/web/CHANGELOG.md b/apps/web/CHANGELOG.md index 9a5f61f04..b3a438a73 100644 --- a/apps/web/CHANGELOG.md +++ b/apps/web/CHANGELOG.md @@ -1,5 +1,11 @@ # web +## 1.7.0-beta.1 + +### Minor Changes + +- 46e520b2: feat: explicit warning not reg chula at first page (Close #623) + ## 1.6.1-beta.0 ### Patch Changes diff --git a/apps/web/package.json b/apps/web/package.json index d48a1a9e0..9f5ec4d56 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,6 +1,6 @@ { "name": "web", - "version": "1.6.1-beta.0", + "version": "1.7.0-beta.1", "private": true, "scripts": { "dev": "next dev -p 4200", From 02c4acbedab166bd5489d8df7076d07d16258630 Mon Sep 17 00:00:00 2001 From: Nutthapat Pongtanyavichai <59821765+Leomotors@users.noreply.github.com> Date: Thu, 14 Sep 2023 20:40:04 +0700 Subject: [PATCH 6/8] fix: broken build in previous release (#632) * fix: broken build in previous release * fix: format --- .changeset/old-insects-sit.md | 7 +++++++ apps/admin-api/src/app/app.controller.ts | 5 ++++- apps/admin-api/src/auth/auth.controller.ts | 2 +- apps/admin-api/src/auth/auth.guard.ts | 5 ++++- apps/admin-api/src/auth/auth.service.ts | 7 +++++-- apps/admin-web/.env | 4 ++-- apps/admin-web/src/context/ProtectedRoutes.tsx | 2 +- apps/admin-web/src/module/genEd/index.tsx | 2 -- .../components/Topbar/components/SelectForm/index.tsx | 2 -- apps/admin-web/src/module/pendingReviews/index.tsx | 2 +- apps/admin-web/src/pages/generateToken/index.tsx | 2 +- apps/admin-web/src/services/apollo/index.ts | 4 ++-- 12 files changed, 28 insertions(+), 16 deletions(-) create mode 100644 .changeset/old-insects-sit.md diff --git a/.changeset/old-insects-sit.md b/.changeset/old-insects-sit.md new file mode 100644 index 000000000..a253222c4 --- /dev/null +++ b/.changeset/old-insects-sit.md @@ -0,0 +1,7 @@ +--- +'admin-web': patch +'admin-api': patch +'web': patch +--- + +fix broken build in previous release diff --git a/apps/admin-api/src/app/app.controller.ts b/apps/admin-api/src/app/app.controller.ts index 2f3cc3564..215f9ed02 100644 --- a/apps/admin-api/src/app/app.controller.ts +++ b/apps/admin-api/src/app/app.controller.ts @@ -10,7 +10,10 @@ import { AppService } from './app.service' @Controller() export class AppController { - constructor(private readonly appService: AppService, private readonly authService: AuthService) {} + constructor( + private readonly appService: AppService, + private readonly authService: AuthService + ) {} @Get() getHello(): string { diff --git a/apps/admin-api/src/auth/auth.controller.ts b/apps/admin-api/src/auth/auth.controller.ts index d089394ca..ab46584d0 100644 --- a/apps/admin-api/src/auth/auth.controller.ts +++ b/apps/admin-api/src/auth/auth.controller.ts @@ -1,4 +1,4 @@ -import { BadRequestException, Controller, Get, Logger, Post, Query, Req, Res } from '@nestjs/common' +import { BadRequestException, Controller, Get, Logger, Query, Req, Res } from '@nestjs/common' import { Request, Response } from 'express' diff --git a/apps/admin-api/src/auth/auth.guard.ts b/apps/admin-api/src/auth/auth.guard.ts index e6607c401..d1e860cda 100644 --- a/apps/admin-api/src/auth/auth.guard.ts +++ b/apps/admin-api/src/auth/auth.guard.ts @@ -9,7 +9,10 @@ import { SKIP_AUTH } from '@admin-api/common/decorators/SkipAuth' @Injectable() export class AuthGuard implements CanActivate { - constructor(private jwtService: JwtService, private reflector: Reflector) {} + constructor( + private jwtService: JwtService, + private reflector: Reflector + ) {} async canActivate(context: ExecutionContext): Promise { const ctx = GqlExecutionContext.create(context) diff --git a/apps/admin-api/src/auth/auth.service.ts b/apps/admin-api/src/auth/auth.service.ts index af6f6333b..c465723f2 100644 --- a/apps/admin-api/src/auth/auth.service.ts +++ b/apps/admin-api/src/auth/auth.service.ts @@ -1,4 +1,4 @@ -import { BadRequestException, Injectable, Logger } from '@nestjs/common' +import { Injectable, Logger } from '@nestjs/common' import { ConfigService } from '@nestjs/config' import { JwtService } from '@nestjs/jwt' @@ -10,7 +10,10 @@ import { TokenUrlResponse, UserInfoDto } from './auth.dto' export class AuthService { logger: Logger - constructor(private configService: ConfigService, private jwtService: JwtService) { + constructor( + private configService: ConfigService, + private jwtService: JwtService + ) { this.logger = new Logger('Auth Service') } diff --git a/apps/admin-web/.env b/apps/admin-web/.env index f34af0363..d91fa43bd 100644 --- a/apps/admin-web/.env +++ b/apps/admin-web/.env @@ -2,10 +2,10 @@ NEXT_PUBLIC_ENVIRONMENT=local # Backend -NEXT_PUBLIC_BACKEND_URL=http://localhost:3333 +NEXT_PUBLIC_BACKEND_URL_BASE=http://localhost:3333 # GraphQL -NEXT_PUBLIC_BACKEND_URL=${NEXT_PUBLIC_BACKEND_URL}/_api/graphql +NEXT_PUBLIC_BACKEND_URL=${NEXT_PUBLIC_BACKEND_URL_BASE}/_api/graphql # Sitemap (Frontend URL) NEXT_PUBLIC_SITE_URL=http://localhost:4201 diff --git a/apps/admin-web/src/context/ProtectedRoutes.tsx b/apps/admin-web/src/context/ProtectedRoutes.tsx index c7eb1b216..f1781cb36 100644 --- a/apps/admin-web/src/context/ProtectedRoutes.tsx +++ b/apps/admin-web/src/context/ProtectedRoutes.tsx @@ -23,7 +23,7 @@ export const ProtectedRoutes = (props: ProctectedRoutesProps) => { useEffect(() => { if (!router) return if (unProtectedRoutes.includes(router.pathname)) return - if (!!user) return + if (user) return const loadUserData = async () => { try { diff --git a/apps/admin-web/src/module/genEd/index.tsx b/apps/admin-web/src/module/genEd/index.tsx index aa72fd254..410c12757 100644 --- a/apps/admin-web/src/module/genEd/index.tsx +++ b/apps/admin-web/src/module/genEd/index.tsx @@ -1,7 +1,5 @@ import { useEffect, useState } from 'react' -import { useRouter } from 'next/router' - import { useGetOverridesQuery } from '@cgr/codegen' import AddGenEdDialog from './components/AddGenEdDialog' diff --git a/apps/admin-web/src/module/pendingReviews/components/Topbar/components/SelectForm/index.tsx b/apps/admin-web/src/module/pendingReviews/components/Topbar/components/SelectForm/index.tsx index d14352b38..4f8ad3e54 100644 --- a/apps/admin-web/src/module/pendingReviews/components/Topbar/components/SelectForm/index.tsx +++ b/apps/admin-web/src/module/pendingReviews/components/Topbar/components/SelectForm/index.tsx @@ -1,5 +1,3 @@ -import { ReactNode } from 'react' - import { FormControl, MenuItem, SelectChangeEvent } from '@mui/material' import { StyledInputLabel, StyledSelect } from './styled' diff --git a/apps/admin-web/src/module/pendingReviews/index.tsx b/apps/admin-web/src/module/pendingReviews/index.tsx index ee375d6c1..5fe42c7a3 100644 --- a/apps/admin-web/src/module/pendingReviews/index.tsx +++ b/apps/admin-web/src/module/pendingReviews/index.tsx @@ -1,5 +1,5 @@ /* eslint-disable react-hooks/rules-of-hooks */ -import { useEffect, useState } from 'react' +import { useEffect } from 'react' import { Container } from '@mui/material' diff --git a/apps/admin-web/src/pages/generateToken/index.tsx b/apps/admin-web/src/pages/generateToken/index.tsx index f12f9d276..2dcc1f88a 100644 --- a/apps/admin-web/src/pages/generateToken/index.tsx +++ b/apps/admin-web/src/pages/generateToken/index.tsx @@ -1 +1 @@ -export { GenerateToken as default } from '@admin-web/module/generateToken' \ No newline at end of file +export { GenerateToken as default } from '@admin-web/module/generateToken' diff --git a/apps/admin-web/src/services/apollo/index.ts b/apps/admin-web/src/services/apollo/index.ts index 64b26e6f4..a4d61d3ee 100644 --- a/apps/admin-web/src/services/apollo/index.ts +++ b/apps/admin-web/src/services/apollo/index.ts @@ -2,7 +2,7 @@ import { ApolloClient, InMemoryCache } from '@apollo/client' import { BatchHttpLink } from '@apollo/client/link/batch-http' import { setContext } from '@apollo/client/link/context' -import { ADMIN_ACCESS_TOKEN, ENVIRONMENT } from '@admin-web/env' +import { ENVIRONMENT } from '@admin-web/env' import { apiUrl } from '@admin-web/services/httpClient' const createHttpLink = () => @@ -14,7 +14,7 @@ const createHttpLink = () => }) const authLink = setContext(async (_, { headers }) => { - const accessToken = ADMIN_ACCESS_TOKEN + const accessToken = 'ADMIN_ACCESS_TOKEN' return { headers: { ...headers, From bfda7a77bc3d74217f51625e5951c6c65fe2a7e1 Mon Sep 17 00:00:00 2001 From: Pipat Saengow Date: Thu, 14 Sep 2023 20:46:29 +0700 Subject: [PATCH 7/8] use cas url instead (#631) * use cas url instead * chore: add changeset --------- Co-authored-by: Nutthapat Pongtanyavichai <59821765+Leomotors@users.noreply.github.com> --- .changeset/spotty-gifts-flash.md | 5 +++++ apps/reg-scraper/src/scraper/instance.ts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/spotty-gifts-flash.md diff --git a/.changeset/spotty-gifts-flash.md b/.changeset/spotty-gifts-flash.md new file mode 100644 index 000000000..bb6127565 --- /dev/null +++ b/.changeset/spotty-gifts-flash.md @@ -0,0 +1,5 @@ +--- +'reg-scraper': minor +--- + +use cas url instead diff --git a/apps/reg-scraper/src/scraper/instance.ts b/apps/reg-scraper/src/scraper/instance.ts index f449f900d..2c65c6918 100644 --- a/apps/reg-scraper/src/scraper/instance.ts +++ b/apps/reg-scraper/src/scraper/instance.ts @@ -5,7 +5,7 @@ import tough from 'tough-cookie' // make instance for collecting cookie export const instance = axios.create({ - baseURL: 'https://www2.reg.chula.ac.th', + baseURL: 'https://cas.reg.chula.ac.th', withCredentials: true, responseType: 'arraybuffer', httpsAgent: new HttpsCookieAgent({ From 7fd8fd83fa6e3acc4b2f942da8417df19d3a4e29 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 14 Sep 2023 20:57:11 +0700 Subject: [PATCH 8/8] Version Packages (beta) (#633) Co-authored-by: github-actions[bot] --- .changeset/pre.json | 2 ++ apps/admin-api/CHANGELOG.md | 6 ++++++ apps/admin-api/package.json | 2 +- apps/admin-web/CHANGELOG.md | 6 ++++++ apps/admin-web/package.json | 2 +- apps/reg-scraper/CHANGELOG.md | 6 ++++++ apps/reg-scraper/package.json | 2 +- apps/web/CHANGELOG.md | 6 ++++++ apps/web/package.json | 2 +- 9 files changed, 30 insertions(+), 4 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index a664fdce4..89cd0651d 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -16,6 +16,8 @@ "changesets": [ "change", "enhance-search-engine", + "old-insects-sit", + "spotty-gifts-flash", "thin-houses-rhyme", "unlucky-cars-hang", "violet-sloths-reply" diff --git a/apps/admin-api/CHANGELOG.md b/apps/admin-api/CHANGELOG.md index 71ff9191b..df85db1dd 100644 --- a/apps/admin-api/CHANGELOG.md +++ b/apps/admin-api/CHANGELOG.md @@ -1,5 +1,11 @@ # admin-api +## 1.0.0-beta.2 + +### Patch Changes + +- 02c4acbe: fix broken build in previous release + ## 1.0.0-beta.1 ### Major Changes diff --git a/apps/admin-api/package.json b/apps/admin-api/package.json index 1b5107bb3..0423759f7 100644 --- a/apps/admin-api/package.json +++ b/apps/admin-api/package.json @@ -1,6 +1,6 @@ { "name": "admin-api", - "version": "1.0.0-beta.1", + "version": "1.0.0-beta.2", "description": "", "author": "", "private": true, diff --git a/apps/admin-web/CHANGELOG.md b/apps/admin-web/CHANGELOG.md index ac7841f34..1a901d078 100644 --- a/apps/admin-web/CHANGELOG.md +++ b/apps/admin-web/CHANGELOG.md @@ -1,5 +1,11 @@ # admin-web +## 1.0.0-beta.2 + +### Patch Changes + +- 02c4acbe: fix broken build in previous release + ## 1.0.0-beta.1 ### Major Changes diff --git a/apps/admin-web/package.json b/apps/admin-web/package.json index 1dc7d1b8a..3071a4040 100644 --- a/apps/admin-web/package.json +++ b/apps/admin-web/package.json @@ -1,6 +1,6 @@ { "name": "admin-web", - "version": "1.0.0-beta.1", + "version": "1.0.0-beta.2", "private": true, "scripts": { "dev": "next dev -p 4201", diff --git a/apps/reg-scraper/CHANGELOG.md b/apps/reg-scraper/CHANGELOG.md index 6129ad7da..80adfc71a 100644 --- a/apps/reg-scraper/CHANGELOG.md +++ b/apps/reg-scraper/CHANGELOG.md @@ -1,5 +1,11 @@ # reg-scraper +## 1.2.0-beta.1 + +### Minor Changes + +- bfda7a77: use cas url instead + ## 1.2.0-beta.0 ### Minor Changes diff --git a/apps/reg-scraper/package.json b/apps/reg-scraper/package.json index 346b16ec2..6f7503a36 100644 --- a/apps/reg-scraper/package.json +++ b/apps/reg-scraper/package.json @@ -1,6 +1,6 @@ { "name": "reg-scraper", - "version": "1.2.0-beta.0", + "version": "1.2.0-beta.1", "private": true, "scripts": { "dev": "nest start --watch", diff --git a/apps/web/CHANGELOG.md b/apps/web/CHANGELOG.md index b3a438a73..e79c8daf6 100644 --- a/apps/web/CHANGELOG.md +++ b/apps/web/CHANGELOG.md @@ -1,5 +1,11 @@ # web +## 1.7.0-beta.2 + +### Patch Changes + +- 02c4acbe: fix broken build in previous release + ## 1.7.0-beta.1 ### Minor Changes diff --git a/apps/web/package.json b/apps/web/package.json index 9f5ec4d56..e9ab8cacf 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,6 +1,6 @@ { "name": "web", - "version": "1.7.0-beta.1", + "version": "1.7.0-beta.2", "private": true, "scripts": { "dev": "next dev -p 4200",