UNPKG

@stacksjs/dtsx

Version:

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

10 lines (8 loc) 2.36 kB
// @bun class G{plugins=[];config=null;register(k){if(this.plugins.some((j)=>j.name===k.name))throw Error(`Plugin "${k.name}" is already registered`);this.plugins.push(k)}unregister(k){let j=this.plugins.findIndex((v)=>v.name===k);if(j>=0)return this.plugins.splice(j,1),!0;return!1}getPlugins(){return this.plugins}createLogger(k){return{debug:(j)=>console.debug(`[${k}] ${j}`),info:(j)=>console.info(`[${k}] ${j}`),warn:(j)=>console.warn(`[${k}] ${j}`),error:(j)=>console.error(`[${k}] ${j}`)}}async runOnStart(k){let j=k;for(let v of this.plugins)if(v.onStart){let q=await v.onStart(j);if(q)j=q}return this.config=j,j}async runOnBeforeFile(k,j){let v=j;for(let q of this.plugins)if(q.onBeforeFile){let w={filePath:k,sourceCode:j,content:v,config:this.config,log:this.createLogger(q.name)},z=await q.onBeforeFile(w);if(typeof z==="string")v=z}return v}async runOnDeclarations(k,j,v){let q=v;for(let w of this.plugins)if(w.onDeclarations){let z={filePath:k,sourceCode:j,declarations:q,config:this.config,log:this.createLogger(w.name)},A=await w.onDeclarations(z);if(A)q=A}return q}async runOnAfterFile(k,j,v){let q=v;for(let w of this.plugins)if(w.onAfterFile){let z={filePath:k,sourceCode:j,content:q,config:this.config,log:this.createLogger(w.name)},A=await w.onAfterFile(z);if(typeof A==="string")q=A}return q}async runOnEnd(k){for(let j of this.plugins)if(j.onEnd)await j.onEnd(k)}async runOnError(k,j,v){for(let q of this.plugins)if(q.onError){let w={filePath:j,sourceCode:v,config:this.config,log:this.createLogger(q.name)};await q.onError(k,w)}}}var H=new G;function E(k){return k}var I=E({name:"strip-internal",version:"1.0.0",description:"Removes declarations marked with @internal",onDeclarations:(k)=>{return k.declarations.filter((j)=>{if(j.leadingComments){if(j.leadingComments.some((q)=>q.includes("@internal")))return k.log.debug(`Stripping internal declaration: ${j.name}`),!1}return!0})}});function J(k){return E({name:"banner",version:"1.0.0",description:"Adds a banner comment to generated files",onAfterFile:(j)=>{return`/** * ${k.split(` `).join(` * `)} */ `+j.content}})}function L(k){return E({name:"filter",version:"1.0.0",description:"Filters declarations by name",onDeclarations:(j)=>{return j.declarations.filter((v)=>{if(v.kind==="import")return!0;return k(v.name)})}})} export{G as fd,H as gd,E as hd,I as id,J as jd,L as kd};