import path from 'node:path'; import { fileURLToPath } from 'node:url'; import { defineConfig } from 'vitest/config'; const repoRoot = path.dirname(fileURLToPath(import.meta.url)); const workspaceRoot = process.cwd(); const workspacePath = path.relative(repoRoot, workspaceRoot).split(path.sep).join('/'); const workspaceTests: Record< string, { name: string; include: string[]; setupFiles?: string[]; testTimeout?: number; hookTimeout?: number; fileParallelism?: boolean; environment?: 'jsdom'; } > = { 'packages/common': { name: 'common', include: ['__tests__/**/*.test.ts'], }, 'packages/converter': { name: 'converter', include: ['__tests__/**/*.test.ts'], testTimeout: 30000, }, 'packages/generator': { name: 'generator', include: ['__tests__/**/*.test.ts'], setupFiles: [path.resolve(repoRoot, 'packages/generator/vitest.setup.ts')], testTimeout: 60000, }, 'packages/jsx': { name: 'jsx', include: ['src/__tests__/**/*.test.ts', 'src/__tests__/**/*.test.tsx'], }, 'packages/manipulator': { name: 'manipulator', include: ['__tests__/**/*.test.ts'], setupFiles: [path.resolve(repoRoot, 'packages/manipulator/vitest.setup.ts')], testTimeout: 30000, }, 'packages/schemas': { name: 'schemas', include: ['__tests__/**/*.test.ts'], testTimeout: 30000, }, 'packages/pdf-lib': { name: 'pdf-lib', include: ['__tests__/**/*.test.ts', '__tests__/**/*.spec.ts'], testTimeout: 30000, }, 'packages/cli': { name: 'cli', include: ['__tests__/**/*.test.ts'], testTimeout: 60000, }, 'packages/ui': { name: 'ui', include: ['__tests__/**/*.test.ts', '__tests__/**/*.test.tsx'], setupFiles: [path.resolve(repoRoot, 'packages/ui/vitest.setup.ts')], testTimeout: 30000, environment: 'jsdom', }, playground: { name: 'playground', include: ['e2e/**/*.test.ts'], setupFiles: [path.resolve(repoRoot, 'playground/vitest.setup.ts')], testTimeout: 200000, hookTimeout: 200000, fileParallelism: false, }, }; const selectedWorkspace = workspaceTests[workspacePath]; const usePublishedPdfmeExports = workspacePath === 'playground'; const converterReplacement = workspacePath === 'packages/ui' ? path.resolve(repoRoot, 'packages/ui/__mocks__/converter.ts') : path.resolve(repoRoot, 'packages/converter/src/index.node.ts'); const pdfmeAliases = usePublishedPdfmeExports ? [] : [ { find: '@pdfme/schemas/builtins', replacement: path.resolve(repoRoot, 'packages/schemas/src/builtins.ts'), }, { find: '@pdfme/schemas/dynamicLayout', replacement: path.resolve(repoRoot, 'packages/schemas/src/dynamicLayout.ts'), }, { find: '@pdfme/schemas/tables', replacement: path.resolve(repoRoot, 'packages/schemas/src/tables.ts'), }, { find: '@pdfme/schemas/lists', replacement: path.resolve(repoRoot, 'packages/schemas/src/lists.ts'), }, { find: '@pdfme/schemas/texts', replacement: path.resolve(repoRoot, 'packages/schemas/src/texts.ts'), }, { find: '@pdfme/schemas/utils', replacement: path.resolve(repoRoot, 'packages/schemas/src/utils.ts'), }, { find: '@pdfme/schemas/types', replacement: path.resolve(repoRoot, 'packages/schemas/src/types.ts'), }, { find: '@pdfme/common', replacement: path.resolve(repoRoot, 'packages/common/src/index.ts'), }, { find: '@pdfme/converter/md2pdf', replacement: path.resolve(repoRoot, 'packages/converter/src/md2pdf.ts'), }, { find: '@pdfme/converter', replacement: converterReplacement, }, { find: '@pdfme/generator', replacement: path.resolve(repoRoot, 'packages/generator/src/index.ts'), }, { find: '@pdfme/jsx/jsx-runtime', replacement: path.resolve(repoRoot, 'packages/jsx/src/jsx-runtime.ts'), }, { find: '@pdfme/jsx/jsx-dev-runtime', replacement: path.resolve(repoRoot, 'packages/jsx/src/jsx-dev-runtime.ts'), }, { find: '@pdfme/jsx', replacement: path.resolve(repoRoot, 'packages/jsx/src/index.ts'), }, { find: '@pdfme/manipulator', replacement: path.resolve(repoRoot, 'packages/manipulator/src/index.ts'), }, { find: '@pdfme/pdf-lib', replacement: path.resolve(repoRoot, 'packages/pdf-lib/src/index.ts'), }, { find: '@pdfme/schemas', replacement: path.resolve(repoRoot, 'packages/schemas/src/index.ts'), }, ]; const testConfig = { name: selectedWorkspace?.name ?? 'root', root: workspaceRoot, globals: true, pool: 'forks' as const, passWithNoTests: !selectedWorkspace, include: selectedWorkspace?.include ?? [], setupFiles: selectedWorkspace?.setupFiles, testTimeout: selectedWorkspace?.testTimeout, hookTimeout: selectedWorkspace?.hookTimeout, fileParallelism: selectedWorkspace?.fileParallelism, ...(selectedWorkspace?.environment ? { environment: selectedWorkspace.environment } : {}), }; export default defineConfig({ resolve: { alias: [ ...pdfmeAliases, { find: /^antd\/es\//, replacement: 'antd/lib/', }, { find: /^form-render$/, replacement: path.resolve(repoRoot, 'packages/ui/__mocks__/form-render.ts'), }, { find: /^form-render\/es\//, replacement: 'form-render/lib/', }, { find: /^rc-picker\/es\//, replacement: 'rc-picker/lib/', }, { find: /^lodash-es$/, replacement: 'lodash', }, { find: /^lucide-react$/, replacement: path.resolve(repoRoot, 'packages/ui/__mocks__/lucide-react.ts'), }, ], }, test: testConfig, });