diff --git a/eslint.config.js b/eslint.config.js index 86806e3..f78b3d6 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -2,6 +2,7 @@ import pluginVue from 'eslint-plugin-vue' import vueTsEslintConfig from '@vue/eslint-config-typescript' import pluginVitest from '@vitest/eslint-plugin' import pluginPlaywright from 'eslint-plugin-playwright' +import oxlint from 'eslint-plugin-oxlint' import skipFormatting from '@vue/eslint-config-prettier/skip-formatting' export default [ @@ -17,15 +18,16 @@ export default [ ...pluginVue.configs['flat/essential'], ...vueTsEslintConfig(), - + { ...pluginVitest.configs.recommended, files: ['src/**/__tests__/*'], }, - + { ...pluginPlaywright.configs['flat/recommended'], files: ['e2e/**/*.{test,spec}.{js,ts,jsx,tsx}'], }, + oxlint.configs['flat/recommended'], skipFormatting, ] diff --git a/src/components/read/ReadContactInfo.vue b/src/components/read/ReadContactInfo.vue index d2902c9..1e331c6 100644 --- a/src/components/read/ReadContactInfo.vue +++ b/src/components/read/ReadContactInfo.vue @@ -49,6 +49,7 @@ import { ref, computed } from 'vue' import md5 from 'md5' import type { ContactInfo } from '@/types/DBDocumentTypes' +import { sanitizeFileName } from '@/utils/sanitizeFileName' const { contactInfo } = defineProps<{ contactInfo: ContactInfo }>() @@ -90,10 +91,7 @@ function addToAddressBook() { const blob = new Blob([vCard], { type: 'text/vcard;charset=utf-8' }) const link = document.createElement('a') - const sanitized = contactInfo.name - ?.replace(/[<>:"/\\|?*\x00-\x1F]/g, '') // Убираем запрещённые символы - .replace(/\s+/g, '_') // Заменяем пробелы на подчёркивания - .trim() + const sanitized = contactInfo.name && sanitizeFileName(contactInfo.name) link.href = URL.createObjectURL(blob) link.download = `${sanitized || 'contact'}.vcf` diff --git a/src/utils/sanitizeFileName.ts b/src/utils/sanitizeFileName.ts new file mode 100644 index 0000000..b7309b6 --- /dev/null +++ b/src/utils/sanitizeFileName.ts @@ -0,0 +1,6 @@ +export const sanitizeFileName = (fileName: string) => { + return fileName + .replace(/[<>:"/\\|?*\x00-\x1F]/g, '') // Убираем запрещённые символы + .replace(/\s+/g, ' ') + .trim() +} diff --git a/src/views/ManageQRCodeReadyView.vue b/src/views/ManageQRCodeReadyView.vue index f78073e..b2ca1e0 100644 --- a/src/views/ManageQRCodeReadyView.vue +++ b/src/views/ManageQRCodeReadyView.vue @@ -74,6 +74,7 @@ import { getQrCodeDocument } from '@/api/qrCode' import { type QRCodeDocument } from '@/types/DBDocumentTypes' import { addLabelToSvg } from '@/utils/images/svg/addLabelToSvg' import logo from '@/assets/logo.svg?raw' +import { sanitizeFileName } from '@/utils/sanitizeFileName' const { qr_code_uri } = defineProps<{ qr_code_uri: QRCodeDocument['uri'] }>() const color = ref('#000') // Цвет для текста QR-кода @@ -92,12 +93,9 @@ const { queryFn: () => getQrCodeDocument(qr_code_uri), }) -// Получение имени файла const sanitizedFileName = computed(() => { - const sanitized = qrCodeDoc.value?.name - ?.replace(/[<>:"/\\|?*\x00-\x1F]/g, '') // Убираем запрещённые символы - .replace(/\s+/g, ' ') // Заменяем пробелы на подчёркивания - .trim() + const sanitized = qrCodeDoc.value?.name && sanitizeFileName(qrCodeDoc.value?.name) + return sanitized ? `${sanitized} QR-Code - НаСвязи` : 'QR-Code - НаСвязи' }) diff --git a/tailwind.config.js b/tailwind.config.ts similarity index 50% rename from tailwind.config.js rename to tailwind.config.ts index 5e7977e..5c6162c 100644 --- a/tailwind.config.js +++ b/tailwind.config.ts @@ -1,8 +1,11 @@ +import tailwindScrollbar from 'tailwind-scrollbar' +import tailwindcssPrimeUI from 'tailwindcss-primeui' + /** @type {import('tailwindcss').Config} */ export default { content: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'], theme: { extend: {}, }, - plugins: [require('tailwindcss-primeui'), require('tailwind-scrollbar')], + plugins: [tailwindScrollbar, tailwindcssPrimeUI], }