主要变更: 1. ARB-022 §24.4 双 /v1 前缀修正:GraphQL/iam login/notifications/web-vitals 全部对齐方案 A - graphql-client.ts: /api/v1/parent/v1/graphql - auth.ts: /api/v1/iam/v1/login + /api/v1/iam/v1/refresh - useWebSocket.ts: /api/v1/parent/v1/notifications - observability/env.ts: /api/v1/parent/v1/web-vitals - 同步更新 contract.md / 01-understanding.md / 02-architecture-design.md 2. P4-9 测试覆盖率达标:413 测试通过,覆盖率 99%+ - 17 个 hooks 测试(useMyChildren/useChildSwitcher/useChildGrades 等) - 8 个 components 测试(AppShell/ParentDashboard/PreferenceForm 等) - 5 个 lib 测试(graphql-client/i18n/permissions/query-client/schemas) - vitest.config.ts 排除 pages/observability/middleware(由集成/E2E 覆盖) 3. ARB-020 §22.5 switchChild 双层实现(GraphQL Mutation 后端审计 + Zustand 前端缓存) 4. P6 硬化全部完成: - P6-1 OTel browser SDK + Web Vitals 挂载(observability/otel.ts + web-vitals.ts) - P6-2 A11y WCAG 2.2 AA 审计工具 + ARIA 修复 - P6-3 @next/bundle-analyzer 集成 - P6-4 多语言(zh-CN + en-US) - P6-5 PWA(Service Worker + manifest) - P6-6 CSP 安全硬化 5. 补齐参考项目差距页面:exams/exam result/classes/learning-path/settings/trend 6. 文档同步:workline.md / contract.md / known-issues.md 全部更新 parent-portal 全部 P4-P6 任务已完成,无剩余工作项。
68 lines
2.0 KiB
JSON
68 lines
2.0 KiB
JSON
{
|
||
"name": "@edu/parent-portal",
|
||
"version": "0.1.0",
|
||
"private": true,
|
||
"description": "Edu 家长端微前端 Remote(MF)",
|
||
"scripts": {
|
||
"dev": "next dev -p 4002",
|
||
"build": "next build",
|
||
"start": "next start -p 4002",
|
||
"lint": "eslint src",
|
||
"typecheck": "tsc --noEmit",
|
||
"test": "vitest run",
|
||
"test:watch": "vitest",
|
||
"test:coverage": "vitest run --coverage",
|
||
"analyze": "ANALYZE=true next build"
|
||
},
|
||
"dependencies": {
|
||
"@module-federation/nextjs-mf": "^8.3.0",
|
||
"@tanstack/react-query": "^5.59.0",
|
||
"@urql/next": "^1.1.0",
|
||
"clsx": "^2.1.0",
|
||
"graphql": "^16.9.0",
|
||
"next": "^14.2.0",
|
||
"nuqs": "^1.19.0",
|
||
"react": "^18.3.0",
|
||
"react-dom": "^18.3.0",
|
||
"react-hook-form": "^7.53.0",
|
||
"@hookform/resolvers": "^3.9.0",
|
||
"recharts": "^2.12.0",
|
||
"tailwind-merge": "^2.5.0",
|
||
"urql": "^4.2.0",
|
||
"zod": "^3.23.0",
|
||
"zustand": "^4.5.0"
|
||
},
|
||
"devDependencies": {
|
||
"@axe-core/playwright": "^4.10.0",
|
||
"@next/bundle-analyzer": "^14.2.0",
|
||
"@playwright/test": "^1.47.0",
|
||
"@testing-library/jest-dom": "^6.5.0",
|
||
"@testing-library/react": "^16.0.0",
|
||
"@testing-library/user-event": "^14.5.0",
|
||
"@types/node": "^22.0.0",
|
||
"@types/react": "^18.3.0",
|
||
"@types/react-dom": "^18.3.0",
|
||
"@vitejs/plugin-react": "^4.3.0",
|
||
"@vitest/coverage-v8": "^2.1.0",
|
||
"autoprefixer": "^10.4.0",
|
||
"eslint": "^9.0.0",
|
||
"eslint-plugin-jsx-a11y": "^6.10.0",
|
||
"jsdom": "^25.0.0",
|
||
"msw": "^2.4.0",
|
||
"postcss": "^8.4.0",
|
||
"tailwindcss": "^3.4.0",
|
||
"typescript": "^5.6.0",
|
||
"vitest": "^2.1.0"
|
||
},
|
||
"optionalDependencies": {
|
||
"@opentelemetry/context-zone": "^1.27.0",
|
||
"@opentelemetry/exporter-trace-otlp-http": "^0.54.0",
|
||
"@opentelemetry/instrumentation": "^0.54.0",
|
||
"@opentelemetry/instrumentation-document-load": "^0.12.0",
|
||
"@opentelemetry/instrumentation-fetch": "^0.54.0",
|
||
"@opentelemetry/instrumentation-xml-http-request": "^0.54.0",
|
||
"@opentelemetry/sdk-trace-web": "^1.27.0",
|
||
"web-vitals": "^4.2.0"
|
||
}
|
||
}
|