From a45b78d1cdfc884a2c817c51c699179800ce4e75 Mon Sep 17 00:00:00 2001 From: DaxServer Date: Fri, 17 Oct 2025 12:26:13 +0200 Subject: [PATCH] feat: migrate to biomejs --- .biomeignore | 12 + backend/eslint.config.ts | 32 -- backend/package.json | 10 +- backend/src/api/project/index.ts | 7 +- backend/src/plugins/database.ts | 4 +- backend/src/services/commons-upload.ts | 2 +- .../services/constraint-validation.service.ts | 5 +- .../file-processor/file-buffer-extractor.ts | 2 +- .../file-processor/metadata-builder.ts | 2 +- .../multiple-files-processor.ts | 2 +- backend/src/services/wikibase-clients.ts | 2 +- backend/src/types/error-handler.ts | 38 +- backend/src/utils/wikibase-error-handler.ts | 2 +- backend/tests/api/_meta_projects.test.ts | 2 +- backend/tests/api/project/import-file.test.ts | 4 +- backend/tests/api/project/import.test.ts | 6 +- backend/tests/api/project/lowercase.test.ts | 4 +- .../tests/api/project/project.create.test.ts | 2 +- .../tests/api/project/project.delete.test.ts | 2 +- .../tests/api/project/project.get-all.test.ts | 6 +- backend/tests/api/project/project.get.test.ts | 2 +- .../api/project/project.import-csv.test.ts | 2 +- .../api/project/project.import-file.test.ts | 4 +- .../tests/api/project/project.replace.test.ts | 4 +- .../project/project.trim-whitespace.test.ts | 4 +- .../api/project/project.wikibase.test.ts | 4 +- backend/tests/api/project/uppercase.test.ts | 4 +- .../constraint-validation.service.test.ts | 2 +- backend/tests/db.test.ts | 2 +- backend/tests/error-handler.test.ts | 2 +- .../lowercase-conversion.service.test.ts | 2 +- ...lace-operation.alter-table.service.test.ts | 2 +- .../replace-operation.service.test.ts | 2 +- .../services/trim-whitespace.service.test.ts | 2 +- .../uppercase-conversion.service.test.ts | 2 +- backend/tests/upload/file-processor.test.ts | 6 +- backend/tests/wikibase-error-handler.test.ts | 6 +- biome.json | 79 ++++ bun.lock | 339 ++---------------- eslint.config.ts | 33 -- frontend/eslint.config.ts | 46 --- frontend/package.json | 14 - frontend/src/core/plugins/api.ts | 2 +- frontend/src/core/router/router.ts | 3 +- .../useColumnDataTypeIndicators.test.ts | 2 +- .../__tests__/useColumnGeneration.test.ts | 2 +- .../useDataTypeCompatibility.test.ts | 2 +- .../useColumnDataTypeIndicators.ts | 2 +- .../composables/useColumnGeneration.ts | 2 +- .../components/SchemaSelector.vue | 4 +- .../components/ValidationDisplay.vue | 4 +- .../__tests__/usePropertySelection.test.ts | 2 +- .../useReferenceValueMapping.test.ts | 2 +- .../__tests__/useSchemaApi.test.ts | 2 +- .../useSchemaCompletenessIntegration.test.ts | 2 +- .../useSchemaCompletenessValidation.test.ts | 2 +- .../__tests__/useSchemaSelection.test.ts | 2 +- .../__tests__/useSchemaValidationUI.test.ts | 2 +- .../__tests__/useStatementConfig.test.ts | 2 +- .../useStatementDataTypeValidation.test.ts | 20 +- .../__tests__/useStatementEditor.test.ts | 92 +++-- .../useStatementValidationDisplay.test.ts | 2 +- .../__tests__/useValidation.test.ts | 2 +- .../__tests__/useValidationCore.test.ts | 2 +- .../__tests__/useValidationErrors.test.ts | 2 +- .../__tests__/useValueMapping.test.ts | 2 +- .../composables/useSchemaApi.ts | 2 +- .../stores/__tests__/schema.store.test.ts | 2 +- .../__tests__/validation-rules.store.test.ts | 2 +- .../stores/__tests__/validation.store.test.ts | 2 +- .../wikibase-schema/stores/schema.store.ts | 3 +- frontend/src/main.ts | 8 +- frontend/src/shared/components/Sidebar.vue | 1 - .../stores/__tests__/drag-drop.store.test.ts | 2 +- frontend/src/shared/types/index.ts | 4 +- frontend/vite.config.ts | 2 +- package.json | 26 +- prettier.config.ts | 35 -- 78 files changed, 284 insertions(+), 675 deletions(-) create mode 100644 .biomeignore delete mode 100644 backend/eslint.config.ts create mode 100644 biome.json delete mode 100644 eslint.config.ts delete mode 100644 frontend/eslint.config.ts delete mode 100644 prettier.config.ts diff --git a/.biomeignore b/.biomeignore new file mode 100644 index 0000000..3f08b37 --- /dev/null +++ b/.biomeignore @@ -0,0 +1,12 @@ +.git* +.vercel/ +.trae/ +dist/ +node_modules/ +temp/ + +bun.lock + +*.db +*.wal +**/*.d.ts diff --git a/backend/eslint.config.ts b/backend/eslint.config.ts deleted file mode 100644 index 5351133..0000000 --- a/backend/eslint.config.ts +++ /dev/null @@ -1,32 +0,0 @@ -import prettierConfig from 'eslint-config-prettier' -import { defineConfig } from 'eslint/config' -import tseslint from 'typescript-eslint' - -export default defineConfig( - { - ignores: ['node_modules/**', 'dist/**', '*.d.ts', 'dataforge.db'], - }, - tseslint.configs.recommended, - prettierConfig, - { - files: ['**/*.ts'], - languageOptions: { - parserOptions: { - projectService: true, - tsconfigRootDir: import.meta.dirname, - }, - }, - plugins: { - '@typescript-eslint': tseslint.plugin, - }, - rules: { - '@typescript-eslint/no-explicit-any': 'warn', - '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }], - '@typescript-eslint/ban-ts-comment': [ - 'error', - { 'ts-expect-error': 'allow-with-description' }, - ], - 'comma-dangle': ['error', 'always-multiline'], - }, - }, -) diff --git a/backend/package.json b/backend/package.json index 75995ae..9aceaea 100644 --- a/backend/package.json +++ b/backend/package.json @@ -29,15 +29,7 @@ "@types/bun": "catalog:", "@types/node": "catalog:", "@types/oauth": "^0.9.6", - "@typescript-eslint/eslint-plugin": "catalog:", - "@typescript-eslint/parser": "catalog:", "bun-types": "catalog:", - "eslint": "catalog:", - "eslint-config-prettier": "catalog:", - "eslint-plugin-no-relative-import-paths": "catalog:", - "eslint-plugin-prettier": "catalog:", - "prettier": "catalog:", - "typescript": "catalog:", - "typescript-eslint": "catalog:" + "typescript": "catalog:" } } diff --git a/backend/src/api/project/index.ts b/backend/src/api/project/index.ts index f231827..ed73d98 100644 --- a/backend/src/api/project/index.ts +++ b/backend/src/api/project/index.ts @@ -4,10 +4,10 @@ import { ColumnNameSchema, GetProjectByIdResponse, PaginationQuery, + type Project, ProjectParams, ProjectResponseSchema, ReplaceOperationSchema, - type Project, } from '@backend/api/project/schemas' import { databasePlugin } from '@backend/plugins/database' import { errorHandlerPlugin } from '@backend/plugins/error-handler' @@ -17,7 +17,8 @@ import { TrimWhitespaceService } from '@backend/services/trim-whitespace.service import { UppercaseConversionService } from '@backend/services/uppercase-conversion.service' import { ApiErrorHandler } from '@backend/types/error-handler' import { ApiErrors } from '@backend/types/error-schemas' -import { enhanceSchemaWithTypes, type DuckDBTablePragma } from '@backend/utils/duckdb-types' +import { type DuckDBTablePragma, enhanceSchemaWithTypes } from '@backend/utils/duckdb-types' +import type { DuckDBResultReader } from '@duckdb/node-api' import cors from '@elysiajs/cors' import { Elysia, t } from 'elysia' @@ -407,7 +408,7 @@ export const projectRoutes = new Elysia({ prefix: '/api/project' }) // DuckDB's read_json_auto will handle the parsing // Check if a table with the same project ID already exists - let tableExistsReader + let tableExistsReader: DuckDBResultReader try { tableExistsReader = await db().runAndReadAll( `SELECT 1 FROM duckdb_tables() WHERE table_name = 'project_${projectId}'`, diff --git a/backend/src/plugins/database.ts b/backend/src/plugins/database.ts index 977dd34..5550c28 100644 --- a/backend/src/plugins/database.ts +++ b/backend/src/plugins/database.ts @@ -1,6 +1,6 @@ -import { DuckDBConnection, DuckDBInstance } from '@duckdb/node-api' -import { Elysia } from 'elysia' import path from 'node:path' +import { type DuckDBConnection, DuckDBInstance } from '@duckdb/node-api' +import { Elysia } from 'elysia' let connection: DuckDBConnection | null = null let instance: DuckDBInstance | null = null diff --git a/backend/src/services/commons-upload.ts b/backend/src/services/commons-upload.ts index 9518c4b..f4f7175 100644 --- a/backend/src/services/commons-upload.ts +++ b/backend/src/services/commons-upload.ts @@ -93,7 +93,7 @@ export class CommonsUploadService { lastError = error as Error if (attempt < retries) { - await this.sleep(this.retryDelay * Math.pow(2, attempt)) + await this.sleep(this.retryDelay * 2 ** attempt) } } } diff --git a/backend/src/services/constraint-validation.service.ts b/backend/src/services/constraint-validation.service.ts index 4647410..b396fab 100644 --- a/backend/src/services/constraint-validation.service.ts +++ b/backend/src/services/constraint-validation.service.ts @@ -325,7 +325,7 @@ export class ConstraintValidationService { } const numericValue = typeof value === 'number' ? value : parseFloat(value) - if (isNaN(numericValue)) { + if (Number.isNaN(numericValue)) { return { constraintType: 'range_constraint', message: `Value "${value}" is not a valid number for range constraint`, @@ -437,10 +437,11 @@ export class ConstraintValidationService { } break - case 'single value constraint': + case 'single value constraint': { const violation = this.validateSingleValueConstraint(values, constraint, propertyId) if (violation) violations.push(violation) break + } default: // For unsupported constraint types, add a warning diff --git a/backend/src/services/file-processor/file-buffer-extractor.ts b/backend/src/services/file-processor/file-buffer-extractor.ts index 98743d2..d8b92aa 100644 --- a/backend/src/services/file-processor/file-buffer-extractor.ts +++ b/backend/src/services/file-processor/file-buffer-extractor.ts @@ -1,6 +1,6 @@ +import { basename } from 'node:path' import { readFromFilepath, readFromUrl } from '@backend/services/file-processor/file-reader' import type { FileInput } from '@backend/services/file-processor/types' -import { basename } from 'node:path' export const extractFileBuffer = async ( uploadFile: FileInput, diff --git a/backend/src/services/file-processor/metadata-builder.ts b/backend/src/services/file-processor/metadata-builder.ts index fa316e2..1f56c9b 100644 --- a/backend/src/services/file-processor/metadata-builder.ts +++ b/backend/src/services/file-processor/metadata-builder.ts @@ -1,8 +1,8 @@ +import { extname } from 'node:path' import { calculateFileHash } from '@backend/services/file-processor/hash-calculator' import { extractImageMetadata } from '@backend/services/file-processor/image-extractor' import { detectMimeType } from '@backend/services/file-processor/mime-detector' import type { FileInput, FileMetadata } from '@backend/services/file-processor/types' -import { extname } from 'node:path' export const buildFileMetadata = async ( buffer: ArrayBuffer, diff --git a/backend/src/services/file-processor/multiple-files-processor.ts b/backend/src/services/file-processor/multiple-files-processor.ts index 8b6a169..73dc039 100644 --- a/backend/src/services/file-processor/multiple-files-processor.ts +++ b/backend/src/services/file-processor/multiple-files-processor.ts @@ -1,10 +1,10 @@ +import { basename } from 'node:path' import { processFile } from '@backend/services/file-processor/processor' import type { FileInput, FileValidationOptions, ProcessedFile, } from '@backend/services/file-processor/types' -import { basename } from 'node:path' export const processMultipleFiles = async ( uploadFiles: FileInput[], diff --git a/backend/src/services/wikibase-clients.ts b/backend/src/services/wikibase-clients.ts index 90a9b5f..c87f5c3 100644 --- a/backend/src/services/wikibase-clients.ts +++ b/backend/src/services/wikibase-clients.ts @@ -1,4 +1,4 @@ -import { type CSRFTokenResponse, InstanceId, OAuthCredentials } from '@backend/api/wikibase/schemas' +import type { CSRFTokenResponse, InstanceId, OAuthCredentials } from '@backend/api/wikibase/schemas' import { MediaWikiApiService } from '@backend/services/mediawiki-api.service' import OAuth from 'oauth' diff --git a/backend/src/types/error-handler.ts b/backend/src/types/error-handler.ts index 1dac067..a9e3250 100644 --- a/backend/src/types/error-handler.ts +++ b/backend/src/types/error-handler.ts @@ -11,7 +11,7 @@ export class ApiErrorHandler { message: string = 'Validation failed', details: unknown[] = [], ): ApiErrors { - return this.createErrorWithData('VALIDATION', message, details) + return ApiErrorHandler.createErrorWithData('VALIDATION', message, details) } /** @@ -21,7 +21,7 @@ export class ApiErrorHandler { message: string = 'Validation failed', details: unknown[] = [], ): ApiErrors { - return this.createErrorWithData('VALIDATION', message, details) + return ApiErrorHandler.createErrorWithData('VALIDATION', message, details) } /** @@ -31,7 +31,7 @@ export class ApiErrorHandler { const message = identifier ? `${resource} with identifier '${identifier}' not found` : `${resource} not found` - return this.createErrorWithData('NOT_FOUND', message) + return ApiErrorHandler.createErrorWithData('NOT_FOUND', message) } /** @@ -41,14 +41,14 @@ export class ApiErrorHandler { const message = identifier ? `${resource} with identifier '${identifier}' not found` : `${resource} not found` - return this.createErrorWithData('NOT_FOUND', message, []) + return ApiErrorHandler.createErrorWithData('NOT_FOUND', message, []) } /** * Create a missing file path error response with data array */ static missingFilePathError(message: string = 'File path is required'): ApiErrors { - return this.createErrorWithData('MISSING_FILE_PATH', message, []) + return ApiErrorHandler.createErrorWithData('MISSING_FILE_PATH', message, []) } /** @@ -57,14 +57,14 @@ export class ApiErrorHandler { static fileNotFoundError(filePath?: string): ApiErrors { const message = 'File not found' const details = filePath ? [filePath] : [] - return this.createErrorWithData('FILE_NOT_FOUND', message, details) + return ApiErrorHandler.createErrorWithData('FILE_NOT_FOUND', message, details) } /** * Create a table already exists error response with data array */ static tableExistsErrorWithData(tableName: string): ApiErrors { - return this.createErrorWithData( + return ApiErrorHandler.createErrorWithData( 'TABLE_ALREADY_EXISTS', `Table with name '${tableName}' already exists`, ) @@ -77,7 +77,7 @@ export class ApiErrorHandler { message: string = 'An error occurred while processing the request', details: unknown[] = [], ): ApiErrors { - return this.createErrorWithData('INTERNAL_SERVER_ERROR', message, details) + return ApiErrorHandler.createErrorWithData('INTERNAL_SERVER_ERROR', message, details) } /** @@ -87,7 +87,7 @@ export class ApiErrorHandler { message: string = 'Database error occurred', details: unknown[] = [], ): ApiErrors { - return this.createErrorWithData('DATABASE_ERROR', message, details) + return ApiErrorHandler.createErrorWithData('DATABASE_ERROR', message, details) } /** @@ -97,7 +97,7 @@ export class ApiErrorHandler { message: string = 'Database error occurred', details: unknown[] = [], ): ApiErrors { - return this.createErrorWithData('DATABASE_ERROR', message, details) + return ApiErrorHandler.createErrorWithData('DATABASE_ERROR', message, details) } /** @@ -108,7 +108,7 @@ export class ApiErrorHandler { message: string, details: unknown[] = [], ): ApiErrors { - return this.createErrorWithData(type, message, details) + return ApiErrorHandler.createErrorWithData(type, message, details) } /** @@ -118,7 +118,7 @@ export class ApiErrorHandler { message: string = 'Failed to create project', details: unknown[] = [], ): ApiErrors { - return this.createErrorWithData('PROJECT_CREATION_FAILED', message, details) + return ApiErrorHandler.createErrorWithData('PROJECT_CREATION_FAILED', message, details) } /** @@ -128,7 +128,7 @@ export class ApiErrorHandler { message: string = 'Failed to create project', details: unknown[] = [], ): ApiErrors { - return this.createErrorWithData('PROJECT_CREATION_FAILED', message, details) + return ApiErrorHandler.createErrorWithData('PROJECT_CREATION_FAILED', message, details) } /** @@ -138,7 +138,7 @@ export class ApiErrorHandler { message: string = 'Failed to import data', details: unknown[] = [], ): ApiErrors { - return this.createErrorWithData('DATA_IMPORT_FAILED', message, details) + return ApiErrorHandler.createErrorWithData('DATA_IMPORT_FAILED', message, details) } /** @@ -148,7 +148,7 @@ export class ApiErrorHandler { message: string = 'Failed to import data', details: unknown[] = [], ): ApiErrors { - return this.createErrorWithData('DATA_IMPORT_FAILED', message, details) + return ApiErrorHandler.createErrorWithData('DATA_IMPORT_FAILED', message, details) } /** @@ -158,7 +158,7 @@ export class ApiErrorHandler { message: string = 'Invalid JSON format', details: unknown[] = [], ): ApiErrors { - return this.createErrorWithData('INVALID_JSON', message, details) + return ApiErrorHandler.createErrorWithData('INVALID_JSON', message, details) } /** @@ -168,7 +168,7 @@ export class ApiErrorHandler { message: string = 'Invalid JSON format', details: unknown[] = [], ): ApiErrors { - return this.createErrorWithData('INVALID_JSON', message, details) + return ApiErrorHandler.createErrorWithData('INVALID_JSON', message, details) } /** @@ -178,14 +178,14 @@ export class ApiErrorHandler { message: string = 'Internal server error', details: unknown[] = [], ): ApiErrors { - return this.createErrorWithData('INTERNAL_SERVER_ERROR', message, details) + return ApiErrorHandler.createErrorWithData('INTERNAL_SERVER_ERROR', message, details) } /** * Create a table already exists error response */ static tableExistsError(tableName: string): ApiErrors { - return this.createErrorWithData( + return ApiErrorHandler.createErrorWithData( 'TABLE_ALREADY_EXISTS', `Table with name '${tableName}' already exists`, ) diff --git a/backend/src/utils/wikibase-error-handler.ts b/backend/src/utils/wikibase-error-handler.ts index 43930cf..0ddcba7 100644 --- a/backend/src/utils/wikibase-error-handler.ts +++ b/backend/src/utils/wikibase-error-handler.ts @@ -217,7 +217,7 @@ export class WikibaseErrorHandler { // Calculate delay for next attempt const delay = Math.min( - this.retryConfig.baseDelay * Math.pow(this.retryConfig.backoffMultiplier, attempt - 1), + this.retryConfig.baseDelay * this.retryConfig.backoffMultiplier ** (attempt - 1), this.retryConfig.maxDelay, ) diff --git a/backend/tests/api/_meta_projects.test.ts b/backend/tests/api/_meta_projects.test.ts index 53c769f..09eb7c6 100644 --- a/backend/tests/api/_meta_projects.test.ts +++ b/backend/tests/api/_meta_projects.test.ts @@ -1,7 +1,7 @@ +import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { metaProjectsRoutes } from '@backend/api/_meta_projects' import { closeDb, databasePlugin, getDb, initializeDb } from '@backend/plugins/database' import { treaty } from '@elysiajs/eden' -import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { Elysia } from 'elysia' const TEST_PROJECT_ID = Bun.randomUUIDv7() diff --git a/backend/tests/api/project/import-file.test.ts b/backend/tests/api/project/import-file.test.ts index 9bc4792..38f2163 100644 --- a/backend/tests/api/project/import-file.test.ts +++ b/backend/tests/api/project/import-file.test.ts @@ -1,9 +1,9 @@ +import { afterEach, beforeEach, describe, expect, test } from 'bun:test' +import { readdir } from 'node:fs/promises' import { projectRoutes } from '@backend/api/project' import { closeDb, getDb, initializeDb } from '@backend/plugins/database' import { treaty } from '@elysiajs/eden' -import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { Elysia } from 'elysia' -import { readdir } from 'node:fs/promises' const createTestApi = () => { return treaty(new Elysia().use(projectRoutes)).api diff --git a/backend/tests/api/project/import.test.ts b/backend/tests/api/project/import.test.ts index 9ce1fb0..c217455 100644 --- a/backend/tests/api/project/import.test.ts +++ b/backend/tests/api/project/import.test.ts @@ -1,7 +1,7 @@ +import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { projectRoutes } from '@backend/api/project' import { closeDb, getDb, initializeDb } from '@backend/plugins/database' import { treaty } from '@elysiajs/eden' -import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { Elysia } from 'elysia' const createTestApi = () => { @@ -82,7 +82,9 @@ describe('POST /project/:projectId/import', () => { code: 'INTERNAL_SERVER_ERROR', message: 'An error occurred while importing the project', details: [ - expect.stringContaining('Invalid Input Error: Malformed JSON in file "./temp-invalid-json-file.json", at byte 1 in record/value 2: invalid literal.'), + expect.stringContaining( + 'Invalid Input Error: Malformed JSON in file "./temp-invalid-json-file.json", at byte 1 in record/value 2: invalid literal.', + ), ], }, ]) diff --git a/backend/tests/api/project/lowercase.test.ts b/backend/tests/api/project/lowercase.test.ts index 3755e64..6057277 100644 --- a/backend/tests/api/project/lowercase.test.ts +++ b/backend/tests/api/project/lowercase.test.ts @@ -1,9 +1,9 @@ +import { afterEach, beforeEach, describe, expect, test } from 'bun:test' +import { tmpdir } from 'node:os' import { projectRoutes } from '@backend/api/project' import { closeDb, initializeDb } from '@backend/plugins/database' import { treaty } from '@elysiajs/eden' -import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { Elysia } from 'elysia' -import { tmpdir } from 'node:os' interface TestData { name: string diff --git a/backend/tests/api/project/project.create.test.ts b/backend/tests/api/project/project.create.test.ts index 17d1b33..efc6a95 100644 --- a/backend/tests/api/project/project.create.test.ts +++ b/backend/tests/api/project/project.create.test.ts @@ -1,8 +1,8 @@ +import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { projectRoutes } from '@backend/api/project' import { UUID_REGEX_PATTERN } from '@backend/api/project/schemas' import { closeDb, initializeDb } from '@backend/plugins/database' import { treaty } from '@elysiajs/eden' -import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { Elysia } from 'elysia' const createTestApi = () => { diff --git a/backend/tests/api/project/project.delete.test.ts b/backend/tests/api/project/project.delete.test.ts index 099f061..7f5baa1 100644 --- a/backend/tests/api/project/project.delete.test.ts +++ b/backend/tests/api/project/project.delete.test.ts @@ -1,8 +1,8 @@ +import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { projectRoutes } from '@backend/api/project' import { UUID_REGEX } from '@backend/api/project/schemas' import { closeDb, getDb, initializeDb } from '@backend/plugins/database' import { treaty } from '@elysiajs/eden' -import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { Elysia } from 'elysia' const createTestApi = () => { diff --git a/backend/tests/api/project/project.get-all.test.ts b/backend/tests/api/project/project.get-all.test.ts index 6224f52..d50860a 100644 --- a/backend/tests/api/project/project.get-all.test.ts +++ b/backend/tests/api/project/project.get-all.test.ts @@ -1,6 +1,3 @@ -import { projectRoutes } from '@backend/api/project' -import { closeDb, getDb, initializeDb } from '@backend/plugins/database' -import { treaty } from '@elysiajs/eden' import { afterAll, afterEach, @@ -11,6 +8,9 @@ import { setSystemTime, test, } from 'bun:test' +import { projectRoutes } from '@backend/api/project' +import { closeDb, getDb, initializeDb } from '@backend/plugins/database' +import { treaty } from '@elysiajs/eden' import { Elysia } from 'elysia' const createTestApi = () => { diff --git a/backend/tests/api/project/project.get.test.ts b/backend/tests/api/project/project.get.test.ts index baf1415..cdb5da9 100644 --- a/backend/tests/api/project/project.get.test.ts +++ b/backend/tests/api/project/project.get.test.ts @@ -1,8 +1,8 @@ +import { afterEach, beforeEach, describe, expect, it } from 'bun:test' import { projectRoutes } from '@backend/api/project' import { UUID_REGEX } from '@backend/api/project/schemas' import { closeDb, initializeDb } from '@backend/plugins/database' import { treaty } from '@elysiajs/eden' -import { afterEach, beforeEach, describe, expect, it } from 'bun:test' import { Elysia } from 'elysia' const TEST_DATA = [ diff --git a/backend/tests/api/project/project.import-csv.test.ts b/backend/tests/api/project/project.import-csv.test.ts index 451ee67..e0214e1 100644 --- a/backend/tests/api/project/project.import-csv.test.ts +++ b/backend/tests/api/project/project.import-csv.test.ts @@ -1,8 +1,8 @@ +import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { projectRoutes } from '@backend/api/project' import { UUID_REGEX_PATTERN } from '@backend/api/project/schemas' import { closeDb, initializeDb } from '@backend/plugins/database' import { treaty } from '@elysiajs/eden' -import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { Elysia } from 'elysia' const createTestApi = () => { diff --git a/backend/tests/api/project/project.import-file.test.ts b/backend/tests/api/project/project.import-file.test.ts index efe2718..f7aa87e 100644 --- a/backend/tests/api/project/project.import-file.test.ts +++ b/backend/tests/api/project/project.import-file.test.ts @@ -1,10 +1,10 @@ +import { afterEach, beforeEach, describe, expect, test } from 'bun:test' +import { readdir } from 'node:fs/promises' import { projectRoutes } from '@backend/api/project' import { UUID_REGEX_PATTERN } from '@backend/api/project/schemas' import { closeDb, getDb, initializeDb } from '@backend/plugins/database' import { treaty } from '@elysiajs/eden' -import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { Elysia } from 'elysia' -import { readdir } from 'node:fs/promises' const TEST_DATA = [ { name: 'John', age: 30, city: 'New York' }, diff --git a/backend/tests/api/project/project.replace.test.ts b/backend/tests/api/project/project.replace.test.ts index 632b1b5..b7bd10e 100644 --- a/backend/tests/api/project/project.replace.test.ts +++ b/backend/tests/api/project/project.replace.test.ts @@ -1,9 +1,9 @@ +import { afterEach, beforeEach, describe, expect, test } from 'bun:test' +import { tmpdir } from 'node:os' import { projectRoutes } from '@backend/api/project' import { closeDb, initializeDb } from '@backend/plugins/database' import { treaty } from '@elysiajs/eden' -import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { Elysia } from 'elysia' -import { tmpdir } from 'node:os' interface TestData { name: string diff --git a/backend/tests/api/project/project.trim-whitespace.test.ts b/backend/tests/api/project/project.trim-whitespace.test.ts index e820486..9f1fbfb 100644 --- a/backend/tests/api/project/project.trim-whitespace.test.ts +++ b/backend/tests/api/project/project.trim-whitespace.test.ts @@ -1,9 +1,9 @@ +import { beforeEach, describe, expect, test } from 'bun:test' +import { tmpdir } from 'node:os' import { projectRoutes } from '@backend/api/project' import { initializeDb } from '@backend/plugins/database' import { treaty } from '@elysiajs/eden' -import { beforeEach, describe, expect, test } from 'bun:test' import { Elysia } from 'elysia' -import { tmpdir } from 'node:os' interface TestData { text_col: string diff --git a/backend/tests/api/project/project.wikibase.test.ts b/backend/tests/api/project/project.wikibase.test.ts index 9dce8ea..370b55f 100644 --- a/backend/tests/api/project/project.wikibase.test.ts +++ b/backend/tests/api/project/project.wikibase.test.ts @@ -1,14 +1,14 @@ +import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { - wikibaseRoutes, type Alias, type Label, type WikibaseCreateSchema, + wikibaseRoutes, } from '@backend/api/project/project.wikibase' import type { InstanceId } from '@backend/api/wikibase/schemas' import { closeDb, databasePlugin, getDb, initializeDb } from '@backend/plugins/database' import type { ItemId } from '@backend/types/wikibase-schema' import { treaty } from '@elysiajs/eden' -import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { Elysia } from 'elysia' let _strCounter = 0 diff --git a/backend/tests/api/project/uppercase.test.ts b/backend/tests/api/project/uppercase.test.ts index 8d6a3b9..e0d3815 100644 --- a/backend/tests/api/project/uppercase.test.ts +++ b/backend/tests/api/project/uppercase.test.ts @@ -1,9 +1,9 @@ +import { afterEach, beforeEach, describe, expect, test } from 'bun:test' +import { tmpdir } from 'node:os' import { projectRoutes } from '@backend/api/project' import { closeDb, initializeDb } from '@backend/plugins/database' import { treaty } from '@elysiajs/eden' -import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { Elysia } from 'elysia' -import { tmpdir } from 'node:os' interface TestData { name: string diff --git a/backend/tests/constraint-validation.service.test.ts b/backend/tests/constraint-validation.service.test.ts index ab2cc17..4152067 100644 --- a/backend/tests/constraint-validation.service.test.ts +++ b/backend/tests/constraint-validation.service.test.ts @@ -1,6 +1,6 @@ +import { beforeEach, describe, expect, mock, test } from 'bun:test' import { ConstraintValidationService } from '@backend/services/constraint-validation.service' import type { PropertyConstraint } from '@backend/types/wikibase-api' -import { beforeEach, describe, expect, mock, test } from 'bun:test' const mockConstraints: PropertyConstraint[] = [ { diff --git a/backend/tests/db.test.ts b/backend/tests/db.test.ts index f0cd532..7b15583 100644 --- a/backend/tests/db.test.ts +++ b/backend/tests/db.test.ts @@ -1,5 +1,5 @@ -import { closeDb, getDb, initializeDb } from '@backend/plugins/database' import { afterEach, beforeEach, describe, expect, expectTypeOf, test } from 'bun:test' +import { closeDb, getDb, initializeDb } from '@backend/plugins/database' describe('Database', () => { // Clean up the database after each test diff --git a/backend/tests/error-handler.test.ts b/backend/tests/error-handler.test.ts index 4d0355f..3bad336 100644 --- a/backend/tests/error-handler.test.ts +++ b/backend/tests/error-handler.test.ts @@ -1,5 +1,5 @@ -import { ApiErrorHandler } from '@backend/types/error-handler' import { describe, expect, it } from 'bun:test' +import { ApiErrorHandler } from '@backend/types/error-handler' describe('ApiErrorHandler', () => { describe('validationError', () => { diff --git a/backend/tests/services/lowercase-conversion.service.test.ts b/backend/tests/services/lowercase-conversion.service.test.ts index ed7aacd..2e70ecb 100644 --- a/backend/tests/services/lowercase-conversion.service.test.ts +++ b/backend/tests/services/lowercase-conversion.service.test.ts @@ -1,7 +1,7 @@ +import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { closeDb, getDb, initializeDb } from '@backend/plugins/database' import { LowercaseConversionService } from '@backend/services/lowercase-conversion.service' import type { DuckDBConnection } from '@duckdb/node-api' -import { afterEach, beforeEach, describe, expect, test } from 'bun:test' describe('LowercaseConversionService', () => { let service: LowercaseConversionService diff --git a/backend/tests/services/replace-operation.alter-table.service.test.ts b/backend/tests/services/replace-operation.alter-table.service.test.ts index be22d85..1b43078 100644 --- a/backend/tests/services/replace-operation.alter-table.service.test.ts +++ b/backend/tests/services/replace-operation.alter-table.service.test.ts @@ -1,6 +1,6 @@ +import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { closeDb, getDb, initializeDb } from '@backend/plugins/database' import { ReplaceOperationService } from '@backend/services/replace-operation.service' -import { afterEach, beforeEach, describe, expect, test } from 'bun:test' describe('non-string column datatype conversion', () => { beforeEach(async () => { diff --git a/backend/tests/services/replace-operation.service.test.ts b/backend/tests/services/replace-operation.service.test.ts index 31efd96..ae1750b 100644 --- a/backend/tests/services/replace-operation.service.test.ts +++ b/backend/tests/services/replace-operation.service.test.ts @@ -1,6 +1,6 @@ +import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { closeDb, getDb, initializeDb } from '@backend/plugins/database' import { ReplaceOperationService } from '@backend/services/replace-operation.service' -import { afterEach, beforeEach, describe, expect, test } from 'bun:test' interface TestData { name: string diff --git a/backend/tests/services/trim-whitespace.service.test.ts b/backend/tests/services/trim-whitespace.service.test.ts index e86b7f4..f940dc1 100644 --- a/backend/tests/services/trim-whitespace.service.test.ts +++ b/backend/tests/services/trim-whitespace.service.test.ts @@ -1,6 +1,6 @@ +import { beforeEach, describe, expect, test } from 'bun:test' import { getDb, initializeDb } from '@backend/plugins/database' import { TrimWhitespaceService } from '@backend/services/trim-whitespace.service' -import { beforeEach, describe, expect, test } from 'bun:test' describe('TrimWhitespaceService', () => { let service: TrimWhitespaceService diff --git a/backend/tests/services/uppercase-conversion.service.test.ts b/backend/tests/services/uppercase-conversion.service.test.ts index 8966c46..334805c 100644 --- a/backend/tests/services/uppercase-conversion.service.test.ts +++ b/backend/tests/services/uppercase-conversion.service.test.ts @@ -1,7 +1,7 @@ +import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { closeDb, getDb, initializeDb } from '@backend/plugins/database' import { UppercaseConversionService } from '@backend/services/uppercase-conversion.service' import type { DuckDBConnection } from '@duckdb/node-api' -import { afterEach, beforeEach, describe, expect, test } from 'bun:test' describe('UppercaseConversionService', () => { let service: UppercaseConversionService diff --git a/backend/tests/upload/file-processor.test.ts b/backend/tests/upload/file-processor.test.ts index 0f99ca3..38c1026 100644 --- a/backend/tests/upload/file-processor.test.ts +++ b/backend/tests/upload/file-processor.test.ts @@ -1,10 +1,10 @@ -import { processMultipleFiles } from '@backend/services/file-processor/multiple-files-processor' -import { processFile } from '@backend/services/file-processor/processor' -import type { FileInput, FileValidationOptions } from '@backend/services/file-processor/types' import { afterEach, beforeEach, describe, expect, test } from 'bun:test' import { mkdir, rm } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join } from 'node:path' +import { processMultipleFiles } from '@backend/services/file-processor/multiple-files-processor' +import { processFile } from '@backend/services/file-processor/processor' +import type { FileInput, FileValidationOptions } from '@backend/services/file-processor/types' import sharp from 'sharp' describe('file processor', () => { diff --git a/backend/tests/wikibase-error-handler.test.ts b/backend/tests/wikibase-error-handler.test.ts index dc96851..5c7a908 100644 --- a/backend/tests/wikibase-error-handler.test.ts +++ b/backend/tests/wikibase-error-handler.test.ts @@ -1,16 +1,16 @@ +import { describe, expect, test } from 'bun:test' import { - WikibaseErrorCode, createWikibaseError, isAuthenticationError, isRetryableError, isValidationError, + WikibaseErrorCode, } from '@backend/types/wikibase-errors' import { - WikibaseErrorHandler, handleWikibaseError, + WikibaseErrorHandler, withRetry, } from '@backend/utils/wikibase-error-handler' -import { describe, expect, test } from 'bun:test' describe('Wikibase Error Types', () => { test('should create WikibaseError with correct properties', () => { diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..2bda8c2 --- /dev/null +++ b/biome.json @@ -0,0 +1,79 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.2.6/schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "files": { + "ignoreUnknown": true, + "includes": ["**/*.ts", "**/*.vue"] + }, + "formatter": { + "enabled": true, + "indentStyle": "space", + "indentWidth": 2, + "lineWidth": 100, + "lineEnding": "lf" + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "correctness": { + "noUnusedVariables": "warn" + }, + "style": { + "useConst": "error" + }, + "suspicious": { + "noExplicitAny": "off" + }, + "complexity": { + "noForEach": "off" + } + }, + "domains": { + "vue": "all" + } + }, + "javascript": { + "formatter": { + "quoteStyle": "single", + "semicolons": "asNeeded", + "trailingCommas": "all", + "bracketSpacing": true, + "bracketSameLine": false, + "arrowParentheses": "always", + "attributePosition": "multiline" + } + }, + "json": { + "formatter": { + "indentWidth": 2 + } + }, + "assist": { + "enabled": true, + "actions": { + "source": { + "organizeImports": "on" + } + } + }, + "overrides": [ + { + "includes": ["frontend/**/*.vue"], + "linter": { + "rules": { + "style": { + "useNamingConvention": "off" + }, + "correctness": { + "noUnusedVariables": "off" + } + } + } + } + ] +} diff --git a/bun.lock b/bun.lock index 9959793..ec76a60 100644 --- a/bun.lock +++ b/bun.lock @@ -4,9 +4,9 @@ "": { "name": "dataforge", "devDependencies": { + "@biomejs/biome": "2.2.6", "@tsconfig/bun": "1.0.9", "concurrently": "^9.2.1", - "prettier-plugin-organize-imports": "^4.3.0", }, }, "backend": { @@ -28,16 +28,8 @@ "@types/bun": "catalog:", "@types/node": "catalog:", "@types/oauth": "^0.9.6", - "@typescript-eslint/eslint-plugin": "catalog:", - "@typescript-eslint/parser": "catalog:", "bun-types": "catalog:", - "eslint": "catalog:", - "eslint-config-prettier": "catalog:", - "eslint-plugin-no-relative-import-paths": "catalog:", - "eslint-plugin-prettier": "catalog:", - "prettier": "catalog:", "typescript": "catalog:", - "typescript-eslint": "catalog:", }, }, "frontend": { @@ -70,29 +62,18 @@ "@types/escape-html": "^1.0.4", "@types/linkify-it": "^5.0.0", "@types/node": "catalog:", - "@typescript-eslint/eslint-plugin": "catalog:", "@vitejs/plugin-vue": "^6.0.1", - "@vue/eslint-config-prettier": "^10.2.0", - "@vue/eslint-config-typescript": "^14.6.0", "@vue/tsconfig": "^0.8.1", "autoprefixer": "^10.4.21", "bun-types": "catalog:", "elysia": "catalog:", - "eslint": "catalog:", - "eslint-config-prettier": "catalog:", - "eslint-plugin-no-relative-import-paths": "catalog:", - "eslint-plugin-prettier": "catalog:", - "eslint-plugin-vue": "^10.5.1", - "prettier": "catalog:", "tailwindcss": "^4.1.14", "typescript": "catalog:", - "typescript-eslint": "catalog:", "unplugin-auto-import": "^20.2.0", "unplugin-vue-components": "^29.1.0", "vite": "^7.1.10", "vite-plugin-vue-devtools": "^8.0.2", "vite-tsconfig-paths": "^5.1.4", - "vue-eslint-parser": "^10.2.0", "vue-tsc": "^3.1.1", }, }, @@ -104,22 +85,12 @@ ], "catalog": { "@elysiajs/eden": "1.4.4", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "^9.28.0", - "@tsconfig/bun": "^1.0.9", + "@tsconfig/bun": "1.0.9", "@types/bun": "1.3.0", "@types/node": "^24.8.0", - "@typescript-eslint/eslint-plugin": "^8.46.1", - "@typescript-eslint/parser": "^8.46.1", "bun-types": "1.3.0", "elysia": "1.4.12", - "eslint": "^9.37.0", - "eslint-config-prettier": "^10.1.8", - "eslint-plugin-no-relative-import-paths": "^1.6.1", - "eslint-plugin-prettier": "^5.5.4", - "prettier": "^3.5.3", "typescript": "^5.9.3", - "typescript-eslint": "^8.0.0", }, "packages": { "@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], @@ -182,6 +153,24 @@ "@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], + "@biomejs/biome": ["@biomejs/biome@2.2.6", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.2.6", "@biomejs/cli-darwin-x64": "2.2.6", "@biomejs/cli-linux-arm64": "2.2.6", "@biomejs/cli-linux-arm64-musl": "2.2.6", "@biomejs/cli-linux-x64": "2.2.6", "@biomejs/cli-linux-x64-musl": "2.2.6", "@biomejs/cli-win32-arm64": "2.2.6", "@biomejs/cli-win32-x64": "2.2.6" }, "bin": { "biome": "bin/biome" } }, "sha512-yKTCNGhek0rL5OEW1jbLeZX8LHaM8yk7+3JRGv08my+gkpmtb5dDE+54r2ZjZx0ediFEn1pYBOJSmOdDP9xtFw=="], + + "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.2.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-UZPmn3M45CjTYulgcrFJFZv7YmK3pTxTJDrFYlNElT2FNnkkX4fsxjExTSMeWKQYoZjvekpH5cvrYZZlWu3yfA=="], + + "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.2.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-HOUIquhHVgh/jvxyClpwlpl/oeMqntlteL89YqjuFDiZ091P0vhHccwz+8muu3nTyHWM5FQslt+4Jdcd67+xWQ=="], + + "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.2.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-BpGtuMJGN+o8pQjvYsUKZ+4JEErxdSmcRD/JG3mXoWc6zrcA7OkuyGFN1mDggO0Q1n7qXxo/PcupHk8gzijt5g=="], + + "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.2.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-TjCenQq3N6g1C+5UT3jE1bIiJb5MWQvulpUngTIpFsL4StVAUXucWD0SL9MCW89Tm6awWfeXBbZBAhJwjyFbRQ=="], + + "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.2.6", "", { "os": "linux", "cpu": "x64" }, "sha512-1HaM/dpI/1Z68zp8ZdT6EiBq+/O/z97a2AiHMl+VAdv5/ELckFt9EvRb8hDHpk8hUMoz03gXkC7VPXOVtU7faA=="], + + "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.2.6", "", { "os": "linux", "cpu": "x64" }, "sha512-1ZcBux8zVM3JhWN2ZCPaYf0+ogxXG316uaoXJdgoPZcdK/rmRcRY7PqHdAos2ExzvjIdvhQp72UcveI98hgOog=="], + + "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.2.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-h3A88G8PGM1ryTeZyLlSdfC/gz3e95EJw9BZmA6Po412DRqwqPBa2Y9U+4ZSGUAXCsnSQE00jLV8Pyrh0d+jQw=="], + + "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.2.6", "", { "os": "win32", "cpu": "x64" }, "sha512-yx0CqeOhPjYQ5ZXgPfu8QYkgBhVJyvWe36as7jRuPrKPO5ylVDfwVtPQ+K/mooNTADW0IhxOZm3aPu16dP8yNQ=="], + "@bogeychan/elysia-logger": ["@bogeychan/elysia-logger@0.1.10", "", { "peerDependencies": { "elysia": ">= 1.2.10", "pino": ">= 9.6.0" } }, "sha512-wFp3KUCNIkCV4zcbo70gifHH99ch7e4LNrP5Xa5e2MRO2MDyPgM92SWQmrzkng6PsSZk13+UKJskGNQ+ZuDZkQ=="], "@borewit/text-codec": ["@borewit/text-codec@0.1.1", "", {}, "sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA=="], @@ -260,32 +249,6 @@ "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.10", "", { "os": "win32", "cpu": "x64" }, "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw=="], - "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.9.0", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g=="], - - "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.1", "", {}, "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ=="], - - "@eslint/config-array": ["@eslint/config-array@0.21.0", "", { "dependencies": { "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ=="], - - "@eslint/config-helpers": ["@eslint/config-helpers@0.4.0", "", { "dependencies": { "@eslint/core": "^0.16.0" } }, "sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog=="], - - "@eslint/core": ["@eslint/core@0.16.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q=="], - - "@eslint/eslintrc": ["@eslint/eslintrc@3.3.1", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ=="], - - "@eslint/js": ["@eslint/js@9.37.0", "", {}, "sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg=="], - - "@eslint/object-schema": ["@eslint/object-schema@2.1.6", "", {}, "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA=="], - - "@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.0", "", { "dependencies": { "@eslint/core": "^0.16.0", "levn": "^0.4.1" } }, "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A=="], - - "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], - - "@humanfs/node": ["@humanfs/node@0.16.7", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="], - - "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], - - "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], - "@img/colour": ["@img/colour@1.0.0", "", {}, "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw=="], "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.4", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.3" }, "os": "darwin", "cpu": "arm64" }, "sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA=="], @@ -344,16 +307,8 @@ "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], - - "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], - - "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], - "@pinia/testing": ["@pinia/testing@1.0.2", "", { "peerDependencies": { "pinia": ">=3.0.3" } }, "sha512-yZVXJTKh677J0AT8kOPxGk5s1v7hMQIDT3tmeriwtR5LDu41DvXTEBQf0ql9SsHW1mCSDG38QDFzSSl5ucJqnQ=="], - "@pkgr/core": ["@pkgr/core@0.2.9", "", {}, "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA=="], - "@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="], "@primeuix/styled": ["@primeuix/styled@0.7.3", "", { "dependencies": { "@primeuix/utils": "^0.6.1" } }, "sha512-qAzefzODuYZRaEh2b2uTJCtaT+qUMAt1WPCZhYgkbLUVQ8qt7hFL5BjTsqqCaiBWZCZtDkGmKhP19SRIL6hAlQ=="], @@ -472,8 +427,6 @@ "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], - "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], - "@types/linkify-it": ["@types/linkify-it@5.0.0", "", {}, "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q=="], "@types/node": ["@types/node@24.8.0", "", { "dependencies": { "undici-types": "~7.14.0" } }, "sha512-5x08bUtU8hfboMTrJ7mEO4CpepS9yBwAqcL52y86SWNmbPX8LVbNs3EP4cNrIZgdjk2NAlP2ahNihozpoZIxSg=="], @@ -484,26 +437,6 @@ "@types/web-bluetooth": ["@types/web-bluetooth@0.0.21", "", {}, "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA=="], - "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.46.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.46.1", "@typescript-eslint/type-utils": "8.46.1", "@typescript-eslint/utils": "8.46.1", "@typescript-eslint/visitor-keys": "8.46.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.46.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-rUsLh8PXmBjdiPY+Emjz9NX2yHvhS11v0SR6xNJkm5GM1MO9ea/1GoDKlHHZGrOJclL/cZ2i/vRUYVtjRhrHVQ=="], - - "@typescript-eslint/parser": ["@typescript-eslint/parser@8.46.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.46.1", "@typescript-eslint/types": "8.46.1", "@typescript-eslint/typescript-estree": "8.46.1", "@typescript-eslint/visitor-keys": "8.46.1", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-6JSSaBZmsKvEkbRUkf7Zj7dru/8ZCrJxAqArcLaVMee5907JdtEbKGsZ7zNiIm/UAkpGUkaSMZEXShnN2D1HZA=="], - - "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.46.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.46.1", "@typescript-eslint/types": "^8.46.1", "debug": "^4.3.4" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-FOIaFVMHzRskXr5J4Jp8lFVV0gz5ngv3RHmn+E4HYxSJ3DgDzU7fVI1/M7Ijh1zf6S7HIoaIOtln1H5y8V+9Zg=="], - - "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.46.1", "", { "dependencies": { "@typescript-eslint/types": "8.46.1", "@typescript-eslint/visitor-keys": "8.46.1" } }, "sha512-weL9Gg3/5F0pVQKiF8eOXFZp8emqWzZsOJuWRUNtHT+UNV2xSJegmpCNQHy37aEQIbToTq7RHKhWvOsmbM680A=="], - - "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.46.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-X88+J/CwFvlJB+mK09VFqx5FE4H5cXD+H/Bdza2aEWkSb8hnWIQorNcscRl4IEo1Cz9VI/+/r/jnGWkbWPx54g=="], - - "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.46.1", "", { "dependencies": { "@typescript-eslint/types": "8.46.1", "@typescript-eslint/typescript-estree": "8.46.1", "@typescript-eslint/utils": "8.46.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-+BlmiHIiqufBxkVnOtFwjah/vrkF4MtKKvpXrKSPLCkCtAp8H01/VV43sfqA98Od7nJpDcFnkwgyfQbOG0AMvw=="], - - "@typescript-eslint/types": ["@typescript-eslint/types@8.46.1", "", {}, "sha512-C+soprGBHwWBdkDpbaRC4paGBrkIXxVlNohadL5o0kfhsXqOC6GYH2S/Obmig+I0HTDl8wMaRySwrfrXVP8/pQ=="], - - "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.46.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.46.1", "@typescript-eslint/tsconfig-utils": "8.46.1", "@typescript-eslint/types": "8.46.1", "@typescript-eslint/visitor-keys": "8.46.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-uIifjT4s8cQKFQ8ZBXXyoUODtRoAd7F7+G8MKmtzj17+1UbdzFl52AzRyZRyKqPHhgzvXunnSckVu36flGy8cg=="], - - "@typescript-eslint/utils": ["@typescript-eslint/utils@8.46.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.46.1", "@typescript-eslint/types": "8.46.1", "@typescript-eslint/typescript-estree": "8.46.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-vkYUy6LdZS7q1v/Gxb2Zs7zziuXN0wxqsetJdeZdRe/f5dwJFglmuvZBfTUivCtjH725C1jWCDfpadadD95EDQ=="], - - "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.46.1", "", { "dependencies": { "@typescript-eslint/types": "8.46.1", "eslint-visitor-keys": "^4.2.1" } }, "sha512-ptkmIf2iDkNUjdeu2bQqhFPV1m6qTnFFjg7PPDjxKWaMaP0Z6I9l30Jr3g5QqbZGdw8YdYvLp+XnqnWWZOg/NA=="], - "@unhead/vue": ["@unhead/vue@2.0.19", "", { "dependencies": { "hookable": "^5.5.3", "unhead": "2.0.19" }, "peerDependencies": { "vue": ">=3.5.18" } }, "sha512-7BYjHfOaoZ9+ARJkT10Q2TjnTUqDXmMpfakIAsD/hXiuff1oqWg1xeXT5+MomhNcC15HbiABpbbBmITLSHxdKg=="], "@vitejs/plugin-vue": ["@vitejs/plugin-vue@6.0.1", "", { "dependencies": { "@rolldown/pluginutils": "1.0.0-beta.29" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0", "vue": "^3.2.25" } }, "sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw=="], @@ -536,10 +469,6 @@ "@vue/devtools-shared": ["@vue/devtools-shared@8.0.2", "", { "dependencies": { "rfdc": "^1.4.1" } }, "sha512-mLU0QVdy5Lp40PMGSixDw/Kbd6v5dkQXltd2r+mdVQV7iUog2NlZuLxFZApFZ/mObUBDhoCpf0T3zF2FWWdeHw=="], - "@vue/eslint-config-prettier": ["@vue/eslint-config-prettier@10.2.0", "", { "dependencies": { "eslint-config-prettier": "^10.0.1", "eslint-plugin-prettier": "^5.2.2" }, "peerDependencies": { "eslint": ">= 8.21.0", "prettier": ">= 3.0.0" } }, "sha512-GL3YBLwv/+b86yHcNNfPJxOTtVFJ4Mbc9UU3zR+KVoG7SwGTjPT+32fXamscNumElhcpXW3mT0DgzS9w32S7Bw=="], - - "@vue/eslint-config-typescript": ["@vue/eslint-config-typescript@14.6.0", "", { "dependencies": { "@typescript-eslint/utils": "^8.35.1", "fast-glob": "^3.3.3", "typescript-eslint": "^8.35.1", "vue-eslint-parser": "^10.2.0" }, "peerDependencies": { "eslint": "^9.10.0", "eslint-plugin-vue": "^9.28.0 || ^10.0.0", "typescript": ">=4.8.4" }, "optionalPeers": ["typescript"] }, "sha512-UpiRY/7go4Yps4mYCjkvlIbVWmn9YvPGQDxTAlcKLphyaD77LjIu3plH4Y9zNT0GB4f3K5tMmhhtRhPOgrQ/bQ=="], - "@vue/language-core": ["@vue/language-core@3.1.1", "", { "dependencies": { "@volar/language-core": "2.4.23", "@vue/compiler-dom": "^3.5.0", "@vue/shared": "^3.5.0", "alien-signals": "^3.0.0", "muggle-string": "^0.4.1", "path-browserify": "^1.0.1", "picomatch": "^4.0.2" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-qjMY3Q+hUCjdH+jLrQapqgpsJ0rd/2mAY02lZoHG3VFJZZZKLjAlV+Oo9QmWIT4jh8+Rx8RUGUi++d7T9Wb6Mw=="], "@vue/reactivity": ["@vue/reactivity@3.5.22", "", { "dependencies": { "@vue/shared": "3.5.22" } }, "sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A=="], @@ -564,10 +493,6 @@ "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], - "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], - - "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], - "alien-signals": ["alien-signals@3.0.0", "", {}, "sha512-JHoRJf18Y6HN4/KZALr3iU+0vW9LKG+8FMThQlbn4+gv8utsLIkwpomjElGPccGeNwh0FI2HN6BLnyFLo6OyLQ=="], "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], @@ -578,26 +503,18 @@ "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], - "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - "atomic-sleep": ["atomic-sleep@1.0.0", "", {}, "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="], "autoprefixer": ["autoprefixer@10.4.21", "", { "dependencies": { "browserslist": "^4.24.4", "caniuse-lite": "^1.0.30001702", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ=="], "backend": ["backend@workspace:backend"], - "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "baseline-browser-mapping": ["baseline-browser-mapping@2.8.8", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-be0PUaPsQX/gPWWgFsdD+GFzaoig5PXaUC1xLkQiYdDnANU8sMnHoQd8JhbJQuvTWrWLyeFN9Imb5Qtfvr4RrQ=="], "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], "birpc": ["birpc@2.6.1", "", {}, "sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ=="], - "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], - - "brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], - "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], "browserslist": ["browserslist@4.26.2", "", { "dependencies": { "baseline-browser-mapping": "^2.8.3", "caniuse-lite": "^1.0.30001741", "electron-to-chromium": "^1.5.218", "node-releases": "^2.0.21", "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A=="], @@ -606,8 +523,6 @@ "bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="], - "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], - "caniuse-lite": ["caniuse-lite@1.0.30001745", "", {}, "sha512-ywt6i8FzvdgrrrGbr1jZVObnVv6adj+0if2/omv9cmR2oiZs30zL4DIyaptKcbOrBdOIc74QTMoJvSE2QHh5UQ=="], "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], @@ -622,8 +537,6 @@ "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], - "concurrently": ["concurrently@9.2.1", "", { "dependencies": { "chalk": "4.1.2", "rxjs": "7.8.2", "shell-quote": "1.8.3", "supports-color": "8.1.1", "tree-kill": "1.2.2", "yargs": "17.7.2" }, "bin": { "conc": "dist/bin/concurrently.js", "concurrently": "dist/bin/concurrently.js" } }, "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng=="], "confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], @@ -642,8 +555,6 @@ "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], - "default-browser": ["default-browser@5.2.1", "", { "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" } }, "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg=="], "default-browser-id": ["default-browser-id@5.0.0", "", {}, "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA=="], @@ -670,34 +581,10 @@ "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], - "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], - - "eslint": ["eslint@9.37.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", "@eslint/config-helpers": "^0.4.0", "@eslint/core": "^0.16.0", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.37.0", "@eslint/plugin-kit": "^0.4.0", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig=="], - - "eslint-config-prettier": ["eslint-config-prettier@10.1.8", "", { "peerDependencies": { "eslint": ">=7.0.0" }, "bin": { "eslint-config-prettier": "bin/cli.js" } }, "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w=="], - - "eslint-plugin-no-relative-import-paths": ["eslint-plugin-no-relative-import-paths@1.6.1", "", {}, "sha512-YZNeOnsOrJcwhFw0X29MXjIzu2P/f5X2BZDPWw1R3VUYBRFxNIh77lyoL/XrMU9ewZNQPcEvAgL/cBOT1P330A=="], - - "eslint-plugin-prettier": ["eslint-plugin-prettier@5.5.4", "", { "dependencies": { "prettier-linter-helpers": "^1.0.0", "synckit": "^0.11.7" }, "peerDependencies": { "@types/eslint": ">=8.0.0", "eslint": ">=8.0.0", "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", "prettier": ">=3.0.0" }, "optionalPeers": ["@types/eslint", "eslint-config-prettier"] }, "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg=="], - - "eslint-plugin-vue": ["eslint-plugin-vue@10.5.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "natural-compare": "^1.4.0", "nth-check": "^2.1.1", "postcss-selector-parser": "^6.0.15", "semver": "^7.6.3", "xml-name-validator": "^4.0.0" }, "peerDependencies": { "@stylistic/eslint-plugin": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", "@typescript-eslint/parser": "^7.0.0 || ^8.0.0", "eslint": "^8.57.0 || ^9.0.0", "vue-eslint-parser": "^10.0.0" }, "optionalPeers": ["@stylistic/eslint-plugin", "@typescript-eslint/parser"] }, "sha512-SbR9ZBUFKgvWAbq3RrdCtWaW0IKm6wwUiApxf3BVTNfqUIo4IQQmreMg2iHFJJ6C/0wss3LXURBJ1OwS/MhFcQ=="], - - "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], - - "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], - - "espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="], - - "esquery": ["esquery@1.6.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg=="], - - "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], - - "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], + "escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], - "exact-mirror": ["exact-mirror@0.2.2", "", { "peerDependencies": { "@sinclair/typebox": "^0.34.15" }, "optionalPeers": ["@sinclair/typebox"] }, "sha512-CrGe+4QzHZlnrXZVlo/WbUZ4qQZq8C0uATQVGVgXIrNXgHDBBNFD1VRfssRA2C9t3RYvh3MadZSdg2Wy7HBoQA=="], "execa": ["execa@9.6.0", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.6", "figures": "^6.1.0", "get-stream": "^9.0.0", "human-signals": "^8.0.1", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", "pretty-ms": "^9.2.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", "yoctocolors": "^2.1.1" } }, "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw=="], @@ -706,38 +593,18 @@ "fast-decode-uri-component": ["fast-decode-uri-component@1.0.1", "", {}, "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg=="], - "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], - - "fast-diff": ["fast-diff@1.3.0", "", {}, "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw=="], - - "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], - - "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], - - "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], - "fast-redact": ["fast-redact@3.5.0", "", {}, "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A=="], - "fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="], - "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], "fflate": ["fflate@0.8.2", "", {}, "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="], "figures": ["figures@6.1.0", "", { "dependencies": { "is-unicode-supported": "^2.0.0" } }, "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg=="], - "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], - "file-type": ["file-type@21.0.0", "", { "dependencies": { "@tokenizer/inflate": "^0.2.7", "strtok3": "^10.2.2", "token-types": "^6.0.0", "uint8array-extras": "^1.4.0" } }, "sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg=="], "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], - "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], - - "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="], - - "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="], - "fraction.js": ["fraction.js@4.3.7", "", {}, "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew=="], "frontend": ["frontend@workspace:frontend"], @@ -750,16 +617,12 @@ "get-stream": ["get-stream@9.0.1", "", { "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" } }, "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA=="], - "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], - - "globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], + "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "globrex": ["globrex@0.1.2", "", {}, "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="], "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], - "graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="], - "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], "hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="], @@ -768,12 +631,6 @@ "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], - "ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], - - "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], - - "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], - "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], @@ -804,24 +661,12 @@ "js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], - "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], - "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], - - "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], - - "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], - "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], - "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], - "kolorist": ["kolorist@1.8.0", "", {}, "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ=="], - "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], - "lightningcss": ["lightningcss@1.30.1", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.30.1", "lightningcss-darwin-x64": "1.30.1", "lightningcss-freebsd-x64": "1.30.1", "lightningcss-linux-arm-gnueabihf": "1.30.1", "lightningcss-linux-arm64-gnu": "1.30.1", "lightningcss-linux-arm64-musl": "1.30.1", "lightningcss-linux-x64-gnu": "1.30.1", "lightningcss-linux-x64-musl": "1.30.1", "lightningcss-win32-arm64-msvc": "1.30.1", "lightningcss-win32-x64-msvc": "1.30.1" } }, "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg=="], "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.30.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ=="], @@ -848,22 +693,12 @@ "local-pkg": ["local-pkg@1.1.2", "", { "dependencies": { "mlly": "^1.7.4", "pkg-types": "^2.3.0", "quansync": "^0.2.11" } }, "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A=="], - "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], - - "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], - "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], "magic-string": ["magic-string@0.30.19", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw=="], - "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], - - "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], - "mini-svg-data-uri": ["mini-svg-data-uri@1.4.4", "", { "bin": { "mini-svg-data-uri": "cli.js" } }, "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg=="], - "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], - "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], "minizlib": ["minizlib@3.1.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="], @@ -880,8 +715,6 @@ "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], - "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], - "node-releases": ["node-releases@2.0.21", "", {}, "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw=="], "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], @@ -890,8 +723,6 @@ "npm-run-path": ["npm-run-path@6.0.0", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="], - "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], - "oauth": ["oauth@0.10.2", "", {}, "sha512-JtFnB+8nxDEXgNyniwz573xxbKSOu3R8D40xQKqcjwJ2CDkYqUDI53o6IuzDJBx60Z8VKCm271+t8iFjakrl8Q=="], "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], @@ -902,20 +733,10 @@ "openapi-types": ["openapi-types@12.1.3", "", {}, "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw=="], - "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], - - "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], - - "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], - - "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], - "parse-ms": ["parse-ms@4.0.0", "", {}, "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw=="], "path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="], - "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], - "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], @@ -942,14 +763,6 @@ "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], - "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], - - "prettier": ["prettier@3.6.2", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ=="], - - "prettier-linter-helpers": ["prettier-linter-helpers@1.0.0", "", { "dependencies": { "fast-diff": "^1.1.2" } }, "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w=="], - - "prettier-plugin-organize-imports": ["prettier-plugin-organize-imports@4.3.0", "", { "peerDependencies": { "prettier": ">=2.0", "typescript": ">=2.9", "vue-tsc": "^2.1.0 || 3" }, "optionalPeers": ["vue-tsc"] }, "sha512-FxFz0qFhyBsGdIsb697f/EkvHzi5SZOhWAjxcx2dLt+Q532bAlhswcXGYB1yzjZ69kW8UoadFBw7TyNwlq96Iw=="], - "pretty-ms": ["pretty-ms@9.3.0", "", { "dependencies": { "parse-ms": "^4.0.0" } }, "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ=="], "primeicons": ["primeicons@7.0.0", "", {}, "sha512-jK3Et9UzwzTsd6tzl2RmwrVY/b8raJ3QZLzoDACj+oTJ0oX7L9Hy+XnVwgo4QVKlKpnP/Ur13SXV/pVh4LzaDw=="], @@ -958,12 +771,8 @@ "process-warning": ["process-warning@5.0.0", "", {}, "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA=="], - "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], - "quansync": ["quansync@0.2.11", "", {}, "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA=="], - "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], - "quick-format-unescaped": ["quick-format-unescaped@4.0.4", "", {}, "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="], "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], @@ -972,18 +781,12 @@ "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], - "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], - - "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], - "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="], "rollup": ["rollup@4.52.3", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.52.3", "@rollup/rollup-android-arm64": "4.52.3", "@rollup/rollup-darwin-arm64": "4.52.3", "@rollup/rollup-darwin-x64": "4.52.3", "@rollup/rollup-freebsd-arm64": "4.52.3", "@rollup/rollup-freebsd-x64": "4.52.3", "@rollup/rollup-linux-arm-gnueabihf": "4.52.3", "@rollup/rollup-linux-arm-musleabihf": "4.52.3", "@rollup/rollup-linux-arm64-gnu": "4.52.3", "@rollup/rollup-linux-arm64-musl": "4.52.3", "@rollup/rollup-linux-loong64-gnu": "4.52.3", "@rollup/rollup-linux-ppc64-gnu": "4.52.3", "@rollup/rollup-linux-riscv64-gnu": "4.52.3", "@rollup/rollup-linux-riscv64-musl": "4.52.3", "@rollup/rollup-linux-s390x-gnu": "4.52.3", "@rollup/rollup-linux-x64-gnu": "4.52.3", "@rollup/rollup-linux-x64-musl": "4.52.3", "@rollup/rollup-openharmony-arm64": "4.52.3", "@rollup/rollup-win32-arm64-msvc": "4.52.3", "@rollup/rollup-win32-ia32-msvc": "4.52.3", "@rollup/rollup-win32-x64-gnu": "4.52.3", "@rollup/rollup-win32-x64-msvc": "4.52.3", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A=="], "run-applescript": ["run-applescript@7.1.0", "", {}, "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q=="], - "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], - "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="], "safe-stable-stringify": ["safe-stable-stringify@2.5.0", "", {}, "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="], @@ -1018,8 +821,6 @@ "strip-final-newline": ["strip-final-newline@4.0.0", "", {}, "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw=="], - "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], - "strip-literal": ["strip-literal@3.0.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA=="], "strtok3": ["strtok3@10.3.4", "", { "dependencies": { "@tokenizer/token": "^0.3.0" } }, "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg=="], @@ -1028,8 +829,6 @@ "supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], - "synckit": ["synckit@0.11.11", "", { "dependencies": { "@pkgr/core": "^0.2.9" } }, "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw=="], - "tailwindcss": ["tailwindcss@4.1.14", "", {}, "sha512-b7pCxjGO98LnxVkKjaZSDeNuljC4ueKUddjENJOADtubtdo8llTaJy7HwBMeLNSSo2N5QIAgklslK1+Ir8r6CA=="], "tailwindcss-primeui": ["tailwindcss-primeui@0.6.1", "", { "peerDependencies": { "tailwindcss": ">=3.1.0" } }, "sha512-T69Rylcrmnt8zy9ik+qZvsLuRIrS9/k6rYJSIgZ1trnbEzGDDQSCIdmfyZknevqiHwpSJHSmQ9XT2C+S/hJY4A=="], @@ -1050,18 +849,12 @@ "tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="], - "ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="], - "tsconfck": ["tsconfck@3.1.6", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "tsconfck": "bin/tsconfck.js" } }, "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w=="], "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], - "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "typescript-eslint": ["typescript-eslint@8.46.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.46.1", "@typescript-eslint/parser": "8.46.1", "@typescript-eslint/typescript-estree": "8.46.1", "@typescript-eslint/utils": "8.46.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-VHgijW803JafdSsDO8I761r3SHrgk4T00IdyQ+/UsthtgPRsBWQLqoSxOolxTpxRKi1kGXK0bSz4CoAc9ObqJA=="], - "uc.micro": ["uc.micro@2.1.0", "", {}, "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A=="], "ufo": ["ufo@1.6.1", "", {}, "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA=="], @@ -1086,8 +879,6 @@ "update-browserslist-db": ["update-browserslist-db@1.1.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw=="], - "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], - "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], "vite": ["vite@7.1.10", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-CmuvUBzVJ/e3HGxhg6cYk88NGgTnBoOo7ogtfJJ0fefUWAxN/WDSUa50o+oVBxuIhO8FoEZW0j2eW7sfjs5EtA=="], @@ -1108,8 +899,6 @@ "vue": ["vue@3.5.22", "", { "dependencies": { "@vue/compiler-dom": "3.5.22", "@vue/compiler-sfc": "3.5.22", "@vue/runtime-dom": "3.5.22", "@vue/server-renderer": "3.5.22", "@vue/shared": "3.5.22" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ=="], - "vue-eslint-parser": ["vue-eslint-parser@10.2.0", "", { "dependencies": { "debug": "^4.4.0", "eslint-scope": "^8.2.0", "eslint-visitor-keys": "^4.2.0", "espree": "^10.3.0", "esquery": "^1.6.0", "semver": "^7.6.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0" } }, "sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw=="], - "vue-router": ["vue-router@4.6.3", "", { "dependencies": { "@vue/devtools-api": "^6.6.4" }, "peerDependencies": { "vue": "^3.5.0" } }, "sha512-ARBedLm9YlbvQomnmq91Os7ck6efydTSpRP3nuOKCvgJOHNrhRoJDSKtee8kcL1Vf7nz6U+PMBL+hTvR3bTVQg=="], "vue-tsc": ["vue-tsc@3.1.1", "", { "dependencies": { "@volar/typescript": "2.4.23", "@vue/language-core": "3.1.1" }, "peerDependencies": { "typescript": ">=5.0.0" }, "bin": { "vue-tsc": "./bin/vue-tsc.js" } }, "sha512-fyixKxFniOVgn+L/4+g8zCG6dflLLt01Agz9jl3TO45Bgk87NZJRmJVPsiK+ouq3LB91jJCbOV+pDkzYTxbI7A=="], @@ -1118,14 +907,10 @@ "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], - "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "wsl-utils": ["wsl-utils@0.1.0", "", { "dependencies": { "is-wsl": "^3.1.0" } }, "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw=="], - "xml-name-validator": ["xml-name-validator@4.0.0", "", {}, "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw=="], - "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], @@ -1134,8 +919,6 @@ "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], - "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], - "yoctocolors": ["yoctocolors@2.1.2", "", {}, "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug=="], "@babel/code-frame/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], @@ -1146,10 +929,6 @@ "@babel/helper-create-class-features-plugin/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], - - "@eslint/eslintrc/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "@primevue/core/@primeuix/styled": ["@primeuix/styled@0.7.4", "", { "dependencies": { "@primeuix/utils": "^0.6.1" } }, "sha512-QSO/NpOQg8e9BONWRBx9y8VGMCMYz0J/uKfNJEya/RGEu7ARx0oYW0ugI1N3/KB1AAvyGxzKBzGImbwg0KUiOQ=="], "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.5.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg=="], @@ -1166,8 +945,6 @@ "@types/oauth/@types/node": ["@types/node@24.5.2", "", { "dependencies": { "undici-types": "~7.12.0" } }, "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ=="], - "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], - "@vue/compiler-core/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], "@vue/compiler-sfc/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], @@ -1176,26 +953,12 @@ "@vue/devtools-core/nanoid": ["nanoid@5.1.6", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg=="], - "@vue/eslint-config-typescript/@typescript-eslint/utils": ["@typescript-eslint/utils@8.44.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.44.1", "@typescript-eslint/types": "8.44.1", "@typescript-eslint/typescript-estree": "8.44.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-DpX5Fp6edTlocMCwA+mHY8Mra+pPjRZ0TfHkXI8QFelIKcbADQz1LUPNtzOFUriBB2UYqw4Pi9+xV4w9ZczHFg=="], - - "@vue/eslint-config-typescript/typescript-eslint": ["typescript-eslint@8.44.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.44.1", "@typescript-eslint/parser": "8.44.1", "@typescript-eslint/typescript-estree": "8.44.1", "@typescript-eslint/utils": "8.44.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-0ws8uWGrUVTjEeN2OM4K1pLKHK/4NiNP/vz6ns+LjT/6sqpaYzIVFajZb1fj/IDwpsrrHb3Jy0Qm5u9CPcKaeg=="], - "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - - "eslint/ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - - "eslint-plugin-vue/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], - - "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - "lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], - "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "mlly/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], @@ -1204,72 +967,14 @@ "readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "unimport/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], - "vue-router/@vue/devtools-api": ["@vue/devtools-api@6.6.4", "", {}, "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="], "@types/oauth/@types/node/undici-types": ["undici-types@7.12.0", "", {}, "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ=="], - "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - "@vue/devtools-api/@vue/devtools-kit/@vue/devtools-shared": ["@vue/devtools-shared@7.7.7", "", { "dependencies": { "rfdc": "^1.4.1" } }, "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw=="], "@vue/devtools-api/@vue/devtools-kit/perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], - "@vue/eslint-config-typescript/@typescript-eslint/utils/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.44.1", "", { "dependencies": { "@typescript-eslint/types": "8.44.1", "@typescript-eslint/visitor-keys": "8.44.1" } }, "sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg=="], - - "@vue/eslint-config-typescript/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@8.44.1", "", {}, "sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ=="], - - "@vue/eslint-config-typescript/@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.44.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.44.1", "@typescript-eslint/tsconfig-utils": "8.44.1", "@typescript-eslint/types": "8.44.1", "@typescript-eslint/visitor-keys": "8.44.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A=="], - - "@vue/eslint-config-typescript/typescript-eslint/@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.44.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.44.1", "@typescript-eslint/type-utils": "8.44.1", "@typescript-eslint/utils": "8.44.1", "@typescript-eslint/visitor-keys": "8.44.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.44.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-molgphGqOBT7t4YKCSkbasmu1tb1MgrZ2szGzHbclF7PNmOkSTQVHy+2jXOSnxvR3+Xe1yySHFZoqMpz3TfQsw=="], - - "@vue/eslint-config-typescript/typescript-eslint/@typescript-eslint/parser": ["@typescript-eslint/parser@8.44.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.44.1", "@typescript-eslint/types": "8.44.1", "@typescript-eslint/typescript-estree": "8.44.1", "@typescript-eslint/visitor-keys": "8.44.1", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-EHrrEsyhOhxYt8MTg4zTF+DJMuNBzWwgvvOYNj/zm1vnaD/IC5zCXFehZv94Piqa2cRFfXrTFxIvO95L7Qc/cw=="], - - "@vue/eslint-config-typescript/typescript-eslint/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.44.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.44.1", "@typescript-eslint/tsconfig-utils": "8.44.1", "@typescript-eslint/types": "8.44.1", "@typescript-eslint/visitor-keys": "8.44.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A=="], - "mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], - - "@vue/eslint-config-typescript/@typescript-eslint/utils/@typescript-eslint/scope-manager/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.44.1", "", { "dependencies": { "@typescript-eslint/types": "8.44.1", "eslint-visitor-keys": "^4.2.1" } }, "sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw=="], - - "@vue/eslint-config-typescript/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.44.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.44.1", "@typescript-eslint/types": "^8.44.1", "debug": "^4.3.4" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA=="], - - "@vue/eslint-config-typescript/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.44.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ=="], - - "@vue/eslint-config-typescript/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.44.1", "", { "dependencies": { "@typescript-eslint/types": "8.44.1", "eslint-visitor-keys": "^4.2.1" } }, "sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw=="], - - "@vue/eslint-config-typescript/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], - - "@vue/eslint-config-typescript/typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.44.1", "", { "dependencies": { "@typescript-eslint/types": "8.44.1", "@typescript-eslint/visitor-keys": "8.44.1" } }, "sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg=="], - - "@vue/eslint-config-typescript/typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.44.1", "", { "dependencies": { "@typescript-eslint/types": "8.44.1", "@typescript-eslint/typescript-estree": "8.44.1", "@typescript-eslint/utils": "8.44.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-KdEerZqHWXsRNKjF9NYswNISnFzXfXNDfPxoTh7tqohU/PRIbwTmsjGK6V9/RTYWau7NZvfo52lgVk+sJh0K3g=="], - - "@vue/eslint-config-typescript/typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.44.1", "", { "dependencies": { "@typescript-eslint/types": "8.44.1", "eslint-visitor-keys": "^4.2.1" } }, "sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw=="], - - "@vue/eslint-config-typescript/typescript-eslint/@typescript-eslint/parser/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.44.1", "", { "dependencies": { "@typescript-eslint/types": "8.44.1", "@typescript-eslint/visitor-keys": "8.44.1" } }, "sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg=="], - - "@vue/eslint-config-typescript/typescript-eslint/@typescript-eslint/parser/@typescript-eslint/types": ["@typescript-eslint/types@8.44.1", "", {}, "sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ=="], - - "@vue/eslint-config-typescript/typescript-eslint/@typescript-eslint/parser/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.44.1", "", { "dependencies": { "@typescript-eslint/types": "8.44.1", "eslint-visitor-keys": "^4.2.1" } }, "sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw=="], - - "@vue/eslint-config-typescript/typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.44.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.44.1", "@typescript-eslint/types": "^8.44.1", "debug": "^4.3.4" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA=="], - - "@vue/eslint-config-typescript/typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.44.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ=="], - - "@vue/eslint-config-typescript/typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/types": ["@typescript-eslint/types@8.44.1", "", {}, "sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ=="], - - "@vue/eslint-config-typescript/typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.44.1", "", { "dependencies": { "@typescript-eslint/types": "8.44.1", "eslint-visitor-keys": "^4.2.1" } }, "sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw=="], - - "@vue/eslint-config-typescript/typescript-eslint/@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], - - "@vue/eslint-config-typescript/@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - - "@vue/eslint-config-typescript/typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager/@typescript-eslint/types": ["@typescript-eslint/types@8.44.1", "", {}, "sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ=="], - - "@vue/eslint-config-typescript/typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/types": ["@typescript-eslint/types@8.44.1", "", {}, "sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ=="], - - "@vue/eslint-config-typescript/typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys/@typescript-eslint/types": ["@typescript-eslint/types@8.44.1", "", {}, "sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ=="], - - "@vue/eslint-config-typescript/typescript-eslint/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], } } diff --git a/eslint.config.ts b/eslint.config.ts deleted file mode 100644 index 9a56a4b..0000000 --- a/eslint.config.ts +++ /dev/null @@ -1,33 +0,0 @@ -import pluginJs from '@eslint/js' -import prettierConfig from 'eslint-config-prettier' -import { defineConfig } from 'eslint/config' -import globals from 'globals' -import tseslint from 'typescript-eslint' - -export default defineConfig( - { - ignores: ['dist', 'node_modules', '**/*.d.ts'], - }, - { - languageOptions: { - globals: globals.browser, - parserOptions: { - projectService: true, - tsconfigRootDir: import.meta.dirname, - }, - }, - }, - pluginJs.configs.recommended, - ...tseslint.configs.recommended, - prettierConfig, - { - rules: { - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/ban-ts-comment': 'off', - '@typescript-eslint/no-unused-vars': [ - 'warn', - { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }, - ], - }, - }, -) diff --git a/frontend/eslint.config.ts b/frontend/eslint.config.ts deleted file mode 100644 index 0c86bd2..0000000 --- a/frontend/eslint.config.ts +++ /dev/null @@ -1,46 +0,0 @@ -import prettierConfig from 'eslint-config-prettier' -import pluginVue from 'eslint-plugin-vue' -import { defineConfig } from 'eslint/config' -import tseslint from 'typescript-eslint' -import vueParser from 'vue-eslint-parser' - -export default defineConfig( - { - ignores: [ - '*.config.*', - '*.d.ts', - '*.json', - 'bun.lock', - 'dist/**', - 'node_modules/**', - 'src/**/*.test.ts', - ], - }, - ...pluginVue.configs['flat/recommended'], - ...tseslint.configs.recommendedTypeChecked, - prettierConfig, - { - files: ['**/*.{ts,vue}'], - languageOptions: { - parser: vueParser, - parserOptions: { - parser: tseslint.parser, - projectService: true, - tsconfigRootDir: import.meta.dirname, - extraFileExtensions: ['.vue'], - }, - }, - plugins: { - '@typescript-eslint': tseslint.plugin, - }, - rules: { - 'vue/multi-word-component-names': 'off', - 'vue/singleline-html-element-content-newline': 'off', - 'vue/html-indent': 'off', - '@typescript-eslint/ban-ts-comment': 'off', - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-explicit-any': 'off', - 'comma-dangle': ['error', 'always-multiline'], - }, - }, -) diff --git a/frontend/package.json b/frontend/package.json index 3560d68..f22cfb3 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -6,9 +6,6 @@ "type": "module", "scripts": { "dev": "vite", - "build": "vite build", - "preview": "vite preview", - "lint": "eslint", "typecheck": "vue-tsc" }, "dependencies": { @@ -38,29 +35,18 @@ "@types/escape-html": "^1.0.4", "@types/linkify-it": "^5.0.0", "@types/node": "catalog:", - "@typescript-eslint/eslint-plugin": "catalog:", "@vitejs/plugin-vue": "^6.0.1", - "@vue/eslint-config-prettier": "^10.2.0", - "@vue/eslint-config-typescript": "^14.6.0", "@vue/tsconfig": "^0.8.1", "autoprefixer": "^10.4.21", "bun-types": "catalog:", "elysia": "catalog:", - "eslint": "catalog:", - "eslint-config-prettier": "catalog:", - "eslint-plugin-no-relative-import-paths": "catalog:", - "eslint-plugin-prettier": "catalog:", - "eslint-plugin-vue": "^10.5.1", - "prettier": "catalog:", "tailwindcss": "^4.1.14", "typescript": "catalog:", - "typescript-eslint": "catalog:", "unplugin-auto-import": "^20.2.0", "unplugin-vue-components": "^29.1.0", "vite": "^7.1.10", "vite-plugin-vue-devtools": "^8.0.2", "vite-tsconfig-paths": "^5.1.4", - "vue-eslint-parser": "^10.2.0", "vue-tsc": "^3.1.1" } } diff --git a/frontend/src/core/plugins/api.ts b/frontend/src/core/plugins/api.ts index ddbff96..51655ce 100644 --- a/frontend/src/core/plugins/api.ts +++ b/frontend/src/core/plugins/api.ts @@ -1,6 +1,6 @@ import type { App as ElysiaApp } from '@backend/index' import { treaty } from '@elysiajs/eden' -import { inject, type InjectionKey, type App as VueApp } from 'vue' +import { type InjectionKey, inject, type App as VueApp } from 'vue' type ApiClient = ReturnType> diff --git a/frontend/src/core/router/router.ts b/frontend/src/core/router/router.ts index 1cb3bbe..2a3ccca 100644 --- a/frontend/src/core/router/router.ts +++ b/frontend/src/core/router/router.ts @@ -47,8 +47,7 @@ const router = createRouter({ history: createWebHashHistory(), routes, // Enable smooth scrolling to anchor links - // @ts-expect-error - scrollBehavior: (to, from, savedPosition) => { + scrollBehavior: (to, _from, savedPosition) => { if (savedPosition) { return savedPosition } else if (to.hash) { diff --git a/frontend/src/features/data-processing/composables/__tests__/useColumnDataTypeIndicators.test.ts b/frontend/src/features/data-processing/composables/__tests__/useColumnDataTypeIndicators.test.ts index 45a6219..4d2d21c 100644 --- a/frontend/src/features/data-processing/composables/__tests__/useColumnDataTypeIndicators.test.ts +++ b/frontend/src/features/data-processing/composables/__tests__/useColumnDataTypeIndicators.test.ts @@ -1,6 +1,6 @@ +import { describe, expect, test } from 'bun:test' import { useColumnDataTypeIndicators } from '@frontend/features/data-processing/composables/useColumnDataTypeIndicators' import type { ColumnInfo } from '@frontend/shared/types/wikibase-schema' -import { describe, expect, test } from 'bun:test' describe('useColumnDataTypeIndicators', () => { const { diff --git a/frontend/src/features/data-processing/composables/__tests__/useColumnGeneration.test.ts b/frontend/src/features/data-processing/composables/__tests__/useColumnGeneration.test.ts index 7e1903a..8a0be45 100644 --- a/frontend/src/features/data-processing/composables/__tests__/useColumnGeneration.test.ts +++ b/frontend/src/features/data-processing/composables/__tests__/useColumnGeneration.test.ts @@ -1,6 +1,6 @@ +import { describe, expect, it } from 'bun:test' import type { DuckDBColumnSchema } from '@backend/api/project/schemas' import { useColumnGeneration } from '@frontend/features/data-processing/composables/useColumnGeneration' -import { describe, expect, it } from 'bun:test' describe('useColumnGeneration', () => { const { generateColumns } = useColumnGeneration() diff --git a/frontend/src/features/data-processing/composables/__tests__/useDataTypeCompatibility.test.ts b/frontend/src/features/data-processing/composables/__tests__/useDataTypeCompatibility.test.ts index a13664d..9e2178e 100644 --- a/frontend/src/features/data-processing/composables/__tests__/useDataTypeCompatibility.test.ts +++ b/frontend/src/features/data-processing/composables/__tests__/useDataTypeCompatibility.test.ts @@ -1,6 +1,6 @@ +import { describe, expect, test } from 'bun:test' import { useDataTypeCompatibility } from '@frontend/features/data-processing/composables/useDataTypeCompatibility' import type { ColumnInfo } from '@frontend/shared/types/wikibase-schema' -import { describe, expect, test } from 'bun:test' describe('useDataTypeCompatibility Composable', () => { const { diff --git a/frontend/src/features/data-processing/composables/useColumnDataTypeIndicators.ts b/frontend/src/features/data-processing/composables/useColumnDataTypeIndicators.ts index 01c8943..9a51a10 100644 --- a/frontend/src/features/data-processing/composables/useColumnDataTypeIndicators.ts +++ b/frontend/src/features/data-processing/composables/useColumnDataTypeIndicators.ts @@ -140,7 +140,7 @@ export const useColumnDataTypeIndicators = () => { // Truncate individual values if they're too long const truncateValue = (value: string, maxLength: number = 30): string => { - return value.length > maxLength ? value.substring(0, maxLength) + '...' : value + return value.length > maxLength ? `${value.substring(0, maxLength)}...` : value } const displayValues = sampleValues.slice(0, maxDisplay).map((val) => truncateValue(val)) diff --git a/frontend/src/features/data-processing/composables/useColumnGeneration.ts b/frontend/src/features/data-processing/composables/useColumnGeneration.ts index 76e0e62..8a77bcd 100644 --- a/frontend/src/features/data-processing/composables/useColumnGeneration.ts +++ b/frontend/src/features/data-processing/composables/useColumnGeneration.ts @@ -1,4 +1,4 @@ -import { DuckDBColumnSchema } from '@backend/api/project/schemas' +import type { DuckDBColumnSchema } from '@backend/api/project/schemas' export interface ProjectColumn { field: string diff --git a/frontend/src/features/wikibase-schema/components/SchemaSelector.vue b/frontend/src/features/wikibase-schema/components/SchemaSelector.vue index 7b8f183..7d43371 100644 --- a/frontend/src/features/wikibase-schema/components/SchemaSelector.vue +++ b/frontend/src/features/wikibase-schema/components/SchemaSelector.vue @@ -26,7 +26,7 @@ const formatDate = (dateString: string) => { try { const date = new Date(dateString) - if (isNaN(date.getTime())) return 'Invalid Date' + if (Number.isNaN(date.getTime())) return 'Invalid Date' return date.toLocaleDateString('en-US', { year: 'numeric', @@ -44,7 +44,7 @@ const formatDateTime = (dateString: string) => { try { const date = new Date(dateString) - if (isNaN(date.getTime())) return 'Invalid Date' + if (Number.isNaN(date.getTime())) return 'Invalid Date' return date.toLocaleDateString('en-US', { year: 'numeric', diff --git a/frontend/src/features/wikibase-schema/components/ValidationDisplay.vue b/frontend/src/features/wikibase-schema/components/ValidationDisplay.vue index 8120ffc..8712e53 100644 --- a/frontend/src/features/wikibase-schema/components/ValidationDisplay.vue +++ b/frontend/src/features/wikibase-schema/components/ValidationDisplay.vue @@ -61,7 +61,7 @@ const dragDropStore = useDragDropStore() // Filter errors based on path filter const errors = computed(() => { - let filtered = props.pathFilter + const filtered = props.pathFilter ? validationStore.errors.filter((error) => error.path.startsWith(props.pathFilter!)) : validationStore.errors @@ -69,7 +69,7 @@ const errors = computed(() => { }) const warnings = computed(() => { - let filtered = props.pathFilter + const filtered = props.pathFilter ? validationStore.warnings.filter((warning) => warning.path.startsWith(props.pathFilter!)) : validationStore.warnings diff --git a/frontend/src/features/wikibase-schema/composables/__tests__/usePropertySelection.test.ts b/frontend/src/features/wikibase-schema/composables/__tests__/usePropertySelection.test.ts index 8a7fcd4..9294582 100644 --- a/frontend/src/features/wikibase-schema/composables/__tests__/usePropertySelection.test.ts +++ b/frontend/src/features/wikibase-schema/composables/__tests__/usePropertySelection.test.ts @@ -1,6 +1,6 @@ +import { beforeEach, describe, expect, test } from 'bun:test' import type { PropertyReference } from '@backend/api/project/project.wikibase' import { usePropertySelection } from '@frontend/features/wikibase-schema/composables/usePropertySelection' -import { beforeEach, describe, expect, test } from 'bun:test' describe('usePropertySelection', () => { let composable: ReturnType diff --git a/frontend/src/features/wikibase-schema/composables/__tests__/useReferenceValueMapping.test.ts b/frontend/src/features/wikibase-schema/composables/__tests__/useReferenceValueMapping.test.ts index 8cb4253..16f3295 100644 --- a/frontend/src/features/wikibase-schema/composables/__tests__/useReferenceValueMapping.test.ts +++ b/frontend/src/features/wikibase-schema/composables/__tests__/useReferenceValueMapping.test.ts @@ -1,10 +1,10 @@ +import { describe, expect, test } from 'bun:test' import type { PropertyValueMap, ReferenceSchemaMapping, } from '@backend/api/project/project.wikibase' import { useReferenceValueMapping } from '@frontend/features/wikibase-schema/composables/useReferenceValueMapping' import type { ColumnInfo } from '@frontend/shared/types/wikibase-schema' -import { describe, expect, test } from 'bun:test' import type { UUID } from 'crypto' const TEST_REFERENCE_ID: UUID = Bun.randomUUIDv7() as UUID diff --git a/frontend/src/features/wikibase-schema/composables/__tests__/useSchemaApi.test.ts b/frontend/src/features/wikibase-schema/composables/__tests__/useSchemaApi.test.ts index a4bf21b..b023a5a 100644 --- a/frontend/src/features/wikibase-schema/composables/__tests__/useSchemaApi.test.ts +++ b/frontend/src/features/wikibase-schema/composables/__tests__/useSchemaApi.test.ts @@ -1,7 +1,7 @@ +import { afterEach, beforeEach, describe, expect, expectTypeOf, it, mock } from 'bun:test' import { useSchemaApi } from '@frontend/features/wikibase-schema/composables/useSchemaApi' import { useSchemaStore } from '@frontend/features/wikibase-schema/stores/schema.store' import { createTestingPinia } from '@pinia/testing' -import { afterEach, beforeEach, describe, expect, expectTypeOf, it, mock } from 'bun:test' import type { UUID } from 'crypto' import { setActivePinia } from 'pinia' diff --git a/frontend/src/features/wikibase-schema/composables/__tests__/useSchemaCompletenessIntegration.test.ts b/frontend/src/features/wikibase-schema/composables/__tests__/useSchemaCompletenessIntegration.test.ts index 3807f42..8269a3f 100644 --- a/frontend/src/features/wikibase-schema/composables/__tests__/useSchemaCompletenessIntegration.test.ts +++ b/frontend/src/features/wikibase-schema/composables/__tests__/useSchemaCompletenessIntegration.test.ts @@ -1,8 +1,8 @@ +import { beforeEach, describe, expect, mock, test } from 'bun:test' import type { PropertyReference, ValueMapping } from '@backend/api/project/project.wikibase' import { useSchemaValidationUI } from '@frontend/features/wikibase-schema/composables/useSchemaValidationUI' import { useSchemaStore } from '@frontend/features/wikibase-schema/stores/schema.store' import { useValidationStore } from '@frontend/features/wikibase-schema/stores/validation.store' -import { beforeEach, describe, expect, mock, test } from 'bun:test' import { createPinia, setActivePinia } from 'pinia' describe('Schema Completeness Validation Integration', () => { diff --git a/frontend/src/features/wikibase-schema/composables/__tests__/useSchemaCompletenessValidation.test.ts b/frontend/src/features/wikibase-schema/composables/__tests__/useSchemaCompletenessValidation.test.ts index 2f071e1..a6a7c94 100644 --- a/frontend/src/features/wikibase-schema/composables/__tests__/useSchemaCompletenessValidation.test.ts +++ b/frontend/src/features/wikibase-schema/composables/__tests__/useSchemaCompletenessValidation.test.ts @@ -1,3 +1,4 @@ +import { beforeEach, describe, expect, mock, test } from 'bun:test' import type { PropertyReference, StatementSchemaMapping, @@ -6,7 +7,6 @@ import type { import { useSchemaCompletenessValidation } from '@frontend/features/wikibase-schema/composables/useSchemaCompletenessValidation' import { useSchemaStore } from '@frontend/features/wikibase-schema/stores/schema.store' import { useValidationStore } from '@frontend/features/wikibase-schema/stores/validation.store' -import { beforeEach, describe, expect, mock, test } from 'bun:test' import type { UUID } from 'crypto' import { createPinia, setActivePinia } from 'pinia' diff --git a/frontend/src/features/wikibase-schema/composables/__tests__/useSchemaSelection.test.ts b/frontend/src/features/wikibase-schema/composables/__tests__/useSchemaSelection.test.ts index 1b0f151..1cdaab9 100644 --- a/frontend/src/features/wikibase-schema/composables/__tests__/useSchemaSelection.test.ts +++ b/frontend/src/features/wikibase-schema/composables/__tests__/useSchemaSelection.test.ts @@ -1,7 +1,7 @@ +import { beforeEach, describe, expect, it, mock } from 'bun:test' import { useSchemaSelection } from '@frontend/features/wikibase-schema/composables/useSchemaSelection' import { useSchemaStore } from '@frontend/features/wikibase-schema/stores/schema.store' import { createTestingPinia } from '@pinia/testing' -import { beforeEach, describe, expect, it, mock } from 'bun:test' import type { UUID } from 'crypto' import { setActivePinia } from 'pinia' import { ref } from 'vue' diff --git a/frontend/src/features/wikibase-schema/composables/__tests__/useSchemaValidationUI.test.ts b/frontend/src/features/wikibase-schema/composables/__tests__/useSchemaValidationUI.test.ts index ac125fd..2196c32 100644 --- a/frontend/src/features/wikibase-schema/composables/__tests__/useSchemaValidationUI.test.ts +++ b/frontend/src/features/wikibase-schema/composables/__tests__/useSchemaValidationUI.test.ts @@ -1,8 +1,8 @@ +import { beforeEach, describe, expect, mock, test } from 'bun:test' import type { PropertyReference, ValueMapping } from '@backend/api/project/project.wikibase' import { useSchemaValidationUI } from '@frontend/features/wikibase-schema/composables/useSchemaValidationUI' import { useSchemaStore } from '@frontend/features/wikibase-schema/stores/schema.store' import { useValidationStore } from '@frontend/features/wikibase-schema/stores/validation.store' -import { beforeEach, describe, expect, mock, test } from 'bun:test' import { createPinia, setActivePinia } from 'pinia' describe('useSchemaValidationUI', () => { diff --git a/frontend/src/features/wikibase-schema/composables/__tests__/useStatementConfig.test.ts b/frontend/src/features/wikibase-schema/composables/__tests__/useStatementConfig.test.ts index 147e508..2cbe07c 100644 --- a/frontend/src/features/wikibase-schema/composables/__tests__/useStatementConfig.test.ts +++ b/frontend/src/features/wikibase-schema/composables/__tests__/useStatementConfig.test.ts @@ -1,7 +1,7 @@ +import { beforeEach, describe, expect, it } from 'bun:test' import type { PropertyId, StatementRank } from '@backend/types/wikibase-schema' import { useStatementConfig } from '@frontend/features/wikibase-schema/composables/useStatementConfig' import { useSchemaStore } from '@frontend/features/wikibase-schema/stores/schema.store' -import { beforeEach, describe, expect, it } from 'bun:test' import { createPinia, setActivePinia } from 'pinia' describe('useStatementConfig', () => { diff --git a/frontend/src/features/wikibase-schema/composables/__tests__/useStatementDataTypeValidation.test.ts b/frontend/src/features/wikibase-schema/composables/__tests__/useStatementDataTypeValidation.test.ts index 62b4f72..372f942 100644 --- a/frontend/src/features/wikibase-schema/composables/__tests__/useStatementDataTypeValidation.test.ts +++ b/frontend/src/features/wikibase-schema/composables/__tests__/useStatementDataTypeValidation.test.ts @@ -1,20 +1,16 @@ +import { describe, expect, test } from 'bun:test' import type { PropertyReference, ValueMapping } from '@backend/api/project/project.wikibase' import type { WikibaseDataType } from '@backend/types/wikibase-schema' import { useStatementDataTypeValidation } from '@frontend/features/wikibase-schema/composables/useStatementDataTypeValidation' -import { beforeEach, describe, expect, test } from 'bun:test' describe('useStatementDataTypeValidation', () => { - let testProperties: PropertyReference[] - - beforeEach(() => { - testProperties = [ - { id: 'P31', label: 'instance of', dataType: 'wikibase-item' }, - { id: 'P1476', label: 'title', dataType: 'string' }, - { id: 'P569', label: 'date of birth', dataType: 'time' }, - { id: 'P1082', label: 'population', dataType: 'quantity' }, - { id: 'P856', label: 'official website', dataType: 'url' }, - ] - }) + const testProperties: PropertyReference[] = [ + { id: 'P31', label: 'instance of', dataType: 'wikibase-item' }, + { id: 'P1476', label: 'title', dataType: 'string' }, + { id: 'P569', label: 'date of birth', dataType: 'time' }, + { id: 'P1082', label: 'population', dataType: 'quantity' }, + { id: 'P856', label: 'official website', dataType: 'url' }, + ] describe('validateStatementDataType', () => { test('should validate compatible VARCHAR column with string property', () => { diff --git a/frontend/src/features/wikibase-schema/composables/__tests__/useStatementEditor.test.ts b/frontend/src/features/wikibase-schema/composables/__tests__/useStatementEditor.test.ts index c8df530..1487b9d 100644 --- a/frontend/src/features/wikibase-schema/composables/__tests__/useStatementEditor.test.ts +++ b/frontend/src/features/wikibase-schema/composables/__tests__/useStatementEditor.test.ts @@ -1,62 +1,56 @@ +import { describe, expect, test } from 'bun:test' import type { PropertyReference, ValueMapping } from '@backend/api/project/project.wikibase' import type { StatementRank, WikibaseDataType } from '@backend/types/wikibase-schema' import { useStatementEditor } from '@frontend/features/wikibase-schema/composables/useStatementEditor' import type { ColumnInfo } from '@frontend/shared/types/wikibase-schema' -import { beforeEach, describe, expect, test } from 'bun:test' describe('useStatementEditor', () => { - let testColumns: ColumnInfo[] - let testProperty: PropertyReference - let initialStatement: { + const testColumns: ColumnInfo[] = [ + { + name: 'name', + dataType: 'VARCHAR', + sampleValues: ['John Doe', 'Jane Smith'], + nullable: false, + uniqueCount: 100, + }, + { + name: 'birth_date', + dataType: 'DATE', + sampleValues: ['1990-01-01', '1985-05-15'], + nullable: true, + uniqueCount: 95, + }, + { + name: 'population', + dataType: 'INTEGER', + sampleValues: ['1000000', '500000'], + nullable: false, + uniqueCount: 50, + }, + ] + + const testProperty: PropertyReference = { + id: 'P31', + label: 'instance of', + dataType: 'wikibase-item', + } + + const initialStatement: { property: PropertyReference | null value: ValueMapping rank: StatementRank - } - - beforeEach(() => { - testColumns = [ - { - name: 'name', + } = { + property: testProperty, + value: { + type: 'column', + source: { + columnName: 'name', dataType: 'VARCHAR', - sampleValues: ['John Doe', 'Jane Smith'], - nullable: false, - uniqueCount: 100, - }, - { - name: 'birth_date', - dataType: 'DATE', - sampleValues: ['1990-01-01', '1985-05-15'], - nullable: true, - uniqueCount: 95, }, - { - name: 'population', - dataType: 'INTEGER', - sampleValues: ['1000000', '500000'], - nullable: false, - uniqueCount: 50, - }, - ] - - testProperty = { - id: 'P31', - label: 'instance of', - dataType: 'wikibase-item', - } - - initialStatement = { - property: testProperty, - value: { - type: 'column', - source: { - columnName: 'name', - dataType: 'VARCHAR', - }, - dataType: 'string', - }, - rank: 'normal', - } - }) + dataType: 'string', + }, + rank: 'normal', + } describe('Initialization', () => { test('should initialize with default statement', () => { @@ -217,7 +211,7 @@ describe('useStatementEditor', () => { test('should handle column drop', () => { const { localStatement, handleColumnDrop } = useStatementEditor() - const dateColumn = testColumns[1]! + const dateColumn = testColumns[1] as ColumnInfo handleColumnDrop(dateColumn) expect(localStatement.value.value.type).toBe('column') diff --git a/frontend/src/features/wikibase-schema/composables/__tests__/useStatementValidationDisplay.test.ts b/frontend/src/features/wikibase-schema/composables/__tests__/useStatementValidationDisplay.test.ts index dfbeab7..52edee0 100644 --- a/frontend/src/features/wikibase-schema/composables/__tests__/useStatementValidationDisplay.test.ts +++ b/frontend/src/features/wikibase-schema/composables/__tests__/useStatementValidationDisplay.test.ts @@ -1,6 +1,6 @@ +import { beforeEach, describe, expect, test } from 'bun:test' import type { PropertyReference, ValueMapping } from '@backend/api/project/project.wikibase' import { useStatementValidationDisplay } from '@frontend/features/wikibase-schema/composables/useStatementValidationDisplay' -import { beforeEach, describe, expect, test } from 'bun:test' import { ref } from 'vue' describe('useStatementValidationDisplay', () => { diff --git a/frontend/src/features/wikibase-schema/composables/__tests__/useValidation.test.ts b/frontend/src/features/wikibase-schema/composables/__tests__/useValidation.test.ts index 9eb7c7d..7baa738 100644 --- a/frontend/src/features/wikibase-schema/composables/__tests__/useValidation.test.ts +++ b/frontend/src/features/wikibase-schema/composables/__tests__/useValidation.test.ts @@ -1,10 +1,10 @@ +import { beforeEach, describe, expect, it } from 'bun:test' import type { WikibaseDataType } from '@backend/types/wikibase-schema' import { useDragDropStore } from '@frontend/features/data-processing/stores/drag-drop.store' import { useValidation } from '@frontend/features/wikibase-schema/composables/useValidation' import { useValidationStore } from '@frontend/features/wikibase-schema/stores/validation.store' import type { DropTarget } from '@frontend/shared/types/drag-drop' import type { ColumnInfo } from '@frontend/shared/types/wikibase-schema' -import { beforeEach, describe, expect, it } from 'bun:test' import { createPinia, setActivePinia } from 'pinia' describe('useValidation', () => { diff --git a/frontend/src/features/wikibase-schema/composables/__tests__/useValidationCore.test.ts b/frontend/src/features/wikibase-schema/composables/__tests__/useValidationCore.test.ts index 92589be..82f69b6 100644 --- a/frontend/src/features/wikibase-schema/composables/__tests__/useValidationCore.test.ts +++ b/frontend/src/features/wikibase-schema/composables/__tests__/useValidationCore.test.ts @@ -1,7 +1,7 @@ +import { describe, expect, test } from 'bun:test' import { useValidationCore } from '@frontend/features/wikibase-schema/composables/useValidationCore' import type { DropTarget } from '@frontend/shared/types/drag-drop' import type { ColumnInfo } from '@frontend/shared/types/wikibase-schema' -import { describe, expect, test } from 'bun:test' describe('useValidationCore', () => { const { validateColumnForTarget, validateForStyling, validateForDrop, isAliasDuplicate } = diff --git a/frontend/src/features/wikibase-schema/composables/__tests__/useValidationErrors.test.ts b/frontend/src/features/wikibase-schema/composables/__tests__/useValidationErrors.test.ts index d275263..1f57380 100644 --- a/frontend/src/features/wikibase-schema/composables/__tests__/useValidationErrors.test.ts +++ b/frontend/src/features/wikibase-schema/composables/__tests__/useValidationErrors.test.ts @@ -1,6 +1,6 @@ +import { beforeEach, describe, expect, it } from 'bun:test' import { useValidationErrors } from '@frontend/features/wikibase-schema/composables/useValidationErrors' import type { ValidationContext, ValidationError } from '@frontend/shared/types/wikibase-schema' -import { beforeEach, describe, expect, it } from 'bun:test' describe('useValidationErrors', () => { let validationErrors: ReturnType diff --git a/frontend/src/features/wikibase-schema/composables/__tests__/useValueMapping.test.ts b/frontend/src/features/wikibase-schema/composables/__tests__/useValueMapping.test.ts index 4fcaeff..20978e0 100644 --- a/frontend/src/features/wikibase-schema/composables/__tests__/useValueMapping.test.ts +++ b/frontend/src/features/wikibase-schema/composables/__tests__/useValueMapping.test.ts @@ -1,8 +1,8 @@ +import { beforeEach, describe, expect, test } from 'bun:test' import type { PropertyReference } from '@backend/api/project/project.wikibase' import type { WikibaseDataType } from '@backend/types/wikibase-schema' import { useValueMapping } from '@frontend/features/wikibase-schema/composables/useValueMapping' import type { ColumnInfo } from '@frontend/shared/types/wikibase-schema' -import { beforeEach, describe, expect, test } from 'bun:test' describe('useValueMapping', () => { let testColumns: ColumnInfo[] diff --git a/frontend/src/features/wikibase-schema/composables/useSchemaApi.ts b/frontend/src/features/wikibase-schema/composables/useSchemaApi.ts index 97f8413..8d5d964 100644 --- a/frontend/src/features/wikibase-schema/composables/useSchemaApi.ts +++ b/frontend/src/features/wikibase-schema/composables/useSchemaApi.ts @@ -1,6 +1,6 @@ import type { ItemSchema } from '@backend/api/project/project.wikibase' import type { InstanceId } from '@backend/api/wikibase/schemas' -import { ApiErrors } from '@backend/types/error-schemas' +import type { ApiErrors } from '@backend/types/error-schemas' import { computed, readonly, ref } from 'vue' export type SchemaRequest = { diff --git a/frontend/src/features/wikibase-schema/stores/__tests__/schema.store.test.ts b/frontend/src/features/wikibase-schema/stores/__tests__/schema.store.test.ts index d268cbc..1ab47fb 100644 --- a/frontend/src/features/wikibase-schema/stores/__tests__/schema.store.test.ts +++ b/frontend/src/features/wikibase-schema/stores/__tests__/schema.store.test.ts @@ -1,3 +1,4 @@ +import { beforeEach, describe, expect, expectTypeOf, it, mock } from 'bun:test' import type { ColumnMapping, PropertyReference, @@ -5,7 +6,6 @@ import type { } from '@backend/api/project/project.wikibase' import { useSchemaStore } from '@frontend/features/wikibase-schema/stores/schema.store' import { createTestingPinia } from '@pinia/testing' -import { beforeEach, describe, expect, expectTypeOf, it, mock } from 'bun:test' import type { UUID } from 'crypto' import { setActivePinia } from 'pinia' diff --git a/frontend/src/features/wikibase-schema/stores/__tests__/validation-rules.store.test.ts b/frontend/src/features/wikibase-schema/stores/__tests__/validation-rules.store.test.ts index e109788..712aa82 100644 --- a/frontend/src/features/wikibase-schema/stores/__tests__/validation-rules.store.test.ts +++ b/frontend/src/features/wikibase-schema/stores/__tests__/validation-rules.store.test.ts @@ -1,6 +1,6 @@ +import { beforeEach, describe, expect, it, mock } from 'bun:test' import type { ValidationRuleConfig } from '@frontend/features/wikibase-schema/stores/validation.store' import { useValidationStore } from '@frontend/features/wikibase-schema/stores/validation.store' -import { beforeEach, describe, expect, it, mock } from 'bun:test' import { createPinia, setActivePinia } from 'pinia' describe('useValidationStore - Rules functionality', () => { diff --git a/frontend/src/features/wikibase-schema/stores/__tests__/validation.store.test.ts b/frontend/src/features/wikibase-schema/stores/__tests__/validation.store.test.ts index 790b766..0f535cb 100644 --- a/frontend/src/features/wikibase-schema/stores/__tests__/validation.store.test.ts +++ b/frontend/src/features/wikibase-schema/stores/__tests__/validation.store.test.ts @@ -1,6 +1,6 @@ +import { beforeEach, describe, expect, it } from 'bun:test' import { useValidationStore } from '@frontend/features/wikibase-schema/stores/validation.store' import type { ValidationError } from '@frontend/shared/types/wikibase-schema' -import { beforeEach, describe, expect, it } from 'bun:test' import { createPinia, setActivePinia } from 'pinia' describe('useValidationStore', () => { diff --git a/frontend/src/features/wikibase-schema/stores/schema.store.ts b/frontend/src/features/wikibase-schema/stores/schema.store.ts index cd219ae..a7307d4 100644 --- a/frontend/src/features/wikibase-schema/stores/schema.store.ts +++ b/frontend/src/features/wikibase-schema/stores/schema.store.ts @@ -9,8 +9,7 @@ import type { ValueMapping, } from '@backend/api/project/project.wikibase' import type { InstanceId } from '@backend/api/wikibase/schemas' -import type { StatementRank } from '@backend/types/wikibase-schema' -import { ItemId } from '@backend/types/wikibase-schema' +import type { ItemId, StatementRank } from '@backend/types/wikibase-schema' import { useSchemaBuilder } from '@frontend/features/wikibase-schema/composables/useSchemaBuilder' import type { StatementSchema } from '@frontend/shared/types/wikibase-schema' import type { UUID } from 'crypto' diff --git a/frontend/src/main.ts b/frontend/src/main.ts index c2f6d01..2ac5587 100644 --- a/frontend/src/main.ts +++ b/frontend/src/main.ts @@ -2,14 +2,14 @@ import Aura from '@primeuix/themes/aura' import { createHead } from '@unhead/vue/client' import { createPinia } from 'pinia' import 'primeicons/primeicons.css' -import PrimeVue from 'primevue/config' -import ConfirmationService from 'primevue/confirmationservice' -import ToastService from 'primevue/toastservice' -import { createApp, markRaw, type Component } from 'vue' // Import your router and app import App from '@frontend/App.vue' import router from '@frontend/core/router/router' +import PrimeVue from 'primevue/config' +import ConfirmationService from 'primevue/confirmationservice' +import ToastService from 'primevue/toastservice' +import { type Component, createApp, markRaw } from 'vue' // Import global styles import '@frontend/assets/base.css' diff --git a/frontend/src/shared/components/Sidebar.vue b/frontend/src/shared/components/Sidebar.vue index 2c62266..8d0164b 100644 --- a/frontend/src/shared/components/Sidebar.vue +++ b/frontend/src/shared/components/Sidebar.vue @@ -1,7 +1,6 @@