diff --git a/src/pages/JsonTools/__tests__/index.test.tsx b/src/pages/JsonTools/__tests__/index.test.tsx new file mode 100644 index 0000000..78ef06b --- /dev/null +++ b/src/pages/JsonTools/__tests__/index.test.tsx @@ -0,0 +1,11 @@ +import { render, screen } from '@testing-library/react'; +import { describe, it, expect } from 'vitest'; +import Index from '../index'; + +describe('JsonTools 页面', () => { + it('应该渲染页面标题', () => { + render(); + // 基本渲染测试 + expect(screen.getByRole('button')).toBeInTheDocument(); + }); +}); diff --git a/src/pages/JsonTools/DiffNavigator.tsx b/src/pages/JsonTools/components/DiffNavigator.tsx similarity index 100% rename from src/pages/JsonTools/DiffNavigator.tsx rename to src/pages/JsonTools/components/DiffNavigator.tsx diff --git a/src/pages/JsonTools/DiffResult.tsx b/src/pages/JsonTools/components/DiffResult.tsx similarity index 99% rename from src/pages/JsonTools/DiffResult.tsx rename to src/pages/JsonTools/components/DiffResult.tsx index 58cc318..c7b9397 100644 --- a/src/pages/JsonTools/DiffResult.tsx +++ b/src/pages/JsonTools/components/DiffResult.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { useI18n } from '@/utils/chromeI18n'; import { cn } from '@/lib/utils'; import JsonTree from './JsonTree'; -import type { DiffNode, DiffResult as DiffResultType, DiffType, ViewMode } from './types'; +import type { DiffNode, DiffResult as DiffResultType, DiffType, ViewMode } from '../types'; export interface DiffResultProps extends React.HTMLAttributes { result: DiffResultType; diff --git a/src/pages/JsonTools/JsonConvertSection.tsx b/src/pages/JsonTools/components/JsonConvertSection.tsx similarity index 96% rename from src/pages/JsonTools/JsonConvertSection.tsx rename to src/pages/JsonTools/components/JsonConvertSection.tsx index 4218aff..b1a4ef8 100644 --- a/src/pages/JsonTools/JsonConvertSection.tsx +++ b/src/pages/JsonTools/components/JsonConvertSection.tsx @@ -5,14 +5,7 @@ import { CopyButton } from '@/components/CopyButton'; import TextInputArea from '@/components/TextInputArea'; import { validateJson } from '@/utils/jsonFormatter'; import { cn } from '@/lib/utils'; - -export interface ConvertResult { - output: string; - originalBytes: number; - outputBytes: number; -} - -export type ConvertFunction = (text: string) => ConvertResult; +import type { ConvertFunction, ConvertResult } from '../types'; interface JsonConvertSectionProps extends React.HTMLAttributes { translationPrefix: string; diff --git a/src/pages/JsonTools/JsonDiffInput.tsx b/src/pages/JsonTools/components/JsonDiffInput.tsx similarity index 100% rename from src/pages/JsonTools/JsonDiffInput.tsx rename to src/pages/JsonTools/components/JsonDiffInput.tsx diff --git a/src/pages/JsonTools/JsonFormatSection.tsx b/src/pages/JsonTools/components/JsonFormatSection.tsx similarity index 100% rename from src/pages/JsonTools/JsonFormatSection.tsx rename to src/pages/JsonTools/components/JsonFormatSection.tsx diff --git a/src/pages/JsonTools/JsonTree.tsx b/src/pages/JsonTools/components/JsonTree.tsx similarity index 99% rename from src/pages/JsonTools/JsonTree.tsx rename to src/pages/JsonTools/components/JsonTree.tsx index ac510d0..0641979 100644 --- a/src/pages/JsonTools/JsonTree.tsx +++ b/src/pages/JsonTools/components/JsonTree.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useMemo, useRef, useState } from 'react'; import { ChevronDown, ChevronRight } from 'lucide-react'; // 用正统的矢量箭头平替原生的字符 '▾' '▸' -import type { DiffNode, DiffType } from './types'; +import type { DiffNode, DiffType } from '../types'; import { cn } from '@/lib/utils'; export type TreeSide = 'left' | 'right'; diff --git a/src/pages/JsonTools/index.tsx b/src/pages/JsonTools/index.tsx index 359b851..b0ac7e7 100644 --- a/src/pages/JsonTools/index.tsx +++ b/src/pages/JsonTools/index.tsx @@ -1,9 +1,9 @@ import { useI18n } from '@/utils/chromeI18n'; -import JsonDiffInput from './JsonDiffInput'; -import DiffResult from './DiffResult'; -import DiffNavigator from './DiffNavigator'; -import JsonFormatSection from './JsonFormatSection'; -import JsonConvertSection from './JsonConvertSection'; +import JsonDiffInput from './components/JsonDiffInput'; +import DiffResult from './components/DiffResult'; +import DiffNavigator from './components/DiffNavigator'; +import JsonFormatSection from './components/JsonFormatSection'; +import JsonConvertSection from './components/JsonConvertSection'; import SwitchButtonGroup from '@/components/SwitchButtonGroup'; import { useJsonTools } from './useJsonTools'; import type { JsonToolsPageMode } from '@/types/storage'; diff --git a/src/pages/JsonTools/types.ts b/src/pages/JsonTools/types.ts index 93063ce..3fc6a9e 100644 --- a/src/pages/JsonTools/types.ts +++ b/src/pages/JsonTools/types.ts @@ -53,3 +53,13 @@ export interface DiffResult { /** 差异核心总计数(等价于 diffPaths.length),注入 tabular-nums 配合渲染 */ diffCount: number; } + +/** JSON 转换结果 */ +export interface ConvertResult { + output: string; + originalBytes: number; + outputBytes: number; +} + +/** JSON 转换函数类型 */ +export type ConvertFunction = (text: string) => ConvertResult; diff --git a/src/pages/JsonTools/useJsonTools.ts b/src/pages/JsonTools/useJsonTools.ts index 57d91e2..b576319 100644 --- a/src/pages/JsonTools/useJsonTools.ts +++ b/src/pages/JsonTools/useJsonTools.ts @@ -1,14 +1,13 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; import { useI18n } from '@/utils/chromeI18n'; import { useStorageState } from '@/utils/useStorageState'; -import { diffJson } from './diffEngine'; +import { diffJson } from '@/utils/diffEngine'; import { jsonToYaml } from '@/utils/jsonToYaml'; import { jsonToToml } from '@/utils/jsonToToml'; import { minifyJson } from '@/utils/jsonFormatter'; import { isValidPageMode, tryParse } from './constants'; import type { JsonToolsPageMode } from '@/types/storage'; -import type { ConvertFunction } from './JsonConvertSection'; -import type { ViewMode } from './types'; +import type { ConvertFunction, ViewMode } from './types'; export interface UseJsonToolsReturn { pageMode: JsonToolsPageMode; diff --git a/src/utils/__tests__/diffEngine.test.ts b/src/utils/__tests__/diffEngine.test.ts index e874794..0d39b4c 100644 --- a/src/utils/__tests__/diffEngine.test.ts +++ b/src/utils/__tests__/diffEngine.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect } from 'vitest'; -import { diffJson } from '../../pages/JsonTools/diffEngine'; +import { diffJson } from '../diffEngine'; describe('diffJson', () => { it('should detect added property', () => { diff --git a/src/pages/JsonTools/diffEngine.ts b/src/utils/diffEngine.ts similarity index 98% rename from src/pages/JsonTools/diffEngine.ts rename to src/utils/diffEngine.ts index cb4b720..93c11b6 100644 --- a/src/pages/JsonTools/diffEngine.ts +++ b/src/utils/diffEngine.ts @@ -1,4 +1,4 @@ -import type { DiffNode, DiffResult, DiffType } from './types'; +import type { DiffNode, DiffResult, DiffType } from '@/pages/JsonTools/types'; const ROOT_PATH = '$'; const SENTINEL = Symbol('missing');