From dc5c1bf8ca31819900789197cad409c0366b7654 Mon Sep 17 00:00:00 2001 From: ZHallen122 Date: Wed, 23 Oct 2024 20:03:19 -0400 Subject: [PATCH 1/6] fix user id should be number --- backend/src/project/project.resolver.ts | 4 ++-- backend/src/project/project.service.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/src/project/project.resolver.ts b/backend/src/project/project.resolver.ts index 82537db5..af2037a9 100644 --- a/backend/src/project/project.resolver.ts +++ b/backend/src/project/project.resolver.ts @@ -20,7 +20,7 @@ export class ProjectsResolver { @Query(() => [Project]) async getUserProjects( - @GetUserIdFromToken() userId: string, + @GetUserIdFromToken() userId: number, ): Promise { return this.projectsService.getProjectsByUser(userId); } @@ -36,7 +36,7 @@ export class ProjectsResolver { @Mutation(() => Project) async upsertProject( - @GetUserIdFromToken() userId: string, + @GetUserIdFromToken() userId: number, @Args('upsertProjectInput') upsertProjectInput: UpsertProjectInput, ): Promise { return this.projectsService.upsertProject(upsertProjectInput, userId); diff --git a/backend/src/project/project.service.ts b/backend/src/project/project.service.ts index ec2e5c98..a1b4c087 100644 --- a/backend/src/project/project.service.ts +++ b/backend/src/project/project.service.ts @@ -19,7 +19,7 @@ export class ProjectService { private projectPackagesRepository: Repository, ) {} - async getProjectsByUser(userId: string): Promise { + async getProjectsByUser(userId: number): Promise { const projects = await this.projectsRepository.find({ where: { userId: userId, isDeleted: false }, relations: ['projectPackages'], @@ -57,7 +57,7 @@ export class ProjectService { async upsertProject( upsertProjectInput: UpsertProjectInput, - user_id: string, + user_id: number, ): Promise { const { projectId, projectName, path, projectPackages } = upsertProjectInput; From 071d737a4e4cb22328acc398d5b1478b3f6b4234 Mon Sep 17 00:00:00 2001 From: ZHallen122 Date: Wed, 23 Oct 2024 20:03:45 -0400 Subject: [PATCH 2/6] update --- backend/src/schema.gql | 60 +++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/backend/src/schema.gql b/backend/src/schema.gql index d0dec962..e6570c2c 100644 --- a/backend/src/schema.gql +++ b/backend/src/schema.gql @@ -42,14 +42,14 @@ input LoginUserInput { } type Menu { - created_at: Date! + createdAt: Date! id: ID! - is_active: Boolean! - is_deleted: Boolean! - last_updated: Date! + isActive: Boolean! + isDeleted: Boolean! name: String! path: String! permission: String! + updatedAt: Date! } type Mutation { @@ -58,35 +58,35 @@ type Mutation { registerUser(input: RegisterUserInput!): User! removePackageFromProject(packageId: String!, projectId: String!): Boolean! updateProjectPath(newPath: String!, projectId: String!): Boolean! - upsertProject(upsertProjectInput: UpsertProjectInput!): Projects! + upsertProject(upsertProjectInput: UpsertProjectInput!): Project! } -type ProjectPackages { - content: String! - created_at: Date! +type Project { + createdAt: Date! id: ID! - is_active: Boolean! - is_deleted: Boolean! - last_updated: Date! - project_id: ID! + isActive: Boolean! + isDeleted: Boolean! + path: String + projectName: String! + projectPackages: [ProjectPackages!] + updatedAt: Date! + userId: ID! } -type Projects { - created_at: Date! +type ProjectPackages { + content: String! + createdAt: Date! id: ID! - is_active: Boolean! - is_deleted: Boolean! - last_updated: Date! - path: String! - projectPackages: [ProjectPackages!] - project_name: String! - user_id: ID! + isActive: Boolean! + isDeleted: Boolean! + project_id: ID! + updatedAt: Date! } type Query { checkToken(input: CheckTokenInput!): Boolean! - getProjectDetails(projectId: String!): Projects! - getUserProjects: [Projects!]! + getProjectDetails(projectId: String!): Project! + getUserProjects: [Project!]! logout: Boolean! } @@ -101,17 +101,17 @@ type Subscription { } input UpsertProjectInput { - project_id: ID - project_name: String! - project_packages: [String!] + projectId: ID + projectName: String! + projectPackages: [String!] } type User { - created_at: Date! + createdAt: Date! email: String! id: ID! - is_active: Boolean! - is_deleted: Boolean! - last_updated: Date! + isActive: Boolean! + isDeleted: Boolean! + updatedAt: Date! username: String! } \ No newline at end of file From 40b4158617522851de8c9932b9860198fd4cd7db Mon Sep 17 00:00:00 2001 From: ZHallen122 Date: Wed, 23 Oct 2024 20:05:40 -0400 Subject: [PATCH 3/6] jest auto test and apolloclient setup --- frontend/jest.config.js | 5 +++++ frontend/package.json | 5 +++++ frontend/src/utils/apolloClient.ts | 30 ++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 frontend/jest.config.js create mode 100644 frontend/src/utils/apolloClient.ts diff --git a/frontend/jest.config.js b/frontend/jest.config.js new file mode 100644 index 00000000..e60a91c9 --- /dev/null +++ b/frontend/jest.config.js @@ -0,0 +1,5 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + }; + \ No newline at end of file diff --git a/frontend/package.json b/frontend/package.json index 5b88480a..fa0f5107 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -11,6 +11,7 @@ "format": "prettier --write \"src/**/*.ts\"" }, "dependencies": { + "@apollo/client": "^3.11.8", "@emoji-mart/data": "^1.2.1", "@emoji-mart/react": "^1.1.1", "@hookform/resolvers": "^3.9.0", @@ -32,6 +33,7 @@ "clsx": "^2.1.1", "emoji-mart": "^5.6.0", "framer-motion": "^11.5.6", + "graphql": "^16.9.0", "langchain": "^0.3.2", "lucide-react": "^0.445.0", "next": "^14.2.13", @@ -55,6 +57,7 @@ "zustand": "^5.0.0-rc.2" }, "devDependencies": { + "@types/jest": "^29.5.14", "@types/node": "^22.5.5", "@types/react": "^18.3.8", "@types/react-dom": "^18.3.0", @@ -62,8 +65,10 @@ "autoprefixer": "^10.4.20", "eslint": "8.57.1", "eslint-config-next": "14.2.13", + "jest": "^29.7.0", "postcss": "^8.4.47", "tailwindcss": "^3.4.12", + "ts-jest": "^29.2.5", "typescript": "^5.6.2" } } diff --git a/frontend/src/utils/apolloClient.ts b/frontend/src/utils/apolloClient.ts new file mode 100644 index 00000000..841dfe12 --- /dev/null +++ b/frontend/src/utils/apolloClient.ts @@ -0,0 +1,30 @@ +import { ApolloClient, InMemoryCache, HttpLink, ApolloLink, concat } from '@apollo/client'; + +const httpLink = new HttpLink({ +// uri: process.env.NEXT_PUBLIC_API_BASE_URL, + uri: 'http://localhost:8080/graphql', +}); + +const authMiddleware = new ApolloLink((operation, forward) => { + // Get the authentication token from local storage if it exists + const token = localStorage.getItem('token'); + // Use the setContext method to set the HTTP headers. + if (token) { + operation.setContext({ + headers: { + Authorization: `Bearer ${token}`, + }, + }); + } + return forward(operation); +}); + +const client = new ApolloClient({ + link: concat(authMiddleware, httpLink), + cache: new InMemoryCache(), +}); + +export default client; + + + From b89e3b7b1bcbe9fd90bfaadb3a51b8b694b40f2d Mon Sep 17 00:00:00 2001 From: ZHallen122 Date: Wed, 23 Oct 2024 20:08:06 -0400 Subject: [PATCH 4/6] project frontend to backend connect api with test --- frontend/src/app/api/project/route.ts | 129 ++++++++++++++++++++++++++ frontend/src/test/projectApi.test.ts | 40 ++++++++ 2 files changed, 169 insertions(+) create mode 100644 frontend/src/app/api/project/route.ts create mode 100644 frontend/src/test/projectApi.test.ts diff --git a/frontend/src/app/api/project/route.ts b/frontend/src/app/api/project/route.ts new file mode 100644 index 00000000..fe94791b --- /dev/null +++ b/frontend/src/app/api/project/route.ts @@ -0,0 +1,129 @@ +import { gql } from '@apollo/client'; +import client from '../../../utils/apolloClient'; + +// Define the queries and mutations + +// Fetch user projects +export const GET_USER_PROJECTS = gql` + query GetUserProjects { + getUserProjects { + id + projectName + path + projectPackages { + id + content + } + } + } +`; + +export const getUserProjects = async (): Promise => { + try { + const response = await client.query({ + query: GET_USER_PROJECTS, + }); + return response.data.getUserProjects; + } catch (error) { + console.error('Error fetching user projects:', error); + throw error; + } +}; + +// Fetch project details +export const GET_PROJECT_DETAILS = gql` + query GetProjectDetails($projectId: String!) { + getProjectDetails(projectId: $projectId) { + id + projectName + path + projectPackages { + id + content + } + } + } +`; + +export const getProjectDetails = async (projectId: string): Promise => { + try { + const response = await client.query({ + query: GET_PROJECT_DETAILS, + variables: { projectId }, + }); + return response.data.getProjectDetails; + } catch (error) { + console.error('Error fetching project details:', error); + throw error; + } +}; + +// Upsert project (Create or Update) +export const UPSERT_PROJECT = gql` + mutation UpsertProject($upsertProjectInput: UpsertProjectInput!) { + upsertProject(upsertProjectInput: $upsertProjectInput) { + id + projectName + path + projectPackages { + id + content + } + } + } +`; + +export const upsertProject = async (upsertProjectInput: any): Promise => { + try { + const response = await client.mutate({ + mutation: UPSERT_PROJECT, + variables: { + upsertProjectInput, + }, + }); + return response.data.upsertProject; + } catch (error) { + console.error('Error creating/updating project:', error); + throw error; + } +}; + +// Delete project +export const DELETE_PROJECT = gql` + mutation DeleteProject($projectId: String!) { + deleteProject(projectId: $projectId) + } +`; + +export const deleteProject = async (projectId: string): Promise => { + try { + const response = await client.mutate({ + mutation: DELETE_PROJECT, + variables: { projectId }, + }); + return response.data.deleteProject; + } catch (error) { + console.error('Error deleting project:', error); + throw error; + } +}; + +// Remove package from project +export const REMOVE_PACKAGE_FROM_PROJECT = gql` + mutation RemovePackageFromProject($projectId: String!, $packageId: String!) { + removePackageFromProject(projectId: $projectId, packageId: $packageId) + } +`; + +export const removePackageFromProject = async (projectId: string, packageId: string): Promise => { + try { + const response = await client.mutate({ + mutation: REMOVE_PACKAGE_FROM_PROJECT, + variables: { projectId, packageId }, + }); + return response.data.removePackageFromProject; + } catch (error) { + console.error('Error removing package from project:', error); + throw error; + } +}; diff --git a/frontend/src/test/projectApi.test.ts b/frontend/src/test/projectApi.test.ts new file mode 100644 index 00000000..3d52b1fc --- /dev/null +++ b/frontend/src/test/projectApi.test.ts @@ -0,0 +1,40 @@ +import { getUserProjects, getProjectDetails, deleteProject, upsertProject, removePackageFromProject } from '../app/api/project/route'; + +describe('Project API', () => { + let projectId: string; + let packageId: string; + + it('should upsert a project', async () => { + const upsertProjectInput = { + projectName: 'Test Project', + projectPackages: ['Package 1', 'Package 2'], + }; + const project = await upsertProject(upsertProjectInput); + expect(project).toHaveProperty('id'); + projectId = project.id; + console.log('Project id is: ' + projectId) + packageId = project.projectPackages[0].id; + }); + + it('should get user projects', async () => { + const projects = await getUserProjects(); + expect(Array.isArray(projects)).toBe(true); + expect(projects.length).toBeGreaterThan(0); + }); + + it('should get project details', async () => { + const projectDetails = await getProjectDetails(projectId); + expect(projectDetails).toHaveProperty('id', projectId); + }); + + it('should remove a package from project', async () => { + const removed = await removePackageFromProject(projectId, packageId); + expect(removed).toBe(true); + }); + + it('should delete a project', async () => { + const deleted = await deleteProject(projectId); + expect(deleted).toBe(true); + }); + }); + From 6b8c307f10c2491c33cbce838ea9a28b97e2736f Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Thu, 24 Oct 2024 00:09:54 +0000 Subject: [PATCH 5/6] [autofix.ci] apply automated fixes --- frontend/jest.config.js | 7 +- frontend/src/app/api/project/route.ts | 5 +- frontend/src/test/projectApi.test.ts | 79 +++--- frontend/src/utils/apolloClient.ts | 13 +- pnpm-lock.yaml | 337 +++++++++++++++++++++++--- 5 files changed, 357 insertions(+), 84 deletions(-) diff --git a/frontend/jest.config.js b/frontend/jest.config.js index e60a91c9..4a5b465e 100644 --- a/frontend/jest.config.js +++ b/frontend/jest.config.js @@ -1,5 +1,4 @@ module.exports = { - preset: 'ts-jest', - testEnvironment: 'node', - }; - \ No newline at end of file + preset: 'ts-jest', + testEnvironment: 'node', +}; diff --git a/frontend/src/app/api/project/route.ts b/frontend/src/app/api/project/route.ts index fe94791b..2de1f7d7 100644 --- a/frontend/src/app/api/project/route.ts +++ b/frontend/src/app/api/project/route.ts @@ -115,7 +115,10 @@ export const REMOVE_PACKAGE_FROM_PROJECT = gql` } `; -export const removePackageFromProject = async (projectId: string, packageId: string): Promise => { +export const removePackageFromProject = async ( + projectId: string, + packageId: string +): Promise => { try { const response = await client.mutate({ mutation: REMOVE_PACKAGE_FROM_PROJECT, diff --git a/frontend/src/test/projectApi.test.ts b/frontend/src/test/projectApi.test.ts index 3d52b1fc..9cf60cf7 100644 --- a/frontend/src/test/projectApi.test.ts +++ b/frontend/src/test/projectApi.test.ts @@ -1,40 +1,45 @@ -import { getUserProjects, getProjectDetails, deleteProject, upsertProject, removePackageFromProject } from '../app/api/project/route'; +import { + getUserProjects, + getProjectDetails, + deleteProject, + upsertProject, + removePackageFromProject, +} from '../app/api/project/route'; describe('Project API', () => { - let projectId: string; - let packageId: string; - - it('should upsert a project', async () => { - const upsertProjectInput = { - projectName: 'Test Project', - projectPackages: ['Package 1', 'Package 2'], - }; - const project = await upsertProject(upsertProjectInput); - expect(project).toHaveProperty('id'); - projectId = project.id; - console.log('Project id is: ' + projectId) - packageId = project.projectPackages[0].id; - }); - - it('should get user projects', async () => { - const projects = await getUserProjects(); - expect(Array.isArray(projects)).toBe(true); - expect(projects.length).toBeGreaterThan(0); - }); - - it('should get project details', async () => { - const projectDetails = await getProjectDetails(projectId); - expect(projectDetails).toHaveProperty('id', projectId); - }); - - it('should remove a package from project', async () => { - const removed = await removePackageFromProject(projectId, packageId); - expect(removed).toBe(true); - }); - - it('should delete a project', async () => { - const deleted = await deleteProject(projectId); - expect(deleted).toBe(true); - }); + let projectId: string; + let packageId: string; + + it('should upsert a project', async () => { + const upsertProjectInput = { + projectName: 'Test Project', + projectPackages: ['Package 1', 'Package 2'], + }; + const project = await upsertProject(upsertProjectInput); + expect(project).toHaveProperty('id'); + projectId = project.id; + console.log('Project id is: ' + projectId); + packageId = project.projectPackages[0].id; + }); + + it('should get user projects', async () => { + const projects = await getUserProjects(); + expect(Array.isArray(projects)).toBe(true); + expect(projects.length).toBeGreaterThan(0); + }); + + it('should get project details', async () => { + const projectDetails = await getProjectDetails(projectId); + expect(projectDetails).toHaveProperty('id', projectId); + }); + + it('should remove a package from project', async () => { + const removed = await removePackageFromProject(projectId, packageId); + expect(removed).toBe(true); + }); + + it('should delete a project', async () => { + const deleted = await deleteProject(projectId); + expect(deleted).toBe(true); }); - +}); diff --git a/frontend/src/utils/apolloClient.ts b/frontend/src/utils/apolloClient.ts index 841dfe12..9352e232 100644 --- a/frontend/src/utils/apolloClient.ts +++ b/frontend/src/utils/apolloClient.ts @@ -1,7 +1,13 @@ -import { ApolloClient, InMemoryCache, HttpLink, ApolloLink, concat } from '@apollo/client'; +import { + ApolloClient, + InMemoryCache, + HttpLink, + ApolloLink, + concat, +} from '@apollo/client'; const httpLink = new HttpLink({ -// uri: process.env.NEXT_PUBLIC_API_BASE_URL, + // uri: process.env.NEXT_PUBLIC_API_BASE_URL, uri: 'http://localhost:8080/graphql', }); @@ -25,6 +31,3 @@ const client = new ApolloClient({ }); export default client; - - - diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7511615d..aa43f61f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -163,6 +163,9 @@ importers: frontend: dependencies: + '@apollo/client': + specifier: ^3.11.8 + version: 3.11.8(@types/react@18.3.12)(graphql@16.9.0)(react-dom@18.3.1)(react@18.3.1) '@emoji-mart/data': specifier: ^1.2.1 version: 1.2.1 @@ -226,6 +229,9 @@ importers: framer-motion: specifier: ^11.5.6 version: 11.11.9(react-dom@18.3.1)(react@18.3.1) + graphql: + specifier: ^16.9.0 + version: 16.9.0 langchain: specifier: ^0.3.2 version: 0.3.3(@langchain/core@0.3.13)(axios@1.7.4) @@ -234,7 +240,7 @@ importers: version: 0.445.0(react@18.3.1) next: specifier: ^14.2.13 - version: 14.2.16(react-dom@18.3.1)(react@18.3.1) + version: 14.2.16(@babel/core@7.25.9)(react-dom@18.3.1)(react@18.3.1) next-themes: specifier: ^0.3.0 version: 0.3.0(react-dom@18.3.1)(react@18.3.1) @@ -290,6 +296,9 @@ importers: specifier: ^5.0.0-rc.2 version: 5.0.0(@types/react@18.3.12)(react@18.3.1) devDependencies: + '@types/jest': + specifier: ^29.5.14 + version: 29.5.14 '@types/node': specifier: ^22.5.5 version: 22.7.9 @@ -311,12 +320,18 @@ importers: eslint-config-next: specifier: 14.2.13 version: 14.2.13(eslint@8.57.1)(typescript@5.6.3) + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@22.7.9) postcss: specifier: ^8.4.47 version: 8.4.47 tailwindcss: specifier: ^3.4.12 version: 3.4.14 + ts-jest: + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.25.9)(jest@29.7.0)(typescript@5.6.3) typescript: specifier: ^5.6.2 version: 5.6.3 @@ -588,6 +603,45 @@ packages: graphql: 16.9.0 dev: false + /@apollo/client@3.11.8(@types/react@18.3.12)(graphql@16.9.0)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-CgG1wbtMjsV2pRGe/eYITmV5B8lXUCYljB2gB/6jWTFQcrvirUVvKg7qtFdjYkQSFbIffU1IDyxgeaN81eTjbA==} + peerDependencies: + graphql: ^15.0.0 || ^16.0.0 + graphql-ws: ^5.5.5 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 + subscriptions-transport-ws: ^0.9.0 || ^0.11.0 + peerDependenciesMeta: + graphql-ws: + optional: true + react: + optional: true + react-dom: + optional: true + subscriptions-transport-ws: + optional: true + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) + '@wry/caches': 1.0.1 + '@wry/equality': 0.5.7 + '@wry/trie': 0.5.0 + graphql: 16.9.0 + graphql-tag: 2.12.6(graphql@16.9.0) + hoist-non-react-statics: 3.3.2 + optimism: 0.18.0 + prop-types: 15.8.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + rehackt: 0.1.0(@types/react@18.3.12)(react@18.3.1) + response-iterator: 0.2.6 + symbol-observable: 4.0.0 + ts-invariant: 0.10.3 + tslib: 2.8.0 + zen-observable-ts: 1.2.5 + transitivePeerDependencies: + - '@types/react' + dev: false + /@apollo/protobufjs@1.2.7: resolution: {integrity: sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg==} hasBin: true @@ -781,12 +835,10 @@ packages: dependencies: '@babel/highlight': 7.25.9 picocolors: 1.1.1 - dev: true /@babel/compat-data@7.25.9: resolution: {integrity: sha512-yD+hEuJ/+wAJ4Ox2/rpNv5HIuPG82x3ZlQvYVn8iYCprdxzE7P1udpGF1jyjQVBU4dgznN+k2h103vxZ7NdPyw==} engines: {node: '>=6.9.0'} - dev: true /@babel/core@7.25.9: resolution: {integrity: sha512-WYvQviPw+Qyib0v92AwNIrdLISTp7RfDkM7bPqBvpbnhY4wq8HvHBZREVdYDXk98C8BkOIVnHAY3yvj7AVISxQ==} @@ -809,7 +861,6 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true /@babel/generator@7.25.9: resolution: {integrity: sha512-omlUGkr5EaoIJrhLf9CJ0TvjBRpd9+AXRG//0GEQ9THSo8wPiTlbpy1/Ow8ZTrbXpjd9FHXfbFQx32I04ht0FA==} @@ -819,7 +870,6 @@ packages: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 - dev: true /@babel/helper-compilation-targets@7.25.9: resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} @@ -830,7 +880,6 @@ packages: browserslist: 4.24.2 lru-cache: 5.1.1 semver: 6.3.1 - dev: true /@babel/helper-module-imports@7.25.9: resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} @@ -840,7 +889,6 @@ packages: '@babel/types': 7.25.9 transitivePeerDependencies: - supports-color - dev: true /@babel/helper-module-transforms@7.25.9(@babel/core@7.25.9): resolution: {integrity: sha512-TvLZY/F3+GvdRYFZFyxMvnsKi+4oJdgZzU3BoGN9Uc2d9C6zfNwJcKKhjqLAhK8i46mv93jsO74fDh3ih6rpHA==} @@ -855,7 +903,6 @@ packages: '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color - dev: true /@babel/helper-plugin-utils@7.25.9: resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} @@ -870,7 +917,6 @@ packages: '@babel/types': 7.25.9 transitivePeerDependencies: - supports-color - dev: true /@babel/helper-string-parser@7.25.9: resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} @@ -883,7 +929,6 @@ packages: /@babel/helper-validator-option@7.25.9: resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} - dev: true /@babel/helpers@7.25.9: resolution: {integrity: sha512-oKWp3+usOJSzDZOucZUAMayhPz/xVjzymyDzUN8dk0Wd3RWMlGLXi07UCQ/CgQVb8LvXx3XBajJH4XGgkt7H7g==} @@ -891,7 +936,6 @@ packages: dependencies: '@babel/template': 7.25.9 '@babel/types': 7.25.9 - dev: true /@babel/highlight@7.25.9: resolution: {integrity: sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==} @@ -901,7 +945,6 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.1.1 - dev: true /@babel/parser@7.25.9: resolution: {integrity: sha512-aI3jjAAO1fh7vY/pBGsn1i9LDbRP43+asrRlkPuTXW5yHXtd1NgTEMudbBoDDxrf1daEEfPJqR+JBMakzrR4Dg==} @@ -1083,7 +1126,6 @@ packages: '@babel/code-frame': 7.25.9 '@babel/parser': 7.25.9 '@babel/types': 7.25.9 - dev: true /@babel/traverse@7.25.9: resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} @@ -1098,7 +1140,6 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: true /@babel/types@7.25.9: resolution: {integrity: sha512-OwS2CM5KocvQ/k7dFJa8i5bNGJP0hXWfVCfDkqRFP1IreH1JDC7wG6eCYCi0+McbfT8OR/kNqsI0UU0xP9H6PQ==} @@ -1595,6 +1636,49 @@ packages: slash: 3.0.0 dev: true + /@jest/core@29.7.0: + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.7.9 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@22.7.9) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /@jest/core@29.7.0(ts-node@10.9.2): resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4691,6 +4775,41 @@ packages: webpack-cli: 5.1.4(webpack@5.95.0) dev: true + /@wry/caches@1.0.1: + resolution: {integrity: sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA==} + engines: {node: '>=8'} + dependencies: + tslib: 2.8.0 + dev: false + + /@wry/context@0.7.4: + resolution: {integrity: sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ==} + engines: {node: '>=8'} + dependencies: + tslib: 2.8.0 + dev: false + + /@wry/equality@0.5.7: + resolution: {integrity: sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw==} + engines: {node: '>=8'} + dependencies: + tslib: 2.8.0 + dev: false + + /@wry/trie@0.4.3: + resolution: {integrity: sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w==} + engines: {node: '>=8'} + dependencies: + tslib: 2.8.0 + dev: false + + /@wry/trie@0.5.0: + resolution: {integrity: sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA==} + engines: {node: '>=8'} + dependencies: + tslib: 2.8.0 + dev: false + /@xtuc/ieee754@1.2.0: resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} dev: true @@ -4887,7 +5006,6 @@ packages: engines: {node: '>=4'} dependencies: color-convert: 1.9.3 - dev: true /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} @@ -5315,7 +5433,6 @@ packages: electron-to-chromium: 1.5.42 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) - dev: true /bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} @@ -5434,7 +5551,6 @@ packages: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - dev: true /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -5683,7 +5799,6 @@ packages: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 - dev: true /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} @@ -5693,7 +5808,6 @@ packages: /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -5798,7 +5912,6 @@ packages: /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true /cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} @@ -5867,6 +5980,25 @@ packages: - ts-node dev: true + /create-jest@29.7.0(@types/node@22.7.9): + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@22.7.9) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} @@ -5882,7 +6014,7 @@ packages: resolution: {integrity: sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ==} engines: {node: '>=16.0.0'} dependencies: - tslib: 2.6.3 + tslib: 2.8.0 dev: false /cross-spawn@7.0.3: @@ -6173,7 +6305,6 @@ packages: /electron-to-chromium@1.5.42: resolution: {integrity: sha512-gIfKavKDw1mhvic9nbzA5lZw8QSHpdMwLwXc0cWidQz9B15pDoDdDH4boIatuFfeoCatb3a/NGL6CYRVFxGZ9g==} - dev: true /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -6386,7 +6517,6 @@ packages: /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - dev: true /escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} @@ -7280,7 +7410,6 @@ packages: /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} - dev: true /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} @@ -7401,7 +7530,6 @@ packages: /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - dev: true /globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} @@ -7561,6 +7689,12 @@ packages: resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==} dev: false + /hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + dependencies: + react-is: 16.13.1 + dev: false + /html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true @@ -8309,6 +8443,34 @@ packages: - ts-node dev: true + /jest-cli@29.7.0(@types/node@22.7.9): + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@22.7.9) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@22.7.9) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /jest-config@29.7.0(@types/node@20.16.15)(ts-node@10.9.2): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -8350,6 +8512,46 @@ packages: - supports-color dev: true + /jest-config@29.7.0(@types/node@22.7.9): + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + dependencies: + '@babel/core': 7.25.9 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.7.9 + babel-jest: 29.7.0(@babel/core@7.25.9) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + dev: true + /jest-diff@29.7.0: resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -8507,7 +8709,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.15 + '@types/node': 22.7.9 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -8538,7 +8740,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.15 + '@types/node': 22.7.9 chalk: 4.1.2 cjs-module-lexer: 1.4.1 collect-v8-coverage: 1.0.2 @@ -8663,6 +8865,27 @@ packages: - ts-node dev: true + /jest@29.7.0(@types/node@22.7.9): + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.7.0 + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@22.7.9) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /jiti@1.21.6: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true @@ -8700,7 +8923,6 @@ packages: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} hasBin: true - dev: true /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -8737,7 +8959,6 @@ packages: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true - dev: true /jsonc-parser@3.2.1: resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} @@ -9087,7 +9308,6 @@ packages: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 - dev: true /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} @@ -9884,7 +10104,7 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: false - /next@14.2.16(react-dom@18.3.1)(react@18.3.1): + /next@14.2.16(@babel/core@7.25.9)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-LcO7WnFu6lYSvCzZoo1dB+IO0xXz5uEv52HF1IUN0IqVTUIZGHuuR10I5efiLadGt+4oZqTcNZyVVEem/TM5nA==} engines: {node: '>=18.17.0'} hasBin: true @@ -9910,7 +10130,7 @@ packages: postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.1(react@18.3.1) + styled-jsx: 5.1.1(@babel/core@7.25.9)(react@18.3.1) optionalDependencies: '@next/swc-darwin-arm64': 14.2.16 '@next/swc-darwin-x64': 14.2.16 @@ -10069,7 +10289,6 @@ packages: /node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - dev: true /nodemon@3.1.7: resolution: {integrity: sha512-hLj7fuMow6f0lbB0cD14Lz2xNjwsyruH251Pk4t/yIitCFJbmY1myuLlHm/q06aST4jg6EgAh74PIBBrRqpVAQ==} @@ -10277,6 +10496,15 @@ packages: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} dev: false + /optimism@0.18.0: + resolution: {integrity: sha512-tGn8+REwLRNFnb9WmcY5IfpOqeX2kpaYJ1s6Ae3mn12AeydLkR3j+jSCmVQFoXqU8D41PAJ1RG1rCRNWmNZVmQ==} + dependencies: + '@wry/caches': 1.0.1 + '@wry/context': 0.7.4 + '@wry/trie': 0.4.3 + tslib: 2.8.0 + dev: false + /optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -11097,6 +11325,21 @@ packages: set-function-name: 2.0.2 dev: true + /rehackt@0.1.0(@types/react@18.3.12)(react@18.3.1): + resolution: {integrity: sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw==} + peerDependencies: + '@types/react': '*' + react: '*' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + dependencies: + '@types/react': 18.3.12 + react: 18.3.1 + dev: false + /remark-gfm@4.0.0: resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} dependencies: @@ -11200,6 +11443,11 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true + /response-iterator@0.2.6: + resolution: {integrity: sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==} + engines: {node: '>=0.8'} + dev: false + /restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} @@ -11854,7 +12102,7 @@ packages: tslib: 2.6.2 dev: false - /styled-jsx@5.1.1(react@18.3.1): + /styled-jsx@5.1.1(@babel/core@7.25.9)(react@18.3.1): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -11867,6 +12115,7 @@ packages: babel-plugin-macros: optional: true dependencies: + '@babel/core': 7.25.9 client-only: 0.0.1 react: 18.3.1 dev: false @@ -12004,7 +12253,6 @@ packages: /symbol-observable@4.0.0: resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} engines: {node: '>=0.10'} - dev: true /synckit@0.9.2: resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} @@ -12257,6 +12505,13 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + /ts-invariant@0.10.3: + resolution: {integrity: sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==} + engines: {node: '>=8'} + dependencies: + tslib: 2.8.0 + dev: false + /ts-jest@29.2.5(@babel/core@7.25.9)(jest@29.7.0)(typescript@5.6.3): resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} @@ -12780,7 +13035,6 @@ packages: browserslist: 4.24.2 escalade: 3.2.0 picocolors: 1.1.1 - dev: true /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -13284,7 +13538,6 @@ packages: /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -13348,6 +13601,16 @@ packages: engines: {node: '>=18'} dev: false + /zen-observable-ts@1.2.5: + resolution: {integrity: sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==} + dependencies: + zen-observable: 0.8.15 + dev: false + + /zen-observable@0.8.15: + resolution: {integrity: sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==} + dev: false + /zimmerframe@1.1.2: resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} dev: false From 273ff2bb2eb20206635b121fdca190b8f3bee566 Mon Sep 17 00:00:00 2001 From: ZHallen122 Date: Fri, 25 Oct 2024 09:07:15 -0400 Subject: [PATCH 6/6] userId string to number --- backend/src/project/project.model.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/project/project.model.ts b/backend/src/project/project.model.ts index f589a423..f3f59791 100644 --- a/backend/src/project/project.model.ts +++ b/backend/src/project/project.model.ts @@ -28,7 +28,7 @@ export class Project extends SystemBaseModel { @Field(() => ID) @Column() - userId: string; + userId: number; @ManyToOne(() => User) @JoinColumn({ name: 'user_id' })