bunup 0.5.12 → 0.5.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +35 -35
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,65 +1,65 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
|
-
var
|
|
4
|
-
`),s.logSolution(
|
|
5
|
-
`);else if(!i)console.error(
|
|
6
|
-
`)+
|
|
3
|
+
var Wt=Object.create;var{getPrototypeOf:_t,defineProperty:fe,getOwnPropertyNames:Ut}=Object;var Gt=Object.prototype.hasOwnProperty;var R=(e,t,n)=>{n=e!=null?Wt(_t(e)):{};let r=t||!e||!e.__esModule?fe(n,"default",{value:e,enumerable:!0}):n;for(let i of Ut(e))if(!Gt.call(r,i))fe(r,i,{get:()=>e[i],enumerable:!0});return r};var Yt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Ie=(e,t)=>{for(var n in t)fe(e,n,{get:t[n],enumerable:!0,configurable:!0,set:(r)=>t[n]=()=>r})};var b=(e,t)=>()=>(e&&(t=e(e=0)),t);var qt=import.meta.require;var F=Yt((Lr,be)=>{var Z=process||{},Le=Z.argv||[],Q=Z.env||{},zt=!(!!Q.NO_COLOR||Le.includes("--no-color"))&&(!!Q.FORCE_COLOR||Le.includes("--color")||Z.platform==="win32"||(Z.stdout||{}).isTTY&&Q.TERM!=="dumb"||!!Q.CI),Kt=(e,t,n=e)=>(r)=>{let i=""+r,o=i.indexOf(t,e.length);return~o?e+vt(i,t,n,o)+t:e+i+t},vt=(e,t,n,r)=>{let i="",o=0;do i+=e.substring(o,r)+n,o=r+t.length,r=e.indexOf(t,o);while(~r);return i+e.substring(o)},De=(e=zt)=>{let t=e?Kt:()=>String;return{isColorSupported:e,reset:t("\x1B[0m","\x1B[0m"),bold:t("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:t("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:t("\x1B[3m","\x1B[23m"),underline:t("\x1B[4m","\x1B[24m"),inverse:t("\x1B[7m","\x1B[27m"),hidden:t("\x1B[8m","\x1B[28m"),strikethrough:t("\x1B[9m","\x1B[29m"),black:t("\x1B[30m","\x1B[39m"),red:t("\x1B[31m","\x1B[39m"),green:t("\x1B[32m","\x1B[39m"),yellow:t("\x1B[33m","\x1B[39m"),blue:t("\x1B[34m","\x1B[39m"),magenta:t("\x1B[35m","\x1B[39m"),cyan:t("\x1B[36m","\x1B[39m"),white:t("\x1B[37m","\x1B[39m"),gray:t("\x1B[90m","\x1B[39m"),bgBlack:t("\x1B[40m","\x1B[49m"),bgRed:t("\x1B[41m","\x1B[49m"),bgGreen:t("\x1B[42m","\x1B[49m"),bgYellow:t("\x1B[43m","\x1B[49m"),bgBlue:t("\x1B[44m","\x1B[49m"),bgMagenta:t("\x1B[45m","\x1B[49m"),bgCyan:t("\x1B[46m","\x1B[49m"),bgWhite:t("\x1B[47m","\x1B[49m"),blackBright:t("\x1B[90m","\x1B[39m"),redBright:t("\x1B[91m","\x1B[39m"),greenBright:t("\x1B[92m","\x1B[39m"),yellowBright:t("\x1B[93m","\x1B[39m"),blueBright:t("\x1B[94m","\x1B[39m"),magentaBright:t("\x1B[95m","\x1B[39m"),cyanBright:t("\x1B[96m","\x1B[39m"),whiteBright:t("\x1B[97m","\x1B[39m"),bgBlackBright:t("\x1B[100m","\x1B[49m"),bgRedBright:t("\x1B[101m","\x1B[49m"),bgGreenBright:t("\x1B[102m","\x1B[49m"),bgYellowBright:t("\x1B[103m","\x1B[49m"),bgBlueBright:t("\x1B[104m","\x1B[49m"),bgMagentaBright:t("\x1B[105m","\x1B[49m"),bgCyanBright:t("\x1B[106m","\x1B[49m"),bgWhiteBright:t("\x1B[107m","\x1B[49m")}};be.exports=De();be.exports.createColors=De});function N(e){Te=e??!1}class q{static instance;loggedOnceMessages=new Set;MAX_LABEL_LENGTH=3;cliColor=p.default.blue;mutedColor=p.default.dim;infoColor=p.default.cyan;warnColor=p.default.yellow;errorColor=p.default.red;defaultColor=p.default.white;progressFgColorMap={ESM:p.default.yellow,CJS:p.default.green,IIFE:p.default.magenta,DTS:p.default.blue};progressBgColorMap={ESM:p.default.bgYellow,CJS:p.default.bgGreen,IIFE:p.default.bgMagenta,DTS:p.default.bgBlue};labels={cli:"CLI",info:"INFO",warn:"WARN",error:"ERROR"};constructor(){}static getInstance(){if(!q.instance)q.instance=new q;return q.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({fgColor:e,bgColor:t,label:n,message:r,identifier:i,muted:o}){let s=" ".repeat(Math.max(0,this.MAX_LABEL_LENGTH-n.length)),c=o?this.mutedColor(r):r,a=i?` ${t(p.default.black(` ${i} `))}`:"";return`${e(n)} ${s}${c}${a}`}output(e,t={},n=console.log){if(Te||!this.shouldLog(t))return;if(t.verticalSpace)n("");if(n(e),t.verticalSpace)n("")}cli(e,t={}){let n=this.formatMessage({fgColor:this.cliColor,bgColor:p.default.bgBlue,label:this.labels.cli,message:e,identifier:t.identifier,muted:t.muted});this.output(n,t)}info(e,t={}){let n=this.formatMessage({fgColor:this.infoColor,bgColor:p.default.bgCyan,label:this.labels.info,message:e,identifier:t.identifier,muted:t.muted});this.output(n,t)}warn(e,t={}){let n=this.formatMessage({fgColor:this.warnColor,bgColor:p.default.bgYellow,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({fgColor:this.errorColor,bgColor:p.default.bgRed,label:this.labels.error,message:e,identifier:t.identifier,muted:t.muted});this.output(n,t,console.error)}getProgressFgColor(e){for(let[t,n]of Object.entries(this.progressFgColorMap))if(e.includes(t))return n;return this.defaultColor}getProgressBgColor(e){for(let[t,n]of Object.entries(this.progressBgColorMap))if(e.includes(t))return n;return p.default.bgWhite}progress(e,t,n={}){let r=this.getProgressFgColor(e),i=this.getProgressBgColor(e),o=this.formatMessage({fgColor:r,bgColor:i,label:e,message:t,identifier:n.identifier,muted:n.muted});this.output(o,n)}}var p,Te=!1,d;var O=b(()=>{p=R(F(),1);d=q.getInstance()});function xe(e){return e instanceof te}var h,T,A,H,k,ee,te,W=(e)=>{if(e instanceof Error)return e.message;return String(e)},Jt,he=(e,t)=>{let n=W(e),r=t?`[${t}] `:"",i=xe(e),o="ERROR";if(e instanceof A)o="BUILD ERROR";else if(e instanceof H)o="DTS ERROR";else if(e instanceof k)o="CLI ERROR";else if(e instanceof ee)o="WATCH ERROR";else if(i)o="ISOLATED DECL ERROR";else if(e instanceof T)o="BUNUP ERROR";let s=Jt.find((c)=>c.pattern.test(n)&&(c.errorType===o||!c.errorType));if(!s&&!i)console.error(`${h.default.red(o)} ${r}${n}`);if(s)console.log(`
|
|
4
|
+
`),s.logSolution(n),console.log(`
|
|
5
|
+
`);else if(!i)console.error(h.default.dim(h.default.white("If you think this is a bug, please open an issue at: ")+h.default.cyan("https://github.com/arshad-yaseen/bunup/issues/new")))},Ae=(e,t)=>{he(e,t),process.exit(1)};var _=b(()=>{h=R(F(),1);O();T=class T extends Error{constructor(e){super(e);this.name="BunupError"}};A=class A extends T{constructor(e){super(e);this.name="BunupBuildError"}};H=class H extends T{constructor(e){super(e);this.name="BunupDTSBuildError"}};k=class k extends T{constructor(e){super(e);this.name="BunupCLIError"}};ee=class ee extends T{constructor(e){super(e);this.name="BunupWatchError"}};te=class te extends T{constructor(e){super(e);this.name="BunupIsolatedDeclError"}};Jt=[{pattern:/Could not resolve: "bun"/i,errorType:"BUILD ERROR",logSolution:()=>{d.error(h.default.white("You're trying to build a project that uses Bun. ")+h.default.white("Please set the target option to ")+h.default.cyan("`bun`")+h.default.white(`.
|
|
6
|
+
`)+h.default.white("Example: ")+h.default.green("`bunup --target bun`")+h.default.white(" or in config: ")+h.default.green("{ target: 'bun' }"))}}]});import _e from"fs/promises";import Xt from"path";function Ue(e,t,n){return Array.isArray(e)?e.map((r)=>({...r,[t]:n})):{...e,[t]:n}}function Ge(e){return Array.isArray(e)?e:[e]}function Ye(e,t){switch(e){case"esm":return V(t)?".js":".mjs";case"cjs":return V(t)?".cjs":".js";case"iife":return".global.js"}}function qe(e,t){switch(e){case"esm":return V(t)?".d.ts":".d.mts";case"cjs":return V(t)?".d.cts":".d.ts";case"iife":return".d.ts"}}function we(e){return e==="node"||e==="bun"}function V(e){return e==="module"}function re(e){return e>=1000?`${(e/1000).toFixed(2)}s`:`${Math.round(e)}ms`}function Ve(e){if(!e)return[];return Array.from(new Set([...Object.keys(e.dependencies||{}),...Object.keys(e.peerDependencies||{})]))}function U(e,t=3){return e.split("/").slice(-t).join("/")}async function ze(e,t){let n=Xt.join(e,t);try{await _e.rm(n,{recursive:!0,force:!0})}catch(r){throw new A(`Failed to clean output directory: ${r}`)}await _e.mkdir(n,{recursive:!0})}var I=b(()=>{_()});function Pt(e){return Ve(e).map((t)=>new RegExp(`^${t}($|\\/|\\\\)`))}function Ke(e,t){return typeof t==="string"?t===e:t.test(e)}function Ce(e,t,n){let i=Pt(n).some((s)=>s.test(e))||t.external?.some((s)=>Ke(e,s)),o=t.noExternal?.some((s)=>Ke(e,s));return i&&!o}var ye=b(()=>{I()});function ne(e){return e.endsWith(".d.ts")||e.endsWith(".d.mts")||e.endsWith(".d.cts")}function ie(e){return[".ts",".mts",".cts",".tsx"].some((t)=>e.endsWith(t))&&!ne(e)}function oe(e){if(ne(e))return e;if(e.endsWith(".mts"))return`${e.slice(0,-4)}.d.mts`;if(e.endsWith(".cts"))return`${e.slice(0,-4)}.d.cts`;if(ve.test(e))return e.replace(ve,".d.ts");return`${e}.d.ts`}var Je,Xe,ve;var se=b(()=>{ye();Je=/\.(d\.ts|d\.mts|d\.cts)$/,Xe=/[\\/]node_modules[\\/]/,ve=/\.(js|mjs|cjs|ts|mts|cts|tsx|jsx)$/});import{basename as Qt,dirname as Zt,extname as Nt}from"path";function ce(e){let t=Qt(e),n=Nt(t);return n?t.slice(0,-n.length):t}function J(e){if(typeof e==="string")return[{fullPath:e,outputBasePath:ce(e)}];if(typeof e==="object"&&!Array.isArray(e))return Object.entries(e).map(([r,i])=>({fullPath:i,outputBasePath:r}));let t=[],n=new Set;for(let r of e){let i=ce(r);if(!n.has(i)){t.push({fullPath:r,outputBasePath:i}),n.add(i);continue}let s=Zt(r).split("/").filter((a)=>a!=="."&&a!=="");if(s.length===0){let a=1,u;do u=`${i}_${a++}`;while(n.has(u));t.push({fullPath:r,outputBasePath:u}),n.add(u);continue}let c=!1;for(let a=1;a<=s.length&&!c;a++){let l=`${s.slice(-a).join("/")}/${i}`;if(!n.has(l))t.push({fullPath:r,outputBasePath:l}),n.add(l),c=!0}if(!c){let a=1,u;do u=`${s.join("/")}/${i}_${a++}`;while(n.has(u));t.push({fullPath:r,outputBasePath:u}),n.add(u)}}return t}function Pe(e){return e.filter((t)=>ie(t.fullPath))}function Qe(e,t){return`[dir]/${e}${t}`}function Ze(e){return`${e}-[hash].[ext]`}function Ne(e){return`${e}-[name]-[hash].[ext]`}var ae=b(()=>{se()});import rr from"path";import{loadConfig as tt}from"coffi";async function rt(e,t,n){return Array.isArray(e)&&"root"in e[0]?e.filter((r)=>n?n.includes(r.name):!0).map((r)=>({rootDir:rr.resolve(t,r.root),options:Ue(r.config,"name",r.name)})):[{rootDir:t,options:e}]}async function nt(e){let{config:t,filepath:n}=await tt({name:"package",cwd:e,extensions:[".json"]});return{packageJson:t,path:n}}async function it(e,t){let{config:n,filepath:r}=await tt({name:"tsconfig",cwd:e,extensions:[".json"],preferredPath:t});return{tsconfig:n,path:r}}var Be=b(()=>{I()});function ot(e,t,n,r){let i=e.labels[0],o=i?ir(t,i.start):"",c=`${U(n)}${o}: ${nr(e.message)}`,a=or(t,i?.start,i?.end);d[r?"warn":"error"](`${c}
|
|
7
7
|
|
|
8
|
-
${
|
|
9
|
-
`),n
|
|
10
|
-
`),i=e.slice(0,
|
|
11
|
-
`).length,o=
|
|
12
|
-
`)-1,c=
|
|
13
|
-
`)-1,o.length):s+1,a=" ".repeat(s)+
|
|
14
|
-
${a}`}var
|
|
8
|
+
${de.default.gray(a)}`,{verticalSpace:!0})}function nr(e){return e.replace(" with --isolatedDeclarations","").replace(" with --isolatedDeclaration","")}function ir(e,t){if(t===void 0)return"";let n=e.slice(0,t).split(`
|
|
9
|
+
`),r=n.length,i=n[n.length-1].length+1;return` (${r}:${i})`}function or(e,t,n){let r=e.split(`
|
|
10
|
+
`),i=e.slice(0,t).split(`
|
|
11
|
+
`).length,o=r[i-1],s=t-e.slice(0,t).lastIndexOf(`
|
|
12
|
+
`)-1,c=n?Math.min(n-e.slice(0,t).lastIndexOf(`
|
|
13
|
+
`)-1,o.length):s+1,a=" ".repeat(s)+de.default.red(de.default.dim("\u23AF".repeat(Math.max(1,c-s))));return`${o}
|
|
14
|
+
${a}`}var de;var st=b(()=>{de=R(F(),1);O();I()});import{isolatedDeclaration as sr}from"oxc-transform";async function at(e){try{let t=await Bun.file(e).text(),{code:n,errors:r}=sr(e,t);for(let i of r)ct.push({error:i,sourceText:t,tsFile:e});return n}catch(t){return d.warn(`Failed to generate declaration for ${e}: ${W(t)}`),null}}function ut(e){let t=!1;for(let{error:n,sourceText:r,tsFile:i}of ct)ot(n,r,i,e),t=!0;if(t&&!e)throw console.log(`${me.default.bgMagentaBright("Pro tip")} Enable "isolatedDeclarations" in your ${me.default.underline("tsconfig.json")} to get these errors early in your editor
|
|
15
15
|
|
|
16
|
-
See why this is happening: ${
|
|
17
|
-
`),new
|
|
18
|
-
`);return
|
|
16
|
+
See why this is happening: ${me.default.blueBright("https://bunup.dev/docs/troubleshooting/explicit-type-annotation-errors")}`),console.log(`
|
|
17
|
+
`),new te}var me,ct;var Se=b(()=>{me=R(F(),1);_();O();st();ct=[]});import{resolveTsImportPath as cr}from"ts-import-resolver";var lt=(e,t,n)=>{let r=new Map;return{name:"bunup:virtual-dts",async resolveId(i,o){if(o===void 0)return r.set(i,e),i;let s=cr({path:i,importer:o,tsconfig:t.tsconfig,rootDir:n});if(!s||!ie(s))return null;let c=oe(s);if(!c)return null;return r.set(c,s),c},load:{filter:{id:{include:[Je],exclude:[Xe]}},async handler(i){if(ne(i)){let o=r.get(i);if(!o)return null;let s=await at(o);if(!s)return null;return{code:s,moduleSideEffects:!1}}return null}},buildEnd(){r.clear()}}};var dt=b(()=>{Se();se()});import{build as ar}from"rolldown";import{dts as ur}from"rolldown-plugin-dts";import lr from"path";async function mt(e,t,n,r){let i=lr.resolve(r,e),o=oe(i),s=typeof t.dts==="object"&&"resolve"in t.dts?t.dts.resolve:void 0,{output:c}=await ar({input:o,write:!1,...n.path&&{resolve:{tsconfigFilename:n.path}},onwarn(u,l){if(["UNRESOLVED_IMPORT","CIRCULAR_DEPENDENCY","EMPTY_BUNDLE"].includes(u.code??""))return;l(u)},plugins:[lt(i,n,r),ur({dtsInput:!0,emitDtsOnly:!0,resolve:s,tsconfig:n.path??!1})]});ut(!!t.watch);let a=c[0]?.code;if(!a)return d.warn(`Generated empty declaration file for entry "${i}"`,{muted:!0}),"";return a}var gt=b(()=>{O();Se();se();dt()});function ge(e){return{...dr,...e}}function pt(e){let{minify:t,minifyWhitespace:n,minifyIdentifiers:r,minifySyntax:i}=e,o=t===!0;return{whitespace:n??o,identifiers:r??o,syntax:i??o}}function ft(e,t){return t==="cjs"?e:void 0}function bt(e){if(e===!0)return"inline";return typeof e==="string"?e:void 0}function xt(e,t,n,r){return{...typeof n==="object"&&Object.keys(n).reduce((i,o)=>{let s=JSON.stringify(n[o]);return i[`process.env.${o}`]=s,i[`import.meta.env.${o}`]=s,i},{}),...e,...r==="cjs"&&(t===!0||typeof t==="object"&&t.importMetaUrl)&&{"import.meta.url":"importMetaUrl"}}}function ht(e,t){return e===void 0?t==="esm":e}function wt(e){return typeof e==="string"?e:void 0}var dr;var ke=b(()=>{dr={entry:[],format:["cjs"],outDir:"dist",target:"node",clean:!0}});function Ct(e,t){return{name:"bunup:external-plugin",setup(n){n.onResolve({filter:/.*/},(r)=>{let i=r.path;if(Ce(i,e,t))return{path:i,external:!0};return null})}}}var yt=b(()=>{ye()});function $t({format:e,target:t,shims:n}){let i=gr(n).map((o)=>Ee[o]).filter((o)=>o.appliesTo(e,t));if(i.length===0)return{name:"bunup:inject-shims",setup(){}};return{name:"bunup:inject-shims",setup(o){o.onLoad({filter:mr},async({path:s})=>{let c=await Bun.file(s).text(),a=i.filter((g)=>g.isNeededInFile(c));if(a.length===0)return;let{shebangLine:u,codeContent:l}=pr(c),m=a.map((g)=>g.generateCode()).join("");return{contents:u+m+l}})}}}function gr(e){if(e===!0)return Object.keys(Ee);if(!e)return[];return Object.entries(e).filter(([t,n])=>n&&(t in Ee)).map(([t])=>t)}function pr(e){if(!e.startsWith("#!"))return{shebangLine:"",codeContent:e};let t=e.indexOf(`
|
|
18
|
+
`);return t===-1?{shebangLine:"",codeContent:e}:{shebangLine:e.slice(0,t+1),codeContent:e.slice(t+1)}}var mr,Ee;var Bt=b(()=>{I();mr=/\.(js|ts|jsx|tsx|mts|cts)$/,Ee={dirnameFilename:{appliesTo:(e,t)=>e==="esm"&&we(t),isNeededInFile:(e)=>/\b__dirname\b/.test(e)||/\b__filename\b/.test(e),generateCode:()=>`import { fileURLToPath } from 'url';
|
|
19
19
|
import { dirname } from 'path';
|
|
20
20
|
|
|
21
21
|
const __filename = fileURLToPath(import.meta.url);
|
|
22
22
|
const __dirname = dirname(__filename);
|
|
23
23
|
|
|
24
|
-
`},importMetaUrl:{appliesTo:(e,
|
|
24
|
+
`},importMetaUrl:{appliesTo:(e,t)=>e==="cjs"&&we(t),isNeededInFile:(e)=>/\bimport\.meta\.url\b/.test(e),generateCode:()=>`import { pathToFileURL } from 'url';
|
|
25
25
|
|
|
26
26
|
const importMetaUrl = pathToFileURL(__filename).href;
|
|
27
27
|
|
|
28
|
-
`}}});function
|
|
28
|
+
`}}});function St(e){if(!e)return[];return e.filter((t)=>t.type==="bun")}function kt(e){if(!e)return[];return e.filter((t)=>t.type==="bunup")}async function Et(e,t){if(!e)return;for(let n of e)if(n.hooks.onBuildStart)await n.hooks.onBuildStart(t)}async function Ot(e,t,n){if(!e)return;for(let r of e)if(r.hooks.onBuildDone)await r.hooks.onBuildDone({options:t,output:n})}var Mt={};Ie(Mt,{build:()=>Oe});async function Oe(e,t=process.cwd()){let n={files:[]},r=ge(e);if(!r.entry||r.entry.length===0||!r.outDir)throw new A("Nothing to build. Please make sure you have provided a proper bunup configuration or cli arguments.");if(r.clean)ze(t,r.outDir);N(r.silent);let{packageJson:i,path:o}=await nt(t);if(i&&o)d.cli(`Using ${U(o,2)}`,{muted:!0,identifier:r.name,once:`${o}:${r.name}`});let s=kt(r.plugins);await Et(s,r);let c=J(r.entry),a=i?.type;if(!r.dtsOnly){let u=[Ct(r,i),...St(r.plugins).map((m)=>m.plugin)],l=r.format.flatMap((m)=>c.map(async(g)=>{let M=r.outputExtension?.({format:m,packageType:a,options:r,entry:g}).js??Ye(m,a),y=await Bun.build({entrypoints:[`${t}/${g.fullPath}`],format:m,naming:{entry:Qe(g.outputBasePath,M),chunk:Ze(g.outputBasePath),asset:Ne(g.outputBasePath)},splitting:ht(r.splitting,m),bytecode:ft(r.bytecode,m),define:xt(r.define,r.shims,r.env,m),minify:pt(r),outdir:`${t}/${r.outDir}`,target:r.target,sourcemap:bt(r.sourcemap),loader:r.loader,drop:r.drop,banner:r.banner,footer:r.footer,publicPath:r.publicPath,env:wt(r.env),plugins:[...u,$t({format:m,target:r.target,shims:r.shims})],throw:!1});if(!y.success)for(let x of y.logs){if(x.level==="error")throw new A(x.message);if(x.level==="warning")d.warn(x.message);else if(x.level==="info")d.info(x.message)}for(let x of y.outputs)n.files.push({fullPath:x.path,relativePathToRootDir:x.path.replace(`${t}/`,"")});let f=jt(r.outDir,g.outputBasePath,M);d.progress(m.toUpperCase(),f,{identifier:r.name})}));await Promise.all(l)}if(r.dts||r.dtsOnly){let u=await it(t,r.preferredTsconfigPath);if(u.path)d.cli(`Using ${U(u.path,2)}`,{muted:!0,identifier:r.name,once:`${u.path}:${r.name}`});let l=r.format.filter((g)=>{if(g==="iife"&&!V(a)&&r.format.includes("cjs"))return!1;return!0}),m=typeof r.dts==="object"&&r.dts.entry?J(r.dts.entry):Pe(c);try{await Promise.all(m.map(async(g)=>{let M=await mt(g.fullPath,r,u,t);await Promise.all(l.map(async(y)=>{let f=r.outputExtension?.({format:y,packageType:a,options:r,entry:g}).dts??qe(y,a),x=jt(r.outDir,g.outputBasePath,f),K=br(t,x);n.files.push({fullPath:K,relativePathToRootDir:x}),await Bun.write(K,M),d.progress("DTS",x,{identifier:r.name})}))}))}catch(g){if(xe(g))throw g;throw new H(W(g))}}if(await Ot(s,r,n),r.onSuccess)await r.onSuccess(r)}function jt(e,t,n){return`${e}/${t}${n}`}function br(e,t){return`${e}/${t}`}var je=b(()=>{gt();_();ae();Be();O();ke();yt();Bt();I()});var Dt={};Ie(Dt,{init:()=>$r});import j from"fs/promises";import D from"path";import{cancel as G,confirm as z,intro as xr,isCancel as $,log as L,multiselect as Ft,outro as hr,tasks as wr,text as X}from"@clack/prompts";import{detect as Cr,resolveCommand as Me}from"package-manager-detector";import{exec as yr}from"tinyexec";async function It(e){try{return await j.access(e),!0}catch{return!1}}async function $r(){xr(C.default.bgCyan(C.default.black(" Bunup ")));let e=await Cr();if(!e)L.error("No package manager detected"),process.exit(1);let t=D.join(process.cwd(),"package.json"),n;try{let f=await j.readFile(t,"utf-8");n=JSON.parse(f)}catch{L.error("Cannot find or parse package.json."),process.exit(1)}let r=await X({message:"Entry point for your library:",placeholder:"src/index.ts",defaultValue:"src/index.ts"});if($(r))G("Initialization cancelled"),process.exit(1);let i=D.join(process.cwd(),String(r));if(!await It(i)){let f=await z({message:`Entry file ${C.default.cyan(String(r))} does not exist. Create it?`,initialValue:!0});if($(f))G("Initialization cancelled"),process.exit(1);if(f)await j.mkdir(D.dirname(i),{recursive:!0}),await j.writeFile(i,`// Your entry point
|
|
29
29
|
|
|
30
30
|
export function hello() {
|
|
31
|
-
return 'Hello from ${
|
|
31
|
+
return 'Hello from ${D.basename(String(r))}';
|
|
32
32
|
}
|
|
33
|
-
`),
|
|
33
|
+
`),L.success(`Created ${r}`)}let o=await Ft({message:"Output formats:",options:[{value:"esm",label:"ESM",hint:"ECMAScript modules"},{value:"cjs",label:"CJS",hint:"CommonJS modules"},{value:"iife",label:"IIFE",hint:"Immediately Invoked Function Expression"}],initialValues:["esm","cjs"],required:!0});if($(o))G("Initialization cancelled"),process.exit(1);let s=await X({message:"Output directory:",placeholder:"dist",initialValue:"dist",validate:(f)=>f?void 0:"Output directory is required"});if($(s))G("Initialization cancelled"),process.exit(1);let c=await z({message:"Generate TypeScript declarations (.d.ts files)?",initialValue:!0});if($(c))G("Initialization cancelled"),process.exit(1);let a=!1,u=[];if(n.workspaces){let f=await z({message:"Detected workspaces. Set up Bunup for multiple packages?",initialValue:!0});if($(f))G("Initialization cancelled"),process.exit(1);if(a=f,a){let x=async()=>{let S=await X({message:"Workspace name:",placeholder:"core",validate:(B)=>B?void 0:"Workspace name is required"});if($(S))return null;let v=await X({message:"Workspace root directory:",placeholder:"packages/core",validate:(B)=>B?void 0:"Workspace root is required"});if($(v))return null;let Y=await X({message:"Workspace entry points (comma-separated):",placeholder:"src/index.ts",validate:(B)=>B?void 0:"At least one entry point is required"});if($(Y))return null;return{name:String(S),root:String(v),entries:String(Y).split(",").map((B)=>B.trim())}},K=!0;while(K){let S=await x();if(!S)break;u.push(S);for(let Y of S.entries){let B=D.join(process.cwd(),S.root,Y);if(!await It(B)){let Fe=await z({message:`Entry file ${C.default.cyan(`${S.root}/${Y}`)} does not exist. Create it?`,initialValue:!0});if($(Fe))break;if(Fe)await j.mkdir(D.dirname(B),{recursive:!0}),await j.writeFile(B,`// Your entry point
|
|
34
34
|
|
|
35
35
|
export function hello() {
|
|
36
|
-
return 'Hello from ${
|
|
36
|
+
return 'Hello from ${S.name}';
|
|
37
37
|
}
|
|
38
|
-
`),
|
|
39
|
-
${
|
|
38
|
+
`),L.success(`Created ${S.root}/${Y}`)}}let v=await z({message:"Add another workspace?",initialValue:!1});if($(v))break;K=v}}}let l=[{value:"report",label:"Report",hint:"Logs bundle size report after build",configGenerator:()=>"report()"}],m=await Ft({message:"Select plugins to use (optional):",options:l,required:!1});if($(m))G("Initialization cancelled"),process.exit(1);if(a&&u.length>0)await Sr(u,o,String(s),c,m,l);else await Br(String(r),o,String(s),c,m,l);L.success("Configuration generated"),await kr(n,t),L.success("package.json updated");let g=[{title:"Installing bunup",task:async()=>{return await Er(n,e),"Bunup installed"}}];try{await wr(g)}catch(f){L.error(`Error: ${f instanceof Error?f.message:String(f)}`),process.exit(1)}let M=Me(e.agent,"run",["dev"]),y=Me(e.agent,"run",["build"]);hr(`
|
|
39
|
+
${C.default.bold("\uD83D\uDE80 Happy building with Bunup!")}
|
|
40
40
|
|
|
41
41
|
Run these commands to get started:
|
|
42
|
-
${
|
|
43
|
-
${
|
|
42
|
+
${C.default.cyan(Re(y))} - ${C.default.gray("Build your project")}
|
|
43
|
+
${C.default.cyan(Re(M))} - ${C.default.gray("Build in watch mode")}
|
|
44
44
|
|
|
45
|
-
${
|
|
46
|
-
`)}async function
|
|
45
|
+
${C.default.dim("Edit")} ${C.default.underline("bunup.config.ts")} ${C.default.dim("to customize your build.")}
|
|
46
|
+
`)}async function Br(e,t,n,r,i,o){let s=Lt(i,o),c=`import { defineConfig } from 'bunup';
|
|
47
47
|
${i.length>0?`import { ${i.join(", ")} } from 'bunup/plugins';
|
|
48
48
|
`:""}
|
|
49
49
|
export default defineConfig({
|
|
50
50
|
entry: '${e}',
|
|
51
|
-
format: [${
|
|
52
|
-
outDir: '${
|
|
51
|
+
format: [${t.map((a)=>`'${a}'`).join(", ")}],
|
|
52
|
+
outDir: '${n}',${r?`
|
|
53
53
|
dts: true,`:""}${s?`
|
|
54
54
|
plugins: [${s}],`:""}
|
|
55
55
|
});
|
|
56
|
-
`;await
|
|
56
|
+
`;await j.writeFile(D.join(process.cwd(),"bunup.config.ts"),c)}async function Sr(e,t,n,r,i,o){let s=Lt(i,o),c=e.map((u)=>{let l=u.entries.length===1?`'${u.entries[0]}'`:`[${u.entries.map((m)=>`'${m}'`).join(", ")}]`;return` {
|
|
57
57
|
name: '${u.name}',
|
|
58
58
|
root: '${u.root}',
|
|
59
59
|
config: {
|
|
60
|
-
entry: ${
|
|
61
|
-
format: [${
|
|
62
|
-
outDir: '${
|
|
60
|
+
entry: ${l},
|
|
61
|
+
format: [${t.map((m)=>`'${m}'`).join(", ")}],
|
|
62
|
+
outDir: '${n}',${r?`
|
|
63
63
|
dts: true,`:""}${s?`
|
|
64
64
|
plugins: [${s}],`:""}
|
|
65
65
|
},
|
|
@@ -70,8 +70,8 @@ ${i.length>0?`import { ${i.join(", ")} } from 'bunup/plugins';
|
|
|
70
70
|
export default defineWorkspace([
|
|
71
71
|
${c}
|
|
72
72
|
]);
|
|
73
|
-
`;await
|
|
74
|
-
`);return}let
|
|
73
|
+
`;await j.writeFile(D.join(process.cwd(),"bunup.config.ts"),a)}function Lt(e,t){return t.filter((n)=>e.includes(n.value)).map((n)=>n.configGenerator?n.configGenerator():`${n.value}()`).join(", ")}async function kr(e,t){let n=e.scripts||{},r=!1;for(let[i,o]of[["build","bunup"],["dev","bunup --watch"]])if(!n[i]||await z({message:`Script '${i}' exists. Replace with '${o}'?`,initialValue:!0}))n[i]=o,r=!0;if(r)e.scripts=n,await j.writeFile(t,JSON.stringify(e,null,2))}async function Er(e,t){if(e.dependencies?.bunup||e.devDependencies?.bunup){L.info(`Bunup is already installed
|
|
74
|
+
`);return}let r={bun:"-d",npm:"-D",pnpm:"-D",yarn:"-D"},i=Me(t.agent,"add",[r[t.agent]||"-D","bunup"]);if(!i)throw new Error("Failed to resolve install command");await yr(Re(i),[],{nodeOptions:{shell:!0,stdio:"pipe"}})}function Re(e){if(!e)return"";return`${e.command} ${e.args.join(" ")}`}var C;var Tt=b(()=>{C=R(F(),1)});import{exec as Or}from"tinyexec";var P="0.5.13";_();O();var $e=R(F(),1);var We="https://bunup.dev/docs/guide/cli-options";_();ae();O();function w(e){return(t,n)=>{n[e]=t===!0||t==="true"}}function E(e){return(t,n)=>{if(typeof t==="string")n[e]=t;else throw new k(`Option --${e} requires a string value`)}}function ue(e){return(t,n)=>{if(typeof t==="string")n[e]=t.split(",");else throw new k(`Option --${e} requires a string value`)}}function Ht(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 k(`Option --${e} requires a boolean or string value`)}}function er(){console.log(`
|
|
75
75
|
Bunup - \u26A1\uFE0F A blazing-fast build tool for your libraries built with Bun.
|
|
76
|
-
`),console.log("For more information on available options, visit:"),console.log(`${
|
|
77
|
-
`),process.exit(0)}function
|
|
76
|
+
`),console.log("For more information on available options, visit:"),console.log(`${$e.default.cyan($e.default.underline(We))}
|
|
77
|
+
`),process.exit(0)}function tr(){console.log(P),process.exit(0)}var He={name:{flags:["n","name"],handler:E("name")},format:{flags:["f","format"],handler:ue("format")},outDir:{flags:["o","out-dir"],handler:E("outDir")},minify:{flags:["m","minify"],handler:w("minify")},watch:{flags:["w","watch"],handler:w("watch")},dts:{flags:["d","dts"],handler:w("dts")},banner:{flags:["bn","banner"],handler:E("banner")},footer:{flags:["ft","footer"],handler:E("footer")},external:{flags:["e","external"],handler:ue("external")},sourcemap:{flags:["sm","sourcemap"],handler:Ht("sourcemap")},target:{flags:["t","target"],handler:E("target")},minifyWhitespace:{flags:["mw","minify-whitespace"],handler:w("minifyWhitespace")},minifyIdentifiers:{flags:["mi","minify-identifiers"],handler:w("minifyIdentifiers")},minifySyntax:{flags:["ms","minify-syntax"],handler:w("minifySyntax")},clean:{flags:["c","clean"],handler:w("clean")},splitting:{flags:["s","splitting"],handler:w("splitting")},noExternal:{flags:["ne","no-external"],handler:ue("noExternal")},preferredTsconfigPath:{flags:["tsconfig","preferred-tsconfig-path"],handler:E("preferredTsconfigPath")},bytecode:{flags:["bc","bytecode"],handler:w("bytecode")},dtsOnly:{flags:["do","dts-only"],handler:w("dtsOnly")},silent:{flags:["silent"],handler:w("silent")},config:{flags:["config"],handler:E("config")},publicPath:{flags:["pp","public-path"],handler:E("publicPath")},env:{flags:["env"],handler:E("env")},shims:{flags:["shims"],handler:w("shims")},onSuccess:{flags:["onSuccess"],handler:E("onSuccess")},filter:{flags:["filter"],handler:ue("filter")},init:{flags:["init"],handler:w("init")},entry:{flags:["entry"],handler:(e,t,n)=>{if(typeof e!=="string")throw new k(`Entry${n?` --entry.${n}`:""} requires a string value`);let r=t.entry||{};if(n){if(r[n])d.warn(`Duplicate entry name '${n}' provided via --entry.${n}. Overwriting previous entry.`);r[n]=e}else{let i=ce(e);if(r[i])d.warn(`Duplicate entry name '${i}' derived from '${e}'. Overwriting previous entry.`);r[i]=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:()=>er()},version:{flags:["v","version"],handler:()=>tr()}},le={};for(let e of Object.values(He))for(let t of e.flags)le[t]=e.handler;function et(e){let t={};for(let n=0;n<e.length;n++){let r=e[n];if(r.startsWith("--")){let i,o;if(r.includes("=")){let[s,c]=r.slice(2).split("=",2);i=s,o=c}else{i=r.slice(2);let s=e[n+1];if(o=s&&!s.startsWith("-")?s:!0,typeof o==="string")n++}if(i.includes(".")){let[s,c]=i.split(".",2),a=le[s];if(a)a(o,t,c);else throw new k(`Unknown option: --${i}`)}else{let s=le[i];if(s)s(o,t);else throw new k(`Unknown option: --${i}`)}}else if(r.startsWith("-")){let i=r.slice(1),o=e[n+1],s=o&&!o.startsWith("-")?o:!0;if(typeof s==="string")n++;let c=le[i];if(c)c(s,t);else throw new k(`Unknown option: -${i}`)}else He.entry.handler(r,t,void 0)}return t}var At=R(F(),1);Be();I();import{loadConfig as jr}from"coffi";je();_();ae();O();ke();I();import pe from"path";async function Rt(e,t){let n=new Set,r=ge(e),i=J(r.entry);for(let u of i){let l=pe.resolve(t,u.fullPath),m=pe.dirname(l);n.add(m)}let s=(await import("chokidar")).watch(Array.from(n),{persistent:!0,ignoreInitial:!0,atomic:!0,ignorePermissionErrors:!0,ignored:[/[\\/]\.git[\\/]/,/[\\/]node_modules[\\/]/,pe.join(t,r.outDir)]}),c=!1,a=async(u=!1)=>{if(c)return;c=!0;try{let l=performance.now();if(await Oe(r,t),!u)d.cli(`\uD83D\uDCE6 Rebuild finished in ${re(performance.now()-l)}`)}catch(l){he(l)}finally{c=!1}};s.on("change",(u)=>{let l=pe.relative(t,u);d.cli(`File changed: ${l}`,{muted:!0,once:l}),a()}),s.on("error",(u)=>{throw new ee(`Watcher error: ${W(u)}`)}),await a(!0)}async function Mr(e=Bun.argv.slice(2)){let t=et(e);if(t.init){let{init:l}=await Promise.resolve().then(() => (Tt(),Dt));await l();return}N(t.silent);let n=process.cwd(),{config:r,filepath:i}=await jr({name:"bunup.config",extensions:[".ts",".js",".mjs",".cjs"],maxDepth:1,preferredPath:t.config,packageJsonProperty:"bunup"}),o=!r?[{rootDir:n,options:t}]:await rt(r,n,t.filter);if(d.cli(`Using bunup v${P} and bun v${Bun.version}`,{muted:!0}),i)d.cli(`Using ${U(i,2)}`,{muted:!0});let s=performance.now();d.cli("Build started");let{build:c}=await Promise.resolve().then(() => (je(),Mt));await Promise.all(o.flatMap(({options:l,rootDir:m})=>{return Ge(l).map(async(M)=>{let y={...M,...Rr(t)};if(y.watch)await Rt(y,m);else await c(y,m)})}));let a=performance.now()-s,u=re(a);if(d.cli(`\u26A1\uFE0F Build completed in ${At.default.green(u)}`),t.watch)d.cli("\uD83D\uDC40 Watching for file changes");if(t.onSuccess)d.cli(`Running command: ${t.onSuccess}`,{muted:!0}),await Or(t.onSuccess,[],{nodeOptions:{shell:!0,stdio:"inherit"}});if(!t.watch)process.exit(process.exitCode??0)}function Rr(e){return{...e,onSuccess:void 0,config:void 0,filter:void 0,init:void 0}}Mr().catch((e)=>Ae(e));
|
package/package.json
CHANGED