fad9760265
- 新增 Node 服务端(Hono + Hocuspocus + node:sqlite),数据保存在服务器 - 基于 Yjs 的多端实时同步,本机 IndexedDB 离线缓存,撤销只针对本机操作 - 空间(标签)有独立地址,增删改通过接口同步到所有设备 - 口令登录(签名 Cookie 会话、登录限流、同源校验) - 图片上传到服务器,过大照片上传前自动压缩 - 历史版本(自动/手动保存、一键恢复)、跨空间搜索、在线设备 - 随机油画加载动画(Painting Loaders,本地收录 p5 / p5.brush) - 选中样式与拖拽性能优化:拖动结束后才同步位置 - Docker / docker-compose 部署,README 与 CLAUDE.md 更新
63 lines
1.6 KiB
TypeScript
63 lines
1.6 KiB
TypeScript
import process from 'node:process'
|
|
import { defineConfig, devices } from '@playwright/test'
|
|
|
|
import { E2E_PASSWORD } from './e2e/helpers'
|
|
|
|
// e2e 跑的是生产构建 + 真实服务端,使用独立的临时数据目录
|
|
const PORT = 4174
|
|
|
|
|
|
/**
|
|
* See https://playwright.dev/docs/test-configuration.
|
|
*/
|
|
export default defineConfig({
|
|
testDir: './e2e',
|
|
timeout: 45 * 1000,
|
|
expect: {
|
|
timeout: 8000,
|
|
},
|
|
fullyParallel: false,
|
|
/* Fail the build on CI if you accidentally left test.only in the source code. */
|
|
forbidOnly: !!process.env.CI,
|
|
retries: process.env.CI ? 2 : 0,
|
|
// 所有用例共用一个服务端和数据目录,串行执行更可靠
|
|
workers: 1,
|
|
reporter: process.env.CI ? 'github' : 'list',
|
|
use: {
|
|
baseURL: `http://localhost:${PORT}`,
|
|
trace: 'on-first-retry',
|
|
// 默认跳过加载动画,专门的用例会单独打开
|
|
contextOptions: { reducedMotion: 'reduce' },
|
|
locale: 'zh-CN',
|
|
},
|
|
|
|
projects: [
|
|
{
|
|
name: 'chromium',
|
|
use: { ...devices['Desktop Chrome'] },
|
|
},
|
|
{
|
|
name: 'firefox',
|
|
use: { ...devices['Desktop Firefox'] },
|
|
},
|
|
{
|
|
name: 'webkit',
|
|
use: { ...devices['Desktop Safari'] },
|
|
},
|
|
],
|
|
|
|
webServer: {
|
|
command:
|
|
'node -e "require(\'fs\').rmSync(\'.e2e-data\',{recursive:true,force:true})" && npm run build-only && npm run start',
|
|
url: `http://localhost:${PORT}/healthz`,
|
|
reuseExistingServer: false,
|
|
timeout: 180 * 1000,
|
|
env: {
|
|
PORT: String(PORT),
|
|
DATA_DIR: '.e2e-data',
|
|
BOUNDLESS_PASSWORD: E2E_PASSWORD,
|
|
BOUNDLESS_SECRET: 'e2e-secret',
|
|
},
|
|
},
|
|
})
|