UNPKG

typescript-migration-report

Version:

An npm library that helps you calculate the percentage of TypeScript and JavaScript files in your codebase, assisting in tracking progress during migration from JavaScript to TypeScript.

2 lines (1 loc) 3.94 kB
import*as t from"fs";import{glob as e}from"glob";import*as o from"path";const s="",i="",l="",a="",r="",c="",n="",p="";const _=async(s,i,l)=>{const a=await e(s,{cwd:i.rootDir,ignore:i.exclude});if(0===a.length)return[a.length,0];let r=0;return a.forEach((e=>{l&&console.log(`⤷ ${e}`);const s=o.join(i.rootDir,e),a=t.readFileSync(s,"utf-8");r+=a.split("\n").length})),[a.length,r]},d=t=>t>=75?r:t>=40?a:c,g=t=>`${t.toFixed(2)} %`;async function v(e,r){var c,v,f,y,$,u,m,j;!function(t){if(!(t.rootDir&&t.patterns&&t.patterns.typescript&&t.patterns.typescriptTests&&t.patterns.javascript&&t.patterns.javascriptTests&&t.exclude&&Array.isArray(t.exclude)))throw new Error("Invalid configuration format")}(e),(null===(c=e.logFiles)||void 0===c?void 0:c.typescript)&&console.log(`\n${i}Scanning typescript files${s}`);const[F,T]=await _(e.patterns.typescript,e,null===(v=e.logFiles)||void 0===v?void 0:v.typescript);(null===(f=e.logFiles)||void 0===f?void 0:f.typescriptTests)&&console.log(`\n${i}Scanning typescript test files${s}`);const[S,h]=await _(e.patterns.typescriptTests,e,null===(y=e.logFiles)||void 0===y?void 0:y.typescriptTests),w=F-S,P=T-h;(null===($=e.logFiles)||void 0===$?void 0:$.javascript)&&console.log(`\n${i}Scanning javascript files${s}`);const[b,x]=await _(e.patterns.javascript,e,null===(u=e.logFiles)||void 0===u?void 0:u.javascript);(null===(m=e.logFiles)||void 0===m?void 0:m.javascriptTests)&&console.log(`\n${i}Scanning javascript test files${s}`);const[L,A]=await _(e.patterns.javascriptTests,e,null===(j=e.logFiles)||void 0===j?void 0:j.javascriptTests),D=b-L,J=x-A,O=F+b,C=D+w,E=L+S,N=T+x,R=h+A,I=P+J;if(0===N)return void console.log("No JavaScript or TypeScript code found.");const k=100*w/C||0,q=100*S/E||0,z=100*h/R||0,B=100*P/I||0,G=100*T/N||0,H=100*F/O||0,K=[" ".repeat(12),"Code files","Test files","Code lines","Test lines"],M=[{title:{data:"JavaScript",color:a},code_files:{data:D,color:n},test_files:{data:L,color:n},code_lines:{data:J,color:n},test_lines:{data:A,color:n}},{title:{data:"TypeScript",color:l},code_files:{data:w,color:n},test_files:{data:S,color:n},code_lines:{data:P,color:n},test_lines:{data:h,color:n}},{title:{data:"All",color:n},code_files:{data:C,color:n},test_files:{data:E,color:n},code_lines:{data:I,color:n},test_lines:{data:R,color:n}},{title:{data:"TypeScript %",color:a},code_files:{data:g(k),color:d(k)},test_files:{data:g(q),color:d(q)},code_lines:{data:g(B),color:d(B)},test_lines:{data:g(z),color:d(z)}}].map((t=>[t.title,t.code_files,t.test_files,t.code_lines,t.test_lines]));if(console.log("\n _____ _ _ \n |_ _| _ _ __ ___ ___ __ _ _(_)_ __| |_ \n | || || | '_ \\/ -_|_-</ _| '_| | '_ \\ _|\n |_| \\_, | .__/\\___/__/\\__|_| |_| .__/\\__|\n |__/|_| |_| \n"),function(t,e){const o=t.map((t=>t.length+4)),a=(t,e)=>t.padStart(e),r=`${p}|${s}`,c=`${p}+`+t.map(((t,e)=>`${"-".repeat(o[e])}`)).join("+")+`+${s}`;console.log(c),console.log(r+t.map(((t,e)=>`${i}${l} ${a(t,o[e]-2)} ${s}`)).join(r)+r),console.log(c);for(const t of e){const e=t.map(((t,e)=>`${i}${t.color} ${a(t.data.toString(),o[e]-2)} ${s}`)).join(r);console.log(r+e+r),console.log(c)}}(K,M),console.log(`${i}Overall Typescript (Lines) %: \t${d(G)}${g(G)}${s}`),console.log(`${i}Overall Typescript (Files) %: \t${d(H)}${g(H)}${s}\n`),e.generateReport){((e,s)=>{const i="typescript-migration-report.json",l=o.join(s,i),a=JSON.stringify(e,null,2);t.writeFileSync(l,a,"utf8"),console.log(`Report file generated: ${i}`)})({codeFiles:{javascript:D,typescript:w,both:C,typescriptPercentage:k},testFiles:{javascript:L,typescript:S,both:E,typescriptPercentage:q},codeLines:{javascript:J,typescript:P,both:I,typescriptPercentage:B},testLines:{javascript:A,typescript:h,both:R,typescriptPercentage:z},overall:{typescriptLinesPercentage:G,typescriptFilesPercentage:H}},r)}}export{v as calculateMetrics};