diff --git a/.changeset/polite-insects-flow.md b/.changeset/polite-insects-flow.md new file mode 100644 index 000000000..3617d59d1 --- /dev/null +++ b/.changeset/polite-insects-flow.md @@ -0,0 +1,5 @@ +--- +"web": patch +--- + +test: migrate unit test diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 038f010fa..d7df89c9c 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,7 +1,3 @@ { - "recommendations": [ - "esbenp.prettier-vscode", - "firsttris.vscode-jest-runner", - "dbaeumer.vscode-eslint" - ] + "recommendations": ["esbenp.prettier-vscode", "dbaeumer.vscode-eslint"] } diff --git a/apps/admin-api/jest.config.ts b/apps/admin-api/jest.config.ts deleted file mode 100644 index 1f265a898..000000000 --- a/apps/admin-api/jest.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -/* eslint-disable */ -export default { - displayName: 'admin-api', - preset: '../../jest.preset.js', - globals: { - 'ts-jest': { - tsconfig: '/tsconfig.spec.json', - }, - }, - testEnvironment: 'node', - transform: { - '^.+\\.[tj]s$': 'ts-jest', - }, - moduleFileExtensions: ['ts', 'js', 'html'], - coverageDirectory: '../../coverage/apps/admin-api', -} diff --git a/apps/admin-api/package.json b/apps/admin-api/package.json index 02130fe88..74c987ab2 100644 --- a/apps/admin-api/package.json +++ b/apps/admin-api/package.json @@ -39,11 +39,8 @@ "devDependencies": { "@types/cookie-parser": "^1.4.6", "@types/express": "^4.17.21", - "@types/jest": "29.5.12", "@types/node": "^20.11.17", "eslint": "8.56.0", - "jest": "29.7.0", - "ts-jest": "29.1.2", "ts-morph": "^20.0.0", "typescript": "~5.3.3" } diff --git a/apps/admin-api/tsconfig.build.json b/apps/admin-api/tsconfig.build.json index 63f941816..bc29bde35 100644 --- a/apps/admin-api/tsconfig.build.json +++ b/apps/admin-api/tsconfig.build.json @@ -1,4 +1,4 @@ { "extends": "./tsconfig.json", - "exclude": ["node_modules", "../../node_modules", "jest.config.ts", "test", "dist", "**/*spec.ts"] + "exclude": ["node_modules", "../../node_modules", "test", "dist", "**/*spec.ts"] } diff --git a/apps/admin-api/tsconfig.json b/apps/admin-api/tsconfig.json index 6adfb7879..26316750d 100644 --- a/apps/admin-api/tsconfig.json +++ b/apps/admin-api/tsconfig.json @@ -12,7 +12,6 @@ "include": ["next-env.d.ts", "src/**/*.ts", "generate-typings.ts"], "exclude": [ "node_modules", - "jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.test.tsx", diff --git a/apps/admin-api/tsconfig.spec.json b/apps/admin-api/tsconfig.spec.json index 862e077e5..346024a2a 100644 --- a/apps/admin-api/tsconfig.spec.json +++ b/apps/admin-api/tsconfig.spec.json @@ -8,7 +8,6 @@ "baseUrl": "./" }, "include": [ - "jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.test.tsx", diff --git a/apps/admin-web/tsconfig.json b/apps/admin-web/tsconfig.json index 90977d67e..f55a4878f 100644 --- a/apps/admin-web/tsconfig.json +++ b/apps/admin-web/tsconfig.json @@ -9,7 +9,6 @@ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], "exclude": [ "node_modules", - "jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.test.tsx", diff --git a/apps/api/jest.config.ts b/apps/api/jest.config.ts deleted file mode 100644 index 4037f2cc2..000000000 --- a/apps/api/jest.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -/* eslint-disable */ -export default { - displayName: 'api', - preset: '../../jest.preset.js', - globals: { - 'ts-jest': { - tsconfig: '/tsconfig.spec.json', - }, - }, - testEnvironment: 'node', - transform: { - '^.+\\.[tj]s$': 'ts-jest', - }, - moduleFileExtensions: ['ts', 'js', 'html'], - coverageDirectory: '../../coverage/apps/api', -} diff --git a/apps/api/package.json b/apps/api/package.json index fccb4aa0d..7022d521f 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -14,12 +14,9 @@ "@nestjs/cli": "^9.5.0", "@types/cookie-parser": "^1.4.6", "@types/express": "^4.17.21", - "@types/jest": "29.5.12", "@types/node": "20.11.17", "@types/passport-jwt": "^3.0.13", "eslint": "8.56.0", - "jest": "29.7.0", - "ts-jest": "29.1.2", "ts-morph": "^20.0.0", "typescript": "~5.3.3" }, diff --git a/apps/api/tsconfig.build.json b/apps/api/tsconfig.build.json index 63f941816..bc29bde35 100644 --- a/apps/api/tsconfig.build.json +++ b/apps/api/tsconfig.build.json @@ -1,4 +1,4 @@ { "extends": "./tsconfig.json", - "exclude": ["node_modules", "../../node_modules", "jest.config.ts", "test", "dist", "**/*spec.ts"] + "exclude": ["node_modules", "../../node_modules", "test", "dist", "**/*spec.ts"] } diff --git a/apps/api/tsconfig.json b/apps/api/tsconfig.json index c40f0bb43..5a90f83cd 100644 --- a/apps/api/tsconfig.json +++ b/apps/api/tsconfig.json @@ -12,7 +12,6 @@ "include": ["next-env.d.ts", "src/**/*.ts"], "exclude": [ "node_modules", - "jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.test.tsx", diff --git a/apps/api/tsconfig.spec.json b/apps/api/tsconfig.spec.json index f19303ebf..2018d18b2 100644 --- a/apps/api/tsconfig.spec.json +++ b/apps/api/tsconfig.spec.json @@ -8,7 +8,6 @@ "baseUrl": "./" }, "include": [ - "jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.test.tsx", diff --git a/apps/reg-scraper/jest.config.ts b/apps/reg-scraper/jest.config.ts deleted file mode 100644 index 452c17931..000000000 --- a/apps/reg-scraper/jest.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -/* eslint-disable */ -export default { - displayName: 'reg-scraper', - preset: '../../jest.preset.js', - globals: { - 'ts-jest': { - tsconfig: '/tsconfig.spec.json', - }, - }, - testEnvironment: 'node', - transform: { - '^.+\\.[tj]s$': 'ts-jest', - }, - moduleFileExtensions: ['ts', 'js', 'html'], - coverageDirectory: '../../coverage/apps/reg-scraper', -} diff --git a/apps/reg-scraper/package.json b/apps/reg-scraper/package.json index cdb9171f2..d0eccc77c 100644 --- a/apps/reg-scraper/package.json +++ b/apps/reg-scraper/package.json @@ -12,11 +12,9 @@ }, "devDependencies": { "@nestjs/cli": "^9.5.0", - "@types/jest": "29.5.12", "@types/node": "20.11.17", "@types/tough-cookie": "4.0.5", "eslint": "8.56.0", - "jest": "29.7.0", "typescript": "~5.3.3" }, "dependencies": { diff --git a/apps/reg-scraper/src/override/override.service.spec.ts b/apps/reg-scraper/src/override/override.service.spec.ts deleted file mode 100644 index 772571cd5..000000000 --- a/apps/reg-scraper/src/override/override.service.spec.ts +++ /dev/null @@ -1,474 +0,0 @@ -import { ConfigService } from '@nestjs/config' -import { getModelToken } from '@nestjs/mongoose' -import { Test, TestingModule } from '@nestjs/testing' - -import { Course, GenEdType, GenEdTypeEnum, StudyProgram } from '@thinc-org/chula-courses' - -import { Override } from '@reg-scraper/schema/override.schema' - -import { OverrideService } from './override.service' - -jest.mock('fs') - -const MockConfigService = { - get: jest.fn(), -} - -const MockOverrideModel = { - find: jest.fn(), - lean: jest.fn(), -} - -const MockReviewModel = { - find: jest.fn(), - lean: jest.fn(), -} - -const createOverride = ( - courseNo: string, - semester: string, - academicYear: string, - studyProgram: StudyProgram, - genEd: { genEdType: GenEdType; sections: string[] } -): Override => { - return { - courseNo, - semester, - academicYear, - studyProgram, - genEd: genEd, - } -} - -describe('OverrideService', () => { - let service: OverrideService - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [ - OverrideService, - { - provide: ConfigService, - useValue: MockConfigService, - }, - { - provide: getModelToken('override'), - useValue: MockOverrideModel, - }, - { - provide: getModelToken('review'), - useValue: MockReviewModel, - }, - ], - }).compile() - - service = module.get(OverrideService) - }) - - afterEach(() => { - jest.clearAllMocks() - }) - - it('should be defined', () => { - expect(service).toBeDefined() - }) - - describe('loadOverrides', () => { - it('should load overrides successfully (simple)', async () => { - const override1: Override = createOverride('1', '2', '2564', 'S', { - genEdType: GenEdTypeEnum.HU, - sections: ['1'], - }) - const override2: Override = createOverride('2', '2', '2564', 'S', { - genEdType: GenEdTypeEnum.NO, - sections: ['1', '2', '3'], - }) - const override3: Override = createOverride('3', '2', '2564', 'T', { - genEdType: GenEdTypeEnum.SC, - sections: ['1', '33'], - }) - - const overrideList = [override1, override2, override3] - - const want = { - S: { - '1': { - '2564': { - '2': override1, - }, - }, - '2': { - '2564': { - '2': override2, - }, - }, - }, - T: { - '3': { - '2564': { - '2': override3, - }, - }, - }, - I: {}, - } - - MockOverrideModel.find.mockReturnThis() - MockOverrideModel.lean.mockReturnValue(overrideList) - - await service.loadOverrides() - - expect(MockOverrideModel.find).toHaveBeenCalledTimes(1) - expect(MockOverrideModel.find).toHaveBeenCalledWith() - expect(service.getOverrides()).toEqual(want) - }) - - it('should load overrides successfully (multiple semester)', async () => { - const override1: Override = createOverride('1', '1', '2564', 'S', { - genEdType: GenEdTypeEnum.HU, - sections: ['1'], - }) - const override2: Override = createOverride('2', '2', '2564', 'S', { - genEdType: GenEdTypeEnum.NO, - sections: ['1', '2', '3'], - }) - const override3: Override = createOverride('3', '3', '2564', 'S', { - genEdType: GenEdTypeEnum.SC, - sections: ['1', '33'], - }) - - const overrideList = [override1, override2, override3] - - const want = { - S: { - '1': { - '2564': { - '1': override1, - }, - }, - '2': { - '2564': { - '2': override2, - }, - }, - '3': { - '2564': { - '3': override3, - }, - }, - }, - T: {}, - I: {}, - } - - MockOverrideModel.find.mockReturnThis() - MockOverrideModel.lean.mockReturnValue(overrideList) - - await service.loadOverrides() - - expect(MockOverrideModel.find).toHaveBeenCalledTimes(1) - expect(MockOverrideModel.find).toHaveBeenCalledWith() - expect(service.getOverrides()).toEqual(want) - }) - - it('should load overrides successfully (multiple academic year)', async () => { - const override1: Override = createOverride('1', '2', '2563', 'S', { - genEdType: GenEdTypeEnum.HU, - sections: ['1'], - }) - const override2: Override = createOverride('2', '2', '2564', 'S', { - genEdType: GenEdTypeEnum.NO, - sections: ['1', '2', '3'], - }) - const override3: Override = createOverride('3', '2', '2565', 'S', { - genEdType: GenEdTypeEnum.SC, - sections: ['1', '33'], - }) - - const overrideList = [override1, override2, override3] - - const want = { - S: { - '1': { - '2563': { - '2': override1, - }, - }, - '2': { - '2564': { - '2': override2, - }, - }, - '3': { - '2565': { - '2': override3, - }, - }, - }, - T: {}, - I: {}, - } - - MockOverrideModel.find.mockReturnThis() - MockOverrideModel.lean.mockReturnValue(overrideList) - - await service.loadOverrides() - - expect(MockOverrideModel.find).toHaveBeenCalledTimes(1) - expect(MockOverrideModel.find).toHaveBeenCalledWith() - expect(service.getOverrides()).toEqual(want) - }) - - it('should load overrides successfully (multiple academic year and semester)', async () => { - const override1: Override = createOverride('1', '1', '2563', 'S', { - genEdType: GenEdTypeEnum.HU, - sections: ['1'], - }) - const override2: Override = createOverride('2', '2', '2564', 'S', { - genEdType: GenEdTypeEnum.NO, - sections: ['1', '2', '3'], - }) - const override3: Override = createOverride('3', '3', '2565', 'S', { - genEdType: GenEdTypeEnum.SC, - sections: ['1', '33'], - }) - - const overrideList = [override1, override2, override3] - - const want = { - S: { - '1': { - '2563': { - '1': override1, - }, - }, - '2': { - '2564': { - '2': override2, - }, - }, - '3': { - '2565': { - '3': override3, - }, - }, - }, - T: {}, - I: {}, - } - - MockOverrideModel.find.mockReturnThis() - MockOverrideModel.lean.mockReturnValue(overrideList) - - await service.loadOverrides() - - expect(MockOverrideModel.find).toHaveBeenCalledTimes(1) - expect(MockOverrideModel.find).toHaveBeenCalledWith() - expect(service.getOverrides()).toEqual(want) - }) - }) - - describe('applyOverrides', () => { - it('should apply override to GenEd properly', async () => { - const course: Course = { - courseNo: '0123101', - abbrName: 'PARAGRAP WRITING', - academicYear: '2564', - courseCondition: '-', - courseNameEn: 'PARAGRAPH WRITING', - courseNameTh: 'การเขียนย่อหน้า', - credit: 3, - creditHours: 'LECT 1.0 CR + NL23 2.0 CR(LECT 1.0 HR + PRAC 4.0 HR)', - department: 'สถาบันภาษาไทยสิรินธร', - faculty: '01', - genEdType: GenEdTypeEnum.NO, - sections: [ - { - capacity: { - current: 22, - max: 28, - }, - classes: [{ teachers: ['A'], type: 'LECT' }], - closed: false, - genEdType: GenEdTypeEnum.NO, - sectionNo: '1', - }, - ], - semester: '2', - studyProgram: 'S', - } - - const override = createOverride('0123101', '2', '2564', 'S', { - genEdType: GenEdTypeEnum.HU, - sections: ['1'], - }) - - const semester = {} - semester[course.semester] = { - genEd: override.genEd, - } - - const academicYear = {} - academicYear[course.academicYear] = semester - - const overrides = { - S: {}, - I: {}, - T: {}, - } as Record>>> - - overrides[course.studyProgram][course.courseNo] = academicYear - - const want: Course = { - courseNo: course.courseNo, - abbrName: course.abbrName, - academicYear: course.academicYear, - courseCondition: course.courseCondition, - courseNameEn: course.courseNameEn, - courseNameTh: course.courseNameTh, - credit: course.credit, - creditHours: course.creditHours, - department: course.department, - faculty: course.faculty, - genEdType: GenEdTypeEnum.HU, - sections: [ - { - capacity: { - current: 22, - max: 28, - }, - classes: [{ teachers: ['A'], type: 'LECT' }], - closed: false, - genEdType: GenEdTypeEnum.HU, - sectionNo: '1', - }, - ], - semester: course.semester, - studyProgram: course.studyProgram, - rating: undefined, - courseDescEn: undefined, - courseDescTh: undefined, - } - - service.setOverrides(overrides) - - const actual = service.applyOverrides(course) - - expect(actual).toStrictEqual(want) - }) - - it("shouldn't apply override to Non-GenEd", async () => { - const course: Course = { - courseNo: '2022507', - abbrName: 'DIG INNO STARTUPS', - academicYear: '2564', - courseCondition: 'C.F.', - courseNameEn: 'DIGITAL INNOVATION STARTUPS', - courseNameTh: 'สตาร์ตอัปนวัตกรรมดิจิทัล', - credit: 3, - creditHours: 'LECT 3.0 CR(LECT 3.0 HR)', - department: 'สหสาขาวิชาธุรกิจเทคโนโลยีและการจัดการนวัตกรรม', - faculty: '20', - genEdType: GenEdTypeEnum.NO, - sections: [ - { - capacity: { - current: 22, - max: 28, - }, - classes: [{ teachers: ['A'], type: 'LECT' }], - closed: false, - genEdType: GenEdTypeEnum.NO, - sectionNo: '61', - }, - ], - semester: '2', - studyProgram: 'S', - } - - const override = createOverride('0123101', '2', '2564', 'S', { - genEdType: GenEdTypeEnum.HU, - sections: ['1'], - }) - - const semester = {} - semester[course.semester] = { - genEd: override.genEd, - } - - const academicYear = {} - academicYear[course.academicYear] = semester - - const overrides = { - S: {}, - I: {}, - T: {}, - } as Record>>> - - overrides[course.studyProgram][course.courseNo] = semester - - service.setOverrides(overrides) - - const actual = service.applyOverrides(course) - - expect(actual).toStrictEqual(course) - }) - - it("shouldn't apply override to session that not in override session list", async () => { - const course: Course = { - courseNo: '0123101', - abbrName: 'PARAGRAP WRITING', - academicYear: '2564', - courseCondition: '-', - courseNameEn: 'PARAGRAPH WRITING', - courseNameTh: 'การเขียนย่อหน้า', - credit: 3, - creditHours: 'LECT 1.0 CR + NL23 2.0 CR(LECT 1.0 HR + PRAC 4.0 HR)', - department: 'สถาบันภาษาไทยสิรินธร', - faculty: '01', - genEdType: GenEdTypeEnum.NO, - sections: [ - { - capacity: { - current: 22, - max: 28, - }, - classes: [{ teachers: ['A'], type: 'LECT' }], - closed: false, - genEdType: GenEdTypeEnum.NO, - sectionNo: '2', - }, - ], - semester: '2', - studyProgram: 'S', - } - - const override = createOverride('0123101', '2', '2564', 'S', { - genEdType: GenEdTypeEnum.HU, - sections: ['1'], - }) - - const semester = {} - semester[course.semester] = { - genEd: override.genEd, - } - - const academicYear = {} - academicYear[course.academicYear] = semester - - const overrides = { - S: {}, - I: {}, - T: {}, - } as Record>>> - - overrides[course.studyProgram][course.courseNo] = semester - - service.setOverrides(overrides) - - const actual = service.applyOverrides(course) - - expect(actual).toStrictEqual(course) - }) - }) -}) diff --git a/apps/reg-scraper/tsconfig.build.json b/apps/reg-scraper/tsconfig.build.json index 63f941816..bc29bde35 100644 --- a/apps/reg-scraper/tsconfig.build.json +++ b/apps/reg-scraper/tsconfig.build.json @@ -1,4 +1,4 @@ { "extends": "./tsconfig.json", - "exclude": ["node_modules", "../../node_modules", "jest.config.ts", "test", "dist", "**/*spec.ts"] + "exclude": ["node_modules", "../../node_modules", "test", "dist", "**/*spec.ts"] } diff --git a/apps/reg-scraper/tsconfig.json b/apps/reg-scraper/tsconfig.json index c937fbd74..c6caae1e2 100644 --- a/apps/reg-scraper/tsconfig.json +++ b/apps/reg-scraper/tsconfig.json @@ -12,7 +12,6 @@ "include": ["next-env.d.ts", "src/**/*.ts"], "exclude": [ "node_modules", - "jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.test.tsx", diff --git a/apps/reg-scraper/tsconfig.spec.json b/apps/reg-scraper/tsconfig.spec.json index 862e077e5..346024a2a 100644 --- a/apps/reg-scraper/tsconfig.spec.json +++ b/apps/reg-scraper/tsconfig.spec.json @@ -8,7 +8,6 @@ "baseUrl": "./" }, "include": [ - "jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.test.tsx", diff --git a/apps/web/custom-test-env.js b/apps/web/custom-test-env.js deleted file mode 100644 index 8d2169ebf..000000000 --- a/apps/web/custom-test-env.js +++ /dev/null @@ -1,13 +0,0 @@ -/* eslint-disable */ -const { TestEnvironment } = require('jest-environment-jsdom') - -module.exports = class CustomTestEnvironment extends TestEnvironment { - async setup() { - await super.setup() - if (typeof this.global.TextEncoder === 'undefined') { - const { TextEncoder, TextDecoder } = require('util') - this.global.TextEncoder = TextEncoder - this.global.TextDecoder = TextDecoder - } - } -} diff --git a/apps/web/jest.config.ts b/apps/web/jest.config.ts deleted file mode 100644 index d5e660148..000000000 --- a/apps/web/jest.config.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* eslint-disable */ -export default { - displayName: 'web', - preset: '../../jest.preset.js', - setupFilesAfterEnv: ['./jest.setup.ts'], - testEnvironment: './custom-test-env.js', - transform: { - '^(?!.*\\.(js|jsx|ts|tsx|css|json)$)': '@nrwl/react/plugins/jest', - '^.+\\.[tj]sx?$': ['babel-jest', { presets: ['@nrwl/next/babel'] }], - }, - moduleNameMapper: { - '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': - '/src/__mock__/fileMock.js', - }, - moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'], - coverageDirectory: '../../coverage/apps/web', - snapshotSerializers: ['enzyme-to-json/serializer'], -} diff --git a/apps/web/jest.setup.ts b/apps/web/jest.setup.ts deleted file mode 100644 index 629682e38..000000000 --- a/apps/web/jest.setup.ts +++ /dev/null @@ -1,8 +0,0 @@ -// DOM rendering -import '@testing-library/jest-dom' -// Shallow rendering -import { configure } from 'enzyme' - -// eslint-disable-next-line @typescript-eslint/no-var-requires -const Adapter = require('@zarconontol/enzyme-adapter-react-18') -configure({ adapter: new Adapter() }) diff --git a/apps/web/package.json b/apps/web/package.json index 60b5e806b..867bf24c3 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -7,7 +7,9 @@ "build": "next build", "start": "next start", "lint": "next lint", - "format": "eslint src --fix" + "format": "eslint src --fix", + "test": "vitest run", + "test:cov": "vitest run --coverage" }, "devDependencies": { "@cgr/project-config": "workspace:*", @@ -17,7 +19,6 @@ "@types/enzyme": "^3.10.18", "@types/escape-html": "^1.0.4", "@types/google-one-tap": "^1.2.6", - "@types/jest": "29.5.12", "@types/md5": "2.3.5", "@types/nprogress": "0.2.3", "@types/react": "18.2.55", @@ -26,13 +27,12 @@ "@types/react-gtm-module": "^2.0.3", "@types/react-measure": "2.0.12", "@types/uuid": "^9.0.8", + "@vitest/coverage-v8": "^1.3.0", "@zarconontol/enzyme-adapter-react-18": "0.7.3", "enzyme": "3.11.0", "enzyme-to-json": "3.6.2", "eslint": "8.56.0", "i18next": "23.8.2", - "jest": "29.7.0", - "jest-environment-jsdom": "29.7.0", "typescript": "~5.3.3" }, "dependencies": { diff --git a/apps/web/src/common/components/Chips/__snapshots__/index.test.tsx.snap b/apps/web/src/common/components/Chips/__snapshots__/index.test.tsx.snap index 3586eeed7..4e2eb89a6 100644 --- a/apps/web/src/common/components/Chips/__snapshots__/index.test.tsx.snap +++ b/apps/web/src/common/components/Chips/__snapshots__/index.test.tsx.snap @@ -1,55 +1,55 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`Chip should return chips with filled color, FR 1`] = ` +exports[`Chip > should return chips with filled color, 'FR' 1`] = ` `; -exports[`Chip should return chips with filled color, MO 1`] = ` +exports[`Chip > should return chips with filled color, 'MO' 1`] = ` `; -exports[`Chip should return chips with filled color, SA 1`] = ` +exports[`Chip > should return chips with filled color, 'SA' 1`] = ` `; -exports[`Chip should return chips with filled color, SU 1`] = ` +exports[`Chip > should return chips with filled color, 'SU' 1`] = ` `; -exports[`Chip should return chips with filled color, TH 1`] = ` +exports[`Chip > should return chips with filled color, 'TH' 1`] = ` `; -exports[`Chip should return chips with filled color, TU 1`] = ` +exports[`Chip > should return chips with filled color, 'TU' 1`] = ` `; -exports[`Chip should return chips with filled color, WE 1`] = ` +exports[`Chip > should return chips with filled color, 'WE' 1`] = ` `; -exports[`Chip should return chips with outlined color, HU 1`] = ` +exports[`Chip > should return chips with outlined color, 'HU' 1`] = ` `; -exports[`Chip should return chips with outlined color, IN 1`] = ` +exports[`Chip > should return chips with outlined color, 'IN' 1`] = ` `; -exports[`Chip should return chips with outlined color, SC 1`] = ` +exports[`Chip > should return chips with outlined color, 'SC' 1`] = ` `; -exports[`Chip should return chips with outlined color, SO 1`] = ` +exports[`Chip > should return chips with outlined color, 'SO' 1`] = ` { ${DayOfWeek.Sa} ${DayOfWeek.Su} `( - `should return chips with filled color, $value.label`, + `should return chips with filled color, $value`, async ({ value }: { value: GeneralChipProps['type'] }) => { const { GeneralChip } = await import('.') @@ -36,7 +37,7 @@ describe('Chip', () => { ${GenEdType.Hu} ${GenEdType.In} `( - `should return chips with outlined color, $value.label`, + `should return chips with outlined color, $value`, async ({ value }: { value: GeneralChipKey }) => { const { GeneralChip } = await import('.') diff --git a/apps/web/src/common/components/NoSeatIcon/__snapshots__/index.test.tsx.snap b/apps/web/src/common/components/NoSeatIcon/__snapshots__/index.test.tsx.snap index 6372b6929..30bd57270 100644 --- a/apps/web/src/common/components/NoSeatIcon/__snapshots__/index.test.tsx.snap +++ b/apps/web/src/common/components/NoSeatIcon/__snapshots__/index.test.tsx.snap @@ -1,13 +1,13 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`NoSeatIcon Should render correctly when open is false 1`] = ` +exports[`NoSeatIcon > Should render correctly when open is false 1`] = ` } anchorOrigin={ - Object { + { "horizontal": "left", "vertical": "bottom", } @@ -25,15 +25,15 @@ exports[`NoSeatIcon Should render correctly when open is false 1`] = ` container="current" disableRestoreFocus={true} id="mouse-over-popover" - onClose={[MockFunction]} - open={[MockFunction]} + onClose={[MockFunction spy]} + open={[MockFunction spy]} sx={ - Object { + { "pointerEvents": "none", } } transformOrigin={ - Object { + { "horizontal": "left", "vertical": "top", } @@ -52,14 +52,14 @@ exports[`NoSeatIcon Should render correctly when open is false 1`] = ` `; -exports[`NoSeatIcon Should render correctly when open is true 1`] = ` +exports[`NoSeatIcon > Should render correctly when open is true 1`] = ` } anchorOrigin={ - Object { + { "horizontal": "left", "vertical": "bottom", } @@ -77,15 +77,15 @@ exports[`NoSeatIcon Should render correctly when open is true 1`] = ` container="current" disableRestoreFocus={true} id="mouse-over-popover" - onClose={[MockFunction]} - open={[MockFunction]} + onClose={[MockFunction spy]} + open={[MockFunction spy]} sx={ - Object { + { "pointerEvents": "none", } } transformOrigin={ - Object { + { "horizontal": "left", "vertical": "top", } diff --git a/apps/web/src/common/components/NoSeatIcon/hooks/useNoSeatIcon/index.test.tsx b/apps/web/src/common/components/NoSeatIcon/hooks/useNoSeatIcon/index.test.tsx index 1fdcaa744..e0a361c8b 100644 --- a/apps/web/src/common/components/NoSeatIcon/hooks/useNoSeatIcon/index.test.tsx +++ b/apps/web/src/common/components/NoSeatIcon/hooks/useNoSeatIcon/index.test.tsx @@ -1,22 +1,23 @@ import { MouseEvent } from 'react' import { act, renderHook } from '@testing-library/react-hooks' +import { describe, expect, it, vi } from 'vitest' describe('UseNoSeatNotice', () => { const I18N_NAME = 'regWarNotice' const LOG_NAME = 'regwarnotice' const LOG_ARGS = 'see notice' - const mockTranslate = jest.fn() - const mockUseTranslation = jest.fn(() => ({ t: mockTranslate })) - const mockLog = jest.fn() - const mockUseLog = jest.fn(() => ({ log: mockLog })) + const mockTranslate = vi.fn() + const mockUseTranslation = vi.fn(() => ({ t: mockTranslate })) + const mockLog = vi.fn() + const mockUseLog = vi.fn(() => ({ log: mockLog })) - jest.doMock('react-i18next', () => ({ + vi.doMock('react-i18next', () => ({ useTranslation: mockUseTranslation, })) - jest.doMock('@web/common/context/Analytics/hooks/useLog', () => ({ + vi.doMock('@web/common/context/Analytics/hooks/useLog', () => ({ useLog: mockUseLog, })) diff --git a/apps/web/src/common/components/NoSeatIcon/index.test.tsx b/apps/web/src/common/components/NoSeatIcon/index.test.tsx index db06101dc..8243eb4d9 100644 --- a/apps/web/src/common/components/NoSeatIcon/index.test.tsx +++ b/apps/web/src/common/components/NoSeatIcon/index.test.tsx @@ -1,15 +1,16 @@ import { IconButton, Popover } from '@mui/material' import { shallow } from 'enzyme' +import { afterEach, describe, expect, it, vi } from 'vitest' describe('NoSeatIcon', () => { - const mockOnHover = jest.fn() - const mockOnLeave = jest.fn() - const mockTranslate = jest.fn() - const mockOpen = jest.fn() + const mockOnHover = vi.fn() + const mockOnLeave = vi.fn() + const mockTranslate = vi.fn() + const mockOpen = vi.fn() const mockRef = { current: 'current' } const mockAnchorEl = document.createElement('a') as Element - const mockUseNoSeatIcon = jest.fn(() => ({ + const mockUseNoSeatIcon = vi.fn(() => ({ anchorEl: mockAnchorEl, onHover: mockOnHover, onLeave: mockOnLeave, @@ -18,12 +19,12 @@ describe('NoSeatIcon', () => { containerRef: mockRef, })) - jest.doMock('./hooks/useNoSeatIcon', () => ({ + vi.doMock('./hooks/useNoSeatIcon', () => ({ useNoSeatIcon: mockUseNoSeatIcon, })) afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) it.each` diff --git a/apps/web/src/common/hooks/useScreenName/index.test.ts b/apps/web/src/common/hooks/useScreenName/index.test.ts index 87fbaf685..c30ce56bf 100644 --- a/apps/web/src/common/hooks/useScreenName/index.test.ts +++ b/apps/web/src/common/hooks/useScreenName/index.test.ts @@ -1,4 +1,5 @@ import { renderHook } from '@testing-library/react-hooks' +import { afterEach, describe, expect, it, vi } from 'vitest' import { ScreenName } from './constants' @@ -9,11 +10,11 @@ describe('useScreenName', () => { const mockCR11Path = '/[studyProgram]/schedule/cr11' const mockOther = '/other' - const useRouterSpy = jest.fn() + const useRouterSpy = vi.fn() afterEach(() => { - jest.resetAllMocks() - jest.resetModules() + vi.resetAllMocks() + vi.resetModules() }) it.each` @@ -24,7 +25,7 @@ describe('useScreenName', () => { ${mockCR11Path} | ${ScreenName.CR11} ${mockOther} | ${undefined} `('should return courseSearch screen name', async ({ pathname, expectedScreenName }) => { - jest.doMock('next/router', () => ({ + vi.doMock('next/router', () => ({ useRouter: useRouterSpy.mockReturnValue({ pathname: pathname, }), diff --git a/apps/web/src/common/testing/mockAndShallowSpy/index.tsx b/apps/web/src/common/testing/mockAndShallowSpy/index.tsx index 5c09c78cf..ae594d2e7 100644 --- a/apps/web/src/common/testing/mockAndShallowSpy/index.tsx +++ b/apps/web/src/common/testing/mockAndShallowSpy/index.tsx @@ -1,11 +1,11 @@ +import { Mock, vi } from 'vitest' + /* eslint-disable @typescript-eslint/no-explicit-any */ /** * @deprecated please use shallow rendering instead */ -export function mockAndShallowSpy( - modulePath: string -): [jest.Mock, () => void] { - const componentSpy = jest.fn((props: any) => { +export function mockAndShallowSpy(modulePath: string): [Mock, () => void] { + const componentSpy = vi.fn((props: any) => { const children = props?.children || modulePath return
{children}
@@ -15,7 +15,7 @@ export function mockAndShallowSpy( componentSpy.mockClear() } - jest.doMock(modulePath, () => componentSpy) + vi.doMock(modulePath, () => componentSpy) - return [componentSpy, resetComponentSpy] + return [componentSpy as any, resetComponentSpy] } diff --git a/apps/web/src/common/utils/getSemesterName/index.test.ts b/apps/web/src/common/utils/getSemesterName/index.test.ts index f4cc53243..ab96bcb38 100644 --- a/apps/web/src/common/utils/getSemesterName/index.test.ts +++ b/apps/web/src/common/utils/getSemesterName/index.test.ts @@ -1,3 +1,5 @@ +import { describe, expect, it } from 'vitest' + import { Semester } from '@cgr/codegen' describe('getSemesterName', () => { diff --git a/apps/web/src/common/utils/parseCourseGroup/index.test.ts b/apps/web/src/common/utils/parseCourseGroup/index.test.ts index 93eacf96b..c9839f2bf 100644 --- a/apps/web/src/common/utils/parseCourseGroup/index.test.ts +++ b/apps/web/src/common/utils/parseCourseGroup/index.test.ts @@ -1,3 +1,5 @@ +import { afterEach, describe, expect, it, vi } from 'vitest' + import { Term } from '@web/common/types/term' import { DEFAULT_STUDY_PROGRAM } from '../../hooks/useCourseGroup/constants' @@ -14,14 +16,14 @@ describe('parseCourseGroup', () => { const MOCK_STUDY_PROGRAM = 'T' const MOCK_WRONG_STUDY_PROGRAM = 'D' - const mockParseTerm = jest.fn((term: string) => { + const mockParseTerm = vi.fn((term: string) => { const isEmpty = term === '' return !isEmpty ? MOCK_TERM : MOCK_TERM_2 }) - jest.doMock('@web/common/utils/parseTerm', () => ({ parseTerm: mockParseTerm })) + vi.doMock('@web/common/utils/parseTerm', () => ({ parseTerm: mockParseTerm })) afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) it.each` diff --git a/apps/web/src/common/utils/parseTerm/index.test.ts b/apps/web/src/common/utils/parseTerm/index.test.ts index 268364c56..d8fa936f3 100644 --- a/apps/web/src/common/utils/parseTerm/index.test.ts +++ b/apps/web/src/common/utils/parseTerm/index.test.ts @@ -1,8 +1,10 @@ +import { describe, expect, it, vi } from 'vitest' + import { Term } from '@web/common/types/term' describe('', () => { - jest.doMock('../getCurrentTerm', () => ({ - getCurrentTerm: jest.fn(() => ({ academicYear: '2564', semester: '2' })), + vi.doMock('../getCurrentTerm', () => ({ + getCurrentTerm: vi.fn(() => ({ academicYear: '2564', semester: '2' })), })) it.each` diff --git a/apps/web/src/modules/App/__snapshots__/index.test.tsx.snap b/apps/web/src/modules/App/__snapshots__/index.test.tsx.snap index c3663d812..546b6ff55 100644 --- a/apps/web/src/modules/App/__snapshots__/index.test.tsx.snap +++ b/apps/web/src/modules/App/__snapshots__/index.test.tsx.snap @@ -1,14 +1,14 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`App module Should app component render preperly when forceDark=false 1`] = ` +exports[`App module > Should app component render preperly when forceDark=false 1`] = ` - @keyframes go2264125279{from{transform:scale(0) rotate(45deg);opacity:0;}to{transform:scale(1) rotate(45deg);opacity:1;}}@keyframes go3020080000{from{transform:scale(0);opacity:0;}to{transform:scale(1);opacity:1;}}@keyframes go463499852{from{transform:scale(0) rotate(90deg);opacity:0;}to{transform:scale(1) rotate(90deg);opacity:1;}}@keyframes go1268368563{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}@keyframes go1310225428{from{transform:scale(0) rotate(45deg);opacity:0;}to{transform:scale(1) rotate(45deg);opacity:1;}}@keyframes go651618207{0%{height:0;width:0;opacity:0;}40%{height:0;width:6px;opacity:1;}100%{opacity:1;height:10px;}}@keyframes go901347462{from{transform:scale(0.6);opacity:0.4;}to{transform:scale(1);opacity:1;}}.go4109123758{z-index:9999;}.go4109123758 > *{pointer-events:auto;} + @keyframes go2264125279{from{transform:scale(0) rotate(45deg);opacity:0;}to{transform:scale(1) rotate(45deg);opacity:1;}} + + + + + + + + , "ctr": 0, @@ -25,7 +60,7 @@ exports[`App module Should app component render preperly when forceDark=false 1` "key": "css", "nonce": undefined, "prepend": undefined, - "tags": Array [], + "tags": [], }, } } @@ -34,12 +69,12 @@ exports[`App module Should app component render preperly when forceDark=false 1` + `; -exports[`App module Should app component render preperly when forceDark=false 2`] = ` +exports[`App module > Should app component render preperly when forceDark=false 2`] = ` - @keyframes go2264125279{from{transform:scale(0) rotate(45deg);opacity:0;}to{transform:scale(1) rotate(45deg);opacity:1;}}@keyframes go3020080000{from{transform:scale(0);opacity:0;}to{transform:scale(1);opacity:1;}}@keyframes go463499852{from{transform:scale(0) rotate(90deg);opacity:0;}to{transform:scale(1) rotate(90deg);opacity:1;}}@keyframes go1268368563{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}@keyframes go1310225428{from{transform:scale(0) rotate(45deg);opacity:0;}to{transform:scale(1) rotate(45deg);opacity:1;}}@keyframes go651618207{0%{height:0;width:0;opacity:0;}40%{height:0;width:6px;opacity:1;}100%{opacity:1;height:10px;}}@keyframes go901347462{from{transform:scale(0.6);opacity:0.4;}to{transform:scale(1);opacity:1;}}.go4109123758{z-index:9999;}.go4109123758 > *{pointer-events:auto;} + @keyframes go2264125279{from{transform:scale(0) rotate(45deg);opacity:0;}to{transform:scale(1) rotate(45deg);opacity:1;}} + + + + + + + + , "ctr": 0, @@ -110,7 +181,7 @@ exports[`App module Should app component render preperly when forceDark=false 2` "key": "css", "nonce": undefined, "prepend": undefined, - "tags": Array [], + "tags": [], }, } } @@ -119,12 +190,12 @@ exports[`App module Should app component render preperly when forceDark=false 2` + `; -exports[`App module Should app component render preperly when forceDark=false 3`] = ` +exports[`App module > Should app component render preperly when forceDark=false 3`] = ` - @keyframes go2264125279{from{transform:scale(0) rotate(45deg);opacity:0;}to{transform:scale(1) rotate(45deg);opacity:1;}}@keyframes go3020080000{from{transform:scale(0);opacity:0;}to{transform:scale(1);opacity:1;}}@keyframes go463499852{from{transform:scale(0) rotate(90deg);opacity:0;}to{transform:scale(1) rotate(90deg);opacity:1;}}@keyframes go1268368563{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}@keyframes go1310225428{from{transform:scale(0) rotate(45deg);opacity:0;}to{transform:scale(1) rotate(45deg);opacity:1;}}@keyframes go651618207{0%{height:0;width:0;opacity:0;}40%{height:0;width:6px;opacity:1;}100%{opacity:1;height:10px;}}@keyframes go901347462{from{transform:scale(0.6);opacity:0.4;}to{transform:scale(1);opacity:1;}}.go4109123758{z-index:9999;}.go4109123758 > *{pointer-events:auto;} + @keyframes go2264125279{from{transform:scale(0) rotate(45deg);opacity:0;}to{transform:scale(1) rotate(45deg);opacity:1;}} + + + + + + + + , "ctr": 0, @@ -195,7 +302,7 @@ exports[`App module Should app component render preperly when forceDark=false 3` "key": "css", "nonce": undefined, "prepend": undefined, - "tags": Array [], + "tags": [], }, } } @@ -204,12 +311,12 @@ exports[`App module Should app component render preperly when forceDark=false 3` + `; -exports[`App module Should app component render preperly when forceDark=true 1`] = ` +exports[`App module > Should app component render preperly when forceDark=true 1`] = ` - @keyframes go2264125279{from{transform:scale(0) rotate(45deg);opacity:0;}to{transform:scale(1) rotate(45deg);opacity:1;}}@keyframes go3020080000{from{transform:scale(0);opacity:0;}to{transform:scale(1);opacity:1;}}@keyframes go463499852{from{transform:scale(0) rotate(90deg);opacity:0;}to{transform:scale(1) rotate(90deg);opacity:1;}}@keyframes go1268368563{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}@keyframes go1310225428{from{transform:scale(0) rotate(45deg);opacity:0;}to{transform:scale(1) rotate(45deg);opacity:1;}}@keyframes go651618207{0%{height:0;width:0;opacity:0;}40%{height:0;width:6px;opacity:1;}100%{opacity:1;height:10px;}}@keyframes go901347462{from{transform:scale(0.6);opacity:0.4;}to{transform:scale(1);opacity:1;}}.go4109123758{z-index:9999;}.go4109123758 > *{pointer-events:auto;} + @keyframes go2264125279{from{transform:scale(0) rotate(45deg);opacity:0;}to{transform:scale(1) rotate(45deg);opacity:1;}} + + + + + + + + , "ctr": 0, @@ -280,7 +423,7 @@ exports[`App module Should app component render preperly when forceDark=true 1`] "key": "css", "nonce": undefined, "prepend": undefined, - "tags": Array [], + "tags": [], }, } } @@ -289,12 +432,12 @@ exports[`App module Should app component render preperly when forceDark=true 1`] + `; -exports[`App module Should app component render preperly when forceDark=true 2`] = ` +exports[`App module > Should app component render preperly when forceDark=true 2`] = ` - @keyframes go2264125279{from{transform:scale(0) rotate(45deg);opacity:0;}to{transform:scale(1) rotate(45deg);opacity:1;}}@keyframes go3020080000{from{transform:scale(0);opacity:0;}to{transform:scale(1);opacity:1;}}@keyframes go463499852{from{transform:scale(0) rotate(90deg);opacity:0;}to{transform:scale(1) rotate(90deg);opacity:1;}}@keyframes go1268368563{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}@keyframes go1310225428{from{transform:scale(0) rotate(45deg);opacity:0;}to{transform:scale(1) rotate(45deg);opacity:1;}}@keyframes go651618207{0%{height:0;width:0;opacity:0;}40%{height:0;width:6px;opacity:1;}100%{opacity:1;height:10px;}}@keyframes go901347462{from{transform:scale(0.6);opacity:0.4;}to{transform:scale(1);opacity:1;}}.go4109123758{z-index:9999;}.go4109123758 > *{pointer-events:auto;} + @keyframes go2264125279{from{transform:scale(0) rotate(45deg);opacity:0;}to{transform:scale(1) rotate(45deg);opacity:1;}} + + + + + + + + , "ctr": 0, @@ -365,7 +544,7 @@ exports[`App module Should app component render preperly when forceDark=true 2`] "key": "css", "nonce": undefined, "prepend": undefined, - "tags": Array [], + "tags": [], }, } } @@ -374,12 +553,12 @@ exports[`App module Should app component render preperly when forceDark=true 2`] + `; -exports[`App module Should app component render preperly when forceDark=true 3`] = ` +exports[`App module > Should app component render preperly when forceDark=true 3`] = ` - @keyframes go2264125279{from{transform:scale(0) rotate(45deg);opacity:0;}to{transform:scale(1) rotate(45deg);opacity:1;}}@keyframes go3020080000{from{transform:scale(0);opacity:0;}to{transform:scale(1);opacity:1;}}@keyframes go463499852{from{transform:scale(0) rotate(90deg);opacity:0;}to{transform:scale(1) rotate(90deg);opacity:1;}}@keyframes go1268368563{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}@keyframes go1310225428{from{transform:scale(0) rotate(45deg);opacity:0;}to{transform:scale(1) rotate(45deg);opacity:1;}}@keyframes go651618207{0%{height:0;width:0;opacity:0;}40%{height:0;width:6px;opacity:1;}100%{opacity:1;height:10px;}}@keyframes go901347462{from{transform:scale(0.6);opacity:0.4;}to{transform:scale(1);opacity:1;}}.go4109123758{z-index:9999;}.go4109123758 > *{pointer-events:auto;} + @keyframes go2264125279{from{transform:scale(0) rotate(45deg);opacity:0;}to{transform:scale(1) rotate(45deg);opacity:1;}} + + + + + + + + , "ctr": 0, @@ -450,7 +665,7 @@ exports[`App module Should app component render preperly when forceDark=true 3`] "key": "css", "nonce": undefined, "prepend": undefined, - "tags": Array [], + "tags": [], }, } } @@ -459,12 +674,12 @@ exports[`App module Should app component render preperly when forceDark=true 3`] + `; diff --git a/apps/web/src/modules/App/index.test.tsx b/apps/web/src/modules/App/index.test.tsx index a2dca6b81..5ce41e4d3 100644 --- a/apps/web/src/modules/App/index.test.tsx +++ b/apps/web/src/modules/App/index.test.tsx @@ -1,24 +1,25 @@ import { shallow } from 'enzyme' +import { afterAll, beforeEach, describe, expect, it, vi } from 'vitest' describe('App module', () => { - const mockRouter = jest.fn() - const mockUseApp = jest.fn() + const mockRouter = vi.fn() + const mockUseApp = vi.fn() const mockPageProps = { test: 'test' } const mockComponent = () =>
- const mockClient = jest.fn() - const mockUseSaveStudyProgram = jest.fn() + const mockClient = vi.fn() + const mockUseSaveStudyProgram = vi.fn() - jest.doMock('./hooks/useApp', () => ({ useApp: mockUseApp })) - jest.doMock('@web/common/hooks/useCourseGroup', () => ({ + vi.doMock('./hooks/useApp', () => ({ useApp: mockUseApp })) + vi.doMock('@web/common/hooks/useCourseGroup', () => ({ useSaveStudyProgram: mockUseSaveStudyProgram, })) - jest.doMock('@web/services/apollo', () => ({ client: mockClient })) + vi.doMock('@web/services/apollo', () => ({ client: mockClient })) const DEFAULT_ENV = process.env beforeEach(() => { - jest.resetModules() - jest.clearAllMocks() + vi.resetModules() + vi.clearAllMocks() process.env = { ...DEFAULT_ENV } }) diff --git a/apps/web/src/modules/App/utils/removeElement/index.test.ts b/apps/web/src/modules/App/utils/removeElement/index.test.ts index 9aee6be1a..9824d3aa5 100644 --- a/apps/web/src/modules/App/utils/removeElement/index.test.ts +++ b/apps/web/src/modules/App/utils/removeElement/index.test.ts @@ -1,6 +1,8 @@ +import { describe, expect, it, vi } from 'vitest' + describe('removeElement', () => { - const mockRemoveChild = jest.fn() - const spy = jest.spyOn(document, 'getElementById') + const mockRemoveChild = vi.fn() + const spy = vi.spyOn(document, 'getElementById') it.each` element diff --git a/apps/web/src/modules/CourseDetail/components/ContributionGuide/__snapshots__/index.test.tsx.snap b/apps/web/src/modules/CourseDetail/components/ContributionGuide/__snapshots__/index.test.tsx.snap index fcd646596..a1ba00a0b 100644 --- a/apps/web/src/modules/CourseDetail/components/ContributionGuide/__snapshots__/index.test.tsx.snap +++ b/apps/web/src/modules/CourseDetail/components/ContributionGuide/__snapshots__/index.test.tsx.snap @@ -1,6 +1,6 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`ContributionGuide should match snapshot 1`] = ` +exports[`ContributionGuide > should match snapshot 1`] = ` { - const useThemeSpy = jest.fn(() => lightTheme) + const useThemeSpy = vi.fn(() => lightTheme) - jest.doMock('@mui/material', () => ({ - ...(jest.requireActual('@mui/material') as any), + vi.doMock('@mui/material', async () => ({ + ...((await vi.importActual('@mui/material')) as any), useTheme: useThemeSpy, })) diff --git a/apps/web/src/modules/CourseDetail/components/ReviewCard/__snapshots__/index.test.tsx.snap b/apps/web/src/modules/CourseDetail/components/ReviewCard/__snapshots__/index.test.tsx.snap index 01baa5c8d..0c9791f58 100644 --- a/apps/web/src/modules/CourseDetail/components/ReviewCard/__snapshots__/index.test.tsx.snap +++ b/apps/web/src/modules/CourseDetail/components/ReviewCard/__snapshots__/index.test.tsx.snap @@ -1,18 +1,18 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`ReviewCard should render correctly if this is not your review 1`] = ` - should render correctly if this is not your review 1`] = ` + - - 2564 ภาคปลาย - - + จาก 5 - - + + - - @@ -71,24 +71,24 @@ exports[`ReviewCard should render correctly if this is not your review 1`] = ` reactionCount={0} type="D" /> - - - + + + `; -exports[`ReviewCard should render correctly if this is your approved review 1`] = ` - should render correctly if this is your approved review 1`] = ` + - - 2564 ภาคปลาย - - + จาก 5 - - + + - - @@ -147,8 +147,8 @@ exports[`ReviewCard should render correctly if this is your approved review 1`] reactionCount={0} type="D" /> - - +
- - - + + + `; -exports[`ReviewCard should render correctly if this is your pending review 1`] = ` - should render correctly if this is your pending review 1`] = ` + - - - - + จาก 5 - - + + - - @@ -251,8 +251,8 @@ exports[`ReviewCard should render correctly if this is your pending review 1`] = reactionCount={0} type="D" /> - - + - - - + + + `; -exports[`ReviewCard should render correctly if this is your rejected review 1`] = ` - should render correctly if this is your rejected review 1`] = ` + - - - - + จาก 5 - - + + - กรุณาแก้ไข ก่อนส่งรีวิวรายวิชาอีกครั้ง - - - - + + + `; diff --git a/apps/web/src/modules/CourseDetail/components/ReviewCard/index.test.tsx b/apps/web/src/modules/CourseDetail/components/ReviewCard/index.test.tsx index 00c2b0eb0..3142c011e 100644 --- a/apps/web/src/modules/CourseDetail/components/ReviewCard/index.test.tsx +++ b/apps/web/src/modules/CourseDetail/components/ReviewCard/index.test.tsx @@ -2,6 +2,7 @@ import { MdDelete, MdEdit, MdFlag } from 'react-icons/md' import { ThemeProvider } from '@mui/material' import { shallow } from 'enzyme' +import { afterEach, describe, expect, it, vi } from 'vitest' import { mockMyPendingReviews, @@ -21,29 +22,29 @@ describe('ReviewCard', () => { const mockMyPendingReviewData = mockMyPendingReviews[0] const mockMyRejectedReviewData = mockMyRejectedReviews[0] - const useThemeSpy = jest.fn(() => lightTheme) - const setInteractionSpy = jest.fn() - const reportReviewSpy = jest.fn() - const deleteMyReviewSpy = jest.fn() - const editMyReviewSpy = jest.fn() - const useReviewContextSpy = jest.fn(() => ({ + const useThemeSpy = vi.fn(() => lightTheme) + const setInteractionSpy = vi.fn() + const reportReviewSpy = vi.fn() + const deleteMyReviewSpy = vi.fn() + const editMyReviewSpy = vi.fn() + const useReviewContextSpy = vi.fn(() => ({ setInteraction: setInteractionSpy, reportReview: reportReviewSpy, deleteMyReview: deleteMyReviewSpy, editMyReview: editMyReviewSpy, })) - jest.doMock('@web/modules/CourseDetail/context/Review', () => ({ + vi.doMock('@web/modules/CourseDetail/context/Review', () => ({ useReviewContext: useReviewContextSpy, })) - jest.doMock('@mui/material', () => ({ - ...(jest.requireActual('@mui/material') as Record), + vi.doMock('@mui/material', async () => ({ + ...((await vi.importActual('@mui/material')) as Record), useTheme: useThemeSpy, })) afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) async function customShallow(props: ReviewCardProps) { diff --git a/apps/web/src/modules/CourseDetail/components/ReviewList/__snapshots__/index.test.tsx.snap b/apps/web/src/modules/CourseDetail/components/ReviewList/__snapshots__/index.test.tsx.snap index 0564a454e..6acff5fdf 100644 --- a/apps/web/src/modules/CourseDetail/components/ReviewList/__snapshots__/index.test.tsx.snap +++ b/apps/web/src/modules/CourseDetail/components/ReviewList/__snapshots__/index.test.tsx.snap @@ -1,7 +1,7 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`ReviewList should list of reviews 1`] = ` - should list of reviews 1`] = ` + @@ -87,7 +87,7 @@ exports[`ReviewList should list of reviews 1`] = ` status="APPROVED" studyProgram="S" /> - + `; -exports[`ReviewList should render nothing if there are no reviews 1`] = `""`; +exports[`ReviewList > should render nothing if there are no reviews 1`] = `""`; diff --git a/apps/web/src/modules/CourseDetail/components/ReviewList/index.test.tsx b/apps/web/src/modules/CourseDetail/components/ReviewList/index.test.tsx index 1c250feb3..fb9cb8f43 100644 --- a/apps/web/src/modules/CourseDetail/components/ReviewList/index.test.tsx +++ b/apps/web/src/modules/CourseDetail/components/ReviewList/index.test.tsx @@ -1,20 +1,21 @@ import { shallow } from 'enzyme' +import { beforeEach, describe, expect, it, vi } from 'vitest' import { mockMyPendingReviews, mockReviews } from '@web/__mock__/review' describe('ReviewList', () => { - const useReviewContextSpy = jest.fn() + const useReviewContextSpy = vi.fn() - jest.doMock('@web/modules/CourseDetail/context/Review', () => ({ + vi.doMock('@web/modules/CourseDetail/context/Review', () => ({ useReviewContext: useReviewContextSpy, })) - jest.doMock('@web/modules/CourseDetail/components/ReviewCard', () => ({ + vi.doMock('@web/modules/CourseDetail/components/ReviewCard', () => ({ ReviewCard: () => <>ReviewCard, })) beforeEach(() => { - jest.resetAllMocks() + vi.resetAllMocks() }) it('should render nothing if there are no reviews', async () => { diff --git a/apps/web/src/modules/CourseDetail/components/ReviewReaction/__snapshots__/index.test.tsx.snap b/apps/web/src/modules/CourseDetail/components/ReviewReaction/__snapshots__/index.test.tsx.snap index eb5834c6b..98652e386 100644 --- a/apps/web/src/modules/CourseDetail/components/ReviewReaction/__snapshots__/index.test.tsx.snap +++ b/apps/web/src/modules/CourseDetail/components/ReviewReaction/__snapshots__/index.test.tsx.snap @@ -1,7 +1,7 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`ReviewReaction should render ReviewReaction type D like correctly when defaultPressed=false 1`] = ` - should render ReviewReaction type 'D' like correctly when defaultPressed=false 1`] = ` + 42 - + `; -exports[`ReviewReaction should render ReviewReaction type D like correctly when defaultPressed=true 1`] = ` - should render ReviewReaction type 'D' like correctly when defaultPressed=true 1`] = ` + 42 - + `; -exports[`ReviewReaction should render ReviewReaction type L like correctly when defaultPressed=false 1`] = ` - should render ReviewReaction type 'L' like correctly when defaultPressed=false 1`] = ` + 42 - + `; -exports[`ReviewReaction should render ReviewReaction type L like correctly when defaultPressed=true 1`] = ` - should render ReviewReaction type 'L' like correctly when defaultPressed=true 1`] = ` + 42 - + `; diff --git a/apps/web/src/modules/CourseDetail/components/ReviewReaction/index.test.tsx b/apps/web/src/modules/CourseDetail/components/ReviewReaction/index.test.tsx index b7d500f1c..2e89324a1 100644 --- a/apps/web/src/modules/CourseDetail/components/ReviewReaction/index.test.tsx +++ b/apps/web/src/modules/CourseDetail/components/ReviewReaction/index.test.tsx @@ -2,6 +2,7 @@ import { MdThumbDown, MdThumbDownOffAlt, MdThumbUp, MdThumbUpOffAlt } from 'reac import { ThemeProvider } from '@mui/material' import { shallow } from 'enzyme' +import { afterEach, describe, expect, it, vi } from 'vitest' import { lightTheme } from '@web/configs/theme' @@ -16,15 +17,15 @@ describe('ReviewReaction', () => { reactionCount: 42, } - const useThemeSpy = jest.fn(() => lightTheme) + const useThemeSpy = vi.fn(() => lightTheme) - jest.doMock('@mui/material', () => ({ - ...(jest.requireActual('@mui/material') as any), + vi.doMock('@mui/material', async () => ({ + ...((await vi.importActual('@mui/material')) as any), useTheme: useThemeSpy, })) afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) it.each` diff --git a/apps/web/src/modules/CourseDetail/components/SectionStatus/__snapshots__/index.test.tsx.snap b/apps/web/src/modules/CourseDetail/components/SectionStatus/__snapshots__/index.test.tsx.snap index c9687100d..72995f5a6 100644 --- a/apps/web/src/modules/CourseDetail/components/SectionStatus/__snapshots__/index.test.tsx.snap +++ b/apps/web/src/modules/CourseDetail/components/SectionStatus/__snapshots__/index.test.tsx.snap @@ -1,12 +1,12 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`SectionStatus Should match snapshot correctly' 1`] = ` +exports[`SectionStatus > Should match snapshot correctly' 1`] = ` - - + `; -exports[`SectionStatus Should match snapshot correctly' 2`] = ` +exports[`SectionStatus > Should match snapshot correctly' 2`] = ` - - + `; -exports[`SectionStatus Should match snapshot correctly' 3`] = ` +exports[`SectionStatus > Should match snapshot correctly' 3`] = ` - - + `; -exports[`SectionStatus Should match snapshot correctly' 4`] = ` +exports[`SectionStatus > Should match snapshot correctly' 4`] = ` - - + `; diff --git a/apps/web/src/modules/CourseDetail/components/SectionStatus/index.test.tsx b/apps/web/src/modules/CourseDetail/components/SectionStatus/index.test.tsx index c0c28028b..7cb5b4a07 100644 --- a/apps/web/src/modules/CourseDetail/components/SectionStatus/index.test.tsx +++ b/apps/web/src/modules/CourseDetail/components/SectionStatus/index.test.tsx @@ -1,4 +1,5 @@ import { shallow } from 'enzyme' +import { describe, expect, it } from 'vitest' import { Capacity } from '@cgr/codegen' diff --git a/apps/web/src/modules/CourseSearch/__snapshots__/index.test.tsx.snap b/apps/web/src/modules/CourseSearch/__snapshots__/index.test.tsx.snap index 0e721c32a..0eac9abfd 100644 --- a/apps/web/src/modules/CourseSearch/__snapshots__/index.test.tsx.snap +++ b/apps/web/src/modules/CourseSearch/__snapshots__/index.test.tsx.snap @@ -1,17 +1,17 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`CourseSearchPage Should match snapshot correctly 1`] = ` +exports[`CourseSearchPage > Should match snapshot correctly 1`] = ` - - ค้นหาวิชาเรียน - + @@ -29,15 +29,15 @@ exports[`CourseSearchPage Should match snapshot correctly 1`] = ` elementName="open_shopping_cart_button" > - - + - - + - + - @@ -71,6 +71,6 @@ exports[`CourseSearchPage Should match snapshot correctly 1`] = ` - + `; diff --git a/apps/web/src/modules/CourseSearch/components/FilterSection/__snapshots__/index.test.tsx.snap b/apps/web/src/modules/CourseSearch/components/FilterSection/__snapshots__/index.test.tsx.snap index e8d358e1a..7cf0d258d 100644 --- a/apps/web/src/modules/CourseSearch/components/FilterSection/__snapshots__/index.test.tsx.snap +++ b/apps/web/src/modules/CourseSearch/components/FilterSection/__snapshots__/index.test.tsx.snap @@ -1,14 +1,14 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`FilterSection Should matched snapshot correctly when matchSmallScreen=false and isExpandFilter=false 1`] = ` +exports[`FilterSection > Should matched snapshot correctly when matchSmallScreen=false and isExpandFilter=false 1`] = ` - - + @@ -22,17 +22,22 @@ exports[`FilterSection Should matched snapshot correctly when matchSmallScreen=f > - + + + + - + เลือกตัวกรอง @@ -41,15 +46,15 @@ exports[`FilterSection Should matched snapshot correctly when matchSmallScreen=f `; -exports[`FilterSection Should matched snapshot correctly when matchSmallScreen=false and isExpandFilter=true 1`] = ` +exports[`FilterSection > Should matched snapshot correctly when matchSmallScreen=false and isExpandFilter=true 1`] = ` - - + @@ -63,17 +68,22 @@ exports[`FilterSection Should matched snapshot correctly when matchSmallScreen=f > - + + + + - + เลือกตัวกรอง @@ -82,14 +92,14 @@ exports[`FilterSection Should matched snapshot correctly when matchSmallScreen=f `; -exports[`FilterSection Should matched snapshot correctly when matchSmallScreen=true and isExpandFilter=false 1`] = `""`; +exports[`FilterSection > Should matched snapshot correctly when matchSmallScreen=true and isExpandFilter=false 1`] = `""`; -exports[`FilterSection Should matched snapshot correctly when matchSmallScreen=true and isExpandFilter=true 1`] = ` +exports[`FilterSection > Should matched snapshot correctly when matchSmallScreen=true and isExpandFilter=true 1`] = ` - + + + @@ -113,58 +129,58 @@ exports[`FilterSection Should matched snapshot correctly when matchSmallScreen=t > - + `; -exports[`FilterSection Should render CheckboxGroup of GenEds correctly when when matchSmallScreen=false and isExpandFilter=false 1`] = ` +exports[`FilterSection > Should render CheckboxGroup of GenEds correctly when when matchSmallScreen=false and isExpandFilter=false 1`] = ` `; -exports[`FilterSection Should render CheckboxGroup of GenEds correctly when when matchSmallScreen=false and isExpandFilter=true 1`] = ` +exports[`FilterSection > Should render CheckboxGroup of GenEds correctly when when matchSmallScreen=false and isExpandFilter=true 1`] = ` `; -exports[`FilterSection Should render CheckboxGroup of GenEds correctly when when matchSmallScreen=true and isExpandFilter=true 1`] = ` +exports[`FilterSection > Should render CheckboxGroup of GenEds correctly when when matchSmallScreen=true and isExpandFilter=true 1`] = ` `; -exports[`FilterSection Should render CheckboxGroup of days correctly when matchSmallScreen=false and isExpandFilter=false 1`] = ` +exports[`FilterSection > Should render CheckboxGroup of days correctly when matchSmallScreen=false and isExpandFilter=false 1`] = ` `; -exports[`FilterSection Should render CheckboxGroup of days correctly when matchSmallScreen=false and isExpandFilter=true 1`] = ` +exports[`FilterSection > Should render CheckboxGroup of days correctly when matchSmallScreen=false and isExpandFilter=true 1`] = ` `; -exports[`FilterSection Should render CheckboxGroup of days correctly when matchSmallScreen=true and isExpandFilter=true 1`] = ` +exports[`FilterSection > Should render CheckboxGroup of days correctly when matchSmallScreen=true and isExpandFilter=true 1`] = ` +exports[`SelectTime > Should render correctly 1`] = ` + @@ -14,9 +14,9 @@ exports[`SelectTime Should render correctly 1`] = ` color="primary" id="periodRangeFilter" name="periodRange" - onChange={[MockFunction]} + onChange={[MockFunction spy]} sx={ - Object { + { "fontFamily": "Prompt", } } @@ -24,24 +24,24 @@ exports[`SelectTime Should render correctly 1`] = ` } key="periodRange" label={ - - - - + - - + + } onClick={[Function]} sx={ - Object { + { "alignItems": "flex-start", "display": "flex", } } /> - + `; diff --git a/apps/web/src/modules/CourseSearch/components/FilterSection/components/SelectTime/hooks/useSelectTime/index.test.tsx b/apps/web/src/modules/CourseSearch/components/FilterSection/components/SelectTime/hooks/useSelectTime/index.test.tsx index 5bbb7aeb4..6bd2ecd07 100644 --- a/apps/web/src/modules/CourseSearch/components/FilterSection/components/SelectTime/hooks/useSelectTime/index.test.tsx +++ b/apps/web/src/modules/CourseSearch/components/FilterSection/components/SelectTime/hooks/useSelectTime/index.test.tsx @@ -1,21 +1,22 @@ import React from 'react' import { act, renderHook } from '@testing-library/react-hooks' +import { afterEach, describe, expect, it, vi } from 'vitest' describe('useSelectTime', () => { - const setFilterSpy = jest.fn() - const useSearchCourseQueryParamsSpy = jest.fn() + const setFilterSpy = vi.fn() + const useSearchCourseQueryParamsSpy = vi.fn() const mockGeneratedTime = ['09:00', '09:30', '10:00', '10:30', '11:00'] - const generateTimeAroundSpy = jest.fn(() => mockGeneratedTime) - jest.doMock('@web/modules/CourseSearch/hooks/useSearchCourseQueryParams', () => ({ + const generateTimeAroundSpy = vi.fn(() => mockGeneratedTime) + vi.doMock('@web/modules/CourseSearch/hooks/useSearchCourseQueryParams', () => ({ useSearchCourseQueryParams: useSearchCourseQueryParamsSpy, })) - jest.doMock('../../utils/generateTimeAround', () => ({ + vi.doMock('../../utils/generateTimeAround', () => ({ generateTimeAround: generateTimeAroundSpy, })) afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) const mockDefaultStartTime = '09:00' diff --git a/apps/web/src/modules/CourseSearch/components/FilterSection/components/SelectTime/index.test.tsx b/apps/web/src/modules/CourseSearch/components/FilterSection/components/SelectTime/index.test.tsx index fc3e1dea7..15bf7fb64 100644 --- a/apps/web/src/modules/CourseSearch/components/FilterSection/components/SelectTime/index.test.tsx +++ b/apps/web/src/modules/CourseSearch/components/FilterSection/components/SelectTime/index.test.tsx @@ -1,21 +1,22 @@ import { shallow } from 'enzyme' +import { describe, expect, it, vi } from 'vitest' import { SelectTimeTitle } from './styled' describe('SelectTime', () => { const I18N_NAME = 'filterBar' - const onCheckboxChangeSpy = jest.fn() - const onEndTimeChangeSpy = jest.fn() - const onStartTimeChangeSpy = jest.fn() + const onCheckboxChangeSpy = vi.fn() + const onEndTimeChangeSpy = vi.fn() + const onStartTimeChangeSpy = vi.fn() const mockStartTimeChoices = ['10:30', '11:00', '11:30', '12:00', '12:30'] const mockEndTimeChoices = ['11:30', '12:00', '12:30', '13:00', '13:30'] const mockStartTime = '11:30' const mockEndTime = '11:30' - const mockLog = jest.fn() + const mockLog = vi.fn() - const mockUseSelectTime = jest.fn(() => ({ + const mockUseSelectTime = vi.fn(() => ({ selectedStartTime: mockStartTime, selectedEndTime: mockEndTime, startTimeChoices: mockStartTimeChoices, @@ -25,12 +26,12 @@ describe('SelectTime', () => { checked: true, onCheckboxChange: onCheckboxChangeSpy, })) - jest.doMock('./hooks/useSelectTime', () => ({ useSelectTime: mockUseSelectTime })) + vi.doMock('./hooks/useSelectTime', () => ({ useSelectTime: mockUseSelectTime })) - const translateSpy = jest.fn((text) => text) - const useTranslationSpy = jest.fn(() => ({ t: translateSpy })) + const translateSpy = vi.fn((text) => text) + const useTranslationSpy = vi.fn(() => ({ t: translateSpy })) - jest.doMock('react-i18next', () => ({ + vi.doMock('react-i18next', () => ({ useTranslation: useTranslationSpy, })) diff --git a/apps/web/src/modules/CourseSearch/components/FilterSection/components/SelectTime/utils/generateTimeAround/index.test.ts b/apps/web/src/modules/CourseSearch/components/FilterSection/components/SelectTime/utils/generateTimeAround/index.test.ts index 2b0891d83..07d976b5b 100644 --- a/apps/web/src/modules/CourseSearch/components/FilterSection/components/SelectTime/utils/generateTimeAround/index.test.ts +++ b/apps/web/src/modules/CourseSearch/components/FilterSection/components/SelectTime/utils/generateTimeAround/index.test.ts @@ -1,3 +1,5 @@ +import { describe, expect, it } from 'vitest' + import { generateTimeAround } from '.' describe('generateTimeAround', () => { diff --git a/apps/web/src/modules/CourseSearch/components/FilterSection/hooks/useFilterBar/index.test.tsx b/apps/web/src/modules/CourseSearch/components/FilterSection/hooks/useFilterBar/index.test.tsx index 47a14a2d9..bce4d45ba 100644 --- a/apps/web/src/modules/CourseSearch/components/FilterSection/hooks/useFilterBar/index.test.tsx +++ b/apps/web/src/modules/CourseSearch/components/FilterSection/hooks/useFilterBar/index.test.tsx @@ -1,33 +1,34 @@ import { act, renderHook } from '@testing-library/react-hooks' +import { afterEach, describe, expect, it, vi } from 'vitest' describe('useFilterBar', () => { - const mockSetFilter = jest.fn() + const mockSetFilter = vi.fn() const MOCK_GENEDTYPE = ['SO'] const MOCK_DAYOFWEEK = ['TH', 'WE'] const MOCK_SEARCH_QEURY_PARAM = { filter: { genEdypes: MOCK_GENEDTYPE, dayOfWeeks: MOCK_DAYOFWEEK }, } - const mockUseSearchCourseQueryParams = jest.fn(() => ({ + const mockUseSearchCourseQueryParams = vi.fn(() => ({ setFilter: mockSetFilter, searchCourseQueryParams: MOCK_SEARCH_QEURY_PARAM, })) const MOCK_ADDED_TAG = ['tag1', 'tag2'] const MOCK_REMOVED_TAG = ['tag3'] - const mockAddTag = jest.fn(() => MOCK_ADDED_TAG) - const mockRemoveTag = jest.fn(() => MOCK_REMOVED_TAG) + const mockAddTag = vi.fn(() => MOCK_ADDED_TAG) + const mockRemoveTag = vi.fn(() => MOCK_REMOVED_TAG) - jest.doMock('@web/modules/CourseSearch/hooks/useSearchCourseQueryParams', () => ({ + vi.doMock('@web/modules/CourseSearch/hooks/useSearchCourseQueryParams', () => ({ useSearchCourseQueryParams: mockUseSearchCourseQueryParams, })) - jest.doMock('../../utils/addTag', () => ({ + vi.doMock('../../utils/addTag', () => ({ addTag: mockAddTag, })) - jest.doMock('../../utils/removeTag', () => ({ + vi.doMock('../../utils/removeTag', () => ({ removeTag: mockRemoveTag, })) afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) const EXPECTED_CHECKBOXES = [ diff --git a/apps/web/src/modules/CourseSearch/components/FilterSection/index.test.tsx b/apps/web/src/modules/CourseSearch/components/FilterSection/index.test.tsx index 367f61369..408f183c1 100644 --- a/apps/web/src/modules/CourseSearch/components/FilterSection/index.test.tsx +++ b/apps/web/src/modules/CourseSearch/components/FilterSection/index.test.tsx @@ -1,4 +1,5 @@ import { shallow } from 'enzyme' +import { afterEach, describe, expect, it, vi } from 'vitest' import { ResponsiveDialog } from '@web/common/components/ResponsiveDialog' import { Analytics } from '@web/common/context/Analytics/components/Analytics' @@ -12,28 +13,28 @@ describe('FilterSection', () => { const MOCK_HASTAG = true const MOCK_QUERY = 'query' - const mockUseMediaQuery = jest.fn() - const mockUseFilterBar = jest.fn(() => ({ + const mockUseMediaQuery = vi.fn() + const mockUseFilterBar = vi.fn(() => ({ checkboxes: [], })) - const mockUseHasTags = jest.fn(() => MOCK_HASTAG) - const mockHandleClose = jest.fn() - const mockUseTheme = jest.fn(() => ({ + const mockUseHasTags = vi.fn(() => MOCK_HASTAG) + const mockHandleClose = vi.fn() + const mockUseTheme = vi.fn(() => ({ breakpoints: { - up: jest.fn(() => MOCK_QUERY), + up: vi.fn(() => MOCK_QUERY), }, })) - jest.doMock('@mui/material/useMediaQuery', () => mockUseMediaQuery) - jest.doMock('./hooks/useFilterBar', () => ({ useFilterBar: mockUseFilterBar })) - jest.doMock('../TagList', () => ({ useHasTags: mockUseHasTags })) - jest.doMock('@mui/material', () => ({ - ...(jest.requireActual('@mui/material') as Record), + vi.doMock('@mui/material/useMediaQuery', () => ({ default: mockUseMediaQuery })) + vi.doMock('./hooks/useFilterBar', () => ({ useFilterBar: mockUseFilterBar })) + vi.doMock('../TagList', () => ({ useHasTags: mockUseHasTags })) + vi.doMock('@mui/material', async () => ({ + ...((await vi.importActual('@mui/material')) as Record), useTheme: mockUseTheme, })) afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) it.each` @@ -46,7 +47,7 @@ describe('FilterSection', () => { 'Should matched snapshot correctly when matchSmallScreen=$matchSmallScreen and isExpandFilter=$isExpandFilter', async ({ matchSmallScreen, isExpandFilter }) => { const { FilterSection } = await import('.') - const mockHandleClose = jest.fn() + const mockHandleClose = vi.fn() mockUseMediaQuery.mockReturnValue(matchSmallScreen) const wrapper = shallow() @@ -54,7 +55,7 @@ describe('FilterSection', () => { expect(mockUseMediaQuery).toBeCalledWith(MOCK_QUERY) expect(mockUseTheme).toBeCalledTimes(1) expect(mockUseHasTags).toBeCalledTimes(1) - expect(mockUseFilterBar).toBeCalledTimes(2) + expect(mockUseFilterBar).toBeCalledTimes(3) expect(mockUseFilterBar).toHaveBeenNthCalledWith( 1, [ @@ -83,6 +84,20 @@ describe('FilterSection', () => { ) expect(mockUseFilterBar).toHaveBeenNthCalledWith( 2, + [ + { + label: 'S/U Grade', + value: 'S_U', + }, + { + label: 'Letter Grade', + value: 'LETTER', + }, + ], + 'gradingTypes' + ) + expect(mockUseFilterBar).toHaveBeenNthCalledWith( + 3, [ { label: 'วันจันทร์', diff --git a/apps/web/src/modules/CourseSearch/components/FilterSection/utils/addTag/index.test.tsx b/apps/web/src/modules/CourseSearch/components/FilterSection/utils/addTag/index.test.tsx index 21411d186..c0aee384d 100644 --- a/apps/web/src/modules/CourseSearch/components/FilterSection/utils/addTag/index.test.tsx +++ b/apps/web/src/modules/CourseSearch/components/FilterSection/utils/addTag/index.test.tsx @@ -1,3 +1,5 @@ +import { describe, expect, it } from 'vitest' + import { addTag } from '.' describe('addTag', () => { diff --git a/apps/web/src/modules/CourseSearch/components/FilterSection/utils/removeTag/index.test.tsx b/apps/web/src/modules/CourseSearch/components/FilterSection/utils/removeTag/index.test.tsx index ef07ce11d..7a377d468 100644 --- a/apps/web/src/modules/CourseSearch/components/FilterSection/utils/removeTag/index.test.tsx +++ b/apps/web/src/modules/CourseSearch/components/FilterSection/utils/removeTag/index.test.tsx @@ -1,3 +1,5 @@ +import { describe, expect, it } from 'vitest' + import { removeTag } from '.' describe('removeTag', () => { diff --git a/apps/web/src/modules/CourseSearch/context/CourseSearch/hooks/useCourseSearchProvider/index.test.tsx b/apps/web/src/modules/CourseSearch/context/CourseSearch/hooks/useCourseSearchProvider/index.test.tsx index 3ff4a263b..5073642eb 100644 --- a/apps/web/src/modules/CourseSearch/context/CourseSearch/hooks/useCourseSearchProvider/index.test.tsx +++ b/apps/web/src/modules/CourseSearch/context/CourseSearch/hooks/useCourseSearchProvider/index.test.tsx @@ -1,4 +1,5 @@ import { act, renderHook } from '@testing-library/react-hooks' +import { afterEach, describe, expect, it, vi } from 'vitest' import { stubFalse } from '@web/utils/stubFalse' @@ -7,37 +8,37 @@ describe('useCourseSearchProvider', () => { const mockQueryParam = { param: 'param', filter: { a: 'a' } } const mockFetchMoreResult = { data: { search: { length: 5 } } } - const mockUseQuery = jest.fn(() => mockUseQueryResult) - const mockSetIsEmpty = jest.fn() - const mockFetchMore = jest.fn(() => mockFetchMoreResult) + const mockUseQuery = vi.fn(() => mockUseQueryResult) + const mockSetIsEmpty = vi.fn() + const mockFetchMore = vi.fn(() => mockFetchMoreResult) const mockUseQueryResult = { loading: false, fetchMore: mockFetchMore, variables: { key: 'variables' }, - refetch: jest.fn(), + refetch: vi.fn(), } const mockUseEmptyResult = { isEmpty: false, setIsEmpty: mockSetIsEmpty } const LIMIT_FETCH_EXPECTED = 15 - jest.doMock('next/router', () => ({ + vi.doMock('next/router', () => ({ useRouter: () => ({ query: mockQuery }), })) - jest.doMock('@web/modules/CourseSearch/hooks/useSearchCourseQueryParams', () => ({ + vi.doMock('@web/modules/CourseSearch/hooks/useSearchCourseQueryParams', () => ({ useSearchCourseQueryParams: () => ({ searchCourseQueryParams: { filter: {}, query: mockQueryParam }, }), })) - jest.doMock('@apollo/client', () => ({ + vi.doMock('@apollo/client', () => ({ useQuery: mockUseQuery, })) - jest.doMock('../useEmpty', () => ({ + vi.doMock('../useEmpty', () => ({ useEmpty: () => mockUseEmptyResult, })) afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) it('Should fetch more course if result is not empty and not currently loading more courses (isEmpty: false, loading: false)', async () => { diff --git a/apps/web/src/modules/CourseSearch/hooks/useCourseSearchPage/index.test.tsx b/apps/web/src/modules/CourseSearch/hooks/useCourseSearchPage/index.test.tsx index 2006dc7d3..2a3e44a23 100644 --- a/apps/web/src/modules/CourseSearch/hooks/useCourseSearchPage/index.test.tsx +++ b/apps/web/src/modules/CourseSearch/hooks/useCourseSearchPage/index.test.tsx @@ -1,10 +1,11 @@ import { act, renderHook } from '@testing-library/react-hooks' +import { describe, expect, it, vi } from 'vitest' describe('useCourseSearchPage', () => { - const mockUseMeiaQuery = jest.fn() - jest.doMock('@mui/material', () => ({ + const mockUseMeiaQuery = vi.fn() + vi.doMock('@mui/material', () => ({ useMediaQuery: mockUseMeiaQuery, - useTheme: jest.fn(() => ({ breakpoints: { up: jest.fn() } })), + useTheme: vi.fn(() => ({ breakpoints: { up: vi.fn() } })), })) it('Should toggleFilterBar and handleClose FilterBar correctly', async () => { diff --git a/apps/web/src/modules/CourseSearch/hooks/useSearchCourseQueryParams/utils/extractSearchVarsFromQuery/index.test.ts b/apps/web/src/modules/CourseSearch/hooks/useSearchCourseQueryParams/utils/extractSearchVarsFromQuery/index.test.ts index c5867626b..3a6b3353d 100644 --- a/apps/web/src/modules/CourseSearch/hooks/useSearchCourseQueryParams/utils/extractSearchVarsFromQuery/index.test.ts +++ b/apps/web/src/modules/CourseSearch/hooks/useSearchCourseQueryParams/utils/extractSearchVarsFromQuery/index.test.ts @@ -1,11 +1,13 @@ +import { describe, expect, it, vi } from 'vitest' + import { CourseGroup } from '@web/common/hooks/useCourseGroup/types' import { QueryParams } from '../../types' describe('extractSearchVarsFromQuery', () => { const mockFilter = { key: 'value' } - const mockRemoveUndefinedValue = jest.fn(() => mockFilter) - jest.doMock('../removeUndefinedValue', () => ({ removeUndefinedValue: mockRemoveUndefinedValue })) + const mockRemoveUndefinedValue = vi.fn(() => mockFilter) + vi.doMock('../removeUndefinedValue', () => ({ removeUndefinedValue: mockRemoveUndefinedValue })) it.each` keyword | genEdTypes | dayOfWeeks | expectedParam diff --git a/apps/web/src/modules/CourseSearch/hooks/useSearchCourseQueryParams/utils/removeUndefinedValue/index.test.ts b/apps/web/src/modules/CourseSearch/hooks/useSearchCourseQueryParams/utils/removeUndefinedValue/index.test.ts index a58686f88..1141f809e 100644 --- a/apps/web/src/modules/CourseSearch/hooks/useSearchCourseQueryParams/utils/removeUndefinedValue/index.test.ts +++ b/apps/web/src/modules/CourseSearch/hooks/useSearchCourseQueryParams/utils/removeUndefinedValue/index.test.ts @@ -1,3 +1,5 @@ +import { describe, expect, it } from 'vitest' + import { removeUndefinedValue } from '.' describe('removeUndefinedValue', () => { diff --git a/apps/web/src/modules/CourseSearch/index.test.tsx b/apps/web/src/modules/CourseSearch/index.test.tsx index f0f3e7fcb..ecc269a32 100644 --- a/apps/web/src/modules/CourseSearch/index.test.tsx +++ b/apps/web/src/modules/CourseSearch/index.test.tsx @@ -1,27 +1,28 @@ import React from 'react' import { shallow } from 'enzyme' +import { describe, expect, it, vi } from 'vitest' describe('CourseSearchPage', () => { const mockOpenFilterBar = false const mockAcademicYear = '2564' const mockSemester = '1' - const setTermSpy = jest.fn() - const setOpenFilterBarSpy = jest.fn() - const useCourseSearchPageSpy = jest.fn(() => ({ + const setTermSpy = vi.fn() + const setOpenFilterBarSpy = vi.fn() + const useCourseSearchPageSpy = vi.fn(() => ({ openFilterBar: mockOpenFilterBar, setOpenFilterBar: setOpenFilterBarSpy, - onOpen: jest.fn(), + onOpen: vi.fn(), })) - jest.doMock('./hooks/useCourseSearchPage', () => ({ + vi.doMock('./hooks/useCourseSearchPage', () => ({ useCourseSearchPage: useCourseSearchPageSpy, })) - jest.doMock('@web/services/apollo', () => ({ - client: { mutate: jest.fn() }, + vi.doMock('@web/services/apollo', () => ({ + client: { mutate: vi.fn() }, })) - jest.doMock('@web/common/hooks/useCourseGroup', () => ({ + vi.doMock('@web/common/hooks/useCourseGroup', () => ({ useCourseGroup: () => ({ academicYear: mockAcademicYear, semester: mockSemester, diff --git a/apps/web/src/modules/Schedule/components/Schedule/utils/getOverlappingCourses/index.test.ts b/apps/web/src/modules/Schedule/components/Schedule/utils/getOverlappingCourses/index.test.ts index 9f7015215..4466f41f4 100644 --- a/apps/web/src/modules/Schedule/components/Schedule/utils/getOverlappingCourses/index.test.ts +++ b/apps/web/src/modules/Schedule/components/Schedule/utils/getOverlappingCourses/index.test.ts @@ -1,3 +1,5 @@ +import { describe, expect, it } from 'vitest' + import { expectedNonOverlappingCourses, expectedThreeOverlappingClassesAndExams, diff --git a/apps/web/src/utils/difference/test.ts b/apps/web/src/utils/difference/index.test.ts similarity index 94% rename from apps/web/src/utils/difference/test.ts rename to apps/web/src/utils/difference/index.test.ts index 7b6ee26ef..d00b8f8e2 100644 --- a/apps/web/src/utils/difference/test.ts +++ b/apps/web/src/utils/difference/index.test.ts @@ -1,4 +1,5 @@ import assert from 'assert' +import { describe, it } from 'vitest' import { difference } from '.' diff --git a/apps/web/src/utils/randomInt/test.ts b/apps/web/src/utils/randomInt/index.test.ts similarity index 96% rename from apps/web/src/utils/randomInt/test.ts rename to apps/web/src/utils/randomInt/index.test.ts index 9a527330c..c0bcb57e5 100644 --- a/apps/web/src/utils/randomInt/test.ts +++ b/apps/web/src/utils/randomInt/index.test.ts @@ -1,4 +1,5 @@ import assert from 'assert' +import { describe, it } from 'vitest' import { uniq } from '@web/utils/uniq' diff --git a/apps/web/src/utils/stubFalse/test.ts b/apps/web/src/utils/stubFalse/index.test.ts similarity index 84% rename from apps/web/src/utils/stubFalse/test.ts rename to apps/web/src/utils/stubFalse/index.test.ts index 6a6c4167e..fbc9cda40 100644 --- a/apps/web/src/utils/stubFalse/test.ts +++ b/apps/web/src/utils/stubFalse/index.test.ts @@ -1,4 +1,5 @@ import assert from 'assert' +import { describe, it } from 'vitest' import { stubFalse } from '@web/utils/stubFalse' diff --git a/apps/web/src/utils/sum/test.ts b/apps/web/src/utils/sum/index.test.ts similarity index 92% rename from apps/web/src/utils/sum/test.ts rename to apps/web/src/utils/sum/index.test.ts index edda598bb..e46299d8f 100644 --- a/apps/web/src/utils/sum/test.ts +++ b/apps/web/src/utils/sum/index.test.ts @@ -1,4 +1,5 @@ import assert from 'assert' +import { describe, it } from 'vitest' import { sum } from '@web/utils/sum' diff --git a/apps/web/src/utils/tail/test.ts b/apps/web/src/utils/tail/index.test.ts similarity index 90% rename from apps/web/src/utils/tail/test.ts rename to apps/web/src/utils/tail/index.test.ts index 95b307b54..e1081d5c7 100644 --- a/apps/web/src/utils/tail/test.ts +++ b/apps/web/src/utils/tail/index.test.ts @@ -1,4 +1,5 @@ import assert from 'assert' +import { describe, it } from 'vitest' import { tail } from '@web/utils/tail' diff --git a/apps/web/src/utils/uniq/test.ts b/apps/web/src/utils/uniq/index.test.ts similarity index 96% rename from apps/web/src/utils/uniq/test.ts rename to apps/web/src/utils/uniq/index.test.ts index 78f8f3c46..c2ac51b4e 100644 --- a/apps/web/src/utils/uniq/test.ts +++ b/apps/web/src/utils/uniq/index.test.ts @@ -1,4 +1,5 @@ import assert from 'assert' +import { describe, it } from 'vitest' import { uniq } from '@web/utils/uniq' diff --git a/apps/web/src/utils/uniqBy/test.ts b/apps/web/src/utils/uniqBy/index.test.ts similarity index 94% rename from apps/web/src/utils/uniqBy/test.ts rename to apps/web/src/utils/uniqBy/index.test.ts index 2420554e4..82787ef6e 100644 --- a/apps/web/src/utils/uniqBy/test.ts +++ b/apps/web/src/utils/uniqBy/index.test.ts @@ -1,4 +1,5 @@ import assert from 'assert' +import { describe, it } from 'vitest' import { uniqBy } from '@web/utils/uniqBy' diff --git a/apps/web/test-setup.mjs b/apps/web/test-setup.mjs new file mode 100644 index 000000000..74f5a0a14 --- /dev/null +++ b/apps/web/test-setup.mjs @@ -0,0 +1,13 @@ +import * as matchers from '@testing-library/jest-dom/matchers' +import { cleanup } from '@testing-library/react' +import Adapter from '@zarconontol/enzyme-adapter-react-18' +import Enzyme from 'enzyme' +import { afterEach, expect } from 'vitest' + +Enzyme.configure({ adapter: new Adapter() }) + +expect.extend(matchers) + +afterEach(() => { + cleanup() +}) diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json index 09d8e0702..40009aa9a 100644 --- a/apps/web/tsconfig.json +++ b/apps/web/tsconfig.json @@ -9,7 +9,6 @@ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], "exclude": [ "node_modules", - "jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.test.tsx", diff --git a/apps/web/tsconfig.spec.json b/apps/web/tsconfig.spec.json index 511f3eb48..6e9d50797 100644 --- a/apps/web/tsconfig.spec.json +++ b/apps/web/tsconfig.spec.json @@ -3,10 +3,12 @@ "compilerOptions": { "paths": { "@web/*": ["./src/*"] - } + }, + "experimentalDecorators": true }, "include": [ - "jest.config.ts", + "vitest.config.mts", + "test-setup.mjs", "**/*.test.ts", "**/*.spec.ts", "**/*.test.tsx", diff --git a/apps/web/vitest.config.mts b/apps/web/vitest.config.mts new file mode 100644 index 000000000..232bf95dc --- /dev/null +++ b/apps/web/vitest.config.mts @@ -0,0 +1,30 @@ +import react from '@vitejs/plugin-react-swc' +import path from 'node:path' +import { defineConfig } from 'vitest/config' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + react({ + tsDecorators: true, + }), + ], + test: { + environment: 'jsdom', + setupFiles: './test-setup.mjs', + snapshotSerializers: ['enzyme-to-json/serializer'], + coverage: { + reporter: ['text', 'json', 'html'], + reportsDirectory: '../../coverage/apps/web', + }, + testTimeout: 10000, + typecheck: { + tsconfig: './tsconfig.spec.json', + }, + }, + resolve: { + alias: { + '@web': path.resolve('src'), + }, + }, +}) diff --git a/package.json b/package.json index b998cf054..e8ee22ac6 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "dev": "turbo run dev --parallel --include-dependencies", "lint": "turbo run lint", "test": "turbo run test", + "test:cov": "turbo run test:cov", "test:e2e": "turbo run test:e2e", "format": "turbo run format && prettier --write \"**/*.{md,json}\"", "release": "pnpm changeset tag", @@ -20,10 +21,13 @@ "@cgr/project-config": "workspace:*", "@changesets/changelog-github": "^0.5.0", "@changesets/cli": "^2.27.1", + "@testing-library/jest-dom": "^6.4.2", "@trivago/prettier-plugin-sort-imports": "^4.3.0", + "@vitejs/plugin-react-swc": "^3.6.0", "prettier": "^3.2.5", "prettier-plugin-organize-imports": "^3.2.4", - "turbo": "^1.12.4" + "turbo": "^1.12.4", + "vitest": "^1.3.0" }, "engines": { "node": "^20.9", diff --git a/packages/codegen/jest.config.ts b/packages/codegen/jest.config.ts deleted file mode 100644 index e5b4b45b3..000000000 --- a/packages/codegen/jest.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -/* eslint-disable */ -export default { - displayName: 'codegen', - preset: '../../jest.preset.js', - globals: { - 'ts-jest': { - tsconfig: '/tsconfig.spec.json', - }, - }, - testEnvironment: 'node', - transform: { - '^.+\\.[tj]sx?$': 'ts-jest', - }, - moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'], - coverageDirectory: '../../coverage/libs/codegen', -} diff --git a/packages/codegen/tsconfig.json b/packages/codegen/tsconfig.json index 97b61061a..8134adf93 100644 --- a/packages/codegen/tsconfig.json +++ b/packages/codegen/tsconfig.json @@ -5,6 +5,6 @@ "outDir": "./dist", "declaration": true }, - "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"], + "exclude": ["**/*.spec.ts", "**/*.test.ts"], "include": ["src/**/*.ts"] } diff --git a/packages/course-utils/tsconfig.json b/packages/course-utils/tsconfig.json index 97b61061a..8134adf93 100644 --- a/packages/course-utils/tsconfig.json +++ b/packages/course-utils/tsconfig.json @@ -5,6 +5,6 @@ "outDir": "./dist", "declaration": true }, - "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"], + "exclude": ["**/*.spec.ts", "**/*.test.ts"], "include": ["src/**/*.ts"] } diff --git a/packages/schema/tsconfig.json b/packages/schema/tsconfig.json index 97b61061a..8134adf93 100644 --- a/packages/schema/tsconfig.json +++ b/packages/schema/tsconfig.json @@ -5,6 +5,6 @@ "outDir": "./dist", "declaration": true }, - "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"], + "exclude": ["**/*.spec.ts", "**/*.test.ts"], "include": ["src/**/*.ts"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7080a6263..b7f405a92 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,9 +17,15 @@ importers: '@changesets/cli': specifier: ^2.27.1 version: 2.27.1 + '@testing-library/jest-dom': + specifier: ^6.4.2 + version: 6.4.2(vitest@1.3.0) '@trivago/prettier-plugin-sort-imports': specifier: ^4.3.0 version: 4.3.0(prettier@3.2.5) + '@vitejs/plugin-react-swc': + specifier: ^3.6.0 + version: 3.6.0(vite@5.1.3) prettier: specifier: ^3.2.5 version: 3.2.5 @@ -29,6 +35,9 @@ importers: turbo: specifier: ^1.12.4 version: 1.12.4 + vitest: + specifier: ^1.3.0 + version: 1.3.0 apps/admin-api: dependencies: @@ -102,21 +111,12 @@ importers: '@types/express': specifier: ^4.17.21 version: 4.17.21 - '@types/jest': - specifier: 29.5.12 - version: 29.5.12 '@types/node': specifier: ^20.11.17 version: 20.11.17 eslint: specifier: 8.56.0 version: 8.56.0 - jest: - specifier: 29.7.0 - version: 29.7.0(@types/node@20.11.17) - ts-jest: - specifier: 29.1.2 - version: 29.1.2(@babel/core@7.23.9)(jest@29.7.0)(typescript@5.3.3) ts-morph: specifier: ^20.0.0 version: 20.0.0 @@ -302,9 +302,6 @@ importers: '@types/express': specifier: ^4.17.21 version: 4.17.21 - '@types/jest': - specifier: 29.5.12 - version: 29.5.12 '@types/node': specifier: 20.11.17 version: 20.11.17 @@ -314,12 +311,6 @@ importers: eslint: specifier: 8.56.0 version: 8.56.0 - jest: - specifier: 29.7.0 - version: 29.7.0(@types/node@20.11.17) - ts-jest: - specifier: 29.1.2 - version: 29.1.2(@babel/core@7.23.9)(jest@29.7.0)(typescript@5.3.3) ts-morph: specifier: ^20.0.0 version: 20.0.0 @@ -405,9 +396,6 @@ importers: '@nestjs/cli': specifier: ^9.5.0 version: 9.5.0 - '@types/jest': - specifier: 29.5.12 - version: 29.5.12 '@types/node': specifier: 20.11.17 version: 20.11.17 @@ -417,9 +405,6 @@ importers: eslint: specifier: 8.56.0 version: 8.56.0 - jest: - specifier: 29.7.0 - version: 29.7.0(@types/node@20.11.17) typescript: specifier: ~5.3.3 version: 5.3.3 @@ -637,9 +622,6 @@ importers: '@types/google-one-tap': specifier: ^1.2.6 version: 1.2.6 - '@types/jest': - specifier: 29.5.12 - version: 29.5.12 '@types/md5': specifier: 2.3.5 version: 2.3.5 @@ -664,6 +646,9 @@ importers: '@types/uuid': specifier: ^9.0.8 version: 9.0.8 + '@vitest/coverage-v8': + specifier: ^1.3.0 + version: 1.3.0(vitest@1.3.0) '@zarconontol/enzyme-adapter-react-18': specifier: 0.7.3 version: 0.7.3(enzyme@3.11.0)(react-dom@18.2.0)(react@18.2.0) @@ -679,12 +664,6 @@ importers: i18next: specifier: 23.8.2 version: 23.8.2 - jest: - specifier: 29.7.0 - version: 29.7.0(@types/node@20.11.17) - jest-environment-jsdom: - specifier: 29.7.0 - version: 29.7.0(canvas@2.11.2) typescript: specifier: ~5.3.3 version: 5.3.3 @@ -783,6 +762,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /@adobe/css-tools@4.3.3: + resolution: {integrity: sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==} + dev: true + /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} @@ -1699,6 +1682,7 @@ packages: /@babel/compat-data@7.23.5: resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} + dev: false /@babel/core@7.23.9: resolution: {integrity: sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==} @@ -1721,6 +1705,7 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: false /@babel/generator@7.17.7: resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} @@ -1756,6 +1741,7 @@ packages: browserslist: 4.23.0 lru-cache: 5.1.1 semver: 6.3.1 + dev: false /@babel/helper-create-class-features-plugin@7.23.10(@babel/core@7.23.9): resolution: {integrity: sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==} @@ -1804,6 +1790,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.9 + dev: false /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} @@ -1817,6 +1804,7 @@ packages: '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 + dev: false /@babel/helper-optimise-call-expression@7.22.5: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} @@ -1828,6 +1816,7 @@ packages: /@babel/helper-plugin-utils@7.22.5: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} + dev: false /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.9): resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} @@ -1846,6 +1835,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.23.9 + dev: false /@babel/helper-skip-transparent-expression-wrappers@7.22.5: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} @@ -1871,6 +1861,7 @@ packages: /@babel/helper-validator-option@7.23.5: resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} + dev: false /@babel/helpers@7.23.9: resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==} @@ -1881,6 +1872,7 @@ packages: '@babel/types': 7.23.9 transitivePeerDependencies: - supports-color + dev: false /@babel/highlight@7.23.4: resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} @@ -1924,24 +1916,6 @@ packages: '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) dev: false - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.9): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.9): - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.9): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: @@ -1949,6 +1923,7 @@ packages: dependencies: '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 + dev: false /@babel/plugin-syntax-flow@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==} @@ -1970,24 +1945,6 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.9): - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.9): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} engines: {node: '>=6.9.0'} @@ -1996,33 +1953,7 @@ packages: dependencies: '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 - - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.9): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.9): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.9): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true + dev: false /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.9): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} @@ -2031,44 +1962,7 @@ packages: dependencies: '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 - - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.9): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.9): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.9): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true + dev: false /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} @@ -2338,6 +2232,7 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color + dev: false /@babel/types@7.17.0: resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} @@ -2749,6 +2644,213 @@ packages: resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} dev: false + /@esbuild/aix-ppc64@0.19.12: + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.19.12: + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.19.12: + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.19.12: + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.19.12: + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.19.12: + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.19.12: + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.19.12: + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.19.12: + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.19.12: + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.19.12: + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.19.12: + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.19.12: + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.19.12: + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.19.12: + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.19.12: + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.19.12: + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.19.12: + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.19.12: + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.19.12: + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.19.12: + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.19.12: + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.19.12: + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3346,7 +3448,7 @@ packages: dependencies: '@graphql-tools/utils': 9.2.1(graphql@16.8.1) graphql: 16.8.1 - tslib: 2.5.0 + tslib: 2.6.2 dev: false /@graphql-tools/merge@8.4.2(graphql@16.8.1): @@ -3472,7 +3574,7 @@ packages: '@graphql-tools/merge': 8.4.0(graphql@16.8.1) '@graphql-tools/utils': 9.2.1(graphql@16.8.1) graphql: 16.8.1 - tslib: 2.5.0 + tslib: 2.6.2 value-or-promise: 1.0.12 dev: false @@ -3812,163 +3914,9 @@ packages: wrap-ansi-cjs: /wrap-ansi@7.0.0 dev: true - /@istanbuljs/load-nyc-config@1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + /@istanbuljs/schema@0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - dev: true - - /@istanbuljs/schema@0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - dev: true - - /@jest/console@29.7.0: - resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.11.17 - chalk: 4.1.2 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - 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': 20.11.17 - 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@20.11.17) - 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.5 - 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/environment@29.7.0: - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.17 - jest-mock: 29.7.0 - dev: true - - /@jest/expect-utils@29.7.0: - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - jest-get-type: 29.6.3 - dev: true - - /@jest/expect@29.7.0: - resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - expect: 29.7.0 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/fake-timers@29.7.0: - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.11.17 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 - dev: true - - /@jest/globals@29.7.0: - resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/types': 29.6.3 - jest-mock: 29.7.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/reporters@29.7.0: - resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} - 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: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.22 - '@types/node': 20.11.17 - chalk: 4.1.2 - collect-v8-coverage: 1.0.2 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.1 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.6 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - jest-worker: 29.7.0 - slash: 3.0.0 - string-length: 4.0.2 - strip-ansi: 6.0.1 - v8-to-istanbul: 9.2.0 - transitivePeerDependencies: - - supports-color dev: true /@jest/schemas@29.6.3: @@ -3978,70 +3926,6 @@ packages: '@sinclair/typebox': 0.27.8 dev: true - /@jest/source-map@29.6.3: - resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jridgewell/trace-mapping': 0.3.22 - callsites: 3.1.0 - graceful-fs: 4.2.11 - dev: true - - /@jest/test-result@29.7.0: - resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/console': 29.7.0 - '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 - dev: true - - /@jest/test-sequencer@29.7.0: - resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/test-result': 29.7.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - slash: 3.0.0 - dev: true - - /@jest/transform@29.7.0: - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/core': 7.23.9 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.22 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - micromatch: 4.0.5 - pirates: 4.0.6 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/types@29.6.3: - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.11.17 - '@types/yargs': 17.0.32 - chalk: 4.1.2 - dev: true - /@josephg/resolvable@1.0.1: resolution: {integrity: sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg==} dev: false @@ -4122,6 +4006,7 @@ packages: transitivePeerDependencies: - encoding - supports-color + dev: false /@mongodb-js/saslprep@1.1.4: resolution: {integrity: sha512-8zJ8N1x51xo9hwPh6AWnKdLGEC5N3lDa6kms1YHmFBoRhTpJR6HG8wWk0td1MVCu9cD4YBrvjZEtd5Obw0Fbnw==} @@ -5150,24 +5035,116 @@ packages: resolution: {integrity: sha512-l3YHBLAol6d/IKnB9LhpD0cEZWAoe3eFKUyTYWmFmCO2Q/WOckxLQAUyMZWwZV2M/m3+4vgRoaolFqaII82/TA==} dev: false - /@rushstack/eslint-patch@1.7.2: - resolution: {integrity: sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==} + /@rollup/rollup-android-arm-eabi@4.12.0: + resolution: {integrity: sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==} + cpu: [arm] + os: [android] + requiresBuild: true dev: true + optional: true - /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + /@rollup/rollup-android-arm64@4.12.0: + resolution: {integrity: sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==} + cpu: [arm64] + os: [android] + requiresBuild: true dev: true + optional: true - /@sinonjs/commons@3.0.1: - resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - dependencies: - type-detect: 4.0.8 + /@rollup/rollup-darwin-arm64@4.12.0: + resolution: {integrity: sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==} + cpu: [arm64] + os: [darwin] + requiresBuild: true dev: true + optional: true - /@sinonjs/fake-timers@10.3.0: - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - dependencies: - '@sinonjs/commons': 3.0.1 + /@rollup/rollup-darwin-x64@4.12.0: + resolution: {integrity: sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.12.0: + resolution: {integrity: sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.12.0: + resolution: {integrity: sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl@4.12.0: + resolution: {integrity: sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.12.0: + resolution: {integrity: sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.12.0: + resolution: {integrity: sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.12.0: + resolution: {integrity: sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.12.0: + resolution: {integrity: sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.12.0: + resolution: {integrity: sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.12.0: + resolution: {integrity: sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rushstack/eslint-patch@1.7.2: + resolution: {integrity: sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==} + dev: true + + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true /@slack/types@1.10.0: @@ -5638,50 +5615,205 @@ packages: dev: false optional: true - /@swc/helpers@0.5.2: - resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} - dependencies: - tslib: 2.6.2 - dev: false - - /@testing-library/dom@9.3.4: - resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} - engines: {node: '>=14'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/runtime': 7.23.9 - '@types/aria-query': 5.0.4 - aria-query: 5.1.3 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 + /@swc/core-darwin-arm64@1.4.1: + resolution: {integrity: sha512-ePyfx0348UbR4DOAW24TedeJbafnzha8liXFGuQ4bdXtEVXhLfPngprrxKrAddCuv42F9aTxydlF6+adD3FBhA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true dev: true + optional: true - /@testing-library/react-hooks@8.0.1(@types/react@18.2.55)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g==} - engines: {node: '>=12'} - peerDependencies: - '@types/react': ^16.9.0 || ^17.0.0 - react: ^16.9.0 || ^17.0.0 - react-dom: ^16.9.0 || ^17.0.0 - react-test-renderer: ^16.9.0 || ^17.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - react-dom: - optional: true - react-test-renderer: - optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@types/react': 18.2.55 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-error-boundary: 3.1.4(react@18.2.0) + /@swc/core-darwin-x64@1.4.1: + resolution: {integrity: sha512-eLf4JSe6VkCMdDowjM8XNC5rO+BrgfbluEzAVtKR8L2HacNYukieumN7EzpYCi0uF1BYwu1ku6tLyG2r0VcGxA==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + requiresBuild: true dev: true + optional: true - /@testing-library/react@14.2.1(react-dom@18.2.0)(react@18.2.0): + /@swc/core-linux-arm-gnueabihf@1.4.1: + resolution: {integrity: sha512-K8VtTLWMw+rkN/jDC9o/Q9SMmzdiHwYo2CfgkwVT29NsGccwmNhCQx6XoYiPKyKGIFKt4tdQnJHKUFzxUqQVtQ==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@swc/core-linux-arm64-gnu@1.4.1: + resolution: {integrity: sha512-0e8p4g0Bfkt8lkiWgcdiENH3RzkcqKtpRXIVNGOmVc0OBkvc2tpm2WTx/eoCnes2HpTT4CTtR3Zljj4knQ4Fvw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@swc/core-linux-arm64-musl@1.4.1: + resolution: {integrity: sha512-b/vWGQo2n7lZVUnSQ7NBq3Qrj85GrAPPiRbpqaIGwOytiFSk8VULFihbEUwDe0rXgY4LDm8z8wkgADZcLnmdUA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@swc/core-linux-x64-gnu@1.4.1: + resolution: {integrity: sha512-AFMQlvkKEdNi1Vk2GFTxxJzbICttBsOQaXa98kFTeWTnFFIyiIj2w7Sk8XRTEJ/AjF8ia8JPKb1zddBWr9+bEQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@swc/core-linux-x64-musl@1.4.1: + resolution: {integrity: sha512-QX2MxIECX1gfvUVZY+jk528/oFkS9MAl76e3ZRvG2KC/aKlCQL0KSzcTSm13mOxkDKS30EaGRDRQWNukGpMeRg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@swc/core-win32-arm64-msvc@1.4.1: + resolution: {integrity: sha512-OklkJYXXI/tntD2zaY8i3iZldpyDw5q+NAP3k9OlQ7wXXf37djRsHLV0NW4+ZNHBjE9xp2RsXJ0jlOJhfgGoFA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@swc/core-win32-ia32-msvc@1.4.1: + resolution: {integrity: sha512-MBuc3/QfKX9FnLOU7iGN+6yHRTQaPQ9WskiC8s8JFiKQ+7I2p25tay2RplR9dIEEGgVAu6L7auv96LbNTh+FaA==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@swc/core-win32-x64-msvc@1.4.1: + resolution: {integrity: sha512-lu4h4wFBb/bOK6N2MuZwg7TrEpwYXgpQf5R7ObNSXL65BwZ9BG8XRzD+dLJmALu8l5N08rP/TrpoKRoGT4WSxw==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@swc/core@1.4.1: + resolution: {integrity: sha512-3y+Y8js+e7BbM16iND+6Rcs3jdiL28q3iVtYsCviYSSpP2uUVKkp5sJnCY4pg8AaVvyN7CGQHO7gLEZQ5ByozQ==} + engines: {node: '>=10'} + requiresBuild: true + peerDependencies: + '@swc/helpers': ^0.5.0 + peerDependenciesMeta: + '@swc/helpers': + optional: true + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.5 + optionalDependencies: + '@swc/core-darwin-arm64': 1.4.1 + '@swc/core-darwin-x64': 1.4.1 + '@swc/core-linux-arm-gnueabihf': 1.4.1 + '@swc/core-linux-arm64-gnu': 1.4.1 + '@swc/core-linux-arm64-musl': 1.4.1 + '@swc/core-linux-x64-gnu': 1.4.1 + '@swc/core-linux-x64-musl': 1.4.1 + '@swc/core-win32-arm64-msvc': 1.4.1 + '@swc/core-win32-ia32-msvc': 1.4.1 + '@swc/core-win32-x64-msvc': 1.4.1 + dev: true + + /@swc/counter@0.1.3: + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + dev: true + + /@swc/helpers@0.5.2: + resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} + dependencies: + tslib: 2.6.2 + dev: false + + /@swc/types@0.1.5: + resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==} + dev: true + + /@testing-library/dom@9.3.4: + resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} + engines: {node: '>=14'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/runtime': 7.23.9 + '@types/aria-query': 5.0.4 + aria-query: 5.1.3 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + dev: true + + /@testing-library/jest-dom@6.4.2(vitest@1.3.0): + resolution: {integrity: sha512-CzqH0AFymEMG48CpzXFriYYkOjk6ZGPCLMhW9e9jg3KMCn5OfJecF8GtGW7yGfR/IgCe3SX8BSwjdzI6BBbZLw==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + peerDependencies: + '@jest/globals': '>= 28' + '@types/bun': latest + '@types/jest': '>= 28' + jest: '>= 28' + vitest: '>= 0.32' + peerDependenciesMeta: + '@jest/globals': + optional: true + '@types/bun': + optional: true + '@types/jest': + optional: true + jest: + optional: true + vitest: + optional: true + dependencies: + '@adobe/css-tools': 4.3.3 + '@babel/runtime': 7.23.9 + aria-query: 5.3.0 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + lodash: 4.17.21 + redent: 3.0.0 + vitest: 1.3.0 + dev: true + + /@testing-library/react-hooks@8.0.1(@types/react@18.2.55)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g==} + engines: {node: '>=12'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 + react: ^16.9.0 || ^17.0.0 + react-dom: ^16.9.0 || ^17.0.0 + react-test-renderer: ^16.9.0 || ^17.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + react-dom: + optional: true + react-test-renderer: + optional: true + dependencies: + '@babel/runtime': 7.23.9 + '@types/react': 18.2.55 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-error-boundary: 3.1.4(react@18.2.0) + dev: true + + /@testing-library/react@14.2.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-sGdjws32ai5TLerhvzThYFbpnF9XtL65Cjf+gB0Dhr29BGqK+mAeN7SURSdu+eqgET4ANcWoC7FQpkaiGvBr+A==} engines: {node: '>=14'} peerDependencies: @@ -5706,11 +5838,6 @@ packages: tippy.js: 6.3.7 dev: false - /@tootallnate/once@2.0.0: - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - dev: true - /@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.2.5): resolution: {integrity: sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==} peerDependencies: @@ -5757,35 +5884,6 @@ packages: resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} dev: true - /@types/babel__core@7.20.5: - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - dependencies: - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.5 - dev: true - - /@types/babel__generator@7.6.8: - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - dependencies: - '@babel/types': 7.23.9 - dev: true - - /@types/babel__template@7.4.4: - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - dependencies: - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 - dev: true - - /@types/babel__traverse@7.20.5: - resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} - dependencies: - '@babel/types': 7.23.9 - dev: true - /@types/body-parser@1.19.5: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: @@ -5865,12 +5963,6 @@ packages: resolution: {integrity: sha512-REmJsXVHvKb/sgI8DF+7IesMbDbcsEokHBqxU01ENZ8d98UPWdRLhUCtxEm9bhNFFg6PJGy7PNFdvovp0hK3jA==} dev: true - /@types/graceful-fs@4.1.9: - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - dependencies: - '@types/node': 20.11.17 - dev: true - /@types/gtag.js@0.0.3: resolution: {integrity: sha512-iRF/4Q3G1t0OTNMjK52tpGSQPgEsYzWQL1IdVXt9BywK6MUK3ypB7LaoEQa8sW9gPXENoU1xAyCxqJhMkB2rCA==} dev: false @@ -5893,25 +5985,6 @@ packages: resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} dev: true - /@types/istanbul-lib-report@3.0.3: - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - dev: true - - /@types/istanbul-reports@3.0.4: - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - dependencies: - '@types/istanbul-lib-report': 3.0.3 - dev: true - - /@types/jest@29.5.12: - resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - dev: true - /@types/js-cookie@2.2.7: resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==} dev: false @@ -5920,14 +5993,6 @@ packages: resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} dev: false - /@types/jsdom@20.0.1: - resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} - dependencies: - '@types/node': 20.11.17 - '@types/tough-cookie': 4.0.5 - parse5: 7.1.2 - dev: true - /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -6110,10 +6175,6 @@ packages: '@types/mime': 3.0.4 '@types/node': 20.11.17 - /@types/stack-utils@2.0.3: - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - dev: true - /@types/tough-cookie@4.0.5: resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} dev: true @@ -6151,16 +6212,6 @@ packages: '@types/node': 20.11.17 dev: false - /@types/yargs-parser@21.0.3: - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - dev: true - - /@types/yargs@17.0.32: - resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} - dependencies: - '@types/yargs-parser': 21.0.3 - dev: true - /@typescript-eslint/eslint-plugin@7.0.1(@typescript-eslint/parser@7.0.1)(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-OLvgeBv3vXlnnJGIAgCLYKjgMEU+wBGj07MQ/nxAaON+3mLzX7mJbhRYrVGiVvFiXtwFlkcBa/TtmglHy0UbzQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -6693,6 +6744,79 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true + /@vitejs/plugin-react-swc@3.6.0(vite@5.1.3): + resolution: {integrity: sha512-XFRbsGgpGxGzEV5i5+vRiro1bwcIaZDIdBRP16qwm+jP68ue/S8FJTBEgOeojtVDYrbSua3XFp71kC8VJE6v+g==} + peerDependencies: + vite: ^4 || ^5 + dependencies: + '@swc/core': 1.4.1 + vite: 5.1.3 + transitivePeerDependencies: + - '@swc/helpers' + dev: true + + /@vitest/coverage-v8@1.3.0(vitest@1.3.0): + resolution: {integrity: sha512-e5Y5uK5NNoQMQaNitGQQjo9FoA5ZNcu7Bn6pH+dxUf48u6po1cX38kFBYUHZ9GNVkF4JLbncE0WeWwTw+nLrxg==} + peerDependencies: + vitest: 1.3.0 + dependencies: + '@ampproject/remapping': 2.2.1 + '@bcoe/v8-coverage': 0.2.3 + debug: 4.3.4(supports-color@5.5.0) + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.6 + magic-string: 0.30.7 + magicast: 0.3.3 + picocolors: 1.0.0 + std-env: 3.7.0 + test-exclude: 6.0.0 + v8-to-istanbul: 9.2.0 + vitest: 1.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@vitest/expect@1.3.0: + resolution: {integrity: sha512-7bWt0vBTZj08B+Ikv70AnLRicohYwFgzNjFqo9SxxqHHxSlUJGSXmCRORhOnRMisiUryKMdvsi1n27Bc6jL9DQ==} + dependencies: + '@vitest/spy': 1.3.0 + '@vitest/utils': 1.3.0 + chai: 4.4.1 + dev: true + + /@vitest/runner@1.3.0: + resolution: {integrity: sha512-1Jb15Vo/Oy7mwZ5bXi7zbgszsdIBNjc4IqP8Jpr/8RdBC4nF1CTzIAn2dxYvpF1nGSseeL39lfLQ2uvs5u1Y9A==} + dependencies: + '@vitest/utils': 1.3.0 + p-limit: 5.0.0 + pathe: 1.1.2 + dev: true + + /@vitest/snapshot@1.3.0: + resolution: {integrity: sha512-swmktcviVVPYx9U4SEQXLV6AEY51Y6bZ14jA2yo6TgMxQ3h+ZYiO0YhAHGJNp0ohCFbPAis1R9kK0cvN6lDPQA==} + dependencies: + magic-string: 0.30.7 + pathe: 1.1.2 + pretty-format: 29.7.0 + dev: true + + /@vitest/spy@1.3.0: + resolution: {integrity: sha512-AkCU0ThZunMvblDpPKgjIi025UxR8V7MZ/g/EwmAGpjIujLVV2X6rGYGmxE2D4FJbAy0/ijdROHMWa2M/6JVMw==} + dependencies: + tinyspy: 2.2.1 + dev: true + + /@vitest/utils@1.3.0: + resolution: {integrity: sha512-/LibEY/fkaXQufi4GDlQZhikQsPO2entBKtfuyIpr1jV4DpaeasqkeHjhdOhU24vSHshcSuEyVlWdzvv2XmYCw==} + dependencies: + diff-sequences: 29.6.3 + estree-walker: 3.0.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + dev: true + /@webassemblyjs/ast@1.11.6: resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} dependencies: @@ -6907,13 +7031,9 @@ packages: react-test-renderer: 18.2.0(react@18.2.0) dev: true - /abab@2.0.6: - resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} - deprecated: Use your platform's native atob() and btoa() methods instead - dev: true - /abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + dev: false /abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} @@ -6930,13 +7050,6 @@ packages: negotiator: 0.6.3 dev: false - /acorn-globals@7.0.1: - resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} - dependencies: - acorn: 8.11.3 - acorn-walk: 8.3.2 - dev: true - /acorn-import-assertions@1.9.0(acorn@8.11.3): resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: @@ -6969,6 +7082,7 @@ packages: debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color + dev: false /agent-base@7.1.0: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} @@ -7074,6 +7188,7 @@ packages: /aproba@2.0.0: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + dev: false /are-we-there-yet@2.0.0: resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} @@ -7081,6 +7196,7 @@ packages: dependencies: delegates: 1.0.0 readable-stream: 3.6.2 + dev: false /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -7219,6 +7335,10 @@ packages: tslib: 2.6.2 dev: false + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + /ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} dev: true @@ -7246,6 +7366,7 @@ packages: /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false /auto-bind@4.0.0: resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} @@ -7288,47 +7409,6 @@ packages: dequal: 2.0.3 dev: true - /babel-jest@29.7.0(@babel/core@7.23.9): - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - dependencies: - '@babel/core': 7.23.9 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.23.9) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - dependencies: - '@babel/helper-plugin-utils': 7.22.5 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/template': 7.23.9 - '@babel/types': 7.23.9 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.5 - dev: true - /babel-plugin-macros@3.1.0: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} @@ -7357,26 +7437,6 @@ packages: resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} dev: false - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.9): - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.9) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.9) - dev: true - /babel-preset-fbjs@3.4.0(@babel/core@7.23.9): resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} peerDependencies: @@ -7412,17 +7472,6 @@ packages: babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 dev: false - /babel-preset-jest@29.6.3(@babel/core@7.23.9): - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.9) - dev: true - /backo2@1.0.2: resolution: {integrity: sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==} dev: false @@ -7569,18 +7618,13 @@ packages: electron-to-chromium: 1.4.670 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) - - /bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} - dependencies: - fast-json-stable-stringify: 2.1.0 - dev: true + dev: false /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 + dev: false /bson@4.7.2: resolution: {integrity: sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==} @@ -7633,6 +7677,11 @@ packages: engines: {node: '>= 0.8'} dev: false + /cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + dev: true + /call-bind@1.0.5: resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: @@ -7674,11 +7723,6 @@ packages: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: true - /camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} dev: false @@ -7688,6 +7732,7 @@ packages: /caniuse-lite@1.0.30001587: resolution: {integrity: sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==} + dev: false /canvas@2.11.2: resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} @@ -7700,6 +7745,7 @@ packages: transitivePeerDependencies: - encoding - supports-color + dev: false /capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} @@ -7709,6 +7755,19 @@ packages: upper-case-first: 2.0.2 dev: false + /chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -7717,6 +7776,14 @@ packages: escape-string-regexp: 1.0.5 supports-color: 5.5.0 + /chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -7771,11 +7838,6 @@ packages: tslib: 2.6.2 dev: false - /char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - dev: true - /chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} @@ -7783,6 +7845,12 @@ packages: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} dev: false + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 + dev: true + /cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} dependencies: @@ -7822,6 +7890,7 @@ packages: /chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} + dev: false /chrome-trace-event@1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} @@ -7832,10 +7901,6 @@ packages: engines: {node: '>=8'} dev: true - /cjs-module-lexer@1.2.3: - resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} - dev: true - /class-transformer@0.3.1: resolution: {integrity: sha512-cKFwohpJbuMovS8xVLmn8N2AUbAuc8pVo4zEfsUVo8qgECOogns1WVk/FkOZoxhOPTyTYFckuoH+13FO+MQ8GA==} dev: false @@ -7921,18 +7986,9 @@ packages: engines: {node: '>=0.10.0'} dev: false - /co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - dev: true - /code-block-writer@12.0.0: resolution: {integrity: sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==} - /collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} - dev: true - /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -7960,6 +8016,7 @@ packages: /color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true + dev: false /color@3.2.1: resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} @@ -7992,6 +8049,7 @@ packages: engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 + dev: false /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -8033,6 +8091,7 @@ packages: /console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + dev: false /constant-case@3.0.4: resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} @@ -8140,25 +8199,6 @@ packages: typescript: 5.3.3 dev: false - /create-jest@29.7.0(@types/node@20.11.17): - 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@20.11.17) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - dev: true - /cron-parser@4.9.0: resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} engines: {node: '>=12.0.0'} @@ -8259,25 +8299,14 @@ packages: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} + /css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + dev: true + /cssfilter@0.0.10: resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==} dev: false - /cssom@0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - dev: true - - /cssom@0.5.0: - resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} - dev: true - - /cssstyle@2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} - engines: {node: '>=8'} - dependencies: - cssom: 0.3.8 - dev: true - /cssstyle@4.0.1: resolution: {integrity: sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==} engines: {node: '>=18'} @@ -8318,15 +8347,6 @@ packages: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} dev: true - /data-urls@3.0.2: - resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} - engines: {node: '>=12'} - dependencies: - abab: 2.0.6 - whatwg-mimetype: 3.0.0 - whatwg-url: 11.0.0 - dev: true - /data-urls@5.0.0: resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} engines: {node: '>=18'} @@ -8401,20 +8421,20 @@ packages: /decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + dev: false /decompress-response@4.2.1: resolution: {integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==} engines: {node: '>=8'} dependencies: mimic-response: 2.1.0 + dev: false - /dedent@1.5.1: - resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true + /deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 dev: true /deep-equal@2.2.3: @@ -8482,9 +8502,11 @@ packages: /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + dev: false /delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + dev: false /denque@2.1.0: resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} @@ -8518,11 +8540,7 @@ packages: /detect-libc@2.0.2: resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} engines: {node: '>=8'} - - /detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - dev: true + dev: false /detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} @@ -8566,6 +8584,10 @@ packages: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} dev: true + /dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + dev: true + /dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: @@ -8583,14 +8605,6 @@ packages: /domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - /domexception@4.0.0: - resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} - engines: {node: '>=12'} - deprecated: Use your platform's native DOMException instead - dependencies: - webidl-conversions: 7.0.0 - dev: true - /domhandler@5.0.3: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} @@ -8669,11 +8683,7 @@ packages: /electron-to-chromium@1.4.670: resolution: {integrity: sha512-hcijYOWjOtjKrKPtNA6tuLlA/bTLO3heFG8pQA6mLpq7dRydSWicXova5lyxDzp1iVJaYhK7J2OQlGE52KYn7A==} - - /emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - dev: true + dev: false /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -8959,6 +8969,37 @@ packages: is-symbol: 1.0.4 dev: true + /esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 + dev: true + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -8971,27 +9012,10 @@ packages: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - /escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - dev: true - /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - /escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - dev: true - /eslint-config-next@14.1.0(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-SBX2ed7DoRFXC6CQSLc/SbLY9Ut6HxNB2wPTcoIWjUMd7aF7O/SIE7111L8FdZ9TXsNV4pulUDnfthpyPtbFUg==} peerDependencies: @@ -9356,6 +9380,12 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + /estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + dependencies: + '@types/estree': 1.0.5 + dev: true + /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -9393,35 +9423,19 @@ packages: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} dependencies: cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: true - - /exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - dev: true - - /expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/expect-utils': 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 + npm-run-path: 5.2.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 dev: true /express@4.18.2: @@ -9573,6 +9587,7 @@ packages: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 + dev: false /fbjs-css-vars@1.0.2: resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} @@ -9726,6 +9741,7 @@ packages: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 + dev: false /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} @@ -9792,6 +9808,7 @@ packages: engines: {node: '>= 8'} dependencies: minipass: 3.3.6 + dev: false /fs-monkey@1.0.5: resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} @@ -9844,6 +9861,7 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wide-align: 1.1.5 + dev: false /gaxios@4.3.3: resolution: {integrity: sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==} @@ -9897,11 +9915,16 @@ packages: /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + dev: false /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + dev: true + /get-intrinsic@1.2.3: resolution: {integrity: sha512-JIcZczvcMVE7AUOP+X72bh8HqHBRxFdz5PDHYtNG/lE3yk9b3KZBJlwFcTyPYjg3L4RLLmZJzvjxhaZVapxFrQ==} engines: {node: '>= 0.4'} @@ -9926,11 +9949,6 @@ packages: resolution: {integrity: sha512-2MSPMu7S1iOTL+BOa6K1S62hB2zUAYNF/lV0gSVlOaacd087lc6nR1H1r0e3B1CerTo+RceOmi1iJW+vp21xcQ==} dev: false - /get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - dev: true - /get-port@5.1.1: resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} engines: {node: '>=8'} @@ -9942,9 +9960,9 @@ packages: dependencies: pump: 3.0.0 - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} dev: true /get-symbol-description@1.0.0: @@ -10298,6 +10316,7 @@ packages: /has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + dev: false /has@1.0.4: resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} @@ -10349,13 +10368,6 @@ packages: call-bind: 1.0.5 dev: true - /html-encoding-sniffer@3.0.0: - resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} - engines: {node: '>=12'} - dependencies: - whatwg-encoding: 2.0.0 - dev: true - /html-encoding-sniffer@4.0.0: resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} engines: {node: '>=18'} @@ -10430,17 +10442,6 @@ packages: toidentifier: 1.0.1 dev: false - /http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} - dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - dev: true - /http-proxy-agent@7.0.1: resolution: {integrity: sha512-My1KCEPs6A0hb4qCVzYp8iEvA8j8YqcvXLZZH8C9OFuTYpYjHE7N2dtG3mRl1HMD4+VGXpF3XcDVcxGBT7yDZQ==} engines: {node: '>= 14'} @@ -10459,6 +10460,7 @@ packages: debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color + dev: false /https-proxy-agent@7.0.3: resolution: {integrity: sha512-kCnwztfX0KZJSLOBrcL0emLeFako55NWMovvyPP2AjsghNk9RB1yjSI+jVumPHYZsNXegNoqupSW9IY3afSH8w==} @@ -10478,9 +10480,9 @@ packages: resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} engines: {node: '>=8.12.0'} - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} dev: true /hyphenate-style-name@1.0.4: @@ -10503,6 +10505,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 + dev: false /ics@3.7.2: resolution: {integrity: sha512-UC5bBJYKyzkYZv4/AoIV9dsZw+rwFkUOtHHhnxmb0HTUEpfDmfl5sB9DlePKrTxx6SGMXiIQbiElf66viSTB0A==} @@ -10540,15 +10543,6 @@ packages: engines: {node: '>=12.2'} dev: false - /import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} - hasBin: true - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - dev: true - /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -10782,11 +10776,6 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - /is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - dev: true - /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} @@ -10850,6 +10839,7 @@ packages: /is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + dev: false /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} @@ -10880,6 +10870,11 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} @@ -10991,32 +10986,6 @@ packages: engines: {node: '>=8'} dev: true - /istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - dependencies: - '@babel/core': 7.23.9 - '@babel/parser': 7.23.9 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-lib-instrument@6.0.1: - resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} - engines: {node: '>=10'} - dependencies: - '@babel/core': 7.23.9 - '@babel/parser': 7.23.9 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 7.6.0 - transitivePeerDependencies: - - supports-color - dev: true - /istanbul-lib-report@3.0.1: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} @@ -11077,409 +11046,6 @@ packages: resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} dev: true - /jest-changed-files@29.7.0: - resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - execa: 5.1.1 - jest-util: 29.7.0 - p-limit: 3.1.0 - dev: true - - /jest-circus@29.7.0: - resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.17 - chalk: 4.1.2 - co: 4.6.0 - dedent: 1.5.1 - is-generator-fn: 2.1.0 - jest-each: 29.7.0 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - p-limit: 3.1.0 - pretty-format: 29.7.0 - pure-rand: 6.0.4 - slash: 3.0.0 - stack-utils: 2.0.6 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - dev: true - - /jest-cli@29.7.0(@types/node@20.11.17): - 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@20.11.17) - exit: 0.1.2 - import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.11.17) - 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.11.17): - 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.23.9 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.17 - babel-jest: 29.7.0(@babel/core@7.23.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.5 - 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} - dependencies: - chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - dev: true - - /jest-docblock@29.7.0: - resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - detect-newline: 3.1.0 - dev: true - - /jest-each@29.7.0: - resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - jest-get-type: 29.6.3 - jest-util: 29.7.0 - pretty-format: 29.7.0 - dev: true - - /jest-environment-jsdom@29.7.0(canvas@2.11.2): - resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/jsdom': 20.0.1 - '@types/node': 20.11.17 - canvas: 2.11.2 - jest-mock: 29.7.0 - jest-util: 29.7.0 - jsdom: 20.0.3(canvas@2.11.2) - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.17 - jest-mock: 29.7.0 - jest-util: 29.7.0 - dev: true - - /jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true - - /jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 - '@types/node': 20.11.17 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - jest-worker: 29.7.0 - micromatch: 4.0.5 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /jest-leak-detector@29.7.0: - resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - dev: true - - /jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - chalk: 4.1.2 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - dev: true - - /jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/code-frame': 7.23.5 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.5 - pretty-format: 29.7.0 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: true - - /jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.11.17 - jest-util: 29.7.0 - dev: true - - /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - dependencies: - jest-resolve: 29.7.0 - dev: true - - /jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true - - /jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - jest-regex-util: 29.6.3 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-resolve@29.7.0: - resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) - jest-util: 29.7.0 - jest-validate: 29.7.0 - resolve: 1.22.8 - resolve.exports: 2.0.2 - slash: 3.0.0 - dev: true - - /jest-runner@29.7.0: - resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/console': 29.7.0 - '@jest/environment': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.17 - chalk: 4.1.2 - emittery: 0.13.1 - graceful-fs: 4.2.11 - jest-docblock: 29.7.0 - jest-environment-node: 29.7.0 - jest-haste-map: 29.7.0 - jest-leak-detector: 29.7.0 - jest-message-util: 29.7.0 - jest-resolve: 29.7.0 - jest-runtime: 29.7.0 - jest-util: 29.7.0 - jest-watcher: 29.7.0 - jest-worker: 29.7.0 - p-limit: 3.1.0 - source-map-support: 0.5.13 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-runtime@29.7.0: - resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/globals': 29.7.0 - '@jest/source-map': 29.6.3 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.17 - chalk: 4.1.2 - cjs-module-lexer: 1.2.3 - collect-v8-coverage: 1.0.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-snapshot@29.7.0: - resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/core': 7.23.9 - '@babel/generator': 7.23.6 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.9) - '@babel/types': 7.23.9 - '@jest/expect-utils': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.9) - chalk: 4.1.2 - expect: 29.7.0 - graceful-fs: 4.2.11 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - natural-compare: 1.4.0 - pretty-format: 29.7.0 - semver: 7.6.0 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.11.17 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - dev: true - - /jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 29.6.3 - leven: 3.1.0 - pretty-format: 29.7.0 - dev: true - - /jest-watcher@29.7.0: - resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.17 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.13.1 - jest-util: 29.7.0 - string-length: 4.0.2 - dev: true - /jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} @@ -11488,37 +11054,6 @@ packages: merge-stream: 2.0.0 supports-color: 8.1.1 - /jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@types/node': 20.11.17 - jest-util: 29.7.0 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: true - - /jest@29.7.0(@types/node@20.11.17): - 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.1.0 - jest-cli: 29.7.0(@types/node@20.11.17) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - dev: true - /jiti@1.21.0: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true @@ -11539,6 +11074,10 @@ packages: /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + /js-tokens@8.0.3: + resolution: {integrity: sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==} + dev: true + /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -11550,50 +11089,8 @@ packages: /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - dependencies: - argparse: 2.0.1 - - /jsdom@20.0.3(canvas@2.11.2): - resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} - engines: {node: '>=14'} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - dependencies: - abab: 2.0.6 - acorn: 8.11.3 - acorn-globals: 7.0.1 - canvas: 2.11.2 - cssom: 0.5.0 - cssstyle: 2.3.0 - data-urls: 3.0.2 - decimal.js: 10.4.3 - domexception: 4.0.0 - escodegen: 2.1.0 - form-data: 4.0.0 - html-encoding-sniffer: 3.0.0 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.7 - parse5: 7.1.2 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 4.1.3 - w3c-xmlserializer: 4.0.0 - webidl-conversions: 7.0.0 - whatwg-encoding: 2.0.0 - whatwg-mimetype: 3.0.0 - whatwg-url: 11.0.0 - ws: 8.16.0 - xml-name-validator: 4.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true + dependencies: + argparse: 2.0.1 /jsdom@24.0.0(canvas@2.11.2): resolution: {integrity: sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==} @@ -11802,11 +11299,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - dev: true - /kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -11827,11 +11319,6 @@ packages: language-subtag-registry: 0.3.22 dev: true - /leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - dev: true - /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -11880,6 +11367,14 @@ packages: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} + /local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + dependencies: + mlly: 1.5.0 + pkg-types: 1.0.3 + dev: true + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -11941,10 +11436,6 @@ packages: resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} dev: false - /lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - dev: true - /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true @@ -12016,6 +11507,12 @@ packages: dependencies: js-tokens: 4.0.0 + /loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + dependencies: + get-func-name: 2.0.2 + dev: true + /lower-case-first@2.0.2: resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==} dependencies: @@ -12043,6 +11540,7 @@ packages: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 + dev: false /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} @@ -12079,11 +11577,27 @@ packages: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 + /magic-string@0.30.7: + resolution: {integrity: sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /magicast@0.3.3: + resolution: {integrity: sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw==} + dependencies: + '@babel/parser': 7.23.9 + '@babel/types': 7.23.9 + source-map-js: 1.0.2 + dev: true + /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} dependencies: semver: 6.3.1 + dev: false /make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} @@ -12092,16 +11606,6 @@ packages: semver: 7.6.0 dev: true - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true - - /makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - dependencies: - tmpl: 1.0.5 - dev: true - /map-cache@0.2.2: resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} engines: {node: '>=0.10.0'} @@ -12224,9 +11728,15 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + /mimic-response@2.1.0: resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==} engines: {node: '>=8'} + dev: false /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} @@ -12281,6 +11791,7 @@ packages: engines: {node: '>=8'} dependencies: yallist: 4.0.0 + dev: false /minipass@4.2.8: resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} @@ -12289,6 +11800,7 @@ packages: /minipass@5.0.0: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} + dev: false /minipass@7.0.4: resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} @@ -12300,6 +11812,7 @@ packages: dependencies: minipass: 3.3.6 yallist: 4.0.0 + dev: false /mixme@0.5.10: resolution: {integrity: sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==} @@ -12317,12 +11830,22 @@ packages: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} hasBin: true + dev: false /mkdirp@2.1.6: resolution: {integrity: sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==} engines: {node: '>=10'} hasBin: true + /mlly@1.5.0: + resolution: {integrity: sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==} + dependencies: + acorn: 8.11.3 + pathe: 1.1.2 + pkg-types: 1.0.3 + ufo: 1.4.0 + dev: true + /mobx-react-lite@3.4.3(mobx@6.12.0)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-NkJREyFTSUXR772Qaai51BnE1voWx56LOL80xG7qkZr6vo8vEaLF3sz1JNUVh+rxmUzxYaqOhfuxTfqUh0FXUg==} peerDependencies: @@ -12489,6 +12012,7 @@ packages: /nan@2.18.0: resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} + dev: false /nano-css@5.6.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-T2Mhc//CepkTa3X4pUhKgbEheJHYAxD0VptuqFhDbGMUWVV2m+lkNiW/Ieuj35wrfC8Zm0l7HvssQh7zcEttSw==} @@ -12518,7 +12042,6 @@ packages: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: false /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -12668,6 +12191,7 @@ packages: /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + dev: false /node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} @@ -12678,6 +12202,7 @@ packages: hasBin: true dependencies: abbrev: 1.1.1 + dev: false /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -12705,6 +12230,13 @@ packages: dependencies: path-key: 3.1.1 + /npm-run-path@5.2.0: + resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + /npmlog@5.0.1: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} dependencies: @@ -12712,6 +12244,7 @@ packages: console-control-strings: 1.1.0 gauge: 3.0.2 set-blocking: 2.0.0 + dev: false /nprogress@0.2.0: resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} @@ -12728,6 +12261,7 @@ packages: /nwsapi@2.2.7: resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} + dev: false /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} @@ -12834,6 +12368,13 @@ packages: dependencies: mimic-fn: 2.1.0 + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + /opener@1.5.2: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true @@ -12908,6 +12449,13 @@ packages: dependencies: yocto-queue: 0.1.0 + /p-limit@5.0.0: + resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} + engines: {node: '>=18'} + dependencies: + yocto-queue: 1.0.0 + dev: true + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -13034,6 +12582,11 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -13068,6 +12621,14 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + /pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + dev: true + + /pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + /pause@0.0.1: resolution: {integrity: sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==} dev: false @@ -13088,11 +12649,6 @@ packages: engines: {node: '>=6'} dev: true - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - dev: true - /pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} @@ -13100,6 +12656,14 @@ packages: find-up: 4.1.0 dev: true + /pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + dependencies: + jsonc-parser: 3.2.0 + mlly: 1.5.0 + pathe: 1.1.2 + dev: true + /playwright-core@1.41.2: resolution: {integrity: sha512-VaTvwCA4Y8kxEe+kfm2+uUUw5Lubf38RxF7FpBxLPmGe5sdNkSg5e3ChEigaGrX7qdqT3pt2m/98LiyvU2x6CA==} engines: {node: '>=16'} @@ -13142,6 +12706,15 @@ packages: source-map-js: 1.0.2 dev: false + /postcss@8.4.35: + resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + /preferred-pm@3.1.2: resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==} engines: {node: '>=10'} @@ -13226,14 +12799,6 @@ packages: asap: 2.0.6 dev: false - /prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - dev: true - /prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: @@ -13278,6 +12843,7 @@ packages: /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + dev: false /pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} @@ -13293,10 +12859,6 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - /pure-rand@6.0.4: - resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} - dev: true - /pvtsutils@1.3.5: resolution: {integrity: sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==} dependencies: @@ -13324,6 +12886,7 @@ packages: /querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + dev: false /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -13813,18 +13376,12 @@ packages: /requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + dev: false /resize-observer-polyfill@1.5.1: resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} dev: false - /resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - dependencies: - resolve-from: 5.0.0 - dev: true - /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -13837,11 +13394,6 @@ packages: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} dev: true - /resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} - engines: {node: '>=10'} - dev: true - /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -13902,6 +13454,29 @@ packages: dependencies: glob: 9.3.5 + /rollup@4.12.0: + resolution: {integrity: sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.12.0 + '@rollup/rollup-android-arm64': 4.12.0 + '@rollup/rollup-darwin-arm64': 4.12.0 + '@rollup/rollup-darwin-x64': 4.12.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.12.0 + '@rollup/rollup-linux-arm64-gnu': 4.12.0 + '@rollup/rollup-linux-arm64-musl': 4.12.0 + '@rollup/rollup-linux-riscv64-gnu': 4.12.0 + '@rollup/rollup-linux-x64-gnu': 4.12.0 + '@rollup/rollup-linux-x64-musl': 4.12.0 + '@rollup/rollup-win32-arm64-msvc': 4.12.0 + '@rollup/rollup-win32-ia32-msvc': 4.12.0 + '@rollup/rollup-win32-x64-msvc': 4.12.0 + fsevents: 2.3.3 + dev: true + /rrweb-cssom@0.6.0: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} dev: false @@ -13985,6 +13560,7 @@ packages: engines: {node: '>=v12.22.7'} dependencies: xmlchars: 2.2.0 + dev: false /scheduler@0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} @@ -14237,6 +13813,10 @@ packages: resolution: {integrity: sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==} dev: false + /siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + dev: true + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -14251,6 +13831,7 @@ packages: /simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + dev: false /simple-get@3.1.1: resolution: {integrity: sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==} @@ -14258,6 +13839,7 @@ packages: decompress-response: 4.2.1 once: 1.4.0 simple-concat: 1.0.1 + dev: false /simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} @@ -14274,10 +13856,6 @@ packages: totalist: 3.0.1 dev: true - /sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: true - /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -14382,14 +13960,6 @@ packages: /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - dev: false - - /source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: true /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -14471,11 +14041,8 @@ packages: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} dev: false - /stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - dependencies: - escape-string-regexp: 2.0.0 + /stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} dev: true /stackframe@1.3.4: @@ -14506,6 +14073,10 @@ packages: engines: {node: '>= 0.8'} dev: false + /std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + dev: true + /stop-iteration-iterator@1.0.0: resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} engines: {node: '>= 0.4'} @@ -14528,14 +14099,6 @@ packages: resolution: {integrity: sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==} dev: false - /string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - dev: true - /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -14624,15 +14187,15 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - /strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - dev: true - /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -14645,6 +14208,12 @@ packages: engines: {node: '>=8'} dev: true + /strip-literal@2.0.0: + resolution: {integrity: sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==} + dependencies: + js-tokens: 8.0.3 + dev: true + /strnum@1.0.5: resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} requiresBuild: true @@ -14766,6 +14335,7 @@ packages: /symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + dev: false /synckit@0.8.8: resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} @@ -14789,6 +14359,7 @@ packages: minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 + dev: false /term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} @@ -14882,6 +14453,20 @@ packages: resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} dev: false + /tinybench@2.6.0: + resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} + dev: true + + /tinypool@0.8.2: + resolution: {integrity: sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==} + engines: {node: '>=14.0.0'} + dev: true + + /tinyspy@2.2.1: + resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} + engines: {node: '>=14.0.0'} + dev: true + /tippy.js@6.3.7: resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} dependencies: @@ -14900,10 +14485,6 @@ packages: dependencies: os-tmpdir: 1.0.2 - /tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - dev: true - /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -14940,6 +14521,7 @@ packages: punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 + dev: false /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -14949,6 +14531,7 @@ packages: engines: {node: '>=12'} dependencies: punycode: 2.3.1 + dev: false /tr46@5.0.0: resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} @@ -14991,40 +14574,6 @@ packages: tslib: 2.6.2 dev: false - /ts-jest@29.1.2(@babel/core@7.23.9)(jest@29.7.0)(typescript@5.3.3): - resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} - engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/types': ^29.0.0 - babel-jest: ^29.0.0 - esbuild: '*' - jest: ^29.0.0 - typescript: '>=4.3 <6' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - dependencies: - '@babel/core': 7.23.9 - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.11.17) - jest-util: 29.7.0 - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.5.4 - typescript: 5.3.3 - yargs-parser: 21.1.1 - dev: true - /ts-log@2.2.5: resolution: {integrity: sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA==} dev: false @@ -15268,6 +14817,10 @@ packages: resolution: {integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==} dev: false + /ufo@1.4.0: + resolution: {integrity: sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==} + dev: true + /uid@2.0.2: resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} engines: {node: '>=8'} @@ -15300,6 +14853,7 @@ packages: /universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} + dev: false /universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} @@ -15343,6 +14897,7 @@ packages: browserslist: 4.23.0 escalade: 3.1.1 picocolors: 1.0.0 + dev: false /upper-case-first@2.0.2: resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} @@ -15366,6 +14921,7 @@ packages: dependencies: querystringify: 2.2.0 requires-port: 1.0.0 + dev: false /url-template@2.0.8: resolution: {integrity: sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==} @@ -15455,18 +15011,122 @@ packages: engines: {node: '>= 0.8'} dev: false + /vite-node@1.3.0: + resolution: {integrity: sha512-D/oiDVBw75XMnjAXne/4feCkCEwcbr2SU1bjAhCcfI5Bq3VoOHji8/wCPAfUkDIeohJ5nSZ39fNxM3dNZ6OBOA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4(supports-color@5.5.0) + pathe: 1.1.2 + picocolors: 1.0.0 + vite: 5.1.3 + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vite@5.1.3: + resolution: {integrity: sha512-UfmUD36DKkqhi/F75RrxvPpry+9+tTkrXfMNZD+SboZqBCMsxKtO52XeGzzuh7ioz+Eo/SYDBbdb0Z7vgcDJew==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.19.12 + postcss: 8.4.35 + rollup: 4.12.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /vitest@1.3.0: + resolution: {integrity: sha512-V9qb276J1jjSx9xb75T2VoYXdO1UKi+qfflY7V7w93jzX7oA/+RtYE6TcifxksxsZvygSSMwu2Uw6di7yqDMwg==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 1.3.0 + '@vitest/ui': 1.3.0 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + dependencies: + '@vitest/expect': 1.3.0 + '@vitest/runner': 1.3.0 + '@vitest/snapshot': 1.3.0 + '@vitest/spy': 1.3.0 + '@vitest/utils': 1.3.0 + acorn-walk: 8.3.2 + chai: 4.4.1 + debug: 4.3.4(supports-color@5.5.0) + execa: 8.0.1 + local-pkg: 0.5.0 + magic-string: 0.30.7 + pathe: 1.1.2 + picocolors: 1.0.0 + std-env: 3.7.0 + strip-literal: 2.0.0 + tinybench: 2.6.0 + tinypool: 0.8.2 + vite: 5.1.3 + vite-node: 1.3.0 + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + /void-elements@3.1.0: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} dev: false - /w3c-xmlserializer@4.0.0: - resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} - engines: {node: '>=14'} - dependencies: - xml-name-validator: 4.0.0 - dev: true - /w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} @@ -15474,12 +15134,6 @@ packages: xml-name-validator: 5.0.0 dev: false - /walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - dependencies: - makeerror: 1.0.12 - dev: true - /warning@4.0.3: resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==} dependencies: @@ -15519,6 +15173,7 @@ packages: /webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} + dev: false /webpack-bundle-analyzer@4.10.1: resolution: {integrity: sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==} @@ -15590,13 +15245,6 @@ packages: - esbuild - uglify-js - /whatwg-encoding@2.0.0: - resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} - engines: {node: '>=12'} - dependencies: - iconv-lite: 0.6.3 - dev: true - /whatwg-encoding@3.1.1: resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} engines: {node: '>=18'} @@ -15607,6 +15255,7 @@ packages: /whatwg-mimetype@3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} + dev: false /whatwg-mimetype@4.0.0: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} @@ -15619,6 +15268,7 @@ packages: dependencies: tr46: 3.0.0 webidl-conversions: 7.0.0 + dev: false /whatwg-url@14.0.0: resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} @@ -15707,10 +15357,20 @@ packages: dependencies: isexe: 2.0.0 + /why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + dev: true + /wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} dependencies: string-width: 4.2.3 + dev: false /windows-release@4.0.0: resolution: {integrity: sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==} @@ -15772,14 +15432,6 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - /write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - dev: true - /ws@7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} @@ -15816,11 +15468,7 @@ packages: optional: true utf-8-validate: optional: true - - /xml-name-validator@4.0.0: - resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} - engines: {node: '>=12'} - dev: true + dev: false /xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} @@ -15829,6 +15477,7 @@ packages: /xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + dev: false /xss@1.0.14: resolution: {integrity: sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==} @@ -15864,6 +15513,7 @@ packages: /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: false /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -15924,6 +15574,11 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + /yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: true + /yup@1.3.3: resolution: {integrity: sha512-v8QwZSsHH2K3/G9WSkp6mZKO+hugKT1EmnMqLNUcfu51HU9MDyhlETT/JgtzprnrnQHPWsjc6MUDMBp/l9fNnw==} dependencies: diff --git a/turbo.json b/turbo.json index 6e7f5c68d..97da7d08f 100644 --- a/turbo.json +++ b/turbo.json @@ -15,6 +15,7 @@ "cache": false }, "test": {}, + "test:cov": {}, "test:e2e": { "outputs": ["playwright-report/**"] }