relaycode
Version:
A developer assistant that automates applying code changes from LLMs.
2 lines • 1.59 kB
JavaScript
import r from'typescript';import u from'path';import {logger}from'./logger';const l=i=>i.filter(n=>n.category===r.DiagnosticCategory.Error).length,f=i=>{const n=/(?:--project|-p)\s+([^\s]+)/,o=/(?:--build|-b)/;let t;const s=i.match(n);s&&(t=s[1]);let c;const e=i.match(/(?:--build|-b)\s+([^\s]+)/);return e&&(c=e[1]),{project:t,build:o.test(i),buildPath:c}},p=(i,n)=>{const o=f(i);let t;if(o.buildPath?t=u.resolve(n,o.buildPath):o.project&&(t=u.resolve(n,o.project)),t&&r.sys.directoryExists(t)&&(t=u.join(t,"tsconfig.json")),t||(t=r.findConfigFile(n,r.sys.fileExists,"tsconfig.json")),!t||!r.sys.fileExists(t)){logger.debug("Could not find tsconfig.json to use with TypeScript API.");return}return logger.debug(`Using tsconfig for API-based linting: ${t}`),t},y=(i,n)=>{const o=f(i),t=p(i,n);if(!t)return -1;const s=[],c=e=>s.push(e);try{if(o.build){const e=r.createSolutionBuilderHost(r.sys,void 0,c,c);return e.writeFile=a=>{logger.debug(`Intercepted write for ${a} during API-based linting.`);},r.createSolutionBuilder(e,[t],{force:!0,verbose:!1}).build(),l(s)}else {const e=r.readConfigFile(t,r.sys.readFile);if(e.error)return s.push(e.error),l(s);const g=r.parseJsonConfigFileContent(e.config,r.sys,u.dirname(t));g.errors.length>0&&s.push(...g.errors);const a=r.createProgram(g.fileNames,g.options);return s.push(...r.getPreEmitDiagnostics(a)),l(s)}}catch(e){return logger.debug(`Error during TypeScript API-based linting: ${e instanceof Error?e.message:String(e)}`),-1}};export{y as getTypeScriptErrorCount};//# sourceMappingURL=typescript.js.map
//# sourceMappingURL=typescript.js.map