bunup 0.4.62 → 0.4.63

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.mjs CHANGED
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- import{exec as Sn}from"tinyexec";import{build as Ve}from"rolldown";import{dts as Je}from"rolldown-plugin-dts";var re=!1;function R(e){re=e??!1}class ${static instance;loggedOnceMessages=new Set;MAX_LABEL_LENGTH=3;MAX_MESSAGE_LENGTH=25;colors={cli:"147",muted:"245",info:"117",warn:"179",error:"174",progress:{ESM:"172",CJS:"108",IIFE:"146",DTS:"110"},default:"252",size:"65"};labels={cli:"CLI",info:"INFO",warn:"WARN",error:"ERROR"};constructor(){}static getInstance(){if(!$.instance)$.instance=new $;return $.instance}dispose(){this.loggedOnceMessages.clear()}shouldLog(e){if(!e?.once)return!0;if(this.loggedOnceMessages.has(e.once))return!1;return this.loggedOnceMessages.add(e.once),!0}formatMessage({colorCode:e,label:n,message:t,size:r,identifier:s,muted:o}){let i=" ".repeat(Math.max(0,this.MAX_LABEL_LENGTH-n.length)),a=o?`\x1B[38;5;${this.colors.muted}m${t}\x1B[0m`:t;if(r){let[u,...m]=a.split(" "),p=" ".repeat(Math.max(0,this.MAX_MESSAGE_LENGTH-u.length)),f=s?` \x1B[48;5;${e};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${e}m${n}\x1B[0m ${i}${u}${p} \x1B[38;5;${this.colors.size}m${r}\x1B[0m ${m.join(" ")}${f}`}let c=s?` \x1B[48;5;${e};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${e}m${n}\x1B[0m ${i}${a}${c}`}output(e,n={},t=console.log){if(re)return;if(!this.shouldLog(n))return;if(n.verticalSpace)console.log("");if(t(e),n.verticalSpace)console.log("")}cli(e,n={}){let t=this.formatMessage({colorCode:this.colors.cli,label:this.labels.cli,message:e,identifier:n.identifier,muted:n.muted});this.output(t,n)}info(e,n={}){let t=this.formatMessage({colorCode:this.colors.info,label:this.labels.info,message:e,identifier:n.identifier,muted:n.muted});this.output(t,n)}warn(e,n={}){let t=this.formatMessage({colorCode:this.colors.warn,label:this.labels.warn,message:e,identifier:n.identifier,muted:n.muted});this.output(t,n,console.warn)}error(e,n={}){let t=this.formatMessage({colorCode:this.colors.error,label:this.labels.error,message:e,identifier:n.identifier,muted:n.muted});this.output(t,n,console.error)}progress(e,n,t,r){let s=String(e),o=this.colors.default,i,a,c={};if(typeof t==="string")i=t,a=r;else if(t)i=t.size,a=t.identifier,c=t;for(let[m,p]of Object.entries(this.colors.progress))if(s.includes(m)){o=p;break}let u=this.formatMessage({colorCode:o,label:s,message:n,size:i,identifier:a,muted:c.muted});this.output(u,c)}}var l=$.getInstance();class O extends Error{constructor(e){super(e);this.name="BunupError"}}class C extends O{constructor(e){super(e);this.name="BunupBuildError"}}class g extends O{constructor(e){super(e);this.name="BunupDTSBuildError"}}class h extends O{constructor(e){super(e);this.name="BunupCLIError"}}class M extends O{constructor(e){super(e);this.name="BunupWatchError"}}var b=(e)=>{if(e instanceof Error)return e.message;return String(e)},ze=[{pattern:/Could not resolve: "bun"/i,errorType:"BUILD ERROR",logSolution:()=>{l.error("\x1B[0mYou're trying to build a project that uses Bun. Please set the target option to \x1B[36m`bun`\x1B[0m.\nExample: \x1B[32m`bunup --target bun`\x1B[0m or in config: \x1B[32m{ target: 'bun' }\x1B[0m")}}],G=(e,n)=>{let t=b(e),r=n?`[${n}] `:"",s="ERROR";if(e instanceof C)s="BUILD ERROR";else if(e instanceof g)s="DTS ERROR";else if(e instanceof h)s="CLI ERROR";else if(e instanceof M)s="WATCH ERROR";else if(e instanceof O)s="BUNUP ERROR";let o=ze.find((i)=>i.pattern.test(t)&&(i.errorType===s||!i.errorType));if(!o)console.error(`\x1B[31m${s}\x1B[0m ${r}${t}`);if(o)console.log(`
3
+ import{createRequire as en}from"node:module";var Xe=Object.create;var{getPrototypeOf:Ve,defineProperty:se,getOwnPropertyNames:Je}=Object;var Pe=Object.prototype.hasOwnProperty;var ie=(e,n,t)=>{t=e!=null?Xe(Ve(e)):{};let r=n||!e||!e.__esModule?se(t,"default",{value:e,enumerable:!0}):t;for(let s of Je(e))if(!Pe.call(r,s))se(r,s,{get:()=>e[s],enumerable:!0});return r};var oe=en(import.meta.url);import{exec as kn}from"tinyexec";var ae=!1;function M(e){ae=e??!1}class B{static instance;loggedOnceMessages=new Set;MAX_LABEL_LENGTH=3;MAX_MESSAGE_LENGTH=25;colors={cli:"147",muted:"245",info:"117",warn:"179",error:"174",progress:{ESM:"172",CJS:"108",IIFE:"146",DTS:"110"},default:"252",size:"65"};labels={cli:"CLI",info:"INFO",warn:"WARN",error:"ERROR"};constructor(){}static getInstance(){if(!B.instance)B.instance=new B;return B.instance}dispose(){this.loggedOnceMessages.clear()}shouldLog(e){if(!e?.once)return!0;if(this.loggedOnceMessages.has(e.once))return!1;return this.loggedOnceMessages.add(e.once),!0}formatMessage({colorCode:e,label:n,message:t,size:r,identifier:s,muted:o}){let i=" ".repeat(Math.max(0,this.MAX_LABEL_LENGTH-n.length)),a=o?`\x1B[38;5;${this.colors.muted}m${t}\x1B[0m`:t;if(r){let[u,...m]=a.split(" "),p=" ".repeat(Math.max(0,this.MAX_MESSAGE_LENGTH-u.length)),f=s?` \x1B[48;5;${e};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${e}m${n}\x1B[0m ${i}${u}${p} \x1B[38;5;${this.colors.size}m${r}\x1B[0m ${m.join(" ")}${f}`}let c=s?` \x1B[48;5;${e};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${e}m${n}\x1B[0m ${i}${a}${c}`}output(e,n={},t=console.log){if(ae)return;if(!this.shouldLog(n))return;if(n.verticalSpace)console.log("");if(t(e),n.verticalSpace)console.log("")}cli(e,n={}){let t=this.formatMessage({colorCode:this.colors.cli,label:this.labels.cli,message:e,identifier:n.identifier,muted:n.muted});this.output(t,n)}info(e,n={}){let t=this.formatMessage({colorCode:this.colors.info,label:this.labels.info,message:e,identifier:n.identifier,muted:n.muted});this.output(t,n)}warn(e,n={}){let t=this.formatMessage({colorCode:this.colors.warn,label:this.labels.warn,message:e,identifier:n.identifier,muted:n.muted});this.output(t,n,console.warn)}error(e,n={}){let t=this.formatMessage({colorCode:this.colors.error,label:this.labels.error,message:e,identifier:n.identifier,muted:n.muted});this.output(t,n,console.error)}progress(e,n,t,r){let s=String(e),o=this.colors.default,i,a,c={};if(typeof t==="string")i=t,a=r;else if(t)i=t.size,a=t.identifier,c=t;for(let[m,p]of Object.entries(this.colors.progress))if(s.includes(m)){o=p;break}let u=this.formatMessage({colorCode:o,label:s,message:n,size:i,identifier:a,muted:c.muted});this.output(u,c)}}var l=B.getInstance();class S extends Error{constructor(e){super(e);this.name="BunupError"}}class O extends S{constructor(e){super(e);this.name="BunupBuildError"}}class g extends S{constructor(e){super(e);this.name="BunupDTSBuildError"}}class h extends S{constructor(e){super(e);this.name="BunupCLIError"}}class j extends S{constructor(e){super(e);this.name="BunupWatchError"}}var b=(e)=>{if(e instanceof Error)return e.message;return String(e)},nn=[{pattern:/Could not resolve: "bun"/i,errorType:"BUILD ERROR",logSolution:()=>{l.error("\x1B[0mYou're trying to build a project that uses Bun. Please set the target option to \x1B[36m`bun`\x1B[0m.\nExample: \x1B[32m`bunup --target bun`\x1B[0m or in config: \x1B[32m{ target: 'bun' }\x1B[0m")}}],Y=(e,n)=>{let t=b(e),r=n?`[${n}] `:"",s="ERROR";if(e instanceof O)s="BUILD ERROR";else if(e instanceof g)s="DTS ERROR";else if(e instanceof h)s="CLI ERROR";else if(e instanceof j)s="WATCH ERROR";else if(e instanceof S)s="BUNUP ERROR";let o=nn.find((i)=>i.pattern.test(t)&&(i.errorType===s||!i.errorType));if(!o)console.error(`\x1B[31m${s}\x1B[0m ${r}${t}`);if(o)console.log(`
4
4
  `),o.logSolution(t),console.log(`
5
- `);else console.error("\x1B[90mIf you think this is a bug, please open an issue at: \x1B[36mhttps://github.com/arshad-yaseen/bunup/issues/new\x1B[0m")},se=(e,n)=>{G(e,n),process.exit(1)};import ie from"node:fs/promises";import Qe from"node:path";function K(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function oe(e=8){let n="";while(n.length<e)n+=Math.random().toString(36).substring(2);return n.substring(0,e)}function ae(e,n,t){return Array.isArray(e)?e.map((r)=>({...r,[n]:t})):{...e,[n]:t}}function ce(e){return Array.isArray(e)?e:[e]}function ue(e,n){switch(e){case"esm":return B(n)?".js":".mjs";case"cjs":return B(n)?".cjs":".js";case"iife":return".global.js"}}function le(e,n){switch(e){case"esm":return B(n)?".d.ts":".d.mts";case"cjs":return B(n)?".d.cts":".d.ts";case"iife":return".d.ts"}}function Y(e){return e==="node"||e==="bun"}function B(e){return e==="module"}function j(e){return e>=1000?`${(e/1000).toFixed(2)}s`:`${Math.round(e)}ms`}function me(e){if(!e)return[];return Array.from(new Set([...Object.keys(e.dependencies||{}),...Object.keys(e.peerDependencies||{})]))}function z(e){if(e===0)return"0 B";let n=["B","KB","MB","GB"],t=Math.floor(Math.log(e)/Math.log(1024));if(t===0)return`${e} ${n[t]}`;return`${(e/1024**t).toFixed(2)} ${n[t]}`}function y(e,n=3){return e.split("/").slice(-n).join("/")}async function fe(e,n){let t=Qe.join(e,n);try{await ie.rm(t,{recursive:!0,force:!0})}catch(r){throw new C(`Failed to clean output directory: ${r}`)}await ie.mkdir(t,{recursive:!0})}function k(e){return[".ts",".mts",".cts",".tsx"].some((n)=>e.endsWith(n))}function pe(e){return e.map((n)=>typeof n==="string"?new RegExp(`^${K(n)}($|\\/|\\\\)`):n)}function I(e,n){return pe(e.external||[]).concat(me(n).map((t)=>new RegExp(`^${K(t)}($|\\/|\\\\)`)))}function _(e){return pe(e.noExternal||[])}import xe from"node:path";import{ResolverFactory as Xe}from"oxc-resolver";import{resolveTsImportPath as Ze}from"ts-import-resolver";var L="\x00dts:",de=(e,n,t)=>{return{name:"bunup:virtual-dts",async resolveId(r,s){if(Q(r))return r;if(!s||!Q(s))return null;let o=n.tsconfig?Ze({path:r,importer:E(s),tsconfig:n.tsconfig,rootDir:t}):null;if(!o)return null;let i=w(o);if(e.has(i))return N(i);return null},load(r){if(r.startsWith(L)){let s=E(r),o=e.get(s);if(o)return S.add(s),o}return null}}};var Z=/\.(js|mjs|cjs|ts|mts|cts|tsx|jsx)$/;function ge(e){return e.endsWith(".d.ts")||e.endsWith(".d.mts")||e.endsWith(".d.cts")}function X(e){return Z.test(e)&&!ge(e)}function w(e){if(ge(e))return e;if(e.endsWith(".mts"))return`${e.slice(0,-4)}.d.mts`;if(e.endsWith(".cts"))return`${e.slice(0,-4)}.d.cts`;if(Z.test(e))return e.replace(Z,".d.ts");return`${e}.d.ts`}function be(e){if(X(e))return e;if(e.endsWith(".d.mts"))return`${e.slice(0,-6)}.mts`;if(e.endsWith(".d.cts"))return`${e.slice(0,-6)}.cts`;if(e.endsWith(".d.ts"))return`${e.slice(0,-5)}.ts`;return e}function Q(e){return e.startsWith(L)}function E(e){return e.replace(L,"")}function N(e){return`${L}${e}`}function he(e,n,t,r){if(typeof r==="boolean"&&r)return!1;if(Array.isArray(r)){for(let s of r)if(typeof s==="string"&&e===s)return!1;else if(s instanceof RegExp&&s.test(e))return!1}return n.some((s)=>s.test(e))&&!t.some((s)=>s.test(e))}var V;function ye(e,n){return{name:"bunup:types-resolve",buildStart(){V||=new Xe({mainFields:["types","typings","module","main"],conditionNames:["types","typings","import","require"],extensions:[".d.ts",".d.mts",".d.cts",".ts",".mts",".cts"],...e.path&&{tsconfig:{configFile:e.path}},modules:["node_modules","node_modules/@types"]})},async resolveId(t,r){if(n===!1)return;if(t==="bun")return;let s=r?E(r):void 0;if(/\0/.test(t))return;if(Array.isArray(n)){if(!n.some((c)=>typeof c==="string"?c===t:c.test(t)))return}let o=s?xe.dirname(s):process.cwd(),{path:i}=await V.async(o,t);if(!i)return;if(X(i)){let a=w(i);try{let{path:c}=await V.async(xe.dirname(i),a);if(c)return c}catch(c){}return}return i}}}async function we(e,n,t,r,s,o){let i=w(e),a=N(i),c=I(t,r),u=_(t),m=typeof t.dts==="object"&&"resolve"in t.dts?t.dts.resolve:void 0;try{let{output:p}=await Ve({input:a,output:{dir:t.outDir},write:!1,...s.path&&{resolve:{tsconfigFilename:s.path}},onwarn(f,T){if(["UNRESOLVED_IMPORT","CIRCULAR_DEPENDENCY","EMPTY_BUNDLE"].includes(f.code??""))return;T(f)},plugins:[de(n,s,o),m&&ye(s,m),Je({dtsInput:!0,emitDtsOnly:!0})],external:(f)=>he(f,c,u,m)});if(!p[0]?.code)return l.warn(`Generated empty declaration file for entry "${e}"`,{muted:!0}),"";return p[0].code}catch(p){throw new g(`DTS bundling failed for entry "${e}": ${b(p)}`)}}import{resolveTsImportPath as Pe}from"ts-import-resolver";var en=/^\s*import\s+(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]/gm,nn=/^\s*export\s+.*from\s+['"]([^'"]+)['"]/gm,tn=/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,rn=/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,sn=/import\s+\w+\s*=\s*require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,on=/\/\/\/\s*<reference\s+path\s*=\s*['"]([^'"]+)['"]\s*\/>/g,an=/\/\/\/\s*<reference\s+types\s*=\s*['"]([^'"]+)['"]\s*\/>/g;function cn(e){let n=new Set,t=[en,nn,tn,rn,sn,on,an];for(let r of t){let s=e.matchAll(r);for(let o of s)if(o[1])n.add(o[1])}return n}async function Ce(e,n,t){let r=new Set([e]),s=[e];while(s.length){let o=s.pop();if(!o)continue;try{let i=await Bun.file(o).text(),a=cn(i);for(let c of a){let u=n.tsconfig?Pe({path:c,importer:o,tsconfig:n.tsconfig,rootDir:t}):null;if(!u)continue;if(!r.has(u))r.add(u),s.push(u)}}catch(i){l.warn(`Error processing ${o}: ${b(i)}`)}}return r}import{isolatedDeclaration as un}from"oxc-transform";async function $e(e){let n=new Map;return await Promise.all([...e].map(async(t)=>{try{let r=w(t);if(!await Bun.file(t).exists())return;let o=await Bun.file(t).text(),{code:i}=un(t,o);if(i)n.set(r,i)}catch(r){l.warn(`Failed to generate declaration for ${t}: ${b(r)}`)}})),n}import Oe from"node:fs/promises";import J from"node:path";import{isolatedDeclaration as ln}from"oxc-transform";async function Be(e,n){let t=J.resolve(e),r=J.resolve(t,n);if(!await Oe.exists(t))throw new g(`Root directory does not exist: ${t}`);if(!await Bun.file(r).exists())throw new g(`Entry file does not exist: ${r}`);if(!k(r))throw new g(`Entry file must be a TypeScript file: ${r}`);if(J.relative(t,r).startsWith(".."))throw new g(`Entry file must be within rootDir: ${r}`);return{absoluteRootDir:t,absoluteEntry:r}}async function Se(e){let n=!1;if(await Promise.all([...e].map(async(t)=>{try{let r=be(t),s=await Bun.file(r).text(),{errors:o}=ln(r,s);for(let i of o){if(!n)console.log(`
6
- `);let a=i.labels[0],c=a?mn(s,a.start):"",m=`${y(r)}${c}: ${fn(i.message)}`;l.warn(m),n=!0}}catch{}})),n)l.info(`You may have noticed some TypeScript warnings above related to missing type annotations. This is because Bunup uses TypeScript's "isolatedDeclarations" approach for generating declaration files. This modern approach requires explicit type annotations on exports for better, more accurate type declarations. Adding the suggested type annotations will not only silence these warnings but also improve the quality of your published type definitions, making your library more reliable for consumers.`,{muted:!0,verticalSpace:!0})}function mn(e,n){if(n===void 0)return"";let t=e.slice(0,n).split(`
7
- `),r=t.length,s=t[t.length-1].length+1;return` (${r}:${s})`}function fn(e){return e.replace(" with --isolatedDeclarations","").replace(" with --isolatedDeclaration","")}async function Te(e,n,t,r,s){let{absoluteEntry:o}=await Be(e,n),i=await Ce(o,r,e),a=await $e(i);return we(o,a,t,s,r,e)}import{basename as pn,extname as dn}from"node:path";function U(e){let n=pn(e),t=dn(n);return t?n.slice(0,-t.length):n}function A(e,{warnOnConflict:n=!0}={}){let t=[],r=new Set,s={};function o(i,a){if(r.has(i)){let c=oe(),u=`${i}_${c}`;if(n)l.warn(`Output name conflict: "${i}" is used by multiple files.
5
+ `);else console.error("\x1B[90mIf you think this is a bug, please open an issue at: \x1B[36mhttps://github.com/arshad-yaseen/bunup/issues/new\x1B[0m")},ce=(e,n)=>{Y(e,n),process.exit(1)};import ue from"node:fs/promises";import tn from"node:path";function z(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function le(e=8){let n="";while(n.length<e)n+=Math.random().toString(36).substring(2);return n.substring(0,e)}function me(e,n,t){return Array.isArray(e)?e.map((r)=>({...r,[n]:t})):{...e,[n]:t}}function fe(e){return Array.isArray(e)?e:[e]}function pe(e,n){switch(e){case"esm":return T(n)?".js":".mjs";case"cjs":return T(n)?".cjs":".js";case"iife":return".global.js"}}function de(e,n){switch(e){case"esm":return T(n)?".d.ts":".d.mts";case"cjs":return T(n)?".d.cts":".d.ts";case"iife":return".d.ts"}}function Q(e){return e==="node"||e==="bun"}function T(e){return e==="module"}function k(e){return e>=1000?`${(e/1000).toFixed(2)}s`:`${Math.round(e)}ms`}function ge(e){if(!e)return[];return Array.from(new Set([...Object.keys(e.dependencies||{}),...Object.keys(e.peerDependencies||{})]))}function Z(e){if(e===0)return"0 B";let n=["B","KB","MB","GB"],t=Math.floor(Math.log(e)/Math.log(1024));if(t===0)return`${e} ${n[t]}`;return`${(e/1024**t).toFixed(2)} ${n[t]}`}function y(e,n=3){return e.split("/").slice(-n).join("/")}async function be(e,n){let t=tn.join(e,n);try{await ue.rm(t,{recursive:!0,force:!0})}catch(r){throw new O(`Failed to clean output directory: ${r}`)}await ue.mkdir(t,{recursive:!0})}function I(e){return[".ts",".mts",".cts",".tsx"].some((n)=>e.endsWith(n))}function he(e){return e.map((n)=>typeof n==="string"?new RegExp(`^${z(n)}($|\\/|\\\\)`):n)}function _(e,n){return he(e.external||[]).concat(ge(n).map((t)=>new RegExp(`^${z(t)}($|\\/|\\\\)`)))}function N(e){return he(e.noExternal||[])}import $e from"node:path";import{ResolverFactory as sn}from"oxc-resolver";import{resolveTsImportPath as rn}from"ts-import-resolver";var A="\x00dts:",xe=(e,n,t)=>{return{name:"bunup:virtual-dts",async resolveId(r,s){if(X(r))return r;if(!s||!X(s))return null;let o=n.tsconfig?rn({path:r,importer:L(s),tsconfig:n.tsconfig,rootDir:t}):null;if(!o)return null;let i=C(o);if(e.has(i))return U(i);return null},load(r){if(r.startsWith(A)){let s=L(r),o=e.get(s);if(o)return E.add(s),o}return null}}};var V=/\.(js|mjs|cjs|ts|mts|cts|tsx|jsx)$/;function ye(e){return e.endsWith(".d.ts")||e.endsWith(".d.mts")||e.endsWith(".d.cts")}function J(e){return V.test(e)&&!ye(e)}function C(e){if(ye(e))return e;if(e.endsWith(".mts"))return`${e.slice(0,-4)}.d.mts`;if(e.endsWith(".cts"))return`${e.slice(0,-4)}.d.cts`;if(V.test(e))return e.replace(V,".d.ts");return`${e}.d.ts`}function we(e){if(J(e))return e;if(e.endsWith(".d.mts"))return`${e.slice(0,-6)}.mts`;if(e.endsWith(".d.cts"))return`${e.slice(0,-6)}.cts`;if(e.endsWith(".d.ts"))return`${e.slice(0,-5)}.ts`;return e}function X(e){return e.startsWith(A)}function L(e){return e.replace(A,"")}function U(e){return`${A}${e}`}function Ce(e,n,t,r){if(typeof r==="boolean"&&r)return!1;if(Array.isArray(r)){for(let s of r)if(typeof s==="string"&&e===s)return!1;else if(s instanceof RegExp&&s.test(e))return!1}return n.some((s)=>s.test(e))&&!t.some((s)=>s.test(e))}var P;function Oe(e,n){return{name:"bunup:types-resolve",buildStart(){P||=new sn({mainFields:["types","typings","module","main"],conditionNames:["types","typings","import","require"],extensions:[".d.ts",".d.mts",".d.cts",".ts",".mts",".cts"],...e.path&&{tsconfig:{configFile:e.path}},modules:["node_modules","node_modules/@types"]})},async resolveId(t,r){if(n===!1)return;if(t==="bun")return;let s=r?L(r):void 0;if(/\0/.test(t))return;if(Array.isArray(n)){if(!n.some((c)=>typeof c==="string"?c===t:c.test(t)))return}let o=s?$e.dirname(s):process.cwd(),{path:i}=await P.async(o,t);if(!i)return;if(J(i)){let a=C(i);try{let{path:c}=await P.async($e.dirname(i),a);if(c)return c}catch(c){}return}return i}}}var on=import("rolldown"),an=import("rolldown-plugin-dts");async function Be(e,n,t,r,s,o){let i=(await on).build,a=(await an).dts,c=C(e),u=U(c),m=_(t,r),p=N(t),f=typeof t.dts==="object"&&"resolve"in t.dts?t.dts.resolve:void 0;try{let{output:w}=await i({input:u,output:{dir:t.outDir},write:!1,...s.path&&{resolve:{tsconfigFilename:s.path}},onwarn($,G){if(["UNRESOLVED_IMPORT","CIRCULAR_DEPENDENCY","EMPTY_BUNDLE"].includes($.code??""))return;G($)},plugins:[xe(n,s,o),f&&Oe(s,f),a({dtsInput:!0,emitDtsOnly:!0})],external:($)=>Ce($,m,p,f)});if(!w[0]?.code)return l.warn(`Generated empty declaration file for entry "${e}"`,{muted:!0}),"";return w[0].code}catch(w){throw new g(`DTS bundling failed for entry "${e}": ${b(w)}`)}}import{resolveTsImportPath as cn}from"ts-import-resolver";var un=/^\s*import\s+(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]/gm,ln=/^\s*export\s+.*from\s+['"]([^'"]+)['"]/gm,mn=/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,fn=/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,pn=/import\s+\w+\s*=\s*require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,dn=/\/\/\/\s*<reference\s+path\s*=\s*['"]([^'"]+)['"]\s*\/>/g,gn=/\/\/\/\s*<reference\s+types\s*=\s*['"]([^'"]+)['"]\s*\/>/g;function bn(e){let n=new Set,t=[un,ln,mn,fn,pn,dn,gn];for(let r of t){let s=e.matchAll(r);for(let o of s)if(o[1])n.add(o[1])}return n}async function Se(e,n,t){let r=new Set([e]),s=[e];while(s.length){let o=s.pop();if(!o)continue;try{let i=await Bun.file(o).text(),a=bn(i);for(let c of a){let u=n.tsconfig?cn({path:c,importer:o,tsconfig:n.tsconfig,rootDir:t}):null;if(!u)continue;if(!r.has(u))r.add(u),s.push(u)}}catch(i){l.warn(`Error processing ${o}: ${b(i)}`)}}return r}import{isolatedDeclaration as hn}from"oxc-transform";async function Te(e){let n=new Map;return await Promise.all([...e].map(async(t)=>{try{let r=C(t);if(!await Bun.file(t).exists())return;let o=await Bun.file(t).text(),{code:i}=hn(t,o);if(i)n.set(r,i)}catch(r){l.warn(`Failed to generate declaration for ${t}: ${b(r)}`)}})),n}import Ee from"node:fs/promises";import ee from"node:path";import{isolatedDeclaration as xn}from"oxc-transform";async function Le(e,n){let t=ee.resolve(e),r=ee.resolve(t,n);if(!await Ee.exists(t))throw new g(`Root directory does not exist: ${t}`);if(!await Bun.file(r).exists())throw new g(`Entry file does not exist: ${r}`);if(!I(r))throw new g(`Entry file must be a TypeScript file: ${r}`);if(ee.relative(t,r).startsWith(".."))throw new g(`Entry file must be within rootDir: ${r}`);return{absoluteRootDir:t,absoluteEntry:r}}async function Ae(e){let n=!1;if(await Promise.all([...e].map(async(t)=>{try{let r=we(t),s=await Bun.file(r).text(),{errors:o}=xn(r,s);for(let i of o){if(!n)console.log(`
6
+ `);let a=i.labels[0],c=a?yn(s,a.start):"",m=`${y(r)}${c}: ${wn(i.message)}`;l.warn(m),n=!0}}catch{}})),n)l.info(`You may have noticed some TypeScript warnings above related to missing type annotations. This is because Bunup uses TypeScript's "isolatedDeclarations" approach for generating declaration files. This modern approach requires explicit type annotations on exports for better, more accurate type declarations. Adding the suggested type annotations will not only silence these warnings but also improve the quality of your published type definitions, making your library more reliable for consumers.`,{muted:!0,verticalSpace:!0})}function yn(e,n){if(n===void 0)return"";let t=e.slice(0,n).split(`
7
+ `),r=t.length,s=t[t.length-1].length+1;return` (${r}:${s})`}function wn(e){return e.replace(" with --isolatedDeclarations","").replace(" with --isolatedDeclaration","")}async function Re(e,n,t,r,s){let{absoluteEntry:o}=await Le(e,n),i=await Se(o,r,e),a=await Te(i);return Be(o,a,t,s,r,e)}import{basename as Cn,extname as $n}from"node:path";function v(e){let n=Cn(e),t=$n(n);return t?n.slice(0,-t.length):n}function R(e,{warnOnConflict:n=!0}={}){let t=[],r=new Set,s={};function o(i,a){if(r.has(i)){let c=le(),u=`${i}_${c}`;if(n)l.warn(`Output name conflict: "${i}" is used by multiple files.
8
8
  Bunup uses filenames without extensions as output names by default.
9
9
 
10
10
  ${s[i]} -> ${i}.js
@@ -18,18 +18,18 @@ To fix this, use named entries in your configuration:
18
18
  }
19
19
  }
20
20
 
21
- See: https://bunup.dev/documentation/#named-entries`,{muted:!0,verticalSpace:!0});t.push({name:u,path:a})}else t.push({name:i,path:a}),r.add(i),s[i]=a}if(Array.isArray(e))for(let i of e){let a=U(i);o(a,i)}else if(typeof e==="object")for(let[i,a]of Object.entries(e))o(i,a);else{let i=U(e);o(i,e)}return t}function Ee(e){return e.filter((n)=>k(n.path))}function Le(e,n){return`[dir]/${e}${n}`}import{loadConfig as Ae}from"coffi";async function Re(e,n){return Array.isArray(e)&&"root"in e[0]?e.map((t)=>({rootDir:t.root,options:ae(t.config,"name",t.name)})):[{rootDir:n,options:e}]}async function Me(e){let{config:n,filepath:t}=await Ae({name:"package",cwd:e,extensions:[".json"],maxDepth:3});return{packageJson:n,path:t}}async function je(e,n){let{config:t,filepath:r}=await Ae({name:"tsconfig",cwd:e,extensions:[".json"],preferredPath:n,maxDepth:3});return{tsconfig:t,path:r}}var gn={entry:[],format:["cjs"],outDir:"dist",target:"node",clean:!0};function v(e){return{...gn,...e}}function ke(e){let{minify:n,minifyWhitespace:t,minifyIdentifiers:r,minifySyntax:s}=e,o=n===!0;return{whitespace:t??o,identifiers:r??o,syntax:s??o}}function Ie(e,n){return n==="cjs"?e:void 0}function _e(e,n,t,r){return{...typeof t==="object"&&Object.keys(t).reduce((s,o)=>{let i=JSON.stringify(t[o]);return s[`process.env.${o}`]=i,s[`import.meta.env.${o}`]=i,s},{}),...e,...r==="cjs"&&(n===!0||typeof n==="object"&&n.importMetaUrl)&&{"import.meta.url":"importMetaUrl"}}}function Ne(e,n){return e===void 0?n==="esm":e}function Ue(e){return typeof e==="string"?e:void 0}function ve(e,n){return{name:"bunup:external-plugin",setup(t){t.onResolve({filter:/.*/},(r)=>{let s=r.path;if(e.some((i)=>i.test(s))&&!n.some((i)=>i.test(s)))return{path:s,external:!0};return null})}}}var bn=/\.(js|ts|jsx|tsx|mts|cts)$/,P={dirnameFilename:{appliesTo:(e,n)=>e==="esm"&&Y(n),isNeededInFile:(e)=>/\b__dirname\b/.test(e)||/\b__filename\b/.test(e),generateCode:()=>`import { fileURLToPath } from 'url';
21
+ See: https://bunup.dev/documentation/#named-entries`,{muted:!0,verticalSpace:!0});t.push({name:u,path:a})}else t.push({name:i,path:a}),r.add(i),s[i]=a}if(Array.isArray(e))for(let i of e){let a=v(i);o(a,i)}else if(typeof e==="object")for(let[i,a]of Object.entries(e))o(i,a);else{let i=v(e);o(i,e)}return t}function Me(e){return e.filter((n)=>I(n.path))}function je(e,n){return`[dir]/${e}${n}`}import{loadConfig as ke}from"coffi";async function Ie(e,n){return Array.isArray(e)&&"root"in e[0]?e.map((t)=>({rootDir:t.root,options:me(t.config,"name",t.name)})):[{rootDir:n,options:e}]}async function _e(e){let{config:n,filepath:t}=await ke({name:"package",cwd:e,extensions:[".json"],maxDepth:3});return{packageJson:n,path:t}}async function Ne(e,n){let{config:t,filepath:r}=await ke({name:"tsconfig",cwd:e,extensions:[".json"],preferredPath:n,maxDepth:3});return{tsconfig:t,path:r}}var On={entry:[],format:["cjs"],outDir:"dist",target:"node",clean:!0};function H(e){return{...On,...e}}function Ue(e){let{minify:n,minifyWhitespace:t,minifyIdentifiers:r,minifySyntax:s}=e,o=n===!0;return{whitespace:t??o,identifiers:r??o,syntax:s??o}}function ve(e,n){return n==="cjs"?e:void 0}function He(e,n,t,r){return{...typeof t==="object"&&Object.keys(t).reduce((s,o)=>{let i=JSON.stringify(t[o]);return s[`process.env.${o}`]=i,s[`import.meta.env.${o}`]=i,s},{}),...e,...r==="cjs"&&(n===!0||typeof n==="object"&&n.importMetaUrl)&&{"import.meta.url":"importMetaUrl"}}}function We(e,n){return e===void 0?n==="esm":e}function De(e){return typeof e==="string"?e:void 0}function qe(e,n){return{name:"bunup:external-plugin",setup(t){t.onResolve({filter:/.*/},(r)=>{let s=r.path;if(e.some((i)=>i.test(s))&&!n.some((i)=>i.test(s)))return{path:s,external:!0};return null})}}}var Bn=/\.(js|ts|jsx|tsx|mts|cts)$/,ne={dirnameFilename:{appliesTo:(e,n)=>e==="esm"&&Q(n),isNeededInFile:(e)=>/\b__dirname\b/.test(e)||/\b__filename\b/.test(e),generateCode:()=>`import { fileURLToPath } from 'url';
22
22
  import { dirname } from 'path';
23
23
 
24
24
  const __filename = fileURLToPath(import.meta.url);
25
25
  const __dirname = dirname(__filename);
26
26
 
27
- `},importMetaUrl:{appliesTo:(e,n)=>e==="cjs"&&Y(n),isNeededInFile:(e)=>/\bimport\.meta\.url\b/.test(e),generateCode:()=>`import { pathToFileURL } from 'url';
27
+ `},importMetaUrl:{appliesTo:(e,n)=>e==="cjs"&&Q(n),isNeededInFile:(e)=>/\bimport\.meta\.url\b/.test(e),generateCode:()=>`import { pathToFileURL } from 'url';
28
28
 
29
29
  const importMetaUrl = pathToFileURL(__filename).href;
30
30
 
31
- `}};function De({format:e,target:n,shims:t}){let s=hn(t).map((o)=>P[o]).filter((o)=>o.appliesTo(e,n));if(s.length===0)return{name:"bunup:inject-shims",setup(){}};return{name:"bunup:inject-shims",setup(o){o.onLoad({filter:bn},async({path:i})=>{let a=await Bun.file(i).text(),c=s.filter((f)=>f.isNeededInFile(a));if(c.length===0)return;let{shebangLine:u,codeContent:m}=xn(a),p=c.map((f)=>f.generateCode()).join("");return{contents:u+p+m}})}}}function hn(e){if(e===!0)return Object.keys(P);if(!e)return[];return Object.entries(e).filter(([n,t])=>t&&(n in P)).map(([n])=>n)}function xn(e){if(!e.startsWith("#!"))return{shebangLine:"",codeContent:e};let n=e.indexOf(`
32
- `);return n===-1?{shebangLine:"",codeContent:e}:{shebangLine:e.slice(0,n+1),codeContent:e.slice(n+1)}}function He(e){return e.filter((n)=>n.type==="bun").map((n)=>n.plugin)}var S=new Set;async function D(e,n=process.cwd()){let t=v(e);if(!t.entry||t.entry.length===0||!t.outDir)throw new C("Nothing to build. Please make sure you have provided a proper bunup configuration or cli arguments.");if(t.clean)fe(n,t.outDir);R(t.silent);let{packageJson:r,path:s}=await Me(n);if(r&&s)l.cli(`Using package.json: ${y(s,2)}`,{muted:!0,identifier:t.name,once:`${s}:${t.name}`});let o=A(t.entry),i=r?.type,a=I(t,r),c=_(t);if(!t.dtsOnly){let u=[ve(a,c),...He(t.plugins??[])],m=t.format.flatMap((p)=>o.map((f)=>{return yn(t,n,f,p,i,u)}));await Promise.all(m)}if(t.dts||t.dtsOnly){let u=await je(n,t.preferredTsconfigPath);if(u.path)l.cli(`Using tsconfig: ${y(u.path,2)}`,{muted:!0,identifier:t.name,once:`${u.path}:${t.name}`});let m=t.format.filter((f)=>{if(f==="iife"&&!B(i)&&t.format.includes("cjs"))return!1;return!0}),p=typeof t.dts==="object"&&t.dts.entry?A(t.dts.entry):Ee(o);try{await Promise.all(p.map(async(f)=>{let T=await Te(n,f.path,t,u,r);await Promise.all(m.map(async(te)=>{let Ke=t.outputExtension?.({format:te,packageType:i,options:t,entry:f}).dts??le(te,i),F=`${n}/${t.outDir}/${f.name}${Ke}`;await Bun.write(F,T);let Ye=Bun.file(F).size||0;l.progress("DTS",y(F),z(Ye),t.name)}))}))}catch(f){throw new g(b(f))}}if(t.onBuildSuccess)await t.onBuildSuccess(t)}async function yn(e,n,t,r,s,o){let i=e.outputExtension?.({format:r,packageType:s,options:e,entry:t}).js??ue(r,s),a=await Bun.build({entrypoints:[`${n}/${t.path}`],format:r,naming:{entry:Le(t.name,i)},splitting:Ne(e.splitting,r),bytecode:Ie(e.bytecode,r),define:_e(e.define,e.shims,e.env,r),minify:ke(e),outdir:`${n}/${e.outDir}`,target:e.target,sourcemap:e.sourcemap,loader:e.loader,drop:e.drop,banner:e.banner,footer:e.footer,publicPath:e.publicPath,env:Ue(e.env),plugins:[...o,De({format:r,target:e.target,shims:e.shims})],throw:!1});if(!a.success)for(let m of a.logs){if(m.level==="error")throw new C(m.message);if(m.level==="warning")l.warn(m.message);else if(m.level==="info")l.info(m.message)}let c=`${n}/${e.outDir}/${t.name}${i}`,u=Bun.file(c).size||0;l.progress(r.toUpperCase(),y(c),z(u),e.name)}var H="0.4.62";var We="https://bunup.dev/cli-options";function d(e){return(n,t)=>{t[e]=n===!0||n==="true"}}function x(e){return(n,t)=>{if(typeof n==="string")t[e]=n;else throw new h(`Option --${e} requires a string value`)}}function ee(e){return(n,t)=>{if(typeof n==="string")t[e]=n.split(",");else throw new h(`Option --${e} requires a string value`)}}function Cn(e){return(n,t)=>{if(typeof n==="boolean")t[e]=n;else if(typeof n==="string")if(n.toLowerCase()==="true"||n.toLowerCase()==="false")t[e]=n.toLowerCase()==="true";else t[e]=n;else throw new h(`Option --${e} requires a boolean or string value`)}}function $n(){console.log(`
31
+ `}};function Fe({format:e,target:n,shims:t}){let s=Sn(t).map((o)=>ne[o]).filter((o)=>o.appliesTo(e,n));if(s.length===0)return{name:"bunup:inject-shims",setup(){}};return{name:"bunup:inject-shims",setup(o){o.onLoad({filter:Bn},async({path:i})=>{let a=await Bun.file(i).text(),c=s.filter((f)=>f.isNeededInFile(a));if(c.length===0)return;let{shebangLine:u,codeContent:m}=Tn(a),p=c.map((f)=>f.generateCode()).join("");return{contents:u+p+m}})}}}function Sn(e){if(e===!0)return Object.keys(ne);if(!e)return[];return Object.entries(e).filter(([n,t])=>t&&(n in ne)).map(([n])=>n)}function Tn(e){if(!e.startsWith("#!"))return{shebangLine:"",codeContent:e};let n=e.indexOf(`
32
+ `);return n===-1?{shebangLine:"",codeContent:e}:{shebangLine:e.slice(0,n+1),codeContent:e.slice(n+1)}}function Ge(e){return e.filter((n)=>n.type==="bun").map((n)=>n.plugin)}var E=new Set;async function W(e,n=process.cwd()){let t=H(e);if(!t.entry||t.entry.length===0||!t.outDir)throw new O("Nothing to build. Please make sure you have provided a proper bunup configuration or cli arguments.");if(t.clean)be(n,t.outDir);M(t.silent);let{packageJson:r,path:s}=await _e(n);if(r&&s)l.cli(`Using package.json: ${y(s,2)}`,{muted:!0,identifier:t.name,once:`${s}:${t.name}`});let o=R(t.entry),i=r?.type,a=_(t,r),c=N(t);if(!t.dtsOnly){let u=[qe(a,c),...Ge(t.plugins??[])],m=t.format.flatMap((p)=>o.map((f)=>{return En(t,n,f,p,i,u)}));await Promise.all(m)}if(t.dts||t.dtsOnly){let u=await Ne(n,t.preferredTsconfigPath);if(u.path)l.cli(`Using tsconfig: ${y(u.path,2)}`,{muted:!0,identifier:t.name,once:`${u.path}:${t.name}`});let m=t.format.filter((f)=>{if(f==="iife"&&!T(i)&&t.format.includes("cjs"))return!1;return!0}),p=typeof t.dts==="object"&&t.dts.entry?R(t.dts.entry):Me(o);try{await Promise.all(p.map(async(f)=>{let w=await Re(n,f.path,t,u,r);await Promise.all(m.map(async($)=>{let G=t.outputExtension?.({format:$,packageType:i,options:t,entry:f}).dts??de($,i),K=`${n}/${t.outDir}/${f.name}${G}`;await Bun.write(K,w);let Ze=Bun.file(K).size||0;l.progress("DTS",y(K),Z(Ze),t.name)}))}))}catch(f){throw new g(b(f))}}if(t.onBuildSuccess)await t.onBuildSuccess(t)}async function En(e,n,t,r,s,o){let i=e.outputExtension?.({format:r,packageType:s,options:e,entry:t}).js??pe(r,s),a=await Bun.build({entrypoints:[`${n}/${t.path}`],format:r,naming:{entry:je(t.name,i)},splitting:We(e.splitting,r),bytecode:ve(e.bytecode,r),define:He(e.define,e.shims,e.env,r),minify:Ue(e),outdir:`${n}/${e.outDir}`,target:e.target,sourcemap:e.sourcemap,loader:e.loader,drop:e.drop,banner:e.banner,footer:e.footer,publicPath:e.publicPath,env:De(e.env),plugins:[...o,Fe({format:r,target:e.target,shims:e.shims})],throw:!1});if(!a.success)for(let m of a.logs){if(m.level==="error")throw new O(m.message);if(m.level==="warning")l.warn(m.message);else if(m.level==="info")l.info(m.message)}let c=`${n}/${e.outDir}/${t.name}${i}`,u=Bun.file(c).size||0;l.progress(r.toUpperCase(),y(c),Z(u),e.name)}var D="0.4.63";var Ke="https://bunup.dev/cli-options";function d(e){return(n,t)=>{t[e]=n===!0||n==="true"}}function x(e){return(n,t)=>{if(typeof n==="string")t[e]=n;else throw new h(`Option --${e} requires a string value`)}}function te(e){return(n,t)=>{if(typeof n==="string")t[e]=n.split(",");else throw new h(`Option --${e} requires a string value`)}}function An(e){return(n,t)=>{if(typeof n==="boolean")t[e]=n;else if(typeof n==="string")if(n.toLowerCase()==="true"||n.toLowerCase()==="false")t[e]=n.toLowerCase()==="true";else t[e]=n;else throw new h(`Option --${e} requires a boolean or string value`)}}function Rn(){console.log(`
33
33
  Bunup - A blazing-fast build tool for your libraries built with Bun.
34
- `),console.log("For more information on available options, visit:"),console.log(`\x1B[36m\x1B[4m${We}\x1B[0m
35
- `),process.exit(0)}function On(){console.log(H),process.exit(0)}var qe={name:{flags:["n","name"],handler:x("name")},format:{flags:["f","format"],handler:ee("format")},outDir:{flags:["o","out-dir"],handler:x("outDir")},minify:{flags:["m","minify"],handler:d("minify")},watch:{flags:["w","watch"],handler:d("watch")},dts:{flags:["d","dts"],handler:d("dts")},banner:{flags:["bn","banner"],handler:x("banner")},footer:{flags:["ft","footer"],handler:x("footer")},external:{flags:["e","external"],handler:ee("external")},sourcemap:{flags:["sm","sourcemap"],handler:Cn("sourcemap")},target:{flags:["t","target"],handler:x("target")},minifyWhitespace:{flags:["mw","minify-whitespace"],handler:d("minifyWhitespace")},minifyIdentifiers:{flags:["mi","minify-identifiers"],handler:d("minifyIdentifiers")},minifySyntax:{flags:["ms","minify-syntax"],handler:d("minifySyntax")},clean:{flags:["c","clean"],handler:d("clean")},splitting:{flags:["s","splitting"],handler:d("splitting")},noExternal:{flags:["ne","no-external"],handler:ee("noExternal")},preferredTsconfigPath:{flags:["tsconfig","preferred-tsconfig-path"],handler:x("preferredTsconfigPath")},bytecode:{flags:["bc","bytecode"],handler:d("bytecode")},dtsOnly:{flags:["do","dts-only"],handler:d("dtsOnly")},silent:{flags:["silent"],handler:d("silent")},config:{flags:["config"],handler:x("config")},publicPath:{flags:["pp","public-path"],handler:x("publicPath")},env:{flags:["env"],handler:x("env")},shims:{flags:["shims"],handler:d("shims")},onSuccess:{flags:["onSuccess"],handler:x("onSuccess")},entry:{flags:["entry"],handler:(e,n,t)=>{if(typeof e!=="string")throw new h(`Entry${t?` --entry.${t}`:""} requires a string value`);let r=n.entry||{};if(t){if(r[t])l.warn(`Duplicate entry name '${t}' provided via --entry.${t}. Overwriting previous entry.`);r[t]=e}else{let s=U(e);if(r[s])l.warn(`Duplicate entry name '${s}' derived from '${e}'. Overwriting previous entry.`);r[s]=e}n.entry=r}},resolveDts:{flags:["rd","resolve-dts"],handler:(e,n)=>{if(!n.dts)n.dts={};if(typeof n.dts==="boolean")n.dts={};if(typeof e==="string")if(e==="true"||e==="false")n.dts.resolve=e==="true";else n.dts.resolve=e.split(",");else n.dts.resolve=!0}},help:{flags:["h","help"],handler:()=>$n()},version:{flags:["v","version"],handler:()=>On()}},W={};for(let e of Object.values(qe))for(let n of e.flags)W[n]=e.handler;function Fe(e){let n={};for(let t=0;t<e.length;t++){let r=e[t];if(r.startsWith("--")){let s,o;if(r.includes("=")){let[i,a]=r.slice(2).split("=",2);s=i,o=a}else{s=r.slice(2);let i=e[t+1];if(o=i&&!i.startsWith("-")?i:!0,typeof o==="string")t++}if(s.includes(".")){let[i,a]=s.split(".",2),c=W[i];if(c)c(o,n,a);else throw new h(`Unknown option: --${s}`)}else{let i=W[s];if(i)i(o,n);else throw new h(`Unknown option: --${s}`)}}else if(r.startsWith("-")){let s=r.slice(1),o=e[t+1],i=o&&!o.startsWith("-")?o:!0;if(typeof i==="string")t++;let a=W[s];if(a)a(i,n);else throw new h(`Unknown option: -${s}`)}else qe.entry.handler(r,n,void 0)}return n}import{loadConfig as Tn}from"coffi";import q from"node:path";import Bn from"chokidar";async function Ge(e,n){let t=new Set,r=v(e),s=A(r.entry);for(let c of s){let u=q.resolve(n,c.path),m=q.dirname(u);t.add(m)}let o=Bn.watch(Array.from(t),{persistent:!0,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50},ignoreInitial:!0,atomic:!0,ignorePermissionErrors:!0,ignored:[/[\\/]\.git[\\/]/,/[\\/]node_modules[\\/]/,q.join(n,r.outDir)]}),i=!1,a=async(c=!1)=>{if(i)return;i=!0;try{let u=performance.now();if(await D({...r,entry:s.map((m)=>m.path),clean:!1},n),!c)l.cli(`\uD83D\uDCE6 Rebuild finished in ${j(performance.now()-u)}`);await ne()}catch(u){G(u)}finally{i=!1}};o.on("change",(c)=>{let u=q.relative(n,c);l.cli(`File changed: ${u}`,{muted:!0,once:u}),a()}),o.on("error",(c)=>{throw new M(`Watcher error: ${b(c)}`)}),await a(!0)}async function En(e=Bun.argv.slice(2)){let n=Fe(e);R(n.silent);let t=process.cwd(),{config:r,filepath:s}=await Tn({name:"bunup.config",extensions:[".ts",".js",".mjs",".cjs"],maxDepth:1,preferredPath:n.config,packageJsonProperty:"bunup"}),o=!r?[{rootDir:t,options:n}]:await Re(r,t);if(l.cli(`Using bunup v${H} and bun v${Bun.version}`,{muted:!0}),s)l.cli(`Using config file: ${y(s,2)}`,{muted:!0});let i=performance.now();l.cli("Build started"),await Promise.all(o.flatMap(({options:u,rootDir:m})=>{return ce(u).map(async(f)=>{let T={...f,...Ln(n)};return An(T,m)})}));let a=performance.now()-i,c=j(a);if(l.cli(`\u26A1\uFE0F Build completed in ${c}`),await ne(),n.watch)l.cli("\uD83D\uDC40 Watching for file changes");if(n.onSuccess)l.cli(`Running command: ${n.onSuccess}`,{muted:!0}),Sn(n.onSuccess,[],{nodeOptions:{shell:!0,stdio:"inherit"}});if(!n.watch)process.exit(0)}function Ln(e){return{...e,onSuccess:void 0,config:void 0}}async function ne(){if(S.size>0)await Se(S),S.clear()}async function An(e,n){if(e.watch)await Ge(e,n);else await D(e,n)}En().catch((e)=>se(e));export{ne as validateDtsFiles};
34
+ `),console.log("For more information on available options, visit:"),console.log(`\x1B[36m\x1B[4m${Ke}\x1B[0m
35
+ `),process.exit(0)}function Mn(){console.log(D),process.exit(0)}var Ye={name:{flags:["n","name"],handler:x("name")},format:{flags:["f","format"],handler:te("format")},outDir:{flags:["o","out-dir"],handler:x("outDir")},minify:{flags:["m","minify"],handler:d("minify")},watch:{flags:["w","watch"],handler:d("watch")},dts:{flags:["d","dts"],handler:d("dts")},banner:{flags:["bn","banner"],handler:x("banner")},footer:{flags:["ft","footer"],handler:x("footer")},external:{flags:["e","external"],handler:te("external")},sourcemap:{flags:["sm","sourcemap"],handler:An("sourcemap")},target:{flags:["t","target"],handler:x("target")},minifyWhitespace:{flags:["mw","minify-whitespace"],handler:d("minifyWhitespace")},minifyIdentifiers:{flags:["mi","minify-identifiers"],handler:d("minifyIdentifiers")},minifySyntax:{flags:["ms","minify-syntax"],handler:d("minifySyntax")},clean:{flags:["c","clean"],handler:d("clean")},splitting:{flags:["s","splitting"],handler:d("splitting")},noExternal:{flags:["ne","no-external"],handler:te("noExternal")},preferredTsconfigPath:{flags:["tsconfig","preferred-tsconfig-path"],handler:x("preferredTsconfigPath")},bytecode:{flags:["bc","bytecode"],handler:d("bytecode")},dtsOnly:{flags:["do","dts-only"],handler:d("dtsOnly")},silent:{flags:["silent"],handler:d("silent")},config:{flags:["config"],handler:x("config")},publicPath:{flags:["pp","public-path"],handler:x("publicPath")},env:{flags:["env"],handler:x("env")},shims:{flags:["shims"],handler:d("shims")},onSuccess:{flags:["onSuccess"],handler:x("onSuccess")},entry:{flags:["entry"],handler:(e,n,t)=>{if(typeof e!=="string")throw new h(`Entry${t?` --entry.${t}`:""} requires a string value`);let r=n.entry||{};if(t){if(r[t])l.warn(`Duplicate entry name '${t}' provided via --entry.${t}. Overwriting previous entry.`);r[t]=e}else{let s=v(e);if(r[s])l.warn(`Duplicate entry name '${s}' derived from '${e}'. Overwriting previous entry.`);r[s]=e}n.entry=r}},resolveDts:{flags:["rd","resolve-dts"],handler:(e,n)=>{if(!n.dts)n.dts={};if(typeof n.dts==="boolean")n.dts={};if(typeof e==="string")if(e==="true"||e==="false")n.dts.resolve=e==="true";else n.dts.resolve=e.split(",");else n.dts.resolve=!0}},help:{flags:["h","help"],handler:()=>Rn()},version:{flags:["v","version"],handler:()=>Mn()}},q={};for(let e of Object.values(Ye))for(let n of e.flags)q[n]=e.handler;function ze(e){let n={};for(let t=0;t<e.length;t++){let r=e[t];if(r.startsWith("--")){let s,o;if(r.includes("=")){let[i,a]=r.slice(2).split("=",2);s=i,o=a}else{s=r.slice(2);let i=e[t+1];if(o=i&&!i.startsWith("-")?i:!0,typeof o==="string")t++}if(s.includes(".")){let[i,a]=s.split(".",2),c=q[i];if(c)c(o,n,a);else throw new h(`Unknown option: --${s}`)}else{let i=q[s];if(i)i(o,n);else throw new h(`Unknown option: --${s}`)}}else if(r.startsWith("-")){let s=r.slice(1),o=e[t+1],i=o&&!o.startsWith("-")?o:!0;if(typeof i==="string")t++;let a=q[s];if(a)a(i,n);else throw new h(`Unknown option: -${s}`)}else Ye.entry.handler(r,n,void 0)}return n}import{loadConfig as In}from"coffi";import F from"node:path";import jn from"chokidar";async function Qe(e,n){let t=new Set,r=H(e),s=R(r.entry);for(let c of s){let u=F.resolve(n,c.path),m=F.dirname(u);t.add(m)}let o=jn.watch(Array.from(t),{persistent:!0,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50},ignoreInitial:!0,atomic:!0,ignorePermissionErrors:!0,ignored:[/[\\/]\.git[\\/]/,/[\\/]node_modules[\\/]/,F.join(n,r.outDir)]}),i=!1,a=async(c=!1)=>{if(i)return;i=!0;try{let u=performance.now();if(await W({...r,entry:s.map((m)=>m.path),clean:!1},n),!c)l.cli(`\uD83D\uDCE6 Rebuild finished in ${k(performance.now()-u)}`);await re()}catch(u){Y(u)}finally{i=!1}};o.on("change",(c)=>{let u=F.relative(n,c);l.cli(`File changed: ${u}`,{muted:!0,once:u}),a()}),o.on("error",(c)=>{throw new j(`Watcher error: ${b(c)}`)}),await a(!0)}async function _n(e=Bun.argv.slice(2)){let n=ze(e);M(n.silent);let t=process.cwd(),{config:r,filepath:s}=await In({name:"bunup.config",extensions:[".ts",".js",".mjs",".cjs"],maxDepth:1,preferredPath:n.config,packageJsonProperty:"bunup"}),o=!r?[{rootDir:t,options:n}]:await Ie(r,t);if(l.cli(`Using bunup v${D} and bun v${Bun.version}`,{muted:!0}),s)l.cli(`Using config file: ${y(s,2)}`,{muted:!0});let i=performance.now();l.cli("Build started"),await Promise.all(o.flatMap(({options:u,rootDir:m})=>{return fe(u).map(async(f)=>{let w={...f,...Nn(n)};return Un(w,m)})}));let a=performance.now()-i,c=k(a);if(l.cli(`\u26A1\uFE0F Build completed in ${c}`),await re(),n.watch)l.cli("\uD83D\uDC40 Watching for file changes");if(n.onSuccess)l.cli(`Running command: ${n.onSuccess}`,{muted:!0}),kn(n.onSuccess,[],{nodeOptions:{shell:!0,stdio:"inherit"}});if(!n.watch)process.exit(0)}function Nn(e){return{...e,onSuccess:void 0,config:void 0}}async function re(){if(E.size>0)await Ae(E),E.clear()}async function Un(e,n){if(e.watch)await Qe(e,n);else await W(e,n)}_n().catch((e)=>ce(e));export{re as validateDtsFiles};
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- var Qe=require("node:module");var He=Object.create;var{getPrototypeOf:Fe,defineProperty:C,getOwnPropertyNames:z,getOwnPropertyDescriptor:Ge}=Object,X=Object.prototype.hasOwnProperty;var $=(e,r,n)=>{n=e!=null?He(Fe(e)):{};let t=r||!e||!e.__esModule?C(n,"default",{value:e,enumerable:!0}):n;for(let s of z(e))if(!X.call(t,s))C(t,s,{get:()=>e[s],enumerable:!0});return t},Z=new WeakMap,Ke=(e)=>{var r=Z.get(e),n;if(r)return r;if(r=C({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function")z(e).map((t)=>!X.call(r,t)&&C(r,t,{get:()=>e[t],enumerable:!(n=Ge(e,t))||n.enumerable}));return Z.set(e,r),r};var Ye=(e,r)=>{for(var n in r)C(e,n,{get:r[n],enumerable:!0,configurable:!0,set:(t)=>r[n]=()=>t})};var ar={};Ye(ar,{defineWorkspace:()=>J,defineConfig:()=>V,build:()=>ke});module.exports=Ke(ar);function V(e){return e}function J(e){return e}var de=require("rolldown"),xe=require("rolldown-plugin-dts");var v=!1;function P(e){v=e??!1}class b{static instance;loggedOnceMessages=new Set;MAX_LABEL_LENGTH=3;MAX_MESSAGE_LENGTH=25;colors={cli:"147",muted:"245",info:"117",warn:"179",error:"174",progress:{ESM:"172",CJS:"108",IIFE:"146",DTS:"110"},default:"252",size:"65"};labels={cli:"CLI",info:"INFO",warn:"WARN",error:"ERROR"};constructor(){}static getInstance(){if(!b.instance)b.instance=new b;return b.instance}dispose(){this.loggedOnceMessages.clear()}shouldLog(e){if(!e?.once)return!0;if(this.loggedOnceMessages.has(e.once))return!1;return this.loggedOnceMessages.add(e.once),!0}formatMessage({colorCode:e,label:r,message:n,size:t,identifier:s,muted:i}){let o=" ".repeat(Math.max(0,this.MAX_LABEL_LENGTH-r.length)),a=i?`\x1B[38;5;${this.colors.muted}m${n}\x1B[0m`:n;if(t){let[c,...m]=a.split(" "),p=" ".repeat(Math.max(0,this.MAX_MESSAGE_LENGTH-c.length)),g=s?` \x1B[48;5;${e};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${e}m${r}\x1B[0m ${o}${c}${p} \x1B[38;5;${this.colors.size}m${t}\x1B[0m ${m.join(" ")}${g}`}let u=s?` \x1B[48;5;${e};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${e}m${r}\x1B[0m ${o}${a}${u}`}output(e,r={},n=console.log){if(v)return;if(!this.shouldLog(r))return;if(r.verticalSpace)console.log("");if(n(e),r.verticalSpace)console.log("")}cli(e,r={}){let n=this.formatMessage({colorCode:this.colors.cli,label:this.labels.cli,message:e,identifier:r.identifier,muted:r.muted});this.output(n,r)}info(e,r={}){let n=this.formatMessage({colorCode:this.colors.info,label:this.labels.info,message:e,identifier:r.identifier,muted:r.muted});this.output(n,r)}warn(e,r={}){let n=this.formatMessage({colorCode:this.colors.warn,label:this.labels.warn,message:e,identifier:r.identifier,muted:r.muted});this.output(n,r,console.warn)}error(e,r={}){let n=this.formatMessage({colorCode:this.colors.error,label:this.labels.error,message:e,identifier:r.identifier,muted:r.muted});this.output(n,r,console.error)}progress(e,r,n,t){let s=String(e),i=this.colors.default,o,a,u={};if(typeof n==="string")o=n,a=t;else if(n)o=n.size,a=n.identifier,u=n;for(let[m,p]of Object.entries(this.colors.progress))if(s.includes(m)){i=p;break}let c=this.formatMessage({colorCode:i,label:s,message:r,size:o,identifier:a,muted:u.muted});this.output(c,u)}}var f=b.getInstance();class j extends Error{constructor(e){super(e);this.name="BunupError"}}class h extends j{constructor(e){super(e);this.name="BunupBuildError"}}class l extends j{constructor(e){super(e);this.name="BunupDTSBuildError"}}var d=(e)=>{if(e instanceof Error)return e.message;return String(e)};var N=$(require("node:fs/promises")),ee=$(require("node:path"));function D(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function re(e=8){let r="";while(r.length<e)r+=Math.random().toString(36).substring(2);return r.substring(0,e)}function ne(e,r){switch(e){case"esm":return y(r)?".js":".mjs";case"cjs":return y(r)?".cjs":".js";case"iife":return".global.js"}}function te(e,r){switch(e){case"esm":return y(r)?".d.ts":".d.mts";case"cjs":return y(r)?".d.cts":".d.ts";case"iife":return".d.ts"}}function _(e){return e==="node"||e==="bun"}function y(e){return e==="module"}function se(e){if(!e)return[];return Array.from(new Set([...Object.keys(e.dependencies||{}),...Object.keys(e.peerDependencies||{})]))}function W(e){if(e===0)return"0 B";let r=["B","KB","MB","GB"],n=Math.floor(Math.log(e)/Math.log(1024));if(n===0)return`${e} ${r[n]}`;return`${(e/1024**n).toFixed(2)} ${r[n]}`}function w(e,r=3){return e.split("/").slice(-r).join("/")}async function oe(e,r){let n=ee.default.join(e,r);try{await N.default.rm(n,{recursive:!0,force:!0})}catch(t){throw new h(`Failed to clean output directory: ${t}`)}await N.default.mkdir(n,{recursive:!0})}function S(e){return[".ts",".mts",".cts",".tsx"].some((r)=>e.endsWith(r))}function ie(e){return e.map((r)=>typeof r==="string"?new RegExp(`^${D(r)}($|\\/|\\\\)`):r)}function T(e,r){return ie(e.external||[]).concat(se(r).map((n)=>new RegExp(`^${D(n)}($|\\/|\\\\)`)))}function R(e){return ie(e.noExternal||[])}var H=$(require("node:path")),pe=require("oxc-resolver");var ae=require("ts-import-resolver");var B="\x00dts:",ue=(e,r,n)=>{return{name:"bunup:virtual-dts",async resolveId(t,s){if(k(t))return t;if(!s||!k(s))return null;let i=r.tsconfig?ae.resolveTsImportPath({path:t,importer:E(s),tsconfig:r.tsconfig,rootDir:n}):null;if(!i)return null;let o=x(i);if(e.has(o))return O(o);return null},load(t){if(t.startsWith(B)){let s=E(t),i=e.get(s);if(i)return ce.add(s),i}return null}}};var U=/\.(js|mjs|cjs|ts|mts|cts|tsx|jsx)$/;function me(e){return e.endsWith(".d.ts")||e.endsWith(".d.mts")||e.endsWith(".d.cts")}function ge(e){return U.test(e)&&!me(e)}function x(e){if(me(e))return e;if(e.endsWith(".mts"))return`${e.slice(0,-4)}.d.mts`;if(e.endsWith(".cts"))return`${e.slice(0,-4)}.d.cts`;if(U.test(e))return e.replace(U,".d.ts");return`${e}.d.ts`}function k(e){return e.startsWith(B)}function E(e){return e.replace(B,"")}function O(e){return`${B}${e}`}function fe(e,r,n,t){if(typeof t==="boolean"&&t)return!1;if(Array.isArray(t)){for(let s of t)if(typeof s==="string"&&e===s)return!1;else if(s instanceof RegExp&&s.test(e))return!1}return r.some((s)=>s.test(e))&&!n.some((s)=>s.test(e))}var q;function le(e,r){return{name:"bunup:types-resolve",buildStart(){q||=new pe.ResolverFactory({mainFields:["types","typings","module","main"],conditionNames:["types","typings","import","require"],extensions:[".d.ts",".d.mts",".d.cts",".ts",".mts",".cts"],...e.path&&{tsconfig:{configFile:e.path}},modules:["node_modules","node_modules/@types"]})},async resolveId(n,t){if(r===!1)return;if(n==="bun")return;let s=t?E(t):void 0;if(/\0/.test(n))return;if(Array.isArray(r)){if(!r.some((u)=>typeof u==="string"?u===n:u.test(n)))return}let i=s?H.default.dirname(s):process.cwd(),{path:o}=await q.async(i,n);if(!o)return;if(ge(o)){let a=x(o);try{let{path:u}=await q.async(H.default.dirname(o),a);if(u)return u}catch(u){}return}return o}}}async function be(e,r,n,t,s,i){let o=x(e),a=O(o),u=T(n,t),c=R(n),m=typeof n.dts==="object"&&"resolve"in n.dts?n.dts.resolve:void 0;try{let{output:p}=await de.build({input:a,output:{dir:n.outDir},write:!1,...s.path&&{resolve:{tsconfigFilename:s.path}},onwarn(g,A){if(["UNRESOLVED_IMPORT","CIRCULAR_DEPENDENCY","EMPTY_BUNDLE"].includes(g.code??""))return;A(g)},plugins:[ue(r,s,i),m&&le(s,m),xe.dts({dtsInput:!0,emitDtsOnly:!0})],external:(g)=>fe(g,u,c,m)});if(!p[0]?.code)return f.warn(`Generated empty declaration file for entry "${e}"`,{muted:!0}),"";return p[0].code}catch(p){throw new l(`DTS bundling failed for entry "${e}": ${d(p)}`)}}var he=require("ts-import-resolver");var Ze=/^\s*import\s+(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]/gm,ze=/^\s*export\s+.*from\s+['"]([^'"]+)['"]/gm,Xe=/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Ve=/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Je=/import\s+\w+\s*=\s*require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,ve=/\/\/\/\s*<reference\s+path\s*=\s*['"]([^'"]+)['"]\s*\/>/g,Pe=/\/\/\/\s*<reference\s+types\s*=\s*['"]([^'"]+)['"]\s*\/>/g;function er(e){let r=new Set,n=[Ze,ze,Xe,Ve,Je,ve,Pe];for(let t of n){let s=e.matchAll(t);for(let i of s)if(i[1])r.add(i[1])}return r}async function ye(e,r,n){let t=new Set([e]),s=[e];while(s.length){let i=s.pop();if(!i)continue;try{let o=await Bun.file(i).text(),a=er(o);for(let u of a){let c=r.tsconfig?he.resolveTsImportPath({path:u,importer:i,tsconfig:r.tsconfig,rootDir:n}):null;if(!c)continue;if(!t.has(c))t.add(c),s.push(c)}}catch(o){f.warn(`Error processing ${i}: ${d(o)}`)}}return t}var we=require("oxc-transform");async function Ce(e){let r=new Map;return await Promise.all([...e].map(async(n)=>{try{let t=x(n);if(!await Bun.file(n).exists())return;let i=await Bun.file(n).text(),{code:o}=we.isolatedDeclaration(n,i);if(o)r.set(t,o)}catch(t){f.warn(`Failed to generate declaration for ${n}: ${d(t)}`)}})),r}var F=$(require("node:fs/promises")),L=$(require("node:path")),rr=require("oxc-transform");async function $e(e,r){let n=L.default.resolve(e),t=L.default.resolve(n,r);if(!await F.default.exists(n))throw new l(`Root directory does not exist: ${n}`);if(!await Bun.file(t).exists())throw new l(`Entry file does not exist: ${t}`);if(!S(t))throw new l(`Entry file must be a TypeScript file: ${t}`);if(L.default.relative(n,t).startsWith(".."))throw new l(`Entry file must be within rootDir: ${t}`);return{absoluteRootDir:n,absoluteEntry:t}}async function Ee(e,r,n,t,s){let{absoluteEntry:i}=await $e(e,r),o=await ye(i,t,e),a=await Ce(o);return be(i,a,n,s,t,e)}var M=require("node:path");function Be(e){let r=M.basename(e),n=M.extname(r);return n?r.slice(0,-n.length):r}function G(e,{warnOnConflict:r=!0}={}){let n=[],t=new Set,s={};function i(o,a){if(t.has(o)){let u=re(),c=`${o}_${u}`;if(r)f.warn(`Output name conflict: "${o}" is used by multiple files.
1
+ var Ke=require("node:module");var Ue=Object.create;var{getPrototypeOf:qe,defineProperty:B,getOwnPropertyNames:X,getOwnPropertyDescriptor:He}=Object,V=Object.prototype.hasOwnProperty;var h=(e,r,n)=>{n=e!=null?Ue(qe(e)):{};let t=r||!e||!e.__esModule?B(n,"default",{value:e,enumerable:!0}):n;for(let s of X(e))if(!V.call(t,s))B(t,s,{get:()=>e[s],enumerable:!0});return t},z=new WeakMap,Fe=(e)=>{var r=z.get(e),n;if(r)return r;if(r=B({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function")X(e).map((t)=>!V.call(r,t)&&B(r,t,{get:()=>e[t],enumerable:!(n=He(e,t))||n.enumerable}));return z.set(e,r),r};var Ge=(e,r)=>{for(var n in r)B(e,n,{get:r[n],enumerable:!0,configurable:!0,set:(t)=>r[n]=()=>t})};var ar={};Ge(ar,{defineWorkspace:()=>v,defineConfig:()=>J,build:()=>We});module.exports=Fe(ar);function J(e){return e}function v(e){return e}var P=!1;function ee(e){P=e??!1}class w{static instance;loggedOnceMessages=new Set;MAX_LABEL_LENGTH=3;MAX_MESSAGE_LENGTH=25;colors={cli:"147",muted:"245",info:"117",warn:"179",error:"174",progress:{ESM:"172",CJS:"108",IIFE:"146",DTS:"110"},default:"252",size:"65"};labels={cli:"CLI",info:"INFO",warn:"WARN",error:"ERROR"};constructor(){}static getInstance(){if(!w.instance)w.instance=new w;return w.instance}dispose(){this.loggedOnceMessages.clear()}shouldLog(e){if(!e?.once)return!0;if(this.loggedOnceMessages.has(e.once))return!1;return this.loggedOnceMessages.add(e.once),!0}formatMessage({colorCode:e,label:r,message:n,size:t,identifier:s,muted:i}){let o=" ".repeat(Math.max(0,this.MAX_LABEL_LENGTH-r.length)),a=i?`\x1B[38;5;${this.colors.muted}m${n}\x1B[0m`:n;if(t){let[c,...g]=a.split(" "),p=" ".repeat(Math.max(0,this.MAX_MESSAGE_LENGTH-c.length)),m=s?` \x1B[48;5;${e};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${e}m${r}\x1B[0m ${o}${c}${p} \x1B[38;5;${this.colors.size}m${t}\x1B[0m ${g.join(" ")}${m}`}let u=s?` \x1B[48;5;${e};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${e}m${r}\x1B[0m ${o}${a}${u}`}output(e,r={},n=console.log){if(P)return;if(!this.shouldLog(r))return;if(r.verticalSpace)console.log("");if(n(e),r.verticalSpace)console.log("")}cli(e,r={}){let n=this.formatMessage({colorCode:this.colors.cli,label:this.labels.cli,message:e,identifier:r.identifier,muted:r.muted});this.output(n,r)}info(e,r={}){let n=this.formatMessage({colorCode:this.colors.info,label:this.labels.info,message:e,identifier:r.identifier,muted:r.muted});this.output(n,r)}warn(e,r={}){let n=this.formatMessage({colorCode:this.colors.warn,label:this.labels.warn,message:e,identifier:r.identifier,muted:r.muted});this.output(n,r,console.warn)}error(e,r={}){let n=this.formatMessage({colorCode:this.colors.error,label:this.labels.error,message:e,identifier:r.identifier,muted:r.muted});this.output(n,r,console.error)}progress(e,r,n,t){let s=String(e),i=this.colors.default,o,a,u={};if(typeof n==="string")o=n,a=t;else if(n)o=n.size,a=n.identifier,u=n;for(let[g,p]of Object.entries(this.colors.progress))if(s.includes(g)){i=p;break}let c=this.formatMessage({colorCode:i,label:s,message:r,size:o,identifier:a,muted:u.muted});this.output(c,u)}}var f=w.getInstance();class _ extends Error{constructor(e){super(e);this.name="BunupError"}}class C extends _{constructor(e){super(e);this.name="BunupBuildError"}}class l extends _{constructor(e){super(e);this.name="BunupDTSBuildError"}}var d=(e)=>{if(e instanceof Error)return e.message;return String(e)};var D=h(require("node:fs/promises")),re=h(require("node:path"));function W(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ne(e=8){let r="";while(r.length<e)r+=Math.random().toString(36).substring(2);return r.substring(0,e)}function te(e,r){switch(e){case"esm":return $(r)?".js":".mjs";case"cjs":return $(r)?".cjs":".js";case"iife":return".global.js"}}function se(e,r){switch(e){case"esm":return $(r)?".d.ts":".d.mts";case"cjs":return $(r)?".d.cts":".d.ts";case"iife":return".d.ts"}}function k(e){return e==="node"||e==="bun"}function $(e){return e==="module"}function oe(e){if(!e)return[];return Array.from(new Set([...Object.keys(e.dependencies||{}),...Object.keys(e.peerDependencies||{})]))}function U(e){if(e===0)return"0 B";let r=["B","KB","MB","GB"],n=Math.floor(Math.log(e)/Math.log(1024));if(n===0)return`${e} ${r[n]}`;return`${(e/1024**n).toFixed(2)} ${r[n]}`}function E(e,r=3){return e.split("/").slice(-r).join("/")}async function ie(e,r){let n=re.default.join(e,r);try{await D.default.rm(n,{recursive:!0,force:!0})}catch(t){throw new C(`Failed to clean output directory: ${t}`)}await D.default.mkdir(n,{recursive:!0})}function R(e){return[".ts",".mts",".cts",".tsx"].some((r)=>e.endsWith(r))}function ae(e){return e.map((r)=>typeof r==="string"?new RegExp(`^${W(r)}($|\\/|\\\\)`):r)}function O(e,r){return ae(e.external||[]).concat(oe(r).map((n)=>new RegExp(`^${W(n)}($|\\/|\\\\)`)))}function L(e){return ae(e.noExternal||[])}var G=h(require("node:path")),le=require("oxc-resolver");var ue=require("ts-import-resolver");var T="\x00dts:",ce=(e,r,n)=>{return{name:"bunup:virtual-dts",async resolveId(t,s){if(q(t))return t;if(!s||!q(s))return null;let i=r.tsconfig?ue.resolveTsImportPath({path:t,importer:S(s),tsconfig:r.tsconfig,rootDir:n}):null;if(!i)return null;let o=x(i);if(e.has(o))return M(o);return null},load(t){if(t.startsWith(T)){let s=S(t),i=e.get(s);if(i)return me.add(s),i}return null}}};var H=/\.(js|mjs|cjs|ts|mts|cts|tsx|jsx)$/;function ge(e){return e.endsWith(".d.ts")||e.endsWith(".d.mts")||e.endsWith(".d.cts")}function fe(e){return H.test(e)&&!ge(e)}function x(e){if(ge(e))return e;if(e.endsWith(".mts"))return`${e.slice(0,-4)}.d.mts`;if(e.endsWith(".cts"))return`${e.slice(0,-4)}.d.cts`;if(H.test(e))return e.replace(H,".d.ts");return`${e}.d.ts`}function q(e){return e.startsWith(T)}function S(e){return e.replace(T,"")}function M(e){return`${T}${e}`}function pe(e,r,n,t){if(typeof t==="boolean"&&t)return!1;if(Array.isArray(t)){for(let s of t)if(typeof s==="string"&&e===s)return!1;else if(s instanceof RegExp&&s.test(e))return!1}return r.some((s)=>s.test(e))&&!n.some((s)=>s.test(e))}var F;function de(e,r){return{name:"bunup:types-resolve",buildStart(){F||=new le.ResolverFactory({mainFields:["types","typings","module","main"],conditionNames:["types","typings","import","require"],extensions:[".d.ts",".d.mts",".d.cts",".ts",".mts",".cts"],...e.path&&{tsconfig:{configFile:e.path}},modules:["node_modules","node_modules/@types"]})},async resolveId(n,t){if(r===!1)return;if(n==="bun")return;let s=t?S(t):void 0;if(/\0/.test(n))return;if(Array.isArray(r)){if(!r.some((u)=>typeof u==="string"?u===n:u.test(n)))return}let i=s?G.default.dirname(s):process.cwd(),{path:o}=await F.async(i,n);if(!o)return;if(fe(o)){let a=x(o);try{let{path:u}=await F.async(G.default.dirname(o),a);if(u)return u}catch(u){}return}return o}}}var Ye=import("rolldown"),Qe=import("rolldown-plugin-dts");async function xe(e,r,n,t,s,i){let o=(await Ye).build,a=(await Qe).dts,u=x(e),c=M(u),g=O(n,t),p=L(n),m=typeof n.dts==="object"&&"resolve"in n.dts?n.dts.resolve:void 0;try{let{output:y}=await o({input:c,output:{dir:n.outDir},write:!1,...s.path&&{resolve:{tsconfigFilename:s.path}},onwarn(b,j){if(["UNRESOLVED_IMPORT","CIRCULAR_DEPENDENCY","EMPTY_BUNDLE"].includes(b.code??""))return;j(b)},plugins:[ce(r,s,i),m&&de(s,m),a({dtsInput:!0,emitDtsOnly:!0})],external:(b)=>pe(b,g,p,m)});if(!y[0]?.code)return f.warn(`Generated empty declaration file for entry "${e}"`,{muted:!0}),"";return y[0].code}catch(y){throw new l(`DTS bundling failed for entry "${e}": ${d(y)}`)}}var be=require("ts-import-resolver");var Ze=/^\s*import\s+(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]/gm,ze=/^\s*export\s+.*from\s+['"]([^'"]+)['"]/gm,Xe=/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Ve=/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Je=/import\s+\w+\s*=\s*require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,ve=/\/\/\/\s*<reference\s+path\s*=\s*['"]([^'"]+)['"]\s*\/>/g,Pe=/\/\/\/\s*<reference\s+types\s*=\s*['"]([^'"]+)['"]\s*\/>/g;function er(e){let r=new Set,n=[Ze,ze,Xe,Ve,Je,ve,Pe];for(let t of n){let s=e.matchAll(t);for(let i of s)if(i[1])r.add(i[1])}return r}async function he(e,r,n){let t=new Set([e]),s=[e];while(s.length){let i=s.pop();if(!i)continue;try{let o=await Bun.file(i).text(),a=er(o);for(let u of a){let c=r.tsconfig?be.resolveTsImportPath({path:u,importer:i,tsconfig:r.tsconfig,rootDir:n}):null;if(!c)continue;if(!t.has(c))t.add(c),s.push(c)}}catch(o){f.warn(`Error processing ${i}: ${d(o)}`)}}return t}var ye=require("oxc-transform");async function we(e){let r=new Map;return await Promise.all([...e].map(async(n)=>{try{let t=x(n);if(!await Bun.file(n).exists())return;let i=await Bun.file(n).text(),{code:o}=ye.isolatedDeclaration(n,i);if(o)r.set(t,o)}catch(t){f.warn(`Failed to generate declaration for ${n}: ${d(t)}`)}})),r}var K=h(require("node:fs/promises")),A=h(require("node:path")),rr=require("oxc-transform");async function Ce(e,r){let n=A.default.resolve(e),t=A.default.resolve(n,r);if(!await K.default.exists(n))throw new l(`Root directory does not exist: ${n}`);if(!await Bun.file(t).exists())throw new l(`Entry file does not exist: ${t}`);if(!R(t))throw new l(`Entry file must be a TypeScript file: ${t}`);if(A.default.relative(n,t).startsWith(".."))throw new l(`Entry file must be within rootDir: ${t}`);return{absoluteRootDir:n,absoluteEntry:t}}async function $e(e,r,n,t,s){let{absoluteEntry:i}=await Ce(e,r),o=await he(i,t,e),a=await we(o);return xe(i,a,n,s,t,e)}var I=require("node:path");function Ee(e){let r=I.basename(e),n=I.extname(r);return n?r.slice(0,-n.length):r}function Y(e,{warnOnConflict:r=!0}={}){let n=[],t=new Set,s={};function i(o,a){if(t.has(o)){let u=ne(),c=`${o}_${u}`;if(r)f.warn(`Output name conflict: "${o}" is used by multiple files.
2
2
  Bunup uses filenames without extensions as output names by default.
3
3
 
4
4
  ${s[o]} -> ${o}.js
@@ -12,15 +12,15 @@ To fix this, use named entries in your configuration:
12
12
  }
13
13
  }
14
14
 
15
- See: https://bunup.dev/documentation/#named-entries`,{muted:!0,verticalSpace:!0});n.push({name:c,path:a})}else n.push({name:o,path:a}),t.add(o),s[o]=a}if(Array.isArray(e))for(let o of e){let a=Be(o);i(a,o)}else if(typeof e==="object")for(let[o,a]of Object.entries(e))i(o,a);else{let o=Be(e);i(o,e)}return n}function Se(e){return e.filter((r)=>S(r.path))}function Te(e,r){return`[dir]/${e}${r}`}var K=require("coffi");async function Re(e){let{config:r,filepath:n}=await K.loadConfig({name:"package",cwd:e,extensions:[".json"],maxDepth:3});return{packageJson:r,path:n}}async function Oe(e,r){let{config:n,filepath:t}=await K.loadConfig({name:"tsconfig",cwd:e,extensions:[".json"],preferredPath:r,maxDepth:3});return{tsconfig:n,path:t}}var nr={entry:[],format:["cjs"],outDir:"dist",target:"node",clean:!0};function Le(e){return{...nr,...e}}function Me(e){let{minify:r,minifyWhitespace:n,minifyIdentifiers:t,minifySyntax:s}=e,i=r===!0;return{whitespace:n??i,identifiers:t??i,syntax:s??i}}function Ae(e,r){return r==="cjs"?e:void 0}function Ie(e,r,n,t){return{...typeof n==="object"&&Object.keys(n).reduce((s,i)=>{let o=JSON.stringify(n[i]);return s[`process.env.${i}`]=o,s[`import.meta.env.${i}`]=o,s},{}),...e,...t==="cjs"&&(r===!0||typeof r==="object"&&r.importMetaUrl)&&{"import.meta.url":"importMetaUrl"}}}function je(e,r){return e===void 0?r==="esm":e}function Ne(e){return typeof e==="string"?e:void 0}function De(e,r){return{name:"bunup:external-plugin",setup(n){n.onResolve({filter:/.*/},(t)=>{let s=t.path;if(e.some((o)=>o.test(s))&&!r.some((o)=>o.test(s)))return{path:s,external:!0};return null})}}}var tr=/\.(js|ts|jsx|tsx|mts|cts)$/,Y={dirnameFilename:{appliesTo:(e,r)=>e==="esm"&&_(r),isNeededInFile:(e)=>/\b__dirname\b/.test(e)||/\b__filename\b/.test(e),generateCode:()=>`import { fileURLToPath } from 'url';
15
+ See: https://bunup.dev/documentation/#named-entries`,{muted:!0,verticalSpace:!0});n.push({name:c,path:a})}else n.push({name:o,path:a}),t.add(o),s[o]=a}if(Array.isArray(e))for(let o of e){let a=Ee(o);i(a,o)}else if(typeof e==="object")for(let[o,a]of Object.entries(e))i(o,a);else{let o=Ee(e);i(o,e)}return n}function Be(e){return e.filter((r)=>R(r.path))}function Se(e,r){return`[dir]/${e}${r}`}var Q=require("coffi");async function Te(e){let{config:r,filepath:n}=await Q.loadConfig({name:"package",cwd:e,extensions:[".json"],maxDepth:3});return{packageJson:r,path:n}}async function Re(e,r){let{config:n,filepath:t}=await Q.loadConfig({name:"tsconfig",cwd:e,extensions:[".json"],preferredPath:r,maxDepth:3});return{tsconfig:n,path:t}}var nr={entry:[],format:["cjs"],outDir:"dist",target:"node",clean:!0};function Oe(e){return{...nr,...e}}function Le(e){let{minify:r,minifyWhitespace:n,minifyIdentifiers:t,minifySyntax:s}=e,i=r===!0;return{whitespace:n??i,identifiers:t??i,syntax:s??i}}function Me(e,r){return r==="cjs"?e:void 0}function Ae(e,r,n,t){return{...typeof n==="object"&&Object.keys(n).reduce((s,i)=>{let o=JSON.stringify(n[i]);return s[`process.env.${i}`]=o,s[`import.meta.env.${i}`]=o,s},{}),...e,...t==="cjs"&&(r===!0||typeof r==="object"&&r.importMetaUrl)&&{"import.meta.url":"importMetaUrl"}}}function Ie(e,r){return e===void 0?r==="esm":e}function je(e){return typeof e==="string"?e:void 0}function Ne(e,r){return{name:"bunup:external-plugin",setup(n){n.onResolve({filter:/.*/},(t)=>{let s=t.path;if(e.some((o)=>o.test(s))&&!r.some((o)=>o.test(s)))return{path:s,external:!0};return null})}}}var tr=/\.(js|ts|jsx|tsx|mts|cts)$/,Z={dirnameFilename:{appliesTo:(e,r)=>e==="esm"&&k(r),isNeededInFile:(e)=>/\b__dirname\b/.test(e)||/\b__filename\b/.test(e),generateCode:()=>`import { fileURLToPath } from 'url';
16
16
  import { dirname } from 'path';
17
17
 
18
18
  const __filename = fileURLToPath(import.meta.url);
19
19
  const __dirname = dirname(__filename);
20
20
 
21
- `},importMetaUrl:{appliesTo:(e,r)=>e==="cjs"&&_(r),isNeededInFile:(e)=>/\bimport\.meta\.url\b/.test(e),generateCode:()=>`import { pathToFileURL } from 'url';
21
+ `},importMetaUrl:{appliesTo:(e,r)=>e==="cjs"&&k(r),isNeededInFile:(e)=>/\bimport\.meta\.url\b/.test(e),generateCode:()=>`import { pathToFileURL } from 'url';
22
22
 
23
23
  const importMetaUrl = pathToFileURL(__filename).href;
24
24
 
25
- `}};function _e({format:e,target:r,shims:n}){let s=sr(n).map((i)=>Y[i]).filter((i)=>i.appliesTo(e,r));if(s.length===0)return{name:"bunup:inject-shims",setup(){}};return{name:"bunup:inject-shims",setup(i){i.onLoad({filter:tr},async({path:o})=>{let a=await Bun.file(o).text(),u=s.filter((g)=>g.isNeededInFile(a));if(u.length===0)return;let{shebangLine:c,codeContent:m}=or(a),p=u.map((g)=>g.generateCode()).join("");return{contents:c+p+m}})}}}function sr(e){if(e===!0)return Object.keys(Y);if(!e)return[];return Object.entries(e).filter(([r,n])=>n&&(r in Y)).map(([r])=>r)}function or(e){if(!e.startsWith("#!"))return{shebangLine:"",codeContent:e};let r=e.indexOf(`
26
- `);return r===-1?{shebangLine:"",codeContent:e}:{shebangLine:e.slice(0,r+1),codeContent:e.slice(r+1)}}function We(e){return e.filter((r)=>r.type==="bun").map((r)=>r.plugin)}var ce=new Set;async function ke(e,r=process.cwd()){let n=Le(e);if(!n.entry||n.entry.length===0||!n.outDir)throw new h("Nothing to build. Please make sure you have provided a proper bunup configuration or cli arguments.");if(n.clean)oe(r,n.outDir);P(n.silent);let{packageJson:t,path:s}=await Re(r);if(t&&s)f.cli(`Using package.json: ${w(s,2)}`,{muted:!0,identifier:n.name,once:`${s}:${n.name}`});let i=G(n.entry),o=t?.type,a=T(n,t),u=R(n);if(!n.dtsOnly){let c=[De(a,u),...We(n.plugins??[])],m=n.format.flatMap((p)=>i.map((g)=>{return ir(n,r,g,p,o,c)}));await Promise.all(m)}if(n.dts||n.dtsOnly){let c=await Oe(r,n.preferredTsconfigPath);if(c.path)f.cli(`Using tsconfig: ${w(c.path,2)}`,{muted:!0,identifier:n.name,once:`${c.path}:${n.name}`});let m=n.format.filter((g)=>{if(g==="iife"&&!y(o)&&n.format.includes("cjs"))return!1;return!0}),p=typeof n.dts==="object"&&n.dts.entry?G(n.dts.entry):Se(i);try{await Promise.all(p.map(async(g)=>{let A=await Ee(r,g.path,n,c,t);await Promise.all(m.map(async(Q)=>{let Ue=n.outputExtension?.({format:Q,packageType:o,options:n,entry:g}).dts??te(Q,o),I=`${r}/${n.outDir}/${g.name}${Ue}`;await Bun.write(I,A);let qe=Bun.file(I).size||0;f.progress("DTS",w(I),W(qe),n.name)}))}))}catch(g){throw new l(d(g))}}if(n.onBuildSuccess)await n.onBuildSuccess(n)}async function ir(e,r,n,t,s,i){let o=e.outputExtension?.({format:t,packageType:s,options:e,entry:n}).js??ne(t,s),a=await Bun.build({entrypoints:[`${r}/${n.path}`],format:t,naming:{entry:Te(n.name,o)},splitting:je(e.splitting,t),bytecode:Ae(e.bytecode,t),define:Ie(e.define,e.shims,e.env,t),minify:Me(e),outdir:`${r}/${e.outDir}`,target:e.target,sourcemap:e.sourcemap,loader:e.loader,drop:e.drop,banner:e.banner,footer:e.footer,publicPath:e.publicPath,env:Ne(e.env),plugins:[...i,_e({format:t,target:e.target,shims:e.shims})],throw:!1});if(!a.success)for(let m of a.logs){if(m.level==="error")throw new h(m.message);if(m.level==="warning")f.warn(m.message);else if(m.level==="info")f.info(m.message)}let u=`${r}/${e.outDir}/${n.name}${o}`,c=Bun.file(u).size||0;f.progress(t.toUpperCase(),w(u),W(c),e.name)}
25
+ `}};function _e({format:e,target:r,shims:n}){let s=sr(n).map((i)=>Z[i]).filter((i)=>i.appliesTo(e,r));if(s.length===0)return{name:"bunup:inject-shims",setup(){}};return{name:"bunup:inject-shims",setup(i){i.onLoad({filter:tr},async({path:o})=>{let a=await Bun.file(o).text(),u=s.filter((m)=>m.isNeededInFile(a));if(u.length===0)return;let{shebangLine:c,codeContent:g}=or(a),p=u.map((m)=>m.generateCode()).join("");return{contents:c+p+g}})}}}function sr(e){if(e===!0)return Object.keys(Z);if(!e)return[];return Object.entries(e).filter(([r,n])=>n&&(r in Z)).map(([r])=>r)}function or(e){if(!e.startsWith("#!"))return{shebangLine:"",codeContent:e};let r=e.indexOf(`
26
+ `);return r===-1?{shebangLine:"",codeContent:e}:{shebangLine:e.slice(0,r+1),codeContent:e.slice(r+1)}}function De(e){return e.filter((r)=>r.type==="bun").map((r)=>r.plugin)}var me=new Set;async function We(e,r=process.cwd()){let n=Oe(e);if(!n.entry||n.entry.length===0||!n.outDir)throw new C("Nothing to build. Please make sure you have provided a proper bunup configuration or cli arguments.");if(n.clean)ie(r,n.outDir);ee(n.silent);let{packageJson:t,path:s}=await Te(r);if(t&&s)f.cli(`Using package.json: ${E(s,2)}`,{muted:!0,identifier:n.name,once:`${s}:${n.name}`});let i=Y(n.entry),o=t?.type,a=O(n,t),u=L(n);if(!n.dtsOnly){let c=[Ne(a,u),...De(n.plugins??[])],g=n.format.flatMap((p)=>i.map((m)=>{return ir(n,r,m,p,o,c)}));await Promise.all(g)}if(n.dts||n.dtsOnly){let c=await Re(r,n.preferredTsconfigPath);if(c.path)f.cli(`Using tsconfig: ${E(c.path,2)}`,{muted:!0,identifier:n.name,once:`${c.path}:${n.name}`});let g=n.format.filter((m)=>{if(m==="iife"&&!$(o)&&n.format.includes("cjs"))return!1;return!0}),p=typeof n.dts==="object"&&n.dts.entry?Y(n.dts.entry):Be(i);try{await Promise.all(p.map(async(m)=>{let y=await $e(r,m.path,n,c,t);await Promise.all(g.map(async(b)=>{let j=n.outputExtension?.({format:b,packageType:o,options:n,entry:m}).dts??se(b,o),N=`${r}/${n.outDir}/${m.name}${j}`;await Bun.write(N,y);let ke=Bun.file(N).size||0;f.progress("DTS",E(N),U(ke),n.name)}))}))}catch(m){throw new l(d(m))}}if(n.onBuildSuccess)await n.onBuildSuccess(n)}async function ir(e,r,n,t,s,i){let o=e.outputExtension?.({format:t,packageType:s,options:e,entry:n}).js??te(t,s),a=await Bun.build({entrypoints:[`${r}/${n.path}`],format:t,naming:{entry:Se(n.name,o)},splitting:Ie(e.splitting,t),bytecode:Me(e.bytecode,t),define:Ae(e.define,e.shims,e.env,t),minify:Le(e),outdir:`${r}/${e.outDir}`,target:e.target,sourcemap:e.sourcemap,loader:e.loader,drop:e.drop,banner:e.banner,footer:e.footer,publicPath:e.publicPath,env:je(e.env),plugins:[...i,_e({format:t,target:e.target,shims:e.shims})],throw:!1});if(!a.success)for(let g of a.logs){if(g.level==="error")throw new C(g.message);if(g.level==="warning")f.warn(g.message);else if(g.level==="info")f.info(g.message)}let u=`${r}/${e.outDir}/${n.name}${o}`,c=Bun.file(u).size||0;f.progress(t.toUpperCase(),E(u),U(c),e.name)}
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- function Se(e){return e}function Te(e){return e}import{build as Me}from"rolldown";import{dts as Ae}from"rolldown-plugin-dts";var q=!1;function H(e){q=e??!1}class b{static instance;loggedOnceMessages=new Set;MAX_LABEL_LENGTH=3;MAX_MESSAGE_LENGTH=25;colors={cli:"147",muted:"245",info:"117",warn:"179",error:"174",progress:{ESM:"172",CJS:"108",IIFE:"146",DTS:"110"},default:"252",size:"65"};labels={cli:"CLI",info:"INFO",warn:"WARN",error:"ERROR"};constructor(){}static getInstance(){if(!b.instance)b.instance=new b;return b.instance}dispose(){this.loggedOnceMessages.clear()}shouldLog(e){if(!e?.once)return!0;if(this.loggedOnceMessages.has(e.once))return!1;return this.loggedOnceMessages.add(e.once),!0}formatMessage({colorCode:e,label:r,message:n,size:t,identifier:s,muted:i}){let o=" ".repeat(Math.max(0,this.MAX_LABEL_LENGTH-r.length)),a=i?`\x1B[38;5;${this.colors.muted}m${n}\x1B[0m`:n;if(t){let[c,...m]=a.split(" "),p=" ".repeat(Math.max(0,this.MAX_MESSAGE_LENGTH-c.length)),g=s?` \x1B[48;5;${e};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${e}m${r}\x1B[0m ${o}${c}${p} \x1B[38;5;${this.colors.size}m${t}\x1B[0m ${m.join(" ")}${g}`}let u=s?` \x1B[48;5;${e};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${e}m${r}\x1B[0m ${o}${a}${u}`}output(e,r={},n=console.log){if(q)return;if(!this.shouldLog(r))return;if(r.verticalSpace)console.log("");if(n(e),r.verticalSpace)console.log("")}cli(e,r={}){let n=this.formatMessage({colorCode:this.colors.cli,label:this.labels.cli,message:e,identifier:r.identifier,muted:r.muted});this.output(n,r)}info(e,r={}){let n=this.formatMessage({colorCode:this.colors.info,label:this.labels.info,message:e,identifier:r.identifier,muted:r.muted});this.output(n,r)}warn(e,r={}){let n=this.formatMessage({colorCode:this.colors.warn,label:this.labels.warn,message:e,identifier:r.identifier,muted:r.muted});this.output(n,r,console.warn)}error(e,r={}){let n=this.formatMessage({colorCode:this.colors.error,label:this.labels.error,message:e,identifier:r.identifier,muted:r.muted});this.output(n,r,console.error)}progress(e,r,n,t){let s=String(e),i=this.colors.default,o,a,u={};if(typeof n==="string")o=n,a=t;else if(n)o=n.size,a=n.identifier,u=n;for(let[m,p]of Object.entries(this.colors.progress))if(s.includes(m)){i=p;break}let c=this.formatMessage({colorCode:i,label:s,message:r,size:o,identifier:a,muted:u.muted});this.output(c,u)}}var f=b.getInstance();class L extends Error{constructor(e){super(e);this.name="BunupError"}}class h extends L{constructor(e){super(e);this.name="BunupBuildError"}}class l extends L{constructor(e){super(e);this.name="BunupDTSBuildError"}}var d=(e)=>{if(e instanceof Error)return e.message;return String(e)};import F from"node:fs/promises";import Re from"node:path";function M(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function G(e=8){let r="";while(r.length<e)r+=Math.random().toString(36).substring(2);return r.substring(0,e)}function K(e,r){switch(e){case"esm":return y(r)?".js":".mjs";case"cjs":return y(r)?".cjs":".js";case"iife":return".global.js"}}function Y(e,r){switch(e){case"esm":return y(r)?".d.ts":".d.mts";case"cjs":return y(r)?".d.cts":".d.ts";case"iife":return".d.ts"}}function A(e){return e==="node"||e==="bun"}function y(e){return e==="module"}function Q(e){if(!e)return[];return Array.from(new Set([...Object.keys(e.dependencies||{}),...Object.keys(e.peerDependencies||{})]))}function I(e){if(e===0)return"0 B";let r=["B","KB","MB","GB"],n=Math.floor(Math.log(e)/Math.log(1024));if(n===0)return`${e} ${r[n]}`;return`${(e/1024**n).toFixed(2)} ${r[n]}`}function w(e,r=3){return e.split("/").slice(-r).join("/")}async function Z(e,r){let n=Re.join(e,r);try{await F.rm(n,{recursive:!0,force:!0})}catch(t){throw new h(`Failed to clean output directory: ${t}`)}await F.mkdir(n,{recursive:!0})}function E(e){return[".ts",".mts",".cts",".tsx"].some((r)=>e.endsWith(r))}function z(e){return e.map((r)=>typeof r==="string"?new RegExp(`^${M(r)}($|\\/|\\\\)`):r)}function B(e,r){return z(e.external||[]).concat(Q(r).map((n)=>new RegExp(`^${M(n)}($|\\/|\\\\)`)))}function S(e){return z(e.noExternal||[])}import ee from"node:path";import{ResolverFactory as Le}from"oxc-resolver";import{resolveTsImportPath as Oe}from"ts-import-resolver";var $="\x00dts:",X=(e,r,n)=>{return{name:"bunup:virtual-dts",async resolveId(t,s){if(j(t))return t;if(!s||!j(s))return null;let i=r.tsconfig?Oe({path:t,importer:C(s),tsconfig:r.tsconfig,rootDir:n}):null;if(!i)return null;let o=x(i);if(e.has(o))return T(o);return null},load(t){if(t.startsWith($)){let s=C(t),i=e.get(s);if(i)return V.add(s),i}return null}}};var N=/\.(js|mjs|cjs|ts|mts|cts|tsx|jsx)$/;function J(e){return e.endsWith(".d.ts")||e.endsWith(".d.mts")||e.endsWith(".d.cts")}function v(e){return N.test(e)&&!J(e)}function x(e){if(J(e))return e;if(e.endsWith(".mts"))return`${e.slice(0,-4)}.d.mts`;if(e.endsWith(".cts"))return`${e.slice(0,-4)}.d.cts`;if(N.test(e))return e.replace(N,".d.ts");return`${e}.d.ts`}function j(e){return e.startsWith($)}function C(e){return e.replace($,"")}function T(e){return`${$}${e}`}function P(e,r,n,t){if(typeof t==="boolean"&&t)return!1;if(Array.isArray(t)){for(let s of t)if(typeof s==="string"&&e===s)return!1;else if(s instanceof RegExp&&s.test(e))return!1}return r.some((s)=>s.test(e))&&!n.some((s)=>s.test(e))}var D;function re(e,r){return{name:"bunup:types-resolve",buildStart(){D||=new Le({mainFields:["types","typings","module","main"],conditionNames:["types","typings","import","require"],extensions:[".d.ts",".d.mts",".d.cts",".ts",".mts",".cts"],...e.path&&{tsconfig:{configFile:e.path}},modules:["node_modules","node_modules/@types"]})},async resolveId(n,t){if(r===!1)return;if(n==="bun")return;let s=t?C(t):void 0;if(/\0/.test(n))return;if(Array.isArray(r)){if(!r.some((u)=>typeof u==="string"?u===n:u.test(n)))return}let i=s?ee.dirname(s):process.cwd(),{path:o}=await D.async(i,n);if(!o)return;if(v(o)){let a=x(o);try{let{path:u}=await D.async(ee.dirname(o),a);if(u)return u}catch(u){}return}return o}}}async function ne(e,r,n,t,s,i){let o=x(e),a=T(o),u=B(n,t),c=S(n),m=typeof n.dts==="object"&&"resolve"in n.dts?n.dts.resolve:void 0;try{let{output:p}=await Me({input:a,output:{dir:n.outDir},write:!1,...s.path&&{resolve:{tsconfigFilename:s.path}},onwarn(g,R){if(["UNRESOLVED_IMPORT","CIRCULAR_DEPENDENCY","EMPTY_BUNDLE"].includes(g.code??""))return;R(g)},plugins:[X(r,s,i),m&&re(s,m),Ae({dtsInput:!0,emitDtsOnly:!0})],external:(g)=>P(g,u,c,m)});if(!p[0]?.code)return f.warn(`Generated empty declaration file for entry "${e}"`,{muted:!0}),"";return p[0].code}catch(p){throw new l(`DTS bundling failed for entry "${e}": ${d(p)}`)}}import{resolveTsImportPath as Ie}from"ts-import-resolver";var je=/^\s*import\s+(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]/gm,Ne=/^\s*export\s+.*from\s+['"]([^'"]+)['"]/gm,De=/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,_e=/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,We=/import\s+\w+\s*=\s*require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,ke=/\/\/\/\s*<reference\s+path\s*=\s*['"]([^'"]+)['"]\s*\/>/g,Ue=/\/\/\/\s*<reference\s+types\s*=\s*['"]([^'"]+)['"]\s*\/>/g;function qe(e){let r=new Set,n=[je,Ne,De,_e,We,ke,Ue];for(let t of n){let s=e.matchAll(t);for(let i of s)if(i[1])r.add(i[1])}return r}async function te(e,r,n){let t=new Set([e]),s=[e];while(s.length){let i=s.pop();if(!i)continue;try{let o=await Bun.file(i).text(),a=qe(o);for(let u of a){let c=r.tsconfig?Ie({path:u,importer:i,tsconfig:r.tsconfig,rootDir:n}):null;if(!c)continue;if(!t.has(c))t.add(c),s.push(c)}}catch(o){f.warn(`Error processing ${i}: ${d(o)}`)}}return t}import{isolatedDeclaration as He}from"oxc-transform";async function se(e){let r=new Map;return await Promise.all([...e].map(async(n)=>{try{let t=x(n);if(!await Bun.file(n).exists())return;let i=await Bun.file(n).text(),{code:o}=He(n,i);if(o)r.set(t,o)}catch(t){f.warn(`Failed to generate declaration for ${n}: ${d(t)}`)}})),r}import oe from"node:fs/promises";import _ from"node:path";import{isolatedDeclaration as kr}from"oxc-transform";async function ie(e,r){let n=_.resolve(e),t=_.resolve(n,r);if(!await oe.exists(n))throw new l(`Root directory does not exist: ${n}`);if(!await Bun.file(t).exists())throw new l(`Entry file does not exist: ${t}`);if(!E(t))throw new l(`Entry file must be a TypeScript file: ${t}`);if(_.relative(n,t).startsWith(".."))throw new l(`Entry file must be within rootDir: ${t}`);return{absoluteRootDir:n,absoluteEntry:t}}async function ae(e,r,n,t,s){let{absoluteEntry:i}=await ie(e,r),o=await te(i,t,e),a=await se(o);return ne(i,a,n,s,t,e)}import{basename as Fe,extname as Ge}from"node:path";function ue(e){let r=Fe(e),n=Ge(r);return n?r.slice(0,-n.length):r}function W(e,{warnOnConflict:r=!0}={}){let n=[],t=new Set,s={};function i(o,a){if(t.has(o)){let u=G(),c=`${o}_${u}`;if(r)f.warn(`Output name conflict: "${o}" is used by multiple files.
1
+ import{createRequire as Ie}from"node:module";var Oe=Object.create;var{getPrototypeOf:Le,defineProperty:H,getOwnPropertyNames:Me}=Object;var Ae=Object.prototype.hasOwnProperty;var F=(e,r,n)=>{n=e!=null?Oe(Le(e)):{};let t=r||!e||!e.__esModule?H(n,"default",{value:e,enumerable:!0}):n;for(let s of Me(e))if(!Ae.call(t,s))H(t,s,{get:()=>e[s],enumerable:!0});return t};var G=Ie(import.meta.url);function je(e){return e}function Ne(e){return e}var K=!1;function Y(e){K=e??!1}class y{static instance;loggedOnceMessages=new Set;MAX_LABEL_LENGTH=3;MAX_MESSAGE_LENGTH=25;colors={cli:"147",muted:"245",info:"117",warn:"179",error:"174",progress:{ESM:"172",CJS:"108",IIFE:"146",DTS:"110"},default:"252",size:"65"};labels={cli:"CLI",info:"INFO",warn:"WARN",error:"ERROR"};constructor(){}static getInstance(){if(!y.instance)y.instance=new y;return y.instance}dispose(){this.loggedOnceMessages.clear()}shouldLog(e){if(!e?.once)return!0;if(this.loggedOnceMessages.has(e.once))return!1;return this.loggedOnceMessages.add(e.once),!0}formatMessage({colorCode:e,label:r,message:n,size:t,identifier:s,muted:i}){let o=" ".repeat(Math.max(0,this.MAX_LABEL_LENGTH-r.length)),a=i?`\x1B[38;5;${this.colors.muted}m${n}\x1B[0m`:n;if(t){let[c,...g]=a.split(" "),p=" ".repeat(Math.max(0,this.MAX_MESSAGE_LENGTH-c.length)),m=s?` \x1B[48;5;${e};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${e}m${r}\x1B[0m ${o}${c}${p} \x1B[38;5;${this.colors.size}m${t}\x1B[0m ${g.join(" ")}${m}`}let u=s?` \x1B[48;5;${e};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${e}m${r}\x1B[0m ${o}${a}${u}`}output(e,r={},n=console.log){if(K)return;if(!this.shouldLog(r))return;if(r.verticalSpace)console.log("");if(n(e),r.verticalSpace)console.log("")}cli(e,r={}){let n=this.formatMessage({colorCode:this.colors.cli,label:this.labels.cli,message:e,identifier:r.identifier,muted:r.muted});this.output(n,r)}info(e,r={}){let n=this.formatMessage({colorCode:this.colors.info,label:this.labels.info,message:e,identifier:r.identifier,muted:r.muted});this.output(n,r)}warn(e,r={}){let n=this.formatMessage({colorCode:this.colors.warn,label:this.labels.warn,message:e,identifier:r.identifier,muted:r.muted});this.output(n,r,console.warn)}error(e,r={}){let n=this.formatMessage({colorCode:this.colors.error,label:this.labels.error,message:e,identifier:r.identifier,muted:r.muted});this.output(n,r,console.error)}progress(e,r,n,t){let s=String(e),i=this.colors.default,o,a,u={};if(typeof n==="string")o=n,a=t;else if(n)o=n.size,a=n.identifier,u=n;for(let[g,p]of Object.entries(this.colors.progress))if(s.includes(g)){i=p;break}let c=this.formatMessage({colorCode:i,label:s,message:r,size:o,identifier:a,muted:u.muted});this.output(c,u)}}var f=y.getInstance();class A extends Error{constructor(e){super(e);this.name="BunupError"}}class w extends A{constructor(e){super(e);this.name="BunupBuildError"}}class l extends A{constructor(e){super(e);this.name="BunupDTSBuildError"}}var d=(e)=>{if(e instanceof Error)return e.message;return String(e)};import Q from"node:fs/promises";import _e from"node:path";function I(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Z(e=8){let r="";while(r.length<e)r+=Math.random().toString(36).substring(2);return r.substring(0,e)}function z(e,r){switch(e){case"esm":return C(r)?".js":".mjs";case"cjs":return C(r)?".cjs":".js";case"iife":return".global.js"}}function X(e,r){switch(e){case"esm":return C(r)?".d.ts":".d.mts";case"cjs":return C(r)?".d.cts":".d.ts";case"iife":return".d.ts"}}function j(e){return e==="node"||e==="bun"}function C(e){return e==="module"}function V(e){if(!e)return[];return Array.from(new Set([...Object.keys(e.dependencies||{}),...Object.keys(e.peerDependencies||{})]))}function N(e){if(e===0)return"0 B";let r=["B","KB","MB","GB"],n=Math.floor(Math.log(e)/Math.log(1024));if(n===0)return`${e} ${r[n]}`;return`${(e/1024**n).toFixed(2)} ${r[n]}`}function $(e,r=3){return e.split("/").slice(-r).join("/")}async function J(e,r){let n=_e.join(e,r);try{await Q.rm(n,{recursive:!0,force:!0})}catch(t){throw new w(`Failed to clean output directory: ${t}`)}await Q.mkdir(n,{recursive:!0})}function S(e){return[".ts",".mts",".cts",".tsx"].some((r)=>e.endsWith(r))}function v(e){return e.map((r)=>typeof r==="string"?new RegExp(`^${I(r)}($|\\/|\\\\)`):r)}function T(e,r){return v(e.external||[]).concat(V(r).map((n)=>new RegExp(`^${I(n)}($|\\/|\\\\)`)))}function R(e){return v(e.noExternal||[])}import se from"node:path";import{ResolverFactory as We}from"oxc-resolver";import{resolveTsImportPath as De}from"ts-import-resolver";var B="\x00dts:",P=(e,r,n)=>{return{name:"bunup:virtual-dts",async resolveId(t,s){if(_(t))return t;if(!s||!_(s))return null;let i=r.tsconfig?De({path:t,importer:E(s),tsconfig:r.tsconfig,rootDir:n}):null;if(!i)return null;let o=x(i);if(e.has(o))return O(o);return null},load(t){if(t.startsWith(B)){let s=E(t),i=e.get(s);if(i)return ee.add(s),i}return null}}};var D=/\.(js|mjs|cjs|ts|mts|cts|tsx|jsx)$/;function re(e){return e.endsWith(".d.ts")||e.endsWith(".d.mts")||e.endsWith(".d.cts")}function ne(e){return D.test(e)&&!re(e)}function x(e){if(re(e))return e;if(e.endsWith(".mts"))return`${e.slice(0,-4)}.d.mts`;if(e.endsWith(".cts"))return`${e.slice(0,-4)}.d.cts`;if(D.test(e))return e.replace(D,".d.ts");return`${e}.d.ts`}function _(e){return e.startsWith(B)}function E(e){return e.replace(B,"")}function O(e){return`${B}${e}`}function te(e,r,n,t){if(typeof t==="boolean"&&t)return!1;if(Array.isArray(t)){for(let s of t)if(typeof s==="string"&&e===s)return!1;else if(s instanceof RegExp&&s.test(e))return!1}return r.some((s)=>s.test(e))&&!n.some((s)=>s.test(e))}var W;function oe(e,r){return{name:"bunup:types-resolve",buildStart(){W||=new We({mainFields:["types","typings","module","main"],conditionNames:["types","typings","import","require"],extensions:[".d.ts",".d.mts",".d.cts",".ts",".mts",".cts"],...e.path&&{tsconfig:{configFile:e.path}},modules:["node_modules","node_modules/@types"]})},async resolveId(n,t){if(r===!1)return;if(n==="bun")return;let s=t?E(t):void 0;if(/\0/.test(n))return;if(Array.isArray(r)){if(!r.some((u)=>typeof u==="string"?u===n:u.test(n)))return}let i=s?se.dirname(s):process.cwd(),{path:o}=await W.async(i,n);if(!o)return;if(ne(o)){let a=x(o);try{let{path:u}=await W.async(se.dirname(o),a);if(u)return u}catch(u){}return}return o}}}var ke=import("rolldown"),Ue=import("rolldown-plugin-dts");async function ie(e,r,n,t,s,i){let o=(await ke).build,a=(await Ue).dts,u=x(e),c=O(u),g=T(n,t),p=R(n),m=typeof n.dts==="object"&&"resolve"in n.dts?n.dts.resolve:void 0;try{let{output:h}=await o({input:c,output:{dir:n.outDir},write:!1,...s.path&&{resolve:{tsconfigFilename:s.path}},onwarn(b,L){if(["UNRESOLVED_IMPORT","CIRCULAR_DEPENDENCY","EMPTY_BUNDLE"].includes(b.code??""))return;L(b)},plugins:[P(r,s,i),m&&oe(s,m),a({dtsInput:!0,emitDtsOnly:!0})],external:(b)=>te(b,g,p,m)});if(!h[0]?.code)return f.warn(`Generated empty declaration file for entry "${e}"`,{muted:!0}),"";return h[0].code}catch(h){throw new l(`DTS bundling failed for entry "${e}": ${d(h)}`)}}import{resolveTsImportPath as qe}from"ts-import-resolver";var He=/^\s*import\s+(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]/gm,Fe=/^\s*export\s+.*from\s+['"]([^'"]+)['"]/gm,Ge=/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Ke=/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Ye=/import\s+\w+\s*=\s*require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Qe=/\/\/\/\s*<reference\s+path\s*=\s*['"]([^'"]+)['"]\s*\/>/g,Ze=/\/\/\/\s*<reference\s+types\s*=\s*['"]([^'"]+)['"]\s*\/>/g;function ze(e){let r=new Set,n=[He,Fe,Ge,Ke,Ye,Qe,Ze];for(let t of n){let s=e.matchAll(t);for(let i of s)if(i[1])r.add(i[1])}return r}async function ae(e,r,n){let t=new Set([e]),s=[e];while(s.length){let i=s.pop();if(!i)continue;try{let o=await Bun.file(i).text(),a=ze(o);for(let u of a){let c=r.tsconfig?qe({path:u,importer:i,tsconfig:r.tsconfig,rootDir:n}):null;if(!c)continue;if(!t.has(c))t.add(c),s.push(c)}}catch(o){f.warn(`Error processing ${i}: ${d(o)}`)}}return t}import{isolatedDeclaration as Xe}from"oxc-transform";async function ue(e){let r=new Map;return await Promise.all([...e].map(async(n)=>{try{let t=x(n);if(!await Bun.file(n).exists())return;let i=await Bun.file(n).text(),{code:o}=Xe(n,i);if(o)r.set(t,o)}catch(t){f.warn(`Failed to generate declaration for ${n}: ${d(t)}`)}})),r}import ce from"node:fs/promises";import k from"node:path";import{isolatedDeclaration as Qr}from"oxc-transform";async function me(e,r){let n=k.resolve(e),t=k.resolve(n,r);if(!await ce.exists(n))throw new l(`Root directory does not exist: ${n}`);if(!await Bun.file(t).exists())throw new l(`Entry file does not exist: ${t}`);if(!S(t))throw new l(`Entry file must be a TypeScript file: ${t}`);if(k.relative(n,t).startsWith(".."))throw new l(`Entry file must be within rootDir: ${t}`);return{absoluteRootDir:n,absoluteEntry:t}}async function ge(e,r,n,t,s){let{absoluteEntry:i}=await me(e,r),o=await ae(i,t,e),a=await ue(o);return ie(i,a,n,s,t,e)}import{basename as Ve,extname as Je}from"node:path";function fe(e){let r=Ve(e),n=Je(r);return n?r.slice(0,-n.length):r}function U(e,{warnOnConflict:r=!0}={}){let n=[],t=new Set,s={};function i(o,a){if(t.has(o)){let u=Z(),c=`${o}_${u}`;if(r)f.warn(`Output name conflict: "${o}" is used by multiple files.
2
2
  Bunup uses filenames without extensions as output names by default.
3
3
 
4
4
  ${s[o]} -> ${o}.js
@@ -12,15 +12,15 @@ To fix this, use named entries in your configuration:
12
12
  }
13
13
  }
14
14
 
15
- See: https://bunup.dev/documentation/#named-entries`,{muted:!0,verticalSpace:!0});n.push({name:c,path:a})}else n.push({name:o,path:a}),t.add(o),s[o]=a}if(Array.isArray(e))for(let o of e){let a=ue(o);i(a,o)}else if(typeof e==="object")for(let[o,a]of Object.entries(e))i(o,a);else{let o=ue(e);i(o,e)}return n}function ce(e){return e.filter((r)=>E(r.path))}function me(e,r){return`[dir]/${e}${r}`}import{loadConfig as ge}from"coffi";async function fe(e){let{config:r,filepath:n}=await ge({name:"package",cwd:e,extensions:[".json"],maxDepth:3});return{packageJson:r,path:n}}async function pe(e,r){let{config:n,filepath:t}=await ge({name:"tsconfig",cwd:e,extensions:[".json"],preferredPath:r,maxDepth:3});return{tsconfig:n,path:t}}var Ke={entry:[],format:["cjs"],outDir:"dist",target:"node",clean:!0};function le(e){return{...Ke,...e}}function de(e){let{minify:r,minifyWhitespace:n,minifyIdentifiers:t,minifySyntax:s}=e,i=r===!0;return{whitespace:n??i,identifiers:t??i,syntax:s??i}}function xe(e,r){return r==="cjs"?e:void 0}function be(e,r,n,t){return{...typeof n==="object"&&Object.keys(n).reduce((s,i)=>{let o=JSON.stringify(n[i]);return s[`process.env.${i}`]=o,s[`import.meta.env.${i}`]=o,s},{}),...e,...t==="cjs"&&(r===!0||typeof r==="object"&&r.importMetaUrl)&&{"import.meta.url":"importMetaUrl"}}}function he(e,r){return e===void 0?r==="esm":e}function ye(e){return typeof e==="string"?e:void 0}function we(e,r){return{name:"bunup:external-plugin",setup(n){n.onResolve({filter:/.*/},(t)=>{let s=t.path;if(e.some((o)=>o.test(s))&&!r.some((o)=>o.test(s)))return{path:s,external:!0};return null})}}}var Ye=/\.(js|ts|jsx|tsx|mts|cts)$/,k={dirnameFilename:{appliesTo:(e,r)=>e==="esm"&&A(r),isNeededInFile:(e)=>/\b__dirname\b/.test(e)||/\b__filename\b/.test(e),generateCode:()=>`import { fileURLToPath } from 'url';
15
+ See: https://bunup.dev/documentation/#named-entries`,{muted:!0,verticalSpace:!0});n.push({name:c,path:a})}else n.push({name:o,path:a}),t.add(o),s[o]=a}if(Array.isArray(e))for(let o of e){let a=fe(o);i(a,o)}else if(typeof e==="object")for(let[o,a]of Object.entries(e))i(o,a);else{let o=fe(e);i(o,e)}return n}function pe(e){return e.filter((r)=>S(r.path))}function le(e,r){return`[dir]/${e}${r}`}import{loadConfig as de}from"coffi";async function xe(e){let{config:r,filepath:n}=await de({name:"package",cwd:e,extensions:[".json"],maxDepth:3});return{packageJson:r,path:n}}async function be(e,r){let{config:n,filepath:t}=await de({name:"tsconfig",cwd:e,extensions:[".json"],preferredPath:r,maxDepth:3});return{tsconfig:n,path:t}}var ve={entry:[],format:["cjs"],outDir:"dist",target:"node",clean:!0};function he(e){return{...ve,...e}}function ye(e){let{minify:r,minifyWhitespace:n,minifyIdentifiers:t,minifySyntax:s}=e,i=r===!0;return{whitespace:n??i,identifiers:t??i,syntax:s??i}}function we(e,r){return r==="cjs"?e:void 0}function Ce(e,r,n,t){return{...typeof n==="object"&&Object.keys(n).reduce((s,i)=>{let o=JSON.stringify(n[i]);return s[`process.env.${i}`]=o,s[`import.meta.env.${i}`]=o,s},{}),...e,...t==="cjs"&&(r===!0||typeof r==="object"&&r.importMetaUrl)&&{"import.meta.url":"importMetaUrl"}}}function $e(e,r){return e===void 0?r==="esm":e}function Ee(e){return typeof e==="string"?e:void 0}function Be(e,r){return{name:"bunup:external-plugin",setup(n){n.onResolve({filter:/.*/},(t)=>{let s=t.path;if(e.some((o)=>o.test(s))&&!r.some((o)=>o.test(s)))return{path:s,external:!0};return null})}}}var Pe=/\.(js|ts|jsx|tsx|mts|cts)$/,q={dirnameFilename:{appliesTo:(e,r)=>e==="esm"&&j(r),isNeededInFile:(e)=>/\b__dirname\b/.test(e)||/\b__filename\b/.test(e),generateCode:()=>`import { fileURLToPath } from 'url';
16
16
  import { dirname } from 'path';
17
17
 
18
18
  const __filename = fileURLToPath(import.meta.url);
19
19
  const __dirname = dirname(__filename);
20
20
 
21
- `},importMetaUrl:{appliesTo:(e,r)=>e==="cjs"&&A(r),isNeededInFile:(e)=>/\bimport\.meta\.url\b/.test(e),generateCode:()=>`import { pathToFileURL } from 'url';
21
+ `},importMetaUrl:{appliesTo:(e,r)=>e==="cjs"&&j(r),isNeededInFile:(e)=>/\bimport\.meta\.url\b/.test(e),generateCode:()=>`import { pathToFileURL } from 'url';
22
22
 
23
23
  const importMetaUrl = pathToFileURL(__filename).href;
24
24
 
25
- `}};function Ce({format:e,target:r,shims:n}){let s=Qe(n).map((i)=>k[i]).filter((i)=>i.appliesTo(e,r));if(s.length===0)return{name:"bunup:inject-shims",setup(){}};return{name:"bunup:inject-shims",setup(i){i.onLoad({filter:Ye},async({path:o})=>{let a=await Bun.file(o).text(),u=s.filter((g)=>g.isNeededInFile(a));if(u.length===0)return;let{shebangLine:c,codeContent:m}=Ze(a),p=u.map((g)=>g.generateCode()).join("");return{contents:c+p+m}})}}}function Qe(e){if(e===!0)return Object.keys(k);if(!e)return[];return Object.entries(e).filter(([r,n])=>n&&(r in k)).map(([r])=>r)}function Ze(e){if(!e.startsWith("#!"))return{shebangLine:"",codeContent:e};let r=e.indexOf(`
26
- `);return r===-1?{shebangLine:"",codeContent:e}:{shebangLine:e.slice(0,r+1),codeContent:e.slice(r+1)}}function $e(e){return e.filter((r)=>r.type==="bun").map((r)=>r.plugin)}var V=new Set;async function ze(e,r=process.cwd()){let n=le(e);if(!n.entry||n.entry.length===0||!n.outDir)throw new h("Nothing to build. Please make sure you have provided a proper bunup configuration or cli arguments.");if(n.clean)Z(r,n.outDir);H(n.silent);let{packageJson:t,path:s}=await fe(r);if(t&&s)f.cli(`Using package.json: ${w(s,2)}`,{muted:!0,identifier:n.name,once:`${s}:${n.name}`});let i=W(n.entry),o=t?.type,a=B(n,t),u=S(n);if(!n.dtsOnly){let c=[we(a,u),...$e(n.plugins??[])],m=n.format.flatMap((p)=>i.map((g)=>{return Xe(n,r,g,p,o,c)}));await Promise.all(m)}if(n.dts||n.dtsOnly){let c=await pe(r,n.preferredTsconfigPath);if(c.path)f.cli(`Using tsconfig: ${w(c.path,2)}`,{muted:!0,identifier:n.name,once:`${c.path}:${n.name}`});let m=n.format.filter((g)=>{if(g==="iife"&&!y(o)&&n.format.includes("cjs"))return!1;return!0}),p=typeof n.dts==="object"&&n.dts.entry?W(n.dts.entry):ce(i);try{await Promise.all(p.map(async(g)=>{let R=await ae(r,g.path,n,c,t);await Promise.all(m.map(async(U)=>{let Ee=n.outputExtension?.({format:U,packageType:o,options:n,entry:g}).dts??Y(U,o),O=`${r}/${n.outDir}/${g.name}${Ee}`;await Bun.write(O,R);let Be=Bun.file(O).size||0;f.progress("DTS",w(O),I(Be),n.name)}))}))}catch(g){throw new l(d(g))}}if(n.onBuildSuccess)await n.onBuildSuccess(n)}async function Xe(e,r,n,t,s,i){let o=e.outputExtension?.({format:t,packageType:s,options:e,entry:n}).js??K(t,s),a=await Bun.build({entrypoints:[`${r}/${n.path}`],format:t,naming:{entry:me(n.name,o)},splitting:he(e.splitting,t),bytecode:xe(e.bytecode,t),define:be(e.define,e.shims,e.env,t),minify:de(e),outdir:`${r}/${e.outDir}`,target:e.target,sourcemap:e.sourcemap,loader:e.loader,drop:e.drop,banner:e.banner,footer:e.footer,publicPath:e.publicPath,env:ye(e.env),plugins:[...i,Ce({format:t,target:e.target,shims:e.shims})],throw:!1});if(!a.success)for(let m of a.logs){if(m.level==="error")throw new h(m.message);if(m.level==="warning")f.warn(m.message);else if(m.level==="info")f.info(m.message)}let u=`${r}/${e.outDir}/${n.name}${o}`,c=Bun.file(u).size||0;f.progress(t.toUpperCase(),w(u),I(c),e.name)}export{Te as defineWorkspace,Se as defineConfig,ze as build};
25
+ `}};function Se({format:e,target:r,shims:n}){let s=er(n).map((i)=>q[i]).filter((i)=>i.appliesTo(e,r));if(s.length===0)return{name:"bunup:inject-shims",setup(){}};return{name:"bunup:inject-shims",setup(i){i.onLoad({filter:Pe},async({path:o})=>{let a=await Bun.file(o).text(),u=s.filter((m)=>m.isNeededInFile(a));if(u.length===0)return;let{shebangLine:c,codeContent:g}=rr(a),p=u.map((m)=>m.generateCode()).join("");return{contents:c+p+g}})}}}function er(e){if(e===!0)return Object.keys(q);if(!e)return[];return Object.entries(e).filter(([r,n])=>n&&(r in q)).map(([r])=>r)}function rr(e){if(!e.startsWith("#!"))return{shebangLine:"",codeContent:e};let r=e.indexOf(`
26
+ `);return r===-1?{shebangLine:"",codeContent:e}:{shebangLine:e.slice(0,r+1),codeContent:e.slice(r+1)}}function Te(e){return e.filter((r)=>r.type==="bun").map((r)=>r.plugin)}var ee=new Set;async function nr(e,r=process.cwd()){let n=he(e);if(!n.entry||n.entry.length===0||!n.outDir)throw new w("Nothing to build. Please make sure you have provided a proper bunup configuration or cli arguments.");if(n.clean)J(r,n.outDir);Y(n.silent);let{packageJson:t,path:s}=await xe(r);if(t&&s)f.cli(`Using package.json: ${$(s,2)}`,{muted:!0,identifier:n.name,once:`${s}:${n.name}`});let i=U(n.entry),o=t?.type,a=T(n,t),u=R(n);if(!n.dtsOnly){let c=[Be(a,u),...Te(n.plugins??[])],g=n.format.flatMap((p)=>i.map((m)=>{return tr(n,r,m,p,o,c)}));await Promise.all(g)}if(n.dts||n.dtsOnly){let c=await be(r,n.preferredTsconfigPath);if(c.path)f.cli(`Using tsconfig: ${$(c.path,2)}`,{muted:!0,identifier:n.name,once:`${c.path}:${n.name}`});let g=n.format.filter((m)=>{if(m==="iife"&&!C(o)&&n.format.includes("cjs"))return!1;return!0}),p=typeof n.dts==="object"&&n.dts.entry?U(n.dts.entry):pe(i);try{await Promise.all(p.map(async(m)=>{let h=await ge(r,m.path,n,c,t);await Promise.all(g.map(async(b)=>{let L=n.outputExtension?.({format:b,packageType:o,options:n,entry:m}).dts??X(b,o),M=`${r}/${n.outDir}/${m.name}${L}`;await Bun.write(M,h);let Re=Bun.file(M).size||0;f.progress("DTS",$(M),N(Re),n.name)}))}))}catch(m){throw new l(d(m))}}if(n.onBuildSuccess)await n.onBuildSuccess(n)}async function tr(e,r,n,t,s,i){let o=e.outputExtension?.({format:t,packageType:s,options:e,entry:n}).js??z(t,s),a=await Bun.build({entrypoints:[`${r}/${n.path}`],format:t,naming:{entry:le(n.name,o)},splitting:$e(e.splitting,t),bytecode:we(e.bytecode,t),define:Ce(e.define,e.shims,e.env,t),minify:ye(e),outdir:`${r}/${e.outDir}`,target:e.target,sourcemap:e.sourcemap,loader:e.loader,drop:e.drop,banner:e.banner,footer:e.footer,publicPath:e.publicPath,env:Ee(e.env),plugins:[...i,Se({format:t,target:e.target,shims:e.shims})],throw:!1});if(!a.success)for(let g of a.logs){if(g.level==="error")throw new w(g.message);if(g.level==="warning")f.warn(g.message);else if(g.level==="info")f.info(g.message)}let u=`${r}/${e.outDir}/${n.name}${o}`,c=Bun.file(u).size||0;f.progress(t.toUpperCase(),$(u),N(c),e.name)}export{Ne as defineWorkspace,je as defineConfig,nr as build};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bunup",
3
3
  "description": "⚡ A blazing-fast build tool for your libraries built with Bun.",
4
- "version": "0.4.62",
4
+ "version": "0.4.63",
5
5
  "license": "MIT",
6
6
  "author": "Arshad Yaseen <m@arshadyaseen.com> (https://arshadyaseen.com)",
7
7
  "maintainers": [