Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import * as FS from 'fs';
- import {
- LanguageServiceHost,
- ScriptSnapshot,
- createDocumentRegistry,
- createLanguageService,
- flattenDiagnosticMessageText,
- getDefaultLibFilePath,
- } from 'typescript';
- /**
- * @param object An object that can be serialized to JSON.
- */
- export function checkObjectTypeErrors(
- object: any,
- typeFileName: string,
- typeName: string,
- ): string[] | undefined {
- let json = JSON.stringify(object);
- let typeFileContent = FS.readFileSync(typeFileName);
- let validationContent = `${typeFileContent}\nconst _: ${typeName} = ${json};`;
- return checkTypeErrors(validationContent);
- }
- function checkTypeErrors(content: string): string[] | undefined {
- const scriptFileName = '_.ts';
- const serviceHost: LanguageServiceHost = {
- getScriptFileNames() {
- return [scriptFileName];
- },
- getScriptVersion() {
- return '0';
- },
- getScriptSnapshot(fileName) {
- if (fileName === scriptFileName) {
- return ScriptSnapshot.fromString(content);
- } else {
- try {
- return ScriptSnapshot.fromString(FS.readFileSync(fileName, 'utf-8'));
- } catch (error) {
- return undefined;
- }
- }
- },
- getCurrentDirectory() {
- return __dirname;
- },
- getCompilationSettings() {
- return {
- strict: true,
- noEmit: true,
- };
- },
- getDefaultLibFileName(options) {
- return getDefaultLibFilePath(options);
- },
- };
- const languageService = createLanguageService(
- serviceHost,
- createDocumentRegistry(),
- );
- let diagnostics = [
- ...languageService.getSyntacticDiagnostics(scriptFileName),
- ...languageService.getSemanticDiagnostics(scriptFileName),
- ];
- if (!diagnostics.length) {
- return undefined;
- }
- return diagnostics.map(diagnostic =>
- flattenDiagnosticMessageText(diagnostic.messageText, '\n'),
- );
- }
Add Comment
Please, Sign In to add comment