diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index 3f41081e..e8d639d3 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -61,7 +61,6 @@ jobs: env: CI: false PUBLIC_API_URL: ${{secrets.PUBLIC_API_URL}} - PUBLIC_API_GRAPHQL_URL: ${{secrets.PUBLIC_API_GRAPHQL_URL}} DATABASE_URL: ${{ github.event_name == 'pull_request' && secrets.DEV_DATABASE_URL || secrets.PROD_DATABASE_URL }} SESSION_SECRET: ${{secrets.SESSION_SECRET}} GOOGLE_CLIENT: ${{secrets.GOOGLE_CLIENT}} @@ -72,3 +71,4 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} NODE_ENV: ${{ github.event_name == 'pull_request' && 'staging' || 'production' }} + ANTEATER_API_KEY: ${{ secrets.ANTEATER_API_KEY }} diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..33bbf94c --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +types/src/generated/ diff --git a/README.md b/README.md index db7cd45f..d4ed7037 100644 --- a/README.md +++ b/README.md @@ -25,14 +25,13 @@ Features include: ## 🔨 Built with -- [PeterPortal API](https://github.com/icssc/peterportal-api-next) +- [Anteater API](https://github.com/icssc/anteater-api) - Express - React - tRPC - SST and AWS CDK - PostgreSQL - Drizzle ORM -- GraphQL - TypeScript - Vite @@ -109,7 +108,7 @@ Optionally, you can run the site/api separately by changing into their respectiv ## Where does the data come from? -We consolidate our data directly from official UCI sources such as: UCI Catalogue, UCI Public Records Office, and UCI WebReg (courtesy of [PeterPortal API](https://github.com/icssc/peterportal-api-next)). +We consolidate our data directly from official UCI sources such as: UCI Catalogue, UCI Public Records Office, and UCI WebReg (courtesy of [Anteater API](https://github.com/icssc/anteater-api)). ## Bug Report diff --git a/api/.env.example b/api/.env.example index 9fa84f8d..211e6f00 100644 --- a/api/.env.example +++ b/api/.env.example @@ -1,6 +1,5 @@ # these are the minimum variables required to run the backend -PUBLIC_API_URL=https://api-next.peterportal.org/v1/rest/ -PUBLIC_API_GRAPHQL_URL=https://api-next.peterportal.org/v1/graphql +PUBLIC_API_URL=https://anteaterapi.com/v2/rest/ PORT=8080 # should match the port on the frontend proxy under site/vite.config.ts # below are stubs of variables/secrets for the PostgreSQL database, google oauth, and recaptcha @@ -10,4 +9,5 @@ PORT=8080 # should match the port on the frontend proxy under site/vite.config.t # GOOGLE_CLIENT= # GOOGLE_SECRET= # GRECAPTCHA_SECRET= -# ADMIN_EMAILS=[""] \ No newline at end of file +# ADMIN_EMAILS=[""] +# ANTEATER_API_KEY= diff --git a/api/src/app.ts b/api/src/app.ts index bc2a99ae..bfc3d4d8 100644 --- a/api/src/app.ts +++ b/api/src/app.ts @@ -56,6 +56,10 @@ if (process.env.GOOGLE_CLIENT && process.env.GOOGLE_SECRET) { console.log('GOOGLE_CLIENT and/or GOOGLE_SECRET env var(s) not defined! Google login will not be available.'); } +if (!process.env.ANTEATER_API_KEY) { + console.log('ANTEATER_API_KEY env var is not defined. You will not be able to test search functionality.'); +} + /** * Configure Express.js Middleware */ diff --git a/api/src/controllers/courses.ts b/api/src/controllers/courses.ts index 04b212bd..bb8a7325 100644 --- a/api/src/controllers/courses.ts +++ b/api/src/controllers/courses.ts @@ -3,69 +3,53 @@ */ import { z } from 'zod'; -import { getCourseQuery } from '../helpers/gql'; import { publicProcedure, router } from '../helpers/trpc'; import { CourseAAPIResponse, CourseBatchAAPIResponse, GradesRaw } from '@peterportal/types'; +import { ANTEATER_API_REQUEST_HEADERS } from '../helpers/headers'; const coursesRouter = router({ /** - * PPAPI proxy for getting course data + * Anteater API proxy for getting course data */ get: publicProcedure.input(z.object({ courseID: z.string() })).query(async ({ input }) => { - const r = fetch(process.env.PUBLIC_API_URL + 'courses/' + encodeURIComponent(input.courseID), { - headers: { - 'Content-Type': 'application/json', - Accept: 'application/json', - }, + const r = fetch(`${process.env.PUBLIC_API_URL}courses/${encodeURIComponent(input.courseID)}`, { + headers: ANTEATER_API_REQUEST_HEADERS, }); - return r.then((response) => response.json()).then((data) => data.payload as CourseAAPIResponse); + return r.then((response) => response.json()).then((data) => data.data as CourseAAPIResponse); }), /** - * PPAPI proxy for batch course data + * Anteater API proxy for batch course data */ batch: publicProcedure.input(z.object({ courses: z.string().array() })).mutation(async ({ input }) => { if (input.courses.length == 0) { return {}; } else { - const r = fetch(process.env.PUBLIC_API_GRAPHQL_URL!, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - query: getCourseQuery(input.courses), - }), - }); + const r = fetch( + `${process.env.PUBLIC_API_URL}courses/batch?ids=${input.courses.map(encodeURIComponent).join(',')}`, + { headers: ANTEATER_API_REQUEST_HEADERS }, + ); - // change keys from _0,...,_x to course IDs return r .then((response) => response.json()) .then( - (data: CourseBatchAAPIResponse) => - Object.fromEntries( - (Object.values(data.data) as CourseAAPIResponse[]) - .filter((course) => course !== null) - .map((course) => [course.id, course]), - ) as CourseBatchAAPIResponse, + (data: { data: CourseAAPIResponse[] }) => + Object.fromEntries(data.data.map((x) => [x.id, x])) as CourseBatchAAPIResponse, ); } }), /** - * PPAPI proxy for grade distribution + * Anteater API proxy for grade distribution */ grades: publicProcedure.input(z.object({ department: z.string(), number: z.string() })).query(async ({ input }) => { const r = fetch( - process.env.PUBLIC_API_URL + - 'grades/raw?department=' + - encodeURIComponent(input.department) + - '&courseNumber=' + - input.number, + `${process.env.PUBLIC_API_URL}grades/raw?department=${encodeURIComponent(input.department)}&courseNumber=${input.number}`, + { headers: ANTEATER_API_REQUEST_HEADERS }, ); - return r.then((response) => response.json()).then((data) => data.payload as GradesRaw); + return r.then((response) => response.json()).then((data) => data.data as GradesRaw); }), }); diff --git a/api/src/controllers/index.ts b/api/src/controllers/index.ts index 7e1d776c..97e1576f 100644 --- a/api/src/controllers/index.ts +++ b/api/src/controllers/index.ts @@ -7,6 +7,7 @@ import roadmapsRouter from './roadmap'; import { savedCoursesRouter } from './savedCourses'; import scheduleRouter from './schedule'; import usersRouter from './users'; +import searchRouter from './search'; export const appRouter = router({ courses: coursesRouter, @@ -15,6 +16,7 @@ export const appRouter = router({ reports: reportsRouter, reviews: reviewsRouter, savedCourses: savedCoursesRouter, + search: searchRouter, schedule: scheduleRouter, users: usersRouter, }); diff --git a/api/src/controllers/professors.ts b/api/src/controllers/professors.ts index 970467d2..8792dc19 100644 --- a/api/src/controllers/professors.ts +++ b/api/src/controllers/professors.ts @@ -3,52 +3,52 @@ */ import { z } from 'zod'; -import { getProfessorQuery } from '../helpers/gql'; import { publicProcedure, router } from '../helpers/trpc'; import { GradesRaw, ProfessorAAPIResponse, ProfessorBatchAAPIResponse } from '@peterportal/types'; +import { ANTEATER_API_REQUEST_HEADERS } from '../helpers/headers'; const professorsRouter = router({ /** - * PPAPI proxy for getting professor data + * Anteater API proxy for getting professor data */ get: publicProcedure.input(z.object({ ucinetid: z.string() })).query(async ({ input }) => { - const r = fetch(process.env.PUBLIC_API_URL + 'instructors/' + input.ucinetid); + const r = fetch(`${process.env.PUBLIC_API_URL}instructors/${input.ucinetid}`, { + headers: ANTEATER_API_REQUEST_HEADERS, + }); - return r.then((response) => response.json()).then((data) => data.payload as ProfessorAAPIResponse); + return r.then((response) => response.json()).then((data) => data.data as ProfessorAAPIResponse); }), /** - * PPAPI proxy for batch professor data + * Anteater API proxy for batch professor data */ batch: publicProcedure.input(z.object({ professors: z.array(z.string()) })).mutation(async ({ input }) => { if (input.professors.length == 0) { return {}; } else { - const r = fetch(process.env.PUBLIC_API_GRAPHQL_URL!, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - query: getProfessorQuery(input.professors), - }), - }); - - return r.then((response) => response.json()).then((data) => data.data as ProfessorBatchAAPIResponse); + const r = fetch( + `${process.env.PUBLIC_API_URL}instructors/batch?ucinetids=${input.professors.map(encodeURIComponent).join(',')}`, + { headers: ANTEATER_API_REQUEST_HEADERS }, + ); + + return r + .then((response) => response.json()) + .then( + (data: { data: ProfessorAAPIResponse[] }) => + Object.fromEntries(data.data.map((x) => [x.ucinetid, x])) as ProfessorBatchAAPIResponse, + ); } }), /** - * PPAPI proxy for grade distribution + * Anteater API proxy for grade distribution */ grades: publicProcedure.input(z.object({ name: z.string() })).query(async ({ input }) => { - const r = fetch(process.env.PUBLIC_API_URL + 'grades/raw?instructor=' + encodeURIComponent(input.name)); + const r = fetch(`${process.env.PUBLIC_API_URL}grades/raw?instructor=${encodeURIComponent(input.name)}`, { + headers: ANTEATER_API_REQUEST_HEADERS, + }); - return r - .then((response) => { - return response.json(); - }) - .then((data) => data.payload as GradesRaw); + return r.then((response) => response.json()).then((data) => data.data as GradesRaw); }), }); diff --git a/api/src/controllers/schedule.ts b/api/src/controllers/schedule.ts index 473c76ec..123680d2 100644 --- a/api/src/controllers/schedule.ts +++ b/api/src/controllers/schedule.ts @@ -5,12 +5,14 @@ import { z } from 'zod'; import { publicProcedure, router } from '../helpers/trpc'; import { TermResponse, WebsocAPIResponse, WeekData } from '@peterportal/types'; +import { ANTEATER_API_REQUEST_HEADERS } from '../helpers/headers'; -const callPPAPIWebSoc = async (params: Record) => { - const url: URL = new URL(process.env.PUBLIC_API_URL + 'websoc?' + new URLSearchParams(params)); - return await fetch(url) +const callAAPIWebSoc = async (params: Record) => { + return await fetch(`${process.env.PUBLIC_API_URL}websoc?${new URLSearchParams(params)}`, { + headers: ANTEATER_API_REQUEST_HEADERS, + }) .then((response) => response.json()) - .then((json) => json.payload as WebsocAPIResponse); + .then((json) => json.data as WebsocAPIResponse); }; const scheduleRouter = router({ @@ -18,28 +20,28 @@ const scheduleRouter = router({ * Get the current week */ currentWeek: publicProcedure.query(async () => { - const apiResp = await fetch(`${process.env.PUBLIC_API_URL}week`); + const apiResp = await fetch(`${process.env.PUBLIC_API_URL}week`, { headers: ANTEATER_API_REQUEST_HEADERS }); const json = await apiResp.json(); - return json.payload as WeekData; + return json.data as WeekData; }), /** * Get the current quarter on websoc */ currentQuarter: publicProcedure.query(async () => { - const apiResp = await fetch(`${process.env.PUBLIC_API_URL}websoc/terms`); + const apiResp = await fetch(`${process.env.PUBLIC_API_URL}websoc/terms`, { headers: ANTEATER_API_REQUEST_HEADERS }); const json = await apiResp.json(); - return (json.payload as TermResponse)[0].shortName; + return (json.data as TermResponse)[0].shortName; }), /** - * Proxy for WebSOC, using PeterPortal API + * Proxy for WebSOC, using Anteater API */ getTermDeptNum: publicProcedure .input(z.object({ term: z.string(), department: z.string(), number: z.string() })) .query(async ({ input }) => { const [year, quarter] = input.term.split(' '); - const result = await callPPAPIWebSoc({ + const result = await callAAPIWebSoc({ year, quarter, department: input.department, @@ -49,11 +51,11 @@ const scheduleRouter = router({ }), /** - * Proxy for WebSOC, using PeterPortal API + * Proxy for WebSOC, using Anteater API */ getTermProf: publicProcedure.input(z.object({ term: z.string(), professor: z.string() })).query(async ({ input }) => { const [year, quarter] = input.term.split(' '); - const result = await callPPAPIWebSoc({ + const result = await callAAPIWebSoc({ year, quarter, instructorName: input.professor, diff --git a/api/src/controllers/search.ts b/api/src/controllers/search.ts new file mode 100644 index 00000000..ee112a83 --- /dev/null +++ b/api/src/controllers/search.ts @@ -0,0 +1,38 @@ +/** + @module SearchRoute +*/ + +import { z } from 'zod'; +import { publicProcedure, router } from '../helpers/trpc'; +import { SearchAAPIResponse } from '@peterportal/types'; +import { ANTEATER_API_REQUEST_HEADERS } from '../helpers/headers'; + +const searchRouter = router({ + /** + * Anteater API proxy for fuzzy search + */ + get: publicProcedure + .input( + z.object({ + query: z.string(), + skip: z + .number() + .int() + .transform((x) => x.toString()), + take: z + .number() + .int() + .transform((x) => x.toString()), + resultType: z.union([z.literal('course'), z.literal('instructor')]), + }), + ) + .query(async ({ input }) => { + const r = fetch(`${process.env.PUBLIC_API_URL}search?${new URLSearchParams(input).toString()}`, { + headers: ANTEATER_API_REQUEST_HEADERS, + }); + + return r.then((response) => response.json()).then((data) => data.data as SearchAAPIResponse); + }), +}); + +export default searchRouter; diff --git a/api/src/helpers/gql.ts b/api/src/helpers/gql.ts deleted file mode 100644 index 33d1c654..00000000 --- a/api/src/helpers/gql.ts +++ /dev/null @@ -1,87 +0,0 @@ -export function getCourseQuery(courseIDs: string[]) { - // start of query - let result = 'query {'; - - // request fields for each course - courseIDs.forEach((courseID, i) => { - // use number id here because cannot use special character names - result += ` - ${'_' + i}: course(courseId: "${courseID}") { - id - department - courseNumber - school - title - courseLevel - minUnits - maxUnits - description - departmentName - instructors { - ucinetid - name - shortenedName - } - prerequisiteTree - prerequisites { - id - department - courseNumber - title - } - prerequisiteText - dependencies { - id - department - courseNumber - title - } - repeatability - concurrent - sameAs - restriction - overlap - corequisites - geList - geText - terms - }, - `; - }); - - // close off query - result += '}'; - return result; -} - -export function getProfessorQuery(ucinetids: string[]) { - // start of query - let result = 'query {'; - - // request fields for each course - ucinetids.forEach((ucinetid, i) => { - // use number id here because cannot use special character names - result += ` - ${'_' + i}: instructor(ucinetid: "${ucinetid}"){ - name - shortenedName - ucinetid - title - department - schools - relatedDepartments - courses { - id - department - courseNumber - title - } - courseHistory - }, - `; - }); - - // close off query - result += '}'; - return result; -} diff --git a/api/src/helpers/headers.ts b/api/src/helpers/headers.ts new file mode 100644 index 00000000..3acb78aa --- /dev/null +++ b/api/src/helpers/headers.ts @@ -0,0 +1,5 @@ +export const ANTEATER_API_REQUEST_HEADERS = { + 'Content-Type': 'application/json', + Accept: 'application/json', + ...(process.env.ANTEATER_API_KEY && { Authorization: `Bearer ${process.env.ANTEATER_API_KEY}` }), +}; diff --git a/api/src/types/environment.d.ts b/api/src/types/environment.d.ts index a991c3f5..640051c2 100644 --- a/api/src/types/environment.d.ts +++ b/api/src/types/environment.d.ts @@ -7,7 +7,6 @@ declare global { NODE_ENV?: 'development' | 'production' | 'staging'; PORT?: string; PUBLIC_API_URL: string; - PUBLIC_API_GRAPHQL_URL: string; MONGO_URL: string; SESSION_SECRET: string; GOOGLE_CLIENT: string; @@ -15,6 +14,7 @@ declare global { GRECAPTCHA_SECRET: string; PRODUCTION_DOMAIN: string; ADMIN_EMAILS: string; + ANTEATER_API_KEY?: string; } } } diff --git a/package.json b/package.json index d9c3a8ec..4e72ca88 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "pnpm": "^9" }, "devDependencies": { + "@types/node": "20.12.8", "@typescript-eslint/eslint-plugin": "^7.8.0", "@typescript-eslint/parser": "^7.8.0", "concurrently": "^9.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 484107d5..b4c3ae94 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,6 +18,9 @@ importers: specifier: 2.41.5 version: 2.41.5(@aws-sdk/client-sso-oidc@3.572.0(aws-crt@1.21.2))(@types/react@18.3.1)(aws-crt@1.21.2)(pg@8.13.0) devDependencies: + '@types/node': + specifier: 20.12.8 + version: 20.12.8 '@typescript-eslint/eslint-plugin': specifier: ^7.8.0 version: 7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) @@ -65,7 +68,7 @@ importers: version: 4.1.0 drizzle-orm: specifier: ^0.35.3 - version: 0.35.3(@aws-sdk/client-rds-data@3.556.0)(@libsql/client-wasm@0.14.0)(@types/pg@8.11.10)(@types/react@18.3.1)(kysely@0.25.0)(pg@8.13.0)(react@18.3.1) + version: 0.35.3(@aws-sdk/client-rds-data@3.556.0(aws-crt@1.21.2))(@libsql/client-wasm@0.14.0)(@types/pg@8.11.10)(@types/react@18.3.1)(kysely@0.25.0)(pg@8.13.0)(react@18.3.1) express: specifier: ^4.19.2 version: 4.19.2 @@ -220,9 +223,6 @@ importers: toastify-js: specifier: ^1.12.0 version: 1.12.0 - websoc-fuzzy-search: - specifier: 1.0.1 - version: 1.0.1 devDependencies: '@peterportal/types': specifier: workspace:* @@ -287,12 +287,13 @@ importers: types: dependencies: - peterportal-api-next-types: - specifier: 1.0.0-rc.3 - version: 1.0.0-rc.3 zod: specifier: ^3.23.8 version: 3.23.8 + devDependencies: + openapi-typescript: + specifier: ^7.4.3 + version: 7.4.3(typescript@5.4.5) packages: @@ -1853,6 +1854,16 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@redocly/ajv@8.11.2': + resolution: {integrity: sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==} + + '@redocly/config@0.16.0': + resolution: {integrity: sha512-t9jnODbUcuANRSl/K4L9nb12V+U5acIHnVSl26NWrtSdDZVtoqUXk2yGFPZzohYf62cCfEQUT8ouJ3bhPfpnJg==} + + '@redocly/openapi-core@1.25.11': + resolution: {integrity: sha512-bH+a8izQz4fnKROKoX3bEU8sQ9rjvEIZOqU6qTmxlhOJ0NsKa5e+LmU18SV0oFeg5YhWQhhEDihXkvKJ1wMMNQ==} + engines: {node: '>=14.19.0', npm: '>=7.0.0'} + '@reduxjs/toolkit@2.2.3': resolution: {integrity: sha512-76dll9EnJXg4EVcI5YNxZA/9hSAmZsFqzMmNRHvIlzw2WS/twfcVX3ysYrWGJMClwEmChQFC4yRq74tn6fdzRA==} peerDependencies: @@ -2515,6 +2526,10 @@ packages: resolution: {integrity: sha512-6TVU49mK6KZb4qG6xWaaM4C7sA/sgUMLy/JYMOzkcp3BvVLpW0fXDFQiIzAuxFCt/2+xD7fNIiPFAoLZPhVNLQ==} engines: {node: '>=6.0'} + agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -2529,6 +2544,10 @@ packages: ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + ansi-escapes@6.2.1: resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} engines: {node: '>=14.16'} @@ -2693,10 +2712,6 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - base64-arraybuffer@1.0.2: - resolution: {integrity: sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==} - engines: {node: '>= 0.6.0'} - base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -2807,6 +2822,9 @@ packages: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + change-case@5.4.4: + resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -2870,6 +2888,9 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + colorette@1.4.0: + resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} + colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -3704,6 +3725,10 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} + https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + engines: {node: '>= 14'} + human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} @@ -3754,6 +3779,10 @@ packages: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} engines: {node: '>=12'} + index-to-position@0.1.2: + resolution: {integrity: sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==} + engines: {node: '>=18'} + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -3975,6 +4004,10 @@ packages: js-base64@3.7.7: resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} + js-levenshtein@1.1.6: + resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} + engines: {node: '>=0.10.0'} + js-sdsl@4.3.0: resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==} @@ -4282,6 +4315,15 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + node-html-parser@6.1.13: resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==} @@ -4381,6 +4423,12 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} + openapi-typescript@7.4.3: + resolution: {integrity: sha512-xTIjMIIOv9kNhsr8JxaC00ucbIY/6ZwuJPJBZMSh5FA2dicZN5uM805DWVJojXdom8YI4AQTavPDPHMx/3g0vQ==} + hasBin: true + peerDependencies: + typescript: ^5.x + openid-client@5.6.5: resolution: {integrity: sha512-5P4qO9nGJzB5PI0LFlhj4Dzg3m4odt0qsJTfyEtZyOlkgpILwEioOhVVJOrS1iVH494S4Ee5OCjjg6Bf5WOj3w==} @@ -4412,13 +4460,14 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - pako@2.1.0: - resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} - parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-json@8.1.0: + resolution: {integrity: sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==} + engines: {node: '>=18'} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -4491,9 +4540,6 @@ packages: pause@0.0.1: resolution: {integrity: sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==} - peterportal-api-next-types@1.0.0-rc.3: - resolution: {integrity: sha512-TlylpK4OcfxG91aze6urHv9ei7/gX/GLrR7v8ktPVX31r/xPfYS77ygi6wcawwguka6dk8/JHQukYdy5tlOYgA==} - pg-cloudflare@1.1.1: resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==} @@ -4552,6 +4598,10 @@ packages: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} engines: {node: '>=8'} + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + popper.js@1.16.1: resolution: {integrity: sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==} deprecated: You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1 @@ -5162,6 +5212,10 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} + supports-color@9.4.0: + resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} + engines: {node: '>=12'} + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -5199,6 +5253,9 @@ packages: resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} hasBin: true + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -5238,6 +5295,10 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} + type-fest@4.26.1: + resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} + engines: {node: '>=16'} + type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -5320,6 +5381,9 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + uri-js-replace@1.0.1: + resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==} + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -5410,12 +5474,15 @@ packages: webcrypto-core@1.7.9: resolution: {integrity: sha512-FE+a4PPkOmBbgNDIyRmcHhgXn+2ClRl3JzJdDu/P4+B8y81LqKe6RAsI9b3lAOHe1T1BMkSjsRHTYRikImZnVA==} - websoc-fuzzy-search@1.0.1: - resolution: {integrity: sha512-1UlDdT2OvMxVIczNSQzI+vSoojfagbORdwtMQiLAnG1zVLG9Po6x5+VWNysi8w5xoxE2NootQH72HzoenLygDg==} + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} websocket-stream@5.5.2: resolution: {integrity: sha512-8z49MKIHbGk3C4HtuHWDtYX8mYej1wWabjthC/RupM9ngeukU4IWoM46dgth1UOS/T4/IqgEdCDJuMe2039OQQ==} + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -5516,6 +5583,9 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yaml-ast-parser@0.0.43: + resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} + yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} @@ -6040,52 +6110,6 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-rds-data@3.556.0': - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.556.0(@aws-sdk/credential-provider-node@3.556.0) - '@aws-sdk/core': 3.556.0 - '@aws-sdk/credential-provider-node': 3.556.0 - '@aws-sdk/middleware-host-header': 3.535.0 - '@aws-sdk/middleware-logger': 3.535.0 - '@aws-sdk/middleware-recursion-detection': 3.535.0 - '@aws-sdk/middleware-user-agent': 3.540.0 - '@aws-sdk/region-config-resolver': 3.535.0 - '@aws-sdk/types': 3.535.0 - '@aws-sdk/util-endpoints': 3.540.0 - '@aws-sdk/util-user-agent-browser': 3.535.0 - '@aws-sdk/util-user-agent-node': 3.535.0 - '@smithy/config-resolver': 2.2.0 - '@smithy/core': 1.4.2 - '@smithy/fetch-http-handler': 2.5.0 - '@smithy/hash-node': 2.2.0 - '@smithy/invalid-dependency': 2.2.0 - '@smithy/middleware-content-length': 2.2.0 - '@smithy/middleware-endpoint': 2.5.1 - '@smithy/middleware-retry': 2.3.1 - '@smithy/middleware-serde': 2.3.0 - '@smithy/middleware-stack': 2.2.0 - '@smithy/node-config-provider': 2.3.0 - '@smithy/node-http-handler': 2.5.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/smithy-client': 2.5.1 - '@smithy/types': 2.12.0 - '@smithy/url-parser': 2.2.0 - '@smithy/util-base64': 2.3.0 - '@smithy/util-body-length-browser': 2.2.0 - '@smithy/util-body-length-node': 2.3.0 - '@smithy/util-defaults-mode-browser': 2.2.1 - '@smithy/util-defaults-mode-node': 2.3.1 - '@smithy/util-endpoints': 1.2.0 - '@smithy/util-middleware': 2.2.0 - '@smithy/util-retry': 2.2.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.6.2 - transitivePeerDependencies: - - aws-crt - optional: true - '@aws-sdk/client-rds-data@3.556.0(aws-crt@1.21.2)': dependencies: '@aws-crypto/sha256-browser': 3.0.0 @@ -6285,52 +6309,6 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.556.0(@aws-sdk/credential-provider-node@3.556.0)': - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.556.0(@aws-sdk/credential-provider-node@3.556.0) - '@aws-sdk/core': 3.556.0 - '@aws-sdk/credential-provider-node': 3.556.0 - '@aws-sdk/middleware-host-header': 3.535.0 - '@aws-sdk/middleware-logger': 3.535.0 - '@aws-sdk/middleware-recursion-detection': 3.535.0 - '@aws-sdk/middleware-user-agent': 3.540.0 - '@aws-sdk/region-config-resolver': 3.535.0 - '@aws-sdk/types': 3.535.0 - '@aws-sdk/util-endpoints': 3.540.0 - '@aws-sdk/util-user-agent-browser': 3.535.0 - '@aws-sdk/util-user-agent-node': 3.535.0 - '@smithy/config-resolver': 2.2.0 - '@smithy/core': 1.4.2 - '@smithy/fetch-http-handler': 2.5.0 - '@smithy/hash-node': 2.2.0 - '@smithy/invalid-dependency': 2.2.0 - '@smithy/middleware-content-length': 2.2.0 - '@smithy/middleware-endpoint': 2.5.1 - '@smithy/middleware-retry': 2.3.1 - '@smithy/middleware-serde': 2.3.0 - '@smithy/middleware-stack': 2.2.0 - '@smithy/node-config-provider': 2.3.0 - '@smithy/node-http-handler': 2.5.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/smithy-client': 2.5.1 - '@smithy/types': 2.12.0 - '@smithy/url-parser': 2.2.0 - '@smithy/util-base64': 2.3.0 - '@smithy/util-body-length-browser': 2.2.0 - '@smithy/util-body-length-node': 2.3.0 - '@smithy/util-defaults-mode-browser': 2.2.1 - '@smithy/util-defaults-mode-node': 2.3.1 - '@smithy/util-endpoints': 1.2.0 - '@smithy/util-middleware': 2.2.0 - '@smithy/util-retry': 2.2.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.6.2 - transitivePeerDependencies: - - aws-crt - optional: true - '@aws-sdk/client-sso-oidc@3.572.0(@aws-sdk/client-sts@3.572.0(aws-crt@1.21.2))(aws-crt@1.21.2)': dependencies: '@aws-crypto/sha256-browser': 3.0.0 @@ -6377,50 +6355,6 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/client-sso@3.556.0': - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/core': 3.556.0 - '@aws-sdk/middleware-host-header': 3.535.0 - '@aws-sdk/middleware-logger': 3.535.0 - '@aws-sdk/middleware-recursion-detection': 3.535.0 - '@aws-sdk/middleware-user-agent': 3.540.0 - '@aws-sdk/region-config-resolver': 3.535.0 - '@aws-sdk/types': 3.535.0 - '@aws-sdk/util-endpoints': 3.540.0 - '@aws-sdk/util-user-agent-browser': 3.535.0 - '@aws-sdk/util-user-agent-node': 3.535.0 - '@smithy/config-resolver': 2.2.0 - '@smithy/core': 1.4.2 - '@smithy/fetch-http-handler': 2.5.0 - '@smithy/hash-node': 2.2.0 - '@smithy/invalid-dependency': 2.2.0 - '@smithy/middleware-content-length': 2.2.0 - '@smithy/middleware-endpoint': 2.5.1 - '@smithy/middleware-retry': 2.3.1 - '@smithy/middleware-serde': 2.3.0 - '@smithy/middleware-stack': 2.2.0 - '@smithy/node-config-provider': 2.3.0 - '@smithy/node-http-handler': 2.5.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/smithy-client': 2.5.1 - '@smithy/types': 2.12.0 - '@smithy/url-parser': 2.2.0 - '@smithy/util-base64': 2.3.0 - '@smithy/util-body-length-browser': 2.2.0 - '@smithy/util-body-length-node': 2.3.0 - '@smithy/util-defaults-mode-browser': 2.2.1 - '@smithy/util-defaults-mode-node': 2.3.1 - '@smithy/util-endpoints': 1.2.0 - '@smithy/util-middleware': 2.2.0 - '@smithy/util-retry': 2.2.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.6.2 - transitivePeerDependencies: - - aws-crt - optional: true - '@aws-sdk/client-sso@3.556.0(aws-crt@1.21.2)': dependencies: '@aws-crypto/sha256-browser': 3.0.0 @@ -6594,51 +6528,6 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sts@3.556.0(@aws-sdk/credential-provider-node@3.556.0)': - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/core': 3.556.0 - '@aws-sdk/credential-provider-node': 3.556.0 - '@aws-sdk/middleware-host-header': 3.535.0 - '@aws-sdk/middleware-logger': 3.535.0 - '@aws-sdk/middleware-recursion-detection': 3.535.0 - '@aws-sdk/middleware-user-agent': 3.540.0 - '@aws-sdk/region-config-resolver': 3.535.0 - '@aws-sdk/types': 3.535.0 - '@aws-sdk/util-endpoints': 3.540.0 - '@aws-sdk/util-user-agent-browser': 3.535.0 - '@aws-sdk/util-user-agent-node': 3.535.0 - '@smithy/config-resolver': 2.2.0 - '@smithy/core': 1.4.2 - '@smithy/fetch-http-handler': 2.5.0 - '@smithy/hash-node': 2.2.0 - '@smithy/invalid-dependency': 2.2.0 - '@smithy/middleware-content-length': 2.2.0 - '@smithy/middleware-endpoint': 2.5.1 - '@smithy/middleware-retry': 2.3.1 - '@smithy/middleware-serde': 2.3.0 - '@smithy/middleware-stack': 2.2.0 - '@smithy/node-config-provider': 2.3.0 - '@smithy/node-http-handler': 2.5.0 - '@smithy/protocol-http': 3.3.0 - '@smithy/smithy-client': 2.5.1 - '@smithy/types': 2.12.0 - '@smithy/url-parser': 2.2.0 - '@smithy/util-base64': 2.3.0 - '@smithy/util-body-length-browser': 2.2.0 - '@smithy/util-body-length-node': 2.3.0 - '@smithy/util-defaults-mode-browser': 2.2.1 - '@smithy/util-defaults-mode-node': 2.3.1 - '@smithy/util-endpoints': 1.2.0 - '@smithy/util-middleware': 2.2.0 - '@smithy/util-retry': 2.2.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.6.2 - transitivePeerDependencies: - - aws-crt - optional: true - '@aws-sdk/client-sts@3.567.0(@aws-sdk/client-sso-oidc@3.572.0(aws-crt@1.21.2))(aws-crt@1.21.2)': dependencies: '@aws-crypto/sha256-browser': 3.0.0 @@ -6850,24 +6739,6 @@ snapshots: - '@aws-sdk/credential-provider-node' - aws-crt - '@aws-sdk/credential-provider-ini@3.556.0(@aws-sdk/credential-provider-node@3.556.0)': - dependencies: - '@aws-sdk/client-sts': 3.556.0(@aws-sdk/credential-provider-node@3.556.0) - '@aws-sdk/credential-provider-env': 3.535.0 - '@aws-sdk/credential-provider-process': 3.535.0 - '@aws-sdk/credential-provider-sso': 3.556.0(@aws-sdk/credential-provider-node@3.556.0) - '@aws-sdk/credential-provider-web-identity': 3.556.0(@aws-sdk/credential-provider-node@3.556.0) - '@aws-sdk/types': 3.535.0 - '@smithy/credential-provider-imds': 2.3.0 - '@smithy/property-provider': 2.2.0 - '@smithy/shared-ini-file-loader': 2.4.0 - '@smithy/types': 2.12.0 - tslib: 2.6.2 - transitivePeerDependencies: - - '@aws-sdk/credential-provider-node' - - aws-crt - optional: true - '@aws-sdk/credential-provider-ini@3.567.0(@aws-sdk/client-sso-oidc@3.572.0(aws-crt@1.21.2))(@aws-sdk/client-sts@3.567.0(@aws-sdk/client-sso-oidc@3.572.0(aws-crt@1.21.2))(aws-crt@1.21.2))(aws-crt@1.21.2)': dependencies: '@aws-sdk/client-sts': 3.567.0(@aws-sdk/client-sso-oidc@3.572.0(aws-crt@1.21.2))(aws-crt@1.21.2) @@ -6902,24 +6773,6 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-node@3.556.0': - dependencies: - '@aws-sdk/credential-provider-env': 3.535.0 - '@aws-sdk/credential-provider-http': 3.552.0 - '@aws-sdk/credential-provider-ini': 3.556.0(@aws-sdk/credential-provider-node@3.556.0) - '@aws-sdk/credential-provider-process': 3.535.0 - '@aws-sdk/credential-provider-sso': 3.556.0(@aws-sdk/credential-provider-node@3.556.0) - '@aws-sdk/credential-provider-web-identity': 3.556.0(@aws-sdk/credential-provider-node@3.556.0) - '@aws-sdk/types': 3.535.0 - '@smithy/credential-provider-imds': 2.3.0 - '@smithy/property-provider': 2.2.0 - '@smithy/shared-ini-file-loader': 2.4.0 - '@smithy/types': 2.12.0 - tslib: 2.6.2 - transitivePeerDependencies: - - aws-crt - optional: true - '@aws-sdk/credential-provider-node@3.556.0(aws-crt@1.21.2)': dependencies: '@aws-sdk/credential-provider-env': 3.535.0 @@ -7012,20 +6865,6 @@ snapshots: - '@aws-sdk/credential-provider-node' - aws-crt - '@aws-sdk/credential-provider-sso@3.556.0(@aws-sdk/credential-provider-node@3.556.0)': - dependencies: - '@aws-sdk/client-sso': 3.556.0 - '@aws-sdk/token-providers': 3.556.0(@aws-sdk/credential-provider-node@3.556.0) - '@aws-sdk/types': 3.535.0 - '@smithy/property-provider': 2.2.0 - '@smithy/shared-ini-file-loader': 2.4.0 - '@smithy/types': 2.12.0 - tslib: 2.6.2 - transitivePeerDependencies: - - '@aws-sdk/credential-provider-node' - - aws-crt - optional: true - '@aws-sdk/credential-provider-sso@3.567.0(@aws-sdk/client-sso-oidc@3.572.0(aws-crt@1.21.2))(aws-crt@1.21.2)': dependencies: '@aws-sdk/client-sso': 3.567.0(aws-crt@1.21.2) @@ -7063,18 +6902,6 @@ snapshots: - '@aws-sdk/credential-provider-node' - aws-crt - '@aws-sdk/credential-provider-web-identity@3.556.0(@aws-sdk/credential-provider-node@3.556.0)': - dependencies: - '@aws-sdk/client-sts': 3.556.0(@aws-sdk/credential-provider-node@3.556.0) - '@aws-sdk/types': 3.535.0 - '@smithy/property-provider': 2.2.0 - '@smithy/types': 2.12.0 - tslib: 2.6.2 - transitivePeerDependencies: - - '@aws-sdk/credential-provider-node' - - aws-crt - optional: true - '@aws-sdk/credential-provider-web-identity@3.567.0(@aws-sdk/client-sts@3.567.0(@aws-sdk/client-sso-oidc@3.572.0(aws-crt@1.21.2))(aws-crt@1.21.2))': dependencies: '@aws-sdk/client-sts': 3.567.0(@aws-sdk/client-sso-oidc@3.572.0(aws-crt@1.21.2))(aws-crt@1.21.2) @@ -7321,19 +7148,6 @@ snapshots: - '@aws-sdk/credential-provider-node' - aws-crt - '@aws-sdk/token-providers@3.556.0(@aws-sdk/credential-provider-node@3.556.0)': - dependencies: - '@aws-sdk/client-sso-oidc': 3.556.0(@aws-sdk/credential-provider-node@3.556.0) - '@aws-sdk/types': 3.535.0 - '@smithy/property-provider': 2.2.0 - '@smithy/shared-ini-file-loader': 2.4.0 - '@smithy/types': 2.12.0 - tslib: 2.6.2 - transitivePeerDependencies: - - '@aws-sdk/credential-provider-node' - - aws-crt - optional: true - '@aws-sdk/token-providers@3.567.0(@aws-sdk/client-sso-oidc@3.572.0(aws-crt@1.21.2))': dependencies: '@aws-sdk/client-sso-oidc': 3.572.0(@aws-sdk/client-sts@3.572.0(aws-crt@1.21.2))(aws-crt@1.21.2) @@ -7405,14 +7219,6 @@ snapshots: bowser: 2.11.0 tslib: 2.6.2 - '@aws-sdk/util-user-agent-node@3.535.0': - dependencies: - '@aws-sdk/types': 3.535.0 - '@smithy/node-config-provider': 2.3.0 - '@smithy/types': 2.12.0 - tslib: 2.6.2 - optional: true - '@aws-sdk/util-user-agent-node@3.535.0(aws-crt@1.21.2)': dependencies: '@aws-sdk/types': 3.535.0 @@ -7469,7 +7275,7 @@ snapshots: '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@9.4.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -7489,7 +7295,7 @@ snapshots: '@babel/traverse': 7.24.5 '@babel/types': 7.24.5 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@9.4.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -7645,7 +7451,7 @@ snapshots: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.24.4 '@babel/types': 7.24.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@9.4.0) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -7660,7 +7466,7 @@ snapshots: '@babel/helper-split-export-declaration': 7.24.5 '@babel/parser': 7.24.5 '@babel/types': 7.24.5 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@9.4.0) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -8062,7 +7868,7 @@ snapshots: '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@9.4.0) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.1 @@ -8156,7 +7962,7 @@ snapshots: '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@9.4.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -8413,6 +8219,32 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@redocly/ajv@8.11.2': + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js-replace: 1.0.1 + + '@redocly/config@0.16.0': {} + + '@redocly/openapi-core@1.25.11(supports-color@9.4.0)': + dependencies: + '@redocly/ajv': 8.11.2 + '@redocly/config': 0.16.0 + colorette: 1.4.0 + https-proxy-agent: 7.0.5(supports-color@9.4.0) + js-levenshtein: 1.1.6 + js-yaml: 4.1.0 + lodash.isequal: 4.5.0 + minimatch: 5.1.6 + node-fetch: 2.7.0 + pluralize: 8.0.0 + yaml-ast-parser: 0.0.43 + transitivePeerDependencies: + - encoding + - supports-color + '@reduxjs/toolkit@2.2.3(react-redux@9.1.1(@types/react@18.3.1)(react@18.3.1)(redux@5.0.1))(react@18.3.1)': dependencies: immer: 10.1.1 @@ -9131,7 +8963,7 @@ snapshots: '@typescript-eslint/type-utils': 7.8.0(eslint@8.57.0)(typescript@5.4.2) '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.2) '@typescript-eslint/visitor-keys': 7.8.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@9.4.0) eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 @@ -9151,7 +8983,7 @@ snapshots: '@typescript-eslint/type-utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.8.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@9.4.0) eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 @@ -9169,7 +9001,7 @@ snapshots: '@typescript-eslint/types': 7.8.0 '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.2) '@typescript-eslint/visitor-keys': 7.8.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@9.4.0) eslint: 8.57.0 optionalDependencies: typescript: 5.4.2 @@ -9182,7 +9014,7 @@ snapshots: '@typescript-eslint/types': 7.8.0 '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.8.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@9.4.0) eslint: 8.57.0 optionalDependencies: typescript: 5.4.5 @@ -9198,7 +9030,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.2) '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.2) - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@9.4.0) eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.4.2) optionalDependencies: @@ -9210,7 +9042,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@9.4.0) eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: @@ -9224,7 +9056,7 @@ snapshots: dependencies: '@typescript-eslint/types': 7.8.0 '@typescript-eslint/visitor-keys': 7.8.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@9.4.0) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.4 @@ -9239,7 +9071,7 @@ snapshots: dependencies: '@typescript-eslint/types': 7.8.0 '@typescript-eslint/visitor-keys': 7.8.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@9.4.0) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.4 @@ -9338,6 +9170,12 @@ snapshots: adm-zip@0.5.12: {} + agent-base@7.1.1(supports-color@9.4.0): + dependencies: + debug: 4.3.4(supports-color@9.4.0) + transitivePeerDependencies: + - supports-color + ajv-formats@2.1.1(ajv@8.12.0): optionalDependencies: ajv: 8.12.0 @@ -9356,6 +9194,8 @@ snapshots: require-from-string: 2.0.2 uri-js: 4.4.1 + ansi-colors@4.1.3: {} + ansi-escapes@6.2.1: {} ansi-regex@5.0.1: {} @@ -9581,8 +9421,6 @@ snapshots: balanced-match@1.0.2: {} - base64-arraybuffer@1.0.2: {} - base64-js@1.5.1: {} base64url@3.0.1: {} @@ -9716,6 +9554,8 @@ snapshots: chalk@5.3.0: {} + change-case@5.4.4: {} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -9782,6 +9622,8 @@ snapshots: color-name@1.1.4: {} + colorette@1.4.0: {} + colorette@2.0.20: {} combined-stream@1.0.8: @@ -9988,6 +9830,12 @@ snapshots: optionalDependencies: supports-color: 5.5.0 + debug@4.3.4(supports-color@9.4.0): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 9.4.0 + deep-is@0.1.4: {} defaults@1.0.4: @@ -10074,11 +9922,11 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.35.3(@aws-sdk/client-rds-data@3.556.0)(@libsql/client-wasm@0.14.0)(@types/pg@8.11.10)(@types/react@18.3.1)(kysely@0.25.0)(pg@8.13.0)(react@18.3.1): + drizzle-orm@0.35.3(@aws-sdk/client-rds-data@3.556.0(aws-crt@1.21.2))(@libsql/client-wasm@0.14.0)(@types/pg@8.11.10)(@types/react@18.3.1)(kysely@0.25.0)(pg@8.13.0)(react@18.3.1): dependencies: '@libsql/client-wasm': 0.14.0 optionalDependencies: - '@aws-sdk/client-rds-data': 3.556.0 + '@aws-sdk/client-rds-data': 3.556.0(aws-crt@1.21.2) '@types/pg': 8.11.10 '@types/react': 18.3.1 kysely: 0.25.0 @@ -10221,7 +10069,7 @@ snapshots: esbuild-register@3.6.0(esbuild@0.19.12): dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@9.4.0) esbuild: 0.19.12 transitivePeerDependencies: - supports-color @@ -10439,7 +10287,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@9.4.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -10829,6 +10677,13 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 + https-proxy-agent@7.0.5(supports-color@9.4.0): + dependencies: + agent-base: 7.1.1(supports-color@9.4.0) + debug: 4.3.4(supports-color@9.4.0) + transitivePeerDependencies: + - supports-color + human-signals@5.0.0: {} husky@8.0.3: {} @@ -10862,6 +10717,8 @@ snapshots: indent-string@5.0.0: {} + index-to-position@0.1.2: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -11084,6 +10941,8 @@ snapshots: js-base64@3.7.7: {} + js-levenshtein@1.1.6: {} + js-sdsl@4.3.0: {} js-tokens@4.0.0: {} @@ -11175,7 +11034,7 @@ snapshots: dependencies: chalk: 5.3.0 commander: 11.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@9.4.0) execa: 8.0.1 lilconfig: 3.0.0 listr2: 8.0.1 @@ -11331,7 +11190,7 @@ snapshots: mqtt-packet@6.10.0: dependencies: bl: 4.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@9.4.0) process-nextick-args: 2.0.1 transitivePeerDependencies: - supports-color @@ -11340,7 +11199,7 @@ snapshots: dependencies: commist: 1.1.0 concat-stream: 2.0.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@9.4.0) duplexify: 4.1.3 help-me: 3.0.0 inherits: 2.0.4 @@ -11361,7 +11220,7 @@ snapshots: dependencies: commist: 1.1.0 concat-stream: 2.0.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@9.4.0) duplexify: 4.1.3 help-me: 3.0.0 inherits: 2.0.4 @@ -11395,6 +11254,10 @@ snapshots: negotiator@0.6.3: {} + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + node-html-parser@6.1.13: dependencies: css-select: 5.1.0 @@ -11427,7 +11290,7 @@ snapshots: number-allocator@1.0.14: dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@9.4.0) js-sdsl: 4.3.0 transitivePeerDependencies: - supports-color @@ -11504,6 +11367,18 @@ snapshots: dependencies: mimic-fn: 4.0.0 + openapi-typescript@7.4.3(typescript@5.4.5): + dependencies: + '@redocly/openapi-core': 1.25.11(supports-color@9.4.0) + ansi-colors: 4.1.3 + change-case: 5.4.4 + parse-json: 8.1.0 + supports-color: 9.4.0 + typescript: 5.4.5 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - encoding + openid-client@5.6.5: dependencies: jose: 4.15.5 @@ -11550,12 +11425,16 @@ snapshots: p-try@2.2.0: {} - pako@2.1.0: {} - parent-module@1.0.1: dependencies: callsites: 3.1.0 + parse-json@8.1.0: + dependencies: + '@babel/code-frame': 7.24.2 + index-to-position: 0.1.2 + type-fest: 4.26.1 + parseurl@1.3.3: {} passport-google-oauth1@1.0.0: @@ -11618,8 +11497,6 @@ snapshots: pause@0.0.1: {} - peterportal-api-next-types@1.0.0-rc.3: {} - pg-cloudflare@1.1.1: optional: true @@ -11677,6 +11554,8 @@ snapshots: dependencies: find-up: 3.0.0 + pluralize@8.0.0: {} + popper.js@1.16.1: {} possible-typed-array-names@1.0.0: {} @@ -12439,6 +12318,8 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-color@9.4.0: {} + supports-preserve-symlinks-flag@1.0.0: {} table@6.8.2: @@ -12473,6 +12354,8 @@ snapshots: touch@3.1.1: {} + tr46@0.0.3: {} + tree-kill@1.2.2: {} ts-api-utils@1.3.0(typescript@5.4.2): @@ -12511,6 +12394,8 @@ snapshots: type-fest@0.20.2: {} + type-fest@4.26.1: {} + type-is@1.6.18: dependencies: media-typer: 0.3.0 @@ -12602,6 +12487,8 @@ snapshots: escalade: 3.1.2 picocolors: 1.0.0 + uri-js-replace@1.0.1: {} + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -12671,10 +12558,7 @@ snapshots: pvtsutils: 1.3.5 tslib: 2.6.2 - websoc-fuzzy-search@1.0.1: - dependencies: - base64-arraybuffer: 1.0.2 - pako: 2.1.0 + webidl-conversions@3.0.1: {} websocket-stream@5.5.2: dependencies: @@ -12688,6 +12572,11 @@ snapshots: - bufferutil - utf-8-validate + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 @@ -12781,6 +12670,8 @@ snapshots: yallist@4.0.0: {} + yaml-ast-parser@0.0.43: {} + yaml@1.10.2: {} yaml@2.3.4: {} diff --git a/site/package.json b/site/package.json index 09b07cec..a26fd1f4 100644 --- a/site/package.json +++ b/site/package.json @@ -28,8 +28,7 @@ "react-twemoji": "^0.5.0", "semantic-ui-css": "^2.5.0", "semantic-ui-react": "^2.1.5", - "toastify-js": "^1.12.0", - "websoc-fuzzy-search": "1.0.1" + "toastify-js": "^1.12.0" }, "scripts": { "start": "vite", diff --git a/site/src/component/Footer/Footer.tsx b/site/src/component/Footer/Footer.tsx index 0586e2d8..bd13eda6 100644 --- a/site/src/component/Footer/Footer.tsx +++ b/site/src/component/Footer/Footer.tsx @@ -9,7 +9,7 @@ const Footer: FC = () => { GitHub - + API diff --git a/site/src/component/GradeDist/GradeDist.tsx b/site/src/component/GradeDist/GradeDist.tsx index d7dce446..b21a0d93 100644 --- a/site/src/component/GradeDist/GradeDist.tsx +++ b/site/src/component/GradeDist/GradeDist.tsx @@ -38,25 +38,25 @@ const GradeDist: FC = (props) => { const [quarterEntries, setQuarterEntries] = useState(null!); const fetchGradeDistData = () => { - let request: Promise; + let requests: Promise[]; // course context if (props.course) { const params = { department: props.course.department, number: props.course.courseNumber, }; - request = trpc.courses.grades.query(params); + requests = [trpc.courses.grades.query(params)]; } else if (props.professor) { - const params = { - name: props.professor.shortenedName, - }; - request = trpc.professors.grades.query(params); + requests = props.professor.shortenedNames.map((name) => trpc.professors.grades.query({ name })); } - request!.then(setGradeDistData).catch((error) => { - setGradeDistData([]); - console.error(error.response); - }); + Promise.all(requests!) + .then((res) => res.flat()) + .then(setGradeDistData) + .catch((error) => { + setGradeDistData([]); + console.error(error.response); + }); }; // reset any data from a previous course or professor, get new data for course or professor diff --git a/site/src/component/PrereqTree/PrereqTree.tsx b/site/src/component/PrereqTree/PrereqTree.tsx index 0d35fd61..d63c00a9 100644 --- a/site/src/component/PrereqTree/PrereqTree.tsx +++ b/site/src/component/PrereqTree/PrereqTree.tsx @@ -65,10 +65,16 @@ const PrereqTreeNode: FC = (props) => { return (
  • diff --git a/site/src/component/ReviewForm/ReviewForm.tsx b/site/src/component/ReviewForm/ReviewForm.tsx index 19fe3d9d..cb844bd5 100644 --- a/site/src/component/ReviewForm/ReviewForm.tsx +++ b/site/src/component/ReviewForm/ReviewForm.tsx @@ -13,7 +13,7 @@ import { addReview, editReview } from '../../store/slices/reviewSlice'; import { useAppDispatch } from '../../store/hooks'; import { ReviewProps } from '../Review/Review'; import ThemeContext from '../../style/theme-context'; -import { quarterNames } from '@peterportal/types'; +import { quarters } from '@peterportal/types'; import trpc from '../../trpc'; import { anonymousName, @@ -175,7 +175,7 @@ const ReviewForm: FC = ({ Instructor {Object.keys(courseProp?.instructors).map((ucinetid) => { - const name = courseProp?.instructors[ucinetid].shortenedName; + const name = courseProp?.instructors[ucinetid].name; return (