{"version":3,"sources":["../../src/components/vitest.ts"],"sourcesContent":["import { type UserConfigExport } from 'vitest/config';\nimport { Component } from './component.js';\nimport { SourceCode } from './source-code.js';\nimport type { TypeScriptNpmPackage } from '../projects/npm-package.js';\nimport { merge } from '../utils/merge.js';\n\nexport type VitestOptions = UserConfigExport;\n\nexport function defaultVitestOptions(): VitestOptions {\n  return {\n    test: {\n      clearMocks: true,\n      coverage: {\n        provider: 'v8',\n        reporter: ['cobertura', 'text', 'html', 'clover', 'json'],\n        // '100': true,\n        thresholds: {\n          lines: 89,\n          functions: 88,\n          branches: 87,\n          statements: 89,\n        },\n        exclude: [\n          '.projenrc.ts',\n          '**/*.d.ts',\n          'examples',\n          'lib',\n          'scripts',\n          'src/cli',\n          'src/scripts',\n          'src/utils/test',\n        ],\n      },\n      exclude: ['.cache', '.git', '.idea', 'dist', 'lib', 'node_modules'],\n      globals: true,\n      silent: true,\n      watch: false,\n    },\n  };\n}\n\nexport class Vitest extends Component {\n  options: VitestOptions;\n\n  constructor(project: TypeScriptNpmPackage, options: VitestOptions = {}) {\n    super(project);\n    this.options = merge(defaultVitestOptions(), options);\n    this.addNpmPackages();\n    this.setTestTasks();\n    this.project.npmignore?.addPatterns('vitest.config.ts');\n  }\n\n  private addNpmPackages() {\n    this.project.addDevDeps('vitest', '@vitest/coverage-v8');\n  }\n\n  private setTestTasks() {\n    const testCommand = 'vitest --dir=src --coverage';\n    this.project.testTask.prependExec(testCommand, {\n      receiveArgs: true,\n    });\n    this.project.addTask('test:watch', { exec: `${testCommand} --watch` });\n  }\n\n  preSynthesize(): void {\n    new SourceCode(this.project, 'vitest.config.ts', {\n      codeBlock: `\n        import { defineConfig } from 'vitest/config';\n\n        export default defineConfig(\n          ${JSON.stringify(this.options, undefined, 2)\n            .split('\\n')\n            .map((line) => `  ${line}`)\n            .join('\\n')}\n        );\n      `,\n    });\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,uBAA0B;AAC1B,yBAA2B;AAE3B,mBAAsB;AAIf,SAAS,uBAAsC;AACpD,SAAO;AAAA,IACL,MAAM;AAAA,MACJ,YAAY;AAAA,MACZ,UAAU;AAAA,QACR,UAAU;AAAA,QACV,UAAU,CAAC,aAAa,QAAQ,QAAQ,UAAU,MAAM;AAAA;AAAA,QAExD,YAAY;AAAA,UACV,OAAO;AAAA,UACP,WAAW;AAAA,UACX,UAAU;AAAA,UACV,YAAY;AAAA,QACd;AAAA,QACA,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,SAAS,CAAC,UAAU,QAAQ,SAAS,QAAQ,OAAO,cAAc;AAAA,MAClE,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF;AACF;AAEO,MAAM,eAAe,2BAAU;AAAA,EACpC;AAAA,EAEA,YAAY,SAA+B,UAAyB,CAAC,GAAG;AACtE,UAAM,OAAO;AACb,SAAK,cAAU,oBAAM,qBAAqB,GAAG,OAAO;AACpD,SAAK,eAAe;AACpB,SAAK,aAAa;AAClB,SAAK,QAAQ,WAAW,YAAY,kBAAkB;AAAA,EACxD;AAAA,EAEQ,iBAAiB;AACvB,SAAK,QAAQ,WAAW,UAAU,qBAAqB;AAAA,EACzD;AAAA,EAEQ,eAAe;AACrB,UAAM,cAAc;AACpB,SAAK,QAAQ,SAAS,YAAY,aAAa;AAAA,MAC7C,aAAa;AAAA,IACf,CAAC;AACD,SAAK,QAAQ,QAAQ,cAAc,EAAE,MAAM,GAAG,WAAW,WAAW,CAAC;AAAA,EACvE;AAAA,EAEA,gBAAsB;AACpB,QAAI,8BAAW,KAAK,SAAS,oBAAoB;AAAA,MAC/C,WAAW;AAAA;AAAA;AAAA;AAAA,YAIL,KAAK,UAAU,KAAK,SAAS,QAAW,CAAC,EACxC,MAAM,IAAI,EACV,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,EACzB,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,IAGnB,CAAC;AAAA,EACH;AACF;","names":[]}