UNPKG

@stacksjs/dtsx

Version:

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

20 lines (19 loc) 7.8 kB
// @bun var O=["import","type","interface","enum","class","function","variable","export","module","namespace","unknown"],D=["builtin","external","scoped","internal","parent","sibling","index","type"];function E(H,J={}){let{lineEnding:j="lf",trailingNewline:V=!0,maxBlankLines:W=1,trimTrailingWhitespace:Y=!0,normalizeIndentation:$=!0,indent:N={style:"spaces",size:2},declarationOrder:y,importGrouping:q,preserveComments:P=!0,insertFinalNewline:A=!0}=J,Q=H;if(Q=R(Q,j),q?.enabled!==!1)Q=h(Q,q||{});if(y)Q=x(Q,y);if(Y)Q=B(Q);if(Q=k(Q,W),$)Q=b(Q,N);if(V||A)Q=T(Q);return Q}function R(H,J){let j=H;if(H.indexOf("\r")!==-1){if(H.indexOf(`\r `)!==-1)j=j.replace(/\r\n/g,` `);if(j.indexOf("\r")!==-1)j=j.replace(/\r/g,` `)}if(J==="crlf")j=j.replace(/\n/g,`\r `);return j}function I(H){let J=(H.match(/\r\n/g)||[]).length,j=(H.match(/(?<!\r)\n/g)||[]).length;if(J>j)return"crlf";return"lf"}function B(H){return H.split(` `).map((J)=>J.replace(/[\t ]+$/,"")).join(` `)}function k(H,J){let j=new RegExp(`\\n{${J+2},}`,"g");return H.replace(j,` `.repeat(J+1))}function T(H){return`${H.replace(/\s+$/,"")} `}function b(H,J){let{style:j="spaces",size:V=2}=J,W=j==="tabs"?"\t":" ".repeat(V),Y=H.split(` `),$=[];for(let N of Y){let y=N.match(/^([\t ]*)(.*)$/);if(!y){$.push(N);continue}let[,q,P]=y;if(!P){$.push("");continue}let A=q.replace(/\t/g," "),Q=Math.floor(A.length/2);$.push(W.repeat(Q)+P)}return $.join(` `)}function h(H,J){let{groups:j=D,separateGroups:V=!0,alphabetize:W=!0}=J,Y=H.split(` `),$=[],N=[],y=-1;for(let X=0;X<Y.length;X++){let S=Y[X],Z=z(S);if(Z)$.push({line:S,source:Z.source,group:Z.group,isType:Z.isType}),y=X;else if($.length>0&&S.trim()==="")continue;else if($.length>0||S.trim()!==""){if($.length===0||X>y+1)N.push(S)}}if($.length===0)return H;let q=new Map;for(let X of j)q.set(X,[]);for(let X of $)(q.get(X.group)||q.get("external")||[]).push(X);if(W)for(let[,X]of q)X.sort((S,Z)=>{if(S.isType!==Z.isType)return S.isType?1:-1;return S.source.localeCompare(Z.source)});let P=[],A=null;for(let X of j){let S=q.get(X)||[];if(S.length===0)continue;if(V&&A!==null)P.push("");for(let Z of S)P.push(Z.line);A=X}let Q=Y.slice(0,Y.findIndex((X)=>z(X)!==null)),F=N;while(F.length>0&&F[0].trim()==="")F.shift();return[...Q,...P,"",...F].join(` `)}function z(H){let J=H.trim(),j=J.match(/^import\s+(type\s+)?.*from\s+['"]([^'"]+)['"]/);if(!j){let Y=J.match(/^import\s+['"]([^'"]+)['"]/);if(Y)return{source:Y[1],group:C(Y[1]),isType:!1};return null}let V=!!j[1],W=j[2];return{source:W,group:V?"type":C(W),isType:V}}function C(H){if(H.startsWith("node:"))return"builtin";let J=["assert","buffer","child_process","cluster","crypto","dgram","dns","events","fs","http","https","net","os","path","querystring","readline","stream","url","util","zlib"];if(J.includes(H)||J.includes(H.split("/")[0]))return"builtin";if(H==="."||H==="./index"||H==="./index.js"||H==="./index.ts")return"index";if(H.startsWith("./"))return"sibling";if(H.startsWith("../"))return"parent";if(H.startsWith("@/")||H.startsWith("~/")||H.startsWith("#"))return"internal";if(H.startsWith("@"))return"scoped";return"external"}function x(H,J){let{kinds:j=O,alphabetize:V=!1,groupExports:W=!0}=J,Y=H.split(` `),$=[],N=[],y=[],q=null,P=0,A=!0,Q=!1,F=[];for(let Z=0;Z<Y.length;Z++){let U=Y[Z],w=U.trim(),M=P,_=w.startsWith("///"),G=M===0&&!_&&(w.startsWith("//")||w.startsWith("/*"));if(Q||G){if(F.push(U),!Q&&w.startsWith("/*")&&!w.includes("*/"))Q=!0;else if(Q&&w.includes("*/"))Q=!1;continue}if(M===0&&F.length>0&&w===""){F.push(U);continue}P+=(U.match(/\{/g)||[]).length,P-=(U.match(/\}/g)||[]).length;let K=v(w);if(A&&K&&K.kind!=="import"&&!w.startsWith("//")&&!w.startsWith("/*"))A=!1;if(A){if(F.length>0){if(K?.kind==="import"||!K)N.push(...F),F.length=0}N.push(U);continue}if(K&&P<=1){if(q)$.push(q);q={lines:F.length>0?[...F,U]:[U],kind:K.kind,name:K.name,isExport:K.isExport},F.length=0}else if(q)q.lines.push(U);else{if(w==="")continue;y.push(U)}}if(q)$.push(q);if(F.length>0)y.push(...F);$.sort((Z,U)=>{if(W&&Z.isExport!==U.isExport)return Z.isExport?-1:1;let w=j.indexOf(Z.kind),M=j.indexOf(U.kind),_=w>=0?w:j.length,G=M>=0?M:j.length;if(_!==G)return _-G;if(V)return Z.name.localeCompare(U.name);return 0});let X=[...N],S=null;for(let Z of $){if(S!==null&&Z.kind!==S)X.push("");X.push(...Z.lines),S=Z.kind}if(y.length>0)X.push(""),X.push(...y);return X.join(` `)}function v(H){let J=H.startsWith("export "),j=J?H.slice(7):H;if(H.startsWith("import "))return{kind:"import",name:H.match(/from\s+['"]([^'"]+)['"]/)?.[1]||"",isExport:!1};if(j.startsWith("type ")||j.startsWith("declare type "))return{kind:"type",name:j.match(/type\s+(\w+)/)?.[1]||"",isExport:J};if(j.startsWith("interface ")||j.startsWith("declare interface "))return{kind:"interface",name:j.match(/interface\s+(\w+)/)?.[1]||"",isExport:J};if(j.startsWith("class ")||j.startsWith("abstract class ")||j.startsWith("declare class ")||j.startsWith("declare abstract class "))return{kind:"class",name:j.match(/class\s+(\w+)/)?.[1]||"",isExport:J};if(j.startsWith("enum ")||j.startsWith("const enum ")||j.startsWith("declare enum ")||j.startsWith("declare const enum "))return{kind:"enum",name:j.match(/enum\s+(\w+)/)?.[1]||"",isExport:J};if(j.startsWith("function ")||j.startsWith("async function ")||j.startsWith("declare function ")||j.startsWith("declare async function "))return{kind:"function",name:j.match(/function\s+(\w+)/)?.[1]||"",isExport:J};if(j.startsWith("const ")||j.startsWith("let ")||j.startsWith("var ")||j.startsWith("declare const ")||j.startsWith("declare let ")||j.startsWith("declare var "))return{kind:"variable",name:j.match(/(?:const|let|var)\s+(\w+)/)?.[1]||"",isExport:J};if(j.startsWith("namespace ")||j.startsWith("declare namespace "))return{kind:"namespace",name:j.match(/namespace\s+(\w+)/)?.[1]||"",isExport:J};if(j.startsWith("module ")||j.startsWith("declare module "))return{kind:"module",name:j.match(/module\s+['"]?(\w+)['"]?/)?.[1]||"",isExport:J};if(H.startsWith("export {")||H.startsWith("export *")||H.startsWith("export type {"))return{kind:"export",name:"",isExport:!0};return null}function g(H){let J=H.split(` `),j=[];for(let V=0;V<J.length;V++){let W=J[V],Y=W.trim();if(Y.startsWith("/**")||Y.startsWith("*")||Y.startsWith("*/")){j.push(W);continue}if(Y.startsWith("//")){j.push(W);continue}if(Y.startsWith("/*")||Y.endsWith("*/")){j.push(W);continue}j.push(W)}return j.join(` `)}function L(H={}){return{normalize:(J)=>E(J,H),normalizeLineEndings:(J)=>R(J,H.lineEnding||"lf"),removeTrailingWhitespace:B,normalizeBlankLines:(J)=>k(J,H.maxBlankLines||1),ensureTrailingNewline:T,processImports:(J)=>h(J,H.importGrouping||{}),orderDeclarations:(J)=>x(J,H.declarationOrder||{})}}var u={default:{lineEnding:"lf",trailingNewline:!0,maxBlankLines:1,trimTrailingWhitespace:!0,normalizeIndentation:!0,indent:{style:"spaces",size:2},importGrouping:{enabled:!0,separateGroups:!0,alphabetize:!0}},minimal:{lineEnding:"lf",trailingNewline:!0,maxBlankLines:2,trimTrailingWhitespace:!0,normalizeIndentation:!1,importGrouping:{enabled:!1}},strict:{lineEnding:"lf",trailingNewline:!0,maxBlankLines:1,trimTrailingWhitespace:!0,normalizeIndentation:!0,indent:{style:"spaces",size:2},importGrouping:{enabled:!0,separateGroups:!0,alphabetize:!0},declarationOrder:{kinds:O,alphabetize:!0,groupExports:!0}},windows:{lineEnding:"crlf",trailingNewline:!0,maxBlankLines:1,trimTrailingWhitespace:!0,normalizeIndentation:!0,indent:{style:"spaces",size:2},importGrouping:{enabled:!0,separateGroups:!0,alphabetize:!0}},tabs:{lineEnding:"lf",trailingNewline:!0,maxBlankLines:1,trimTrailingWhitespace:!0,normalizeIndentation:!0,indent:{style:"tabs",size:1},importGrouping:{enabled:!0,separateGroups:!0,alphabetize:!0}}}; export{O as lc,D as mc,E as nc,R as oc,I as pc,B as qc,k as rc,T as sc,b as tc,h as uc,x as vc,g as wc,L as xc,u as yc};