fuse-box-typechecker
Version:
Fuse-Box type checker plugin for fusebox 4.0.0 ++
54 lines (44 loc) • 1.77 kB
text/typescript
import * as ts from 'typescript';
import { IResults, ITypeCheckerOptions } from './interfaces';
import { getOptionsDiagnostics } from './getOptionsDiagnostics';
import { getGlobalDiagnostics } from './getGlobalDiagnostics';
import { getSyntacticDiagnostics } from './getSyntacticDiagnostics';
import { getSemanticDiagnostics } from './getSemanticDiagnostics';
import { throwIfError } from './throwIfErrors';
export function inspectCode(
options: ITypeCheckerOptions,
oldProgram?: ts.EmitAndSemanticDiagnosticsBuilderProgram
): IResults {
const parseConfigHost: any = {
fileExists: ts.sys.fileExists,
readDirectory: ts.sys.readDirectory,
readFile: ts.sys.readFile,
useCaseSensitiveFileNames: true
};
let inspectionTimeStart = new Date().getTime();
const parsed = ts.parseJsonConfigFileContent(
options.tsConfigJsonContent,
parseConfigHost,
options.basePath || '.',
undefined
);
const host = (<any>ts).createIncrementalCompilerHost(parsed.options);
const program = ts.createEmitAndSemanticDiagnosticsBuilderProgram(
parsed.fileNames,
parsed.options,
host,
oldProgram,
undefined,
parsed.projectReferences
);
const results = {
oldProgram: program,
optionsErrors: getOptionsDiagnostics(options, program),
globalErrors: getGlobalDiagnostics(options, program),
syntacticErrors: getSyntacticDiagnostics(options, program),
semanticErrors: getSemanticDiagnostics(options, program),
elapsedInspectionTime: new Date().getTime() - inspectionTimeStart
};
throwIfError(options, results);
return results;
}