Skip to content

Commit

Permalink
feat: add report config
Browse files Browse the repository at this point in the history
  • Loading branch information
skarab42 committed Jul 9, 2022
1 parent 276fb9e commit 41a88ff
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 17 deletions.
18 changes: 9 additions & 9 deletions src/plugin/index.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,26 @@
import type { Plugin } from 'vite';
import { transform } from './transform';
import { fileNameMatch, type IncludeExclude } from '../util';
import { TypeScriptConfigOptions, loadConfig } from '../typescript/config';
import { type TypeScriptConfigOptions, loadConfig } from '../typescript/config';

export type Reporter = 'type-error' | 'type-assertion';

export interface PluginOptions {
report?: Reporter[];
include?: IncludeExclude['include'];
exclude?: IncludeExclude['exclude'];
typescript?: TypeScriptConfigOptions;
}

const defaultOptions = {
const defaultOptions: PluginOptions = {
report: ['type-error', 'type-assertion'],
include: ['**/*.test.ts'],
exclude: [],
typescript: {},
};

export function vitestTypescriptAssertPlugin(options: PluginOptions = {}): Plugin {
const { include, exclude, typescript } = { ...defaultOptions, ...options };
const { include, exclude, typescript, report } = { ...defaultOptions, ...options } as Required<PluginOptions>;

const tsconfig = loadConfig(typescript);

Expand All @@ -31,12 +36,7 @@ export function vitestTypescriptAssertPlugin(options: PluginOptions = {}): Plugi
return;
}

return transform({
code,
fileName,
tsconfig: tsconfig.config,
shouldReportDiagnostics: !!typescript?.shouldReportDiagnostics,
});
return transform({ code, fileName, report, typescript: { config: tsconfig.config, options: typescript } });
},
};
}
17 changes: 11 additions & 6 deletions src/plugin/transform.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,26 @@
import type ts from 'byots';
import type { Reporter } from '.';
import MagicString from 'magic-string';
import { reportDiagnostics } from './util';
import type { TransformResult } from 'vite';
import { program } from '../typescript/program';
import type { TypeScriptConfigOptions } from '../typescript/config';

export interface TransformOptions {
export interface TransformSettings {
code: string;
fileName: string;
tsconfig: ts.ParsedCommandLine;
shouldReportDiagnostics?: boolean;
report: Reporter[];
typescript: {
config: ts.ParsedCommandLine;
options: TypeScriptConfigOptions;
};
}

export function transform({ code, fileName, tsconfig, shouldReportDiagnostics }: TransformOptions): TransformResult {
const { diagnostics } = program({ config: tsconfig, fileName });
export function transform({ code, fileName, report, typescript }: TransformSettings): TransformResult {
const { diagnostics } = program({ config: typescript.config, fileName });
const newCode = new MagicString(code);

if (shouldReportDiagnostics) {
if (report.includes('type-error')) {
reportDiagnostics(diagnostics, newCode, fileName);
}

Expand Down
3 changes: 1 addition & 2 deletions src/typescript/config.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import path from 'path';
import ts from 'byots';
import path from 'path';
import { formatDiagnostics } from './diagnostic';
import { errorMessage, ErrorCode } from '../error';
import { getCurrentDirectory, fileExists, readFile } from './util';
Expand All @@ -8,7 +8,6 @@ export interface TypeScriptConfigOptions {
configName?: string;
searchPath?: string;
compilerOptions?: ts.CompilerOptions;
shouldReportDiagnostics?: boolean;
}

export function findConfigFile(options: TypeScriptConfigOptions = {}) {
Expand Down

0 comments on commit 41a88ff

Please sign in to comment.