mirror of
https://github.com/DayuanJiang/next-ai-draw-io.git
synced 2026-01-05 15:52:33 +08:00
* test: add Vitest and Playwright testing infrastructure - Add Vitest for unit tests (39 tests) - cached-responses.test.ts - ai-providers.test.ts - chat-helpers.test.ts - utils.test.ts - Add Playwright for E2E tests (3 smoke tests) - Homepage load - Japanese locale - Settings dialog - Add CI workflow (.github/workflows/test.yml) - Add vitest.config.mts and playwright.config.ts - Update .gitignore for test artifacts * test: add more E2E tests for UI components - Chat panel tests (interactive elements, iframe) - Settings tests (dark mode, language, draw.io theme) - Save dialog tests (buttons exist) - History dialog tests - Model config tests - Keyboard interaction tests - Upload area tests Total: 15 E2E tests, all passing * test: fix E2E test issues from review Fixes based on Gemini and Codex review: - Remove brittle nth(1) selector in keyboard tests - Remove waitForTimeout(500) race condition - Remove if(isVisible) silent skip patterns - Add proper assertions instead of no-op checks - Remove expect(count >= 0) that always passes - Remove unused hasProviderUI variable All 14 E2E tests and 39 unit tests pass. * style: auto-format with Biome * fix: resolve lint errors for CI * test(e2e): add diagram generation tests with mocked AI responses - Add tests for generate, edit, and append diagram operations - Use SSE mocked responses matching AI SDK UI message stream format - Generate mxCell XML directly in tests for deterministic assertions - Tests verify tool card rendering and 'Complete' badge state * test: add comprehensive E2E tests for all major features - Error handling tests (API errors, rate limits, network timeout, truncated XML) - Multi-turn conversation tests (sequential requests, history preservation) - File upload tests (upload button, file preview, sending with message) - Theme switching tests (dark mode toggle, persistence, system preference) - Language switching tests (EN/JA/ZH, persistence, locale URLs) - Iframe interaction tests (draw.io loading, toolbar, diagram rendering) - Copy/paste tests (chat input, XML input, special characters) - History restore tests (new chat, persistence, browser navigation) * refactor: extract shared test helpers and improve error assertions - Create tests/e2e/lib/helpers.ts with shared SSE mock functions - Add proper error UI assertions to error-handling.spec.ts - Remove waitForTimeout calls in favor of real assertions - Update 6 test files to use shared helpers * docs: add testing section to CONTRIBUTING.md * fix: improve test infrastructure based on PR review - Fix double build in CI: remove redundant build from playwright webServer - Export chat helpers from shared module for proper unit testing - Replace waitForTimeout with explicit waits in E2E tests - Add data-testid attributes to settings and new chat buttons - Add list reporter for CI to show failures in logs - Add Playwright browser caching to speed up CI - Add vitest coverage configuration - Fix conditional test assertions to use test.skip() instead of silent pass - Remove unused variables flagged by linter * fix: improve E2E test assertions and remove silent skips - Replace silent test.skip() with explicit conditional skips - Add actual persistence assertion after page reload - Use data-testid selector for new chat button test * refactor: add shared fixtures and test.step() patterns - Add tests/e2e/lib/fixtures.ts with shared test helpers - Add tests/e2e/fixtures/diagrams.ts with XML test data - Add expectBeforeAndAfterReload() helper for persistence tests - Add test.step() for better test reporting in complex tests - Consolidate mock helpers into fixtures module - Reduce code duplication across 17 test files * fix: make persistence tests more reliable - Remove expectBeforeAndAfterReload from mocked API tests - Add explicit test.step() for before/after reload checks - Add retry config for flaky clipboard tests - Add sleep after reload for language persistence test * test: remove flaky XML paste test * docs: run both unit and e2e tests before PR * chore: add type check and unit test git hooks --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
144 lines
5.9 KiB
JSON
144 lines
5.9 KiB
JSON
{
|
|
"name": "next-ai-draw-io",
|
|
"version": "0.4.9",
|
|
"license": "Apache-2.0",
|
|
"private": true,
|
|
"main": "dist-electron/main/index.js",
|
|
"scripts": {
|
|
"dev": "next dev --turbopack --port 6002",
|
|
"build": "next build",
|
|
"start": "next start --port 6001",
|
|
"lint": "biome lint .",
|
|
"format": "biome check --write .",
|
|
"check": "biome ci",
|
|
"prepare": "husky",
|
|
"preview": "opennextjs-cloudflare build && opennextjs-cloudflare preview",
|
|
"deploy": "opennextjs-cloudflare build && opennextjs-cloudflare deploy",
|
|
"upload": "opennextjs-cloudflare build && opennextjs-cloudflare upload",
|
|
"cf-typegen": "wrangler types --env-interface CloudflareEnv cloudflare-env.d.ts",
|
|
"electron:dev": "node scripts/electron-dev.mjs",
|
|
"electron:build": "npm run build && npm run electron:compile",
|
|
"electron:compile": "npx esbuild electron/main/index.ts electron/preload/index.ts electron/preload/settings.ts --bundle --platform=node --outdir=dist-electron --external:electron --sourcemap --packages=external && npx shx cp -r electron/settings dist-electron/",
|
|
"electron:start": "npx cross-env NODE_ENV=development npx electron .",
|
|
"electron:prepare": "node scripts/prepare-electron-build.mjs",
|
|
"dist": "npm run electron:build && npm run electron:prepare && npx electron-builder --config electron/electron-builder.yml",
|
|
"dist:mac": "npm run electron:build && npm run electron:prepare && npx electron-builder --config electron/electron-builder.yml --mac",
|
|
"dist:win": "npm run electron:build && npm run electron:prepare && npx electron-builder --config electron/electron-builder.yml --win",
|
|
"dist:linux": "npm run electron:build && npm run electron:prepare && npx electron-builder --config electron/electron-builder.yml --linux",
|
|
"dist:all": "npm run electron:build && npm run electron:prepare && npx electron-builder --config electron/electron-builder.yml --mac --win --linux",
|
|
"test": "vitest",
|
|
"test:e2e": "playwright test"
|
|
},
|
|
"dependencies": {
|
|
"@ai-sdk/amazon-bedrock": "^4.0.1",
|
|
"@ai-sdk/anthropic": "^3.0.0",
|
|
"@ai-sdk/azure": "^3.0.0",
|
|
"@ai-sdk/deepseek": "^2.0.0",
|
|
"@ai-sdk/gateway": "^3.0.0",
|
|
"@ai-sdk/google": "^3.0.0",
|
|
"@ai-sdk/openai": "^3.0.0",
|
|
"@ai-sdk/react": "^3.0.1",
|
|
"@aws-sdk/client-dynamodb": "^3.957.0",
|
|
"@aws-sdk/credential-providers": "^3.943.0",
|
|
"@formatjs/intl-localematcher": "^0.7.2",
|
|
"@langfuse/client": "^4.4.9",
|
|
"@langfuse/otel": "^4.4.4",
|
|
"@langfuse/tracing": "^4.4.9",
|
|
"@next/third-parties": "^16.0.6",
|
|
"@opennextjs/cloudflare": "1.14.7",
|
|
"@openrouter/ai-sdk-provider": "^1.5.4",
|
|
"@opentelemetry/exporter-trace-otlp-http": "^0.208.0",
|
|
"@opentelemetry/sdk-trace-node": "^2.2.0",
|
|
"@radix-ui/react-alert-dialog": "^1.1.15",
|
|
"@radix-ui/react-collapsible": "^1.1.12",
|
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
"@radix-ui/react-label": "^2.1.8",
|
|
"@radix-ui/react-popover": "^1.1.15",
|
|
"@radix-ui/react-scroll-area": "^1.2.3",
|
|
"@radix-ui/react-select": "^2.2.6",
|
|
"@radix-ui/react-slot": "^1.2.4",
|
|
"@radix-ui/react-switch": "^1.2.6",
|
|
"@radix-ui/react-tooltip": "^1.1.8",
|
|
"@radix-ui/react-use-controllable-state": "^1.2.2",
|
|
"@xmldom/xmldom": "^0.9.8",
|
|
"ai": "^6.0.1",
|
|
"base-64": "^1.0.0",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"cmdk": "^1.1.1",
|
|
"idb": "^8.0.3",
|
|
"js-tiktoken": "^1.0.21",
|
|
"jsonrepair": "^3.13.1",
|
|
"lucide-react": "^0.562.0",
|
|
"motion": "^12.23.25",
|
|
"negotiator": "^1.0.0",
|
|
"next": "^16.0.7",
|
|
"ollama-ai-provider-v2": "^2.0.0",
|
|
"pako": "^2.1.0",
|
|
"prism-react-renderer": "^2.4.1",
|
|
"react": "^19.1.2",
|
|
"react-dom": "^19.1.2",
|
|
"react-drawio": "^1.0.3",
|
|
"react-icons": "^5.5.0",
|
|
"react-markdown": "^10.1.0",
|
|
"react-resizable-panels": "^3.0.6",
|
|
"remark-gfm": "^4.0.1",
|
|
"server-only": "^0.0.1",
|
|
"sonner": "^2.0.7",
|
|
"tailwind-merge": "^3.0.2",
|
|
"tailwindcss-animate": "^1.0.7",
|
|
"unpdf": "^1.4.0",
|
|
"zod": "^4.1.12"
|
|
},
|
|
"optionalDependencies": {
|
|
"@tailwindcss/oxide-linux-x64-gnu": "^4.1.18",
|
|
"lightningcss": "^1.30.2",
|
|
"lightningcss-linux-x64-gnu": "^1.30.2"
|
|
},
|
|
"lint-staged": {
|
|
"*.{js,ts,jsx,tsx,json,css}": [
|
|
"biome check --write --no-errors-on-unmatched",
|
|
"biome check --no-errors-on-unmatched"
|
|
]
|
|
},
|
|
"devDependencies": {
|
|
"@anthropic-ai/tokenizer": "^0.0.4",
|
|
"@biomejs/biome": "^2.3.10",
|
|
"@playwright/test": "^1.57.0",
|
|
"@tailwindcss/postcss": "^4",
|
|
"@tailwindcss/typography": "^0.5.19",
|
|
"@testing-library/dom": "^10.4.1",
|
|
"@testing-library/react": "^16.3.1",
|
|
"@testing-library/user-event": "^14.6.1",
|
|
"@types/negotiator": "^0.6.4",
|
|
"@types/node": "^24.0.0",
|
|
"@types/pako": "^2.0.3",
|
|
"@types/react": "^19",
|
|
"@types/react-dom": "^19",
|
|
"@vitejs/plugin-react": "^5.1.2",
|
|
"@vitest/coverage-v8": "^4.0.16",
|
|
"concurrently": "^9.2.1",
|
|
"cross-env": "^10.1.0",
|
|
"electron": "^39.2.7",
|
|
"electron-builder": "^26.0.12",
|
|
"esbuild": "^0.27.2",
|
|
"eslint": "9.39.2",
|
|
"eslint-config-next": "16.1.1",
|
|
"husky": "^9.1.7",
|
|
"jsdom": "^27.4.0",
|
|
"lint-staged": "^16.2.7",
|
|
"shx": "^0.4.0",
|
|
"tailwindcss": "^4",
|
|
"typescript": "^5",
|
|
"vite-tsconfig-paths": "^6.0.3",
|
|
"vitest": "^4.0.16",
|
|
"wait-on": "^9.0.3",
|
|
"wrangler": "4.54.0"
|
|
},
|
|
"overrides": {
|
|
"@openrouter/ai-sdk-provider": {
|
|
"ai": "^6.0.1"
|
|
}
|
|
}
|
|
}
|