bunup 0.4.32 → 0.4.34

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/build/cli.mjs CHANGED
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- import{exec as ht}from"tinyexec";import{build as qe}from"rolldown";import{dts as Ge}from"rolldown-plugin-dts";var ee=!1;function v(e){ee=e??!1}class C{static instance;loggedOnceMessages=new Set;MAX_LABEL_LENGTH=3;MAX_MESSAGE_LENGTH=25;colors={cli:"147",info:"245",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(!C.instance)C.instance=new C;return C.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:t,message:n,size:r,identifier:s,muted:o}){let i=" ".repeat(Math.max(0,this.MAX_LABEL_LENGTH-t.length)),a=o?`\x1B[38;5;${this.colors.info}m${n}\x1B[0m`:n;if(r){let[l,...f]=a.split(" "),p=" ".repeat(Math.max(0,this.MAX_MESSAGE_LENGTH-l.length)),m=s?` \x1B[48;5;${e};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${e}m${t}\x1B[0m ${i}${l}${p} \x1B[38;5;${this.colors.size}m${r}\x1B[0m ${f.join(" ")}${m}`}let c=s?` \x1B[48;5;${e};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${e}m${t}\x1B[0m ${i}${a}${c}`}output(e,t={},n=console.log){if(ee)return;if(!this.shouldLog(t))return;if(t.verticalSpace)console.log("");if(n(e),t.verticalSpace)console.log("")}cli(e,t={}){let n=this.formatMessage({colorCode:this.colors.cli,label:this.labels.cli,message:e,identifier:t.identifier,muted:t.muted});this.output(n,t)}info(e,t={}){let n=this.formatMessage({colorCode:this.colors.info,label:this.labels.info,message:e,identifier:t.identifier,muted:t.muted});this.output(n,t)}warn(e,t={}){let n=this.formatMessage({colorCode:this.colors.warn,label:this.labels.warn,message:e,identifier:t.identifier,muted:t.muted});this.output(n,t,console.warn)}error(e,t={}){let n=this.formatMessage({colorCode:this.colors.error,label:this.labels.error,message:e,identifier:t.identifier,muted:t.muted});this.output(n,t,console.error)}progress(e,t,n,r){let s=String(e),o=this.colors.default,i,a,c={};if(typeof n==="string")i=n,a=r;else if(n)i=n.size,a=n.identifier,c=n;for(let[f,p]of Object.entries(this.colors.progress))if(s.includes(f)){o=p;break}let l=this.formatMessage({colorCode:o,label:s,message:t,size:i,identifier:a,muted:c.muted});this.output(l,c)}}var u=C.getInstance();class E extends Error{constructor(e){super(e);this.name="BunupError"}}class w extends E{constructor(e){super(e);this.name="BunupBuildError"}}class g extends E{constructor(e){super(e);this.name="BunupDTSBuildError"}}class b extends E{constructor(e){super(e);this.name="BunupCLIError"}}class B extends E{constructor(e){super(e);this.name="BunupWatchError"}}var h=(e)=>{if(e instanceof Error)return e.message;return String(e)},Ue=[{pattern:/Could not resolve: "bun"/i,errorType:"BUILD ERROR",logSolution:()=>{u.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")}}],V=(e,t)=>{let n=h(e),r=t?`[${t}] `:"",s="ERROR";if(e instanceof w)s="BUILD ERROR";else if(e instanceof g)s="DTS ERROR";else if(e instanceof b)s="CLI ERROR";else if(e instanceof B)s="WATCH ERROR";else if(e instanceof E)s="BUNUP ERROR";let o=Ue.find((i)=>i.pattern.test(n)&&(i.errorType===s||!i.errorType));if(!o)console.error(`\x1B[31m${s}\x1B[0m ${r}${n}`);if(o)console.log(`
3
+ import{exec as yt}from"tinyexec";import{build as Ye}from"rolldown";import{dts as Ke}from"rolldown-plugin-dts";var te=!1;function B(e){te=e??!1}class E{static instance;loggedOnceMessages=new Set;MAX_LABEL_LENGTH=3;MAX_MESSAGE_LENGTH=25;colors={cli:"147",info:"245",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(!E.instance)E.instance=new E;return E.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:t,message:n,size:r,identifier:s,muted:o}){let i=" ".repeat(Math.max(0,this.MAX_LABEL_LENGTH-t.length)),a=o?`\x1B[38;5;${this.colors.info}m${n}\x1B[0m`:n;if(r){let[c,...f]=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${t}\x1B[0m ${i}${c}${p} \x1B[38;5;${this.colors.size}m${r}\x1B[0m ${f.join(" ")}${m}`}let l=s?` \x1B[48;5;${e};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${e}m${t}\x1B[0m ${i}${a}${l}`}output(e,t={},n=console.log){if(te)return;if(!this.shouldLog(t))return;if(t.verticalSpace)console.log("");if(n(e),t.verticalSpace)console.log("")}cli(e,t={}){let n=this.formatMessage({colorCode:this.colors.cli,label:this.labels.cli,message:e,identifier:t.identifier,muted:t.muted});this.output(n,t)}info(e,t={}){let n=this.formatMessage({colorCode:this.colors.info,label:this.labels.info,message:e,identifier:t.identifier,muted:t.muted});this.output(n,t)}warn(e,t={}){let n=this.formatMessage({colorCode:this.colors.warn,label:this.labels.warn,message:e,identifier:t.identifier,muted:t.muted});this.output(n,t,console.warn)}error(e,t={}){let n=this.formatMessage({colorCode:this.colors.error,label:this.labels.error,message:e,identifier:t.identifier,muted:t.muted});this.output(n,t,console.error)}progress(e,t,n,r){let s=String(e),o=this.colors.default,i,a,l={};if(typeof n==="string")i=n,a=r;else if(n)i=n.size,a=n.identifier,l=n;for(let[f,p]of Object.entries(this.colors.progress))if(s.includes(f)){o=p;break}let c=this.formatMessage({colorCode:o,label:s,message:t,size:i,identifier:a,muted:l.muted});this.output(c,l)}}var u=E.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 b extends O{constructor(e){super(e);this.name="BunupCLIError"}}class L extends O{constructor(e){super(e);this.name="BunupWatchError"}}var h=(e)=>{if(e instanceof Error)return e.message;return String(e)},qe=[{pattern:/Could not resolve: "bun"/i,errorType:"BUILD ERROR",logSolution:()=>{u.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")}}],q=(e,t)=>{let n=h(e),r=t?`[${t}] `:"",s="ERROR";if(e instanceof C)s="BUILD ERROR";else if(e instanceof g)s="DTS ERROR";else if(e instanceof b)s="CLI ERROR";else if(e instanceof L)s="WATCH ERROR";else if(e instanceof O)s="BUNUP ERROR";let o=qe.find((i)=>i.pattern.test(n)&&(i.errorType===s||!i.errorType));if(!o)console.error(`\x1B[31m${s}\x1B[0m ${r}${n}`);if(o)console.log(`
4
4
  `),o.logSolution(n),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")},te=(e,t)=>{V(e,t),process.exit(1)};import ne from"node:fs/promises";import Fe from"node:path";function q(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function re(e=8){let t="";while(t.length<e)t+=Math.random().toString(36).substring(2);return t.substring(0,e)}function se(e,t,n){return Array.isArray(e)?e.map((r)=>({...r,[t]:n})):{...e,[t]:n}}function ie(e){return Array.isArray(e)?e:[e]}function oe(e,t){switch(e){case"esm":return S(t)?".js":".mjs";case"cjs":return S(t)?".cjs":".js";case"iife":return".global.js"}}function ae(e,t){switch(e){case"esm":return S(t)?".d.ts":".d.mts";case"cjs":return S(t)?".d.cts":".d.ts";case"iife":return".d.ts"}}function G(e){return e==="node"||e==="bun"}function S(e){return e==="module"}function L(e){return e>=1000?`${(e/1000).toFixed(2)}s`:`${Math.round(e)}ms`}function le(e){if(!e)return[];return Array.from(new Set([...Object.keys(e.dependencies||{}),...Object.keys(e.peerDependencies||{})]))}function X(e){if(e===0)return"0 B";let t=["B","KB","MB","GB"],n=Math.floor(Math.log(e)/Math.log(1024));if(n===0)return`${e} ${t[n]}`;return`${(e/1024**n).toFixed(2)} ${t[n]}`}function x(e,t=3){return e.split("/").slice(-t).join("/")}async function ce(e,t){let n=Fe.join(e,t);try{await ne.rm(n,{recursive:!0,force:!0})}catch(r){throw new w(`Failed to clean output directory: ${r}`)}await ne.mkdir(n,{recursive:!0})}function I(e){return[".ts",".mts",".cts",".tsx"].some((t)=>e.endsWith(t))}function ue(e){return e.map((t)=>typeof t==="string"?new RegExp(`^${q(t)}($|\\/|\\\\)`):t)}function D(e,t){return ue(e.external||[]).concat(le(t).map((n)=>new RegExp(`^${q(n)}($|\\/|\\\\)`)))}function A(e){return ue(e.noExternal||[])}import He from"node:path";import{ResolverFactory as Ve}from"oxc-resolver";import{resolveTsImportPath as We}from"ts-import-resolver";var T="\x00dts:",fe=(e,t,n)=>{return{name:"bunup:virtual-dts",async resolveId(r,s){if(Y(r))return r;if(!s||!Y(s))return null;let o=t.tsconfig?We({path:r,importer:O(s),tsconfig:t.tsconfig,rootDir:n}):null;if(!o)return null;let i=R(o);if(e.has(i))return M(i);return null},load(r){if(r.startsWith(T)){let s=O(r),o=e.get(s);if(o)return $.add(s),o}return null}}};function R(e){if(e.endsWith(".d.ts")||e.endsWith(".d.mts")||e.endsWith(".d.cts"))return e;return e.replace(/\.(ts|tsx|mts|cts)$/,".d.ts")}function Y(e){return e.startsWith(T)}function O(e){return e.replace(T,"")}function M(e){return`${T}${e}`}var me;function pe(e){return{name:"bunup:types-resolve",buildStart(){me||=new Ve({mainFields:["types","typings","module","main"],conditionNames:["types","typings","import","require"],extensions:[".d.ts",".d.mts",".d.cts",".ts",".mts",".cts"],modules:["node_modules","node_modules/@types"]})},async resolveId(t,n){if(t==="bun")return;let r=n?O(n):void 0;if(/\0/.test(t))return;if(e){if(!e.some((a)=>typeof a==="string"?a===t:a.test(t)))return}let s=r?He.dirname(r):process.cwd(),{path:o}=await me.async(s,t);return o}}}async function de(e,t,n,r,s,o){let i=R(e),a=M(i),c=D(n,r),l=A(n);try{let{output:f}=await qe({input:a,output:{dir:n.outDir},write:!1,onwarn(p,m){if(["UNRESOLVED_IMPORT","CIRCULAR_DEPENDENCY","EMPTY_BUNDLE"].includes(p.code??""))return;m(p)},plugins:[fe(t,s,o),typeof n.dts==="object"&&"resolve"in n.dts&&pe(typeof n.dts.resolve==="boolean"?void 0:n.dts.resolve),Ge({dtsInput:!0,emitDtsOnly:!0})],external:(p)=>c.some((m)=>m.test(p))&&!l.some((m)=>m.test(p))});if(!f[0]?.code)return u.warn(`Generated empty declaration file for entry "${e}"`,{muted:!0}),"";return f[0].code}catch(f){throw new g(`DTS bundling failed for entry "${e}": ${h(f)}`)}}import{resolveTsImportPath as Xe}from"ts-import-resolver";var Ye=/^\s*import\s+(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]/gm,Ke=/^\s*export\s+.*from\s+['"]([^'"]+)['"]/gm,Je=/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,ze=/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Qe=/import\s+\w+\s*=\s*require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Ze=/\/\/\/\s*<reference\s+path\s*=\s*['"]([^'"]+)['"]\s*\/>/g,et=/\/\/\/\s*<reference\s+types\s*=\s*['"]([^'"]+)['"]\s*\/>/g;function tt(e){let t=new Set,n=[Ye,Ke,Je,ze,Qe,Ze,et];for(let r of n){let s=e.matchAll(r);for(let o of s)if(o[1])t.add(o[1])}return t}async function ge(e,t,n){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=tt(i);for(let c of a){let l=t.tsconfig?Xe({path:c,importer:o,tsconfig:t.tsconfig,rootDir:n}):null;if(!l)continue;if(!r.has(l))r.add(l),s.push(l)}}catch(i){u.warn(`Error processing ${o}: ${h(i)}`)}}return r}import{isolatedDeclaration as nt}from"oxc-transform";async function he(e){let t=new Map;return await Promise.all([...e].map(async(n)=>{try{let r=R(n);if(!await Bun.file(n).exists())return;let o=await Bun.file(n).text(),{code:i}=nt(n,o);if(i)t.set(r,i)}catch(r){u.warn(`Failed to generate declaration for ${n}: ${h(r)}`)}})),t}import be from"node:fs/promises";import K from"node:path";import{isolatedDeclaration as rt}from"oxc-transform";async function ye(e,t){let n=K.resolve(e),r=K.resolve(n,t);if(!await be.exists(n))throw new g(`Root directory does not exist: ${n}`);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(K.relative(n,r).startsWith(".."))throw new g(`Entry file must be within rootDir: ${r}`);return{absoluteRootDir:n,absoluteEntry:r}}async function xe(e){let t=!1;if(await Promise.all([...e].map(async(n)=>{try{let r=n.replace(/\.d\.ts$/,".ts"),s=await Bun.file(r).text(),{errors:o}=rt(r,s);for(let i of o){if(!t)console.log(`
6
- `);let a=i.labels[0],c=a?st(s,a.start):"",f=`${x(r)}${c}: ${it(i.message)}`;u.warn(f),t=!0}}catch{}})),t)u.info(`
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")},ne=(e,t)=>{q(e,t),process.exit(1)};import re from"node:fs/promises";import Ve from"node:path";function V(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function se(e=8){let t="";while(t.length<e)t+=Math.random().toString(36).substring(2);return t.substring(0,e)}function ie(e,t,n){return Array.isArray(e)?e.map((r)=>({...r,[t]:n})):{...e,[t]:n}}function oe(e){return Array.isArray(e)?e:[e]}function ae(e,t){switch(e){case"esm":return S(t)?".js":".mjs";case"cjs":return S(t)?".cjs":".js";case"iife":return".global.js"}}function le(e,t){switch(e){case"esm":return S(t)?".d.ts":".d.mts";case"cjs":return S(t)?".d.cts":".d.ts";case"iife":return".d.ts"}}function G(e){return e==="node"||e==="bun"}function S(e){return e==="module"}function D(e){return e>=1000?`${(e/1000).toFixed(2)}s`:`${Math.round(e)}ms`}function ce(e){if(!e)return[];return Array.from(new Set([...Object.keys(e.dependencies||{}),...Object.keys(e.peerDependencies||{})]))}function X(e){if(e===0)return"0 B";let t=["B","KB","MB","GB"],n=Math.floor(Math.log(e)/Math.log(1024));if(n===0)return`${e} ${t[n]}`;return`${(e/1024**n).toFixed(2)} ${t[n]}`}function y(e,t=3){return e.split("/").slice(-t).join("/")}async function ue(e,t){let n=Ve.join(e,t);try{await re.rm(n,{recursive:!0,force:!0})}catch(r){throw new C(`Failed to clean output directory: ${r}`)}await re.mkdir(n,{recursive:!0})}function I(e){return[".ts",".mts",".cts",".tsx"].some((t)=>e.endsWith(t))}function fe(e){return e.map((t)=>typeof t==="string"?new RegExp(`^${V(t)}($|\\/|\\\\)`):t)}function A(e,t){return fe(e.external||[]).concat(ce(t).map((n)=>new RegExp(`^${V(n)}($|\\/|\\\\)`)))}function M(e){return fe(e.noExternal||[])}import he from"node:path";import{ResolverFactory as Xe}from"oxc-resolver";import{resolveTsImportPath as Ge}from"ts-import-resolver";var R="\x00dts:",me=(e,t,n)=>{return{name:"bunup:virtual-dts",async resolveId(r,s){if(Y(r))return r;if(!s||!Y(s))return null;let o=t.tsconfig?Ge({path:r,importer:T(s),tsconfig:t.tsconfig,rootDir:n}):null;if(!o)return null;let i=w(o);if(e.has(i))return j(i);return null},load(r){if(r.startsWith(R)){let s=T(r),o=e.get(s);if(o)return $.add(s),o}return null}}};function pe(e){return e.tsconfig.compilerOptions??{}}function de(e){return e.endsWith(".d.ts")||e.endsWith(".d.mts")||e.endsWith(".d.cts")}function ge(e){return/\.(js|mjs|cjs|ts|mts|cts|tsx|jsx)$/.test(e)&&!de(e)}function w(e){if(de(e))return e;return e.replace(/\.(ts|tsx|mts|cts|js|jsx|mjs|cjs)$/,".d.ts")}function Y(e){return e.startsWith(R)}function T(e){return e.replace(R,"")}function j(e){return`${R}${e}`}var K;function be(e,t){return{name:"bunup:types-resolve",buildStart(){K||=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(n,r){if(n==="bun")return;let s=r?T(r):void 0;if(/\0/.test(n))return;if(t){if(!t.some((l)=>typeof l==="string"?l===n:l.test(n)))return}let o=s?he.dirname(s):process.cwd(),{path:i}=await K.async(o,n);if(!i)return;if(ge(i)){let a=w(i);try{let{path:l}=await K.async(he.dirname(i),a);if(l)return l}catch(l){}return}return i}}}async function xe(e,t,n,r,s,o){let i=w(e),a=j(i),l=A(n,r),c=M(n);try{let{output:f}=await Ye({input:a,output:{dir:n.outDir},write:!1,onwarn(p,m){if(["UNRESOLVED_IMPORT","CIRCULAR_DEPENDENCY","EMPTY_BUNDLE"].includes(p.code??""))return;m(p)},plugins:[me(t,s,o),typeof n.dts==="object"&&"resolve"in n.dts&&be(s,typeof n.dts.resolve==="boolean"?void 0:n.dts.resolve),Ke({dtsInput:!0,emitDtsOnly:!0,compilerOptions:{...pe(s),declaration:!0,noEmit:!1,emitDeclarationOnly:!0,noEmitOnError:!0,checkJs:!1,declarationMap:!1,skipLibCheck:!0,preserveSymlinks:!1,target:99}})],external:(p)=>l.some((m)=>m.test(p))&&!c.some((m)=>m.test(p))});if(!f[0]?.code)return u.warn(`Generated empty declaration file for entry "${e}"`,{muted:!0}),"";return f[0].code}catch(f){throw new g(`DTS bundling failed for entry "${e}": ${h(f)}`)}}import{resolveTsImportPath as Je}from"ts-import-resolver";var ze=/^\s*import\s+(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]/gm,Qe=/^\s*export\s+.*from\s+['"]([^'"]+)['"]/gm,Ze=/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,et=/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,tt=/import\s+\w+\s*=\s*require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,nt=/\/\/\/\s*<reference\s+path\s*=\s*['"]([^'"]+)['"]\s*\/>/g,rt=/\/\/\/\s*<reference\s+types\s*=\s*['"]([^'"]+)['"]\s*\/>/g;function st(e){let t=new Set,n=[ze,Qe,Ze,et,tt,nt,rt];for(let r of n){let s=e.matchAll(r);for(let o of s)if(o[1])t.add(o[1])}return t}async function ye(e,t,n){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=st(i);for(let l of a){let c=t.tsconfig?Je({path:l,importer:o,tsconfig:t.tsconfig,rootDir:n}):null;if(!c)continue;if(!r.has(c))r.add(c),s.push(c)}}catch(i){u.warn(`Error processing ${o}: ${h(i)}`)}}return r}import{isolatedDeclaration as it}from"oxc-transform";async function we(e){let t=new Map;return await Promise.all([...e].map(async(n)=>{try{let r=w(n);if(!await Bun.file(n).exists())return;let o=await Bun.file(n).text(),{code:i}=it(n,o);if(i)t.set(r,i)}catch(r){u.warn(`Failed to generate declaration for ${n}: ${h(r)}`)}})),t}import Ce from"node:fs/promises";import J from"node:path";import{isolatedDeclaration as ot}from"oxc-transform";async function Ee(e,t){let n=J.resolve(e),r=J.resolve(n,t);if(!await Ce.exists(n))throw new g(`Root directory does not exist: ${n}`);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(J.relative(n,r).startsWith(".."))throw new g(`Entry file must be within rootDir: ${r}`);return{absoluteRootDir:n,absoluteEntry:r}}async function Oe(e){let t=!1;if(await Promise.all([...e].map(async(n)=>{try{let r=n.replace(/\.d\.ts$/,".ts"),s=await Bun.file(r).text(),{errors:o}=ot(r,s);for(let i of o){if(!t)console.log(`
6
+ `);let a=i.labels[0],l=a?at(s,a.start):"",f=`${y(r)}${l}: ${lt(i.message)}`;u.warn(f),t=!0}}catch{}})),t)u.info(`
7
7
  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. Other bundlers might not show these warnings because they use different, potentially less precise methods. 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.
8
- `)}function st(e,t){if(t===void 0)return"";let n=e.slice(0,t).split(`
9
- `),r=n.length,s=n[n.length-1].length+1;return` (${r}:${s})`}function it(e){return e.replace(" with --isolatedDeclarations","").replace(" with --isolatedDeclaration","")}async function we(e,t,n,r,s){let{absoluteEntry:o}=await ye(e,t),i=await ge(o,r,e),a=await he(i);return de(o,a,n,s,r,e)}function _(e){return e.split("/").pop()?.split(".").slice(0,-1).join(".")||""}function P(e,{warnOnConflict:t=!0}={}){let n=[],r=new Set,s={};function o(i,a){if(r.has(i)){let c=re(),l=`${i}_${c}`;if(t)u.warn(`Output name conflict: "${i}" is used by multiple files.
8
+ `)}function at(e,t){if(t===void 0)return"";let n=e.slice(0,t).split(`
9
+ `),r=n.length,s=n[n.length-1].length+1;return` (${r}:${s})`}function lt(e){return e.replace(" with --isolatedDeclarations","").replace(" with --isolatedDeclaration","")}async function Se(e,t,n,r,s){let{absoluteEntry:o}=await Ee(e,t),i=await ye(o,r,e),a=await we(i);return xe(o,a,n,s,r,e)}function _(e){return e.split("/").pop()?.split(".").slice(0,-1).join(".")||""}function P(e,{warnOnConflict:t=!0}={}){let n=[],r=new Set,s={};function o(i,a){if(r.has(i)){let l=se(),c=`${i}_${l}`;if(t)u.warn(`Output name conflict: "${i}" is used by multiple files.
10
10
  Bunup uses filenames without extensions as output names by default.
11
11
 
12
12
  ${s[i]} -> ${i}.js
13
- ${a} -> ${l}.js (auto-renamed to avoid conflict)
13
+ ${a} -> ${c}.js (auto-renamed to avoid conflict)
14
14
 
15
15
  To fix this, use named entries in your configuration:
16
16
  {
@@ -20,7 +20,7 @@ To fix this, use named entries in your configuration:
20
20
  }
21
21
  }
22
22
 
23
- See: https://bunup.arshadyaseen.com/documentation/#named-entries`,{muted:!0,verticalSpace:!0});n.push({name:l,path:a})}else n.push({name:i,path:a}),r.add(i),s[i]=a}if(Array.isArray(e))for(let i of e){let a=_(i);o(a,i)}else if(typeof e==="object")for(let[i,a]of Object.entries(e))o(i,a);else{let i=_(e);o(i,e)}return n}function Ce(e){return e.filter((t)=>I(t.path))}function Ee(e,t){return`[dir]/${e}${t}`}import{loadConfig as Se}from"coffi";async function Re(e,t){return Array.isArray(e)&&"root"in e[0]?e.map((n)=>({rootDir:n.root,options:se(n.config,"name",n.name)})):[{rootDir:t,options:e}]}async function $e(e){let{config:t,filepath:n}=await Se({name:"package",cwd:e,extensions:[".json"],maxDepth:3});return{packageJson:t,path:n}}async function Oe(e,t){let{config:n,filepath:r}=await Se({name:"tsconfig",cwd:e,extensions:[".json"],preferredPath:t,maxDepth:3});return{tsconfig:n,path:r}}var ot={entry:[],format:["cjs"],outDir:"dist",target:"node",clean:!0};function j(e){return{...ot,...e}}function Te(e){let{minify:t,minifyWhitespace:n,minifyIdentifiers:r,minifySyntax:s}=e,o=t===!0;return{whitespace:n??o,identifiers:r??o,syntax:s??o}}function Pe(e,t){return t==="cjs"?e:void 0}function ve(e,t,n,r){return{...typeof n==="object"&&Object.keys(n).reduce((s,o)=>{let i=JSON.stringify(n[o]);return s[`process.env.${o}`]=i,s[`import.meta.env.${o}`]=i,s},{}),...e,...r==="cjs"&&(t===!0||typeof t==="object"&&t.importMetaUrl)&&{"import.meta.url":"importMetaUrl"}}}function Be(e,t){return e===void 0?t==="esm":e}function Le(e){return typeof e==="string"?e:void 0}function Ie(e,t){return{name:"bunup:external-plugin",setup(n){n.onResolve({filter:/.*/},(r)=>{let s=r.path;if(e.some((i)=>i.test(s))&&!t.some((i)=>i.test(s)))return{path:s,external:!0};return null})}}}var at=/\.(js|ts|jsx|tsx|mts|cts)$/,J={dirnameFilename:{appliesTo:(e,t)=>e==="esm"&&G(t),isNeededInFile:(e)=>/\b__dirname\b/.test(e)||/\b__filename\b/.test(e),generateCode:()=>`import { fileURLToPath } from 'url';
23
+ See: https://bunup.arshadyaseen.com/documentation/#named-entries`,{muted:!0,verticalSpace:!0});n.push({name:c,path:a})}else n.push({name:i,path:a}),r.add(i),s[i]=a}if(Array.isArray(e))for(let i of e){let a=_(i);o(a,i)}else if(typeof e==="object")for(let[i,a]of Object.entries(e))o(i,a);else{let i=_(e);o(i,e)}return n}function $e(e){return e.filter((t)=>I(t.path))}function Te(e,t){return`[dir]/${e}${t}`}import{loadConfig as Re}from"coffi";async function Pe(e,t){return Array.isArray(e)&&"root"in e[0]?e.map((n)=>({rootDir:n.root,options:ie(n.config,"name",n.name)})):[{rootDir:t,options:e}]}async function Be(e){let{config:t,filepath:n}=await Re({name:"package",cwd:e,extensions:[".json"],maxDepth:3});return{packageJson:t,path:n}}async function Le(e,t){let{config:n,filepath:r}=await Re({name:"tsconfig",cwd:e,extensions:[".json"],preferredPath:t,maxDepth:3});return{tsconfig:n,path:r}}var ct={entry:[],format:["cjs"],outDir:"dist",target:"node",clean:!0};function k(e){return{...ct,...e}}function De(e){let{minify:t,minifyWhitespace:n,minifyIdentifiers:r,minifySyntax:s}=e,o=t===!0;return{whitespace:n??o,identifiers:r??o,syntax:s??o}}function Ie(e,t){return t==="cjs"?e:void 0}function Ae(e,t,n,r){return{...typeof n==="object"&&Object.keys(n).reduce((s,o)=>{let i=JSON.stringify(n[o]);return s[`process.env.${o}`]=i,s[`import.meta.env.${o}`]=i,s},{}),...e,...r==="cjs"&&(t===!0||typeof t==="object"&&t.importMetaUrl)&&{"import.meta.url":"importMetaUrl"}}}function Me(e,t){return e===void 0?t==="esm":e}function je(e){return typeof e==="string"?e:void 0}function _e(e,t){return{name:"bunup:external-plugin",setup(n){n.onResolve({filter:/.*/},(r)=>{let s=r.path;if(e.some((i)=>i.test(s))&&!t.some((i)=>i.test(s)))return{path:s,external:!0};return null})}}}var ut=/\.(js|ts|jsx|tsx|mts|cts)$/,z={dirnameFilename:{appliesTo:(e,t)=>e==="esm"&&G(t),isNeededInFile:(e)=>/\b__dirname\b/.test(e)||/\b__filename\b/.test(e),generateCode:()=>`import { fileURLToPath } from 'url';
24
24
  import { dirname } from 'path';
25
25
 
26
26
  const __filename = fileURLToPath(import.meta.url);
@@ -30,8 +30,8 @@ See: https://bunup.arshadyaseen.com/documentation/#named-entries`,{muted:!0,vert
30
30
 
31
31
  const importMetaUrl = pathToFileURL(__filename).href;
32
32
 
33
- `}};function De({format:e,target:t,shims:n}){let s=lt(n).map((o)=>J[o]).filter((o)=>o.appliesTo(e,t));if(s.length===0)return{name:"bunup:inject-shims",setup(){}};return{name:"bunup:inject-shims",setup(o){o.onLoad({filter:at},async({path:i})=>{let a=await Bun.file(i).text(),c=s.filter((m)=>m.isNeededInFile(a));if(c.length===0)return;let{shebangLine:l,codeContent:f}=ct(a),p=c.map((m)=>m.generateCode()).join("");return{contents:l+p+f}})}}}function lt(e){if(e===!0)return Object.keys(J);if(!e)return[];return Object.entries(e).filter(([t,n])=>n&&(t in J)).map(([t])=>t)}function ct(e){if(!e.startsWith("#!"))return{shebangLine:"",codeContent:e};let t=e.indexOf(`
34
- `);return t===-1?{shebangLine:"",codeContent:e}:{shebangLine:e.slice(0,t+1),codeContent:e.slice(t+1)}}var $=new Set;async function k(e,t){let n=j(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)ce(t,n.outDir);v(n.silent);let{packageJson:r,path:s}=await $e(t);if(r&&s)u.cli(`Using package.json: ${x(s,2)}`,{muted:!0,identifier:n.name,once:`${s}:${n.name}`});let o=P(n.entry),i=r?.type,a=D(n,r),c=A(n);if(!n.dtsOnly){let l=[Ie(a,c)],f=n.format.flatMap((p)=>o.map((m)=>{return ut(n,t,m,p,i,l)}));await Promise.all(f)}if(n.dts||n.dtsOnly){let l=await Oe(t,n.preferredTsconfigPath);if(l.path)u.cli(`Using tsconfig: ${x(l.path,2)}`,{muted:!0,identifier:n.name,once:`${l.path}:${n.name}`});let f=n.format.filter((m)=>{if(m==="iife"&&!S(i)&&n.format.includes("cjs"))return!1;return!0}),p=typeof n.dts==="object"&&n.dts.entry?P(n.dts.entry):Ce(o);try{await Promise.all(p.map(async(m)=>{let W=await we(t,m.path,n,l,r);await Promise.all(f.map(async(Z)=>{let ke=n.outputExtension?.({format:Z,packageType:i,options:n,entry:m}).dts??ae(Z,i),H=`${t}/${n.outDir}/${m.name}${ke}`;await Bun.write(H,W);let Ne=Bun.file(H).size||0;u.progress("DTS",x(H),X(Ne),n.name)}))}))}catch(m){throw new g(h(m))}}if(n.onBuildSuccess)await n.onBuildSuccess(n)}async function ut(e,t,n,r,s,o){let i=e.outputExtension?.({format:r,packageType:s,options:e,entry:n}).js??oe(r,s),a=await Bun.build({entrypoints:[`${t}/${n.path}`],format:r,naming:{entry:Ee(n.name,i)},splitting:Be(e.splitting,r),bytecode:Pe(e.bytecode,r),define:ve(e.define,e.shims,e.env,r),minify:Te(e),outdir:`${t}/${e.outDir}`,target:e.target,sourcemap:e.sourcemap,loader:e.loader,drop:e.drop,banner:e.banner,footer:e.footer,publicPath:e.publicPath,env:Le(e.env),plugins:[...o,De({format:r,target:e.target,shims:e.shims}),...e.bunBuildPlugins??[]],throw:!1});if(!a.success)for(let f of a.logs){if(f.level==="error")throw new w(f.message);if(f.level==="warning")u.warn(f.message);else if(f.level==="info")u.info(f.message)}let c=`${t}/${e.outDir}/${n.name}${i}`,l=Bun.file(c).size||0;u.progress(r.toUpperCase(),x(c),X(l),e.name)}var N="0.4.32";var Ae="https://bunup.arshadyaseen.com/documentation/#cli-options";function d(e){return(t,n)=>{n[e]=t===!0||t==="true"}}function y(e){return(t,n)=>{if(typeof t==="string")n[e]=t;else throw new b(`Option --${e} requires a string value`)}}function z(e){return(t,n)=>{if(typeof t==="string")n[e]=t.split(",");else throw new b(`Option --${e} requires a string value`)}}function mt(e){return(t,n)=>{if(typeof t==="boolean")n[e]=t;else if(typeof t==="string")if(t.toLowerCase()==="true"||t.toLowerCase()==="false")n[e]=t.toLowerCase()==="true";else n[e]=t;else throw new b(`Option --${e} requires a boolean or string value`)}}function pt(){console.log(`
33
+ `}};function ke({format:e,target:t,shims:n}){let s=ft(n).map((o)=>z[o]).filter((o)=>o.appliesTo(e,t));if(s.length===0)return{name:"bunup:inject-shims",setup(){}};return{name:"bunup:inject-shims",setup(o){o.onLoad({filter:ut},async({path:i})=>{let a=await Bun.file(i).text(),l=s.filter((m)=>m.isNeededInFile(a));if(l.length===0)return;let{shebangLine:c,codeContent:f}=mt(a),p=l.map((m)=>m.generateCode()).join("");return{contents:c+p+f}})}}}function ft(e){if(e===!0)return Object.keys(z);if(!e)return[];return Object.entries(e).filter(([t,n])=>n&&(t in z)).map(([t])=>t)}function mt(e){if(!e.startsWith("#!"))return{shebangLine:"",codeContent:e};let t=e.indexOf(`
34
+ `);return t===-1?{shebangLine:"",codeContent:e}:{shebangLine:e.slice(0,t+1),codeContent:e.slice(t+1)}}var $=new Set;async function v(e,t){let n=k(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)ue(t,n.outDir);B(n.silent);let{packageJson:r,path:s}=await Be(t);if(r&&s)u.cli(`Using package.json: ${y(s,2)}`,{muted:!0,identifier:n.name,once:`${s}:${n.name}`});let o=P(n.entry),i=r?.type,a=A(n,r),l=M(n);if(!n.dtsOnly){let c=[_e(a,l)],f=n.format.flatMap((p)=>o.map((m)=>{return pt(n,t,m,p,i,c)}));await Promise.all(f)}if(n.dts||n.dtsOnly){let c=await Le(t,n.preferredTsconfigPath);if(c.path)u.cli(`Using tsconfig: ${y(c.path,2)}`,{muted:!0,identifier:n.name,once:`${c.path}:${n.name}`});let f=n.format.filter((m)=>{if(m==="iife"&&!S(i)&&n.format.includes("cjs"))return!1;return!0}),p=typeof n.dts==="object"&&n.dts.entry?P(n.dts.entry):$e(o);try{await Promise.all(p.map(async(m)=>{let W=await Se(t,m.path,n,c,r);await Promise.all(f.map(async(ee)=>{let We=n.outputExtension?.({format:ee,packageType:i,options:n,entry:m}).dts??le(ee,i),H=`${t}/${n.outDir}/${m.name}${We}`;await Bun.write(H,W);let He=Bun.file(H).size||0;u.progress("DTS",y(H),X(He),n.name)}))}))}catch(m){throw new g(h(m))}}if(n.onBuildSuccess)await n.onBuildSuccess(n)}async function pt(e,t,n,r,s,o){let i=e.outputExtension?.({format:r,packageType:s,options:e,entry:n}).js??ae(r,s),a=await Bun.build({entrypoints:[`${t}/${n.path}`],format:r,naming:{entry:Te(n.name,i)},splitting:Me(e.splitting,r),bytecode:Ie(e.bytecode,r),define:Ae(e.define,e.shims,e.env,r),minify:De(e),outdir:`${t}/${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:[...o,ke({format:r,target:e.target,shims:e.shims}),...e.bunBuildPlugins??[]],throw:!1});if(!a.success)for(let f of a.logs){if(f.level==="error")throw new C(f.message);if(f.level==="warning")u.warn(f.message);else if(f.level==="info")u.info(f.message)}let l=`${t}/${e.outDir}/${n.name}${i}`,c=Bun.file(l).size||0;u.progress(r.toUpperCase(),y(l),X(c),e.name)}var U="0.4.34";var ve="https://bunup.arshadyaseen.com/documentation/#cli-options";function d(e){return(t,n)=>{n[e]=t===!0||t==="true"}}function x(e){return(t,n)=>{if(typeof t==="string")n[e]=t;else throw new b(`Option --${e} requires a string value`)}}function Q(e){return(t,n)=>{if(typeof t==="string")n[e]=t.split(",");else throw new b(`Option --${e} requires a string value`)}}function gt(e){return(t,n)=>{if(typeof t==="boolean")n[e]=t;else if(typeof t==="string")if(t.toLowerCase()==="true"||t.toLowerCase()==="false")n[e]=t.toLowerCase()==="true";else n[e]=t;else throw new b(`Option --${e} requires a boolean or string value`)}}function ht(){console.log(`
35
35
  Bunup - An extremely fast, zero-config bundler for JavaScript and TypeScript, powered by Bun.
36
- `),console.log("For more information on available options, visit:"),console.log(`\x1B[36m\x1B[4m${Ae}\x1B[0m
37
- `),process.exit(0)}function dt(){console.log(N),process.exit(0)}var Me={name:{flags:["n","name"],handler:y("name")},format:{flags:["f","format"],handler:z("format")},outDir:{flags:["o","out-dir"],handler:y("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:y("banner")},footer:{flags:["ft","footer"],handler:y("footer")},external:{flags:["e","external"],handler:z("external")},sourcemap:{flags:["sm","sourcemap"],handler:mt("sourcemap")},target:{flags:["t","target"],handler:y("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:z("noExternal")},preferredTsconfigPath:{flags:["tsconfig","preferred-tsconfig-path"],handler:y("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:y("config")},publicPath:{flags:["pp","public-path"],handler:y("publicPath")},env:{flags:["env"],handler:y("env")},shims:{flags:["shims"],handler:d("shims")},onSuccess:{flags:["onSuccess"],handler:y("onSuccess")},entry:{flags:["entry"],handler:(e,t,n)=>{if(typeof e!=="string")throw new b(`Entry${n?` --entry.${n}`:""} requires a string value`);let r=t.entry||{};if(n){if(r[n])u.warn(`Duplicate entry name '${n}' provided via --entry.${n}. Overwriting previous entry.`);r[n]=e}else{let s=_(e);if(r[s])u.warn(`Duplicate entry name '${s}' derived from '${e}'. Overwriting previous entry.`);r[s]=e}t.entry=r}},resolveDts:{flags:["rd","resolve-dts"],handler:(e,t)=>{if(!t.dts)t.dts={};if(typeof t.dts==="boolean")t.dts={};if(typeof e==="string")if(e==="true"||e==="false")t.dts.resolve=e==="true";else t.dts.resolve=e.split(",");else t.dts.resolve=!0}},help:{flags:["h","help"],handler:()=>pt()},version:{flags:["v","version"],handler:()=>dt()}},U={};for(let e of Object.values(Me))for(let t of e.flags)U[t]=e.handler;function _e(e){let t={};for(let n=0;n<e.length;n++){let r=e[n];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[n+1];if(o=i&&!i.startsWith("-")?i:!0,typeof o==="string")n++}if(s.includes(".")){let[i,a]=s.split(".",2),c=U[i];if(c)c(o,t,a);else throw new b(`Unknown option: --${s}`)}else{let i=U[s];if(i)i(o,t);else throw new b(`Unknown option: --${s}`)}}else if(r.startsWith("-")){let s=r.slice(1),o=e[n+1],i=o&&!o.startsWith("-")?o:!0;if(typeof i==="string")n++;let a=U[s];if(a)a(i,t);else throw new b(`Unknown option: -${s}`)}else Me.entry.handler(r,t,void 0)}return t}import{loadConfig as bt}from"coffi";import F from"node:path";import gt from"chokidar";async function je(e,t){let n=new Set,r=j(e),s=P(r.entry);for(let c of s){let l=F.resolve(t,c.path),f=F.dirname(l);n.add(f)}let o=gt.watch(Array.from(n),{persistent:!0,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50},ignoreInitial:!0,atomic:!0,ignorePermissionErrors:!0,ignored:[/[\\/]\.git[\\/]/,/[\\/]node_modules[\\/]/,F.join(t,r.outDir)]}),i=!1,a=async(c=!1)=>{if(i)return;i=!0;try{let l=performance.now();if(await k({...r,entry:s.map((f)=>f.path),clean:!1},t),!c)u.cli(`\uD83D\uDCE6 Rebuild finished in ${L(performance.now()-l)}`);await Q()}catch(l){V(l)}finally{i=!1}};o.on("change",(c)=>{let l=F.relative(t,c);u.cli(`File changed: ${l}`,{muted:!0,once:l}),a()}),o.on("error",(c)=>{throw new B(`Watcher error: ${h(c)}`)}),await a(!0)}async function yt(e=Bun.argv.slice(2)){let t=_e(e);v(t.silent);let n=process.cwd(),{config:r,filepath:s}=await bt({name:"bunup.config",extensions:[".ts",".js",".mjs",".cjs"],maxDepth:1,preferredPath:t.config}),o=!r?[{rootDir:n,options:t}]:await Re(r,n);if(u.cli(`Using bunup v${N} and bun v${Bun.version}`,{muted:!0}),s)u.cli(`Using config file: ${x(s,2)}`,{muted:!0});let i=performance.now();u.cli("Build started"),await Promise.all(o.flatMap(({options:l,rootDir:f})=>{return ie(l).map(async(m)=>{let W={...m,...xt(t)};return wt(W,f)})}));let a=performance.now()-i,c=L(a);if(u.cli(`\u26A1\uFE0F Build completed in ${c}`),await Q(),t.watch)u.cli("\uD83D\uDC40 Watching for file changes");if(t.onSuccess)u.cli(`Running command: ${t.onSuccess}`,{muted:!0}),ht(t.onSuccess,[],{nodeOptions:{shell:!0,stdio:"inherit"}});if(!t.watch)process.exit(0)}function xt(e){return{...e,onSuccess:void 0,config:void 0}}async function Q(){if($.size>0)await xe($),$.clear()}async function wt(e,t){if(e.watch)await je(e,t);else await k(e,t)}yt().catch((e)=>te(e));export{Q as validateDtsFiles,yt as main};
36
+ `),console.log("For more information on available options, visit:"),console.log(`\x1B[36m\x1B[4m${ve}\x1B[0m
37
+ `),process.exit(0)}function bt(){console.log(U),process.exit(0)}var Ue={name:{flags:["n","name"],handler:x("name")},format:{flags:["f","format"],handler:Q("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:Q("external")},sourcemap:{flags:["sm","sourcemap"],handler:gt("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:Q("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,t,n)=>{if(typeof e!=="string")throw new b(`Entry${n?` --entry.${n}`:""} requires a string value`);let r=t.entry||{};if(n){if(r[n])u.warn(`Duplicate entry name '${n}' provided via --entry.${n}. Overwriting previous entry.`);r[n]=e}else{let s=_(e);if(r[s])u.warn(`Duplicate entry name '${s}' derived from '${e}'. Overwriting previous entry.`);r[s]=e}t.entry=r}},resolveDts:{flags:["rd","resolve-dts"],handler:(e,t)=>{if(!t.dts)t.dts={};if(typeof t.dts==="boolean")t.dts={};if(typeof e==="string")if(e==="true"||e==="false")t.dts.resolve=e==="true";else t.dts.resolve=e.split(",");else t.dts.resolve=!0}},help:{flags:["h","help"],handler:()=>ht()},version:{flags:["v","version"],handler:()=>bt()}},N={};for(let e of Object.values(Ue))for(let t of e.flags)N[t]=e.handler;function Ne(e){let t={};for(let n=0;n<e.length;n++){let r=e[n];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[n+1];if(o=i&&!i.startsWith("-")?i:!0,typeof o==="string")n++}if(s.includes(".")){let[i,a]=s.split(".",2),l=N[i];if(l)l(o,t,a);else throw new b(`Unknown option: --${s}`)}else{let i=N[s];if(i)i(o,t);else throw new b(`Unknown option: --${s}`)}}else if(r.startsWith("-")){let s=r.slice(1),o=e[n+1],i=o&&!o.startsWith("-")?o:!0;if(typeof i==="string")n++;let a=N[s];if(a)a(i,t);else throw new b(`Unknown option: -${s}`)}else Ue.entry.handler(r,t,void 0)}return t}import{loadConfig as wt}from"coffi";import F from"node:path";import xt from"chokidar";async function Fe(e,t){let n=new Set,r=k(e),s=P(r.entry);for(let l of s){let c=F.resolve(t,l.path),f=F.dirname(c);n.add(f)}let o=xt.watch(Array.from(n),{persistent:!0,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50},ignoreInitial:!0,atomic:!0,ignorePermissionErrors:!0,ignored:[/[\\/]\.git[\\/]/,/[\\/]node_modules[\\/]/,F.join(t,r.outDir)]}),i=!1,a=async(l=!1)=>{if(i)return;i=!0;try{let c=performance.now();if(await v({...r,entry:s.map((f)=>f.path),clean:!1},t),!l)u.cli(`\uD83D\uDCE6 Rebuild finished in ${D(performance.now()-c)}`);await Z()}catch(c){q(c)}finally{i=!1}};o.on("change",(l)=>{let c=F.relative(t,l);u.cli(`File changed: ${c}`,{muted:!0,once:c}),a()}),o.on("error",(l)=>{throw new L(`Watcher error: ${h(l)}`)}),await a(!0)}async function Ct(e=Bun.argv.slice(2)){let t=Ne(e);B(t.silent);let n=process.cwd(),{config:r,filepath:s}=await wt({name:"bunup.config",extensions:[".ts",".js",".mjs",".cjs"],maxDepth:1,preferredPath:t.config}),o=!r?[{rootDir:n,options:t}]:await Pe(r,n);if(u.cli(`Using bunup v${U} and bun v${Bun.version}`,{muted:!0}),s)u.cli(`Using config file: ${y(s,2)}`,{muted:!0});let i=performance.now();u.cli("Build started"),await Promise.all(o.flatMap(({options:c,rootDir:f})=>{return oe(c).map(async(m)=>{let W={...m,...Et(t)};return Ot(W,f)})}));let a=performance.now()-i,l=D(a);if(u.cli(`\u26A1\uFE0F Build completed in ${l}`),await Z(),t.watch)u.cli("\uD83D\uDC40 Watching for file changes");if(t.onSuccess)u.cli(`Running command: ${t.onSuccess}`,{muted:!0}),yt(t.onSuccess,[],{nodeOptions:{shell:!0,stdio:"inherit"}});if(!t.watch)process.exit(0)}function Et(e){return{...e,onSuccess:void 0,config:void 0}}async function Z(){if($.size>0)await Oe($),$.clear()}async function Ot(e,t){if(e.watch)await Fe(e,t);else await v(e,t)}Ct().catch((e)=>ne(e));export{Z as validateDtsFiles,Ct as main};
package/build/index.js CHANGED
@@ -1,26 +1,26 @@
1
- var We=require("node:module");var _e=Object.create;var{getPrototypeOf:ve,defineProperty:w,getOwnPropertyNames:V,getOwnPropertyDescriptor:je}=Object,G=Object.prototype.hasOwnProperty;var R=(e,t,r)=>{r=e!=null?_e(ve(e)):{};let n=t||!e||!e.__esModule?w(r,"default",{value:e,enumerable:!0}):r;for(let s of V(e))if(!G.call(n,s))w(n,s,{get:()=>e[s],enumerable:!0});return n},U=new WeakMap,Ne=(e)=>{var t=U.get(e),r;if(t)return t;if(t=w({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function")V(e).map((n)=>!G.call(t,n)&&w(t,n,{get:()=>e[n],enumerable:!(r=je(e,n))||r.enumerable}));return U.set(e,t),t};var Fe=(e,t)=>{for(var r in t)w(e,r,{get:t[r],enumerable:!0,configurable:!0,set:(n)=>t[r]=()=>n})};var tt={};Fe(tt,{defineWorkspace:()=>X,defineConfig:()=>q,build:()=>Le});module.exports=Ne(tt);function q(e){return e}function X(e){return e}var le=require("rolldown"),ce=require("rolldown-plugin-dts");var H=!1;function K(e){H=e??!1}class x{static instance;loggedOnceMessages=new Set;MAX_LABEL_LENGTH=3;MAX_MESSAGE_LENGTH=25;colors={cli:"147",info:"245",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(!x.instance)x.instance=new x;return x.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:t,message:r,size:n,identifier:s,muted:i}){let o=" ".repeat(Math.max(0,this.MAX_LABEL_LENGTH-t.length)),a=i?`\x1B[38;5;${this.colors.info}m${r}\x1B[0m`:r;if(n){let[u,...l]=a.split(" "),d=" ".repeat(Math.max(0,this.MAX_MESSAGE_LENGTH-u.length)),c=s?` \x1B[48;5;${e};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${e}m${t}\x1B[0m ${o}${u}${d} \x1B[38;5;${this.colors.size}m${n}\x1B[0m ${l.join(" ")}${c}`}let m=s?` \x1B[48;5;${e};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${e}m${t}\x1B[0m ${o}${a}${m}`}output(e,t={},r=console.log){if(H)return;if(!this.shouldLog(t))return;if(t.verticalSpace)console.log("");if(r(e),t.verticalSpace)console.log("")}cli(e,t={}){let r=this.formatMessage({colorCode:this.colors.cli,label:this.labels.cli,message:e,identifier:t.identifier,muted:t.muted});this.output(r,t)}info(e,t={}){let r=this.formatMessage({colorCode:this.colors.info,label:this.labels.info,message:e,identifier:t.identifier,muted:t.muted});this.output(r,t)}warn(e,t={}){let r=this.formatMessage({colorCode:this.colors.warn,label:this.labels.warn,message:e,identifier:t.identifier,muted:t.muted});this.output(r,t,console.warn)}error(e,t={}){let r=this.formatMessage({colorCode:this.colors.error,label:this.labels.error,message:e,identifier:t.identifier,muted:t.muted});this.output(r,t,console.error)}progress(e,t,r,n){let s=String(e),i=this.colors.default,o,a,m={};if(typeof r==="string")o=r,a=n;else if(r)o=r.size,a=r.identifier,m=r;for(let[l,d]of Object.entries(this.colors.progress))if(s.includes(l)){i=d;break}let u=this.formatMessage({colorCode:i,label:s,message:t,size:o,identifier:a,muted:m.muted});this.output(u,m)}}var f=x.getInstance();class L extends Error{constructor(e){super(e);this.name="BunupError"}}class h extends L{constructor(e){super(e);this.name="BunupBuildError"}}class g extends L{constructor(e){super(e);this.name="BunupDTSBuildError"}}var p=(e)=>{if(e instanceof Error)return e.message;return String(e)};var M=R(require("node:fs/promises")),Y=R(require("node:path"));function O(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Q(e=8){let t="";while(t.length<e)t+=Math.random().toString(36).substring(2);return t.substring(0,e)}function Z(e,t){switch(e){case"esm":return b(t)?".js":".mjs";case"cjs":return b(t)?".cjs":".js";case"iife":return".global.js"}}function z(e,t){switch(e){case"esm":return b(t)?".d.ts":".d.mts";case"cjs":return b(t)?".d.cts":".d.ts";case"iife":return".d.ts"}}function A(e){return e==="node"||e==="bun"}function b(e){return e==="module"}function J(e){if(!e)return[];return Array.from(new Set([...Object.keys(e.dependencies||{}),...Object.keys(e.peerDependencies||{})]))}function _(e){if(e===0)return"0 B";let t=["B","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(1024));if(r===0)return`${e} ${t[r]}`;return`${(e/1024**r).toFixed(2)} ${t[r]}`}function y(e,t=3){return e.split("/").slice(-t).join("/")}async function ee(e,t){let r=Y.default.join(e,t);try{await M.default.rm(r,{recursive:!0,force:!0})}catch(n){throw new h(`Failed to clean output directory: ${n}`)}await M.default.mkdir(r,{recursive:!0})}function $(e){return[".ts",".mts",".cts",".tsx"].some((t)=>e.endsWith(t))}function te(e){return e.map((t)=>typeof t==="string"?new RegExp(`^${O(t)}($|\\/|\\\\)`):t)}function T(e,t){return te(e.external||[]).concat(J(t).map((r)=>new RegExp(`^${O(r)}($|\\/|\\\\)`)))}function P(e){return te(e.noExternal||[])}var ie=R(require("node:path")),ae=require("oxc-resolver");var re=require("ts-import-resolver");var S="\x00dts:",ne=(e,t,r)=>{return{name:"bunup:virtual-dts",async resolveId(n,s){if(v(n))return n;if(!s||!v(s))return null;let i=t.tsconfig?re.resolveTsImportPath({path:n,importer:C(s),tsconfig:t.tsconfig,rootDir:r}):null;if(!i)return null;let o=E(i);if(e.has(o))return B(o);return null},load(n){if(n.startsWith(S)){let s=C(n),i=e.get(s);if(i)return se.add(s),i}return null}}};function E(e){if(e.endsWith(".d.ts")||e.endsWith(".d.mts")||e.endsWith(".d.cts"))return e;return e.replace(/\.(ts|tsx|mts|cts)$/,".d.ts")}function v(e){return e.startsWith(S)}function C(e){return e.replace(S,"")}function B(e){return`${S}${e}`}var oe;function ue(e){return{name:"bunup:types-resolve",buildStart(){oe||=new ae.ResolverFactory({mainFields:["types","typings","module","main"],conditionNames:["types","typings","import","require"],extensions:[".d.ts",".d.mts",".d.cts",".ts",".mts",".cts"],modules:["node_modules","node_modules/@types"]})},async resolveId(t,r){if(t==="bun")return;let n=r?C(r):void 0;if(/\0/.test(t))return;if(e){if(!e.some((a)=>typeof a==="string"?a===t:a.test(t)))return}let s=n?ie.default.dirname(n):process.cwd(),{path:i}=await oe.async(s,t);return i}}}async function me(e,t,r,n,s,i){let o=E(e),a=B(o),m=T(r,n),u=P(r);try{let{output:l}=await le.build({input:a,output:{dir:r.outDir},write:!1,onwarn(d,c){if(["UNRESOLVED_IMPORT","CIRCULAR_DEPENDENCY","EMPTY_BUNDLE"].includes(d.code??""))return;c(d)},plugins:[ne(t,s,i),typeof r.dts==="object"&&"resolve"in r.dts&&ue(typeof r.dts.resolve==="boolean"?void 0:r.dts.resolve),ce.dts({dtsInput:!0,emitDtsOnly:!0})],external:(d)=>m.some((c)=>c.test(d))&&!u.some((c)=>c.test(d))});if(!l[0]?.code)return f.warn(`Generated empty declaration file for entry "${e}"`,{muted:!0}),"";return l[0].code}catch(l){throw new g(`DTS bundling failed for entry "${e}": ${p(l)}`)}}var fe=require("ts-import-resolver");var ke=/^\s*import\s+(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]/gm,Ue=/^\s*export\s+.*from\s+['"]([^'"]+)['"]/gm,Ve=/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Ge=/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,qe=/import\s+\w+\s*=\s*require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Xe=/\/\/\/\s*<reference\s+path\s*=\s*['"]([^'"]+)['"]\s*\/>/g,He=/\/\/\/\s*<reference\s+types\s*=\s*['"]([^'"]+)['"]\s*\/>/g;function Ke(e){let t=new Set,r=[ke,Ue,Ve,Ge,qe,Xe,He];for(let n of r){let s=e.matchAll(n);for(let i of s)if(i[1])t.add(i[1])}return t}async function de(e,t,r){let n=new Set([e]),s=[e];while(s.length){let i=s.pop();if(!i)continue;try{let o=await Bun.file(i).text(),a=Ke(o);for(let m of a){let u=t.tsconfig?fe.resolveTsImportPath({path:m,importer:i,tsconfig:t.tsconfig,rootDir:r}):null;if(!u)continue;if(!n.has(u))n.add(u),s.push(u)}}catch(o){f.warn(`Error processing ${i}: ${p(o)}`)}}return n}var ge=require("oxc-transform");async function pe(e){let t=new Map;return await Promise.all([...e].map(async(r)=>{try{let n=E(r);if(!await Bun.file(r).exists())return;let i=await Bun.file(r).text(),{code:o}=ge.isolatedDeclaration(r,i);if(o)t.set(n,o)}catch(n){f.warn(`Failed to generate declaration for ${r}: ${p(n)}`)}})),t}var j=R(require("node:fs/promises")),D=R(require("node:path")),Ye=require("oxc-transform");async function xe(e,t){let r=D.default.resolve(e),n=D.default.resolve(r,t);if(!await j.default.exists(r))throw new g(`Root directory does not exist: ${r}`);if(!await Bun.file(n).exists())throw new g(`Entry file does not exist: ${n}`);if(!$(n))throw new g(`Entry file must be a TypeScript file: ${n}`);if(D.default.relative(r,n).startsWith(".."))throw new g(`Entry file must be within rootDir: ${n}`);return{absoluteRootDir:r,absoluteEntry:n}}async function he(e,t,r,n,s){let{absoluteEntry:i}=await xe(e,t),o=await de(i,n,e),a=await pe(o);return me(i,a,r,s,n,e)}function be(e){return e.split("/").pop()?.split(".").slice(0,-1).join(".")||""}function N(e,{warnOnConflict:t=!0}={}){let r=[],n=new Set,s={};function i(o,a){if(n.has(o)){let m=Q(),u=`${o}_${m}`;if(t)f.warn(`Output name conflict: "${o}" is used by multiple files.
1
+ var Ge=require("node:module");var Fe=Object.create;var{getPrototypeOf:ke,defineProperty:w,getOwnPropertyNames:X,getOwnPropertyDescriptor:We}=Object,H=Object.prototype.hasOwnProperty;var C=(e,r,t)=>{t=e!=null?Fe(ke(e)):{};let n=r||!e||!e.__esModule?w(t,"default",{value:e,enumerable:!0}):t;for(let i of X(e))if(!H.call(n,i))w(n,i,{get:()=>e[i],enumerable:!0});return n},q=new WeakMap,Ue=(e)=>{var r=q.get(e),t;if(r)return r;if(r=w({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function")X(e).map((n)=>!H.call(r,n)&&w(r,n,{get:()=>e[n],enumerable:!(t=We(e,n))||t.enumerable}));return q.set(e,r),r};var Ve=(e,r)=>{for(var t in r)w(e,t,{get:r[t],enumerable:!0,configurable:!0,set:(n)=>r[t]=()=>n})};var st={};Ve(st,{defineWorkspace:()=>Y,defineConfig:()=>K,build:()=>Ae});module.exports=Ue(st);function K(e){return e}function Y(e){return e}var fe=require("rolldown"),ge=require("rolldown-plugin-dts");var v=!1;function J(e){v=e??!1}class h{static instance;loggedOnceMessages=new Set;MAX_LABEL_LENGTH=3;MAX_MESSAGE_LENGTH=25;colors={cli:"147",info:"245",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(!h.instance)h.instance=new h;return h.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:t,size:n,identifier:i,muted:o}){let s=" ".repeat(Math.max(0,this.MAX_LABEL_LENGTH-r.length)),a=o?`\x1B[38;5;${this.colors.info}m${t}\x1B[0m`:t;if(n){let[c,...l]=a.split(" "),g=" ".repeat(Math.max(0,this.MAX_MESSAGE_LENGTH-c.length)),m=i?` \x1B[48;5;${e};38;5;0m ${i} \x1B[0m`:"";return`\x1B[38;5;${e}m${r}\x1B[0m ${s}${c}${g} \x1B[38;5;${this.colors.size}m${n}\x1B[0m ${l.join(" ")}${m}`}let u=i?` \x1B[48;5;${e};38;5;0m ${i} \x1B[0m`:"";return`\x1B[38;5;${e}m${r}\x1B[0m ${s}${a}${u}`}output(e,r={},t=console.log){if(v)return;if(!this.shouldLog(r))return;if(r.verticalSpace)console.log("");if(t(e),r.verticalSpace)console.log("")}cli(e,r={}){let t=this.formatMessage({colorCode:this.colors.cli,label:this.labels.cli,message:e,identifier:r.identifier,muted:r.muted});this.output(t,r)}info(e,r={}){let t=this.formatMessage({colorCode:this.colors.info,label:this.labels.info,message:e,identifier:r.identifier,muted:r.muted});this.output(t,r)}warn(e,r={}){let t=this.formatMessage({colorCode:this.colors.warn,label:this.labels.warn,message:e,identifier:r.identifier,muted:r.muted});this.output(t,r,console.warn)}error(e,r={}){let t=this.formatMessage({colorCode:this.colors.error,label:this.labels.error,message:e,identifier:r.identifier,muted:r.muted});this.output(t,r,console.error)}progress(e,r,t,n){let i=String(e),o=this.colors.default,s,a,u={};if(typeof t==="string")s=t,a=n;else if(t)s=t.size,a=t.identifier,u=t;for(let[l,g]of Object.entries(this.colors.progress))if(i.includes(l)){o=g;break}let c=this.formatMessage({colorCode:o,label:i,message:r,size:s,identifier:a,muted:u.muted});this.output(c,u)}}var f=h.getInstance();class L extends Error{constructor(e){super(e);this.name="BunupError"}}class b extends L{constructor(e){super(e);this.name="BunupBuildError"}}class p extends L{constructor(e){super(e);this.name="BunupDTSBuildError"}}var d=(e)=>{if(e instanceof Error)return e.message;return String(e)};var I=C(require("node:fs/promises")),Q=C(require("node:path"));function M(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 y(r)?".js":".mjs";case"cjs":return y(r)?".cjs":".js";case"iife":return".global.js"}}function ee(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 te(e){if(!e)return[];return Array.from(new Set([...Object.keys(e.dependencies||{}),...Object.keys(e.peerDependencies||{})]))}function j(e){if(e===0)return"0 B";let r=["B","KB","MB","GB"],t=Math.floor(Math.log(e)/Math.log(1024));if(t===0)return`${e} ${r[t]}`;return`${(e/1024**t).toFixed(2)} ${r[t]}`}function E(e,r=3){return e.split("/").slice(-r).join("/")}async function re(e,r){let t=Q.default.join(e,r);try{await I.default.rm(t,{recursive:!0,force:!0})}catch(n){throw new b(`Failed to clean output directory: ${n}`)}await I.default.mkdir(t,{recursive:!0})}function S(e){return[".ts",".mts",".cts",".tsx"].some((r)=>e.endsWith(r))}function ne(e){return e.map((r)=>typeof r==="string"?new RegExp(`^${M(r)}($|\\/|\\\\)`):r)}function T(e,r){return ne(e.external||[]).concat(te(r).map((t)=>new RegExp(`^${M(t)}($|\\/|\\\\)`)))}function B(e){return ne(e.noExternal||[])}var F=C(require("node:path")),le=require("oxc-resolver");var se=require("ts-import-resolver");var $="\x00dts:",ie=(e,r,t)=>{return{name:"bunup:virtual-dts",async resolveId(n,i){if(_(n))return n;if(!i||!_(i))return null;let o=r.tsconfig?se.resolveTsImportPath({path:n,importer:R(i),tsconfig:r.tsconfig,rootDir:t}):null;if(!o)return null;let s=x(o);if(e.has(s))return P(s);return null},load(n){if(n.startsWith($)){let i=R(n),o=e.get(i);if(o)return oe.add(i),o}return null}}};function ae(e){return e.tsconfig.compilerOptions??{}}function ue(e){return e.endsWith(".d.ts")||e.endsWith(".d.mts")||e.endsWith(".d.cts")}function ce(e){return/\.(js|mjs|cjs|ts|mts|cts|tsx|jsx)$/.test(e)&&!ue(e)}function x(e){if(ue(e))return e;return e.replace(/\.(ts|tsx|mts|cts|js|jsx|mjs|cjs)$/,".d.ts")}function _(e){return e.startsWith($)}function R(e){return e.replace($,"")}function P(e){return`${$}${e}`}var N;function me(e,r){return{name:"bunup:types-resolve",buildStart(){N||=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(t,n){if(t==="bun")return;let i=n?R(n):void 0;if(/\0/.test(t))return;if(r){if(!r.some((u)=>typeof u==="string"?u===t:u.test(t)))return}let o=i?F.default.dirname(i):process.cwd(),{path:s}=await N.async(o,t);if(!s)return;if(ce(s)){let a=x(s);try{let{path:u}=await N.async(F.default.dirname(s),a);if(u)return u}catch(u){}return}return s}}}async function pe(e,r,t,n,i,o){let s=x(e),a=P(s),u=T(t,n),c=B(t);try{let{output:l}=await fe.build({input:a,output:{dir:t.outDir},write:!1,onwarn(g,m){if(["UNRESOLVED_IMPORT","CIRCULAR_DEPENDENCY","EMPTY_BUNDLE"].includes(g.code??""))return;m(g)},plugins:[ie(r,i,o),typeof t.dts==="object"&&"resolve"in t.dts&&me(i,typeof t.dts.resolve==="boolean"?void 0:t.dts.resolve),ge.dts({dtsInput:!0,emitDtsOnly:!0,compilerOptions:{...ae(i),declaration:!0,noEmit:!1,emitDeclarationOnly:!0,noEmitOnError:!0,checkJs:!1,declarationMap:!1,skipLibCheck:!0,preserveSymlinks:!1,target:99}})],external:(g)=>u.some((m)=>m.test(g))&&!c.some((m)=>m.test(g))});if(!l[0]?.code)return f.warn(`Generated empty declaration file for entry "${e}"`,{muted:!0}),"";return l[0].code}catch(l){throw new p(`DTS bundling failed for entry "${e}": ${d(l)}`)}}var de=require("ts-import-resolver");var qe=/^\s*import\s+(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]/gm,Xe=/^\s*export\s+.*from\s+['"]([^'"]+)['"]/gm,He=/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Ke=/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Ye=/import\s+\w+\s*=\s*require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,ve=/\/\/\/\s*<reference\s+path\s*=\s*['"]([^'"]+)['"]\s*\/>/g,Je=/\/\/\/\s*<reference\s+types\s*=\s*['"]([^'"]+)['"]\s*\/>/g;function Qe(e){let r=new Set,t=[qe,Xe,He,Ke,Ye,ve,Je];for(let n of t){let i=e.matchAll(n);for(let o of i)if(o[1])r.add(o[1])}return r}async function xe(e,r,t){let n=new Set([e]),i=[e];while(i.length){let o=i.pop();if(!o)continue;try{let s=await Bun.file(o).text(),a=Qe(s);for(let u of a){let c=r.tsconfig?de.resolveTsImportPath({path:u,importer:o,tsconfig:r.tsconfig,rootDir:t}):null;if(!c)continue;if(!n.has(c))n.add(c),i.push(c)}}catch(s){f.warn(`Error processing ${o}: ${d(s)}`)}}return n}var he=require("oxc-transform");async function be(e){let r=new Map;return await Promise.all([...e].map(async(t)=>{try{let n=x(t);if(!await Bun.file(t).exists())return;let o=await Bun.file(t).text(),{code:s}=he.isolatedDeclaration(t,o);if(s)r.set(n,s)}catch(n){f.warn(`Failed to generate declaration for ${t}: ${d(n)}`)}})),r}var k=C(require("node:fs/promises")),D=C(require("node:path")),Ze=require("oxc-transform");async function ye(e,r){let t=D.default.resolve(e),n=D.default.resolve(t,r);if(!await k.default.exists(t))throw new p(`Root directory does not exist: ${t}`);if(!await Bun.file(n).exists())throw new p(`Entry file does not exist: ${n}`);if(!S(n))throw new p(`Entry file must be a TypeScript file: ${n}`);if(D.default.relative(t,n).startsWith(".."))throw new p(`Entry file must be within rootDir: ${n}`);return{absoluteRootDir:t,absoluteEntry:n}}async function Ee(e,r,t,n,i){let{absoluteEntry:o}=await ye(e,r),s=await xe(o,n,e),a=await be(s);return pe(o,a,t,i,n,e)}function we(e){return e.split("/").pop()?.split(".").slice(0,-1).join(".")||""}function W(e,{warnOnConflict:r=!0}={}){let t=[],n=new Set,i={};function o(s,a){if(n.has(s)){let u=Z(),c=`${s}_${u}`;if(r)f.warn(`Output name conflict: "${s}" is used by multiple files.
2
2
  Bunup uses filenames without extensions as output names by default.
3
3
 
4
- ${s[o]} -> ${o}.js
5
- ${a} -> ${u}.js (auto-renamed to avoid conflict)
4
+ ${i[s]} -> ${s}.js
5
+ ${a} -> ${c}.js (auto-renamed to avoid conflict)
6
6
 
7
7
  To fix this, use named entries in your configuration:
8
8
  {
9
9
  entry: {
10
- custom_name: "${s[o]}",
10
+ custom_name: "${i[s]}",
11
11
  another_name: "${a}"
12
12
  }
13
13
  }
14
14
 
15
- See: https://bunup.arshadyaseen.com/documentation/#named-entries`,{muted:!0,verticalSpace:!0});r.push({name:u,path:a})}else r.push({name:o,path:a}),n.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 r}function ye(e){return e.filter((t)=>$(t.path))}function Ee(e,t){return`[dir]/${e}${t}`}var F=require("coffi");async function we(e){let{config:t,filepath:r}=await F.loadConfig({name:"package",cwd:e,extensions:[".json"],maxDepth:3});return{packageJson:t,path:r}}async function Re(e,t){let{config:r,filepath:n}=await F.loadConfig({name:"tsconfig",cwd:e,extensions:[".json"],preferredPath:t,maxDepth:3});return{tsconfig:r,path:n}}var Qe={entry:[],format:["cjs"],outDir:"dist",target:"node",clean:!0};function Ce(e){return{...Qe,...e}}function Se(e){let{minify:t,minifyWhitespace:r,minifyIdentifiers:n,minifySyntax:s}=e,i=t===!0;return{whitespace:r??i,identifiers:n??i,syntax:s??i}}function $e(e,t){return t==="cjs"?e:void 0}function Te(e,t,r,n){return{...typeof r==="object"&&Object.keys(r).reduce((s,i)=>{let o=JSON.stringify(r[i]);return s[`process.env.${i}`]=o,s[`import.meta.env.${i}`]=o,s},{}),...e,...n==="cjs"&&(t===!0||typeof t==="object"&&t.importMetaUrl)&&{"import.meta.url":"importMetaUrl"}}}function Pe(e,t){return e===void 0?t==="esm":e}function Be(e){return typeof e==="string"?e:void 0}function De(e,t){return{name:"bunup:external-plugin",setup(r){r.onResolve({filter:/.*/},(n)=>{let s=n.path;if(e.some((o)=>o.test(s))&&!t.some((o)=>o.test(s)))return{path:s,external:!0};return null})}}}var Ze=/\.(js|ts|jsx|tsx|mts|cts)$/,W={dirnameFilename:{appliesTo:(e,t)=>e==="esm"&&A(t),isNeededInFile:(e)=>/\b__dirname\b/.test(e)||/\b__filename\b/.test(e),generateCode:()=>`import { fileURLToPath } from 'url';
15
+ See: https://bunup.arshadyaseen.com/documentation/#named-entries`,{muted:!0,verticalSpace:!0});t.push({name:c,path:a})}else t.push({name:s,path:a}),n.add(s),i[s]=a}if(Array.isArray(e))for(let s of e){let a=we(s);o(a,s)}else if(typeof e==="object")for(let[s,a]of Object.entries(e))o(s,a);else{let s=we(e);o(s,e)}return t}function Ce(e){return e.filter((r)=>S(r.path))}function Re(e,r){return`[dir]/${e}${r}`}var U=require("coffi");async function $e(e){let{config:r,filepath:t}=await U.loadConfig({name:"package",cwd:e,extensions:[".json"],maxDepth:3});return{packageJson:r,path:t}}async function Se(e,r){let{config:t,filepath:n}=await U.loadConfig({name:"tsconfig",cwd:e,extensions:[".json"],preferredPath:r,maxDepth:3});return{tsconfig:t,path:n}}var ze={entry:[],format:["cjs"],outDir:"dist",target:"node",clean:!0};function Te(e){return{...ze,...e}}function Be(e){let{minify:r,minifyWhitespace:t,minifyIdentifiers:n,minifySyntax:i}=e,o=r===!0;return{whitespace:t??o,identifiers:n??o,syntax:i??o}}function Pe(e,r){return r==="cjs"?e:void 0}function De(e,r,t,n){return{...typeof t==="object"&&Object.keys(t).reduce((i,o)=>{let s=JSON.stringify(t[o]);return i[`process.env.${o}`]=s,i[`import.meta.env.${o}`]=s,i},{}),...e,...n==="cjs"&&(r===!0||typeof r==="object"&&r.importMetaUrl)&&{"import.meta.url":"importMetaUrl"}}}function Oe(e,r){return e===void 0?r==="esm":e}function Le(e){return typeof e==="string"?e:void 0}function Ie(e,r){return{name:"bunup:external-plugin",setup(t){t.onResolve({filter:/.*/},(n)=>{let i=n.path;if(e.some((s)=>s.test(i))&&!r.some((s)=>s.test(i)))return{path:i,external:!0};return null})}}}var et=/\.(js|ts|jsx|tsx|mts|cts)$/,V={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';
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,t)=>e==="cjs"&&A(t),isNeededInFile:(e)=>/\bimport\.meta\.url\b/.test(e),generateCode:()=>`import { pathToFileURL } from 'url';
21
+ `},importMetaUrl:{appliesTo:(e,r)=>e==="cjs"&&A(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 Ie({format:e,target:t,shims:r}){let s=ze(r).map((i)=>W[i]).filter((i)=>i.appliesTo(e,t));if(s.length===0)return{name:"bunup:inject-shims",setup(){}};return{name:"bunup:inject-shims",setup(i){i.onLoad({filter:Ze},async({path:o})=>{let a=await Bun.file(o).text(),m=s.filter((c)=>c.isNeededInFile(a));if(m.length===0)return;let{shebangLine:u,codeContent:l}=Je(a),d=m.map((c)=>c.generateCode()).join("");return{contents:u+d+l}})}}}function ze(e){if(e===!0)return Object.keys(W);if(!e)return[];return Object.entries(e).filter(([t,r])=>r&&(t in W)).map(([t])=>t)}function Je(e){if(!e.startsWith("#!"))return{shebangLine:"",codeContent:e};let t=e.indexOf(`
26
- `);return t===-1?{shebangLine:"",codeContent:e}:{shebangLine:e.slice(0,t+1),codeContent:e.slice(t+1)}}var se=new Set;async function Le(e,t){let r=Ce(e);if(!r.entry||r.entry.length===0||!r.outDir)throw new h("Nothing to build. Please make sure you have provided a proper bunup configuration or cli arguments.");if(r.clean)ee(t,r.outDir);K(r.silent);let{packageJson:n,path:s}=await we(t);if(n&&s)f.cli(`Using package.json: ${y(s,2)}`,{muted:!0,identifier:r.name,once:`${s}:${r.name}`});let i=N(r.entry),o=n?.type,a=T(r,n),m=P(r);if(!r.dtsOnly){let u=[De(a,m)],l=r.format.flatMap((d)=>i.map((c)=>{return et(r,t,c,d,o,u)}));await Promise.all(l)}if(r.dts||r.dtsOnly){let u=await Re(t,r.preferredTsconfigPath);if(u.path)f.cli(`Using tsconfig: ${y(u.path,2)}`,{muted:!0,identifier:r.name,once:`${u.path}:${r.name}`});let l=r.format.filter((c)=>{if(c==="iife"&&!b(o)&&r.format.includes("cjs"))return!1;return!0}),d=typeof r.dts==="object"&&r.dts.entry?N(r.dts.entry):ye(i);try{await Promise.all(d.map(async(c)=>{let Me=await he(t,c.path,r,u,n);await Promise.all(l.map(async(k)=>{let Oe=r.outputExtension?.({format:k,packageType:o,options:r,entry:c}).dts??z(k,o),I=`${t}/${r.outDir}/${c.name}${Oe}`;await Bun.write(I,Me);let Ae=Bun.file(I).size||0;f.progress("DTS",y(I),_(Ae),r.name)}))}))}catch(c){throw new g(p(c))}}if(r.onBuildSuccess)await r.onBuildSuccess(r)}async function et(e,t,r,n,s,i){let o=e.outputExtension?.({format:n,packageType:s,options:e,entry:r}).js??Z(n,s),a=await Bun.build({entrypoints:[`${t}/${r.path}`],format:n,naming:{entry:Ee(r.name,o)},splitting:Pe(e.splitting,n),bytecode:$e(e.bytecode,n),define:Te(e.define,e.shims,e.env,n),minify:Se(e),outdir:`${t}/${e.outDir}`,target:e.target,sourcemap:e.sourcemap,loader:e.loader,drop:e.drop,banner:e.banner,footer:e.footer,publicPath:e.publicPath,env:Be(e.env),plugins:[...i,Ie({format:n,target:e.target,shims:e.shims}),...e.bunBuildPlugins??[]],throw:!1});if(!a.success)for(let l of a.logs){if(l.level==="error")throw new h(l.message);if(l.level==="warning")f.warn(l.message);else if(l.level==="info")f.info(l.message)}let m=`${t}/${e.outDir}/${r.name}${o}`,u=Bun.file(m).size||0;f.progress(n.toUpperCase(),y(m),_(u),e.name)}
25
+ `}};function Me({format:e,target:r,shims:t}){let i=tt(t).map((o)=>V[o]).filter((o)=>o.appliesTo(e,r));if(i.length===0)return{name:"bunup:inject-shims",setup(){}};return{name:"bunup:inject-shims",setup(o){o.onLoad({filter:et},async({path:s})=>{let a=await Bun.file(s).text(),u=i.filter((m)=>m.isNeededInFile(a));if(u.length===0)return;let{shebangLine:c,codeContent:l}=rt(a),g=u.map((m)=>m.generateCode()).join("");return{contents:c+g+l}})}}}function tt(e){if(e===!0)return Object.keys(V);if(!e)return[];return Object.entries(e).filter(([r,t])=>t&&(r in V)).map(([r])=>r)}function rt(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)}}var oe=new Set;async function Ae(e,r){let t=Te(e);if(!t.entry||t.entry.length===0||!t.outDir)throw new b("Nothing to build. Please make sure you have provided a proper bunup configuration or cli arguments.");if(t.clean)re(r,t.outDir);J(t.silent);let{packageJson:n,path:i}=await $e(r);if(n&&i)f.cli(`Using package.json: ${E(i,2)}`,{muted:!0,identifier:t.name,once:`${i}:${t.name}`});let o=W(t.entry),s=n?.type,a=T(t,n),u=B(t);if(!t.dtsOnly){let c=[Ie(a,u)],l=t.format.flatMap((g)=>o.map((m)=>{return nt(t,r,m,g,s,c)}));await Promise.all(l)}if(t.dts||t.dtsOnly){let c=await Se(r,t.preferredTsconfigPath);if(c.path)f.cli(`Using tsconfig: ${E(c.path,2)}`,{muted:!0,identifier:t.name,once:`${c.path}:${t.name}`});let l=t.format.filter((m)=>{if(m==="iife"&&!y(s)&&t.format.includes("cjs"))return!1;return!0}),g=typeof t.dts==="object"&&t.dts.entry?W(t.dts.entry):Ce(o);try{await Promise.all(g.map(async(m)=>{let je=await Ee(r,m.path,t,c,n);await Promise.all(l.map(async(G)=>{let _e=t.outputExtension?.({format:G,packageType:s,options:t,entry:m}).dts??ee(G,s),O=`${r}/${t.outDir}/${m.name}${_e}`;await Bun.write(O,je);let Ne=Bun.file(O).size||0;f.progress("DTS",E(O),j(Ne),t.name)}))}))}catch(m){throw new p(d(m))}}if(t.onBuildSuccess)await t.onBuildSuccess(t)}async function nt(e,r,t,n,i,o){let s=e.outputExtension?.({format:n,packageType:i,options:e,entry:t}).js??z(n,i),a=await Bun.build({entrypoints:[`${r}/${t.path}`],format:n,naming:{entry:Re(t.name,s)},splitting:Oe(e.splitting,n),bytecode:Pe(e.bytecode,n),define:De(e.define,e.shims,e.env,n),minify:Be(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:Le(e.env),plugins:[...o,Me({format:n,target:e.target,shims:e.shims}),...e.bunBuildPlugins??[]],throw:!1});if(!a.success)for(let l of a.logs){if(l.level==="error")throw new b(l.message);if(l.level==="warning")f.warn(l.message);else if(l.level==="info")f.info(l.message)}let u=`${r}/${e.outDir}/${t.name}${s}`,c=Bun.file(u).size||0;f.progress(n.toUpperCase(),E(u),j(c),e.name)}
package/build/index.mjs CHANGED
@@ -1,26 +1,26 @@
1
- function ye(e){return e}function Ee(e){return e}import{build as $e}from"rolldown";import{dts as Te}from"rolldown-plugin-dts";var j=!1;function N(e){j=e??!1}class x{static instance;loggedOnceMessages=new Set;MAX_LABEL_LENGTH=3;MAX_MESSAGE_LENGTH=25;colors={cli:"147",info:"245",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(!x.instance)x.instance=new x;return x.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:t,message:r,size:n,identifier:o,muted:i}){let s=" ".repeat(Math.max(0,this.MAX_LABEL_LENGTH-t.length)),a=i?`\x1B[38;5;${this.colors.info}m${r}\x1B[0m`:r;if(n){let[u,...l]=a.split(" "),d=" ".repeat(Math.max(0,this.MAX_MESSAGE_LENGTH-u.length)),c=o?` \x1B[48;5;${e};38;5;0m ${o} \x1B[0m`:"";return`\x1B[38;5;${e}m${t}\x1B[0m ${s}${u}${d} \x1B[38;5;${this.colors.size}m${n}\x1B[0m ${l.join(" ")}${c}`}let m=o?` \x1B[48;5;${e};38;5;0m ${o} \x1B[0m`:"";return`\x1B[38;5;${e}m${t}\x1B[0m ${s}${a}${m}`}output(e,t={},r=console.log){if(j)return;if(!this.shouldLog(t))return;if(t.verticalSpace)console.log("");if(r(e),t.verticalSpace)console.log("")}cli(e,t={}){let r=this.formatMessage({colorCode:this.colors.cli,label:this.labels.cli,message:e,identifier:t.identifier,muted:t.muted});this.output(r,t)}info(e,t={}){let r=this.formatMessage({colorCode:this.colors.info,label:this.labels.info,message:e,identifier:t.identifier,muted:t.muted});this.output(r,t)}warn(e,t={}){let r=this.formatMessage({colorCode:this.colors.warn,label:this.labels.warn,message:e,identifier:t.identifier,muted:t.muted});this.output(r,t,console.warn)}error(e,t={}){let r=this.formatMessage({colorCode:this.colors.error,label:this.labels.error,message:e,identifier:t.identifier,muted:t.muted});this.output(r,t,console.error)}progress(e,t,r,n){let o=String(e),i=this.colors.default,s,a,m={};if(typeof r==="string")s=r,a=n;else if(r)s=r.size,a=r.identifier,m=r;for(let[l,d]of Object.entries(this.colors.progress))if(o.includes(l)){i=d;break}let u=this.formatMessage({colorCode:i,label:o,message:t,size:s,identifier:a,muted:m.muted});this.output(u,m)}}var f=x.getInstance();class B extends Error{constructor(e){super(e);this.name="BunupError"}}class h extends B{constructor(e){super(e);this.name="BunupBuildError"}}class g extends B{constructor(e){super(e);this.name="BunupDTSBuildError"}}var p=(e)=>{if(e instanceof Error)return e.message;return String(e)};import F from"node:fs/promises";import we from"node:path";function D(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function W(e=8){let t="";while(t.length<e)t+=Math.random().toString(36).substring(2);return t.substring(0,e)}function k(e,t){switch(e){case"esm":return b(t)?".js":".mjs";case"cjs":return b(t)?".cjs":".js";case"iife":return".global.js"}}function U(e,t){switch(e){case"esm":return b(t)?".d.ts":".d.mts";case"cjs":return b(t)?".d.cts":".d.ts";case"iife":return".d.ts"}}function I(e){return e==="node"||e==="bun"}function b(e){return e==="module"}function V(e){if(!e)return[];return Array.from(new Set([...Object.keys(e.dependencies||{}),...Object.keys(e.peerDependencies||{})]))}function L(e){if(e===0)return"0 B";let t=["B","KB","MB","GB"],r=Math.floor(Math.log(e)/Math.log(1024));if(r===0)return`${e} ${t[r]}`;return`${(e/1024**r).toFixed(2)} ${t[r]}`}function y(e,t=3){return e.split("/").slice(-t).join("/")}async function G(e,t){let r=we.join(e,t);try{await F.rm(r,{recursive:!0,force:!0})}catch(n){throw new h(`Failed to clean output directory: ${n}`)}await F.mkdir(r,{recursive:!0})}function C(e){return[".ts",".mts",".cts",".tsx"].some((t)=>e.endsWith(t))}function q(e){return e.map((t)=>typeof t==="string"?new RegExp(`^${D(t)}($|\\/|\\\\)`):t)}function S(e,t){return q(e.external||[]).concat(V(t).map((r)=>new RegExp(`^${D(r)}($|\\/|\\\\)`)))}function $(e){return q(e.noExternal||[])}import Ce from"node:path";import{ResolverFactory as Se}from"oxc-resolver";import{resolveTsImportPath as Re}from"ts-import-resolver";var R="\x00dts:",X=(e,t,r)=>{return{name:"bunup:virtual-dts",async resolveId(n,o){if(M(n))return n;if(!o||!M(o))return null;let i=t.tsconfig?Re({path:n,importer:w(o),tsconfig:t.tsconfig,rootDir:r}):null;if(!i)return null;let s=E(i);if(e.has(s))return T(s);return null},load(n){if(n.startsWith(R)){let o=w(n),i=e.get(o);if(i)return H.add(o),i}return null}}};function E(e){if(e.endsWith(".d.ts")||e.endsWith(".d.mts")||e.endsWith(".d.cts"))return e;return e.replace(/\.(ts|tsx|mts|cts)$/,".d.ts")}function M(e){return e.startsWith(R)}function w(e){return e.replace(R,"")}function T(e){return`${R}${e}`}var K;function Y(e){return{name:"bunup:types-resolve",buildStart(){K||=new Se({mainFields:["types","typings","module","main"],conditionNames:["types","typings","import","require"],extensions:[".d.ts",".d.mts",".d.cts",".ts",".mts",".cts"],modules:["node_modules","node_modules/@types"]})},async resolveId(t,r){if(t==="bun")return;let n=r?w(r):void 0;if(/\0/.test(t))return;if(e){if(!e.some((a)=>typeof a==="string"?a===t:a.test(t)))return}let o=n?Ce.dirname(n):process.cwd(),{path:i}=await K.async(o,t);return i}}}async function Q(e,t,r,n,o,i){let s=E(e),a=T(s),m=S(r,n),u=$(r);try{let{output:l}=await $e({input:a,output:{dir:r.outDir},write:!1,onwarn(d,c){if(["UNRESOLVED_IMPORT","CIRCULAR_DEPENDENCY","EMPTY_BUNDLE"].includes(d.code??""))return;c(d)},plugins:[X(t,o,i),typeof r.dts==="object"&&"resolve"in r.dts&&Y(typeof r.dts.resolve==="boolean"?void 0:r.dts.resolve),Te({dtsInput:!0,emitDtsOnly:!0})],external:(d)=>m.some((c)=>c.test(d))&&!u.some((c)=>c.test(d))});if(!l[0]?.code)return f.warn(`Generated empty declaration file for entry "${e}"`,{muted:!0}),"";return l[0].code}catch(l){throw new g(`DTS bundling failed for entry "${e}": ${p(l)}`)}}import{resolveTsImportPath as Pe}from"ts-import-resolver";var Be=/^\s*import\s+(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]/gm,De=/^\s*export\s+.*from\s+['"]([^'"]+)['"]/gm,Ie=/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Le=/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Me=/import\s+\w+\s*=\s*require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Oe=/\/\/\/\s*<reference\s+path\s*=\s*['"]([^'"]+)['"]\s*\/>/g,Ae=/\/\/\/\s*<reference\s+types\s*=\s*['"]([^'"]+)['"]\s*\/>/g;function _e(e){let t=new Set,r=[Be,De,Ie,Le,Me,Oe,Ae];for(let n of r){let o=e.matchAll(n);for(let i of o)if(i[1])t.add(i[1])}return t}async function Z(e,t,r){let n=new Set([e]),o=[e];while(o.length){let i=o.pop();if(!i)continue;try{let s=await Bun.file(i).text(),a=_e(s);for(let m of a){let u=t.tsconfig?Pe({path:m,importer:i,tsconfig:t.tsconfig,rootDir:r}):null;if(!u)continue;if(!n.has(u))n.add(u),o.push(u)}}catch(s){f.warn(`Error processing ${i}: ${p(s)}`)}}return n}import{isolatedDeclaration as ve}from"oxc-transform";async function z(e){let t=new Map;return await Promise.all([...e].map(async(r)=>{try{let n=E(r);if(!await Bun.file(r).exists())return;let i=await Bun.file(r).text(),{code:s}=ve(r,i);if(s)t.set(n,s)}catch(n){f.warn(`Failed to generate declaration for ${r}: ${p(n)}`)}})),t}import J from"node:fs/promises";import O from"node:path";import{isolatedDeclaration as It}from"oxc-transform";async function ee(e,t){let r=O.resolve(e),n=O.resolve(r,t);if(!await J.exists(r))throw new g(`Root directory does not exist: ${r}`);if(!await Bun.file(n).exists())throw new g(`Entry file does not exist: ${n}`);if(!C(n))throw new g(`Entry file must be a TypeScript file: ${n}`);if(O.relative(r,n).startsWith(".."))throw new g(`Entry file must be within rootDir: ${n}`);return{absoluteRootDir:r,absoluteEntry:n}}async function te(e,t,r,n,o){let{absoluteEntry:i}=await ee(e,t),s=await Z(i,n,e),a=await z(s);return Q(i,a,r,o,n,e)}function re(e){return e.split("/").pop()?.split(".").slice(0,-1).join(".")||""}function A(e,{warnOnConflict:t=!0}={}){let r=[],n=new Set,o={};function i(s,a){if(n.has(s)){let m=W(),u=`${s}_${m}`;if(t)f.warn(`Output name conflict: "${s}" is used by multiple files.
1
+ function Re(e){return e}function $e(e){return e}import{build as Pe}from"rolldown";import{dts as De}from"rolldown-plugin-dts";var F=!1;function k(e){F=e??!1}class h{static instance;loggedOnceMessages=new Set;MAX_LABEL_LENGTH=3;MAX_MESSAGE_LENGTH=25;colors={cli:"147",info:"245",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(!h.instance)h.instance=new h;return h.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:t,size:n,identifier:i,muted:o}){let s=" ".repeat(Math.max(0,this.MAX_LABEL_LENGTH-r.length)),a=o?`\x1B[38;5;${this.colors.info}m${t}\x1B[0m`:t;if(n){let[c,...l]=a.split(" "),g=" ".repeat(Math.max(0,this.MAX_MESSAGE_LENGTH-c.length)),m=i?` \x1B[48;5;${e};38;5;0m ${i} \x1B[0m`:"";return`\x1B[38;5;${e}m${r}\x1B[0m ${s}${c}${g} \x1B[38;5;${this.colors.size}m${n}\x1B[0m ${l.join(" ")}${m}`}let u=i?` \x1B[48;5;${e};38;5;0m ${i} \x1B[0m`:"";return`\x1B[38;5;${e}m${r}\x1B[0m ${s}${a}${u}`}output(e,r={},t=console.log){if(F)return;if(!this.shouldLog(r))return;if(r.verticalSpace)console.log("");if(t(e),r.verticalSpace)console.log("")}cli(e,r={}){let t=this.formatMessage({colorCode:this.colors.cli,label:this.labels.cli,message:e,identifier:r.identifier,muted:r.muted});this.output(t,r)}info(e,r={}){let t=this.formatMessage({colorCode:this.colors.info,label:this.labels.info,message:e,identifier:r.identifier,muted:r.muted});this.output(t,r)}warn(e,r={}){let t=this.formatMessage({colorCode:this.colors.warn,label:this.labels.warn,message:e,identifier:r.identifier,muted:r.muted});this.output(t,r,console.warn)}error(e,r={}){let t=this.formatMessage({colorCode:this.colors.error,label:this.labels.error,message:e,identifier:r.identifier,muted:r.muted});this.output(t,r,console.error)}progress(e,r,t,n){let i=String(e),o=this.colors.default,s,a,u={};if(typeof t==="string")s=t,a=n;else if(t)s=t.size,a=t.identifier,u=t;for(let[l,g]of Object.entries(this.colors.progress))if(i.includes(l)){o=g;break}let c=this.formatMessage({colorCode:o,label:i,message:r,size:s,identifier:a,muted:u.muted});this.output(c,u)}}var f=h.getInstance();class P extends Error{constructor(e){super(e);this.name="BunupError"}}class b extends P{constructor(e){super(e);this.name="BunupBuildError"}}class p extends P{constructor(e){super(e);this.name="BunupDTSBuildError"}}var d=(e)=>{if(e instanceof Error)return e.message;return String(e)};import W from"node:fs/promises";import Se from"node:path";function D(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function U(e=8){let r="";while(r.length<e)r+=Math.random().toString(36).substring(2);return r.substring(0,e)}function V(e,r){switch(e){case"esm":return y(r)?".js":".mjs";case"cjs":return y(r)?".cjs":".js";case"iife":return".global.js"}}function G(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 O(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 L(e){if(e===0)return"0 B";let r=["B","KB","MB","GB"],t=Math.floor(Math.log(e)/Math.log(1024));if(t===0)return`${e} ${r[t]}`;return`${(e/1024**t).toFixed(2)} ${r[t]}`}function E(e,r=3){return e.split("/").slice(-r).join("/")}async function X(e,r){let t=Se.join(e,r);try{await W.rm(t,{recursive:!0,force:!0})}catch(n){throw new b(`Failed to clean output directory: ${n}`)}await W.mkdir(t,{recursive:!0})}function R(e){return[".ts",".mts",".cts",".tsx"].some((r)=>e.endsWith(r))}function H(e){return e.map((r)=>typeof r==="string"?new RegExp(`^${D(r)}($|\\/|\\\\)`):r)}function $(e,r){return H(e.external||[]).concat(q(r).map((t)=>new RegExp(`^${D(t)}($|\\/|\\\\)`)))}function S(e){return H(e.noExternal||[])}import Z from"node:path";import{ResolverFactory as Be}from"oxc-resolver";import{resolveTsImportPath as Te}from"ts-import-resolver";var C="\x00dts:",K=(e,r,t)=>{return{name:"bunup:virtual-dts",async resolveId(n,i){if(I(n))return n;if(!i||!I(i))return null;let o=r.tsconfig?Te({path:n,importer:w(i),tsconfig:r.tsconfig,rootDir:t}):null;if(!o)return null;let s=x(o);if(e.has(s))return T(s);return null},load(n){if(n.startsWith(C)){let i=w(n),o=e.get(i);if(o)return Y.add(i),o}return null}}};function v(e){return e.tsconfig.compilerOptions??{}}function J(e){return e.endsWith(".d.ts")||e.endsWith(".d.mts")||e.endsWith(".d.cts")}function Q(e){return/\.(js|mjs|cjs|ts|mts|cts|tsx|jsx)$/.test(e)&&!J(e)}function x(e){if(J(e))return e;return e.replace(/\.(ts|tsx|mts|cts|js|jsx|mjs|cjs)$/,".d.ts")}function I(e){return e.startsWith(C)}function w(e){return e.replace(C,"")}function T(e){return`${C}${e}`}var M;function z(e,r){return{name:"bunup:types-resolve",buildStart(){M||=new Be({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,n){if(t==="bun")return;let i=n?w(n):void 0;if(/\0/.test(t))return;if(r){if(!r.some((u)=>typeof u==="string"?u===t:u.test(t)))return}let o=i?Z.dirname(i):process.cwd(),{path:s}=await M.async(o,t);if(!s)return;if(Q(s)){let a=x(s);try{let{path:u}=await M.async(Z.dirname(s),a);if(u)return u}catch(u){}return}return s}}}async function ee(e,r,t,n,i,o){let s=x(e),a=T(s),u=$(t,n),c=S(t);try{let{output:l}=await Pe({input:a,output:{dir:t.outDir},write:!1,onwarn(g,m){if(["UNRESOLVED_IMPORT","CIRCULAR_DEPENDENCY","EMPTY_BUNDLE"].includes(g.code??""))return;m(g)},plugins:[K(r,i,o),typeof t.dts==="object"&&"resolve"in t.dts&&z(i,typeof t.dts.resolve==="boolean"?void 0:t.dts.resolve),De({dtsInput:!0,emitDtsOnly:!0,compilerOptions:{...v(i),declaration:!0,noEmit:!1,emitDeclarationOnly:!0,noEmitOnError:!0,checkJs:!1,declarationMap:!1,skipLibCheck:!0,preserveSymlinks:!1,target:99}})],external:(g)=>u.some((m)=>m.test(g))&&!c.some((m)=>m.test(g))});if(!l[0]?.code)return f.warn(`Generated empty declaration file for entry "${e}"`,{muted:!0}),"";return l[0].code}catch(l){throw new p(`DTS bundling failed for entry "${e}": ${d(l)}`)}}import{resolveTsImportPath as Oe}from"ts-import-resolver";var Le=/^\s*import\s+(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]/gm,Ie=/^\s*export\s+.*from\s+['"]([^'"]+)['"]/gm,Me=/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Ae=/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,je=/import\s+\w+\s*=\s*require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,_e=/\/\/\/\s*<reference\s+path\s*=\s*['"]([^'"]+)['"]\s*\/>/g,Ne=/\/\/\/\s*<reference\s+types\s*=\s*['"]([^'"]+)['"]\s*\/>/g;function Fe(e){let r=new Set,t=[Le,Ie,Me,Ae,je,_e,Ne];for(let n of t){let i=e.matchAll(n);for(let o of i)if(o[1])r.add(o[1])}return r}async function te(e,r,t){let n=new Set([e]),i=[e];while(i.length){let o=i.pop();if(!o)continue;try{let s=await Bun.file(o).text(),a=Fe(s);for(let u of a){let c=r.tsconfig?Oe({path:u,importer:o,tsconfig:r.tsconfig,rootDir:t}):null;if(!c)continue;if(!n.has(c))n.add(c),i.push(c)}}catch(s){f.warn(`Error processing ${o}: ${d(s)}`)}}return n}import{isolatedDeclaration as ke}from"oxc-transform";async function re(e){let r=new Map;return await Promise.all([...e].map(async(t)=>{try{let n=x(t);if(!await Bun.file(t).exists())return;let o=await Bun.file(t).text(),{code:s}=ke(t,o);if(s)r.set(n,s)}catch(n){f.warn(`Failed to generate declaration for ${t}: ${d(n)}`)}})),r}import ne from"node:fs/promises";import A from"node:path";import{isolatedDeclaration as Mt}from"oxc-transform";async function se(e,r){let t=A.resolve(e),n=A.resolve(t,r);if(!await ne.exists(t))throw new p(`Root directory does not exist: ${t}`);if(!await Bun.file(n).exists())throw new p(`Entry file does not exist: ${n}`);if(!R(n))throw new p(`Entry file must be a TypeScript file: ${n}`);if(A.relative(t,n).startsWith(".."))throw new p(`Entry file must be within rootDir: ${n}`);return{absoluteRootDir:t,absoluteEntry:n}}async function ie(e,r,t,n,i){let{absoluteEntry:o}=await se(e,r),s=await te(o,n,e),a=await re(s);return ee(o,a,t,i,n,e)}function oe(e){return e.split("/").pop()?.split(".").slice(0,-1).join(".")||""}function j(e,{warnOnConflict:r=!0}={}){let t=[],n=new Set,i={};function o(s,a){if(n.has(s)){let u=U(),c=`${s}_${u}`;if(r)f.warn(`Output name conflict: "${s}" is used by multiple files.
2
2
  Bunup uses filenames without extensions as output names by default.
3
3
 
4
- ${o[s]} -> ${s}.js
5
- ${a} -> ${u}.js (auto-renamed to avoid conflict)
4
+ ${i[s]} -> ${s}.js
5
+ ${a} -> ${c}.js (auto-renamed to avoid conflict)
6
6
 
7
7
  To fix this, use named entries in your configuration:
8
8
  {
9
9
  entry: {
10
- custom_name: "${o[s]}",
10
+ custom_name: "${i[s]}",
11
11
  another_name: "${a}"
12
12
  }
13
13
  }
14
14
 
15
- See: https://bunup.arshadyaseen.com/documentation/#named-entries`,{muted:!0,verticalSpace:!0});r.push({name:u,path:a})}else r.push({name:s,path:a}),n.add(s),o[s]=a}if(Array.isArray(e))for(let s of e){let a=re(s);i(a,s)}else if(typeof e==="object")for(let[s,a]of Object.entries(e))i(s,a);else{let s=re(e);i(s,e)}return r}function ne(e){return e.filter((t)=>C(t.path))}function se(e,t){return`[dir]/${e}${t}`}import{loadConfig as oe}from"coffi";async function ie(e){let{config:t,filepath:r}=await oe({name:"package",cwd:e,extensions:[".json"],maxDepth:3});return{packageJson:t,path:r}}async function ae(e,t){let{config:r,filepath:n}=await oe({name:"tsconfig",cwd:e,extensions:[".json"],preferredPath:t,maxDepth:3});return{tsconfig:r,path:n}}var je={entry:[],format:["cjs"],outDir:"dist",target:"node",clean:!0};function ue(e){return{...je,...e}}function le(e){let{minify:t,minifyWhitespace:r,minifyIdentifiers:n,minifySyntax:o}=e,i=t===!0;return{whitespace:r??i,identifiers:n??i,syntax:o??i}}function ce(e,t){return t==="cjs"?e:void 0}function me(e,t,r,n){return{...typeof r==="object"&&Object.keys(r).reduce((o,i)=>{let s=JSON.stringify(r[i]);return o[`process.env.${i}`]=s,o[`import.meta.env.${i}`]=s,o},{}),...e,...n==="cjs"&&(t===!0||typeof t==="object"&&t.importMetaUrl)&&{"import.meta.url":"importMetaUrl"}}}function fe(e,t){return e===void 0?t==="esm":e}function de(e){return typeof e==="string"?e:void 0}function ge(e,t){return{name:"bunup:external-plugin",setup(r){r.onResolve({filter:/.*/},(n)=>{let o=n.path;if(e.some((s)=>s.test(o))&&!t.some((s)=>s.test(o)))return{path:o,external:!0};return null})}}}var Ne=/\.(js|ts|jsx|tsx|mts|cts)$/,_={dirnameFilename:{appliesTo:(e,t)=>e==="esm"&&I(t),isNeededInFile:(e)=>/\b__dirname\b/.test(e)||/\b__filename\b/.test(e),generateCode:()=>`import { fileURLToPath } from 'url';
15
+ See: https://bunup.arshadyaseen.com/documentation/#named-entries`,{muted:!0,verticalSpace:!0});t.push({name:c,path:a})}else t.push({name:s,path:a}),n.add(s),i[s]=a}if(Array.isArray(e))for(let s of e){let a=oe(s);o(a,s)}else if(typeof e==="object")for(let[s,a]of Object.entries(e))o(s,a);else{let s=oe(e);o(s,e)}return t}function ae(e){return e.filter((r)=>R(r.path))}function ue(e,r){return`[dir]/${e}${r}`}import{loadConfig as ce}from"coffi";async function le(e){let{config:r,filepath:t}=await ce({name:"package",cwd:e,extensions:[".json"],maxDepth:3});return{packageJson:r,path:t}}async function me(e,r){let{config:t,filepath:n}=await ce({name:"tsconfig",cwd:e,extensions:[".json"],preferredPath:r,maxDepth:3});return{tsconfig:t,path:n}}var We={entry:[],format:["cjs"],outDir:"dist",target:"node",clean:!0};function fe(e){return{...We,...e}}function ge(e){let{minify:r,minifyWhitespace:t,minifyIdentifiers:n,minifySyntax:i}=e,o=r===!0;return{whitespace:t??o,identifiers:n??o,syntax:i??o}}function pe(e,r){return r==="cjs"?e:void 0}function de(e,r,t,n){return{...typeof t==="object"&&Object.keys(t).reduce((i,o)=>{let s=JSON.stringify(t[o]);return i[`process.env.${o}`]=s,i[`import.meta.env.${o}`]=s,i},{}),...e,...n==="cjs"&&(r===!0||typeof r==="object"&&r.importMetaUrl)&&{"import.meta.url":"importMetaUrl"}}}function xe(e,r){return e===void 0?r==="esm":e}function he(e){return typeof e==="string"?e:void 0}function be(e,r){return{name:"bunup:external-plugin",setup(t){t.onResolve({filter:/.*/},(n)=>{let i=n.path;if(e.some((s)=>s.test(i))&&!r.some((s)=>s.test(i)))return{path:i,external:!0};return null})}}}var Ue=/\.(js|ts|jsx|tsx|mts|cts)$/,_={dirnameFilename:{appliesTo:(e,r)=>e==="esm"&&O(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,t)=>e==="cjs"&&I(t),isNeededInFile:(e)=>/\bimport\.meta\.url\b/.test(e),generateCode:()=>`import { pathToFileURL } from 'url';
21
+ `},importMetaUrl:{appliesTo:(e,r)=>e==="cjs"&&O(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 pe({format:e,target:t,shims:r}){let o=Fe(r).map((i)=>_[i]).filter((i)=>i.appliesTo(e,t));if(o.length===0)return{name:"bunup:inject-shims",setup(){}};return{name:"bunup:inject-shims",setup(i){i.onLoad({filter:Ne},async({path:s})=>{let a=await Bun.file(s).text(),m=o.filter((c)=>c.isNeededInFile(a));if(m.length===0)return;let{shebangLine:u,codeContent:l}=We(a),d=m.map((c)=>c.generateCode()).join("");return{contents:u+d+l}})}}}function Fe(e){if(e===!0)return Object.keys(_);if(!e)return[];return Object.entries(e).filter(([t,r])=>r&&(t in _)).map(([t])=>t)}function We(e){if(!e.startsWith("#!"))return{shebangLine:"",codeContent:e};let t=e.indexOf(`
26
- `);return t===-1?{shebangLine:"",codeContent:e}:{shebangLine:e.slice(0,t+1),codeContent:e.slice(t+1)}}var H=new Set;async function ke(e,t){let r=ue(e);if(!r.entry||r.entry.length===0||!r.outDir)throw new h("Nothing to build. Please make sure you have provided a proper bunup configuration or cli arguments.");if(r.clean)G(t,r.outDir);N(r.silent);let{packageJson:n,path:o}=await ie(t);if(n&&o)f.cli(`Using package.json: ${y(o,2)}`,{muted:!0,identifier:r.name,once:`${o}:${r.name}`});let i=A(r.entry),s=n?.type,a=S(r,n),m=$(r);if(!r.dtsOnly){let u=[ge(a,m)],l=r.format.flatMap((d)=>i.map((c)=>{return Ue(r,t,c,d,s,u)}));await Promise.all(l)}if(r.dts||r.dtsOnly){let u=await ae(t,r.preferredTsconfigPath);if(u.path)f.cli(`Using tsconfig: ${y(u.path,2)}`,{muted:!0,identifier:r.name,once:`${u.path}:${r.name}`});let l=r.format.filter((c)=>{if(c==="iife"&&!b(s)&&r.format.includes("cjs"))return!1;return!0}),d=typeof r.dts==="object"&&r.dts.entry?A(r.dts.entry):ne(i);try{await Promise.all(d.map(async(c)=>{let xe=await te(t,c.path,r,u,n);await Promise.all(l.map(async(v)=>{let he=r.outputExtension?.({format:v,packageType:s,options:r,entry:c}).dts??U(v,s),P=`${t}/${r.outDir}/${c.name}${he}`;await Bun.write(P,xe);let be=Bun.file(P).size||0;f.progress("DTS",y(P),L(be),r.name)}))}))}catch(c){throw new g(p(c))}}if(r.onBuildSuccess)await r.onBuildSuccess(r)}async function Ue(e,t,r,n,o,i){let s=e.outputExtension?.({format:n,packageType:o,options:e,entry:r}).js??k(n,o),a=await Bun.build({entrypoints:[`${t}/${r.path}`],format:n,naming:{entry:se(r.name,s)},splitting:fe(e.splitting,n),bytecode:ce(e.bytecode,n),define:me(e.define,e.shims,e.env,n),minify:le(e),outdir:`${t}/${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:[...i,pe({format:n,target:e.target,shims:e.shims}),...e.bunBuildPlugins??[]],throw:!1});if(!a.success)for(let l of a.logs){if(l.level==="error")throw new h(l.message);if(l.level==="warning")f.warn(l.message);else if(l.level==="info")f.info(l.message)}let m=`${t}/${e.outDir}/${r.name}${s}`,u=Bun.file(m).size||0;f.progress(n.toUpperCase(),y(m),L(u),e.name)}export{Ee as defineWorkspace,ye as defineConfig,ke as build};
25
+ `}};function ye({format:e,target:r,shims:t}){let i=Ve(t).map((o)=>_[o]).filter((o)=>o.appliesTo(e,r));if(i.length===0)return{name:"bunup:inject-shims",setup(){}};return{name:"bunup:inject-shims",setup(o){o.onLoad({filter:Ue},async({path:s})=>{let a=await Bun.file(s).text(),u=i.filter((m)=>m.isNeededInFile(a));if(u.length===0)return;let{shebangLine:c,codeContent:l}=Ge(a),g=u.map((m)=>m.generateCode()).join("");return{contents:c+g+l}})}}}function Ve(e){if(e===!0)return Object.keys(_);if(!e)return[];return Object.entries(e).filter(([r,t])=>t&&(r in _)).map(([r])=>r)}function Ge(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)}}var Y=new Set;async function qe(e,r){let t=fe(e);if(!t.entry||t.entry.length===0||!t.outDir)throw new b("Nothing to build. Please make sure you have provided a proper bunup configuration or cli arguments.");if(t.clean)X(r,t.outDir);k(t.silent);let{packageJson:n,path:i}=await le(r);if(n&&i)f.cli(`Using package.json: ${E(i,2)}`,{muted:!0,identifier:t.name,once:`${i}:${t.name}`});let o=j(t.entry),s=n?.type,a=$(t,n),u=S(t);if(!t.dtsOnly){let c=[be(a,u)],l=t.format.flatMap((g)=>o.map((m)=>{return Xe(t,r,m,g,s,c)}));await Promise.all(l)}if(t.dts||t.dtsOnly){let c=await me(r,t.preferredTsconfigPath);if(c.path)f.cli(`Using tsconfig: ${E(c.path,2)}`,{muted:!0,identifier:t.name,once:`${c.path}:${t.name}`});let l=t.format.filter((m)=>{if(m==="iife"&&!y(s)&&t.format.includes("cjs"))return!1;return!0}),g=typeof t.dts==="object"&&t.dts.entry?j(t.dts.entry):ae(o);try{await Promise.all(g.map(async(m)=>{let Ee=await ie(r,m.path,t,c,n);await Promise.all(l.map(async(N)=>{let we=t.outputExtension?.({format:N,packageType:s,options:t,entry:m}).dts??G(N,s),B=`${r}/${t.outDir}/${m.name}${we}`;await Bun.write(B,Ee);let Ce=Bun.file(B).size||0;f.progress("DTS",E(B),L(Ce),t.name)}))}))}catch(m){throw new p(d(m))}}if(t.onBuildSuccess)await t.onBuildSuccess(t)}async function Xe(e,r,t,n,i,o){let s=e.outputExtension?.({format:n,packageType:i,options:e,entry:t}).js??V(n,i),a=await Bun.build({entrypoints:[`${r}/${t.path}`],format:n,naming:{entry:ue(t.name,s)},splitting:xe(e.splitting,n),bytecode:pe(e.bytecode,n),define:de(e.define,e.shims,e.env,n),minify:ge(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:he(e.env),plugins:[...o,ye({format:n,target:e.target,shims:e.shims}),...e.bunBuildPlugins??[]],throw:!1});if(!a.success)for(let l of a.logs){if(l.level==="error")throw new b(l.message);if(l.level==="warning")f.warn(l.message);else if(l.level==="info")f.info(l.message)}let u=`${r}/${e.outDir}/${t.name}${s}`,c=Bun.file(u).size||0;f.progress(n.toUpperCase(),E(u),L(c),e.name)}export{$e as defineWorkspace,Re as defineConfig,qe as build};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bunup",
3
- "version": "0.4.32",
3
+ "version": "0.4.34",
4
4
  "description": "An extremely fast, zero-config bundler for TypeScript & JavaScript, powered by Bun.",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",
@@ -20,7 +20,7 @@
20
20
  "bunup": "^0.4.23",
21
21
  "husky": "^9.1.7",
22
22
  "typescript": "^5.8.3",
23
- "create-bunup": "0.4.32"
23
+ "create-bunup": "0.4.34"
24
24
  },
25
25
  "peerDependencies": {
26
26
  "typescript": ">=4.5.0"
@@ -55,7 +55,7 @@
55
55
  "oxc-resolver": "^5.0.1",
56
56
  "oxc-transform": "^0.58.1",
57
57
  "rolldown": "1.0.0-beta.7",
58
- "rolldown-plugin-dts": "^0.6.0",
58
+ "rolldown-plugin-dts": "^0.7.0",
59
59
  "tinyexec": "^1.0.1",
60
60
  "ts-import-resolver": "^0.1.9"
61
61
  },