bunup 0.1.10 → 0.1.12
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.js +3 -3
- package/build/cli.mjs +3 -3
- package/package.json +2 -2
- package/build/dtsWorker.js +0 -1
package/build/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
|
-
"use strict"; function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs);var _path = require('path'); var _path2 = _interopRequireDefault(_path);var
|
|
2
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs);var _path = require('path'); var _path2 = _interopRequireDefault(_path);var _oxctransform = require('oxc-transform'); var _oxctransform2 = _interopRequireDefault(_oxctransform);var _rollup = require('rollup');var _rollupplugindts = require('rollup-plugin-dts'); var _rollupplugindts2 = _interopRequireDefault(_rollupplugindts);var _typescript = require('typescript'); var _typescript2 = _interopRequireDefault(_typescript);var h=t=>t instanceof Error?t.message:String(t),W=(t,r)=>{let n=h(t),e=r?`[${r}] `:"";console.error(`\x1B[31m[ERROR]\x1B[0m ${e}${n}`),process.env.NODE_ENV!=="production"&&t instanceof Error&&t.stack&&console.error("\x1B[2m"+t.stack.split(`
|
|
3
3
|
`).slice(1).join(`
|
|
4
|
-
`)+"\x1B[0m")};var i={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(r,t,e){let o=" ".repeat(Math.max(0,this.MAX_LABEL_LENGTH-t.length));return`\x1B[38;5;${r}m[${t}]\x1B[0m ${o}${e}`},cli(r){let t=this.labels.cli;console.log(this.formatMessage(this.colors.cli,t,r))},info(r){let t=this.labels.info;console.log(this.formatMessage(this.colors.info,t,r))},warn(r){let t=this.labels.warn;console.warn(this.formatMessage(this.colors.warn,t,r))},error(r){let t=this.labels.error;console.error(this.formatMessage(this.colors.error,t,r))},progress(r,t){let e=String(r),o=this.colors.default;for(let[n,s]of Object.entries(this.colors.progress))if(e.includes(n)){o=s;break}console.log(this.formatMessage(o,e,t))}};function h(r,t){return`${t?`${t.replace(/-/g,"_")}_`:""}${r}`.toUpperCase()}var x=class{constructor(t=_os.cpus.call(void 0, ).length||4){this.workers=[];this.queue=[];this.busyWorkers=new Set;this.isShuttingDown=!1;this.maxWorkers=t}async process(t){if(this.isShuttingDown)throw new Error("Worker pool is shutting down");return new Promise((e,o)=>{this.queue.push({task:t,resolve:e,reject:o}),this.processQueue()})}processQueue(){if(!(this.queue.length===0||this.isShuttingDown))if(this.workers.length<this.maxWorkers){let t=new (0, _worker_threads.Worker)(_path2.default.join(__dirname,"./dtsWorker.js"));this.workers.push(t),this.assignTaskToWorker(t)}else{let t=this.workers.find(e=>!this.busyWorkers.has(e));t&&this.assignTaskToWorker(t)}}assignTaskToWorker(t){let e=this.queue.shift();if(!e)return;let{task:o,resolve:n,reject:s}=e;this.busyWorkers.add(t);let a=()=>{this.busyWorkers.delete(t),this.isShuttingDown&&this.busyWorkers.size===0?this.terminateAllWorkers():this.processQueue()};t.on("message",u=>{u.success?(i.progress(h("DTS",u.name),u.outputRelativePath),n()):(i.error(`DTS generation failed: ${u.error}`),s(new Error(u.error))),a()}),t.on("error",u=>{let l=f(u);i.error(`Worker error: ${l}`),s(u),a()}),t.postMessage(o)}terminateAllWorkers(){this.workers.forEach(t=>{try{t.terminate()}catch(e){i.error(`Error terminating worker: ${f(e)}`)}}),this.workers=[],this.busyWorkers.clear()}async cleanup(){if(this.isShuttingDown=!0,this.busyWorkers.size===0){this.terminateAllWorkers();return}return new Promise(t=>{let e=setInterval(()=>{this.busyWorkers.size===0&&(clearInterval(e),this.terminateAllWorkers(),t())},100);setTimeout(()=>{clearInterval(e),this.terminateAllWorkers(),t()},5e3)})}};function k(r){return r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function S(r=8){return Math.random().toString(36).substring(2,2+r)}function T(r,t){switch(r){case"esm":return".mjs";case"cjs":return O(t)?".cjs":".js";case"iife":return".global.js"}}function O(r){return r==="module"}function P(r){return r>=1e3?`${(r/1e3).toFixed(2)}s`:`${Math.round(r)}ms`}function W(r){return r?Array.from(new Set([...Object.keys(r.dependencies||{}),...Object.keys(r.peerDependencies||{})])):[]}function $(r,t){return r===void 0?t==="esm":r}function Z(r){return _optionalChain([r, 'access', _2 => _2.split, 'call', _3 => _3("/"), 'access', _4 => _4.pop, 'call', _5 => _5(), 'optionalAccess', _6 => _6.split, 'call', _7 => _7("."), 'access', _8 => _8.slice, 'call', _9 => _9(0,-1), 'access', _10 => _10.join, 'call', _11 => _11(".")])||""}function d(r){let t=[],e=new Set;function o(n,s){if(e.has(n)){let a=S();t.push({name:`${n}_${a}`,path:s})}else t.push({name:n,path:s}),e.add(n)}if(Array.isArray(r))for(let n of r){let s=Z(n);o(s,n)}else Object.entries(r).forEach(([n,s])=>{o(n,s)});return t}function F(r,t){return`[dir]/${r}${t}`}function R(r){return r.map(t=>typeof t=="string"?new RegExp(`^${k(t)}($|\\/|\\\\)`):t)}function j(r,t){return R(r.external||[]).concat(W(t).map(e=>new RegExp(`^${k(e)}($|\\/|\\\\)`)))}function M(r){return R(r.noExternal||[])}var m={entry:[],format:["esm"],outDir:"dist",minify:!1,watch:!1,dts:!1,target:"node",external:[],clean:!0};function C(r,t){return{outdir:`${t}/${r.outDir}`,minify:rr(r),target:r.target,splitting:r.splitting}}function rr(r){let{minify:t,minifyWhitespace:e,minifyIdentifiers:o,minifySyntax:n}=r,s=t===!0;return{whitespace:_nullishCoalesce(e, () => (s)),identifiers:_nullishCoalesce(o, () => (s)),syntax:_nullishCoalesce(n, () => (s))}}async function N(r){let t=[];for(let e of[".ts",".js",".mjs",".cjs",".mts",".cts",".json",".jsonc"]){let o=_path2.default.join(r,`bunup.config${e}`);try{if(!_fs2.default.existsSync(o))continue;let n;if(e===".json"||e===".jsonc"){let s=_fs2.default.readFileSync(o,"utf8");n=JSON.parse(s)}else{let s=await Promise.resolve().then(() => _interopRequireWildcard(require(`file://${o}`)));n=s.default||s,n||(i.warn(`No default export found in ${o}`),n={})}if(Array.isArray(n))for(let s of n)t.push({options:{...m,...s},rootDir:r});else t.push({options:{...m,...n},rootDir:r});break}catch(n){i.error(`Failed to load config from ${o}: ${f(n)}`)}if(t.length>0)break}return t}function I(r){let t=_path2.default.join(r,"package.json");try{if(!_fs2.default.existsSync(t))return null;let e=_fs2.default.readFileSync(t,"utf8");return JSON.parse(e)}catch(e){return i.error(`Failed to load package.json at ${t}: ${f(e)}`),null}}function L(r,t){return{name:"bunup:external-plugin",setup(e){e.onResolve({filter:/.*/},o=>{let n=o.path;return r.some(a=>a.test(n))&&!t.some(a=>a.test(n))?{path:n,external:!0}:null})}}}async function w(r,t){if(!r.entry||r.entry.length===0||!r.outDir){i.cli("Nothing to build. Please make sure you have provided a proper bunup configuration or cli arguments.");return}let e=performance.now();i.cli("Build started");let o=I(t),n=_optionalChain([o, 'optionalAccess', _12 => _12.type]),s=j(r,o),a=M(r),u=[L(s,a)],l=d(r.entry),c=r.format.flatMap(p=>l.map(g=>er(r,t,g,p,n,u)));try{await Promise.all(c);let p=performance.now()-e,g=P(p);i.cli(`\u26A1 Build success in ${g}`)}catch (e2){i.error("Build process encountered errors."),process.exit(1)}if(r.dts){let p=performance.now();i.progress("DTS","Bundling types");let g=r.format.filter(y=>!(y==="iife"&&!O(n)&&r.format.includes("cjs"))),U=r.dts===!0?l:d(r.dts.entry),b=new x;try{let y=g.flatMap(G=>U.map(V=>tr(r,t,V,G,n,b)));await Promise.all(y);let q=performance.now()-p,Q=P(q);i.progress("DTS",`Bundled types in ${Q}`)}catch (e3){await b.cleanup()}await b.cleanup()}}async function tr(r,t,e,o,n,s){let a={name:r.name,rootDir:t,outDir:r.outDir,entry:e,format:o,packageType:n,options:r};await s.process(a)}async function er(r,t,e,o,n,s){let a=T(o,n),u=C(r,t),l=await Bun.build({...u,entrypoints:[`${t}/${e.path}`],format:o,naming:{entry:F(e.name,a)},splitting:$(r.splitting,o),plugins:s,throw:!1});if(!l.success)throw l.logs.forEach(c=>{c.level==="error"?i.error(c.message):c.level==="warning"?i.warn(c.message):c.level==="info"&&i.info(c.message)}),new Error(`Build failed for ${e} (${o})`);i.progress(h(o,r.name),`${r.outDir}/${e.name}${a}`)}var nr={n:"name",f:"format",o:"outDir",m:"minify",w:"watch",d:"dts",e:"external",t:"target",mw:"minifyWhitespace",mi:"minifyIdentifiers",ms:"minifySyntax",c:"clean",s:"splitting",ne:"noExternal"},or={name:(r,t)=>{t.name=r},format:(r,t)=>{t.format=r.split(",")},outDir:(r,t)=>{t.outDir=r},minify:(r,t)=>{t.minify=!!r},watch:(r,t)=>{t.watch=!!r},dts:(r,t)=>{t.dts=!!r},external:(r,t)=>{t.external=r.split(",")},minifyWhitespace:(r,t)=>{t.minifyWhitespace=!!r},minifyIdentifiers:(r,t)=>{t.minifyIdentifiers=!!r},minifySyntax:(r,t)=>{t.minifySyntax=!!r},target:(r,t)=>{t.target=r},clean:(r,t)=>{t.clean=!!r},splitting:(r,t)=>{t.splitting=!!r},noExternal:(r,t)=>{t.noExternal=r.split(",")}};function _(r){let t={};for(let e=0;e<r.length;e++){let o=r[e];if(o.startsWith("--")||o.startsWith("-")){let n=o.startsWith("-")&&!o.startsWith("--"),s=n?o.slice(1):o.slice(2),a=n?nr[s]:s,u=or[a];if(!u){i.error(`Unknown option: ${s}`);continue}let l=r[e+1],c=l&&!l.startsWith("-")?l:!0;u(c,t),typeof c=="string"&&e++}else t.entry||(t.entry=[]),Array.isArray(t.entry)&&t.entry.push(o)}return t}typeof Bun>"u"&&(i.error(`Bunup requires Bun to run.
|
|
5
|
-
To install Bun, visit https://bun.sh/docs/installation`),process.exit(1));var _chokidar = require('chokidar'); var _chokidar2 = _interopRequireDefault(_chokidar);async function
|
|
4
|
+
`)+"\x1B[0m")};function C(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function L(t=8){return Math.random().toString(36).substring(2,2+t)}function _(t,r){switch(t){case"esm":return".mjs";case"cjs":return $(r)?".cjs":".js";case"iife":return".global.js"}}function J(t,r){switch(t){case"esm":return".d.mts";case"cjs":return $(r)?".d.cts":".d.ts";case"iife":return".d.ts"}}function $(t){return t==="module"}function k(t){return t>=1e3?`${(t/1e3).toFixed(2)}s`:`${Math.round(t)}ms`}function U(t){return t?Array.from(new Set([...Object.keys(t.dependencies||{}),...Object.keys(t.peerDependencies||{})])):[]}function H(t,r){return t===void 0?r==="esm":t}function z(t){return t.map(r=>typeof r=="string"?new RegExp(`^${C(r)}($|\\/|\\\\)`):r)}function B(t,r){return z(t.external||[]).concat(U(r).map(n=>new RegExp(`^${C(n)}($|\\/|\\\\)`)))}function S(t){return z(t.noExternal||[])}var a={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 e=" ".repeat(Math.max(0,this.MAX_LABEL_LENGTH-r.length));return`\x1B[38;5;${t}m[${r}]\x1B[0m ${e}${n}`},cli(t){let r=this.labels.cli;console.log(this.formatMessage(this.colors.cli,r,t))},info(t){let r=this.labels.info;console.log(this.formatMessage(this.colors.info,r,t))},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),e=this.colors.default;for(let[o,s]of Object.entries(this.colors.progress))if(n.includes(o)){e=s;break}console.log(this.formatMessage(e,n,r))}};function j(t,r){return`${r?`${r.replace(/-/g,"_")}_`:""}${t}`.toUpperCase()}var w={entry:[],format:["esm"],outDir:"dist",minify:!1,watch:!1,dts:!1,target:"node",external:[],clean:!0};function V(t,r){return{outdir:`${r}/${t.outDir}`,minify:it(t),target:t.target,splitting:t.splitting}}function it(t){let{minify:r,minifyWhitespace:n,minifyIdentifiers:e,minifySyntax:o}=t,s=r===!0;return{whitespace:_nullishCoalesce(n, () => (s)),identifiers:_nullishCoalesce(e, () => (s)),syntax:_nullishCoalesce(o, () => (s))}}async function X(t){let r=[];for(let n of[".ts",".js",".mjs",".cjs",".mts",".cts",".json",".jsonc"]){let e=_path2.default.join(t,`bunup.config${n}`);try{if(!_fs2.default.existsSync(e))continue;let o;if(n===".json"||n===".jsonc"){let s=_fs2.default.readFileSync(e,"utf8");o=JSON.parse(s)}else{let s=await Promise.resolve().then(() => _interopRequireWildcard(require(`file://${e}`)));o=s.default||s,o||(a.warn(`No default export found in ${e}`),o={})}if(Array.isArray(o))for(let s of o)r.push({options:{...w,...s},rootDir:t});else r.push({options:{...w,...o},rootDir:t});break}catch(o){a.error(`Failed to load config from ${e}: ${h(o)}`)}if(r.length>0)break}return r}function D(t){let r=_path2.default.join(t,"package.json");try{if(!_fs2.default.existsSync(r))return null;let n=_fs2.default.readFileSync(r,"utf8");return JSON.parse(n)}catch(n){return a.error(`Failed to load package.json at ${r}: ${h(n)}`),null}}function Y(t){if(!_fs2.default.existsSync(t))return{};try{let r=_fs2.default.readFileSync(t,"utf8");return JSON.parse(r)||{}}catch(r){return a.warn(`Failed to parse tsconfig at ${t}: ${h(r)}`),{}}}async function q(t,r,n,e){let{absoluteRootDir:o,absoluteEntry:s}=gt(t,r),i=await ut(s),u=await ft(i);return mt(s,u,n,e,o)}async function ut(t){let r=new Set,n=[t];for(;n.length>0;){let e=n.pop();if(!(!e||r.has(e))){r.add(e);try{let o=await _fs2.default.promises.readFile(e,"utf8"),s=pt(o);for(let i of s){let u=_path2.default.dirname(e),c=_path2.default.resolve(u,i),l=[c,`${c}.ts`,`${c}.tsx`,`${c}/index.ts`,`${c}/index.tsx`];for(let p of l)if(_fs2.default.existsSync(p)&&p.endsWith(".ts")&&!r.has(p)){n.push(p);break}}}catch(o){a.warn(`Error processing ${e}: ${o instanceof Error?o.message:String(o)}`)}}}return r}function pt(t){let r=new Set;try{let n=/(?:import|export)(?:(?:[\s\n]*(?:type[\s\n]+)?(?:\*|\{[^}]*\}|[\w$]+)[\s\n]+from[\s\n]*)|[\s\n]+)(["'`])([^'"]+)\1/g,e;for(;(e=n.exec(t))!==null;){let i=e[2];i.startsWith(".")&&r.add(i)}let o=/import\s+(["'`])([^'"]+)\1\s*;?/g;for(;(e=o.exec(t))!==null;){let i=e[2];i.startsWith(".")&&r.add(i)}let s=/import\s*\(\s*(["'`])([^'"]+)\1\s*\)/g;for(;(e=s.exec(t))!==null;){let i=e[2];i.startsWith(".")&&r.add(i)}}catch(n){a.warn(`Error extracting imports: ${n instanceof Error?n.message:String(n)}`)}return Array.from(r)}async function ft(t){let r=new Map;return await Promise.all(Array.from(t).map(async n=>{try{let e=n.replace(/\.tsx?$/,".d.ts"),o=await _fs2.default.promises.readFile(n,"utf8"),{code:s}=_oxctransform2.default.isolatedDeclaration(n,o);s&&r.set(e,s)}catch(e){a.warn(`Failed to generate declaration for ${n}: ${e instanceof Error?e.message:String(e)}`)}})),r}async function mt(t,r,n,e,o){let s="\0virtual:",i=t.replace(/\.tsx?$/,".d.ts"),u=`${s}${i}`,c=typeof e.dts=="object"?e.dts:{},l=c.preferredTsconfigPath?_path2.default.resolve(c.preferredTsconfigPath):_path2.default.join(o,"tsconfig.json"),d=(await Y(l)).compilerOptions,v={name:"bunup:virtual-dts",resolveId(f,m){if(f.startsWith(s))return f;if(_optionalChain([m, 'optionalAccess', _2 => _2.startsWith, 'call', _3 => _3(s)])){let y=m.slice(s.length),nt=_path2.default.dirname(y);if(f.startsWith(".")){let ot=_path2.default.resolve(nt,f);for(let st of["",".d.ts","/index.d.ts"]){let A=`${ot}${st}`;if(r.has(A))return`${s}${A}`}}}return null},load(f){if(f.startsWith(s)){let m=f.slice(s.length);return r.get(m)||null}return null}},x=D(o),R=B(e,x),F=S(e),E;try{E=await _rollup.rollup.call(void 0, {input:u,onwarn(m,y){m.code==="UNRESOLVED_IMPORT"||m.code==="CIRCULAR_DEPENDENCY"||m.code==="EMPTY_BUNDLE"||y(m)},plugins:[v,_rollupplugindts2.default.call(void 0, {tsconfig:l,compilerOptions:{...d?_typescript2.default.parseJsonConfigFileContent({compilerOptions:d},_typescript2.default.sys,"./").options:{},declaration:!0,noEmit:!1,emitDeclarationOnly:!0,noEmitOnError:!0,checkJs:!1,declarationMap:!1,skipLibCheck:!0,preserveSymlinks:!1,target:_typescript2.default.ScriptTarget.ESNext}})],external:m=>R.some(y=>y.test(m))&&!F.some(y=>y.test(m))});let{output:f}=await E.generate({format:n});if(!_optionalChain([f, 'access', _4 => _4[0], 'optionalAccess', _5 => _5.code]))throw new Error("Generated bundle is empty");return f[0].code}catch(f){throw new Error(`DTS bundling failed: ${h(f)}`)}finally{E&&await E.close()}}function gt(t,r){let n=_path2.default.resolve(t),e=_path2.default.resolve(n,r);if(!_fs2.default.existsSync(n))throw new Error(`Root directory does not exist: ${n}`);if(!_fs2.default.existsSync(e))throw new Error(`Entry file does not exist: ${e}`);if(!e.endsWith(".ts"))throw new Error(`Entry file must be a TypeScript file (.ts): ${e}`);if(_path2.default.relative(n,e).startsWith(".."))throw new Error(`Entry file must be within rootDir: ${e}`);return{absoluteRootDir:n,absoluteEntry:e}}function dt(t){return _optionalChain([t, 'access', _6 => _6.split, 'call', _7 => _7("/"), 'access', _8 => _8.pop, 'call', _9 => _9(), 'optionalAccess', _10 => _10.split, 'call', _11 => _11("."), 'access', _12 => _12.slice, 'call', _13 => _13(0,-1), 'access', _14 => _14.join, 'call', _15 => _15(".")])||""}function O(t){let r=[],n=new Set;function e(o,s){if(n.has(o)){let i=L();r.push({name:`${o}_${i}`,path:s})}else r.push({name:o,path:s}),n.add(o)}if(Array.isArray(t))for(let o of t){let s=dt(o);e(s,o)}else Object.entries(t).forEach(([o,s])=>{e(o,s)});return r}function K(t,r){return`[dir]/${t}${r}`}function Q(t,r){return{name:"bunup:external-plugin",setup(n){n.onResolve({filter:/.*/},e=>{let o=e.path;return t.some(i=>i.test(o))&&!r.some(i=>i.test(o))?{path:o,external:!0}:null})}}}async function T(t,r){if(!t.entry||t.entry.length===0||!t.outDir){a.cli("Nothing to build. Please make sure you have provided a proper bunup configuration or cli arguments.");return}let n=performance.now();a.cli("Build started");let e=D(r),o=_optionalChain([e, 'optionalAccess', _16 => _16.type]),s=B(t,e),i=S(t),u=[Q(s,i)],c=O(t.entry),l=t.format.flatMap(p=>c.map(d=>ht(t,r,d,p,o,u)));try{await Promise.all(l);let p=performance.now()-n,d=k(p);a.cli(`\u26A1 Build success in ${d}`)}catch (e2){a.error("Build process encountered errors."),process.exit(1)}if(t.dts){let p=performance.now();a.progress("DTS","Bundling types");let d=t.format.filter(x=>!(x==="iife"&&!$(o)&&t.format.includes("cjs"))),v=t.dts===!0?c:O(t.dts.entry);try{let x=d.flatMap(E=>v.map(f=>yt(t,r,f,E,o)));await Promise.all(x);let R=performance.now()-p,F=k(R);a.progress("DTS",`Bundled types in ${F}`)}catch (e3){a.error("DTS build process encountered errors.")}}}async function yt(t,r,n,e,o){let s=await q(r,n.path,e,t),i=J(e,o),u=`${t.outDir}/${n.name}${i}`,c=`${r}/${u}`;await Bun.write(c,s),a.progress(j("DTS",t.name),u)}async function ht(t,r,n,e,o,s){let i=_(e,o),u=V(t,r),c=await Bun.build({...u,entrypoints:[`${r}/${n.path}`],format:e,naming:{entry:K(n.name,i)},splitting:H(t.splitting,e),plugins:s,throw:!1});if(!c.success)throw c.logs.forEach(l=>{l.level==="error"?a.error(l.message):l.level==="warning"?a.warn(l.message):l.level==="info"&&a.info(l.message)}),new Error(`Build failed for ${n} (${e})`);a.progress(j(e,t.name),`${t.outDir}/${n.name}${i}`)}var xt={n:"name",f:"format",o:"outDir",m:"minify",w:"watch",d:"dts",e:"external",t:"target",mw:"minifyWhitespace",mi:"minifyIdentifiers",ms:"minifySyntax",c:"clean",s:"splitting",ne:"noExternal"},Et={name:(t,r)=>{r.name=t},format:(t,r)=>{r.format=t.split(",")},outDir:(t,r)=>{r.outDir=t},minify:(t,r)=>{r.minify=!!t},watch:(t,r)=>{r.watch=!!t},dts:(t,r)=>{r.dts=!!t},external:(t,r)=>{r.external=t.split(",")},minifyWhitespace:(t,r)=>{r.minifyWhitespace=!!t},minifyIdentifiers:(t,r)=>{r.minifyIdentifiers=!!t},minifySyntax:(t,r)=>{r.minifySyntax=!!t},target:(t,r)=>{r.target=t},clean:(t,r)=>{r.clean=!!t},splitting:(t,r)=>{r.splitting=!!t},noExternal:(t,r)=>{r.noExternal=t.split(",")}};function Z(t){let r={};for(let n=0;n<t.length;n++){let e=t[n];if(e.startsWith("--")||e.startsWith("-")){let o=e.startsWith("-")&&!e.startsWith("--"),s=o?e.slice(1):e.slice(2),i=o?xt[s]:s,u=Et[i];if(!u){a.error(`Unknown option: ${s}`);continue}let c=t[n+1],l=c&&!c.startsWith("-")?c:!0;u(l,r),typeof l=="string"&&n++}else r.entry||(r.entry=[]),Array.isArray(r.entry)&&r.entry.push(e)}return r}typeof Bun>"u"&&(a.error(`Bunup requires Bun to run.
|
|
5
|
+
To install Bun, visit https://bun.sh/docs/installation`),process.exit(1));var _chokidar = require('chokidar'); var _chokidar2 = _interopRequireDefault(_chokidar);async function tt(t,r){let n=new Set;O(t.entry).forEach(c=>{let l=_path2.default.resolve(r,c.path),p=_path2.default.dirname(l);n.add(p)});let o=_chokidar2.default.watch(Array.from(n),{persistent:!0,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50},atomic:!0,ignorePermissionErrors:!0,ignored:[/[\\/]\.git[\\/]/,/[\\/]node_modules[\\/]/,t.outDir]}),s=null,i=!1,u=async c=>{if(!i){i=!0;try{await T({...t,entry:[c],clean:!1},r)}catch(l){a.error(`Build failed: ${l}`)}finally{i=!1}}};o.on("change",c=>{let l=_path2.default.relative(r,c);a.cli(`File changed: ${l}`),s&&clearTimeout(s),s=setTimeout(()=>u(l),300)}),o.on("error",c=>{a.error(`Watcher error: ${c}`)})}async function bt(t=Bun.argv.slice(2)){let r=Z(t),n=await X(process.cwd()),e=process.cwd();if(r.watch&&(a.cli("Starting watch mode"),a.cli("Watching for file changes")),n.length===0){let o={...w,...r};o.clean&&et(e,o.outDir),await rt(o,e)}else{for(let{options:o,rootDir:s}of n)o.clean&&et(s,o.outDir);await Promise.all(n.map(async({options:o,rootDir:s})=>{let i={...w,...o,...r};await rt(i,s)}))}r.watch||process.exit(0)}async function rt(t,r){t.watch?await tt(t,r):await T(t,r)}function et(t,r){let n=_path2.default.join(t,r);if(_fs2.default.existsSync(n))try{_fs2.default.rmSync(n,{recursive:!0,force:!0})}catch(e){a.error(`Failed to clean output directory: ${e}`)}_fs2.default.mkdirSync(n,{recursive:!0})}bt().catch(t=>{W(t),process.exit(1)});exports.main = bt;
|
package/build/cli.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
|
-
import
|
|
2
|
+
import I from"fs";import Pt from"path";import b from"fs";import g from"path";import at from"oxc-transform";import{rollup as ct}from"rollup";import lt from"rollup-plugin-dts";import M from"typescript";var h=t=>t instanceof Error?t.message:String(t),W=(t,r)=>{let n=h(t),e=r?`[${r}] `:"";console.error(`\x1B[31m[ERROR]\x1B[0m ${e}${n}`),process.env.NODE_ENV!=="production"&&t instanceof Error&&t.stack&&console.error("\x1B[2m"+t.stack.split(`
|
|
3
3
|
`).slice(1).join(`
|
|
4
|
-
`)+"\x1B[0m")};var
|
|
5
|
-
To install Bun, visit https://bun.sh/docs/installation`),process.exit(1));import
|
|
4
|
+
`)+"\x1B[0m")};function C(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function L(t=8){return Math.random().toString(36).substring(2,2+t)}function _(t,r){switch(t){case"esm":return".mjs";case"cjs":return $(r)?".cjs":".js";case"iife":return".global.js"}}function J(t,r){switch(t){case"esm":return".d.mts";case"cjs":return $(r)?".d.cts":".d.ts";case"iife":return".d.ts"}}function $(t){return t==="module"}function k(t){return t>=1e3?`${(t/1e3).toFixed(2)}s`:`${Math.round(t)}ms`}function U(t){return t?Array.from(new Set([...Object.keys(t.dependencies||{}),...Object.keys(t.peerDependencies||{})])):[]}function H(t,r){return t===void 0?r==="esm":t}function z(t){return t.map(r=>typeof r=="string"?new RegExp(`^${C(r)}($|\\/|\\\\)`):r)}function B(t,r){return z(t.external||[]).concat(U(r).map(n=>new RegExp(`^${C(n)}($|\\/|\\\\)`)))}function S(t){return z(t.noExternal||[])}import P from"fs";import G from"path";var a={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 e=" ".repeat(Math.max(0,this.MAX_LABEL_LENGTH-r.length));return`\x1B[38;5;${t}m[${r}]\x1B[0m ${e}${n}`},cli(t){let r=this.labels.cli;console.log(this.formatMessage(this.colors.cli,r,t))},info(t){let r=this.labels.info;console.log(this.formatMessage(this.colors.info,r,t))},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),e=this.colors.default;for(let[o,s]of Object.entries(this.colors.progress))if(n.includes(o)){e=s;break}console.log(this.formatMessage(e,n,r))}};function j(t,r){return`${r?`${r.replace(/-/g,"_")}_`:""}${t}`.toUpperCase()}var w={entry:[],format:["esm"],outDir:"dist",minify:!1,watch:!1,dts:!1,target:"node",external:[],clean:!0};function V(t,r){return{outdir:`${r}/${t.outDir}`,minify:it(t),target:t.target,splitting:t.splitting}}function it(t){let{minify:r,minifyWhitespace:n,minifyIdentifiers:e,minifySyntax:o}=t,s=r===!0;return{whitespace:n??s,identifiers:e??s,syntax:o??s}}async function X(t){let r=[];for(let n of[".ts",".js",".mjs",".cjs",".mts",".cts",".json",".jsonc"]){let e=G.join(t,`bunup.config${n}`);try{if(!P.existsSync(e))continue;let o;if(n===".json"||n===".jsonc"){let s=P.readFileSync(e,"utf8");o=JSON.parse(s)}else{let s=await import(`file://${e}`);o=s.default||s,o||(a.warn(`No default export found in ${e}`),o={})}if(Array.isArray(o))for(let s of o)r.push({options:{...w,...s},rootDir:t});else r.push({options:{...w,...o},rootDir:t});break}catch(o){a.error(`Failed to load config from ${e}: ${h(o)}`)}if(r.length>0)break}return r}function D(t){let r=G.join(t,"package.json");try{if(!P.existsSync(r))return null;let n=P.readFileSync(r,"utf8");return JSON.parse(n)}catch(n){return a.error(`Failed to load package.json at ${r}: ${h(n)}`),null}}function Y(t){if(!P.existsSync(t))return{};try{let r=P.readFileSync(t,"utf8");return JSON.parse(r)||{}}catch(r){return a.warn(`Failed to parse tsconfig at ${t}: ${h(r)}`),{}}}async function q(t,r,n,e){let{absoluteRootDir:o,absoluteEntry:s}=gt(t,r),i=await ut(s),u=await ft(i);return mt(s,u,n,e,o)}async function ut(t){let r=new Set,n=[t];for(;n.length>0;){let e=n.pop();if(!(!e||r.has(e))){r.add(e);try{let o=await b.promises.readFile(e,"utf8"),s=pt(o);for(let i of s){let u=g.dirname(e),c=g.resolve(u,i),l=[c,`${c}.ts`,`${c}.tsx`,`${c}/index.ts`,`${c}/index.tsx`];for(let p of l)if(b.existsSync(p)&&p.endsWith(".ts")&&!r.has(p)){n.push(p);break}}}catch(o){a.warn(`Error processing ${e}: ${o instanceof Error?o.message:String(o)}`)}}}return r}function pt(t){let r=new Set;try{let n=/(?:import|export)(?:(?:[\s\n]*(?:type[\s\n]+)?(?:\*|\{[^}]*\}|[\w$]+)[\s\n]+from[\s\n]*)|[\s\n]+)(["'`])([^'"]+)\1/g,e;for(;(e=n.exec(t))!==null;){let i=e[2];i.startsWith(".")&&r.add(i)}let o=/import\s+(["'`])([^'"]+)\1\s*;?/g;for(;(e=o.exec(t))!==null;){let i=e[2];i.startsWith(".")&&r.add(i)}let s=/import\s*\(\s*(["'`])([^'"]+)\1\s*\)/g;for(;(e=s.exec(t))!==null;){let i=e[2];i.startsWith(".")&&r.add(i)}}catch(n){a.warn(`Error extracting imports: ${n instanceof Error?n.message:String(n)}`)}return Array.from(r)}async function ft(t){let r=new Map;return await Promise.all(Array.from(t).map(async n=>{try{let e=n.replace(/\.tsx?$/,".d.ts"),o=await b.promises.readFile(n,"utf8"),{code:s}=at.isolatedDeclaration(n,o);s&&r.set(e,s)}catch(e){a.warn(`Failed to generate declaration for ${n}: ${e instanceof Error?e.message:String(e)}`)}})),r}async function mt(t,r,n,e,o){let s="\0virtual:",i=t.replace(/\.tsx?$/,".d.ts"),u=`${s}${i}`,c=typeof e.dts=="object"?e.dts:{},l=c.preferredTsconfigPath?g.resolve(c.preferredTsconfigPath):g.join(o,"tsconfig.json"),d=(await Y(l)).compilerOptions,v={name:"bunup:virtual-dts",resolveId(f,m){if(f.startsWith(s))return f;if(m?.startsWith(s)){let y=m.slice(s.length),nt=g.dirname(y);if(f.startsWith(".")){let ot=g.resolve(nt,f);for(let st of["",".d.ts","/index.d.ts"]){let A=`${ot}${st}`;if(r.has(A))return`${s}${A}`}}}return null},load(f){if(f.startsWith(s)){let m=f.slice(s.length);return r.get(m)||null}return null}},x=D(o),R=B(e,x),F=S(e),E;try{E=await ct({input:u,onwarn(m,y){m.code==="UNRESOLVED_IMPORT"||m.code==="CIRCULAR_DEPENDENCY"||m.code==="EMPTY_BUNDLE"||y(m)},plugins:[v,lt({tsconfig:l,compilerOptions:{...d?M.parseJsonConfigFileContent({compilerOptions:d},M.sys,"./").options:{},declaration:!0,noEmit:!1,emitDeclarationOnly:!0,noEmitOnError:!0,checkJs:!1,declarationMap:!1,skipLibCheck:!0,preserveSymlinks:!1,target:M.ScriptTarget.ESNext}})],external:m=>R.some(y=>y.test(m))&&!F.some(y=>y.test(m))});let{output:f}=await E.generate({format:n});if(!f[0]?.code)throw new Error("Generated bundle is empty");return f[0].code}catch(f){throw new Error(`DTS bundling failed: ${h(f)}`)}finally{E&&await E.close()}}function gt(t,r){let n=g.resolve(t),e=g.resolve(n,r);if(!b.existsSync(n))throw new Error(`Root directory does not exist: ${n}`);if(!b.existsSync(e))throw new Error(`Entry file does not exist: ${e}`);if(!e.endsWith(".ts"))throw new Error(`Entry file must be a TypeScript file (.ts): ${e}`);if(g.relative(n,e).startsWith(".."))throw new Error(`Entry file must be within rootDir: ${e}`);return{absoluteRootDir:n,absoluteEntry:e}}function dt(t){return t.split("/").pop()?.split(".").slice(0,-1).join(".")||""}function O(t){let r=[],n=new Set;function e(o,s){if(n.has(o)){let i=L();r.push({name:`${o}_${i}`,path:s})}else r.push({name:o,path:s}),n.add(o)}if(Array.isArray(t))for(let o of t){let s=dt(o);e(s,o)}else Object.entries(t).forEach(([o,s])=>{e(o,s)});return r}function K(t,r){return`[dir]/${t}${r}`}function Q(t,r){return{name:"bunup:external-plugin",setup(n){n.onResolve({filter:/.*/},e=>{let o=e.path;return t.some(i=>i.test(o))&&!r.some(i=>i.test(o))?{path:o,external:!0}:null})}}}async function T(t,r){if(!t.entry||t.entry.length===0||!t.outDir){a.cli("Nothing to build. Please make sure you have provided a proper bunup configuration or cli arguments.");return}let n=performance.now();a.cli("Build started");let e=D(r),o=e?.type,s=B(t,e),i=S(t),u=[Q(s,i)],c=O(t.entry),l=t.format.flatMap(p=>c.map(d=>ht(t,r,d,p,o,u)));try{await Promise.all(l);let p=performance.now()-n,d=k(p);a.cli(`\u26A1 Build success in ${d}`)}catch{a.error("Build process encountered errors."),process.exit(1)}if(t.dts){let p=performance.now();a.progress("DTS","Bundling types");let d=t.format.filter(x=>!(x==="iife"&&!$(o)&&t.format.includes("cjs"))),v=t.dts===!0?c:O(t.dts.entry);try{let x=d.flatMap(E=>v.map(f=>yt(t,r,f,E,o)));await Promise.all(x);let R=performance.now()-p,F=k(R);a.progress("DTS",`Bundled types in ${F}`)}catch{a.error("DTS build process encountered errors.")}}}async function yt(t,r,n,e,o){let s=await q(r,n.path,e,t),i=J(e,o),u=`${t.outDir}/${n.name}${i}`,c=`${r}/${u}`;await Bun.write(c,s),a.progress(j("DTS",t.name),u)}async function ht(t,r,n,e,o,s){let i=_(e,o),u=V(t,r),c=await Bun.build({...u,entrypoints:[`${r}/${n.path}`],format:e,naming:{entry:K(n.name,i)},splitting:H(t.splitting,e),plugins:s,throw:!1});if(!c.success)throw c.logs.forEach(l=>{l.level==="error"?a.error(l.message):l.level==="warning"?a.warn(l.message):l.level==="info"&&a.info(l.message)}),new Error(`Build failed for ${n} (${e})`);a.progress(j(e,t.name),`${t.outDir}/${n.name}${i}`)}var xt={n:"name",f:"format",o:"outDir",m:"minify",w:"watch",d:"dts",e:"external",t:"target",mw:"minifyWhitespace",mi:"minifyIdentifiers",ms:"minifySyntax",c:"clean",s:"splitting",ne:"noExternal"},Et={name:(t,r)=>{r.name=t},format:(t,r)=>{r.format=t.split(",")},outDir:(t,r)=>{r.outDir=t},minify:(t,r)=>{r.minify=!!t},watch:(t,r)=>{r.watch=!!t},dts:(t,r)=>{r.dts=!!t},external:(t,r)=>{r.external=t.split(",")},minifyWhitespace:(t,r)=>{r.minifyWhitespace=!!t},minifyIdentifiers:(t,r)=>{r.minifyIdentifiers=!!t},minifySyntax:(t,r)=>{r.minifySyntax=!!t},target:(t,r)=>{r.target=t},clean:(t,r)=>{r.clean=!!t},splitting:(t,r)=>{r.splitting=!!t},noExternal:(t,r)=>{r.noExternal=t.split(",")}};function Z(t){let r={};for(let n=0;n<t.length;n++){let e=t[n];if(e.startsWith("--")||e.startsWith("-")){let o=e.startsWith("-")&&!e.startsWith("--"),s=o?e.slice(1):e.slice(2),i=o?xt[s]:s,u=Et[i];if(!u){a.error(`Unknown option: ${s}`);continue}let c=t[n+1],l=c&&!c.startsWith("-")?c:!0;u(l,r),typeof l=="string"&&n++}else r.entry||(r.entry=[]),Array.isArray(r.entry)&&r.entry.push(e)}return r}typeof Bun>"u"&&(a.error(`Bunup requires Bun to run.
|
|
5
|
+
To install Bun, visit https://bun.sh/docs/installation`),process.exit(1));import N from"path";import wt from"chokidar";async function tt(t,r){let n=new Set;O(t.entry).forEach(c=>{let l=N.resolve(r,c.path),p=N.dirname(l);n.add(p)});let o=wt.watch(Array.from(n),{persistent:!0,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50},atomic:!0,ignorePermissionErrors:!0,ignored:[/[\\/]\.git[\\/]/,/[\\/]node_modules[\\/]/,t.outDir]}),s=null,i=!1,u=async c=>{if(!i){i=!0;try{await T({...t,entry:[c],clean:!1},r)}catch(l){a.error(`Build failed: ${l}`)}finally{i=!1}}};o.on("change",c=>{let l=N.relative(r,c);a.cli(`File changed: ${l}`),s&&clearTimeout(s),s=setTimeout(()=>u(l),300)}),o.on("error",c=>{a.error(`Watcher error: ${c}`)})}async function bt(t=Bun.argv.slice(2)){let r=Z(t),n=await X(process.cwd()),e=process.cwd();if(r.watch&&(a.cli("Starting watch mode"),a.cli("Watching for file changes")),n.length===0){let o={...w,...r};o.clean&&et(e,o.outDir),await rt(o,e)}else{for(let{options:o,rootDir:s}of n)o.clean&&et(s,o.outDir);await Promise.all(n.map(async({options:o,rootDir:s})=>{let i={...w,...o,...r};await rt(i,s)}))}r.watch||process.exit(0)}async function rt(t,r){t.watch?await tt(t,r):await T(t,r)}function et(t,r){let n=Pt.join(t,r);if(I.existsSync(n))try{I.rmSync(n,{recursive:!0,force:!0})}catch(e){a.error(`Failed to clean output directory: ${e}`)}I.mkdirSync(n,{recursive:!0})}bt().catch(t=>{W(t),process.exit(1)});export{bt as main};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bunup",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.12",
|
|
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.11",
|
|
22
22
|
"eslint": "^8.57.0",
|
|
23
23
|
"husky": "^9.1.6",
|
|
24
24
|
"prettier": "^3.2.5",
|
package/build/dtsWorker.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _os = require('os');var _path = require('path'); var _path2 = _interopRequireDefault(_path);var _worker_threads = require('worker_threads');var l=e=>e instanceof Error?e.message:String(e);var i={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(e,r,s){let o=" ".repeat(Math.max(0,this.MAX_LABEL_LENGTH-r.length));return`\x1B[38;5;${e}m[${r}]\x1B[0m ${o}${s}`},cli(e){let r=this.labels.cli;console.log(this.formatMessage(this.colors.cli,r,e))},info(e){let r=this.labels.info;console.log(this.formatMessage(this.colors.info,r,e))},warn(e){let r=this.labels.warn;console.warn(this.formatMessage(this.colors.warn,r,e))},error(e){let r=this.labels.error;console.error(this.formatMessage(this.colors.error,r,e))},progress(e,r){let s=String(e),o=this.colors.default;for(let[a,n]of Object.entries(this.colors.progress))if(s.includes(a)){o=n;break}console.log(this.formatMessage(o,s,r))}};function g(e,r){return`${r?`${r.replace(/-/g,"_")}_`:""}${e}`.toUpperCase()}var u=class{constructor(r=_os.cpus.call(void 0, ).length||4){this.workers=[];this.queue=[];this.busyWorkers=new Set;this.isShuttingDown=!1;this.maxWorkers=r}async process(r){if(this.isShuttingDown)throw new Error("Worker pool is shutting down");return new Promise((s,o)=>{this.queue.push({task:r,resolve:s,reject:o}),this.processQueue()})}processQueue(){if(!(this.queue.length===0||this.isShuttingDown))if(this.workers.length<this.maxWorkers){let r=new (0, _worker_threads.Worker)(_path2.default.join(__dirname,"./dtsWorker.js"));this.workers.push(r),this.assignTaskToWorker(r)}else{let r=this.workers.find(s=>!this.busyWorkers.has(s));r&&this.assignTaskToWorker(r)}}assignTaskToWorker(r){let s=this.queue.shift();if(!s)return;let{task:o,resolve:a,reject:n}=s;this.busyWorkers.add(r);let c=()=>{this.busyWorkers.delete(r),this.isShuttingDown&&this.busyWorkers.size===0?this.terminateAllWorkers():this.processQueue()};r.on("message",t=>{t.success?(i.progress(g("DTS",t.name),t.outputRelativePath),a()):(i.error(`DTS generation failed: ${t.error}`),n(new Error(t.error))),c()}),r.on("error",t=>{let h=l(t);i.error(`Worker error: ${h}`),n(t),c()}),r.postMessage(o)}terminateAllWorkers(){this.workers.forEach(r=>{try{r.terminate()}catch(s){i.error(`Error terminating worker: ${l(s)}`)}}),this.workers=[],this.busyWorkers.clear()}async cleanup(){if(this.isShuttingDown=!0,this.busyWorkers.size===0){this.terminateAllWorkers();return}return new Promise(r=>{let s=setInterval(()=>{this.busyWorkers.size===0&&(clearInterval(s),this.terminateAllWorkers(),r())},100);setTimeout(()=>{clearInterval(s),this.terminateAllWorkers(),r()},5e3)})}};exports.DtsWorker = u;
|