diff --git a/fittrackee_client/package.json b/fittrackee_client/package.json index 3c9f9ad8..1e074d81 100644 --- a/fittrackee_client/package.json +++ b/fittrackee_client/package.json @@ -6,6 +6,7 @@ "dev": "vite", "build": "run-p type-check \"build-only {@}\" --", "preview": "vite preview", + "test:unit": "vitest", "build-only": "vite build", "type-check": "vue-tsc --noEmit -p tsconfig.app.json --composite false", "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", @@ -44,22 +45,23 @@ "@intlify/vue-i18n-loader": "^4.2.0", "@rushstack/eslint-patch": "^1.3.3", "@tsconfig/node18": "^18.2.2", - "@types/chai": "^4.3.10", - "@types/mocha": "^10.0.4", + "@types/jsdom": "^21.1.3", "@types/node": "^20.9.0", "@types/sanitize-html": "^2.9.4", "@vitejs/plugin-vue": "^4.4.0", "@vue/eslint-config-prettier": "^8.0.0", "@vue/eslint-config-typescript": "^12.0.0", + "@vue/test-utils": "^2.4.1", "@vue/tsconfig": "^0.4.0", - "chai": "^4.3.10", "eslint": "^8.49.0", "eslint-plugin-vue": "^9.17.0", + "jsdom": "^22.1.0", "npm-run-all2": "^6.1.1", "prettier": "^3.0.3", "sass": "^1.69.5", "typescript": "~5.2.0", "vite": "^4.4.11", + "vitest": "^0.34.6", "vue-tsc": "^1.8.19" } } diff --git a/fittrackee_client/tests/unit/example.spec.ts b/fittrackee_client/tests/unit/example.spec.ts deleted file mode 100644 index 7498613b..00000000 --- a/fittrackee_client/tests/unit/example.spec.ts +++ /dev/null @@ -1,13 +0,0 @@ -// import { expect } from 'chai' -// import { shallowMount } from '@vue/test-utils' -// import NavBar from '@/components/NavBar.vue' -// -// describe('NavBar.vue', () => { -// it('renders props.msg when passed', () => { -// const msg = 'new message' -// const wrapper = shallowMount(NavBar, { -// props: { msg }, -// }) -// expect(wrapper.text()).to.include(msg) -// }) -// }) diff --git a/fittrackee_client/tests/unit/utils/api.spec.ts b/fittrackee_client/tests/unit/utils/api.spec.ts index fcf7c1b7..e978abc3 100644 --- a/fittrackee_client/tests/unit/utils/api.spec.ts +++ b/fittrackee_client/tests/unit/utils/api.spec.ts @@ -1,4 +1,4 @@ -import { assert } from 'chai' +import { describe, it, expect } from 'vitest' import { defaultPerPage, @@ -50,13 +50,9 @@ describe('getNumberQueryValue', () => { testsParams.map((testParams) => { it(testParams.description, () => { - assert.equal( - getNumberQueryValue( - testParams.inputValue, - testParams.inputDefaultValue - ), - testParams.expectedValue - ) + expect( + getNumberQueryValue(testParams.inputValue, testParams.inputDefaultValue) + ).toBe(testParams.expectedValue) }) }) }) @@ -85,14 +81,13 @@ describe('getStringQueryValue', () => { testsParams.map((testParams) => { it(testParams.description, () => { - assert.equal( + expect( getStringQueryValue( testParams.inputValue, sortList, testParams.inputDefaultValue - ), - testParams.expectedValue - ) + ) + ).toBe(testParams.expectedValue) }) }) }) @@ -169,19 +164,18 @@ describe('getQuery', () => { testsParams.map((testParams) => { it(testParams.description, () => { - assert.deepEqual( + expect( getQuery(testParams.inputLocationQuery, orderByList, defaultOrderBy, { defaultSort, - }), - testParams.expectedQuery - ) + }) + ).toStrictEqual(testParams.expectedQuery) }) }) }) describe('getQuery w/ default values', () => { it('returns default query if location query is an empty object', () => { - assert.deepEqual(getQuery({}, orderByList, defaultOrderBy), { + expect(getQuery({}, orderByList, defaultOrderBy)).toStrictEqual({ page: 1, per_page: 10, order: 'asc', @@ -199,46 +193,48 @@ describe('getQuery w/ default values and input pagination payload', () => { } it('returns query updated with default values', () => { - assert.deepEqual( - getQuery({}, orderByList, defaultOrderBy, { query: inputQuery }), - { - page: 1, - per_page: 10, - order: 'asc', - order_by: defaultOrderBy, - } - ) + expect( + getQuery({}, orderByList, defaultOrderBy, { query: inputQuery }) + ).toStrictEqual({ + page: 1, + per_page: 10, + order: 'asc', + order_by: defaultOrderBy, + }) }) it('returns query updated with input values', () => { - assert.deepEqual( + expect( getQuery({}, orderByList, defaultOrderBy, { defaultSort: 'desc', query: inputQuery, - }), - { - page: 1, - per_page: 10, - order: 'desc', - order_by: defaultOrderBy, - } - ) + }) + ).toStrictEqual({ + page: 1, + per_page: 10, + order: 'desc', + order_by: defaultOrderBy, + }) }) it('returns query updated', () => { - assert.deepEqual( + expect( getQuery( { page: '3', per_page: '10', order: 'asc', order_by: 'workouts_count' }, orderByList, defaultOrderBy, { query: inputQuery } - ), - { page: 3, per_page: 10, order: 'asc', order_by: 'workouts_count' } - ) + ) + ).toStrictEqual({ + page: 3, + per_page: 10, + order: 'asc', + order_by: 'workouts_count', + }) }) it('returns query with only pagination keys', () => { - assert.deepEqual( + expect( getQuery( { page: '3', @@ -250,9 +246,13 @@ describe('getQuery w/ default values and input pagination payload', () => { orderByList, defaultOrderBy, { query: inputQuery } - ), - { page: 3, per_page: 10, order: 'asc', order_by: 'workouts_count' } - ) + ) + ).toStrictEqual({ + page: 3, + per_page: 10, + order: 'asc', + order_by: 'workouts_count', + }) }) }) @@ -385,10 +385,9 @@ describe('rangePagination', () => { testsParams.map((testParams) => { it(testParams.description, () => { - assert.deepEqual( - rangePagination(testParams.input.pages, testParams.input.currentPage), - testParams.expectedPagination - ) + expect( + rangePagination(testParams.input.pages, testParams.input.currentPage) + ).toStrictEqual(testParams.expectedPagination) }) }) }) diff --git a/fittrackee_client/tests/unit/utils/dates.spec.ts b/fittrackee_client/tests/unit/utils/dates.spec.ts index def2bd50..f1284354 100644 --- a/fittrackee_client/tests/unit/utils/dates.spec.ts +++ b/fittrackee_client/tests/unit/utils/dates.spec.ts @@ -1,4 +1,4 @@ -import { assert, expect } from 'chai' +import { describe, it, expect } from 'vitest' import { getCalendarStartAndEnd, @@ -36,8 +36,7 @@ describe('startDate (week starting Sunday)', () => { it(testParams.description, () => { const day: Date = new Date(testParams.inputDate) const expected: Date = new Date(testParams.expectedDate) - assert.deepEqual( - getStartDate(testParams.inputDuration, day, false), + expect(getStartDate(testParams.inputDuration, day, false)).toStrictEqual( expected ) }) @@ -70,8 +69,7 @@ describe('startDate (week starting Monday)', () => { it(testParams.description, () => { const day: Date = new Date(testParams.inputDate) const expected: Date = new Date(testParams.expectedDate) - assert.deepEqual( - getStartDate(testParams.inputDuration, day, true), + expect(getStartDate(testParams.inputDuration, day, true)).toStrictEqual( expected ) }) @@ -133,7 +131,9 @@ describe('dateIncrement', () => { it(testParams.description, () => { const day: Date = new Date(testParams.inputDate) const expected: Date = new Date(testParams.expectedDate) - assert.deepEqual(incrementDate(testParams.inputDuration, day), expected) + expect(incrementDate(testParams.inputDuration, day)).toStrictEqual( + expected + ) }) ) }) @@ -173,8 +173,10 @@ describe('getCalendarStartAndEnd', () => { date, testParams.inputWeekStartingMonday ) - assert.deepEqual(results.start, new Date(testParams.expectedStartDate)) - assert.deepEqual(results.end, new Date(testParams.expectedEndDate)) + expect(results.start).toStrictEqual( + new Date(testParams.expectedStartDate) + ) + expect(results.end).toStrictEqual(new Date(testParams.expectedEndDate)) }) ) }) @@ -232,14 +234,13 @@ describe('formatWorkoutDate', () => { ] testsParams.map((testParams) => { it(testParams.description, () => { - assert.deepEqual( + expect( formatWorkoutDate( testParams.inputParams.date, testParams.inputParams.dateFormat, testParams.inputParams.timeFormat - ), - testParams.expected - ) + ) + ).toStrictEqual(testParams.expected) }) }) }) @@ -271,31 +272,29 @@ describe('formatDate', () => { ] testsParams.map((testParams) => { it(testParams.description, () => { - assert.deepEqual( + expect( formatDate( dateString, testParams.inputParams.timezone, testParams.inputParams.dateFormat, testParams.inputParams.withTime - ), - testParams.expectedDate - ) + ) + ).toStrictEqual(testParams.expectedDate) }) }) }) describe('formatDate (w/ default value)', () => { it('format date for "Europe/Paris" timezone and "dd/MM/yyyy" format', () => { - assert.deepEqual( - formatDate('Tue, 01 Nov 2022 00:00:00 GMT', 'Europe/Paris', 'yyyy-MM-dd'), - '2022-11-01 01:00' - ) + expect( + formatDate('Tue, 01 Nov 2022 00:00:00 GMT', 'Europe/Paris', 'yyyy-MM-dd') + ).toBe('2022-11-01 01:00') }) }) describe('formatDate with_seconds', () => { it('format date for "Europe/Paris" timezone and "dd/MM/yyyy" format and seconds', () => { - assert.deepEqual( + expect( formatDate( 'Tue, 01 Nov 2022 00:00:00 GMT', 'Europe/Paris', @@ -303,9 +302,8 @@ describe('formatDate with_seconds', () => { true, null, true - ), - '2022-11-01 01:00:00' - ) + ) + ).toBe('2022-11-01 01:00:00') }) }) @@ -356,13 +354,12 @@ describe('getDateFormat', () => { ] testsParams.map((testParams) => { it(`get date format for "${testParams.inputParams.language}" and "${testParams.inputParams.dateFormat}" `, () => { - assert.deepEqual( + expect( getDateFormat( testParams.inputParams.dateFormat, testParams.inputParams.language - ), - testParams.expectedFormat - ) + ) + ).toBe(testParams.expectedFormat) }) }) }) @@ -403,14 +400,13 @@ describe('availableDateFormatOptions', () => { testsParams.map((testParams) => { it(`returns available options for ${testParams.inputLanguage} locale`, () => { - assert.deepEqual( + expect( availableDateFormatOptions( inputDate, inputTimezone, testParams.inputLanguage - ), - testParams.expectedOptions - ) + ) + ).toStrictEqual(testParams.expectedOptions) }) }) }) diff --git a/fittrackee_client/tests/unit/utils/duration.spec.ts b/fittrackee_client/tests/unit/utils/duration.spec.ts index 40f1f4a6..7fef551c 100644 --- a/fittrackee_client/tests/unit/utils/duration.spec.ts +++ b/fittrackee_client/tests/unit/utils/duration.spec.ts @@ -1,4 +1,4 @@ -import { assert } from 'chai' +import { describe, it, expect } from 'vitest' import { formatDuration } from '@/utils/duration' @@ -43,8 +43,7 @@ describe('formatDuration (without days)', () => { testsParams.map((testParams) => { it(testParams.description, () => { - assert.equal( - formatDuration(testParams.inputDuration), + expect(formatDuration(testParams.inputDuration)).toStrictEqual( testParams.expectedDuration ) }) @@ -92,8 +91,7 @@ describe('formatDuration (with days)', () => { testsParams.map((testParams) => { it(testParams.description, () => { - assert.equal( - formatDuration(testParams.inputDuration, true), + expect(formatDuration(testParams.inputDuration, true)).toStrictEqual( testParams.expectedDuration ) }) diff --git a/fittrackee_client/tests/unit/utils/files.spec.ts b/fittrackee_client/tests/unit/utils/files.spec.ts index cc785c44..8cd4e70a 100644 --- a/fittrackee_client/tests/unit/utils/files.spec.ts +++ b/fittrackee_client/tests/unit/utils/files.spec.ts @@ -1,4 +1,4 @@ -import { assert } from 'chai' +import { describe, it, expect } from 'vitest' import { getFileSizeInMB, getReadableFileSize } from '@/utils/files' @@ -23,8 +23,7 @@ describe('getReadableFileSize (as text)', () => { testsParams.map((testParams) => { it(testParams.description, () => { - assert.equal( - getReadableFileSize(testParams.inputFileSize, true), + expect(getReadableFileSize(testParams.inputFileSize, true)).toStrictEqual( testParams.expectedReadableFileSize ) }) @@ -52,10 +51,9 @@ describe('getReadableFileSize (as object)', () => { testsParams.map((testParams) => { it(testParams.description, () => { - assert.deepEqual( - getReadableFileSize(testParams.inputFileSize, false), - testParams.expectedReadableFileSize - ) + expect( + getReadableFileSize(testParams.inputFileSize, false) + ).toStrictEqual(testParams.expectedReadableFileSize) }) }) }) @@ -81,8 +79,7 @@ describe('getFileSizeInMB', () => { testsParams.map((testParams) => { it(testParams.description, () => { - assert.deepEqual( - getFileSizeInMB(testParams.inputFileSize), + expect(getFileSizeInMB(testParams.inputFileSize)).toStrictEqual( testParams.expectedFileSize ) }) diff --git a/fittrackee_client/tests/unit/utils/inputs.spec.ts b/fittrackee_client/tests/unit/utils/inputs.spec.ts index f995754f..75a41f58 100644 --- a/fittrackee_client/tests/unit/utils/inputs.spec.ts +++ b/fittrackee_client/tests/unit/utils/inputs.spec.ts @@ -1,4 +1,4 @@ -import { assert } from 'chai' +import { describe, it, expect } from 'vitest' import { linkifyAndClean } from '@/utils/inputs' @@ -11,15 +11,14 @@ describe('linkifyAndClean (clean input remains unchanged)', () => { testInputs.map((testInput) => { it(`it returns unmodified input: '${testInput}'`, () => { - assert.equal(linkifyAndClean(testInput), testInput) + expect(linkifyAndClean(testInput)).toBe(testInput) }) }) }) describe('linkifyAndClean (URL is linkified)', () => { it('it returns URL as link with target blank', () => { - assert.equal( - linkifyAndClean('link: http://www.example.com'), + expect(linkifyAndClean('link: http://www.example.com')).toBe( 'link: http://www.example.com' ) }) @@ -62,8 +61,7 @@ describe('linkifyAndClean (input sanitization)', () => { testsParams.map((testParams) => { it(testParams.description, () => { - assert.equal( - linkifyAndClean(testParams.inputString), + expect(linkifyAndClean(testParams.inputString)).toBe( testParams.expectedString ) }) diff --git a/fittrackee_client/tests/unit/utils/records.spec.ts b/fittrackee_client/tests/unit/utils/records.spec.ts index b3398c0a..bb1645f1 100644 --- a/fittrackee_client/tests/unit/utils/records.spec.ts +++ b/fittrackee_client/tests/unit/utils/records.spec.ts @@ -1,4 +1,4 @@ -import { assert, expect } from 'chai' +import { describe, it, expect } from 'vitest' import { translatedSports } from './fixtures' @@ -19,7 +19,7 @@ describe('formatRecord', () => { workout_id: 'hvYBqYBRa7wwXpaStWR4V2', }, timezone: 'Europe/Paris', - date_format: 'yyyy/dd/MM' + date_format: 'yyyy/dd/MM', }, expected: { id: 9, @@ -42,7 +42,7 @@ describe('formatRecord', () => { workout_id: 'hvYBqYBRa7wwXpaStWR4V2', }, timezone: 'Europe/Paris', - date_format: 'yyyy/MM/dd' + date_format: 'yyyy/MM/dd', }, expected: { id: 10, @@ -65,7 +65,7 @@ describe('formatRecord', () => { workout_id: 'hvYBqYBRa7wwXpaStWR4V2', }, timezone: 'Europe/Paris', - date_format: 'yyyy/MM/dd' + date_format: 'yyyy/MM/dd', }, expected: { id: 11, @@ -88,7 +88,7 @@ describe('formatRecord', () => { workout_id: 'hvYBqYBRa7wwXpaStWR4V2', }, timezone: 'Europe/Paris', - date_format: 'dd/MM/yyyy' + date_format: 'dd/MM/yyyy', }, expected: { id: 12, @@ -111,7 +111,7 @@ describe('formatRecord', () => { workout_id: 'hvYBqYBRa7wwXpaStWR4V2', }, timezone: 'Europe/Paris', - date_format: 'MMM. do, yyyy' + date_format: 'MMM. do, yyyy', }, expected: { id: 13, @@ -124,15 +124,14 @@ describe('formatRecord', () => { ] testsParams.map((testParams) => { it(testParams.description, () => { - assert.deepEqual( + expect( formatRecord( testParams.inputParams.record, testParams.inputParams.timezone, false, testParams.inputParams.date_format - ), - testParams.expected - ) + ) + ).toStrictEqual(testParams.expected) }) }) }) @@ -152,7 +151,7 @@ describe('formatRecord after conversion', () => { workout_id: 'hvYBqYBRa7wwXpaStWR4V2', }, timezone: 'Europe/Paris', - date_format: 'yyyy/dd/MM' + date_format: 'yyyy/dd/MM', }, expected: { id: 9, @@ -175,7 +174,7 @@ describe('formatRecord after conversion', () => { workout_id: 'hvYBqYBRa7wwXpaStWR4V2', }, timezone: 'Europe/Paris', - date_format: 'yyyy/dd/MM' + date_format: 'yyyy/dd/MM', }, expected: { id: 10, @@ -198,7 +197,7 @@ describe('formatRecord after conversion', () => { workout_id: 'hvYBqYBRa7wwXpaStWR4V2', }, timezone: 'Europe/Paris', - date_format: 'yyyy/dd/MM' + date_format: 'yyyy/dd/MM', }, expected: { id: 11, @@ -221,7 +220,7 @@ describe('formatRecord after conversion', () => { workout_id: 'hvYBqYBRa7wwXpaStWR4V2', }, timezone: 'Europe/Paris', - date_format: 'yyyy/dd/MM' + date_format: 'yyyy/dd/MM', }, expected: { id: 12, @@ -244,7 +243,7 @@ describe('formatRecord after conversion', () => { workout_id: 'hvYBqYBRa7wwXpaStWR4V2', }, timezone: 'Europe/Paris', - date_format: 'yyyy/dd/MM' + date_format: 'yyyy/dd/MM', }, expected: { id: 13, @@ -257,15 +256,14 @@ describe('formatRecord after conversion', () => { ] testsParams.map((testParams) => { it(testParams.description, () => { - assert.deepEqual( + expect( formatRecord( testParams.inputParams.record, testParams.inputParams.timezone, true, testParams.inputParams.date_format - ), - testParams.expected - ) + ) + ).toStrictEqual(testParams.expected) }) }) }) @@ -300,7 +298,7 @@ describe('getRecordsBySports', () => { input: { records: [], tz: 'Europe/Paris', - date_format: 'yyyy/dd/MM' + date_format: 'yyyy/dd/MM', }, expected: {}, }, @@ -319,7 +317,7 @@ describe('getRecordsBySports', () => { }, ], tz: 'Europe/Paris', - date_format: 'yyyy/dd/MM' + date_format: 'yyyy/dd/MM', }, expected: { 'Cycling (Sport)': { @@ -370,7 +368,7 @@ describe('getRecordsBySports', () => { }, ], tz: 'Europe/Paris', - date_format: 'yyyy/dd/MM' + date_format: 'yyyy/dd/MM', }, expected: { 'Cycling (Sport)': { @@ -411,7 +409,7 @@ describe('getRecordsBySports', () => { ] testsParams.map((testParams) => it(testParams.description, () => { - assert.deepEqual( + expect( getRecordsBySports( testParams.input.records, translatedSports, @@ -419,11 +417,8 @@ describe('getRecordsBySports', () => { false, true, testParams.input.date_format - ), - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - testParams.expected - ) + ) + ).toStrictEqual(testParams.expected) }) ) }) @@ -435,7 +430,7 @@ describe('getRecordsBySports after conversion', () => { input: { records: [], tz: 'Europe/Paris', - date_format: 'yyyy/dd/MM' + date_format: 'yyyy/dd/MM', }, expected: {}, }, @@ -454,7 +449,7 @@ describe('getRecordsBySports after conversion', () => { }, ], tz: 'Europe/Paris', - date_format: 'yyyy/dd/MM' + date_format: 'yyyy/dd/MM', }, expected: { 'Cycling (Sport)': { @@ -505,7 +500,7 @@ describe('getRecordsBySports after conversion', () => { }, ], tz: 'Europe/Paris', - date_format: 'yyyy/dd/MM' + date_format: 'yyyy/dd/MM', }, expected: { 'Cycling (Sport)': { @@ -546,7 +541,7 @@ describe('getRecordsBySports after conversion', () => { ] testsParams.map((testParams) => it(testParams.description, () => { - assert.deepEqual( + expect( getRecordsBySports( testParams.input.records, translatedSports, @@ -554,11 +549,8 @@ describe('getRecordsBySports after conversion', () => { true, true, testParams.input.date_format - ), - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - testParams.expected - ) + ) + ).toStrictEqual(testParams.expected) }) ) }) @@ -570,7 +562,7 @@ describe('getRecordsBySports with HA record', () => { input: { records: [], tz: 'Europe/Paris', - date_format: 'yyyy/dd/MM' + date_format: 'yyyy/dd/MM', }, expected: {}, }, @@ -598,7 +590,7 @@ describe('getRecordsBySports with HA record', () => { }, ], tz: 'Europe/Paris', - date_format: 'yyyy/dd/MM' + date_format: 'yyyy/dd/MM', }, expected: { 'Cycling (Sport)': { @@ -619,7 +611,7 @@ describe('getRecordsBySports with HA record', () => { ] testsParams.map((testParams) => it(testParams.description, () => { - assert.deepEqual( + expect( getRecordsBySports( testParams.input.records, translatedSports, @@ -627,11 +619,8 @@ describe('getRecordsBySports with HA record', () => { false, false, testParams.input.date_format - ), - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - testParams.expected - ) + ) + ).toStrictEqual(testParams.expected) }) ) }) diff --git a/fittrackee_client/tests/unit/utils/sports.spec.ts b/fittrackee_client/tests/unit/utils/sports.spec.ts index d22a081d..3f5269dc 100644 --- a/fittrackee_client/tests/unit/utils/sports.spec.ts +++ b/fittrackee_client/tests/unit/utils/sports.spec.ts @@ -1,4 +1,4 @@ -import { assert } from 'chai' +import { describe, it, expect } from 'vitest' import { sports } from './fixtures' @@ -451,15 +451,14 @@ describe('translateSports', () => { testsParams.map((testParams) => { it(testParams.description, () => { locale.value = testParams.inputParams.locale - assert.deepEqual( + expect( translateSports( testParams.inputParams.sports, t, testParams.inputParams.activeStatus, testParams.inputParams.sportsToInclude - ), - testParams.expected - ) + ) + ).toStrictEqual(testParams.expected) }) }) }) diff --git a/fittrackee_client/tests/unit/utils/statistics.spec.ts b/fittrackee_client/tests/unit/utils/statistics.spec.ts index 4084b065..a7a0ba46 100644 --- a/fittrackee_client/tests/unit/utils/statistics.spec.ts +++ b/fittrackee_client/tests/unit/utils/statistics.spec.ts @@ -1,4 +1,4 @@ -import { assert } from 'chai' +import { describe, it, expect } from 'vitest' import { sports } from './fixtures' @@ -87,7 +87,7 @@ describe('getDateKeys (week starting Sunday)', () => { const expected: Date[] = testParams.expected.map( (date_string: string) => new Date(date_string) ) - assert.deepEqual(getDateKeys(testParams.inputParams, false), expected) + expect(getDateKeys(testParams.inputParams, false)).toStrictEqual(expected) }) ) }) @@ -162,7 +162,7 @@ describe('getDateKeys (week starting Monday)', () => { const expected: Date[] = testParams.expected.map( (date_string: string) => new Date(date_string) ) - assert.deepEqual(getDateKeys(testParams.inputParams, true), expected) + expect(getDateKeys(testParams.inputParams, true)).toStrictEqual(expected) }) ) }) @@ -282,8 +282,9 @@ describe('getDatasets', () => { }, ], } - assert.deepEqual(getDatasets(sports), expected) + expect(getDatasets(sports)).toStrictEqual(expected) }) + it('returns chart datasets with only displayed sports', () => { const expected: TStatisticsDatasets = { average_speed: [ @@ -332,7 +333,7 @@ describe('getDatasets', () => { }, ], } - assert.deepEqual(getDatasets([sports[1]]), expected) + expect(getDatasets([sports[1]])).toStrictEqual(expected) }) }) @@ -355,7 +356,7 @@ describe('formatStats', () => { total_descent: [], }, } - assert.deepEqual( + expect( formatStats( inputParams, false, @@ -364,9 +365,8 @@ describe('formatStats', () => { inputStats, false, 'MM/dd/yyyy' - ), - expected - ) + ) + ).toStrictEqual(expected) }) it('returns empty datasets if no data and displayed sport provided', () => { @@ -426,7 +426,7 @@ describe('formatStats', () => { ], }, } - assert.deepEqual( + expect( formatStats( inputParams, false, @@ -435,9 +435,8 @@ describe('formatStats', () => { inputStats, false, 'MM/dd/yyyy' - ), - expected - ) + ) + ).toStrictEqual(expected) }) it('returns empty datasets if data provided but no displayed sport', () => { @@ -497,7 +496,7 @@ describe('formatStats', () => { total_descent: [], }, } - assert.deepEqual( + expect( formatStats( inputParams, false, @@ -506,9 +505,8 @@ describe('formatStats', () => { inputStats, false, 'MM/dd/yyyy' - ), - expected - ) + ) + ).toStrictEqual(expected) }) it('returns datasets when data and displayed sport provided', () => { @@ -607,7 +605,7 @@ describe('formatStats', () => { ], }, } - assert.deepEqual( + expect( formatStats( inputParams, false, @@ -616,9 +614,8 @@ describe('formatStats', () => { inputStats, false, 'MM/dd/yyyy' - ), - expected - ) + ) + ).toStrictEqual(expected) }) }) @@ -719,7 +716,7 @@ describe('formatStats (duration)', () => { ], }, } - assert.deepEqual( + expect( formatStats( inputParams, false, @@ -728,9 +725,8 @@ describe('formatStats (duration)', () => { inputStats, false, 'MM/dd/yyyy' - ), - expected - ) + ) + ).toStrictEqual(expected) }) it("returns datasets when duration is 'month'", () => { const inputStats: TStatisticsFromApi = { @@ -828,7 +824,7 @@ describe('formatStats (duration)', () => { ], }, } - assert.deepEqual( + expect( formatStats( inputParams, false, @@ -837,9 +833,8 @@ describe('formatStats (duration)', () => { inputStats, false, 'MM/dd/yyyy' - ), - expected - ) + ) + ).toStrictEqual(expected) }) it("returns datasets when duration is 'week' and week starts on Sunday", () => { @@ -938,7 +933,7 @@ describe('formatStats (duration)', () => { ], }, } - assert.deepEqual( + expect( formatStats( inputParams, false, @@ -947,9 +942,8 @@ describe('formatStats (duration)', () => { inputStats, false, 'MM/dd/yyyy' - ), - expected - ) + ) + ).toStrictEqual(expected) }) it("returns datasets when duration is 'week' and week starts on Monday", () => { @@ -1048,7 +1042,7 @@ describe('formatStats (duration)', () => { ], }, } - assert.deepEqual( + expect( formatStats( inputParams, true, @@ -1057,9 +1051,8 @@ describe('formatStats (duration)', () => { inputStats, false, 'MM/dd/yyyy' - ), - expected - ) + ) + ).toStrictEqual(expected) }) it("returns datasets when duration is 'week' and date format 'dd/MM/yyyy'", () => { @@ -1158,7 +1151,7 @@ describe('formatStats (duration)', () => { ], }, } - assert.deepEqual( + expect( formatStats( inputParams, false, @@ -1167,9 +1160,8 @@ describe('formatStats (duration)', () => { inputStats, false, 'dd/MM/yyyy' - ), - expected - ) + ) + ).toStrictEqual(expected) }) it("returns datasets when duration is 'week' and date format is 'date_string'", () => { @@ -1269,7 +1261,7 @@ describe('formatStats (duration)', () => { ], }, } - assert.deepEqual( + expect( formatStats( inputParams, false, @@ -1278,9 +1270,8 @@ describe('formatStats (duration)', () => { inputStats, false, 'date_string' - ), - expected - ) + ) + ).toStrictEqual(expected) }) it('returns datasets after conversion to imperial units', () => { @@ -1379,7 +1370,7 @@ describe('formatStats (duration)', () => { ], }, } - assert.deepEqual( + expect( formatStats( inputParams, false, @@ -1388,9 +1379,8 @@ describe('formatStats (duration)', () => { inputStats, true, 'MM/dd/yyyy' - ), - expected - ) + ) + ).toStrictEqual(expected) }) }) @@ -1425,14 +1415,9 @@ describe("getStatsDateParams when time frame is 'month')", () => { testsParams.map((testParams) => { it(testParams.description, () => { - assert.deepEqual( - getStatsDateParams( - testParams.input.date, - 'month', - weekStartingMonday - ), - testParams.expected - ) + expect( + getStatsDateParams(testParams.input.date, 'month', weekStartingMonday) + ).toStrictEqual(testParams.expected) }) }) }) @@ -1469,10 +1454,9 @@ describe("getStatsDateParams when time frame is 'year')", () => { testsParams.map((testParams) => { it(testParams.description, () => { - assert.deepEqual( - getStatsDateParams(testParams.input.date, 'year', weekStartingMonday), - testParams.expected - ) + expect( + getStatsDateParams(testParams.input.date, 'year', weekStartingMonday) + ).toStrictEqual(testParams.expected) }) }) }) @@ -1537,14 +1521,13 @@ describe("getStatsDateParams when time frame is 'week')", () => { testsParams.map((testParams) => { it(testParams.description, () => { - assert.deepEqual( + expect( getStatsDateParams( testParams.input.date, 'week', testParams.input.weekStartingMonday - ), - testParams.expected - ) + ) + ).toStrictEqual(testParams.expected) }) }) }) @@ -1626,14 +1609,13 @@ describe("updateChartParams when time frame is 'month')", () => { testsParams.map((testParams) => { it(testParams.description, () => { - assert.deepEqual( + expect( updateChartParams( testParams.input.chartParams, testParams.input.backward, weekStartingMonday - ), - testParams.expected - ) + ) + ).toStrictEqual(testParams.expected) }) }) }) @@ -1712,14 +1694,13 @@ describe("updateChartParams when time frame is 'year')", () => { testsParams.map((testParams) => { it(testParams.description, () => { - assert.deepEqual( + expect( updateChartParams( testParams.input.chartParams, testParams.input.backward, weekStartingMonday - ), - testParams.expected - ) + ) + ).toStrictEqual(testParams.expected) }) }) }) @@ -1803,14 +1784,13 @@ describe("updateChartParams when time frame is 'week')", () => { testsParams.map((testParams) => { it(testParams.description, () => { - assert.deepEqual( + expect( updateChartParams( testParams.input.chartParams, testParams.input.backward, testParams.input.weekStartingMonday - ), - testParams.expected - ) + ) + ).toStrictEqual(testParams.expected) }) }) }) diff --git a/fittrackee_client/tests/unit/utils/tooltip.spec.ts b/fittrackee_client/tests/unit/utils/tooltip.spec.ts index aa23f834..c5b8ebc8 100644 --- a/fittrackee_client/tests/unit/utils/tooltip.spec.ts +++ b/fittrackee_client/tests/unit/utils/tooltip.spec.ts @@ -1,4 +1,4 @@ -import { assert } from 'chai' +import { describe, it, expect } from 'vitest' import { datasetKeys } from '@/utils/statistics' import { formatTooltipValue } from '@/utils/tooltip' @@ -45,14 +45,13 @@ describe('formatTooltipValue', () => { testsParams.map((testParams) => { it(testParams.description, () => { - assert.equal( + expect( formatTooltipValue( testParams.inputDisplayedData, testParams.inputValue, false - ), - testParams.expectedResult - ) + ) + ).toStrictEqual(testParams.expectedResult) }) }) }) @@ -99,14 +98,13 @@ describe('formatTooltipValue after conversion to imperial units', () => { testsParams.map((testParams) => { it(testParams.description, () => { - assert.equal( + expect( formatTooltipValue( testParams.inputDisplayedData, testParams.inputValue, true - ), - testParams.expectedResult - ) + ) + ).toStrictEqual(testParams.expectedResult) }) }) }) @@ -145,16 +143,15 @@ describe('formatTooltipValue with unitFrom', () => { testsParams.map((testParams) => { it(testParams.description, () => { - assert.equal( + expect( formatTooltipValue( testParams.inputDisplayedData, testParams.inputValue, testParams.useImperialUnits, true, 'm' - ), - testParams.expectedResult - ) + ) + ).toStrictEqual(testParams.expectedResult) }) }) }) @@ -201,15 +198,14 @@ describe('formatTooltipValue (formatWithUnits = false)', () => { testsParams.map((testParams) => { it(testParams.description, () => { - assert.equal( + expect( formatTooltipValue( testParams.inputDisplayedData, testParams.inputValue, false, false - ), - testParams.expectedResult - ) + ) + ).toStrictEqual(testParams.expectedResult) }) }) }) diff --git a/fittrackee_client/tests/unit/utils/units.spec.ts b/fittrackee_client/tests/unit/utils/units.spec.ts index 6536d673..fd377c00 100644 --- a/fittrackee_client/tests/unit/utils/units.spec.ts +++ b/fittrackee_client/tests/unit/utils/units.spec.ts @@ -1,4 +1,4 @@ -import { assert } from 'chai' +import { describe, it, expect } from 'vitest' import { TUnit } from '@/types/units' import { convertDistance, getTemperature, getWindSpeed } from '@/utils/units' @@ -26,8 +26,7 @@ describe('convertDistance', () => { testsParams.map((testParams) => { it(`convert ${testParams[0]}${testParams[1]} in ${testParams[2]}}`, () => { - assert.equal( - convertDistance(testParams[0], testParams[1], testParams[2]), + expect(convertDistance(testParams[0], testParams[1], testParams[2])).toBe( testParams[3] ) }) @@ -44,15 +43,14 @@ describe('convertDistance w/ digits', () => { testsParams.map((testParams) => { it(`convert ${testParams[0]}${testParams[1]} in ${testParams[2]}}`, () => { - assert.equal( + expect( convertDistance( testParams[0], testParams[1], testParams[2], testParams[3] - ), - testParams[4] - ) + ) + ).toBe(testParams[4]) }) }) }) @@ -68,7 +66,7 @@ describe('getTemperature', () => { testsParams.map((testParams) => { it(`get temperature for input: ${testParams[0]} and imperialUnits: ${testParams[1]}`, () => { - assert.equal(getTemperature(testParams[0], testParams[1]), testParams[2]) + expect(getTemperature(testParams[0], testParams[1])).toBe(testParams[2]) }) }) }) @@ -84,7 +82,7 @@ describe('getWindSpeed', () => { testsParams.map((testParams) => { it(`get wind speed for input: ${testParams[0]} and imperialUnits: ${testParams[1]}`, () => { - assert.equal(getWindSpeed(testParams[0], testParams[1]), testParams[2]) + expect(getWindSpeed(testParams[0], testParams[1])).toBe(testParams[2]) }) }) }) diff --git a/fittrackee_client/tests/unit/utils/weather.spec.ts b/fittrackee_client/tests/unit/utils/weather.spec.ts index cfb00810..561b74d9 100644 --- a/fittrackee_client/tests/unit/utils/weather.spec.ts +++ b/fittrackee_client/tests/unit/utils/weather.spec.ts @@ -1,4 +1,4 @@ -import { assert } from 'chai' +import { describe, it, expect } from 'vitest' import { convertDegreeToDirection } from '@/utils/weather' @@ -17,7 +17,7 @@ describe('convertDegreeToDirection', () => { ] testsParams.map((testParams) => { it(`convert ${testParams[0]}° to ${testParams[1]}`, () => { - assert.equal(convertDegreeToDirection(testParams[0]), testParams[1]) + expect(convertDegreeToDirection(testParams[0])).toBe(testParams[1]) }) }) }) diff --git a/fittrackee_client/tests/unit/utils/workouts.spec.ts b/fittrackee_client/tests/unit/utils/workouts.spec.ts index c1014494..b1afef26 100644 --- a/fittrackee_client/tests/unit/utils/workouts.spec.ts +++ b/fittrackee_client/tests/unit/utils/workouts.spec.ts @@ -1,4 +1,4 @@ -import { assert } from 'chai' +import { describe, it, expect } from 'vitest' import createI18n from '@/i18n' import { getDatasets, getDonutDatasets } from '@/utils/workouts' @@ -172,14 +172,13 @@ describe('getDatasets', () => { testparams.map((testParams) => { it(testParams.description, () => { locale.value = testParams.inputParams.locale - assert.deepEqual( + expect( getDatasets( testParams.inputParams.charData, t, testParams.inputParams.useImperialUnits - ), - testParams.expected - ) + ) + ).toStrictEqual(testParams.expected) }) }) }) @@ -329,9 +328,9 @@ describe('getDonutDatasets', () => { ] testparams.map((testParams) => { it(testParams.description, () => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - assert.deepEqual(getDonutDatasets(testParams.input), testParams.expected) + expect(getDonutDatasets(testParams.input)).toStrictEqual( + testParams.expected + ) }) }) }) diff --git a/fittrackee_client/tsconfig.json b/fittrackee_client/tsconfig.json index 45656ba5..ad87a2a1 100644 --- a/fittrackee_client/tsconfig.json +++ b/fittrackee_client/tsconfig.json @@ -6,6 +6,9 @@ }, { "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.vitest.json" } ], "compilerOptions": { diff --git a/fittrackee_client/tsconfig.vitest.json b/fittrackee_client/tsconfig.vitest.json new file mode 100644 index 00000000..d080d611 --- /dev/null +++ b/fittrackee_client/tsconfig.vitest.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.app.json", + "exclude": [], + "compilerOptions": { + "composite": true, + "lib": [], + "types": ["node", "jsdom"] + } +} diff --git a/fittrackee_client/vitest.config.ts b/fittrackee_client/vitest.config.ts new file mode 100644 index 00000000..d317f053 --- /dev/null +++ b/fittrackee_client/vitest.config.ts @@ -0,0 +1,14 @@ +import { fileURLToPath } from 'node:url' +import { mergeConfig, defineConfig, configDefaults } from 'vitest/config' +import viteConfig from './vite.config' + +export default mergeConfig( + viteConfig, + defineConfig({ + test: { + environment: 'jsdom', + exclude: [...configDefaults.exclude, 'e2e/*'], + root: fileURLToPath(new URL('./', import.meta.url)), + }, + }) +) diff --git a/fittrackee_client/yarn.lock b/fittrackee_client/yarn.lock index c18ab987..7052f4e1 100644 --- a/fittrackee_client/yarn.lock +++ b/fittrackee_client/yarn.lock @@ -30,9 +30,9 @@ js-tokens "^4.0.0" "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.3.tgz#0ce0be31a4ca4f1884b5786057cadcb6c3be58f9" + integrity sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw== "@babel/runtime@^7.21.0": version "7.23.2" @@ -245,6 +245,13 @@ json5 "^2.2.0" loader-utils "^2.0.0" +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + "@jridgewell/sourcemap-codec@^1.4.15": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" @@ -276,6 +283,11 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@one-ini/wasm@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@one-ini/wasm/-/wasm-0.1.1.tgz#6013659736c9dbfccc96e8a9c2b3de317df39323" + integrity sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw== + "@pkgr/utils@^2.3.1": version "2.4.2" resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc" @@ -293,32 +305,53 @@ resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz#5f1b518ec5fa54437c0b7c4a821546c64fed6922" integrity sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + "@tmcw/togeojson@^5.8.1": version "5.8.1" resolved "https://registry.yarnpkg.com/@tmcw/togeojson/-/togeojson-5.8.1.tgz#6cbcc9b1484ed28e71bdd4b5f96ceae540a4533f" integrity sha512-2YNrbis3l5kS0XrYwiHEZcGwiRp0MJ5CvwGwtMWp2z2tsVlskeec2qgvKHnF0RCwI5GnjrrBOoKsWfndEnd3LA== +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + "@tsconfig/node18@^18.2.2": version "18.2.2" resolved "https://registry.yarnpkg.com/@tsconfig/node18/-/node18-18.2.2.tgz#81fb16ecff0d400b1cbadbf76713b50f331029ce" integrity sha512-d6McJeGsuoRlwWZmVIeE8CUA27lu6jLjvv1JzqmpsytOYYbVi1tHZEnwCNVOXnj4pyLvneZlFlpXUK+X9wBWyw== -"@types/chai@^4.3.10": +"@types/chai-subset@^1.3.3": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.5.tgz#3fc044451f26985f45625230a7f22284808b0a9a" + integrity sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A== + dependencies: + "@types/chai" "*" + +"@types/chai@*", "@types/chai@^4.3.5": version "4.3.10" resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.10.tgz#2ad2959d1767edee5b0e4efb1a0cd2b500747317" integrity sha512-of+ICnbqjmFCiixUnqRulbylyXQrPqIGf/B3Jax1wIF3DvSheysQxAWvqHhZiW3IQrycvokcLcFQlveGp+vyNg== +"@types/jsdom@^21.1.3": + version "21.1.5" + resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-21.1.5.tgz#b5d0bccd2436a2bc166dbe235f1dc43a1f922d40" + integrity sha512-sBK/3YjS3uuPj+HzZyhB4GGTnFmk0mdyQfhzZ/sqs9ciyG41QJdZZdwcPa6OfW97OTNTwl5tBAsfEOm/dui9pQ== + dependencies: + "@types/node" "*" + "@types/tough-cookie" "*" + parse5 "^7.0.0" + "@types/json-schema@^7.0.12": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/mocha@^10.0.4": - version "10.0.4" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.4.tgz#b5331955ebca216604691fd4fcd2dbdc2bd559a4" - integrity sha512-xKU7bUjiFTIttpWaIZ9qvgg+22O1nmbA+HRxdlR+u6TWsGfmFdXrheJoK4fFxrHNVIOBDvDNKZG+LYBpMHpX3w== - -"@types/node@^20.9.0": +"@types/node@*", "@types/node@^20.9.0": version "20.9.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.9.0.tgz#bfcdc230583aeb891cf51e73cfdaacdd8deae298" integrity sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw== @@ -342,6 +375,11 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.5.tgz#deed5ab7019756c9c90ea86139106b0346223f35" integrity sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg== +"@types/tough-cookie@*": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" + integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== + "@typescript-eslint/eslint-plugin@^6.7.0": version "6.10.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.10.0.tgz#cfe2bd34e26d2289212946b96ab19dcad64b661a" @@ -437,6 +475,49 @@ resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-4.4.1.tgz#5050895fb8b2258d2f228110849df4a8a94b9038" integrity sha512-HCQG8VDFDM7YDAdcj5QI5DvUi+r6xvo9LgvYdk7LSkUNwdpempdB5horkMSZsbdey9Ywsf5aaU8kEPw9M5kREA== +"@vitest/expect@0.34.6": + version "0.34.6" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-0.34.6.tgz#608a7b7a9aa3de0919db99b4cc087340a03ea77e" + integrity sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw== + dependencies: + "@vitest/spy" "0.34.6" + "@vitest/utils" "0.34.6" + chai "^4.3.10" + +"@vitest/runner@0.34.6": + version "0.34.6" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-0.34.6.tgz#6f43ca241fc96b2edf230db58bcde5b974b8dcaf" + integrity sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ== + dependencies: + "@vitest/utils" "0.34.6" + p-limit "^4.0.0" + pathe "^1.1.1" + +"@vitest/snapshot@0.34.6": + version "0.34.6" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-0.34.6.tgz#b4528cf683b60a3e8071cacbcb97d18b9d5e1d8b" + integrity sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w== + dependencies: + magic-string "^0.30.1" + pathe "^1.1.1" + pretty-format "^29.5.0" + +"@vitest/spy@0.34.6": + version "0.34.6" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-0.34.6.tgz#b5e8642a84aad12896c915bce9b3cc8cdaf821df" + integrity sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ== + dependencies: + tinyspy "^2.1.1" + +"@vitest/utils@0.34.6": + version "0.34.6" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-0.34.6.tgz#38a0a7eedddb8e7291af09a2409cb8a189516968" + integrity sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A== + dependencies: + diff-sequences "^29.4.3" + loupe "^2.3.6" + pretty-format "^29.5.0" + "@volar/language-core@1.10.10", "@volar/language-core@~1.10.5": version "1.10.10" resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.10.10.tgz#9c240a36dd4007b9c4f00739f6cecb81da54a49e" @@ -592,6 +673,14 @@ resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.8.tgz#f044942142e1d3a395f24132e6203a784838542d" integrity sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw== +"@vue/test-utils@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-2.4.1.tgz#7db869b4142d2a5fce4ad6c6dfa01c8ea524f26c" + integrity sha512-VO8nragneNzUZUah6kOjiFmD/gwRjUauG9DROh6oaOeFwX1cZRUNHhdeogE8635cISigXFTtGLUQWx5KCb0xeg== + dependencies: + js-beautify "1.14.9" + vue-component-type-helpers "1.8.4" + "@vue/tsconfig@^0.4.0": version "0.4.0" resolved "https://registry.yarnpkg.com/@vue/tsconfig/-/tsconfig-0.4.0.tgz#f01e2f6089b5098136fb084a0dd0cdd4533b72b0" @@ -639,21 +728,43 @@ resolved "https://registry.yarnpkg.com/@zxcvbn-ts/language-pl/-/language-pl-3.0.2.tgz#c9fe925c1d83a9056821bc5f1d230faf6168d377" integrity sha512-PtH5PomFDP5XHQrMb9JSOyklOfhKbgU0WcQHxIU7fr3H4/WagGzCoeakGtBD4irA2ucrBNn9qpK2YIGIvpqkAA== +abab@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== + +abbrev@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + acorn-jsx@^5.2.0, acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== +acorn-walk@^8.2.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.0.tgz#2097665af50fd0cf7a2dfccd2b9368964e66540f" + integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA== + acorn@^7.1.1, acorn@^7.4.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.9.0: +acorn@^8.10.0, acorn@^8.9.0: version "8.11.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -683,6 +794,11 @@ ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + ansi-styles@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" @@ -786,6 +902,11 @@ bundle-name@^3.0.0: dependencies: run-applescript "^5.0.0" +cac@^6.7.14: + version "6.7.14" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -886,6 +1007,11 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + computeds@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/computeds/-/computeds-0.0.1.tgz#215b08a4ba3e08a11ff6eee5d6d8d7166a97ce2e" @@ -896,6 +1022,14 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +config-chain@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + core-js@^3.33.2: version "3.33.2" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.33.2.tgz#312bbf6996a3a517c04c99b9909cdd27138d1ceb" @@ -915,11 +1049,27 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== +cssstyle@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-3.0.0.tgz#17ca9c87d26eac764bb8cfd00583cff21ce0277a" + integrity sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg== + dependencies: + rrweb-cssom "^0.6.0" + csstype@^3.1.2, csstype@latest: version "3.1.2" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== +data-urls@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-4.0.0.tgz#333a454eca6f9a5b7b0f1013ff89074c3f522dd4" + integrity sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g== + dependencies: + abab "^2.0.6" + whatwg-mimetype "^3.0.0" + whatwg-url "^12.0.0" + date-fns-tz@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/date-fns-tz/-/date-fns-tz-2.0.0.tgz#1b14c386cb8bc16fc56fe333d4fc34ae1d1099d5" @@ -937,13 +1087,18 @@ de-indent@^1.0.2: resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== -debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" +decimal.js@^10.4.3: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + deep-eql@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" @@ -989,6 +1144,11 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== +diff-sequences@^29.4.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -1017,6 +1177,13 @@ domelementtype@^2.3.0: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== +domexception@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== + dependencies: + webidl-conversions "^7.0.0" + domhandler@^5.0.2, domhandler@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" @@ -1033,6 +1200,16 @@ domutils@^3.0.1: domelementtype "^2.3.0" domhandler "^5.0.3" +editorconfig@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-1.0.4.tgz#040c9a8e9a6c5288388b87c2db07028aa89f53a3" + integrity sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q== + dependencies: + "@one-ini/wasm" "0.1.1" + commander "^10.0.0" + minimatch "9.0.1" + semver "^7.5.3" + emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -1404,6 +1581,17 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + globals@^13.19.0: version "13.23.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" @@ -1457,6 +1645,13 @@ hosted-git-info@^7.0.0: dependencies: lru-cache "^10.0.1" +html-encoding-sniffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== + dependencies: + whatwg-encoding "^2.0.0" + htmlparser2@^8.0.0: version "8.0.2" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" @@ -1467,6 +1662,23 @@ htmlparser2@^8.0.0: domutils "^3.0.1" entities "^4.4.0" +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -1477,6 +1689,13 @@ human-signals@^4.3.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== +iconv-lite@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + ignore@^5.2.0, ignore@^5.2.4: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" @@ -1513,6 +1732,11 @@ inherits@2: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ini@^1.3.4: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -1576,6 +1800,11 @@ is-plain-object@^5.0.0: resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" @@ -1598,6 +1827,16 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +js-beautify@1.14.9: + version "1.14.9" + resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.9.tgz#a5db728bc5a0d84d3b1a597c376b29bd4d39c8e5" + integrity sha512-coM7xq1syLcMyuVGyToxcj2AlzhkDjmfklL8r0JgJ7A76wyGMpJ1oA35mr4APdYNO/o/4YY8H54NQIJzhMbhBg== + dependencies: + config-chain "^1.1.13" + editorconfig "^1.0.3" + glob "^8.1.0" + nopt "^6.0.0" + js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -1610,6 +1849,35 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsdom@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-22.1.0.tgz#0fca6d1a37fbeb7f4aac93d1090d782c56b611c8" + integrity sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw== + dependencies: + abab "^2.0.6" + cssstyle "^3.0.0" + data-urls "^4.0.0" + decimal.js "^10.4.3" + domexception "^4.0.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.4" + parse5 "^7.1.2" + rrweb-cssom "^0.6.0" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^4.1.2" + w3c-xmlserializer "^4.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^12.0.1" + ws "^8.13.0" + xml-name-validator "^4.0.0" + json-buffer@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" @@ -1646,6 +1914,11 @@ jsonc-eslint-parser@^1.0.1: espree "^6.0.0" semver "^6.3.0" +jsonc-parser@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + keyv@^4.5.3: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -1690,6 +1963,11 @@ loader-utils@^2.0.0: emojis-list "^3.0.0" json5 "^2.1.2" +local-pkg@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" + integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -1720,9 +1998,11 @@ loupe@^2.3.6: get-func-name "^2.0.1" lru-cache@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" - integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== + version "10.0.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.2.tgz#34504678cc3266b09b8dfd6fab4e1515258271b7" + integrity sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg== + dependencies: + semver "^7.3.5" lru-cache@^6.0.0: version "6.0.0" @@ -1731,7 +2011,7 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -magic-string@^0.30.5: +magic-string@^0.30.1, magic-string@^0.30.5: version "0.30.5" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9" integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA== @@ -1783,6 +2063,13 @@ mimic-fn@^4.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== +minimatch@9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.1.tgz#8a555f541cf976c622daf078bb28f29fb927c253" + integrity sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w== + dependencies: + brace-expansion "^2.0.1" + minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -1790,6 +2077,13 @@ minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimatch@^9.0.0, minimatch@^9.0.3: version "9.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" @@ -1797,6 +2091,16 @@ minimatch@^9.0.0, minimatch@^9.0.3: dependencies: brace-expansion "^2.0.1" +mlly@^1.2.0, mlly@^1.4.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.4.2.tgz#7cf406aa319ff6563d25da6b36610a93f2a8007e" + integrity sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg== + dependencies: + acorn "^8.10.0" + pathe "^1.1.1" + pkg-types "^1.0.3" + ufo "^1.3.0" + ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -1817,6 +2121,13 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +nopt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== + dependencies: + abbrev "^1.0.0" + normalize-package-data@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.0.tgz#68a96b3c11edd462af7189c837b6b1064a484196" @@ -1866,6 +2177,11 @@ nth-check@^2.1.1: dependencies: boolbase "^1.0.0" +nwsapi@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" + integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== + once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -1916,6 +2232,13 @@ p-limit@^3.0.2: dependencies: yocto-queue "^0.1.0" +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + dependencies: + yocto-queue "^1.0.0" + p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -1946,6 +2269,13 @@ parse-srcset@^1.0.2: resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" integrity sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q== +parse5@^7.0.0, parse5@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + path-browserify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" @@ -1976,6 +2306,11 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pathe@^1.1.0, pathe@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" + integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== + pathval@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" @@ -1996,6 +2331,15 @@ pidtree@^0.6.0: resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== +pkg-types@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" + integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== + dependencies: + jsonc-parser "^3.2.0" + mlly "^1.2.0" + pathe "^1.1.0" + postcss-selector-parser@^6.0.13: version "6.0.13" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" @@ -2030,21 +2374,50 @@ prettier@^3.0.3: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== +pretty-format@^29.5.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -punycode@^2.1.0: +psl@^1.1.33: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + read-pkg@^8.0.0: version "8.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-8.1.0.tgz#6cf560b91d90df68bce658527e7e3eee75f7c4c7" @@ -2067,6 +2440,11 @@ regenerator-runtime@^0.14.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -2091,6 +2469,11 @@ rollup@^3.27.1: optionalDependencies: fsevents "~2.3.2" +rrweb-cssom@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1" + integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw== + run-applescript@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c" @@ -2105,6 +2488,11 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +"safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + sanitize-html@^2.11.0: version "2.11.0" resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.11.0.tgz#9a6434ee8fcaeddc740d8ae7cd5dd71d3981f8f6" @@ -2126,6 +2514,13 @@ sass@^1.69.5: immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== + dependencies: + xmlchars "^2.2.0" + screenfull@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/screenfull/-/screenfull-5.2.0.tgz#6533d524d30621fc1283b9692146f3f13a93d1ba" @@ -2136,7 +2531,7 @@ semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.5, semver@^7.3.6, semver@^7.5.4: +semver@^7.3.5, semver@^7.3.6, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -2160,6 +2555,11 @@ shell-quote@^1.7.3: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== +siginfo@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" + integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== + signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" @@ -2211,6 +2611,16 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== +stackback@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" + integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== + +std-env@^3.3.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.4.3.tgz#326f11db518db751c83fd58574f449b7c3060910" + integrity sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q== + strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -2233,6 +2643,13 @@ strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strip-literal@^1.0.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-1.3.0.tgz#db3942c2ec1699e6836ad230090b84bb458e3a07" + integrity sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg== + dependencies: + acorn "^8.10.0" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -2247,6 +2664,11 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + synckit@^0.8.5: version "0.8.5" resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" @@ -2260,6 +2682,21 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +tinybench@^2.5.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.5.1.tgz#3408f6552125e53a5a48adee31261686fd71587e" + integrity sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg== + +tinypool@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.7.0.tgz#88053cc99b4a594382af23190c609d93fddf8021" + integrity sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww== + +tinyspy@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.2.0.tgz#9dc04b072746520b432f77ea2c2d17933de5d6ce" + integrity sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg== + titleize@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" @@ -2272,6 +2709,23 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +tough-cookie@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" + integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + +tr46@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-4.1.1.tgz#281a758dcc82aeb4fe38c7dfe4d11a395aac8469" + integrity sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw== + dependencies: + punycode "^2.3.0" + ts-api-utils@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" @@ -2305,20 +2759,30 @@ type-fest@^3.8.0: integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== type-fest@^4.2.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.6.0.tgz#9c575f7e20530defef4f9cdc5e2c85d6e4ea0fc9" - integrity sha512-rLjWJzQFOq4xw7MgJrCZ6T1jIOvvYElXT12r+y0CC6u67hegDHaxcPqb2fZHOGlqxugGQPNB1EnTezjBetkwkw== + version "4.7.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.7.1.tgz#dbe462c5f350d708ec6ca6fe8925b5b6541ca9a7" + integrity sha512-iWr8RUmzAJRfhZugX9O7nZE6pCxDU8CZ3QxsLuTnGcBLJpCaP2ll3s4eMTBoFnU/CeXY/5rfQSuAEsTGJO4y8A== typescript@~5.2.0: version "5.2.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== +ufo@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.3.1.tgz#e085842f4627c41d4c1b60ebea1f75cdab4ce86b" + integrity sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw== + undici-types@~5.26.4: version "5.26.5" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + untildify@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" @@ -2331,6 +2795,14 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -2344,7 +2816,19 @@ validate-npm-package-license@^3.0.4: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -vite@^4.4.11: +vite-node@0.34.6: + version "0.34.6" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-0.34.6.tgz#34d19795de1498562bf21541a58edcd106328a17" + integrity sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA== + dependencies: + cac "^6.7.14" + debug "^4.3.4" + mlly "^1.4.0" + pathe "^1.1.1" + picocolors "^1.0.0" + vite "^3.0.0 || ^4.0.0 || ^5.0.0-0" + +"vite@^3.0.0 || ^4.0.0 || ^5.0.0-0", "vite@^3.1.0 || ^4.0.0 || ^5.0.0-0", vite@^4.4.11: version "4.5.0" resolved "https://registry.yarnpkg.com/vite/-/vite-4.5.0.tgz#ec406295b4167ac3bc23e26f9c8ff559287cff26" integrity sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw== @@ -2355,6 +2839,36 @@ vite@^4.4.11: optionalDependencies: fsevents "~2.3.2" +vitest@^0.34.6: + version "0.34.6" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.34.6.tgz#44880feeeef493c04b7f795ed268f24a543250d7" + integrity sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q== + dependencies: + "@types/chai" "^4.3.5" + "@types/chai-subset" "^1.3.3" + "@types/node" "*" + "@vitest/expect" "0.34.6" + "@vitest/runner" "0.34.6" + "@vitest/snapshot" "0.34.6" + "@vitest/spy" "0.34.6" + "@vitest/utils" "0.34.6" + acorn "^8.9.0" + acorn-walk "^8.2.0" + cac "^6.7.14" + chai "^4.3.10" + debug "^4.3.4" + local-pkg "^0.4.3" + magic-string "^0.30.1" + pathe "^1.1.1" + picocolors "^1.0.0" + std-env "^3.3.3" + strip-literal "^1.0.1" + tinybench "^2.5.0" + tinypool "^0.7.0" + vite "^3.1.0 || ^4.0.0 || ^5.0.0-0" + vite-node "0.34.6" + why-is-node-running "^2.2.2" + vue-chart-3@^3.1.8: version "3.1.8" resolved "https://registry.yarnpkg.com/vue-chart-3/-/vue-chart-3-3.1.8.tgz#4ca4cba0a51ea2851a657a132bc14bf8c3ba1da2" @@ -2365,6 +2879,11 @@ vue-chart-3@^3.1.8: csstype latest lodash-es latest +vue-component-type-helpers@1.8.4: + version "1.8.4" + resolved "https://registry.yarnpkg.com/vue-component-type-helpers/-/vue-component-type-helpers-1.8.4.tgz#302d85fac912519cdf0dd2fb51402e5215d85628" + integrity sha512-6bnLkn8O0JJyiFSIF0EfCogzeqNXpnjJ0vW/SZzNHfe6sPx30lTtTXlE5TFs2qhJlAtDFybStVNpL73cPe3OMQ== + vue-eslint-parser@^9.3.1: version "9.3.2" resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz#6f9638e55703f1c77875a19026347548d93fd499" @@ -2436,6 +2955,38 @@ vuex@^4.1.0: dependencies: "@vue/devtools-api" "^6.0.0-beta.11" +w3c-xmlserializer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" + integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== + dependencies: + xml-name-validator "^4.0.0" + +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + +whatwg-encoding@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== + dependencies: + iconv-lite "0.6.3" + +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + +whatwg-url@^12.0.0, whatwg-url@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-12.0.1.tgz#fd7bcc71192e7c3a2a97b9a8d6b094853ed8773c" + integrity sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ== + dependencies: + tr46 "^4.1.1" + webidl-conversions "^7.0.0" + which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -2443,16 +2994,34 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +why-is-node-running@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" + integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== + dependencies: + siginfo "^2.0.0" + stackback "0.0.2" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +ws@^8.13.0: + version "8.14.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" + integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== + xml-name-validator@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" @@ -2476,3 +3045,8 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yocto-queue@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" + integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==