bunup 0.4.17 → 0.4.19

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