UNPKG

@stacksjs/dtsx

Version:

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

4 lines (3 loc) 3.29 kB
// @bun import{oe as T}from"./chunk-t1vsc910.js";import{Le as $}from"./chunk-sc0mtgkd.js";import{existsSync as O}from"fs";import{readFile as S}from"fs/promises";import{dirname as N,join as F,resolve as k}from"path";async function y(q,B=process.cwd()){let H=new Map;for(let z of q){let w=k(B,z),A=await C(w,B);H.set(w,{path:w,dependencies:A,dependents:new Set,state:"pending"})}for(let[z,w]of H)for(let A of w.dependencies){let J=H.get(A);if(J)J.dependents.add(z)}return H}async function C(q,B){let H=new Set;try{let z=await S(q,"utf-8"),w=N(q);for(let A of $(z,q,!1)){let J=A.source;if(!J||!J.startsWith(".")&&!J.startsWith("/"))continue;let K=b(J,w,B);if(K)H.add(K)}}catch{}return H}function b(q,B,H){let z=k(B,q);if(/\.(?:ts|tsx|mts|cts)$/.test(q))return z.includes("node_modules")?null:z;let w=[".ts",".tsx",".mts",".cts"];for(let J of w){let K=`${z}${J}`;if(O(K))return K}for(let J of w){let K=F(z,`index${J}`);if(O(K))return K}let A=`${z}.ts`;return A.includes("node_modules")?null:A}function x(q){let B=[];for(let[H,z]of q){if(z.state!=="pending")continue;let w=!0;for(let A of z.dependencies){let J=q.get(A);if(J&&J.state!=="completed"){w=!1;break}}if(w)B.push(H)}return B}async function D(q,B={}){let H=await S(q,"utf-8"),z=B.keepComments??!0,w=$(H,q,z,B.isolatedDeclarations??!1);return T(w,{filePath:q,sourceCode:H,declarations:w},z,B.importOrder)}async function l(q,B={}){let H=performance.now(),{maxConcurrency:z=4,rootDir:w=process.cwd(),config:A={},onProgress:J,onError:K}=B,W=await y(q,w),j=new Map,Z=new Map,G=[],_=0,X=0,Y=0,L=W.size;while(Y<L){let R=x(W);if(R.length===0){let U=[...W.values()].filter((Q)=>Q.state==="pending");if(U.length>0)for(let Q of U)Q.state="failed",Q.error=Error("Circular dependency detected or dependency failed"),Z.set(Q.path,Q.error),Y++;break}let E=R.slice(0,z-X);for(let U of E){let Q=W.get(U);Q.state="processing",X++}_=Math.max(_,X);let I=E.map(async(U)=>{let Q=W.get(U),M=performance.now();try{let V=await D(U,A);Q.state="completed",Q.result=V,Q.duration=performance.now()-M,j.set(U,V),G.push(U)}catch(V){if(Q.state="failed",Q.error=V instanceof Error?V:Error(String(V)),Q.duration=performance.now()-M,Z.set(U,Q.error),K&&!K(U,Q.error))throw Error("Processing aborted by error handler")}finally{X--,Y++,J?.(Y,L,U)}});await Promise.all(I)}return{success:j,failed:Z,totalTimeMs:performance.now()-H,maxConcurrent:_,processingOrder:G}}function d(q){let B=[],H=new Set,z=new Set;function w(A){if(H.has(A))return;if(z.has(A))return;z.add(A);let J=q.get(A);if(J){for(let K of J.dependencies)if(q.has(K))w(K)}z.delete(A),H.add(A),B.push(A)}for(let A of q.keys())w(A);return B}function u(q){let B=[];for(let[H,z]of q){let w=!1;for(let A of z.dependencies)if(q.has(A)){w=!0;break}if(!w)B.push(H)}return B}function v(q){let B=[],H=new Set;while(H.size<q.size){let z=[];for(let[w,A]of q){if(H.has(w))continue;let J=!0;for(let K of A.dependencies)if(q.has(K)&&!H.has(K)){J=!1;break}if(J)z.push(w)}if(z.length===0){for(let w of q.keys())if(!H.has(w))z.push(w)}for(let w of z)H.add(w);B.push(z)}return B}function h(q){let B=v(q),H=u(q),z=Math.max(...B.map((A)=>A.length)),w=q.size/B.length;return{totalFiles:q.size,independentFiles:H.length,maxParallelism:z,levels:B.length,estimatedSpeedup:w}} export{y as Yd,l as Zd,d as _d,u as $d,v as ae,h as be};