UNPKG

@stacksjs/dtsx

Version:

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

7 lines (6 loc) 4.34 kB
// @bun import{_b as y}from"./chunk-rvhbm0yh.js";import{De as H,Fe as F}from"./chunk-dx7m458f.js";import{Af as R}from"./chunk-p0p65mbf.js";import{existsSync as V,readFileSync as G}from"fs";import{dirname as M,join as X,resolve as x}from"path";async function S(A){let E=[],z=new Set;async function q(I,Q){let w=x(I);if(z.has(w))return;if(z.add(w),!V(w)){H.warn(`tsconfig not found: ${w}`);return}try{let K=G(w,"utf-8"),L=K.indexOf("//")!==-1||K.indexOf("/*")!==-1?K.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g,""):K,O=JSON.parse(L),U=M(w),Y=B(U,Q),W=[];if(O.references)for(let D of O.references){let $=x(U,D.path),J=V(X($,"tsconfig.json"))?X($,"tsconfig.json"):$;await q(J,Y);let b=B(M(J),Y);W.push(b)}let Z="./src";if(O.compilerOptions?.rootDir)Z=O.compilerOptions.rootDir;else if(O.include&&O.include.length>0){if(O.include[0].startsWith("src/"))Z="./src"}let _="./dist";if(O.compilerOptions?.outDir)_=O.compilerOptions.outDir;else if(O.compilerOptions?.declarationDir)_=O.compilerOptions.declarationDir;E.push({name:Y,root:U,tsconfigPath:w,references:W,config:{root:Z,outdir:_}})}catch(K){let L=K instanceof Error?K.message:String(K);H.warn(`Failed to parse ${w}: ${L}`)}}return await q(A),E}function B(A,E){let z=X(A,"package.json");if(V(z))try{let I=G(z,"utf-8"),Q=JSON.parse(I);if(Q.name)return Q.name}catch{}let q=A.split("/").pop()||"unknown";return E?`${E}/${q}`:q}function N(A){let E=new Map(A.map((w)=>[w.name,w])),z=[],q=new Set,I=new Set;function Q(w){if(q.has(w))return;if(I.has(w)){H.warn(`Circular dependency detected involving: ${w}`);return}I.add(w);let K=E.get(w);if(K){for(let L of K.references)Q(L);z.push(K)}I.delete(w),q.add(w)}for(let w of A)Q(w.name);return z}async function T(A){let E=Date.now(),z=N(A.projects);H.info(`Generating declarations for ${z.length} projects...`);let q=[],I=!0;for(let L of z){H.info(` [${L.name}] Generating...`);try{let O={...A.sharedConfig,...L.config,cwd:L.root,tsconfigPath:L.tsconfigPath},U=await y(O),Y=U.filesFailed===0;if(!Y)I=!1;q.push({name:L.name,stats:U,success:Y}),H.info(`[${L.name}] Generated ${U.filesGenerated} files`)}catch(O){I=!1;let U=O instanceof Error?O.message:String(O);q.push({name:L.name,stats:{generationMode:L.config?.isolatedDeclarations||A.sharedConfig?.isolatedDeclarations?"isolated":"semantic",filesProcessed:0,filesGenerated:0,filesFailed:0,filesValidated:0,validationErrors:0,declarationsFound:0,importsProcessed:0,exportsProcessed:0,durationMs:0,errors:[]},success:!1,error:U}),H.error(`[${L.name}] Failed: ${U}`)}}let Q=Date.now()-E,w=q.filter((L)=>L.success).length,K=q.length-w;if(H.info(` --- Workspace Generation Summary ---`),H.info(`Projects processed: ${q.length}`),H.info(`Successful: ${w}`),K>0)H.info(`Failed: ${K}`);return H.info(`Total duration: ${Q}ms`),H.info(`------------------------------------ `),{success:I,projects:q,durationMs:Q}}async function f(A,E){if(E?.logLevel)F(E.logLevel);let z=X(A,"tsconfig.json");if(!V(z))throw Error(`Root tsconfig.json not found at: ${z}`);H.info("Discovering workspace projects...");let q=await S(z);if(q.length===0)return H.warn("No projects found in workspace"),{success:!0,projects:[],durationMs:0};return H.info(`Found ${q.length} projects`),T({root:A,projects:q,sharedConfig:E})}async function v(A){let E=X(A,"package.json");if(!V(E))return[];try{let z=G(E,"utf-8"),q=JSON.parse(z),I=[];if(Array.isArray(q.workspaces))I=q.workspaces;else if(q.workspaces?.packages)I=q.workspaces.packages;return I}catch{return[]}}async function C(A,E){let{Glob:z}=awaitPromise.resolve(globalThis.Bun),q=[];for(let I of E){let Q=new z(I);for await(let w of Q.scan({cwd:A,absolute:!0,onlyFiles:!1})){let K=X(w,"package.json");if(V(K))q.push(w)}}return q}async function l(A,E){if(E?.logLevel)F(E.logLevel);let z=await v(A);if(z.length===0)return H.warn("No workspace patterns found in package.json"),{success:!0,projects:[],durationMs:0};H.info(`Found workspace patterns: ${z.join(", ")}`);let q=await C(A,z);if(q.length===0)return H.warn("No projects found matching workspace patterns"),{success:!0,projects:[],durationMs:0};H.info(`Found ${q.length} workspace packages`);let I=q.map((Q)=>{let w=X(Q,"tsconfig.json");return{name:B(Q),root:Q,tsconfigPath:V(w)?w:"",references:[]}});return T({root:A,projects:I,sharedConfig:E})} export{S as Ga,N as Ha,T as Ia,f as Ja,v as Ka,C as La,l as Ma};