bunup 0.4.18 → 0.4.20

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{build as Qe}from"rolldown";import{dts as Ze}from"rolldown-plugin-dts";var ne=!1;function L(e){ne=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[c,...f]=a.split(" "),m=" ".repeat(Math.max(0,this.MAX_MESSAGE_LENGTH-c.length)),p=s?` \x1B[48;5;${e};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${e}m${t}\x1B[0m ${i}${c}${m} \x1B[38;5;${this.colors.size}m${r}\x1B[0m ${f.join(" ")}${p}`}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(ne)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,m]of Object.entries(this.colors.progress))if(s.includes(f)){o=m;break}let c=this.formatMessage({colorCode:o,label:s,message:t,size:i,identifier:a,muted:l.muted});this.output(c,l)}}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 h extends E{constructor(e){super(e);this.name="BunupDTSBuildError"}}class d extends E{constructor(e){super(e);this.name="BunupCLIError"}}class D extends E{constructor(e){super(e);this.name="BunupWatchError"}}var b=(e)=>{if(e instanceof Error)return e.message;return String(e)},Ve=[{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")}}],G=(e,t)=>{let n=b(e),r=t?`[${t}] `:"",s="ERROR";if(e instanceof w)s="BUILD ERROR";else if(e instanceof h)s="DTS ERROR";else if(e instanceof d)s="CLI ERROR";else if(e instanceof D)s="WATCH ERROR";else if(e instanceof E)s="BUNUP ERROR";let o=Ve.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
- `),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/arshadyaseen/bunup/issues/new\x1B[0m")},re=(e,t)=>{G(e,t),process.exit(1)};import se from"node:fs/promises";import Ge from"node:path";function X(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ie(e=8){let t="";while(t.length<e)t+=Math.random().toString(36).substring(2);return t.substring(0,e)}function oe(e,t,n){return Array.isArray(e)?e.map((r)=>({...r,[t]:n})):{...e,[t]:n}}function ae(e){return Array.isArray(e)?e:[e]}function le(e,t){switch(e){case"esm":return $(t)?".js":".mjs";case"cjs":return $(t)?".cjs":".js";case"iife":return".global.js"}}function ce(e,t){switch(e){case"esm":return $(t)?".d.ts":".d.mts";case"cjs":return $(t)?".d.cts":".d.ts";case"iife":return".d.ts"}}function Y(e){return e==="node"||e==="bun"}function $(e){return e==="module"}function A(e){return e>=1000?`${(e/1000).toFixed(2)}s`:`${Math.round(e)}ms`}function ue(e){if(!e)return[];return Array.from(new Set([...Object.keys(e.dependencies||{}),...Object.keys(e.peerDependencies||{})]))}function K(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 fe(e,t){let n=Ge.join(e,t);try{await se.rm(n,{recursive:!0,force:!0})}catch(r){throw new w(`Failed to clean output directory: ${r}`)}await se.mkdir(n,{recursive:!0})}function I(e){return[".ts",".mts",".cts",".tsx"].some((t)=>e.endsWith(t))}function pe(e){return e.map((t)=>typeof t==="string"?new RegExp(`^${X(t)}($|\\/|\\\\)`):t)}function M(e,t){return pe(e.external||[]).concat(ue(t).map((n)=>new RegExp(`^${X(n)}($|\\/|\\\\)`)))}function _(e){return pe(e.noExternal||[])}import Je from"node:path";import{ResolverFactory as ze}from"oxc-resolver";import O from"node:path";var S="\x00dts:",me=(e,t)=>{return{name:"bunup:virtual-dts",async resolveId(n,r){if(J(n))return n;if(!r||!J(r))return null;let s=await v(n,P(r),t);if(!s)return null;let o=T(s);if(e.has(o))return j(o);return null},load(n){if(n.startsWith(S)){let r=P(n),s=e.get(r);if(s)return R.add(r),s}return null}}};function de(e){return e.tsconfig?.compilerOptions}function T(e){return e.replace(/\.(ts|tsx|mts|cts)$/,".d.ts")}function ge(e){if(!e.path)return"";let t=O.dirname(e.path),n=de(e);return n?.baseUrl?O.resolve(t,n.baseUrl):t}function Xe(e){let t=new Map,n=de(e)?.paths;if(!n)return t;let r=ge(e);for(let[s,o]of Object.entries(n))if(Array.isArray(o)&&o.length){let i=s.replace(/\*/g,"(.*)"),a=0,l=o[0].replace(/\*/g,()=>`$${++a}`);t.set(`^${i}$`,O.join(r,l))}return t}function Ye(e,t,n){for(let[r,s]of t){let o=new RegExp(r),i=e.match(o);if(i)return s.replace("$1",i[1]||"")}return n?O.join(n,e):null}async function Ke(e){let t=["",".ts",".tsx",".cts",".mts","/index.ts","/index.tsx","/index.cts","/index.mts"];for(let n of t){let r=`${e}${n}`;if(await Bun.file(r).exists()&&(r.endsWith(".ts")||r.endsWith(".tsx")||r.endsWith(".cts")||r.endsWith(".mts")))return r}return null}function v(e,t,n){if(!n)return Promise.resolve(null);let r=Xe(n),s=ge(n),o=e.startsWith(".")?O.resolve(O.dirname(t||""),e):Ye(e,r,s);if(!o)return Promise.resolve(null);return Ke(o)}function J(e){return e.startsWith(S)}function P(e){return e.replace(S,"")}function j(e){return`${S}${e}`}var he;function be(e){return{name:"bunup:types-resolve",buildStart(){he||=new ze({mainFields:["types"],conditionNames:["types","typings","import","require"],extensions:[".d.ts",".ts",".d.cts",".d.mts",".cts",".mts"],modules:["node_modules","node_modules/@types"]})},async resolveId(t,n){let r=n?P(n):void 0;if(/\0/.test(t))return;if(e){if(!e.some((a)=>{let l=!1;if(typeof a==="string")l=a===t||!!r?.includes(a);else l=a.test(t)||!!(r&&a.test(r));return l}))return}let s=r?Je.dirname(r):process.cwd(),{path:o}=await he.async(s,t);if(!o)return;if(/[cm]?jsx?$/.test(o)){let i=o.replace(/\.([cm]?)jsx?$/,".d.$1ts");return await Bun.file(i).exists()?i:void 0}return o}}}async function xe(e,t,n,r,s){let o=T(e),i=j(o),a=M(n,r),l=_(n);try{let{output:c}=await Qe({input:i,output:{dir:n.outDir,inlineDynamicImports:!0},write:!1,onwarn(f,m){if(["UNRESOLVED_IMPORT","CIRCULAR_DEPENDENCY","EMPTY_BUNDLE"].includes(f.code??""))return;m(f)},plugins:[me(t,s),typeof n.dts==="object"&&"resolve"in n.dts&&be(typeof n.dts.resolve==="boolean"?void 0:n.dts.resolve),Ze({dtsInput:!0,emitDtsOnly:!0})],external:(f)=>a.some((m)=>m.test(f))&&!l.some((m)=>m.test(f))});if(!c[0]?.code)return u.warn(`Generated empty declaration file for entry "${e}"`,{muted:!0}),"";return c[0].code}catch(c){throw new h(`DTS bundling failed for entry "${e}": ${b(c)}`)}}var et=/^\s*import\s+(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]/gm,tt=/^\s*export\s+.*from\s+['"]([^'"]+)['"]/gm,nt=/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,rt=/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,st=/import\s+\w+\s*=\s*require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,it=/\/\/\/\s*<reference\s+path\s*=\s*['"]([^'"]+)['"]\s*\/>/g,ot=/\/\/\/\s*<reference\s+types\s*=\s*['"]([^'"]+)['"]\s*\/>/g;function at(e){let t=new Set,n=[et,tt,nt,rt,st,it,ot];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){let n=new Set([e]),r=[e];while(r.length){let s=r.pop();if(!s)continue;try{let o=await Bun.file(s).text(),i=at(o);for(let a of i){let l=await v(a,s,t);if(!l)continue;if(!n.has(l))n.add(l),r.push(l)}}catch(o){u.warn(`Error processing ${s}: ${b(o)}`)}}return n}import{isolatedDeclaration as lt}from"oxc-transform";async function we(e){let t=new Map;return await Promise.all([...e].map(async(n)=>{try{let r=T(n);if(!await Bun.file(n).exists())return;let o=await Bun.file(n).text(),{code:i}=lt(n,o);if(i)t.set(r,i)}catch(r){u.warn(`Failed to generate declaration for ${n}: ${b(r)}`)}})),t}import Ce from"node:fs/promises";import z from"node:path";import{isolatedDeclaration as ct}from"oxc-transform";async function Ee(e,t){let n=z.resolve(e),r=z.resolve(n,t);if(!await Ce.exists(n))throw new h(`Root directory does not exist: ${n}`);if(!await Bun.file(r).exists())throw new h(`Entry file does not exist: ${r}`);if(!I(r))throw new h(`Entry file must be a TypeScript file: ${r}`);if(z.relative(n,r).startsWith(".."))throw new h(`Entry file must be within rootDir: ${r}`);return{absoluteRootDir:n,absoluteEntry:r}}async function $e(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}=ct(r,s);for(let i of o){if(!t)console.log(`
6
- `);let a=i.labels[0],l=a?ut(s,a.start):"",f=`${x(r)}${l}: ${ft(i.message)}`;u.warn(f),t=!0}}catch{}})),t)u.info(`
3
+ import{build as Ge}from"rolldown";import{dts as Xe}from"rolldown-plugin-dts";var ee=!1;function B(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:r,size:n,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${r}\x1B[0m`:r;if(n){let[l,...f]=a.split(" "),m=" ".repeat(Math.max(0,this.MAX_MESSAGE_LENGTH-l.length)),p=s?` \x1B[48;5;${e};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${e}m${t}\x1B[0m ${i}${l}${m} \x1B[38;5;${this.colors.size}m${n}\x1B[0m ${f.join(" ")}${p}`}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={},r=console.log){if(ee)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),o=this.colors.default,i,a,c={};if(typeof r==="string")i=r,a=n;else if(r)i=r.size,a=r.identifier,c=r;for(let[f,m]of Object.entries(this.colors.progress))if(s.includes(f)){o=m;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 h extends E{constructor(e){super(e);this.name="BunupDTSBuildError"}}class d extends E{constructor(e){super(e);this.name="BunupCLIError"}}class v extends E{constructor(e){super(e);this.name="BunupWatchError"}}var b=(e)=>{if(e instanceof Error)return e.message;return String(e)},Fe=[{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 r=b(e),n=t?`[${t}] `:"",s="ERROR";if(e instanceof w)s="BUILD ERROR";else if(e instanceof h)s="DTS ERROR";else if(e instanceof d)s="CLI ERROR";else if(e instanceof v)s="WATCH ERROR";else if(e instanceof E)s="BUNUP ERROR";let o=Fe.find((i)=>i.pattern.test(r)&&(i.errorType===s||!i.errorType));if(!o)console.error(`\x1B[31m${s}\x1B[0m ${n}${r}`);if(o)console.log(`
4
+ `),o.logSolution(r),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)=>{q(e,t),process.exit(1)};import re from"node:fs/promises";import We from"node:path";function V(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ne(e=8){let t="";while(t.length<e)t+=Math.random().toString(36).substring(2);return t.substring(0,e)}function se(e,t,r){return Array.isArray(e)?e.map((n)=>({...n,[t]:r})):{...e,[t]:r}}function ie(e){return Array.isArray(e)?e:[e]}function oe(e,t){switch(e){case"esm":return R(t)?".js":".mjs";case"cjs":return R(t)?".cjs":".js";case"iife":return".global.js"}}function ae(e,t){switch(e){case"esm":return R(t)?".d.ts":".d.mts";case"cjs":return R(t)?".d.cts":".d.ts";case"iife":return".d.ts"}}function G(e){return e==="node"||e==="bun"}function R(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"],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 ce(e,t){let r=We.join(e,t);try{await re.rm(r,{recursive:!0,force:!0})}catch(n){throw new w(`Failed to clean output directory: ${n}`)}await re.mkdir(r,{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(`^${V(t)}($|\\/|\\\\)`):t)}function D(e,t){return ue(e.external||[]).concat(le(t).map((r)=>new RegExp(`^${V(r)}($|\\/|\\\\)`)))}function A(e){return ue(e.noExternal||[])}import qe from"node:path";import{ResolverFactory as Ve}from"oxc-resolver";import{resolveTypeScriptImportPath as He}from"ts-import-resolver";var O="\x00dts:",fe=(e,t,r)=>{return{name:"bunup:virtual-dts",async resolveId(n,s){if(Y(n))return n;if(!s||!Y(s))return null;let o=He({path:n,importer:T(s),tsconfig:t.tsconfig,rootDir:r});if(!o)return null;let i=$(o);if(e.has(i))return _(i);return null},load(n){if(n.startsWith(O)){let s=T(n),o=e.get(s);if(o)return S.add(s),o}return null}}};function $(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(O)}function T(e){return e.replace(O,"")}function _(e){return`${O}${e}`}var pe;function me(e){return{name:"bunup:types-resolve",buildStart(){pe||=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,r){if(t==="bun")return;let n=r?T(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?qe.dirname(n):process.cwd(),{path:o}=await pe.async(s,t);return o}}}async function de(e,t,r,n,s,o){let i=$(e),a=_(i),c=D(r,n),l=A(r);try{let{output:f}=await Ge({input:a,output:{dir:r.outDir,inlineDynamicImports:!0},write:!1,onwarn(m,p){if(["UNRESOLVED_IMPORT","CIRCULAR_DEPENDENCY","EMPTY_BUNDLE"].includes(m.code??""))return;p(m)},plugins:[fe(t,s,o),typeof r.dts==="object"&&"resolve"in r.dts&&me(typeof r.dts.resolve==="boolean"?void 0:r.dts.resolve),Xe({dtsInput:!0,emitDtsOnly:!0})],external:(m)=>c.some((p)=>p.test(m))&&!l.some((p)=>p.test(m))});if(!f[0]?.code)return u.warn(`Generated empty declaration file for entry "${e}"`,{muted:!0}),"";return f[0].code}catch(f){throw new h(`DTS bundling failed for entry "${e}": ${b(f)}`)}}import{resolveTypeScriptImportPath as Ye}from"ts-import-resolver";var Ke=/^\s*import\s+(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]/gm,Je=/^\s*export\s+.*from\s+['"]([^'"]+)['"]/gm,ze=/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Qe=/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Ze=/import\s+\w+\s*=\s*require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,et=/\/\/\/\s*<reference\s+path\s*=\s*['"]([^'"]+)['"]\s*\/>/g,tt=/\/\/\/\s*<reference\s+types\s*=\s*['"]([^'"]+)['"]\s*\/>/g;function rt(e){let t=new Set,r=[Ke,Je,ze,Qe,Ze,et,tt];for(let n of r){let s=e.matchAll(n);for(let o of s)if(o[1])t.add(o[1])}return t}async function ge(e,t,r){let n=new Set([e]),s=[e];while(s.length){let o=s.pop();if(!o)continue;try{let i=await Bun.file(o).text(),a=rt(i);for(let c of a){let l=Ye({path:c,importer:o,tsconfig:t.tsconfig,rootDir:r});if(!l)continue;if(!n.has(l))n.add(l),s.push(l)}}catch(i){u.warn(`Error processing ${o}: ${b(i)}`)}}return n}import{isolatedDeclaration as nt}from"oxc-transform";async function he(e){let t=new Map;return await Promise.all([...e].map(async(r)=>{try{let n=$(r);if(!await Bun.file(r).exists())return;let o=await Bun.file(r).text(),{code:i}=nt(r,o);if(i)t.set(n,i)}catch(n){u.warn(`Failed to generate declaration for ${r}: ${b(n)}`)}})),t}import be from"node:fs/promises";import K from"node:path";import{isolatedDeclaration as st}from"oxc-transform";async function ye(e,t){let r=K.resolve(e),n=K.resolve(r,t);if(!await be.exists(r))throw new h(`Root directory does not exist: ${r}`);if(!await Bun.file(n).exists())throw new h(`Entry file does not exist: ${n}`);if(!I(n))throw new h(`Entry file must be a TypeScript file: ${n}`);if(K.relative(r,n).startsWith(".."))throw new h(`Entry file must be within rootDir: ${n}`);return{absoluteRootDir:r,absoluteEntry:n}}async function xe(e){let t=!1;if(await Promise.all([...e].map(async(r)=>{try{let n=r.replace(/\.d\.ts$/,".ts"),s=await Bun.file(n).text(),{errors:o}=st(n,s);for(let i of o){if(!t)console.log(`
6
+ `);let a=i.labels[0],c=a?it(s,a.start):"",f=`${y(n)}${c}: ${ot(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 ut(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 ft(e){return e.replace(" with --isolatedDeclarations","").replace(" with --isolatedDeclaration","")}async function Te(e,t,n,r,s){let{absoluteEntry:o}=await Ee(e,t),i=await ye(o,r),a=await we(i);return xe(o,a,n,s,r)}function U(e){return e.split("/").pop()?.split(".").slice(0,-1).join(".")||""}function B(e,{warnOnConflict:t=!0}={}){let n=[],r=new Set,s={};function o(i,a){if(r.has(i)){let l=ie(),c=`${i}_${l}`;if(t)u.warn(`Output name conflict: "${i}" is used by multiple files.
8
+ `)}function it(e,t){if(t===void 0)return"";let r=e.slice(0,t).split(`
9
+ `),n=r.length,s=r[r.length-1].length+1;return` (${n}:${s})`}function ot(e){return e.replace(" with --isolatedDeclarations","").replace(" with --isolatedDeclaration","")}async function we(e,t,r,n,s){let{absoluteEntry:o}=await ye(e,t),i=await ge(o,n,e),a=await he(i);return de(o,a,r,s,n,e)}function M(e){return e.split("/").pop()?.split(".").slice(0,-1).join(".")||""}function P(e,{warnOnConflict:t=!0}={}){let r=[],n=new Set,s={};function o(i,a){if(n.has(i)){let c=ne(),l=`${i}_${c}`;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} -> ${c}.js (auto-renamed to avoid conflict)
13
+ ${a} -> ${l}.js (auto-renamed to avoid conflict)
14
14
 
15
15
  To fix this, use named entries in your configuration:
16
16
  {
@@ -20,19 +20,19 @@ To fix this, use named entries in your configuration:
20
20
  }
21
21
  }
22
22
 
23
- See: https://bunup.arshadyaseen.com/#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=U(i);o(a,i)}else if(typeof e==="object")for(let[i,a]of Object.entries(e))o(i,a);else{let i=U(e);o(i,e)}return n}function Re(e){return e.filter((t)=>I(t.path))}function Oe(e,t){return`[dir]/${e}${t}`}import{loadConfig as Pe}from"coffi";async function Se(e,t){return Array.isArray(e)&&"root"in e[0]?e.map((n)=>({rootDir:n.root,options:oe(n.config,"name",n.name)})):[{rootDir:t,options:e}]}async function Be(e){let{config:t,filepath:n}=await Pe({name:"package",cwd:e,extensions:[".json"],maxDepth:1});return{packageJson:t,path:n}}async function Le(e,t){let{config:n,filepath:r}=await Pe({name:"tsconfig",cwd:e,extensions:[".json"],preferredPath:t,maxDepth:3});return{tsconfig:n,path:r}}var pt={entry:[],format:["cjs"],outDir:"dist",target:"node",clean:!0};function k(e){return{...pt,...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 Ae(e,t){return t==="cjs"?e:void 0}function Ie(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 _e(e){return typeof e==="string"?e:void 0}function ve(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 mt=/\.(js|ts|jsx|tsx|mts|cts)$/,Q={dirnameFilename:{appliesTo:(e,t)=>e==="esm"&&Y(t),isNeededInFile:(e)=>/\b__dirname\b/.test(e)||/\b__filename\b/.test(e),generateCode:()=>`import { fileURLToPath } from 'url';
23
+ See: https://bunup.arshadyaseen.com/#named-entries`,{muted:!0,verticalSpace:!0});r.push({name:l,path:a})}else r.push({name:i,path:a}),n.add(i),s[i]=a}if(Array.isArray(e))for(let i of e){let a=M(i);o(a,i)}else if(typeof e==="object")for(let[i,a]of Object.entries(e))o(i,a);else{let i=M(e);o(i,e)}return r}function Ce(e){return e.filter((t)=>I(t.path))}function Ee(e,t){return`[dir]/${e}${t}`}import{loadConfig as Re}from"coffi";async function $e(e,t){return Array.isArray(e)&&"root"in e[0]?e.map((r)=>({rootDir:r.root,options:se(r.config,"name",r.name)})):[{rootDir:t,options:e}]}async function Se(e){let{config:t,filepath:r}=await Re({name:"package",cwd:e,extensions:[".json"],maxDepth:1});return{packageJson:t,path:r}}async function Te(e,t){let{config:r,filepath:n}=await Re({name:"tsconfig",cwd:e,extensions:[".json"],preferredPath:t,maxDepth:3});return{tsconfig:r,path:n}}var at={entry:[],format:["cjs"],outDir:"dist",target:"node",clean:!0};function j(e){return{...at,...e}}function Oe(e){let{minify:t,minifyWhitespace:r,minifyIdentifiers:n,minifySyntax:s}=e,o=t===!0;return{whitespace:r??o,identifiers:n??o,syntax:s??o}}function Pe(e,t){return t==="cjs"?e:void 0}function Be(e,t,r,n){return{...typeof r==="object"&&Object.keys(r).reduce((s,o)=>{let i=JSON.stringify(r[o]);return s[`process.env.${o}`]=i,s[`import.meta.env.${o}`]=i,s},{}),...e,...n==="cjs"&&(t===!0||typeof t==="object"&&t.importMetaUrl)&&{"import.meta.url":"importMetaUrl"}}}function ve(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(r){r.onResolve({filter:/.*/},(n)=>{let s=n.path;if(e.some((i)=>i.test(s))&&!t.some((i)=>i.test(s)))return{path:s,external:!0};return null})}}}var lt=/\.(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';
24
24
  import { dirname } from 'path';
25
25
 
26
26
  const __filename = fileURLToPath(import.meta.url);
27
27
  const __dirname = dirname(__filename);
28
28
 
29
- `},importMetaUrl:{appliesTo:(e,t)=>e==="cjs"&&Y(t),isNeededInFile:(e)=>/\bimport\.meta\.url\b/.test(e),generateCode:()=>`import { pathToFileURL } from 'url';
29
+ `},importMetaUrl:{appliesTo:(e,t)=>e==="cjs"&&G(t),isNeededInFile:(e)=>/\bimport\.meta\.url\b/.test(e),generateCode:()=>`import { pathToFileURL } from 'url';
30
30
 
31
31
  const importMetaUrl = pathToFileURL(__filename).href;
32
32
 
33
- `}};function je({format:e,target:t,shims:n}){let s=dt(n).map((o)=>Q[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:mt},async({path:i})=>{let a=await Bun.file(i).text(),l=s.filter((p)=>p.isNeededInFile(a));if(l.length===0)return;let{shebangLine:c,codeContent:f}=gt(a),m=l.map((p)=>p.generateCode()).join("");return{contents:c+m+f}})}}}function dt(e){if(e===!0)return Object.keys(Q);if(!e)return[];return Object.entries(e).filter(([t,n])=>n&&(t in Q)).map(([t])=>t)}function gt(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 R=new Set;async function N(e,t){let n=k(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)fe(t,n.outDir);L(n.silent);let{packageJson:r,path:s}=await Be(t);if(r&&s)u.cli(`Using package.json: ${x(s,2)}`,{muted:!0,identifier:n.name,once:`${s}:${n.name}`});let o=B(n.entry),i=r?.type,a=M(n,r),l=_(n);if(!n.dtsOnly){let c=[ve(a,l)],f=n.format.flatMap((m)=>o.map((p)=>{return ht(n,t,p,m,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: ${x(c.path,2)}`,{muted:!0,identifier:n.name,once:`${c.path}:${n.name}`});let f=n.format.filter((p)=>{if(p==="iife"&&!$(i)&&n.format.includes("cjs"))return!1;return!0}),m=typeof n.dts==="object"&&n.dts.entry?B(n.dts.entry):Re(o);try{await Promise.all(m.map(async(p)=>{let q=await Te(t,p.path,n,c,r);await Promise.all(f.map(async(te)=>{let He=n.outputExtension?.({format:te,packageType:i,options:n,entry:p}).dts??ce(te,i),V=`${t}/${n.outDir}/${p.name}${He}`;await Bun.write(V,q);let qe=Bun.file(V).size||0;u.progress("DTS",x(V),K(qe),n.name)}))}))}catch(p){throw new h(b(p))}}}async function ht(e,t,n,r,s,o){let i=e.outputExtension?.({format:r,packageType:s,options:e,entry:n}).js??le(r,s),a=await Bun.build({entrypoints:[`${t}/${n.path}`],format:r,naming:{entry:Oe(n.name,i)},splitting:Me(e.splitting,r),bytecode:Ae(e.bytecode,r),define:Ie(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:_e(e.env),plugins:[...o,je({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 l=`${t}/${e.outDir}/${n.name}${i}`,c=Bun.file(l).size||0;u.progress(r.toUpperCase(),x(l),K(c),e.name)}var F="0.4.18";var Ue="https://bun.sh/docs/installation",ke="https://bunup.arshadyaseen.com/#cli-options";function g(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 d(`Option --${e} requires a string value`)}}function Z(e){return(t,n)=>{if(typeof t==="string")n[e]=t.split(",");else throw new d(`Option --${e} requires a string value`)}}function xt(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 d(`Option --${e} requires a boolean or string value`)}}function yt(){console.log(`
33
+ `}};function De({format:e,target:t,shims:r}){let s=ct(r).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:lt},async({path:i})=>{let a=await Bun.file(i).text(),c=s.filter((p)=>p.isNeededInFile(a));if(c.length===0)return;let{shebangLine:l,codeContent:f}=ut(a),m=c.map((p)=>p.generateCode()).join("");return{contents:l+m+f}})}}}function ct(e){if(e===!0)return Object.keys(J);if(!e)return[];return Object.entries(e).filter(([t,r])=>r&&(t in J)).map(([t])=>t)}function ut(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 S=new Set;async function k(e,t){let r=j(e);if(!r.entry||r.entry.length===0||!r.outDir)throw new w("Nothing to build. Please make sure you have provided a proper bunup configuration or cli arguments.");if(r.clean)ce(t,r.outDir);B(r.silent);let{packageJson:n,path:s}=await Se(t);if(n&&s)u.cli(`Using package.json: ${y(s,2)}`,{muted:!0,identifier:r.name,once:`${s}:${r.name}`});let o=P(r.entry),i=n?.type,a=D(r,n),c=A(r);if(!r.dtsOnly){let l=[Ie(a,c)],f=r.format.flatMap((m)=>o.map((p)=>{return ft(r,t,p,m,i,l)}));await Promise.all(f)}if(r.dts||r.dtsOnly){let l=await Te(t,r.preferredTsconfigPath);if(l.path)u.cli(`Using tsconfig: ${y(l.path,2)}`,{muted:!0,identifier:r.name,once:`${l.path}:${r.name}`});let f=r.format.filter((p)=>{if(p==="iife"&&!R(i)&&r.format.includes("cjs"))return!1;return!0}),m=typeof r.dts==="object"&&r.dts.entry?P(r.dts.entry):Ce(o);try{await Promise.all(m.map(async(p)=>{let W=await we(t,p.path,r,l,n);await Promise.all(f.map(async(Z)=>{let Ne=r.outputExtension?.({format:Z,packageType:i,options:r,entry:p}).dts??ae(Z,i),H=`${t}/${r.outDir}/${p.name}${Ne}`;await Bun.write(H,W);let Ue=Bun.file(H).size||0;u.progress("DTS",y(H),X(Ue),r.name)}))}))}catch(p){throw new h(b(p))}}}async function ft(e,t,r,n,s,o){let i=e.outputExtension?.({format:n,packageType:s,options:e,entry:r}).js??oe(n,s),a=await Bun.build({entrypoints:[`${t}/${r.path}`],format:n,naming:{entry:Ee(r.name,i)},splitting:ve(e.splitting,n),bytecode:Pe(e.bytecode,n),define:Be(e.define,e.shims,e.env,n),minify:Oe(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:n,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}/${r.name}${i}`,l=Bun.file(c).size||0;u.progress(n.toUpperCase(),y(c),X(l),e.name)}var N="0.4.20";var Ae="https://bun.sh/docs/installation",_e="https://bunup.arshadyaseen.com/#cli-options";function g(e){return(t,r)=>{r[e]=t===!0||t==="true"}}function x(e){return(t,r)=>{if(typeof t==="string")r[e]=t;else throw new d(`Option --${e} requires a string value`)}}function z(e){return(t,r)=>{if(typeof t==="string")r[e]=t.split(",");else throw new d(`Option --${e} requires a string value`)}}function mt(e){return(t,r)=>{if(typeof t==="boolean")r[e]=t;else if(typeof t==="string")if(t.toLowerCase()==="true"||t.toLowerCase()==="false")r[e]=t.toLowerCase()==="true";else r[e]=t;else throw new d(`Option --${e} requires a boolean or string value`)}}function dt(){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${ke}\x1B[0m
37
- `),process.exit(0)}function wt(){console.log(F),process.exit(0)}var Ne={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:g("minify")},watch:{flags:["w","watch"],handler:g("watch")},dts:{flags:["d","dts"],handler:g("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:xt("sourcemap")},target:{flags:["t","target"],handler:y("target")},minifyWhitespace:{flags:["mw","minify-whitespace"],handler:g("minifyWhitespace")},minifyIdentifiers:{flags:["mi","minify-identifiers"],handler:g("minifyIdentifiers")},minifySyntax:{flags:["ms","minify-syntax"],handler:g("minifySyntax")},clean:{flags:["c","clean"],handler:g("clean")},splitting:{flags:["s","splitting"],handler:g("splitting")},noExternal:{flags:["ne","no-external"],handler:Z("noExternal")},preferredTsconfigPath:{flags:["tsconfig","preferred-tsconfig-path"],handler:y("preferredTsconfigPath")},bytecode:{flags:["bc","bytecode"],handler:g("bytecode")},dtsOnly:{flags:["do","dts-only"],handler:g("dtsOnly")},silent:{flags:["silent"],handler:g("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:g("shims")},entry:{flags:["entry"],handler:(e,t,n)=>{if(typeof e!=="string")throw new d(`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=U(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:()=>yt()},version:{flags:["v","version"],handler:()=>wt()}},W={};for(let e of Object.values(Ne))for(let t of e.flags)W[t]=e.handler;function Fe(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=W[i];if(l)l(o,t,a);else throw new d(`Unknown option: --${s}`)}else{let i=W[s];if(i)i(o,t);else throw new d(`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=W[s];if(a)a(i,t);else throw new d(`Unknown option: -${s}`)}else Ne.entry.handler(r,t,void 0)}return t}(()=>{if(typeof Bun==="undefined")throw new d(`Bunup requires Bun to run.
38
- To install Bun, visit ${Ue}`)})();import{loadConfig as Et}from"coffi";import H from"node:path";import Ct from"chokidar";async function We(e,t){let n=new Set,r=k(e),s=B(r.entry);for(let l of s){let c=H.resolve(t,l.path),f=H.dirname(c);n.add(f)}let o=Ct.watch(Array.from(n),{persistent:!0,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50},ignoreInitial:!0,atomic:!0,ignorePermissionErrors:!0,ignored:[/[\\/]\.git[\\/]/,/[\\/]node_modules[\\/]/,H.join(t,r.outDir)]}),i=!1,a=async(l=!1)=>{if(i)return;i=!0;try{let c=performance.now();if(await N({...r,entry:s.map((f)=>f.path),clean:!1},t),r.onBuildSuccess?.(),!l)u.cli(`\uD83D\uDCE6 Rebuild finished in ${A(performance.now()-c)}`);await ee()}catch(c){G(c)}finally{i=!1}};o.on("change",(l)=>{let c=H.relative(t,l);u.cli(`File changed: ${c}`,{muted:!0,once:c}),a()}),o.on("error",(l)=>{throw new D(`Watcher error: ${b(l)}`)}),await a(!0)}async function $t(e=Bun.argv.slice(2)){let t=Fe(e);L(t.silent);let n=process.cwd(),{config:r,filepath:s}=await Et({name:"bunup.config",extensions:[".ts",".js",".mjs",".cjs"],maxDepth:1,preferredPath:t.config}),o=!r?[{rootDir:n,options:t}]:await Se(r,n);if(u.cli(`Using bunup v${F} 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:c,rootDir:f})=>{return ae(c).map(async(p)=>{let q={...p,...t};return Tt(q,f)})}));let a=performance.now()-i,l=A(a);if(u.cli(`\u26A1\uFE0F Build completed in ${l}`),await ee(),t.watch)u.cli("\uD83D\uDC40 Watching for file changes");if(!t.watch)process.exit(0)}async function ee(){if(R.size>0)await $e(R),R.clear()}async function Tt(e,t){if(e.watch)await We(e,t);else await N(e,t),e.onBuildSuccess?.()}$t().catch((e)=>re(e));export{ee as validateDtsFiles,$t as main};
36
+ `),console.log("For more information on available options, visit:"),console.log(`\x1B[36m\x1B[4m${_e}\x1B[0m
37
+ `),process.exit(0)}function gt(){console.log(N),process.exit(0)}var Me={name:{flags:["n","name"],handler:x("name")},format:{flags:["f","format"],handler:z("format")},outDir:{flags:["o","out-dir"],handler:x("outDir")},minify:{flags:["m","minify"],handler:g("minify")},watch:{flags:["w","watch"],handler:g("watch")},dts:{flags:["d","dts"],handler:g("dts")},banner:{flags:["bn","banner"],handler:x("banner")},footer:{flags:["ft","footer"],handler:x("footer")},external:{flags:["e","external"],handler:z("external")},sourcemap:{flags:["sm","sourcemap"],handler:mt("sourcemap")},target:{flags:["t","target"],handler:x("target")},minifyWhitespace:{flags:["mw","minify-whitespace"],handler:g("minifyWhitespace")},minifyIdentifiers:{flags:["mi","minify-identifiers"],handler:g("minifyIdentifiers")},minifySyntax:{flags:["ms","minify-syntax"],handler:g("minifySyntax")},clean:{flags:["c","clean"],handler:g("clean")},splitting:{flags:["s","splitting"],handler:g("splitting")},noExternal:{flags:["ne","no-external"],handler:z("noExternal")},preferredTsconfigPath:{flags:["tsconfig","preferred-tsconfig-path"],handler:x("preferredTsconfigPath")},bytecode:{flags:["bc","bytecode"],handler:g("bytecode")},dtsOnly:{flags:["do","dts-only"],handler:g("dtsOnly")},silent:{flags:["silent"],handler:g("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:g("shims")},entry:{flags:["entry"],handler:(e,t,r)=>{if(typeof e!=="string")throw new d(`Entry${r?` --entry.${r}`:""} requires a string value`);let n=t.entry||{};if(r){if(n[r])u.warn(`Duplicate entry name '${r}' provided via --entry.${r}. Overwriting previous entry.`);n[r]=e}else{let s=M(e);if(n[s])u.warn(`Duplicate entry name '${s}' derived from '${e}'. Overwriting previous entry.`);n[s]=e}t.entry=n}},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:()=>dt()},version:{flags:["v","version"],handler:()=>gt()}},U={};for(let e of Object.values(Me))for(let t of e.flags)U[t]=e.handler;function je(e){let t={};for(let r=0;r<e.length;r++){let n=e[r];if(n.startsWith("--")){let s,o;if(n.includes("=")){let[i,a]=n.slice(2).split("=",2);s=i,o=a}else{s=n.slice(2);let i=e[r+1];if(o=i&&!i.startsWith("-")?i:!0,typeof o==="string")r++}if(s.includes(".")){let[i,a]=s.split(".",2),c=U[i];if(c)c(o,t,a);else throw new d(`Unknown option: --${s}`)}else{let i=U[s];if(i)i(o,t);else throw new d(`Unknown option: --${s}`)}}else if(n.startsWith("-")){let s=n.slice(1),o=e[r+1],i=o&&!o.startsWith("-")?o:!0;if(typeof i==="string")r++;let a=U[s];if(a)a(i,t);else throw new d(`Unknown option: -${s}`)}else Me.entry.handler(n,t,void 0)}return t}(()=>{if(typeof Bun==="undefined")throw new d(`Bunup requires Bun to run.
38
+ To install Bun, visit ${Ae}`)})();import{loadConfig as bt}from"coffi";import F from"node:path";import ht from"chokidar";async function ke(e,t){let r=new Set,n=j(e),s=P(n.entry);for(let c of s){let l=F.resolve(t,c.path),f=F.dirname(l);r.add(f)}let o=ht.watch(Array.from(r),{persistent:!0,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50},ignoreInitial:!0,atomic:!0,ignorePermissionErrors:!0,ignored:[/[\\/]\.git[\\/]/,/[\\/]node_modules[\\/]/,F.join(t,n.outDir)]}),i=!1,a=async(c=!1)=>{if(i)return;i=!0;try{let l=performance.now();if(await k({...n,entry:s.map((f)=>f.path),clean:!1},t),n.onBuildSuccess?.(),!c)u.cli(`\uD83D\uDCE6 Rebuild finished in ${L(performance.now()-l)}`);await Q()}catch(l){q(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 v(`Watcher error: ${b(c)}`)}),await a(!0)}async function yt(e=Bun.argv.slice(2)){let t=je(e);B(t.silent);let r=process.cwd(),{config:n,filepath:s}=await bt({name:"bunup.config",extensions:[".ts",".js",".mjs",".cjs"],maxDepth:1,preferredPath:t.config}),o=!n?[{rootDir:r,options:t}]:await $e(n,r);if(u.cli(`Using bunup v${N} 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:l,rootDir:f})=>{return ie(l).map(async(p)=>{let W={...p,...t};return xt(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.watch)process.exit(0)}async function Q(){if(S.size>0)await xe(S),S.clear()}async function xt(e,t){if(e.watch)await ke(e,t);else await k(e,t),e.onBuildSuccess?.()}yt().catch((e)=>te(e));export{Q as validateDtsFiles,yt as main};
package/build/index.js CHANGED
@@ -1,8 +1,8 @@
1
- var vt=require("node:module");var Ft=Object.create;var{getPrototypeOf:Nt,defineProperty:C,getOwnPropertyNames:q,getOwnPropertyDescriptor:Wt}=Object,X=Object.prototype.hasOwnProperty;var h=(t,r,e)=>{e=t!=null?Ft(Nt(t)):{};let n=r||!t||!t.__esModule?C(e,"default",{value:t,enumerable:!0}):e;for(let s of q(t))if(!X.call(n,s))C(n,s,{get:()=>t[s],enumerable:!0});return n},G=new WeakMap,Ut=(t)=>{var r=G.get(t),e;if(r)return r;if(r=C({},"__esModule",{value:!0}),t&&typeof t==="object"||typeof t==="function")q(t).map((n)=>!X.call(r,n)&&C(r,n,{get:()=>t[n],enumerable:!(e=Wt(t,n))||e.enumerable}));return G.set(t,r),r};var kt=(t,r)=>{for(var e in r)C(t,e,{get:r[e],enumerable:!0,configurable:!0,set:(n)=>r[e]=()=>n})};var oe={};kt(oe,{defineWorkspace:()=>K,defineConfig:()=>H,build:()=>It});module.exports=Ut(oe);function H(t){return t}function K(t){return t}var gt=require("rolldown"),mt=require("rolldown-plugin-dts");var Y=!1;function Q(t){Y=t??!1}class b{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(!b.instance)b.instance=new b;return b.instance}dispose(){this.loggedOnceMessages.clear()}shouldLog(t){if(!t?.once)return!0;if(this.loggedOnceMessages.has(t.once))return!1;return this.loggedOnceMessages.add(t.once),!0}formatMessage({colorCode:t,label:r,message:e,size:n,identifier:s,muted:i}){let o=" ".repeat(Math.max(0,this.MAX_LABEL_LENGTH-r.length)),a=i?`\x1B[38;5;${this.colors.info}m${e}\x1B[0m`:e;if(n){let[c,...l]=a.split(" "),g=" ".repeat(Math.max(0,this.MAX_MESSAGE_LENGTH-c.length)),m=s?` \x1B[48;5;${t};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${t}m${r}\x1B[0m ${o}${c}${g} \x1B[38;5;${this.colors.size}m${n}\x1B[0m ${l.join(" ")}${m}`}let u=s?` \x1B[48;5;${t};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${t}m${r}\x1B[0m ${o}${a}${u}`}output(t,r={},e=console.log){if(Y)return;if(!this.shouldLog(r))return;if(r.verticalSpace)console.log("");if(e(t),r.verticalSpace)console.log("")}cli(t,r={}){let e=this.formatMessage({colorCode:this.colors.cli,label:this.labels.cli,message:t,identifier:r.identifier,muted:r.muted});this.output(e,r)}info(t,r={}){let e=this.formatMessage({colorCode:this.colors.info,label:this.labels.info,message:t,identifier:r.identifier,muted:r.muted});this.output(e,r)}warn(t,r={}){let e=this.formatMessage({colorCode:this.colors.warn,label:this.labels.warn,message:t,identifier:r.identifier,muted:r.muted});this.output(e,r,console.warn)}error(t,r={}){let e=this.formatMessage({colorCode:this.colors.error,label:this.labels.error,message:t,identifier:r.identifier,muted:r.muted});this.output(e,r,console.error)}progress(t,r,e,n){let s=String(t),i=this.colors.default,o,a,u={};if(typeof e==="string")o=e,a=n;else if(e)o=e.size,a=e.identifier,u=e;for(let[l,g]of Object.entries(this.colors.progress))if(s.includes(l)){i=g;break}let c=this.formatMessage({colorCode:i,label:s,message:r,size:o,identifier:a,muted:u.muted});this.output(c,u)}}var f=b.getInstance();class I extends Error{constructor(t){super(t);this.name="BunupError"}}class y extends I{constructor(t){super(t);this.name="BunupBuildError"}}class p extends I{constructor(t){super(t);this.name="BunupDTSBuildError"}}var d=(t)=>{if(t instanceof Error)return t.message;return String(t)};var A=h(require("node:fs/promises")),Z=h(require("node:path"));function _(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function z(t=8){let r="";while(r.length<t)r+=Math.random().toString(36).substring(2);return r.substring(0,t)}function J(t,r){switch(t){case"esm":return E(r)?".js":".mjs";case"cjs":return E(r)?".cjs":".js";case"iife":return".global.js"}}function tt(t,r){switch(t){case"esm":return E(r)?".d.ts":".d.mts";case"cjs":return E(r)?".d.cts":".d.ts";case"iife":return".d.ts"}}function j(t){return t==="node"||t==="bun"}function E(t){return t==="module"}function et(t){if(!t)return[];return Array.from(new Set([...Object.keys(t.dependencies||{}),...Object.keys(t.peerDependencies||{})]))}function F(t){if(t===0)return"0 B";let r=["B","KB","MB","GB"],e=Math.floor(Math.log(t)/Math.log(1024));if(e===0)return`${t} ${r[e]}`;return`${(t/1024**e).toFixed(2)} ${r[e]}`}function w(t,r=3){return t.split("/").slice(-r).join("/")}async function rt(t,r){let e=Z.default.join(t,r);try{await A.default.rm(e,{recursive:!0,force:!0})}catch(n){throw new y(`Failed to clean output directory: ${n}`)}await A.default.mkdir(e,{recursive:!0})}function P(t){return[".ts",".mts",".cts",".tsx"].some((r)=>t.endsWith(r))}function nt(t){return t.map((r)=>typeof r==="string"?new RegExp(`^${_(r)}($|\\/|\\\\)`):r)}function S(t,r){return nt(t.external||[]).concat(et(r).map((e)=>new RegExp(`^${_(e)}($|\\/|\\\\)`)))}function D(t){return nt(t.noExternal||[])}var ct=h(require("node:path")),lt=require("oxc-resolver");var x=h(require("node:path"));var T="\x00dts:",st=(t,r)=>{return{name:"bunup:virtual-dts",async resolveId(e,n){if(N(e))return e;if(!n||!N(n))return null;let s=await B(e,$(n),r);if(!s)return null;let i=R(s);if(t.has(i))return L(i);return null},load(e){if(e.startsWith(T)){let n=$(e),s=t.get(n);if(s)return it.add(n),s}return null}}};function ot(t){return t.tsconfig?.compilerOptions}function R(t){return t.replace(/\.(ts|tsx|mts|cts)$/,".d.ts")}function at(t){if(!t.path)return"";let r=x.default.dirname(t.path),e=ot(t);return e?.baseUrl?x.default.resolve(r,e.baseUrl):r}function Vt(t){let r=new Map,e=ot(t)?.paths;if(!e)return r;let n=at(t);for(let[s,i]of Object.entries(e))if(Array.isArray(i)&&i.length){let o=s.replace(/\*/g,"(.*)"),a=0,u=i[0].replace(/\*/g,()=>`$${++a}`);r.set(`^${o}$`,x.default.join(n,u))}return r}function Gt(t,r,e){for(let[n,s]of r){let i=new RegExp(n),o=t.match(i);if(o)return s.replace("$1",o[1]||"")}return e?x.default.join(e,t):null}async function qt(t){let r=["",".ts",".tsx",".cts",".mts","/index.ts","/index.tsx","/index.cts","/index.mts"];for(let e of r){let n=`${t}${e}`;if(await Bun.file(n).exists()&&(n.endsWith(".ts")||n.endsWith(".tsx")||n.endsWith(".cts")||n.endsWith(".mts")))return n}return null}function B(t,r,e){if(!e)return Promise.resolve(null);let n=Vt(e),s=at(e),i=t.startsWith(".")?x.default.resolve(x.default.dirname(r||""),t):Gt(t,n,s);if(!i)return Promise.resolve(null);return qt(i)}function N(t){return t.startsWith(T)}function $(t){return t.replace(T,"")}function L(t){return`${T}${t}`}var ut;function ft(t){return{name:"bunup:types-resolve",buildStart(){ut||=new lt.ResolverFactory({mainFields:["types"],conditionNames:["types","typings","import","require"],extensions:[".d.ts",".ts",".d.cts",".d.mts",".cts",".mts"],modules:["node_modules","node_modules/@types"]})},async resolveId(r,e){let n=e?$(e):void 0;if(/\0/.test(r))return;if(t){if(!t.some((a)=>{let u=!1;if(typeof a==="string")u=a===r||!!n?.includes(a);else u=a.test(r)||!!(n&&a.test(n));return u}))return}let s=n?ct.default.dirname(n):process.cwd(),{path:i}=await ut.async(s,r);if(!i)return;if(/[cm]?jsx?$/.test(i)){let o=i.replace(/\.([cm]?)jsx?$/,".d.$1ts");return await Bun.file(o).exists()?o:void 0}return i}}}async function pt(t,r,e,n,s){let i=R(t),o=L(i),a=S(e,n),u=D(e);try{let{output:c}=await gt.build({input:o,output:{dir:e.outDir,inlineDynamicImports:!0},write:!1,onwarn(l,g){if(["UNRESOLVED_IMPORT","CIRCULAR_DEPENDENCY","EMPTY_BUNDLE"].includes(l.code??""))return;g(l)},plugins:[st(r,s),typeof e.dts==="object"&&"resolve"in e.dts&&ft(typeof e.dts.resolve==="boolean"?void 0:e.dts.resolve),mt.dts({dtsInput:!0,emitDtsOnly:!0})],external:(l)=>a.some((g)=>g.test(l))&&!u.some((g)=>g.test(l))});if(!c[0]?.code)return f.warn(`Generated empty declaration file for entry "${t}"`,{muted:!0}),"";return c[0].code}catch(c){throw new p(`DTS bundling failed for entry "${t}": ${d(c)}`)}}var Xt=/^\s*import\s+(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]/gm,Ht=/^\s*export\s+.*from\s+['"]([^'"]+)['"]/gm,Kt=/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Yt=/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Qt=/import\s+\w+\s*=\s*require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Zt=/\/\/\/\s*<reference\s+path\s*=\s*['"]([^'"]+)['"]\s*\/>/g,zt=/\/\/\/\s*<reference\s+types\s*=\s*['"]([^'"]+)['"]\s*\/>/g;function Jt(t){let r=new Set,e=[Xt,Ht,Kt,Yt,Qt,Zt,zt];for(let n of e){let s=t.matchAll(n);for(let i of s)if(i[1])r.add(i[1])}return r}async function dt(t,r){let e=new Set([t]),n=[t];while(n.length){let s=n.pop();if(!s)continue;try{let i=await Bun.file(s).text(),o=Jt(i);for(let a of o){let u=await B(a,s,r);if(!u)continue;if(!e.has(u))e.add(u),n.push(u)}}catch(i){f.warn(`Error processing ${s}: ${d(i)}`)}}return e}var xt=require("oxc-transform");async function ht(t){let r=new Map;return await Promise.all([...t].map(async(e)=>{try{let n=R(e);if(!await Bun.file(e).exists())return;let i=await Bun.file(e).text(),{code:o}=xt.isolatedDeclaration(e,i);if(o)r.set(n,o)}catch(n){f.warn(`Failed to generate declaration for ${e}: ${d(n)}`)}})),r}var W=h(require("node:fs/promises")),M=h(require("node:path")),te=require("oxc-transform");async function bt(t,r){let e=M.default.resolve(t),n=M.default.resolve(e,r);if(!await W.default.exists(e))throw new p(`Root directory does not exist: ${e}`);if(!await Bun.file(n).exists())throw new p(`Entry file does not exist: ${n}`);if(!P(n))throw new p(`Entry file must be a TypeScript file: ${n}`);if(M.default.relative(e,n).startsWith(".."))throw new p(`Entry file must be within rootDir: ${n}`);return{absoluteRootDir:e,absoluteEntry:n}}async function yt(t,r,e,n,s){let{absoluteEntry:i}=await bt(t,r),o=await dt(i,n),a=await ht(o);return pt(i,a,e,s,n)}function Et(t){return t.split("/").pop()?.split(".").slice(0,-1).join(".")||""}function U(t,{warnOnConflict:r=!0}={}){let e=[],n=new Set,s={};function i(o,a){if(n.has(o)){let u=z(),c=`${o}_${u}`;if(r)f.warn(`Output name conflict: "${o}" is used by multiple files.
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 ce=require("rolldown"),le=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,...c]=a.split(" "),p=" ".repeat(Math.max(0,this.MAX_MESSAGE_LENGTH-u.length)),l=s?` \x1B[48;5;${e};38;5;0m ${s} \x1B[0m`:"";return`\x1B[38;5;${e}m${t}\x1B[0m ${o}${u}${p} \x1B[38;5;${this.colors.size}m${n}\x1B[0m ${c.join(" ")}${l}`}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[c,p]of Object.entries(this.colors.progress))if(s.includes(c)){i=p;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 d extends L{constructor(e){super(e);this.name="BunupDTSBuildError"}}var g=(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=re.resolveTypeScriptImportPath({path:n,importer:C(s),tsconfig:t.tsconfig,rootDir:r});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:c}=await ce.build({input:a,output:{dir:r.outDir,inlineDynamicImports:!0},write:!1,onwarn(p,l){if(["UNRESOLVED_IMPORT","CIRCULAR_DEPENDENCY","EMPTY_BUNDLE"].includes(p.code??""))return;l(p)},plugins:[ne(t,s,i),typeof r.dts==="object"&&"resolve"in r.dts&&ue(typeof r.dts.resolve==="boolean"?void 0:r.dts.resolve),le.dts({dtsInput:!0,emitDtsOnly:!0})],external:(p)=>m.some((l)=>l.test(p))&&!u.some((l)=>l.test(p))});if(!c[0]?.code)return f.warn(`Generated empty declaration file for entry "${e}"`,{muted:!0}),"";return c[0].code}catch(c){throw new d(`DTS bundling failed for entry "${e}": ${g(c)}`)}}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 pe(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=fe.resolveTypeScriptImportPath({path:m,importer:i,tsconfig:t.tsconfig,rootDir:r});if(!u)continue;if(!n.has(u))n.add(u),s.push(u)}}catch(o){f.warn(`Error processing ${i}: ${g(o)}`)}}return n}var de=require("oxc-transform");async function ge(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}=de.isolatedDeclaration(r,i);if(o)t.set(n,o)}catch(n){f.warn(`Failed to generate declaration for ${r}: ${g(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 d(`Root directory does not exist: ${r}`);if(!await Bun.file(n).exists())throw new d(`Entry file does not exist: ${n}`);if(!$(n))throw new d(`Entry file must be a TypeScript file: ${n}`);if(D.default.relative(r,n).startsWith(".."))throw new d(`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 pe(i,n,e),a=await ge(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.
2
2
  Bunup uses filenames without extensions as output names by default.
3
3
 
4
4
  ${s[o]} -> ${o}.js
5
- ${a} -> ${c}.js (auto-renamed to avoid conflict)
5
+ ${a} -> ${u}.js (auto-renamed to avoid conflict)
6
6
 
7
7
  To fix this, use named entries in your configuration:
8
8
  {
@@ -12,15 +12,15 @@ To fix this, use named entries in your configuration:
12
12
  }
13
13
  }
14
14
 
15
- See: https://bunup.arshadyaseen.com/#named-entries`,{muted:!0,verticalSpace:!0});e.push({name:c,path:a})}else e.push({name:o,path:a}),n.add(o),s[o]=a}if(Array.isArray(t))for(let o of t){let a=Et(o);i(a,o)}else if(typeof t==="object")for(let[o,a]of Object.entries(t))i(o,a);else{let o=Et(t);i(o,t)}return e}function wt(t){return t.filter((r)=>P(r.path))}function Rt(t,r){return`[dir]/${t}${r}`}var k=require("coffi");async function Ct(t){let{config:r,filepath:e}=await k.loadConfig({name:"package",cwd:t,extensions:[".json"],maxDepth:1});return{packageJson:r,path:e}}async function $t(t,r){let{config:e,filepath:n}=await k.loadConfig({name:"tsconfig",cwd:t,extensions:[".json"],preferredPath:r,maxDepth:3});return{tsconfig:e,path:n}}var ee={entry:[],format:["cjs"],outDir:"dist",target:"node",clean:!0};function Tt(t){return{...ee,...t}}function Pt(t){let{minify:r,minifyWhitespace:e,minifyIdentifiers:n,minifySyntax:s}=t,i=r===!0;return{whitespace:e??i,identifiers:n??i,syntax:s??i}}function St(t,r){return r==="cjs"?t:void 0}function Dt(t,r,e,n){return{...typeof e==="object"&&Object.keys(e).reduce((s,i)=>{let o=JSON.stringify(e[i]);return s[`process.env.${i}`]=o,s[`import.meta.env.${i}`]=o,s},{}),...t,...n==="cjs"&&(r===!0||typeof r==="object"&&r.importMetaUrl)&&{"import.meta.url":"importMetaUrl"}}}function Bt(t,r){return t===void 0?r==="esm":t}function Lt(t){return typeof t==="string"?t:void 0}function Mt(t,r){return{name:"bunup:external-plugin",setup(e){e.onResolve({filter:/.*/},(n)=>{let s=n.path;if(t.some((o)=>o.test(s))&&!r.some((o)=>o.test(s)))return{path:s,external:!0};return null})}}}var re=/\.(js|ts|jsx|tsx|mts|cts)$/,v={dirnameFilename:{appliesTo:(t,r)=>t==="esm"&&j(r),isNeededInFile:(t)=>/\b__dirname\b/.test(t)||/\b__filename\b/.test(t),generateCode:()=>`import { fileURLToPath } from 'url';
15
+ See: https://bunup.arshadyaseen.com/#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:1});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';
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:(t,r)=>t==="cjs"&&j(r),isNeededInFile:(t)=>/\bimport\.meta\.url\b/.test(t),generateCode:()=>`import { pathToFileURL } from 'url';
21
+ `},importMetaUrl:{appliesTo:(e,t)=>e==="cjs"&&A(t),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 Ot({format:t,target:r,shims:e}){let s=ne(e).map((i)=>v[i]).filter((i)=>i.appliesTo(t,r));if(s.length===0)return{name:"bunup:inject-shims",setup(){}};return{name:"bunup:inject-shims",setup(i){i.onLoad({filter:re},async({path:o})=>{let a=await Bun.file(o).text(),u=s.filter((m)=>m.isNeededInFile(a));if(u.length===0)return;let{shebangLine:c,codeContent:l}=se(a),g=u.map((m)=>m.generateCode()).join("");return{contents:c+g+l}})}}}function ne(t){if(t===!0)return Object.keys(v);if(!t)return[];return Object.entries(t).filter(([r,e])=>e&&(r in v)).map(([r])=>r)}function se(t){if(!t.startsWith("#!"))return{shebangLine:"",codeContent:t};let r=t.indexOf(`
26
- `);return r===-1?{shebangLine:"",codeContent:t}:{shebangLine:t.slice(0,r+1),codeContent:t.slice(r+1)}}var it=new Set;async function It(t,r){let e=Tt(t);if(!e.entry||e.entry.length===0||!e.outDir)throw new y("Nothing to build. Please make sure you have provided a proper bunup configuration or cli arguments.");if(e.clean)rt(r,e.outDir);Q(e.silent);let{packageJson:n,path:s}=await Ct(r);if(n&&s)f.cli(`Using package.json: ${w(s,2)}`,{muted:!0,identifier:e.name,once:`${s}:${e.name}`});let i=U(e.entry),o=n?.type,a=S(e,n),u=D(e);if(!e.dtsOnly){let c=[Mt(a,u)],l=e.format.flatMap((g)=>i.map((m)=>{return ie(e,r,m,g,o,c)}));await Promise.all(l)}if(e.dts||e.dtsOnly){let c=await $t(r,e.preferredTsconfigPath);if(c.path)f.cli(`Using tsconfig: ${w(c.path,2)}`,{muted:!0,identifier:e.name,once:`${c.path}:${e.name}`});let l=e.format.filter((m)=>{if(m==="iife"&&!E(o)&&e.format.includes("cjs"))return!1;return!0}),g=typeof e.dts==="object"&&e.dts.entry?U(e.dts.entry):wt(i);try{await Promise.all(g.map(async(m)=>{let At=await yt(r,m.path,e,c,n);await Promise.all(l.map(async(V)=>{let _t=e.outputExtension?.({format:V,packageType:o,options:e,entry:m}).dts??tt(V,o),O=`${r}/${e.outDir}/${m.name}${_t}`;await Bun.write(O,At);let jt=Bun.file(O).size||0;f.progress("DTS",w(O),F(jt),e.name)}))}))}catch(m){throw new p(d(m))}}}async function ie(t,r,e,n,s,i){let o=t.outputExtension?.({format:n,packageType:s,options:t,entry:e}).js??J(n,s),a=await Bun.build({entrypoints:[`${r}/${e.path}`],format:n,naming:{entry:Rt(e.name,o)},splitting:Bt(t.splitting,n),bytecode:St(t.bytecode,n),define:Dt(t.define,t.shims,t.env,n),minify:Pt(t),outdir:`${r}/${t.outDir}`,target:t.target,sourcemap:t.sourcemap,loader:t.loader,drop:t.drop,banner:t.banner,footer:t.footer,publicPath:t.publicPath,env:Lt(t.env),plugins:[...i,Ot({format:n,target:t.target,shims:t.shims}),...t.bunBuildPlugins??[]],throw:!1});if(!a.success)for(let l of a.logs){if(l.level==="error")throw new y(l.message);if(l.level==="warning")f.warn(l.message);else if(l.level==="info")f.info(l.message)}let u=`${r}/${t.outDir}/${e.name}${o}`,c=Bun.file(u).size||0;f.progress(n.toUpperCase(),w(u),F(c),t.name)}
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((l)=>l.isNeededInFile(a));if(m.length===0)return;let{shebangLine:u,codeContent:c}=Je(a),p=m.map((l)=>l.generateCode()).join("");return{contents:u+p+c}})}}}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)],c=r.format.flatMap((p)=>i.map((l)=>{return et(r,t,l,p,o,u)}));await Promise.all(c)}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 c=r.format.filter((l)=>{if(l==="iife"&&!b(o)&&r.format.includes("cjs"))return!1;return!0}),p=typeof r.dts==="object"&&r.dts.entry?N(r.dts.entry):ye(i);try{await Promise.all(p.map(async(l)=>{let Me=await he(t,l.path,r,u,n);await Promise.all(c.map(async(k)=>{let Oe=r.outputExtension?.({format:k,packageType:o,options:r,entry:l}).dts??z(k,o),I=`${t}/${r.outDir}/${l.name}${Oe}`;await Bun.write(I,Me);let Ae=Bun.file(I).size||0;f.progress("DTS",y(I),_(Ae),r.name)}))}))}catch(l){throw new d(g(l))}}}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 c of a.logs){if(c.level==="error")throw new h(c.message);if(c.level==="warning")f.warn(c.message);else if(c.level==="info")f.info(c.message)}let m=`${t}/${e.outDir}/${r.name}${o}`,u=Bun.file(m).size||0;f.progress(n.toUpperCase(),y(m),_(u),e.name)}
package/build/index.mjs CHANGED
@@ -1,26 +1,26 @@
1
- function Ct(t){return t}function $t(t){return t}import{build as Mt}from"rolldown";import{dts as Ot}from"rolldown-plugin-dts";var W=!1;function U(t){W=t??!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(t){if(!t?.once)return!0;if(this.loggedOnceMessages.has(t.once))return!1;return this.loggedOnceMessages.add(t.once),!0}formatMessage({colorCode:t,label:r,message:e,size:n,identifier:i,muted:s}){let o=" ".repeat(Math.max(0,this.MAX_LABEL_LENGTH-r.length)),a=s?`\x1B[38;5;${this.colors.info}m${e}\x1B[0m`:e;if(n){let[c,...l]=a.split(" "),g=" ".repeat(Math.max(0,this.MAX_MESSAGE_LENGTH-c.length)),m=i?` \x1B[48;5;${t};38;5;0m ${i} \x1B[0m`:"";return`\x1B[38;5;${t}m${r}\x1B[0m ${o}${c}${g} \x1B[38;5;${this.colors.size}m${n}\x1B[0m ${l.join(" ")}${m}`}let u=i?` \x1B[48;5;${t};38;5;0m ${i} \x1B[0m`:"";return`\x1B[38;5;${t}m${r}\x1B[0m ${o}${a}${u}`}output(t,r={},e=console.log){if(W)return;if(!this.shouldLog(r))return;if(r.verticalSpace)console.log("");if(e(t),r.verticalSpace)console.log("")}cli(t,r={}){let e=this.formatMessage({colorCode:this.colors.cli,label:this.labels.cli,message:t,identifier:r.identifier,muted:r.muted});this.output(e,r)}info(t,r={}){let e=this.formatMessage({colorCode:this.colors.info,label:this.labels.info,message:t,identifier:r.identifier,muted:r.muted});this.output(e,r)}warn(t,r={}){let e=this.formatMessage({colorCode:this.colors.warn,label:this.labels.warn,message:t,identifier:r.identifier,muted:r.muted});this.output(e,r,console.warn)}error(t,r={}){let e=this.formatMessage({colorCode:this.colors.error,label:this.labels.error,message:t,identifier:r.identifier,muted:r.muted});this.output(e,r,console.error)}progress(t,r,e,n){let i=String(t),s=this.colors.default,o,a,u={};if(typeof e==="string")o=e,a=n;else if(e)o=e.size,a=e.identifier,u=e;for(let[l,g]of Object.entries(this.colors.progress))if(i.includes(l)){s=g;break}let c=this.formatMessage({colorCode:s,label:i,message:r,size:o,identifier:a,muted:u.muted});this.output(c,u)}}var f=x.getInstance();class L extends Error{constructor(t){super(t);this.name="BunupError"}}class h extends L{constructor(t){super(t);this.name="BunupBuildError"}}class p extends L{constructor(t){super(t);this.name="BunupDTSBuildError"}}var d=(t)=>{if(t instanceof Error)return t.message;return String(t)};import k from"node:fs/promises";import Tt from"node:path";function M(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function v(t=8){let r="";while(r.length<t)r+=Math.random().toString(36).substring(2);return r.substring(0,t)}function V(t,r){switch(t){case"esm":return b(r)?".js":".mjs";case"cjs":return b(r)?".cjs":".js";case"iife":return".global.js"}}function G(t,r){switch(t){case"esm":return b(r)?".d.ts":".d.mts";case"cjs":return b(r)?".d.cts":".d.ts";case"iife":return".d.ts"}}function O(t){return t==="node"||t==="bun"}function b(t){return t==="module"}function q(t){if(!t)return[];return Array.from(new Set([...Object.keys(t.dependencies||{}),...Object.keys(t.peerDependencies||{})]))}function I(t){if(t===0)return"0 B";let r=["B","KB","MB","GB"],e=Math.floor(Math.log(t)/Math.log(1024));if(e===0)return`${t} ${r[e]}`;return`${(t/1024**e).toFixed(2)} ${r[e]}`}function y(t,r=3){return t.split("/").slice(-r).join("/")}async function X(t,r){let e=Tt.join(t,r);try{await k.rm(e,{recursive:!0,force:!0})}catch(n){throw new h(`Failed to clean output directory: ${n}`)}await k.mkdir(e,{recursive:!0})}function $(t){return[".ts",".mts",".cts",".tsx"].some((r)=>t.endsWith(r))}function H(t){return t.map((r)=>typeof r==="string"?new RegExp(`^${M(r)}($|\\/|\\\\)`):r)}function T(t,r){return H(t.external||[]).concat(q(r).map((e)=>new RegExp(`^${M(e)}($|\\/|\\\\)`)))}function P(t){return H(t.noExternal||[])}import Bt from"node:path";import{ResolverFactory as Lt}from"oxc-resolver";import w from"node:path";var C="\x00dts:",K=(t,r)=>{return{name:"bunup:virtual-dts",async resolveId(e,n){if(A(e))return e;if(!n||!A(n))return null;let i=await S(e,R(n),r);if(!i)return null;let s=E(i);if(t.has(s))return D(s);return null},load(e){if(e.startsWith(C)){let n=R(e),i=t.get(n);if(i)return Y.add(n),i}return null}}};function Q(t){return t.tsconfig?.compilerOptions}function E(t){return t.replace(/\.(ts|tsx|mts|cts)$/,".d.ts")}function Z(t){if(!t.path)return"";let r=w.dirname(t.path),e=Q(t);return e?.baseUrl?w.resolve(r,e.baseUrl):r}function Pt(t){let r=new Map,e=Q(t)?.paths;if(!e)return r;let n=Z(t);for(let[i,s]of Object.entries(e))if(Array.isArray(s)&&s.length){let o=i.replace(/\*/g,"(.*)"),a=0,u=s[0].replace(/\*/g,()=>`$${++a}`);r.set(`^${o}$`,w.join(n,u))}return r}function St(t,r,e){for(let[n,i]of r){let s=new RegExp(n),o=t.match(s);if(o)return i.replace("$1",o[1]||"")}return e?w.join(e,t):null}async function Dt(t){let r=["",".ts",".tsx",".cts",".mts","/index.ts","/index.tsx","/index.cts","/index.mts"];for(let e of r){let n=`${t}${e}`;if(await Bun.file(n).exists()&&(n.endsWith(".ts")||n.endsWith(".tsx")||n.endsWith(".cts")||n.endsWith(".mts")))return n}return null}function S(t,r,e){if(!e)return Promise.resolve(null);let n=Pt(e),i=Z(e),s=t.startsWith(".")?w.resolve(w.dirname(r||""),t):St(t,n,i);if(!s)return Promise.resolve(null);return Dt(s)}function A(t){return t.startsWith(C)}function R(t){return t.replace(C,"")}function D(t){return`${C}${t}`}var z;function J(t){return{name:"bunup:types-resolve",buildStart(){z||=new Lt({mainFields:["types"],conditionNames:["types","typings","import","require"],extensions:[".d.ts",".ts",".d.cts",".d.mts",".cts",".mts"],modules:["node_modules","node_modules/@types"]})},async resolveId(r,e){let n=e?R(e):void 0;if(/\0/.test(r))return;if(t){if(!t.some((a)=>{let u=!1;if(typeof a==="string")u=a===r||!!n?.includes(a);else u=a.test(r)||!!(n&&a.test(n));return u}))return}let i=n?Bt.dirname(n):process.cwd(),{path:s}=await z.async(i,r);if(!s)return;if(/[cm]?jsx?$/.test(s)){let o=s.replace(/\.([cm]?)jsx?$/,".d.$1ts");return await Bun.file(o).exists()?o:void 0}return s}}}async function tt(t,r,e,n,i){let s=E(t),o=D(s),a=T(e,n),u=P(e);try{let{output:c}=await Mt({input:o,output:{dir:e.outDir,inlineDynamicImports:!0},write:!1,onwarn(l,g){if(["UNRESOLVED_IMPORT","CIRCULAR_DEPENDENCY","EMPTY_BUNDLE"].includes(l.code??""))return;g(l)},plugins:[K(r,i),typeof e.dts==="object"&&"resolve"in e.dts&&J(typeof e.dts.resolve==="boolean"?void 0:e.dts.resolve),Ot({dtsInput:!0,emitDtsOnly:!0})],external:(l)=>a.some((g)=>g.test(l))&&!u.some((g)=>g.test(l))});if(!c[0]?.code)return f.warn(`Generated empty declaration file for entry "${t}"`,{muted:!0}),"";return c[0].code}catch(c){throw new p(`DTS bundling failed for entry "${t}": ${d(c)}`)}}var It=/^\s*import\s+(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]/gm,At=/^\s*export\s+.*from\s+['"]([^'"]+)['"]/gm,_t=/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g,jt=/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Ft=/import\s+\w+\s*=\s*require\s*\(\s*['"]([^'"]+)['"]\s*\)/g,Nt=/\/\/\/\s*<reference\s+path\s*=\s*['"]([^'"]+)['"]\s*\/>/g,Wt=/\/\/\/\s*<reference\s+types\s*=\s*['"]([^'"]+)['"]\s*\/>/g;function Ut(t){let r=new Set,e=[It,At,_t,jt,Ft,Nt,Wt];for(let n of e){let i=t.matchAll(n);for(let s of i)if(s[1])r.add(s[1])}return r}async function et(t,r){let e=new Set([t]),n=[t];while(n.length){let i=n.pop();if(!i)continue;try{let s=await Bun.file(i).text(),o=Ut(s);for(let a of o){let u=await S(a,i,r);if(!u)continue;if(!e.has(u))e.add(u),n.push(u)}}catch(s){f.warn(`Error processing ${i}: ${d(s)}`)}}return e}import{isolatedDeclaration as kt}from"oxc-transform";async function rt(t){let r=new Map;return await Promise.all([...t].map(async(e)=>{try{let n=E(e);if(!await Bun.file(e).exists())return;let s=await Bun.file(e).text(),{code:o}=kt(e,s);if(o)r.set(n,o)}catch(n){f.warn(`Failed to generate declaration for ${e}: ${d(n)}`)}})),r}import nt from"node:fs/promises";import _ from"node:path";import{isolatedDeclaration as _e}from"oxc-transform";async function st(t,r){let e=_.resolve(t),n=_.resolve(e,r);if(!await nt.exists(e))throw new p(`Root directory does not exist: ${e}`);if(!await Bun.file(n).exists())throw new p(`Entry file does not exist: ${n}`);if(!$(n))throw new p(`Entry file must be a TypeScript file: ${n}`);if(_.relative(e,n).startsWith(".."))throw new p(`Entry file must be within rootDir: ${n}`);return{absoluteRootDir:e,absoluteEntry:n}}async function it(t,r,e,n,i){let{absoluteEntry:s}=await st(t,r),o=await et(s,n),a=await rt(o);return tt(s,a,e,i,n)}function ot(t){return t.split("/").pop()?.split(".").slice(0,-1).join(".")||""}function j(t,{warnOnConflict:r=!0}={}){let e=[],n=new Set,i={};function s(o,a){if(n.has(o)){let u=v(),c=`${o}_${u}`;if(r)f.warn(`Output name conflict: "${o}" is used by multiple files.
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,...c]=a.split(" "),p=" ".repeat(Math.max(0,this.MAX_MESSAGE_LENGTH-u.length)),l=o?` \x1B[48;5;${e};38;5;0m ${o} \x1B[0m`:"";return`\x1B[38;5;${e}m${t}\x1B[0m ${s}${u}${p} \x1B[38;5;${this.colors.size}m${n}\x1B[0m ${c.join(" ")}${l}`}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[c,p]of Object.entries(this.colors.progress))if(o.includes(c)){i=p;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 d extends B{constructor(e){super(e);this.name="BunupDTSBuildError"}}var g=(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{resolveTypeScriptImportPath 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=Re({path:n,importer:w(o),tsconfig:t.tsconfig,rootDir:r});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:c}=await $e({input:a,output:{dir:r.outDir,inlineDynamicImports:!0},write:!1,onwarn(p,l){if(["UNRESOLVED_IMPORT","CIRCULAR_DEPENDENCY","EMPTY_BUNDLE"].includes(p.code??""))return;l(p)},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:(p)=>m.some((l)=>l.test(p))&&!u.some((l)=>l.test(p))});if(!c[0]?.code)return f.warn(`Generated empty declaration file for entry "${e}"`,{muted:!0}),"";return c[0].code}catch(c){throw new d(`DTS bundling failed for entry "${e}": ${g(c)}`)}}import{resolveTypeScriptImportPath 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=Pe({path:m,importer:i,tsconfig:t.tsconfig,rootDir:r});if(!u)continue;if(!n.has(u))n.add(u),o.push(u)}}catch(s){f.warn(`Error processing ${i}: ${g(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}: ${g(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 d(`Root directory does not exist: ${r}`);if(!await Bun.file(n).exists())throw new d(`Entry file does not exist: ${n}`);if(!C(n))throw new d(`Entry file must be a TypeScript file: ${n}`);if(O.relative(r,n).startsWith(".."))throw new d(`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.
2
2
  Bunup uses filenames without extensions as output names by default.
3
3
 
4
- ${i[o]} -> ${o}.js
5
- ${a} -> ${c}.js (auto-renamed to avoid conflict)
4
+ ${o[s]} -> ${s}.js
5
+ ${a} -> ${u}.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: "${i[o]}",
10
+ custom_name: "${o[s]}",
11
11
  another_name: "${a}"
12
12
  }
13
13
  }
14
14
 
15
- See: https://bunup.arshadyaseen.com/#named-entries`,{muted:!0,verticalSpace:!0});e.push({name:c,path:a})}else e.push({name:o,path:a}),n.add(o),i[o]=a}if(Array.isArray(t))for(let o of t){let a=ot(o);s(a,o)}else if(typeof t==="object")for(let[o,a]of Object.entries(t))s(o,a);else{let o=ot(t);s(o,t)}return e}function at(t){return t.filter((r)=>$(r.path))}function ut(t,r){return`[dir]/${t}${r}`}import{loadConfig as ct}from"coffi";async function lt(t){let{config:r,filepath:e}=await ct({name:"package",cwd:t,extensions:[".json"],maxDepth:1});return{packageJson:r,path:e}}async function ft(t,r){let{config:e,filepath:n}=await ct({name:"tsconfig",cwd:t,extensions:[".json"],preferredPath:r,maxDepth:3});return{tsconfig:e,path:n}}var vt={entry:[],format:["cjs"],outDir:"dist",target:"node",clean:!0};function gt(t){return{...vt,...t}}function mt(t){let{minify:r,minifyWhitespace:e,minifyIdentifiers:n,minifySyntax:i}=t,s=r===!0;return{whitespace:e??s,identifiers:n??s,syntax:i??s}}function pt(t,r){return r==="cjs"?t:void 0}function dt(t,r,e,n){return{...typeof e==="object"&&Object.keys(e).reduce((i,s)=>{let o=JSON.stringify(e[s]);return i[`process.env.${s}`]=o,i[`import.meta.env.${s}`]=o,i},{}),...t,...n==="cjs"&&(r===!0||typeof r==="object"&&r.importMetaUrl)&&{"import.meta.url":"importMetaUrl"}}}function xt(t,r){return t===void 0?r==="esm":t}function ht(t){return typeof t==="string"?t:void 0}function bt(t,r){return{name:"bunup:external-plugin",setup(e){e.onResolve({filter:/.*/},(n)=>{let i=n.path;if(t.some((o)=>o.test(i))&&!r.some((o)=>o.test(i)))return{path:i,external:!0};return null})}}}var Vt=/\.(js|ts|jsx|tsx|mts|cts)$/,F={dirnameFilename:{appliesTo:(t,r)=>t==="esm"&&O(r),isNeededInFile:(t)=>/\b__dirname\b/.test(t)||/\b__filename\b/.test(t),generateCode:()=>`import { fileURLToPath } from 'url';
15
+ See: https://bunup.arshadyaseen.com/#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:1});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 ce(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 le(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 pe(e){return typeof e==="string"?e:void 0}function de(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';
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:(t,r)=>t==="cjs"&&O(r),isNeededInFile:(t)=>/\bimport\.meta\.url\b/.test(t),generateCode:()=>`import { pathToFileURL } from 'url';
21
+ `},importMetaUrl:{appliesTo:(e,t)=>e==="cjs"&&I(t),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 yt({format:t,target:r,shims:e}){let i=Gt(e).map((s)=>F[s]).filter((s)=>s.appliesTo(t,r));if(i.length===0)return{name:"bunup:inject-shims",setup(){}};return{name:"bunup:inject-shims",setup(s){s.onLoad({filter:Vt},async({path:o})=>{let a=await Bun.file(o).text(),u=i.filter((m)=>m.isNeededInFile(a));if(u.length===0)return;let{shebangLine:c,codeContent:l}=qt(a),g=u.map((m)=>m.generateCode()).join("");return{contents:c+g+l}})}}}function Gt(t){if(t===!0)return Object.keys(F);if(!t)return[];return Object.entries(t).filter(([r,e])=>e&&(r in F)).map(([r])=>r)}function qt(t){if(!t.startsWith("#!"))return{shebangLine:"",codeContent:t};let r=t.indexOf(`
26
- `);return r===-1?{shebangLine:"",codeContent:t}:{shebangLine:t.slice(0,r+1),codeContent:t.slice(r+1)}}var Y=new Set;async function Xt(t,r){let e=gt(t);if(!e.entry||e.entry.length===0||!e.outDir)throw new h("Nothing to build. Please make sure you have provided a proper bunup configuration or cli arguments.");if(e.clean)X(r,e.outDir);U(e.silent);let{packageJson:n,path:i}=await lt(r);if(n&&i)f.cli(`Using package.json: ${y(i,2)}`,{muted:!0,identifier:e.name,once:`${i}:${e.name}`});let s=j(e.entry),o=n?.type,a=T(e,n),u=P(e);if(!e.dtsOnly){let c=[bt(a,u)],l=e.format.flatMap((g)=>s.map((m)=>{return Ht(e,r,m,g,o,c)}));await Promise.all(l)}if(e.dts||e.dtsOnly){let c=await ft(r,e.preferredTsconfigPath);if(c.path)f.cli(`Using tsconfig: ${y(c.path,2)}`,{muted:!0,identifier:e.name,once:`${c.path}:${e.name}`});let l=e.format.filter((m)=>{if(m==="iife"&&!b(o)&&e.format.includes("cjs"))return!1;return!0}),g=typeof e.dts==="object"&&e.dts.entry?j(e.dts.entry):at(s);try{await Promise.all(g.map(async(m)=>{let Et=await it(r,m.path,e,c,n);await Promise.all(l.map(async(N)=>{let wt=e.outputExtension?.({format:N,packageType:o,options:e,entry:m}).dts??G(N,o),B=`${r}/${e.outDir}/${m.name}${wt}`;await Bun.write(B,Et);let Rt=Bun.file(B).size||0;f.progress("DTS",y(B),I(Rt),e.name)}))}))}catch(m){throw new p(d(m))}}}async function Ht(t,r,e,n,i,s){let o=t.outputExtension?.({format:n,packageType:i,options:t,entry:e}).js??V(n,i),a=await Bun.build({entrypoints:[`${r}/${e.path}`],format:n,naming:{entry:ut(e.name,o)},splitting:xt(t.splitting,n),bytecode:pt(t.bytecode,n),define:dt(t.define,t.shims,t.env,n),minify:mt(t),outdir:`${r}/${t.outDir}`,target:t.target,sourcemap:t.sourcemap,loader:t.loader,drop:t.drop,banner:t.banner,footer:t.footer,publicPath:t.publicPath,env:ht(t.env),plugins:[...s,yt({format:n,target:t.target,shims:t.shims}),...t.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 u=`${r}/${t.outDir}/${e.name}${o}`,c=Bun.file(u).size||0;f.progress(n.toUpperCase(),y(u),I(c),t.name)}export{$t as defineWorkspace,Ct as defineConfig,Xt as build};
25
+ `}};function ge({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((l)=>l.isNeededInFile(a));if(m.length===0)return;let{shebangLine:u,codeContent:c}=We(a),p=m.map((l)=>l.generateCode()).join("");return{contents:u+p+c}})}}}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=[de(a,m)],c=r.format.flatMap((p)=>i.map((l)=>{return Ue(r,t,l,p,s,u)}));await Promise.all(c)}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 c=r.format.filter((l)=>{if(l==="iife"&&!b(s)&&r.format.includes("cjs"))return!1;return!0}),p=typeof r.dts==="object"&&r.dts.entry?A(r.dts.entry):ne(i);try{await Promise.all(p.map(async(l)=>{let xe=await te(t,l.path,r,u,n);await Promise.all(c.map(async(v)=>{let he=r.outputExtension?.({format:v,packageType:s,options:r,entry:l}).dts??U(v,s),P=`${t}/${r.outDir}/${l.name}${he}`;await Bun.write(P,xe);let be=Bun.file(P).size||0;f.progress("DTS",y(P),L(be),r.name)}))}))}catch(l){throw new d(g(l))}}}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:le(e.bytecode,n),define:me(e.define,e.shims,e.env,n),minify:ce(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:pe(e.env),plugins:[...i,ge({format:n,target:e.target,shims:e.shims}),...e.bunBuildPlugins??[]],throw:!1});if(!a.success)for(let c of a.logs){if(c.level==="error")throw new h(c.message);if(c.level==="warning")f.warn(c.message);else if(c.level==="info")f.info(c.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};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bunup",
3
- "version": "0.4.18",
3
+ "version": "0.4.20",
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",
@@ -17,10 +17,10 @@
17
17
  "@commitlint/config-conventional": "^19.5.0",
18
18
  "@types/bun": "^1.2.5",
19
19
  "bumpp": "^10.1.0",
20
- "bunup": "^0.4.11",
20
+ "bunup": "^0.4.19",
21
21
  "husky": "^9.1.7",
22
22
  "typescript": "^5.8.3",
23
- "create-bunup": "0.4.18"
23
+ "create-bunup": "0.4.20"
24
24
  },
25
25
  "peerDependencies": {
26
26
  "typescript": ">=4.5.0"
@@ -55,7 +55,8 @@
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.4.0"
58
+ "rolldown-plugin-dts": "^0.4.0",
59
+ "ts-import-resolver": "^0.1.5"
59
60
  },
60
61
  "scripts": {
61
62
  "build": "bunup",
@@ -75,6 +76,6 @@
75
76
  "publish:ci": "pnpm --filter bunup --filter create-bunup publish --access public --no-git-checks",
76
77
  "benchmark": "pnpm -C benchmarks benchmark",
77
78
  "upgrade-deps": "pnpx taze -r -w && pnpm install && git add . && git commit -m 'chore: upgrade deps' && pnpm release:ci",
78
- "update-create-bunup-starter-root-dev-dependencies": "pnpm -C create-bunup update-starter-root-dev-dependencies"
79
+ "fetch-latest-dep-versions": "pnpm -C create-bunup fetch-latest-dep-versions"
79
80
  }
80
81
  }