bunup 0.1.22 → 0.1.24
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 +5 -5
- package/build/dtsWorker.js +4 -4
- package/package.json +2 -2
package/build/cli.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
|
-
import
|
|
3
|
+
import Y from"fs";import Xt from"path";import{isMainThread as Lt,parentPort as I,Worker as Ft,workerData as Ut}from"node:worker_threads";class O extends Error{constructor(t){super(t);this.name="BunupError"}}class w extends O{constructor(t){super(t);this.name="BunupBuildError"}}class g extends O{constructor(t){super(t);this.name="BunupDTSBuildError"}}class h extends O{constructor(t){super(t);this.name="BunupCLIError"}}class D extends O{constructor(t){super(t);this.name="BunupWatchError"}}var u=(t)=>{if(t instanceof Error)return t.message;return String(t)},Rt=(t,r)=>{let n=u(t),s=r?`[${r}] `:"",e="ERROR";if(t instanceof w)e="BUILD ERROR";else if(t instanceof g)e="DTS ERROR";else if(t instanceof h)e="CLI ERROR";else if(t instanceof D)e="WATCH ERROR";else if(t instanceof O)e="BUNUP ERROR";if(console.error(`\x1B[31m[${e}]\x1B[0m ${s}${n}`),t instanceof Error&&t.stack)console.error("\x1B[2m"+t.stack.split(`
|
|
4
4
|
`).slice(1).join(`
|
|
5
|
-
`)+"\x1B[0m")},
|
|
6
|
-
`),s=n.length,e=n[n.length-1].length+1;return` (${s}:${e})`}function
|
|
5
|
+
`)+"\x1B[0m")},K=(t,r)=>{Rt(t,r),process.exit(1)};var f={MAX_LABEL_LENGTH:5,colors:{cli:"183",info:"240",warn:"221",error:"203",progress:{ESM:"214",CJS:"114",IIFE:"105",DTS:"75"},default:"255"},labels:{cli:"BUNUP",info:"INFO",warn:"WARN",error:"ERROR"},formatMessage(t,r,n){let s=" ".repeat(Math.max(0,this.MAX_LABEL_LENGTH-r.length));return`\x1B[38;5;${t}m[${r}]\x1B[0m ${s}${n}`},cli(t){let r=this.labels.cli;console.log(this.formatMessage(this.colors.cli,r,t))},info(t){console.log(`\x1B[38;5;${this.colors.info}m${t}\x1B[0m`)},warn(t){let r=this.labels.warn;console.warn(this.formatMessage(this.colors.warn,r,t))},error(t){let r=this.labels.error;console.error(this.formatMessage(this.colors.error,r,t))},progress(t,r){let n=String(t),s=this.colors.default;for(let[e,o]of Object.entries(this.colors.progress))if(n.includes(e)){s=o;break}console.log(this.formatMessage(s,n,r))}};function Q(t,r){return`${r?`${r.replace(/-/g,"_")}_`:""}${t}`.toUpperCase()}function F(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function V(t=8){return Math.random().toString(36).substring(2,2+t)}function Z(t,r){switch(t){case"esm":return".mjs";case"cjs":return T(r)?".cjs":".js";case"iife":return".global.js"}}function z(t,r){switch(t){case"esm":return".d.mts";case"cjs":return T(r)?".d.cts":".d.ts";case"iife":return".d.ts"}}function T(t){return t==="module"}function k(t){return t>=1000?`${(t/1000).toFixed(2)}s`:`${Math.round(t)}ms`}function tt(t){if(!t)return[];return Array.from(new Set([...Object.keys(t.dependencies||{}),...Object.keys(t.peerDependencies||{})]))}function rt(t,r){return t===void 0?r==="esm":t}import Dt from"node:fs";import St from"oxc-transform";import A from"node:path";function U(t){let r=A.dirname(t.path||"");return t.data?.compilerOptions?.baseUrl?A.resolve(r,t.data.compilerOptions.baseUrl):r}function nt(t){let r=new Map,n=t.data?.compilerOptions?.paths;if(!n)return r;let s=U(t);for(let[e,o]of Object.entries(n))if(Array.isArray(o)&&o.length){let i=e.replace(/\*/g,"(.*)"),a=o[0].replace(/\*/g,"$1");r.set(`^${i}$`,A.join(s,a))}return r}function et(t,r,n){for(let[s,e]of r){let o=new RegExp(s),i=t.match(o);if(i)return e.replace("$1",i[1]||"")}return n?A.join(n,t):null}function st(t,r){if(r===void 0)return"";let n=t.slice(0,r).split(`
|
|
6
|
+
`),s=n.length,e=n[n.length-1].length+1;return` (${s}:${e})`}function ot(t){return t.replace(" with --isolatedDeclarations","").replace(" with --isolatedDeclaration","")}var v=new Set;async function it(t){let r=new Map;return await Promise.all([...t].map(async(n)=>{try{let s=n.replace(/\.tsx?$/,".d.ts"),e=await Dt.promises.readFile(n,"utf8"),{code:o,errors:i}=St.isolatedDeclaration(n,e);if(i.forEach((a)=>{let l=a.labels[0],c=l?st(e,l.start):"",x=`${n.split("/").slice(-3).join("/")}${c}: ${ot(a.message)}`;if(!v.has(x))v.add(x)}),o)r.set(s,o)}catch(s){f.warn(`Failed to generate declaration for ${n}: ${u(s)}`)}})),r}import ht from"node:fs";import H from"node:path";import{loadTsConfig as bt}from"load-tsconfig";function at(t){try{return bt(".",t)}catch(r){return f.warn(`Failed to load tsconfig: ${u(r)}`),{path:t,data:{},files:[]}}}import C from"node:path";import{rollup as kt}from"rollup";import At from"rollup-plugin-dts";import _ from"typescript";function lt(t){return t.map((r)=>typeof r==="string"?new RegExp(`^${F(r)}($|\\/|\\\\)`):r)}function M(t,r){return lt(t.external||[]).concat(tt(r).map((n)=>new RegExp(`^${F(n)}($|\\/|\\\\)`)))}function j(t){return lt(t.noExternal||[])}import N from"node:fs";import ft from"node:path";var P={entry:[],format:["cjs"],outDir:"dist",minify:!1,watch:!1,dts:!1,target:"node",external:[],clean:!0};function ct(t,r){return{outdir:`${r}/${t.outDir}`,minify:Tt(t),target:t.target,splitting:t.splitting}}function Tt(t){let{minify:r,minifyWhitespace:n,minifyIdentifiers:s,minifySyntax:e}=t,o=r===!0;return{whitespace:n??o,identifiers:s??o,syntax:e??o}}async function ut(t){let r=[];for(let n of[".ts",".js",".mjs",".cjs",".mts",".cts",".json",".jsonc"]){let s=ft.join(t,`bunup.config${n}`);try{if(!N.existsSync(s))continue;let e;if(n===".json"||n===".jsonc"){let o=N.readFileSync(s,"utf8");e=JSON.parse(o)}else{let o=await import(`file://${s}`);if(e=o.default||o,!e)f.warn(`No default export found in ${s}`),e={}}if(Array.isArray(e))for(let o of e)r.push({options:{...P,...o},rootDir:t});else r.push({options:{...P,...e},rootDir:t});break}catch(e){throw new w(`Failed to load config from ${s}: ${u(e)}`)}if(r.length>0)break}return r}function W(t){let r=ft.join(t,"package.json");try{if(!N.existsSync(r))return null;let n=N.readFileSync(r,"utf8");return JSON.parse(n)}catch(n){return f.warn(`Failed to load package.json at ${r}: ${u(n)}`),null}}async function pt(t,r,n,s,e){let a=`\x00virtual:${t.replace(/\.tsx?$/,".d.ts")}`,l=e.data?.compilerOptions,c={name:"bunup:virtual-dts",resolveId(d,E){if(d.startsWith("\x00virtual:"))return d;if(!E?.startsWith("\x00virtual:")||!d.startsWith("."))return null;let y=E.slice(9),B=C.resolve(C.dirname(y),d);if(d==="."){let R=C.join(C.dirname(y),"index.d.ts");if(r.has(R))return`\x00virtual:${R}`;B=C.dirname(y)}if(r.has(B))return`\x00virtual:${B}`;let J=`${B}.d.ts`;if(r.has(J))return`\x00virtual:${J}`;if(d.startsWith(".")){let R=C.join(B,"index.d.ts");if(r.has(R))return`\x00virtual:${R}`}return null},load(d){return d.startsWith("\x00virtual:")?r.get(d.slice(9))||null:null}},m=W(s),p=M(n,m),x=j(n),b;try{b=await kt({input:a,onwarn(E,y){if(["UNRESOLVED_IMPORT","CIRCULAR_DEPENDENCY","EMPTY_BUNDLE"].includes(E.code??""))return;y(E)},plugins:[c,At({tsconfig:e.path,compilerOptions:{...l?_.parseJsonConfigFileContent({compilerOptions:l},_.sys,"./").options:{},declaration:!0,noEmit:!1,emitDeclarationOnly:!0,noEmitOnError:!0,checkJs:!1,declarationMap:!1,skipLibCheck:!0,preserveSymlinks:!1,target:_.ScriptTarget.ESNext}})],external:(E)=>p.some((y)=>y.test(E))&&!x.some((y)=>y.test(E))});let{output:d}=await b.generate({});if(!d[0]?.code)throw new g("Generated bundle is empty");return d[0].code}catch(d){throw new g(`DTS bundling failed: ${u(d)}`)}finally{if(b)await b.close()}}import gt from"node:fs";import mt from"node:path";var Mt=/(?:import|export)(?:[\s\n]*(?:type[\s\n]+)?(?:\*|\{[^}]*\}|[\w$]+)[\s\n]+from[\s\n]*|[\s\n]+)(["'`])([^'"]+)\1/g,jt=/import\s*\(\s*(["'`])([^'"]+)\1\s*\)/g;async function dt(t,r){let n=new Set([t]),s=[t],e=nt(r),o=U(r);while(s.length){let i=s.pop();if(!i)continue;try{let a=await gt.promises.readFile(i,"utf8"),l=Nt(a);for(let c of l){let m=c.startsWith(".")?mt.resolve(mt.dirname(i),c):et(c,e,o);if(!m)continue;let p=Wt(m);if(p&&!n.has(p))n.add(p),s.push(p)}}catch(a){f.warn(`Error processing ${i}: ${u(a)}`)}}return n}function Nt(t){let r=new Set;for(let n of[Mt,jt]){let s;while((s=n.exec(t))!==null)r.add(s[2])}return Array.from(r)}function Wt(t){let r=["",".ts",".tsx","/index.ts","/index.tsx"];for(let n of r){let s=`${t}${n}`;if(gt.existsSync(s)&&(s.endsWith(".ts")||s.endsWith(".tsx")))return s}return null}async function xt(t,r,n){let{absoluteRootDir:s,absoluteEntry:e}=It(t,r),o=at(n.preferredTsconfigPath),i=await dt(e,o),a=await it(i);return pt(e,a,n,s,o)}function It(t,r){let n=H.resolve(t),s=H.resolve(n,r);if(!ht.existsSync(n))throw new g(`Root directory does not exist: ${n}`);if(!ht.existsSync(s))throw new g(`Entry file does not exist: ${s}`);if(!s.endsWith(".ts"))throw new g(`Entry file must be a TypeScript file (.ts): ${s}`);if(H.relative(n,s).startsWith(".."))throw new g(`Entry file must be within rootDir: ${s}`);return{absoluteRootDir:n,absoluteEntry:s}}async function wt(t,r,n,s,e){return new Promise((o,i)=>{let a={rootDir:t,entries:r,formats:n,options:s,packageType:e},l=new Ft(new URL("./dtsWorker.js",import.meta.url),{workerData:a});l.on("message",(c)=>{if(c.success)o();else i(new g(c.error||"Unknown DTS worker error"))}),l.on("error",i),l.on("exit",(c)=>{if(c!==0)i(new g(`DTS worker stopped with exit code ${c}`))})})}if(!Lt&&I){let{rootDir:t,entries:r,formats:n,options:s,packageType:e}=Ut,o=performance.now();f.progress("DTS","Bundling types");try{let i=r.map(async(a)=>{let l=await xt(t,a.path,s);return Promise.all(n.map(async(c)=>{let m=z(c,e),p=`${s.outDir}/${a.name}${m}`,x=`${t}/${p}`;await Bun.write(x,l),f.progress("DTS",p)}))});Promise.all(i).then(()=>{let a=performance.now()-o;I?.postMessage({success:!0});let l=k(a);if(f.progress("DTS",`Bundled types in ${l}`),v.size>0)console.log(`
|
|
7
7
|
`),v.forEach((c)=>{f.warn(c)}),f.info(`
|
|
8
8
|
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.
|
|
9
|
-
`),v.clear()}).catch((a)=>{
|
|
10
|
-
To install Bun, visit https://bun.sh/docs/installation`)})();import
|
|
9
|
+
`),v.clear()}).catch((a)=>{I?.postMessage({success:!1,error:u(a)})})}catch(i){I?.postMessage({success:!1,error:u(i)})}}function _t(t){return t.split("/").pop()?.split(".").slice(0,-1).join(".")||""}function S(t){let r=[],n=new Set;function s(e,o){if(n.has(e)){let i=V();r.push({name:`${e}_${i}`,path:o})}else r.push({name:e,path:o}),n.add(e)}if(Array.isArray(t))for(let e of t){let o=_t(e);s(o,e)}else Object.entries(t).forEach(([e,o])=>{s(e,o)});return r}function yt(t,r){return`[dir]/${t}${r}`}function Et(t,r){return{name:"bunup:external-plugin",setup(n){n.onResolve({filter:/.*/},(s)=>{let e=s.path;if(t.some((i)=>i.test(e))&&!r.some((i)=>i.test(e)))return{path:e,external:!0};return null})}}}async function L(t,r){if(!t.entry||t.entry.length===0||!t.outDir)throw new w("Nothing to build. Please make sure you have provided a proper bunup configuration or cli arguments.");let n=performance.now();f.cli("Build started");let s=W(r),e=s?.type,o=M(t,s),i=j(t),a=[Et(o,i)],l=S(t.entry),c=t.format.flatMap((m)=>l.map((p)=>Ht(t,r,p,m,e,a)));try{await Promise.all(c);let m=performance.now()-n,p=k(m);f.cli(`\uD83D\uDCE6 Build success in ${p}`)}catch{throw new w("Build process encountered errors")}if(t.dts){let m=t.format.filter((x)=>{if(x==="iife"&&!T(e)&&t.format.includes("cjs"))return!1;return!0}),p=t.dts===!0?l:S(t.dts.entry);try{await wt(r,p,m,t,e)}catch(x){throw new g(`DTS build process encountered errors: ${u(x)}`)}}}async function Ht(t,r,n,s,e,o){let i=Z(s,e),a=ct(t,r),l=await Bun.build({...a,entrypoints:[`${r}/${n.path}`],format:s,naming:{entry:yt(n.name,i)},splitting:rt(t.splitting,s),plugins:o,throw:!1});if(!l.success)throw l.logs.forEach((c)=>{if(c.level==="error")f.error(c.message);else if(c.level==="warning")f.warn(c.message);else if(c.level==="info")f.info(c.message)}),new w(`Build failed for ${n} (${s})`);f.progress(Q(s,t.name),`${t.outDir}/${n.name}${i}`)}function $(t){return(r,n)=>{n[t]=r===!0?!0:r==="true"}}function q(t){return(r,n)=>{if(typeof r==="string")n[t]=r;else throw new h(`Option --${t} requires a string value`)}}function $t(t){return(r,n)=>{if(typeof r==="string")n[t]=r.split(",");else throw new h(`Option --${t} requires a string value`)}}var qt={name:{flags:["n","name"],handler:q("name")},format:{flags:["f","format"],handler:(t,r)=>{if(typeof t==="string")r.format=t.split(",");else throw new h("Option --format requires a string value")}},outDir:{flags:["o","out-dir"],handler:q("outDir")},minify:{flags:["m","minify"],handler:$("minify")},watch:{flags:["w","watch"],handler:$("watch")},dts:{flags:["d","dts"],handler:$("dts")},external:{flags:["e","external"],handler:$t("external")},target:{flags:["t","target"],handler:q("target")},minifyWhitespace:{flags:["mw","minify-whitespace"],handler:$("minifyWhitespace")},minifyIdentifiers:{flags:["mi","minify-identifiers"],handler:$("minifyIdentifiers")},minifySyntax:{flags:["ms","minify-syntax"],handler:$("minifySyntax")},clean:{flags:["c","clean"],handler:$("clean")},splitting:{flags:["s","splitting"],handler:$("splitting")},noExternal:{flags:["ne","no-external"],handler:$t("noExternal")}},G={};for(let t of Object.values(qt))if(t)for(let r of t.flags)G[r]=t.handler;function Ot(t){return t.split("/").pop()?.split(".").slice(0,-1).join(".")||""}function vt(t){let r={},n={},s=0;while(s<t.length){let e=t[s];if(e.startsWith("--")){let o,i;if(e.includes("=")){let[a,l]=e.slice(2).split("=",2);o=a,i=l}else{o=e.slice(2);let a=t[s+1];if(i=a&&!a.startsWith("-")?a:!0,typeof i==="string")s++}if(o==="entry")if(typeof i==="string"){let a=Ot(i);if(n[a])f.warn(`Duplicate entry name '${a}' derived from '${i}'. Overwriting previous entry.`);n[a]=i}else throw new h("Option --entry requires a string value");else if(o.startsWith("entry.")){let a=o.slice(6);if(typeof i==="string"){if(n[a])f.warn(`Duplicate entry name '${a}' provided via --entry.${a}. Overwriting previous entry.`);n[a]=i}else throw new h(`Option --entry.${a} requires a string value`)}else{let a=G[o];if(a)a(i,r);else throw new h(`Unknown option: --${o}`)}}else if(e.startsWith("-")){let o=e.slice(1),i=t[s+1],a=i&&!i.startsWith("-")?i:!0;if(typeof a==="string")s++;let l=G[o];if(l)l(a,r);else throw new h(`Unknown option: -${o}`)}else{let o=Ot(e);if(n[o])f.warn(`Duplicate entry name '${o}' derived from positional argument '${e}'. Overwriting previous entry.`);n[o]=e}s++}if(Object.keys(n).length>0)r.entry=n;return r}(()=>{if(typeof Bun==="undefined")throw new h(`Bunup requires Bun to run.
|
|
10
|
+
To install Bun, visit https://bun.sh/docs/installation`)})();import X from"node:path";import Gt from"chokidar";async function Pt(t,r){let n=new Set;S(t.entry).forEach((l)=>{let c=X.resolve(r,l.path),m=X.dirname(c);n.add(m)});let e=Gt.watch(Array.from(n),{persistent:!0,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50},atomic:!0,ignorePermissionErrors:!0,ignored:[/[\\/]\.git[\\/]/,/[\\/]node_modules[\\/]/,t.outDir]}),o=null,i=!1,a=async(l)=>{if(i)return;i=!0;try{await L({...t,entry:[l],clean:!1},r)}catch(c){throw new D(`Build failed: ${u(c)}`)}finally{i=!1}};e.on("change",(l)=>{let c=X.relative(r,l);if(f.cli(`File changed: ${c}`),o)clearTimeout(o);o=setTimeout(()=>a(c),300)}),e.on("error",(l)=>{throw new D(`Watcher error: ${u(l)}`)})}async function Yt(t=Bun.argv.slice(2)){let r=vt(t),n=await ut(process.cwd()),s=process.cwd();if(r.watch)f.cli("Starting watch mode"),f.cli("Watching for file changes");if(n.length===0){let e={...P,...r};if(e.clean)Bt(s,e.outDir);await Ct(e,s)}else{for(let{options:e,rootDir:o}of n)if(e.clean)Bt(o,e.outDir);await Promise.all(n.map(async({options:e,rootDir:o})=>{let i={...P,...e,...r};await Ct(i,o)}))}if(!r.watch)process.exit(0)}async function Ct(t,r){if(t.watch)await Pt(t,r);else await L(t,r)}function Bt(t,r){let n=Xt.join(t,r);if(Y.existsSync(n))try{Y.rmSync(n,{recursive:!0,force:!0})}catch(s){throw new w(`Failed to clean output directory: ${s}`)}Y.mkdirSync(n,{recursive:!0})}Yt().catch((t)=>K(t));export{Yt as main};
|
package/build/dtsWorker.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
var
|
|
2
|
-
`),e
|
|
3
|
-
`),
|
|
1
|
+
var mt=require("node:module");var ct=Object.create;var{getPrototypeOf:pt,defineProperty:T,getOwnPropertyNames:j,getOwnPropertyDescriptor:ut}=Object,I=Object.prototype.hasOwnProperty;var g=(t,r,e)=>{e=t!=null?ct(pt(t)):{};let o=r||!t||!t.__esModule?T(e,"default",{value:t,enumerable:!0}):e;for(let s of j(t))if(!I.call(o,s))T(o,s,{get:()=>t[s],enumerable:!0});return o},F=new WeakMap,ft=(t)=>{var r=F.get(t),e;if(r)return r;if(r=T({},"__esModule",{value:!0}),t&&typeof t==="object"||typeof t==="function")j(t).map((o)=>!I.call(r,o)&&T(r,o,{get:()=>t[o],enumerable:!(e=ut(t,o))||e.enumerable}));return F.set(t,r),r};var gt=(t,r)=>{for(var e in r)T(t,e,{get:r[e],enumerable:!0,configurable:!0,set:(o)=>r[e]=()=>o})};var Pt={};gt(Pt,{runDtsInWorker:()=>yt});module.exports=ft(Pt);var d=require("node:worker_threads");class W extends Error{constructor(t){super(t);this.name="BunupError"}}class m extends W{constructor(t){super(t);this.name="BunupDTSBuildError"}}var f=(t)=>{if(t instanceof Error)return t.message;return String(t)};var u={MAX_LABEL_LENGTH:5,colors:{cli:"183",info:"240",warn:"221",error:"203",progress:{ESM:"214",CJS:"114",IIFE:"105",DTS:"75"},default:"255"},labels:{cli:"BUNUP",info:"INFO",warn:"WARN",error:"ERROR"},formatMessage(t,r,e){let o=" ".repeat(Math.max(0,this.MAX_LABEL_LENGTH-r.length));return`\x1B[38;5;${t}m[${r}]\x1B[0m ${o}${e}`},cli(t){let r=this.labels.cli;console.log(this.formatMessage(this.colors.cli,r,t))},info(t){console.log(`\x1B[38;5;${this.colors.info}m${t}\x1B[0m`)},warn(t){let r=this.labels.warn;console.warn(this.formatMessage(this.colors.warn,r,t))},error(t){let r=this.labels.error;console.error(this.formatMessage(this.colors.error,r,t))},progress(t,r){let e=String(t),o=this.colors.default;for(let[s,a]of Object.entries(this.colors.progress))if(e.includes(s)){o=a;break}console.log(this.formatMessage(o,e,r))}};function O(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function U(t,r){switch(t){case"esm":return".d.mts";case"cjs":return dt(r)?".d.cts":".d.ts";case"iife":return".d.ts"}}function dt(t){return t==="module"}function _(t){return t>=1000?`${(t/1000).toFixed(2)}s`:`${Math.round(t)}ms`}function G(t){if(!t)return[];return Array.from(new Set([...Object.keys(t.dependencies||{}),...Object.keys(t.peerDependencies||{})]))}var q=g(require("node:fs")),z=g(require("oxc-transform"));var C=g(require("node:path"));function S(t){let r=C.default.dirname(t.path||"");return t.data?.compilerOptions?.baseUrl?C.default.resolve(r,t.data.compilerOptions.baseUrl):r}function J(t){let r=new Map,e=t.data?.compilerOptions?.paths;if(!e)return r;let o=S(t);for(let[s,a]of Object.entries(e))if(Array.isArray(a)&&a.length){let n=s.replace(/\*/g,"(.*)"),i=a[0].replace(/\*/g,"$1");r.set(`^${n}$`,C.default.join(o,i))}return r}function X(t,r,e){for(let[o,s]of r){let a=new RegExp(o),n=t.match(a);if(n)return s.replace("$1",n[1]||"")}return e?C.default.join(e,t):null}function Y(t,r){if(r===void 0)return"";let e=t.slice(0,r).split(`
|
|
2
|
+
`),o=e.length,s=e[e.length-1].length+1;return` (${o}:${s})`}function H(t){return t.replace(" with --isolatedDeclarations","").replace(" with --isolatedDeclaration","")}var P=new Set;async function K(t){let r=new Map;return await Promise.all([...t].map(async(e)=>{try{let o=e.replace(/\.tsx?$/,".d.ts"),s=await q.default.promises.readFile(e,"utf8"),{code:a,errors:n}=z.default.isolatedDeclaration(e,s);if(n.forEach((i)=>{let c=i.labels[0],l=c?Y(s,c.start):"",y=`${e.split("/").slice(-3).join("/")}${l}: ${H(i.message)}`;if(!P.has(y))P.add(y)}),a)r.set(o,a)}catch(o){u.warn(`Failed to generate declaration for ${e}: ${f(o)}`)}})),r}var A=g(require("node:fs")),B=g(require("node:path"));var Q=require("load-tsconfig");function V(t){try{return Q.loadTsConfig(".",t)}catch(r){return u.warn(`Failed to load tsconfig: ${f(r)}`),{path:t,data:{},files:[]}}}var $=g(require("node:path")),st=require("rollup"),nt=g(require("rollup-plugin-dts")),v=g(require("typescript"));function Z(t){return t.map((r)=>typeof r==="string"?new RegExp(`^${O(r)}($|\\/|\\\\)`):r)}function tt(t,r){return Z(t.external||[]).concat(G(r).map((e)=>new RegExp(`^${O(e)}($|\\/|\\\\)`)))}function rt(t){return Z(t.noExternal||[])}var M=g(require("node:fs")),et=g(require("node:path"));function ot(t){let r=et.default.join(t,"package.json");try{if(!M.default.existsSync(r))return null;let e=M.default.readFileSync(r,"utf8");return JSON.parse(e)}catch(e){return u.warn(`Failed to load package.json at ${r}: ${f(e)}`),null}}async function it(t,r,e,o,s){let i=`\x00virtual:${t.replace(/\.tsx?$/,".d.ts")}`,c=s.data?.compilerOptions,l={name:"bunup:virtual-dts",resolveId(p,E){if(p.startsWith("\x00virtual:"))return p;if(!E?.startsWith("\x00virtual:")||!p.startsWith("."))return null;let x=E.slice(9),D=$.default.resolve($.default.dirname(x),p);if(p==="."){let R=$.default.join($.default.dirname(x),"index.d.ts");if(r.has(R))return`\x00virtual:${R}`;D=$.default.dirname(x)}if(r.has(D))return`\x00virtual:${D}`;let L=`${D}.d.ts`;if(r.has(L))return`\x00virtual:${L}`;if(p.startsWith(".")){let R=$.default.join(D,"index.d.ts");if(r.has(R))return`\x00virtual:${R}`}return null},load(p){return p.startsWith("\x00virtual:")?r.get(p.slice(9))||null:null}},w=ot(o),h=tt(e,w),y=rt(e),b;try{b=await st.rollup({input:i,onwarn(E,x){if(["UNRESOLVED_IMPORT","CIRCULAR_DEPENDENCY","EMPTY_BUNDLE"].includes(E.code??""))return;x(E)},plugins:[l,nt.default({tsconfig:s.path,compilerOptions:{...c?v.default.parseJsonConfigFileContent({compilerOptions:c},v.default.sys,"./").options:{},declaration:!0,noEmit:!1,emitDeclarationOnly:!0,noEmitOnError:!0,checkJs:!1,declarationMap:!1,skipLibCheck:!0,preserveSymlinks:!1,target:v.default.ScriptTarget.ESNext}})],external:(E)=>h.some((x)=>x.test(E))&&!y.some((x)=>x.test(E))});let{output:p}=await b.generate({});if(!p[0]?.code)throw new m("Generated bundle is empty");return p[0].code}catch(p){throw new m(`DTS bundling failed: ${f(p)}`)}finally{if(b)await b.close()}}var N=g(require("node:fs")),k=g(require("node:path"));var ht=/(?:import|export)(?:[\s\n]*(?:type[\s\n]+)?(?:\*|\{[^}]*\}|[\w$]+)[\s\n]+from[\s\n]*|[\s\n]+)(["'`])([^'"]+)\1/g,xt=/import\s*\(\s*(["'`])([^'"]+)\1\s*\)/g;async function at(t,r){let e=new Set([t]),o=[t],s=J(r),a=S(r);while(o.length){let n=o.pop();if(!n)continue;try{let i=await N.default.promises.readFile(n,"utf8"),c=Et(i);for(let l of c){let w=l.startsWith(".")?k.default.resolve(k.default.dirname(n),l):X(l,s,a);if(!w)continue;let h=wt(w);if(h&&!e.has(h))e.add(h),o.push(h)}}catch(i){u.warn(`Error processing ${n}: ${f(i)}`)}}return e}function Et(t){let r=new Set;for(let e of[ht,xt]){let o;while((o=e.exec(t))!==null)r.add(o[2])}return Array.from(r)}function wt(t){let r=["",".ts",".tsx","/index.ts","/index.tsx"];for(let e of r){let o=`${t}${e}`;if(N.default.existsSync(o)&&(o.endsWith(".ts")||o.endsWith(".tsx")))return o}return null}async function lt(t,r,e){let{absoluteRootDir:o,absoluteEntry:s}=$t(t,r),a=V(e.preferredTsconfigPath),n=await at(s,a),i=await K(n);return it(s,i,e,o,a)}function $t(t,r){let e=B.default.resolve(t),o=B.default.resolve(e,r);if(!A.default.existsSync(e))throw new m(`Root directory does not exist: ${e}`);if(!A.default.existsSync(o))throw new m(`Entry file does not exist: ${o}`);if(!o.endsWith(".ts"))throw new m(`Entry file must be a TypeScript file (.ts): ${o}`);if(B.default.relative(e,o).startsWith(".."))throw new m(`Entry file must be within rootDir: ${o}`);return{absoluteRootDir:e,absoluteEntry:o}}async function yt(t,r,e,o,s){return new Promise((a,n)=>{let i={rootDir:t,entries:r,formats:e,options:o,packageType:s},c=new d.Worker(new URL("./dtsWorker.js",import.meta.url),{workerData:i});c.on("message",(l)=>{if(l.success)a();else n(new m(l.error||"Unknown DTS worker error"))}),c.on("error",n),c.on("exit",(l)=>{if(l!==0)n(new m(`DTS worker stopped with exit code ${l}`))})})}if(!d.isMainThread&&d.parentPort){let{rootDir:t,entries:r,formats:e,options:o,packageType:s}=d.workerData,a=performance.now();u.progress("DTS","Bundling types");try{let n=r.map(async(i)=>{let c=await lt(t,i.path,o);return Promise.all(e.map(async(l)=>{let w=U(l,s),h=`${o.outDir}/${i.name}${w}`,y=`${t}/${h}`;await Bun.write(y,c),u.progress("DTS",h)}))});Promise.all(n).then(()=>{let i=performance.now()-a;d.parentPort?.postMessage({success:!0});let c=_(i);if(u.progress("DTS",`Bundled types in ${c}`),P.size>0)console.log(`
|
|
3
|
+
`),P.forEach((l)=>{u.warn(l)}),u.info(`
|
|
4
4
|
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.
|
|
5
|
-
`),
|
|
5
|
+
`),P.clear()}).catch((i)=>{d.parentPort?.postMessage({success:!1,error:f(i)})})}catch(n){d.parentPort?.postMessage({success:!1,error:f(n)})}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bunup",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.24",
|
|
4
4
|
"description": "A extremely fast, zero-config bundler for TypeScript & JavaScript, powered by Bun.",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"types": "./build/index.d.ts",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"@types/bun": "^1.2.5",
|
|
19
19
|
"@typescript-eslint/eslint-plugin": "^7.3.1",
|
|
20
20
|
"bumpp": "^10.1.0",
|
|
21
|
-
"bunup": "^0.1.
|
|
21
|
+
"bunup": "^0.1.23",
|
|
22
22
|
"eslint": "^8.57.0",
|
|
23
23
|
"husky": "^9.1.6",
|
|
24
24
|
"prettier": "^3.2.5",
|