UNPKG

@stacksjs/dtsx

Version:

A modern, fast .d.ts generation tool, powered by Bun.

7 lines (6 loc) 4.8 kB
// @bun import{Le as $}from"./chunk-sc0mtgkd.js";import{readFile as G}from"fs/promises";import{dirname as J,relative as Y,resolve as N}from"path";async function z(B,H={}){let j=new Map,w=H.rootDir||process.cwd(),A=[];for(let K of B){if(H.ignore?.some((Q)=>k(K,Q)))continue;if(!H.includeNodeModules&&K.includes("node_modules"))continue;A.push(K)}let L=await Promise.all(A.map((K)=>O(K,w)));for(let K=0;K<A.length;K++){let Q=L[K];if(Q)j.set(A[K],Q)}for(let[K,Q]of j)for(let U of Q.dependencies){let M=j.get(U);if(M)M.dependents.add(K)}return j}async function O(B,H){try{let j=await G(B,"utf-8"),w={path:B,exports:new Set,imports:new Map,dependencies:new Set,dependents:new Set};for(let A of $(j,B,!1)){if(A.isExported&&A.name)w.exports.add(A.isTypeOnly||A.kind==="type"||A.kind==="interface"?"type":A.name);if(!A.source)continue;let L=R(A.source,B,H);if(!L)continue;if(w.dependencies.add(L),A.kind==="import")for(let K of A.specifiers??[])w.imports.set(A.isTypeOnly||K.isType?`type ${K.alias??K.name}`:K.alias??K.name,L)}return w}catch{return null}}function R(B,H,j){if(!B.startsWith(".")&&!B.startsWith("/"))return null;let w=J(H),A=N(w,B);if(A.includes("node_modules"))return null;if(A.endsWith(".ts")||A.endsWith(".tsx"))return A.replace(/\.tsx?$/,".ts");return`${A}.ts`}function k(B,H){let j=H.replace(/\./g,"\\.").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp(j).test(B)}function T(B,H={}){let j=[],w=new Set,A=new Set,L=[],K=new Map,Q=H.maxDepth||100;function U(M,Z){if(Z>Q)return;if(A.has(M)){let W=K.get(M)??L.indexOf(M),V=L.slice(W);V.push(M);let E=F(V,B),X=S(V,B);if(!H.typesOnly||X)j.push({chain:V,symbols:E,severity:X?"error":"warning",reason:X?"Type-level circular dependency can cause compilation issues":"Value-level circular dependency may cause runtime issues"});return}if(w.has(M))return;let _=B.get(M);if(!_)return;A.add(M),K.set(M,L.length),L.push(M);for(let W of _.dependencies)U(W,Z+1);A.delete(M),L.pop(),K.delete(M),w.add(M)}for(let M of B.keys())if(!w.has(M))U(M,0);return b(j)}function F(B,H){let j=[];for(let w=0;w<B.length-1;w++){let A=H.get(B[w]),L=B[w+1];if(A){for(let[K,Q]of A.imports)if(Q===L)j.push(K)}}return[...new Set(j)]}function S(B,H){return B.some((j)=>j.endsWith(".d.ts")||H.get(j)?.exports.has("type")||[...H.get(j)?.imports.keys()||[]].some((w)=>w.startsWith("type ")||w==="type"))}function b(B){let H=new Set,j=[];for(let w of B){let A=I(w.chain),L=A.join(" -> ");if(!H.has(L))H.add(L),j.push({...w,chain:A})}return j}function I(B){if(B.length<=1)return B;let H=B.slice(0,-1),j=H;for(let w=1;w<H.length;w++){let A=[...H.slice(w),...H.slice(0,w)];if(A.join("")<j.join(""))j=A}return[...j,j[0]]}async function v(B,H={}){let j=Date.now(),w=await z(B,H),A=T(w,H);return{hasCircular:A.length>0,cycles:A,graph:w,filesAnalyzed:B,durationMs:Date.now()-j}}function m(B,H){let j=[];if(!B.hasCircular)return j.push(`\u2713 No circular dependencies found (${B.filesAnalyzed.length} files analyzed in ${B.durationMs}ms)`),j.join(` `);j.push(`\u2717 Found ${B.cycles.length} circular dependency chain(s)`),j.push("");for(let w of B.cycles){let A=w.severity==="error"?"\uD83D\uDD34":"\uD83D\uDFE1";j.push(`${A} ${w.severity.toUpperCase()}: Circular dependency`);let L=w.chain.map((K)=>H?Y(H,K):K);if(j.push(` ${L.join(" \u2192 ")}`),w.symbols.length>0)j.push(` Symbols: ${w.symbols.join(", ")}`);j.push(` ${w.reason}`),j.push("")}return j.push(`Analyzed ${B.filesAnalyzed.length} files in ${B.durationMs}ms`),j.join(` `)}function D(B){let H=0,j={file:"",count:0},w={file:"",count:0},A=[];for(let[L,K]of B){let Q=K.dependencies.size;if(H+=Q,Q>j.count)j={file:L,count:Q};if(Q===0&&K.dependents.size===0)A.push(L);if(K.dependents.size>w.count)w={file:L,count:K.dependents.size}}return{totalFiles:B.size,totalDependencies:H,avgDependencies:B.size>0?H/B.size:0,maxDependencies:j,isolatedFiles:A,mostDepended:w}}function g(B,H){let j=new Set,w=[B];while(w.length>0){let A=w.shift(),L=H.get(A);if(L){for(let K of L.dependents)if(!j.has(K))j.add(K),w.push(K)}}return j}function y(B,H){let j=new Set,w=[B];while(w.length>0){let A=w.shift(),L=H.get(A);if(L){for(let K of L.dependencies)if(!j.has(K))j.add(K),w.push(K)}}return j}function u(B,H){let j=["digraph dependencies {"," rankdir=LR;"," node [shape=box];",""];for(let[w,A]of B){let L=H?Y(H,w):w,K=w.replace(/[^a-z0-9]/gi,"_");j.push(` ${K} [label="${L}"];`);for(let Q of A.dependencies){let U=Q.replace(/[^a-z0-9]/gi,"_");j.push(` ${K} -> ${U};`)}}return j.push("}"),j.join(` `)}function P(B,H){let j=[];for(let[w,A]of B){let L=H?Y(H,w):w;j.push({id:w,path:L,exports:[...A.exports],imports:Object.fromEntries(A.imports),dependencies:[...A.dependencies],dependents:[...A.dependents]})}return JSON.stringify({nodes:j},null,2)} export{z as ab,T as bb,v as cb,m as db,D as eb,g as fb,y as gb,u as hb,P as ib};