Guest User

Untitled

a guest
Oct 16th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.83 KB | None | 0 0
  1. import * as FS from 'fs';
  2.  
  3. import {
  4. LanguageServiceHost,
  5. ScriptSnapshot,
  6. createDocumentRegistry,
  7. createLanguageService,
  8. flattenDiagnosticMessageText,
  9. getDefaultLibFilePath,
  10. } from 'typescript';
  11.  
  12. /**
  13. * @param object An object that can be serialized to JSON.
  14. */
  15. export function checkObjectTypeErrors(
  16. object: any,
  17. typeFileName: string,
  18. typeName: string,
  19. ): string[] | undefined {
  20. let json = JSON.stringify(object);
  21.  
  22. let typeFileContent = FS.readFileSync(typeFileName);
  23.  
  24. let validationContent = `${typeFileContent}\nconst _: ${typeName} = ${json};`;
  25.  
  26. return checkTypeErrors(validationContent);
  27. }
  28.  
  29. function checkTypeErrors(content: string): string[] | undefined {
  30. const scriptFileName = '_.ts';
  31.  
  32. const serviceHost: LanguageServiceHost = {
  33. getScriptFileNames() {
  34. return [scriptFileName];
  35. },
  36. getScriptVersion() {
  37. return '0';
  38. },
  39. getScriptSnapshot(fileName) {
  40. if (fileName === scriptFileName) {
  41. return ScriptSnapshot.fromString(content);
  42. } else {
  43. try {
  44. return ScriptSnapshot.fromString(FS.readFileSync(fileName, 'utf-8'));
  45. } catch (error) {
  46. return undefined;
  47. }
  48. }
  49. },
  50. getCurrentDirectory() {
  51. return __dirname;
  52. },
  53. getCompilationSettings() {
  54. return {
  55. strict: true,
  56. noEmit: true,
  57. };
  58. },
  59. getDefaultLibFileName(options) {
  60. return getDefaultLibFilePath(options);
  61. },
  62. };
  63.  
  64. const languageService = createLanguageService(
  65. serviceHost,
  66. createDocumentRegistry(),
  67. );
  68.  
  69. let diagnostics = [
  70. ...languageService.getSyntacticDiagnostics(scriptFileName),
  71. ...languageService.getSemanticDiagnostics(scriptFileName),
  72. ];
  73.  
  74. if (!diagnostics.length) {
  75. return undefined;
  76. }
  77.  
  78. return diagnostics.map(diagnostic =>
  79. flattenDiagnosticMessageText(diagnostic.messageText, '\n'),
  80. );
  81. }
Add Comment
Please, Sign In to add comment