@visulima/vis 4.1.15 → 4.1.17

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.
@@ -1,4 +1,4 @@
1
- import{createRequire as At}from"node:module";import{w as It,$ as Wt,e as kt,j,P as b,q as x,J as N,b as L}from"../packem_shared/index.server-sXNQYpsl.js";import{u as ut,c as B,e as Mt}from"../packem_shared/vis-user-error-C_S0WF27.js";import{N as R,a as _}from"../packem_shared/Table-DyORjLji-CC9cYgCG.js";import{b as Ct}from"../packem_shared/package-version-BomcrCSe.js";let Ot;const xt=t=>(Ot??=At(import.meta.url))(t),E=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Et=t=>{if(typeof E<"u"&&E.versions&&E.versions.node){const[e,n]=E.versions.node.split(".").map(Number);if(e>22||e===22&&n>=3||e===20&&n>=16)return E.getBuiltinModule(t)}return xt(t)},{createRequire:Bt}=Et("node:module"),jt=/^#?([a-f\d]{3}|[a-f\d]{6})$/i,z=t=>{let[,e]=jt.exec(t)??[];const n=e?e.length:0;if(n===3){const s=e.charAt(0),o=e.charAt(1),i=e.charAt(2);e=s+s+o+o+i+i}else if(n!==6)return globalThis.process?.env?.NODE_ENV!=="production"&&console.warn(`[@visulima/colorize] Invalid hex color "${t}"; expected a 3- or 6-digit hex string (e.g. "#96C" or "#E0115F"). Falling back to black.`),[0,0,0];const r=Number.parseInt(e,16);return[r>>16&255,r>>8&255,r&255]},dt=(t,e,n)=>t===e&&e===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/51)+6*Math.round(e/51)+Math.round(n/51),H=t=>{let e,n,r;if(t<8)return 30+t;if(t<16)return 90+(t-8);if(t>=232)e=n=r=((t-232)*10+8)/255;else{t-=16;const i=t%36;e=Math.floor(t/36)/5,n=Math.floor(i/6)/5,r=i%6/5}const s=Math.max(e,n,r)*2;if(s===0)return 30;const o=30+(Math.round(r)<<2|Math.round(n)<<1|Math.round(e));return s===2?o+60:o},Z=(t,e,n)=>H(dt(t,e,n));function Rt({onlyFirst:t=!1}={}){const e="(?:\\u001B\\][^\\u0007\\u001B\\u009C]*(?:\\u0007|\\u001B\\u005C|\\u009C))|[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]";return new RegExp(e,t?void 0:"g")}const S=(t,e,n)=>e>t?e:Math.min(t,n),m=39,f=49,X=10,tt={close:"",open:""},ht=t=>{const e=t>0?(l,d)=>({close:`\x1B[${String(d)}m`,open:`\x1B[${String(l)}m`}):()=>tt,n=l=>(d,p,g)=>l(dt(Number(d),Number(p),Number(g))),r=l=>d=>{const[p,g,w]=z(d);return l(p,g,w)};let s=l=>e(`38;5;${String(l)}`,m),o=l=>e(`48;5;${String(l)}`,f),i=(l,d,p)=>e(`38;2;${String(l)};${String(d)};${String(p)}`,m),a=(l,d,p)=>e(`48;2;${String(l)};${String(d)};${String(p)}`,f);t===1?(s=l=>e(H(Number(l)),m),o=l=>e(H(Number(l))+X,f),i=(l,d,p)=>e(Z(Number(l),Number(d),Number(p)),m),a=(l,d,p)=>e(Z(Number(l),Number(d),Number(p))+X,f)):t===2&&(i=n(s),a=n(o));const u={bold:e(1,22),dim:e(2,22),hidden:e(8,28),inverse:e(7,27),italic:e(3,23),overline:e(53,55),reset:e(0,0),strike:e(9,29),strikethrough:e(9,29),underline:e(4,24),underlineCurly:e("4:3",24),underlineDashed:e("4:5",24),underlineDotted:e("4:4",24),underlineDouble:e("4:2",24),visible:tt},c={bgBlack:e(40,f),bgBlackBright:e(100,f),bgBlue:e(44,f),bgBlueBright:e(104,f),bgCyan:e(46,f),bgCyanBright:e(106,f),bgGray:e(100,f),bgGreen:e(42,f),bgGreenBright:e(102,f),bgGrey:e(100,f),bgMagenta:e(45,f),bgMagentaBright:e(105,f),bgRed:e(41,f),bgRedBright:e(101,f),bgWhite:e(47,f),bgWhiteBright:e(107,f),bgYellow:e(43,f),bgYellowBright:e(103,f),black:e(30,m),blackBright:e(90,m),blue:e(34,m),blueBright:e(94,m),cyan:e(36,m),cyanBright:e(96,m),gray:e(90,m),green:e(32,m),greenBright:e(92,m),grey:e(90,m),magenta:e(35,m),magentaBright:e(95,m),red:e(31,m),redBright:e(91,m),white:e(37,m),whiteBright:e(97,m),yellow:e(33,m),yellowBright:e(93,m)},h={bg:l=>o(S(l,0,255)),bgHex:r(a),bgRgb:(l,d,p)=>a(S(l,0,255),S(d,0,255),S(p,0,255)),fg:l=>s(S(l,0,255)),hex:r(i),rgb:(l,d,p)=>i(S(l,0,255),S(d,0,255),S(p,0,255))};return{baseColors:c,baseStyles:u,styleMethods:h}},pt=It();Wt();ht(pt);const _t=(t,e,n)=>{if(e==="")return t;let r=t.indexOf(e);if(r<0)return t;const s=e.length;let o=0,i="";for(;~r;)i+=t.slice(o,r)+n,o=r+s,r=t.indexOf(e,o);return i+t.slice(o)},Pt=(t,e,n)=>{if(t==null||t==="")return"";let r;if(t.raw===void 0?r=String(t):r=String.raw(t,...e),r.includes("\x1B"))for(let s=n;s;s=s.props)r=_t(r,s.close,s.open);return r.includes(`
1
+ import{createRequire as At}from"node:module";import{w as It,$ as Wt,e as kt,j,P as b,q as x,J as N,b as L}from"../packem_shared/index.server-sXNQYpsl.js";import{u as ut,c as B,e as Mt}from"../packem_shared/vis-user-error-Y7E_pUlk.js";import{N as R,a as _}from"../packem_shared/Table-DyORjLji-CC9cYgCG.js";import{b as Ct}from"../packem_shared/package-version-Bh_b5R5e.js";let Ot;const xt=t=>(Ot??=At(import.meta.url))(t),E=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Et=t=>{if(typeof E<"u"&&E.versions&&E.versions.node){const[e,n]=E.versions.node.split(".").map(Number);if(e>22||e===22&&n>=3||e===20&&n>=16)return E.getBuiltinModule(t)}return xt(t)},{createRequire:Bt}=Et("node:module"),jt=/^#?([a-f\d]{3}|[a-f\d]{6})$/i,z=t=>{let[,e]=jt.exec(t)??[];const n=e?e.length:0;if(n===3){const s=e.charAt(0),o=e.charAt(1),i=e.charAt(2);e=s+s+o+o+i+i}else if(n!==6)return globalThis.process?.env?.NODE_ENV!=="production"&&console.warn(`[@visulima/colorize] Invalid hex color "${t}"; expected a 3- or 6-digit hex string (e.g. "#96C" or "#E0115F"). Falling back to black.`),[0,0,0];const r=Number.parseInt(e,16);return[r>>16&255,r>>8&255,r&255]},dt=(t,e,n)=>t===e&&e===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/51)+6*Math.round(e/51)+Math.round(n/51),H=t=>{let e,n,r;if(t<8)return 30+t;if(t<16)return 90+(t-8);if(t>=232)e=n=r=((t-232)*10+8)/255;else{t-=16;const i=t%36;e=Math.floor(t/36)/5,n=Math.floor(i/6)/5,r=i%6/5}const s=Math.max(e,n,r)*2;if(s===0)return 30;const o=30+(Math.round(r)<<2|Math.round(n)<<1|Math.round(e));return s===2?o+60:o},Z=(t,e,n)=>H(dt(t,e,n));function Rt({onlyFirst:t=!1}={}){const e="(?:\\u001B\\][^\\u0007\\u001B\\u009C]*(?:\\u0007|\\u001B\\u005C|\\u009C))|[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]";return new RegExp(e,t?void 0:"g")}const S=(t,e,n)=>e>t?e:Math.min(t,n),m=39,f=49,X=10,tt={close:"",open:""},ht=t=>{const e=t>0?(l,d)=>({close:`\x1B[${String(d)}m`,open:`\x1B[${String(l)}m`}):()=>tt,n=l=>(d,p,g)=>l(dt(Number(d),Number(p),Number(g))),r=l=>d=>{const[p,g,w]=z(d);return l(p,g,w)};let s=l=>e(`38;5;${String(l)}`,m),o=l=>e(`48;5;${String(l)}`,f),i=(l,d,p)=>e(`38;2;${String(l)};${String(d)};${String(p)}`,m),a=(l,d,p)=>e(`48;2;${String(l)};${String(d)};${String(p)}`,f);t===1?(s=l=>e(H(Number(l)),m),o=l=>e(H(Number(l))+X,f),i=(l,d,p)=>e(Z(Number(l),Number(d),Number(p)),m),a=(l,d,p)=>e(Z(Number(l),Number(d),Number(p))+X,f)):t===2&&(i=n(s),a=n(o));const u={bold:e(1,22),dim:e(2,22),hidden:e(8,28),inverse:e(7,27),italic:e(3,23),overline:e(53,55),reset:e(0,0),strike:e(9,29),strikethrough:e(9,29),underline:e(4,24),underlineCurly:e("4:3",24),underlineDashed:e("4:5",24),underlineDotted:e("4:4",24),underlineDouble:e("4:2",24),visible:tt},c={bgBlack:e(40,f),bgBlackBright:e(100,f),bgBlue:e(44,f),bgBlueBright:e(104,f),bgCyan:e(46,f),bgCyanBright:e(106,f),bgGray:e(100,f),bgGreen:e(42,f),bgGreenBright:e(102,f),bgGrey:e(100,f),bgMagenta:e(45,f),bgMagentaBright:e(105,f),bgRed:e(41,f),bgRedBright:e(101,f),bgWhite:e(47,f),bgWhiteBright:e(107,f),bgYellow:e(43,f),bgYellowBright:e(103,f),black:e(30,m),blackBright:e(90,m),blue:e(34,m),blueBright:e(94,m),cyan:e(36,m),cyanBright:e(96,m),gray:e(90,m),green:e(32,m),greenBright:e(92,m),grey:e(90,m),magenta:e(35,m),magentaBright:e(95,m),red:e(31,m),redBright:e(91,m),white:e(37,m),whiteBright:e(97,m),yellow:e(33,m),yellowBright:e(93,m)},h={bg:l=>o(S(l,0,255)),bgHex:r(a),bgRgb:(l,d,p)=>a(S(l,0,255),S(d,0,255),S(p,0,255)),fg:l=>s(S(l,0,255)),hex:r(i),rgb:(l,d,p)=>i(S(l,0,255),S(d,0,255),S(p,0,255))};return{baseColors:c,baseStyles:u,styleMethods:h}},pt=It();Wt();ht(pt);const _t=(t,e,n)=>{if(e==="")return t;let r=t.indexOf(e);if(r<0)return t;const s=e.length;let o=0,i="";for(;~r;)i+=t.slice(o,r)+n,o=r+s,r=t.indexOf(e,o);return i+t.slice(o)},Pt=(t,e,n)=>{if(t==null||t==="")return"";let r;if(t.raw===void 0?r=String(t):r=String.raw(t,...e),r.includes("\x1B"))for(let s=n;s;s=s.props)r=_t(r,s.close,s.open);return r.includes(`
2
2
  `)&&(r=r.replace(/(\r*\n)/g,`${n.closeStack}$1${n.openStack}`)),n.openStack+r+n.closeStack},Tt=function(t){const e=t?.level??pt,{baseColors:n,baseStyles:r,styleMethods:s}=ht(e),o={};let i=null;const a=({props:c},{close:h,open:l})=>{const d=(c?.openStack??"")+l,p=h+(c?.closeStack??""),g=(w,...y)=>Pt(w,y,g.props);return Object.setPrototypeOf(g,i),g.props={close:h,closeStack:p,open:l,openStack:d,props:c},g.open=d,g.close=p,g},u=c=>String(c);u.strip=c=>c.replaceAll(Rt(),"");for(const c in n)o[c]={get(){const h=a(this,n[c]);return Object.defineProperty(this,c,{value:h}),h}};for(const c in r)o[c]={get(){const h=a(this,r[c]);return Object.defineProperty(this,c,{value:h}),h}};for(const c in s)o[c]={get(){return(...h)=>a(this,s[c](...h))}};return o.ansi256=o.fg,o.bgAnsi256=o.bg,i=Object.defineProperties({},o),Object.setPrototypeOf(u,i),u},Lt=t=>(e,...n)=>{if(!Array.isArray(e)||!Array.isArray(e.raw))throw new TypeError("A tagged template literal must be provided");const r=[e.raw[0]];for(let s=1;s<e.raw.length;s+=1)r.push(String(n[s-1]).replaceAll(/[{}\\]/g,String.raw`\$&`),String(e.raw[s]));return t(r.join(""))},Ft=new Map([["0","\0"],["\\","\\"],["a","\x07"],["b","\b"],["e","\x1B"],["f","\f"],["n",`
3
3
  `],["r","\r"],["t"," "],["v","\v"]]),mt=t=>{const e=t.startsWith("u"),n=t[1]==="{";return e&&!n&&t.length===5||t.startsWith("x")&&t.length===3?String.fromCodePoint(Number.parseInt(t.slice(1),16)):e&&n?String.fromCodePoint(Number.parseInt(t.slice(2,-1),16)):Ft.get(t)??t},Dt=/\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.)|\{(~)?(#?[\w:]+(?:\([^)]*\))?(?:\.#?[\w:]+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n))|(\})|((?:.|[\r\n\f])+?)/gi,et=/(?:^|\.)(?:(\w+)(?:\(([^)]*)\))?|#(?=[:a-f\d]{2,})([a-f\d]{6})?(?::([a-f\d]{6}))?)/gi,Vt=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,qt=/\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.)|([^\\])/gi,Ut=/\s*,\s*/,Gt=(t,e)=>{const n=[],r=e.trim().split(Ut);let s;for(const o of r){const i=Number(o);if(!Number.isNaN(i))n.push(i);else if(s=Vt.exec(o))n.push(s[2].replaceAll(qt,(a,u,c)=>u?mt(u):c));else throw new Error(`Invalid template style argument: ${o} (in style '${t}')`)}return n},zt=t=>{et.lastIndex=0;const e=[];let n;for(;(n=et.exec(t))!==null;){const r=n[1];n[2]?e.push([r,...Gt(r,n[2])]):n[3]||n[4]?(n[3]&&e.push(["rgb",...z(n[3])]),n[4]&&e.push(["bgRgb",...z(n[4])])):e.push([r])}return e},nt=(t,e)=>{const n={};for(const s of e)for(const o of s.styles)n[o[0]]=s.inverse?void 0:o.slice(1);let r=t;for(const[s,o]of Object.entries(n))if(Array.isArray(o)){if(!(s in r))throw new Error(`Unknown style: ${s}`);r=o.length>0?r[s](...o):r[s]}return r},Ht=t=>e=>{const n=[],r=[];let s=[];if(e.replaceAll(Dt,(o,i,a,u,c,h)=>{if(i)s.push(mt(i));else if(u){const l=s.join("");s=[],r.push(n.length===0?l:nt(t,n)(l)),n.push({inverse:a,styles:zt(u)})}else if(c){if(n.length===0)throw new Error("Found extraneous } in template literal");r.push(nt(t,n)(s.join(""))),s=[],n.pop()}else s.push(h)}),r.push(s.join("")),n.length>0)throw new Error(`template literal is missing ${String(n.length)} closing bracket${n.length===1?"":"s"} (\`}\`)`);return r.join("")},Yt=new Tt,Jt=Ht(Yt),Kt=Lt(Jt);let Qt;const Zt=t=>(Qt??=Bt(import.meta.url))(t),O=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:A,F=t=>{if(typeof O<"u"&&O.versions&&O.versions.node){const[e,n]=O.versions.node.split(".").map(Number);if(e>22||e===22&&n>=3||e===20&&n>=16)return O.getBuiltinModule(t)}return Zt(t)},A=O,{execFileSync:Xt}=F("node:child_process"),W=F("node:fs"),te=F("node:tty"),ee=F("node:os"),ne=[161,161,164,164,167,168,170,170,173,174,176,180,182,186,188,191,198,198,208,208,215,216,222,225,230,230,232,234,236,237,240,240,242,243,247,250,252,252,254,254,257,257,273,273,275,275,283,283,294,295,299,299,305,307,312,312,319,322,324,324,328,331,333,333,338,339,358,359,363,363,462,462,464,464,466,466,468,468,470,470,472,472,474,474,476,476,593,593,609,609,708,708,711,711,713,715,717,717,720,720,728,731,733,733,735,735,768,879,913,929,931,937,945,961,963,969,1025,1025,1040,1103,1105,1105,8208,8208,8211,8214,8216,8217,8220,8221,8224,8226,8228,8231,8240,8240,8242,8243,8245,8245,8251,8251,8254,8254,8308,8308,8319,8319,8321,8324,8364,8364,8451,8451,8453,8453,8457,8457,8467,8467,8470,8470,8481,8482,8486,8486,8491,8491,8531,8532,8539,8542,8544,8555,8560,8569,8585,8585,8592,8601,8632,8633,8658,8658,8660,8660,8679,8679,8704,8704,8706,8707,8711,8712,8715,8715,8719,8719,8721,8721,8725,8725,8730,8730,8733,8736,8739,8739,8741,8741,8743,8748,8750,8750,8756,8759,8764,8765,8776,8776,8780,8780,8786,8786,8800,8801,8804,8807,8810,8811,8814,8815,8834,8835,8838,8839,8853,8853,8857,8857,8869,8869,8895,8895,8978,8978,9312,9449,9451,9547,9552,9587,9600,9615,9618,9621,9632,9633,9635,9641,9650,9651,9654,9655,9660,9661,9664,9665,9670,9672,9675,9675,9678,9681,9698,9701,9711,9711,9733,9734,9737,9737,9742,9743,9756,9756,9758,9758,9792,9792,9794,9794,9824,9825,9827,9829,9831,9834,9836,9837,9839,9839,9886,9887,9919,9919,9926,9933,9935,9939,9941,9953,9955,9955,9960,9961,9963,9969,9972,9972,9974,9977,9979,9980,9982,9983,10045,10045,10102,10111,11094,11097,12872,12879,57344,63743,65024,65039,65533,65533,127232,127242,127248,127277,127280,127337,127344,127373,127375,127376,127387,127404,917760,917999,983040,1048573,1048576,1114109],re=12288,oe=65510,ie=[12288,12288,65281,65376,65504,65510],se=8361,ae=65518,le=[8361,8361,65377,65470,65474,65479,65482,65487,65490,65495,65498,65500,65512,65518],ce=32,ue=10630,de=[32,126,162,163,165,166,172,172,175,175,10214,10221,10629,10630],he=4352,pe=262141,ft=[4352,4447,8986,8987,9001,9002,9193,9196,9200,9200,9203,9203,9725,9726,9748,9749,9776,9783,9800,9811,9855,9855,9866,9871,9875,9875,9889,9889,9898,9899,9917,9918,9924,9925,9934,9934,9940,9940,9962,9962,9970,9971,9973,9973,9978,9978,9981,9981,9989,9989,9994,9995,10024,10024,10060,10060,10062,10062,10067,10069,10071,10071,10133,10135,10160,10160,10175,10175,11035,11036,11088,11088,11093,11093,11904,11929,11931,12019,12032,12245,12272,12287,12289,12350,12353,12438,12441,12543,12549,12591,12593,12686,12688,12773,12783,12830,12832,12871,12880,42124,42128,42182,43360,43388,44032,55203,63744,64255,65040,65049,65072,65106,65108,65126,65128,65131,94176,94180,94192,94198,94208,101589,101631,101662,101760,101874,110576,110579,110581,110587,110589,110590,110592,110882,110898,110898,110928,110930,110933,110933,110948,110951,110960,111355,119552,119638,119648,119670,126980,126980,127183,127183,127374,127374,127377,127386,127488,127490,127504,127547,127552,127560,127568,127569,127584,127589,127744,127776,127789,127797,127799,127868,127870,127891,127904,127946,127951,127955,127968,127984,127988,127988,127992,128062,128064,128064,128066,128252,128255,128317,128331,128334,128336,128359,128378,128378,128405,128406,128420,128420,128507,128591,128640,128709,128716,128716,128720,128722,128725,128728,128732,128735,128747,128748,128756,128764,128992,129003,129008,129008,129292,129338,129340,129349,129351,129535,129648,129660,129664,129674,129678,129734,129736,129736,129741,129756,129759,129770,129775,129784,131072,196605,196608,262141],k=(t,e)=>{let n=0,r=Math.floor(t.length/2)-1;for(;n<=r;){const s=Math.floor((n+r)/2),o=s*2;if(e<t[o])r=s-1;else if(e>t[o+1])n=s+1;else return!0}return!1},rt=19968,[me,fe]=ge(ft);function ge(t){let e=t[0],n=t[1];for(let r=0;r<t.length;r+=2){const s=t[r],o=t[r+1];if(rt>=s&&rt<=o)return[s,o];o-s>n-e&&(e=s,n=o)}return[e,n]}const we=t=>t<161||t>1114109?!1:k(ne,t),be=t=>t<re||t>oe?!1:k(ie,t),ye=t=>t<se||t>ae?!1:k(le,t),$e=t=>t<ce||t>ue?!1:k(de,t),Ne=t=>t>=me&&t<=fe?!0:t<he||t>pe?!1:k(ft,t);function ve(t){return we(t)?"ambiguous":be(t)?"fullwidth":ye(t)?"halfwidth":$e(t)?"narrow":Ne(t)?"wide":"neutral"}function Se(t){if(!Number.isSafeInteger(t))throw new TypeError(`Expected a code point, got \`${typeof t}\`.`)}function gt(t){return Se(t),ve(t)}const ot=new Map,Ae=t=>[t.ambiguousIsNarrow?1:0,t.control,t.fullWidth,t.regular,t.wide].join("|"),Oe=t=>{const e=Ae(t.width);let n=ot.get(e);return n||(n=new Map,ot.set(e,n)),n},M=new RegExp(ut.source,"y"),U=new RegExp(Mt.source,"uy"),C=/(?:[\u0020-\u007E\u00A0-\u00FF](?!\uFE0F)){1,1000}/y,wt=t=>t>=32&&t<=126?"latin":t===8203||t===8204||t===8205||t===8288?"zero":t<=31||t>=127&&t<=159?"control":t>=160&&t<=255||t>=9472&&t<=9599?"latin":t>=4352&&t<=4607||t>=11904&&t<=40959||t>=44032&&t<=55215||t>=63744&&t<=64255||t>=65280&&t<=65519&&!(t>=65377&&t<=65439)||t>=12352&&t<=12543?"wide":t===8230?"latin":"other",xe=(t,e)=>{const n=Oe(e),r=Math.floor(t/65536),s=t%65536;let o=n.get(r);if(o||(o=new Map,n.set(r,o)),o.has(s))return o.get(s);let i;switch(wt(t)){case"control":{i=e.width.control;break}case"latin":{i=e.width.regular;break}case"wide":{i=e.width.wide;break}case"zero":{i=0;break}default:switch(gt(t)){case"ambiguous":{i=e.width.ambiguousIsNarrow?e.width.regular:e.width.wide;break}case"fullwidth":{i=e.width.fullWidth;break}case"wide":{i=e.width.wide;break}default:i=e.width.regular}}return o.set(s,i),i},Ee=t=>t>=768&&t<=879||t>=6832&&t<=6911||t>=7616&&t<=7679||t>=8400&&t<=8447||t>=65056&&t<=65071||t>=917760&&t<=917999||t>=65024&&t<=65039||t>=3633&&t<=3642||t>=3655&&t<=3662||t>=3761&&t<=3769||t>=3771&&t<=3772||t>=3784&&t<=3789||t>=2304&&t<=2307||t>=2362&&t<=2383||t>=2385&&t<=2391||t>=2402&&t<=2403||t>=2433&&t<=2435||t>=2492&&t<=2500||t>=2509&&t<=2509||t>=2561&&t<=2563||t>=2620&&t<=2637||t>=1611&&t<=1631||t>=1648&&t<=1648||t>=1750&&t<=1773||t>=2276&&t<=2302||t>=1425&&t<=1469||t>=1471&&t<=1471||t>=1473&&t<=1474||t>=1476&&t<=1477||t>=1479&&t<=1479||t>=3893&&t<=3893||t>=3895&&t<=3895||t>=3897&&t<=3897||t>=3953&&t<=3966||t>=3968&&t<=3972||t>=3974&&t<=3975?!0:t>=768&&t<=777||t>=803&&t<=803,Y=(t,e={})=>{if(!t||t.length===0)return{ellipsed:!1,index:0,truncated:!1,width:0};const n={truncation:{countAnsiEscapeCodes:e.countAnsiEscapeCodes??!1,ellipsis:e.ellipsis??"",ellipsisWidth:e.ellipsisWidth??(e.ellipsis?Y(e.ellipsis,{...e,ellipsis:"",ellipsisWidth:0,limit:Number.POSITIVE_INFINITY}).width:0),limit:e.limit??Number.POSITIVE_INFINITY},width:{ambiguousIsNarrow:e.ambiguousIsNarrow??!1,ansi:e.ansiWidth??0,control:e.controlWidth??0,emoji:e.emojiWidth??2,fullWidth:e.fullWidth??2,halfWidth:e.halfWidth??1,regular:e.regularWidth??1,tab:e.tabWidth??8,wide:e.wideWidth??2}},r=Math.max(0,n.truncation.limit-n.truncation.ellipsisWidth),{length:s}=t,o=s>1e4;let i=0,a=0,u=s,c=!1;const h=t.includes("\x1B")||t.includes("›");for(;i<s;){if(h&&(t[i]==="\x1B"||t[i]==="›")){if(t.startsWith("\x1B]8;;",i)){const y="\x1B]8;;\x07",v=y.length,D=t.indexOf("\x07",i+5);if(D!==-1){const V=t.indexOf(y,D+1);if(V!==-1){const vt=V+v,St=t.slice(D+1,V).replace(ut,""),Q=Y(St,{ambiguousIsNarrow:n.width.ambiguousIsNarrow,ansiWidth:n.width.ansi,controlWidth:n.width.control,countAnsiEscapeCodes:!1,ellipsis:n.truncation.ellipsis,ellipsisWidth:n.truncation.ellipsisWidth,emojiWidth:n.width.emoji,fullWidth:n.width.fullWidth,halfWidth:n.width.halfWidth,limit:Math.max(0,r-a),regularWidth:n.width.regular,tabWidth:n.width.tab,wideWidth:n.width.wide}),q=Q.width;if(Q.truncated)c=!0,u=Math.min(u,i);else if(a+q>r&&(u=Math.min(u,i),c=!0,a+q>n.truncation.limit))break;if(a+=q,i=vt,c&&a>=n.truncation.limit)break;continue}}}if(M.lastIndex=i,M.test(t)){const y=M.lastIndex-i,v=n.truncation.countAnsiEscapeCodes?y:n.width.ansi;if(a+v>r&&(u=Math.min(u,i),a+v>n.truncation.limit)){c=!0;break}a+=v,i=M.lastIndex;continue}}const p=t.codePointAt(i);if(p===8203||p===65279||p>=8288&&p<=8292){i+=1;continue}if(p===9){if(a+n.width.tab>r&&(u=Math.min(u,i),a+n.width.tab>n.truncation.limit)){c=!0;break}a+=n.width.tab,i+=1;continue}if(C.lastIndex=i,C.test(t)){const y=(C.lastIndex-i)*n.width.regular;if(a+y>r){const v=n.width.regular>0?Math.floor((r-a)/n.width.regular):0;if(u=Math.min(u,i+v),a+y>n.truncation.limit){c=!0;break}}a+=y,i=C.lastIndex;continue}if((p<=31||p>=127&&p<=159)&&(B.lastIndex=i,B.test(t))){const y=(B.lastIndex-i)*n.width.control;if(a+y>r){const v=n.width.control>0?Math.floor((r-a)/n.width.control):0;if(u=Math.min(u,i+v),a+y>n.truncation.limit){c=!0;break}}a+=y,i=B.lastIndex;continue}if(U.lastIndex=i,U.test(t)){if(a+n.width.emoji>r&&(u=Math.min(u,i),a+n.width.emoji>n.truncation.limit)){c=!0;break}a+=n.width.emoji,i=U.lastIndex;continue}const g=t.codePointAt(i)??0;if(Ee(g)){i+=g>65535?2:1;continue}let w;if(o)w=xe(g,n);else switch(wt(g)){case"control":{w=n.width.control;break}case"latin":{w=n.width.regular;break}case"wide":{w=n.width.wide;break}case"zero":{w=0;break}default:switch(gt(g)){case"ambiguous":{w=n.width.ambiguousIsNarrow?n.width.regular:n.width.wide;break}case"fullwidth":{w=n.width.fullWidth;break}case"wide":{w=n.width.wide;break}default:w=n.width.regular}}if(a+w>r&&(u=Math.min(u,i),a+w>n.truncation.limit)){c=!0;break}a+=w,i+=g>65535?2:1}let l=a,d=!1;return c&&n.truncation.limit>=n.truncation.ellipsisWidth&&(l=n.truncation.limit,d=!0),{ellipsed:d,index:c?u:s,truncated:c,width:l}},Ie=(t,e={})=>Y(t,{...e,ellipsis:"",ellipsisWidth:0,limit:Number.POSITIVE_INFINITY}).width,bt=80,yt=24,J=(t,e,{shell:n,env:r}={})=>Xt(t,e,{encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:500,shell:n,env:r}).trim(),P=(t,e)=>({columns:Number.parseInt(t,10),rows:Number.parseInt(e,10)}),$t=(t,e)=>{const{columns:n,rows:r}=P(t,e);if(!(Number.isNaN(n)||Number.isNaN(r))&&!(n===bt&&r===yt))return{columns:n,rows:r}},We=()=>{if(A.platform!=="linux")return!0;try{const t=W.readFileSync("/proc/self/stat","utf8"),e=t.lastIndexOf(") ");if(e===-1)return!1;const n=t.slice(e+2).trim().split(/\s+/),r=Number.parseInt(n[2],10),s=Number.parseInt(n[5],10);return Number.isNaN(r)||Number.isNaN(s)||s<=0?!1:r===s}catch{return!1}};function ke(){const{env:t,stdout:e,stderr:n}=A;if(e?.columns&&e?.rows)return P(e.columns,e.rows);if(n?.columns&&n?.rows)return P(n.columns,n.rows);if(t.COLUMNS&&t.LINES)return P(t.COLUMNS,t.LINES);const r={columns:bt,rows:yt};return A.platform==="win32"?G()??r:A.platform==="darwin"?it()??G()??r:it()??G()??Be()??r}const it=()=>{try{const t=A.platform==="darwin"?W.constants.O_EVTONLY|W.constants.O_NONBLOCK:W.constants.O_NONBLOCK,{columns:e,rows:n}=te.WriteStream(W.openSync("/dev/tty",t));return{columns:e,rows:n}}catch{}},G=()=>{try{const t=J("tput",["cols"],{env:{TERM:"dumb",...A.env}}),e=J("tput",["lines"],{env:{TERM:"dumb",...A.env}});if(t&&e)return $t(t,e)}catch{}},Be=()=>{try{if(!We())return;const t=J("resize",["-u"]).match(/\d+/g);if(t.length===2)return $t(t[0],t[1])}catch{}},I=new Map,Me=500,$=t=>{if(!t||t==="")return"";const e=I.get(t);if(e!==void 0)return e;let n;try{n=Kt(Object.assign([],{raw:[t]}))}catch{n=t}if(I.size>=Me){const r=I.keys().next().value;r!==void 0&&I.delete(r)}return I.set(t,n),n},T=()=>{const t=Ct().CEREBRO_TERMINAL_WIDTH;if(t===void 0)return;const e=Number.parseInt(t,10);if(!(Number.isNaN(e)||e<=0))return e};class Nt{lines;constructor(){this.lines=[]}add(e){this.lines.push(e)}toString(){return this.lines.join(ee.EOL)}header(e){this.add(j(e)),this.lines.push("")}}const Ce=t=>t!==void 0&&t>0?t:ke().columns,je=(t,e,n,r)=>{if(t.length===0||t.some(c=>c.length!==2))return;let s=0;for(const c of t){const h=c[0];if(h===void 0)continue;const l=Ie(h);l>s&&(s=l)}if(s===0)return;const o=n+r,i=s+o,a=20+o;if(i+a>e)return;const u=e-i;return[i,u]};class Re extends Nt{constructor(e){if(super(),e.header&&this.header($(e.header)),e.content){if(e.raw)if(Array.isArray(e.content)&&e.content.every(n=>typeof n=="string"))e.content.forEach(n=>{Array.isArray(n)?n.forEach(r=>{this.add($(r))}):this.add($(n))});else if(typeof e.content=="string")this.add($(e.content));else throw new TypeError("Invalid raw content, must be a string or array of strings.");else this.add(this.getContentLines(e.content));this.add("")}}getContentLines(e){if(typeof e=="string"){const n=R({showHeader:!1,style:{border:_,paddingLeft:4,paddingRight:1},terminalWidth:T(),truncateOverflow:!1,wordWrap:!0});return n.addRow([$(e)]),n.toString()}if(Array.isArray(e)&&e.every(n=>typeof n=="string"||Array.isArray(n)&&n.every(r=>typeof r=="string"))){const n=Ce(T()),r=a=>Array.isArray(a)?a.map(u=>$(u)):[$(a)],s=e.map(a=>r(a)),o=je(s,n,4,1),i=R({columnWidths:o,showHeader:!1,style:{border:_,paddingLeft:4,paddingRight:1},terminalWidth:n,truncateOverflow:!1,wordWrap:!0});return s.forEach(a=>{o!==void 0&&a.length===2?i.addRow([{content:a[0],wordWrap:!1},a[1]]):i.addRow(a)}),i.toString()}if(typeof e=="object"){const n=e;if(!n.options||!n.data)throw new Error(`Must have an "options" or "data" property
4
4
  ${JSON.stringify(e)}`);const r=R({showHeader:!1,style:{border:_,paddingLeft:4,paddingRight:1},terminalWidth:T(),truncateOverflow:!1,wordWrap:!0});return n.data.forEach(s=>{Array.isArray(s)?r.addRow(s.map(o=>$(o))):r.addRow([$(s)])}),r.toString()}throw new Error(`invalid input - 'content' must be a string, array of strings or a object:
@@ -1,42 +1,46 @@
1
- import{createRequire as We}from"node:module";import{a as H}from"../packem_shared/index-B4AjSxHU.js";import{DEFAULT_CHANGES_DIR as ae,DEFAULT_DEPENDENCY_BUMP_RULES as Xe,DEFAULT_CONFIG as Qe}from"./DEFAULT_CLEAN_KEEP.js";import{VisReleaseError as A}from"../packem_shared/VisReleaseError-DZtgcKf8.js";import{e as Ze,p as xe,b as es}from"./index2.js";import{L as as}from"../packem_shared/index-BisalDCf.js";import{BUMP_LEVELS as ye,maxBump as ue,normaliseGroup as be,bumpRank as ne}from"../release/types.js";import{isValidPackageName as ns,escapeMarkdown as ts,assertValidPackageName as rs}from"./security.js";import te from"./index.js";import{d as is,c as os}from"./index3.js";import{createShellRunner as ee}from"./shell-runner.js";let He;const ze=e=>(He??=We(import.meta.url))(e),Q=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,we=e=>{if(typeof Q<"u"&&Q.versions&&Q.versions.node){const[s,a]=Q.versions.node.split(".").map(Number);if(s>22||s===22&&a>=3||s===20&&a>=16)return Q.getBuiltinModule(e)}return ze(e)},{readdir:Ye,readFile:Je,writeFile:qe,unlink:Ke}=we("node:fs/promises"),{resolve:ge,sep:Z,join:ss}=we("node:path"),{realpathSync:ke}=we("node:fs"),cs=/^exit[\s-]prerelease\s*:\s*(.+)$/i,ls=/^(.+)@(\d+\.\d+\.\d+(?:[-+].*)?)$/,Pe=(e,s,a)=>{if(!ns(e))throw new A({code:"BUMP_FILE_INVALID",file:a,message:`Invalid replay condition "${s}": ${JSON.stringify(e)} is not a valid package name.`,packageName:e||void 0});return e},ds=(e,s)=>{if(typeof e!="string"||e.trim()==="")throw new A({code:"BUMP_FILE_INVALID",file:s,message:`Invalid replay condition: ${JSON.stringify(e)}. Expected "name@1.2.0" or "exit-prerelease:name".`});const a=e.trim(),n=cs.exec(a);if(n)return{kind:"exit-prerelease",package:Pe((n[1]??"").trim(),a,s)};const t=ls.exec(a);if(t)return{kind:"version",package:Pe((t[1]??"").trim(),a,s),version:t[2]??""};throw new A({code:"BUMP_FILE_INVALID",file:s,message:`Invalid replay condition "${a}". Expected "name@1.2.0" or "exit-prerelease:name".`})},ps=(e,s)=>{if(!Array.isArray(e))throw new A({code:"BUMP_FILE_INVALID",file:s,message:'`replay` must be a list of conditions (e.g. ["name@1.2.0", "exit-prerelease:name"]).'});return e.map(a=>ds(a,s))},me=e=>!("bumps"in e.payload)&&Array.isArray(e.payload.replay)&&e.payload.replay.length>0,$e=e=>/^\d+\.\d+\.\d+-/.test(e),gs=(e,s)=>e.package!==s.name?!1:e.kind==="version"?s.newVersion===e.version:$e(s.oldVersion)&&!$e(s.newVersion),us=(e,s)=>{const a=new Map,n=[],t=[];for(const i of e){if(!me(i))continue;const d=i.payload.replay;let c=!0;for(const o of d){const r=s.find(u=>gs(o,u));if(r){const u=a.get(r.name)??[];u.some(g=>g.id===i.id)||u.push(i),a.set(r.name,u)}else c=!1}c?n.push(i):t.push(i)}return{consumed:n,injectionsByPackage:a,retained:t}},ms=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,fs=e=>{const s=ms.exec(e);return s?{body:(s[2]??"").trim(),frontmatter:s[1]??""}:null},hs=/^(?:@[a-z0-9-]+\/)?[\w.-]+$/i,ws=214,ys=e=>e.length===0||e.length>ws||e.startsWith(".")||e.startsWith("_")||e.startsWith("-")?!1:hs.test(e),fe=e=>typeof e=="string"&&ye.includes(e),vs=/^ {0,3}(#{1,3})\s+\S/,bs=/^ {0,3}(?:```|~~~)/,ks=e=>{let s,a=0,n=!1;for(const t of e.split(/\r?\n/)){if(bs.test(t)){n=!n;continue}if(n)continue;const i=vs.exec(t);if(!i)continue;const d=(i[1]??"").length,c=4-d;c>a&&(a=c,s=d===1?"major":d===2?"minor":"patch")}return s},Ps=/^\s*(pr|commit|author)\s*:\s*(.+?)\s*$/i,$s=e=>{const s=e.split(/\r?\n/),a={};let n=0;for(const i of s){if(i.trim()===""){n+=1;continue}const d=Ps.exec(i);if(!d)break;const[,c="",o=""]=d;switch(c.toLowerCase()){case"author":{a.author=o.startsWith("@")?o:`@${o}`;break}case"commit":{a.commit=o;break}case"pr":{const u=Number.parseInt(o,10);!Number.isNaN(u)&&u>0&&(a.pr=u);break}}n+=1}const t=s.slice(n).join(`
2
- `).trim();return{meta:Object.keys(a).length>0?a:void 0,remainder:t}},Ce=e=>typeof e=="object"&&e!==null&&!Array.isArray(e)&&("bump"in e||"replay"in e),Cs=(e,s,a)=>{const n=s.replay!==void 0;if(n&&s.bump!==void 0)throw new A({code:"BUMP_FILE_INVALID",file:a,message:`"${e}" sets both \`bump\` and \`replay\`. Replay files are changelog-only and never bump — remove \`bump\`, or drop \`replay\` to make this a normal change file.`,packageName:e});const t=s.bump===void 0&&n?"none":s.bump;if(!fe(t))throw new A({code:"BUMP_FILE_INVALID",file:a,message:`Invalid bump level for "${e}": ${JSON.stringify(s.bump)}. Expected one of: ${ye.join(", ")}`,packageName:e});const i={bump:t,package:e};if(n&&(i.replay=ps(s.replay,a)),s.releaseAs!==void 0){if(typeof s.releaseAs!="string"||!/^\d+\.\d+\.\d+(?:[-+].*)?$/.test(s.releaseAs))throw new A({code:"BUMP_FILE_INVALID",file:a,message:`Invalid releaseAs for "${e}": ${JSON.stringify(s.releaseAs)}. Expected a semver string like "2.0.0" or "2.0.0-rc.1".`,packageName:e});i.releaseAs=s.releaseAs}if(s.cascade!==void 0){if(typeof s.cascade!="object"||s.cascade===null||Array.isArray(s.cascade))throw new A({code:"BUMP_FILE_INVALID",file:a,message:`Cascade block for "${e}" must be an object mapping package globs to bump levels.`,packageName:e});const d={};for(const[c,o]of Object.entries(s.cascade)){if(!fe(o))throw new A({code:"BUMP_FILE_INVALID",file:a,message:`Invalid cascade bump level for "${c}": ${JSON.stringify(o)}.`,packageName:e});d[c]=o}i.cascade=d}return i},ce=e=>e.replaceAll(/^.*[/\\]/g,"").replace(/\.md$/i,""),Ns=(e,s)=>{const a=fs(e);if(!a)throw new A({code:"BUMP_FILE_INVALID",file:s,message:"Change file is missing YAML frontmatter (expected `---` delimiters)."});let n;try{n=as(a.frontmatter,{strict:!0})}catch(o){throw new A({cause:o,code:"BUMP_FILE_INVALID",file:s,message:`YAML parse failed: ${o.message}`})}if(n==null)return{body:a.body.trim(),id:ce(s),path:s,payload:{bumps:{}}};if(typeof n!="object"||Array.isArray(n))throw new A({code:"BUMP_FILE_INVALID",file:s,message:"Frontmatter must be a YAML object mapping package names to bump levels."});const t=Object.entries(n);if(t.length===0)return{body:a.body.trim(),id:ce(s),path:s,payload:{bumps:{}}};for(const[o]of t)if(!ys(o))throw new A({code:"BUMP_FILE_INVALID",file:s,message:`Invalid package name: ${JSON.stringify(o)}.`,packageName:o});let i;if(t.length===1&&Ce(t[0][1])){const[o,r]=t[0];i=Cs(o,r,s)}else{const o={},r=[];for(const[u,g]of t){if(Ce(g))throw new A({code:"BUMP_FILE_INVALID",file:s,message:`Mixed simple + nested entries are not allowed. Package "${u}" uses the nested shape but the file has multiple top-level entries.`,packageName:u});if(g==null||g===""){r.push(u);continue}if(!fe(g))throw new A({code:"BUMP_FILE_INVALID",file:s,message:`Invalid bump level for "${u}": ${JSON.stringify(g)}. Expected one of: ${ye.join(", ")}`,packageName:u});o[u]=g}if(r.length>0){const u=ks(a.body);if(!u)throw new A({code:"BUMP_FILE_INVALID",file:s,message:`No bump level for ${r.map(g=>`"${g}"`).join(", ")}: the entry is empty and the body has no markdown heading to infer one from. Add an explicit level (e.g. \`${r[0]}: minor\`) or a heading (\`# major\`, \`## minor\`, \`### patch\`).`,packageName:r[0]});for(const g of r)o[g]=u}i={bumps:o}}const{meta:d,remainder:c}=$s(a.body);return{body:c,id:ce(s),meta:d,path:s,payload:i}},ma=(e,s)=>{let a;if("bumps"in e){const n=Object.entries(e.bumps).map(([t,i])=>`${le(t)}: ${i}`);a=n.length>0?n.join(`
3
- `):"{}"}else{const n=[`${le(e.package)}:`,` bump: ${e.bump}`];if(e.releaseAs&&n.push(` releaseAs: ${e.releaseAs}`),e.cascade){n.push(" cascade:");for(const[t,i]of Object.entries(e.cascade))n.push(` ${le(t)}: ${i}`)}if(e.replay&&e.replay.length>0){n.push(" replay:");for(const t of e.replay){const i=t.kind==="version"?`${t.package}@${t.version}`:`exit-prerelease:${t.package}`;n.push(` - "${i}"`)}}a=n.join(`
1
+ import{createRequire as He}from"node:module";import{a as W}from"../packem_shared/index-B4AjSxHU.js";import{DEFAULT_CHANGES_DIR as ne,DEFAULT_DEPENDENCY_BUMP_RULES as qe,DEFAULT_CONFIG as Xe}from"./DEFAULT_CLEAN_KEEP.js";import{VisReleaseError as N}from"../packem_shared/VisReleaseError-DZtgcKf8.js";import{e as Qe,p as Ze,b as xe}from"./index2.js";import{L as ss}from"../packem_shared/index-BisalDCf.js";import{BUMP_LEVELS as ye,maxBump as ue,normaliseGroup as ve,bumpRank as te}from"../release/types.js";import{isValidPackageName as as,escapeMarkdown as ns,assertValidPackageName as ts}from"./security.js";import re from"./index.js";import{d as rs,c as is}from"./index3.js";import{createShellRunner as ee}from"./shell-runner.js";let Ue;const We=e=>(Ue??=He(import.meta.url))(e),Q=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,we=e=>{if(typeof Q<"u"&&Q.versions&&Q.versions.node){const[s,a]=Q.versions.node.split(".").map(Number);if(s>22||s===22&&a>=3||s===20&&a>=16)return Q.getBuiltinModule(e)}return We(e)},{readdir:Ye,readFile:ze,writeFile:Ke,unlink:Je}=we("node:fs/promises"),{resolve:ge,sep:Z,join:es}=we("node:path"),{realpathSync:be}=we("node:fs"),os=/^exit[\s-]prerelease\s*:\s*(.+)$/i,cs=/^(.+)@(\d+\.\d+\.\d+(?:[-+].*)?)$/,ke=(e,s,a)=>{if(!as(e))throw new N({code:"BUMP_FILE_INVALID",file:a,message:`Invalid replay condition "${s}": ${JSON.stringify(e)} is not a valid package name.`,packageName:e||void 0});return e},ls=(e,s)=>{if(typeof e!="string"||e.trim()==="")throw new N({code:"BUMP_FILE_INVALID",file:s,message:`Invalid replay condition: ${JSON.stringify(e)}. Expected "name@1.2.0" or "exit-prerelease:name".`});const a=e.trim(),n=os.exec(a);if(n)return{kind:"exit-prerelease",package:ke((n[1]??"").trim(),a,s)};const t=cs.exec(a);if(t)return{kind:"version",package:ke((t[1]??"").trim(),a,s),version:t[2]??""};throw new N({code:"BUMP_FILE_INVALID",file:s,message:`Invalid replay condition "${a}". Expected "name@1.2.0" or "exit-prerelease:name".`})},ds=(e,s)=>{if(!Array.isArray(e))throw new N({code:"BUMP_FILE_INVALID",file:s,message:'`replay` must be a list of conditions (e.g. ["name@1.2.0", "exit-prerelease:name"]).'});return e.map(a=>ls(a,s))},fe=e=>!("bumps"in e.payload)&&Array.isArray(e.payload.replay)&&e.payload.replay.length>0,Pe=e=>/^\d+\.\d+\.\d+-/.test(e),ps=(e,s)=>e.package!==s.name?!1:e.kind==="version"?s.newVersion===e.version:Pe(s.oldVersion)&&!Pe(s.newVersion),gs=(e,s)=>{const a=new Map,n=[],t=[];for(const o of e){if(!fe(o))continue;const p=o.payload.replay;let c=!0;for(const r of p){const i=s.find(l=>ps(r,l));if(i){const l=a.get(i.name)??[];l.some(u=>u.id===o.id)||l.push(o),a.set(i.name,l)}else c=!1}c?n.push(o):t.push(o)}return{consumed:n,injectionsByPackage:a,retained:t}},us=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,fs=e=>{const s=us.exec(e);return s?{body:(s[2]??"").trim(),frontmatter:s[1]??""}:null},ms=/^(?:@[a-z0-9-]+\/)?[\w.-]+$/i,hs=214,ws=e=>e.length===0||e.length>hs||e.startsWith(".")||e.startsWith("_")||e.startsWith("-")?!1:ms.test(e),me=e=>typeof e=="string"&&ye.includes(e),ys=/^ {0,3}(#{1,3})\s+\S/,vs=/^ {0,3}(?:```|~~~)/,bs=e=>{let s,a=0,n=!1;for(const t of e.split(/\r?\n/)){if(vs.test(t)){n=!n;continue}if(n)continue;const o=ys.exec(t);if(!o)continue;const p=(o[1]??"").length,c=4-p;c>a&&(a=c,s=p===1?"major":p===2?"minor":"patch")}return s},ks=/^\s*(pr|commit|author)\s*:\s*(.+?)\s*$/i,Ps=e=>{const s=e.split(/\r?\n/),a={};let n=0;for(const o of s){if(o.trim()===""){n+=1;continue}const p=ks.exec(o);if(!p)break;const[,c="",r=""]=p;switch(c.toLowerCase()){case"author":{a.author=r.startsWith("@")?r:`@${r}`;break}case"commit":{a.commit=r;break}case"pr":{const l=Number.parseInt(r,10);!Number.isNaN(l)&&l>0&&(a.pr=l);break}}n+=1}const t=s.slice(n).join(`
2
+ `).trim();return{meta:Object.keys(a).length>0?a:void 0,remainder:t}},$e=e=>typeof e=="object"&&e!==null&&!Array.isArray(e)&&("bump"in e||"replay"in e),$s=(e,s,a)=>{const n=s.replay!==void 0;if(n&&s.bump!==void 0)throw new N({code:"BUMP_FILE_INVALID",file:a,message:`"${e}" sets both \`bump\` and \`replay\`. Replay files are changelog-only and never bump — remove \`bump\`, or drop \`replay\` to make this a normal change file.`,packageName:e});const t=s.bump===void 0&&n?"none":s.bump;if(!me(t))throw new N({code:"BUMP_FILE_INVALID",file:a,message:`Invalid bump level for "${e}": ${JSON.stringify(s.bump)}. Expected one of: ${ye.join(", ")}`,packageName:e});const o={bump:t,package:e};if(n&&(o.replay=ds(s.replay,a)),s.releaseAs!==void 0){if(typeof s.releaseAs!="string"||!/^\d+\.\d+\.\d+(?:[-+].*)?$/.test(s.releaseAs))throw new N({code:"BUMP_FILE_INVALID",file:a,message:`Invalid releaseAs for "${e}": ${JSON.stringify(s.releaseAs)}. Expected a semver string like "2.0.0" or "2.0.0-rc.1".`,packageName:e});o.releaseAs=s.releaseAs}if(s.cascade!==void 0){if(typeof s.cascade!="object"||s.cascade===null||Array.isArray(s.cascade))throw new N({code:"BUMP_FILE_INVALID",file:a,message:`Cascade block for "${e}" must be an object mapping package globs to bump levels.`,packageName:e});const p={};for(const[c,r]of Object.entries(s.cascade)){if(!me(r))throw new N({code:"BUMP_FILE_INVALID",file:a,message:`Invalid cascade bump level for "${c}": ${JSON.stringify(r)}.`,packageName:e});p[c]=r}o.cascade=p}return o},ce=e=>e.replaceAll(/^.*[/\\]/g,"").replace(/\.md$/i,""),Cs=(e,s)=>{const a=fs(e);if(!a)throw new N({code:"BUMP_FILE_INVALID",file:s,message:"Change file is missing YAML frontmatter (expected `---` delimiters)."});let n;try{n=ss(a.frontmatter,{strict:!0})}catch(r){throw new N({cause:r,code:"BUMP_FILE_INVALID",file:s,message:`YAML parse failed: ${r.message}`})}if(n==null)return{body:a.body.trim(),id:ce(s),path:s,payload:{bumps:{}}};if(typeof n!="object"||Array.isArray(n))throw new N({code:"BUMP_FILE_INVALID",file:s,message:"Frontmatter must be a YAML object mapping package names to bump levels."});const t=Object.entries(n);if(t.length===0)return{body:a.body.trim(),id:ce(s),path:s,payload:{bumps:{}}};for(const[r]of t)if(!ws(r))throw new N({code:"BUMP_FILE_INVALID",file:s,message:`Invalid package name: ${JSON.stringify(r)}.`,packageName:r});let o;if(t.length===1&&$e(t[0][1])){const[r,i]=t[0];o=$s(r,i,s)}else{const r={},i=[];for(const[l,u]of t){if($e(u))throw new N({code:"BUMP_FILE_INVALID",file:s,message:`Mixed simple + nested entries are not allowed. Package "${l}" uses the nested shape but the file has multiple top-level entries.`,packageName:l});if(u==null||u===""){i.push(l);continue}if(!me(u))throw new N({code:"BUMP_FILE_INVALID",file:s,message:`Invalid bump level for "${l}": ${JSON.stringify(u)}. Expected one of: ${ye.join(", ")}`,packageName:l});r[l]=u}if(i.length>0){const l=bs(a.body);if(!l)throw new N({code:"BUMP_FILE_INVALID",file:s,message:`No bump level for ${i.map(u=>`"${u}"`).join(", ")}: the entry is empty and the body has no markdown heading to infer one from. Add an explicit level (e.g. \`${i[0]}: minor\`) or a heading (\`# major\`, \`## minor\`, \`### patch\`).`,packageName:i[0]});for(const u of i)r[u]=l}o={bumps:r}}const{meta:p,remainder:c}=Ps(a.body);return{body:c,id:ce(s),meta:p,path:s,payload:o}},ma=(e,s)=>{let a;if("bumps"in e){const n=Object.entries(e.bumps).map(([t,o])=>`${le(t)}: ${o}`);a=n.length>0?n.join(`
3
+ `):"{}"}else{const n=[`${le(e.package)}:`,` bump: ${e.bump}`];if(e.releaseAs&&n.push(` releaseAs: ${e.releaseAs}`),e.cascade){n.push(" cascade:");for(const[t,o]of Object.entries(e.cascade))n.push(` ${le(t)}: ${o}`)}if(e.replay&&e.replay.length>0){n.push(" replay:");for(const t of e.replay){const o=t.kind==="version"?`${t.package}@${t.version}`:`exit-prerelease:${t.package}`;n.push(` - "${o}"`)}}a=n.join(`
4
4
  `)}return`---
5
5
  ${a}
6
6
  ---
7
7
  ${s.trim()===""?"":`${s.trim()}
8
- `}`},le=e=>/^[a-z0-9-]/.test(e)?e:`"${e}"`,As=e=>{const s=new Map,a=t=>t==="major"?3:t==="minor"?2:t==="patch"?1:0,n=(t,i)=>{const d=s.get(t);(d===void 0||a(i)>a(d))&&s.set(t,i)};for(const t of e)if("bumps"in t.payload)for(const[i,d]of Object.entries(t.payload.bumps))n(i,d);else n(t.payload.package,t.payload.bump);return s},Ne=(e,s)=>s.filter(a=>"bumps"in a.payload?Object.hasOwn(a.payload.bumps,e):a.payload.package===e),Rs=new Set(["README.md","readme.md"]),Is=async e=>{const s=e.changesDir??ae,a=ge(e.cwd),n=ge(e.cwd,s),t=n,i=a.endsWith(Z)?a:`${a}${Z}`;if(n!==a&&!n.startsWith(i))throw new A({code:"CONFIG_INVALID",message:`changesDir resolves outside the workspace: ${n} (workspace: ${a}). Set release.changesDir to a path inside the repo.`});const d=[];let c;try{c=await Ye(t)}catch(u){if(u.code==="ENOENT")return{files:[],warnings:[]};throw new A({cause:u,code:"CONFIG_INVALID",message:`Cannot read change-files directory ${t}: ${u.message}`})}const o=c.filter(u=>!Rs.has(u)&&u.endsWith(".md"));return{files:await Promise.all(o.map(async u=>{const g=ss(t,u),l=await Je(g,"utf8");return Ns(l,g)})),warnings:d}},Es=(e,s)=>{if(!s)return;if(Object.hasOwn(s,e)){const n=Object.keys(s).filter(t=>t!==e&&Re(t)&&te(t,e));return Ae(e,s[e],n)}const a=[];for(const[n]of Object.entries(s))Re(n)&&te(n,e)&&a.push(n);if(a.length>0){const[n,...t]=a;return Ae(e,s[n],t)}},Ae=(e,s,a=[])=>{let{tag:n}=s;return n==="branch-name"&&(n=Ms(e)),{branch:e,mode:s.mode??"auto-publish",...a.length>0?{overlapping:a}:{},prerelease:s.prerelease,range:s.range,tag:n}},Ms=e=>e.toLowerCase().replaceAll(/[^a-z0-9.-]/g,"-").replaceAll(/^-+|-+$/g,"")||"branch",_s=/[!()*+?@[\]{|}]/,Re=e=>_s.test(e),Ds=async(e,s)=>{try{const a=await s.run("git",["rev-parse","--abbrev-ref","HEAD"],{cwd:e,silent:!0});if(a.exitCode!==0)return;const n=a.stdout.trim();return n==="HEAD"||n===""?void 0:n}catch{return}},Fs=["dependencies","devDependencies","peerDependencies","optionalDependencies"];class Ss{dependents;dependenciesByPackage;packagesByName;constructor(s){this.dependents=new Map,this.dependenciesByPackage=new Map,this.packagesByName=new Map;for(const a of s){if(this.packagesByName.has(a.name))throw new A({code:"DUPLICATE_PACKAGE_NAME",message:`Duplicate package name "${a.name}" — found at ${this.packagesByName.get(a.name).dir} and ${a.dir}.`,packageName:a.name});this.packagesByName.set(a.name,a),this.dependents.set(a.name,[]),this.dependenciesByPackage.set(a.name,[])}for(const a of s)for(const n of Fs){const t=a.manifest[n];if(!(!t||typeof t!="object"))for(const[i,d]of Object.entries(t))this.packagesByName.has(i)&&(this.dependents.get(i).push({kind:n,name:a.name,range:d}),this.dependenciesByPackage.get(a.name).push({kind:n,name:i,range:d}))}}getPackage(s){return this.packagesByName.get(s)}allPackages(){return[...this.packagesByName.values()]}isInternal(s){return this.packagesByName.has(s)}getDependents(s){return this.dependents.get(s)??[]}getDependencies(s){return this.dependenciesByPackage.get(s)??[]}topologicalSort(s){const a=s?new Set(s):new Set(this.packagesByName.keys()),n=new Set,t=new Set,i=[],d=(c,o)=>{if(!n.has(c)){if(t.has(c)){const r=o.indexOf(c),u=r===-1?[...o,c]:[...o.slice(r),c];throw new A({code:"CYCLIC_DEPENDENCY",message:`Cyclic dependency detected: ${u.join(" → ")}`})}t.add(c);for(const r of this.getDependencies(c))a.has(r.name)&&r.kind!=="devDependencies"&&d(r.name,[...o,c]);t.delete(c),n.add(c),i.push(c)}};for(const c of a)d(c,[]);return i}get size(){return this.packagesByName.size}}const js=/\{(name|version|previousVersion|date|repo|contributors)\}/g,Vs=(e,s)=>e.replaceAll(js,(a,n)=>s[n]??""),Ls=(e,s={})=>{const a=new Set;for(const i of s.internalAuthors??[]){const d=i.trim().toLowerCase().replace(/^@/,"");d.length>0&&a.add(d)}const n=new Set,t=[];for(const i of e){const d=i.meta?.author;if(d)for(const c of d.split(",")){const o=c.trim();if(!o)continue;const r=o.replace(/^@/,"");if(r.length===0)continue;const u=r.toLowerCase();n.has(u)||a.has(u)||(n.add(u),t.push(ts(o)))}}return t.length===0?"":t.map(i=>`- ${i}`).join(`
9
- `)},re=e=>{const{current:s,prerelease:a}=e;let{bump:n}=e;if(!H.valid(s))throw new A({code:"CONFIG_INVALID",message:`Invalid current version: ${JSON.stringify(s)}`});const t=H.parse(s),i=t.prerelease[0],d=t.prerelease.length>0;if(t.major===0&&e.bumpMinorPreMajor&&(n==="major"&&(n="minor"),n==="minor"&&e.bumpPatchForMinorPreMajor&&(n="patch")),n==="none")return(i??void 0)===(a??void 0)?s:!d&&a?`${t.major}.${t.minor}.${t.patch}-${a}.0`:d&&!a?`${t.major}.${t.minor}.${t.patch}`:d&&a?`${t.major}.${t.minor}.${t.patch}-${a}.0`:s;if(d&&a&&i===a){const o=Ts(t);if(Ie[n]<=Ie[o]){const g=H.inc(s,"prerelease",a);if(!g)throw new A({code:"CONFIG_INVALID",message:`semver.inc returned null for prerelease bump on ${s}`});return g}const r=`${t.major}.${t.minor}.${t.patch}`,u=H.inc(r,n);if(!u)throw new A({code:"CONFIG_INVALID",message:`semver.inc returned null for ${n} bump on ${r}`});return`${u}-${a}.0`}if(a){const o=`${t.major}.${t.minor}.${t.patch}`,r=H.inc(o,n);if(!r)throw new A({code:"CONFIG_INVALID",message:`semver.inc returned null for ${n} bump on ${o}`});return`${r}-${a}.0`}if(d){const o=`${t.major}.${t.minor}.${t.patch}`,r=H.inc(o,n);if(!r)throw new A({code:"CONFIG_INVALID",message:`semver.inc returned null for ${n} bump on ${o}`});return r}const c=H.inc(s,n);if(!c)throw new A({code:"CONFIG_INVALID",message:`semver.inc returned null for ${n} bump on ${s}`});return c},Ie={major:3,minor:2,patch:1},Ts=e=>e.minor===0&&e.patch===0?"major":e.patch===0?"minor":"patch",Bs=(e,s)=>{const a=Fe(s);return a?H.satisfies(e,a,{includePrerelease:!0}):!0},Fe=e=>{if(!e||e.startsWith("catalog:")||e==="*"||e==="workspace:*"||e==="workspace:^"||e==="workspace:~")return null;if(e.startsWith("workspace:")){const s=e.slice(10);return s==="*"||s==="^"||s==="~"?null:s}if(e.startsWith("npm:")){const s=e.lastIndexOf("@");return s>4?e.slice(s+1):null}return e},de=100,J=(e,s,a,n,{isCascadeBump:t=!1,isDependencyBump:i=!1,isGroupBump:d=!1,source:c}={})=>{const o=e.get(s);if(o){const r=o.type;return o.type=ue(o.type,a),o.reasons.add(n),i&&(o.isDependencyBump=!0),d&&(o.isGroupBump=!0),t&&(o.isCascadeBump=!0),c&&o.sources.set(c.name,{bumpType:c.bumpType,newVersion:c.newVersion}),o.type!==r}return e.set(s,{isCascadeBump:t,isDependencyBump:i,isGroupBump:d,name:s,proactiveSeen:!1,reasons:new Set([n]),sources:c?new Map([[c.name,{bumpType:c.bumpType,newVersion:c.newVersion}]]):new Map,type:a}),!0},Os=(e,s,a,n)=>{const t=a?.get(e)?.dependencyBumpRules?.[s];if(t!==void 0)return t;const i=n.dependencyBumpRules?.[s];return i!==void 0?i:Xe[s]??!1},Ee=(e,s)=>ne(e)>=ne(s),Me=(e,s)=>s==="match"?e:s,Gs=(e,s)=>s===!0?!0:Array.isArray(s)?s.includes(e):!1,Us=10,Ws=(e,s,a,n,t,i,d)=>{let c=!1;for(const o of e.values()){const r=s.getPackage(o.name);if(!r)continue;const u=n.currentVersions?.get(o.name)??r.version,g=a.get(o.name)??re({bump:o.type,bumpMinorPreMajor:n.bumpMinorPreMajor,bumpPatchForMinorPreMajor:n.bumpPatchForMinorPreMajor,current:u,prerelease:n.prerelease});a.set(o.name,g);for(const l of s.getDependents(o.name)){if(l.kind==="devDependencies"){if(!Gs(o.name,i.bumpDevDependencies))continue;if(J(e,l.name,"patch","DEVDEPENDENCY_BUMPED",{isDependencyBump:!0,source:{bumpType:o.type,name:o.name,newVersion:g}})&&(c=!0,a.delete(l.name)),i.bumpDevDependencies===!0){let b=d.get(o.name);b||(b=new Set,d.set(o.name,b)),b.add(l.name)}continue}const p=Fe(l.range);if(p===null||Bs(g,p))continue;let m,v="DEPENDENCY_OUT_OF_RANGE";l.kind==="peerDependencies"?(m=o.type==="none"?"patch":o.type,v="PEER_DEP_MATCH",p.startsWith("^0.")&&m!=="patch"&&t.push(`^0.x peer dep "${o.name}" → "${l.name}" produced a ${m} bump. Consider widening the range manually.`)):m="patch",J(e,l.name,m,v,{isDependencyBump:!0,source:{bumpType:o.type,name:o.name,newVersion:g}})&&(c=!0,a.delete(l.name))}}return c},Hs=(e,s,a)=>{let n=!1;for(const t of a.fixed??[]){const i=be(t),d=ie(i.packages,s),c=d.filter(r=>e.has(r));if(c.length===0)continue;let o="none";for(const r of c)o=ue(o,e.get(r).type);for(const r of d){if(!s.isInternal(r))continue;J(e,r,o,"FIXED_GROUP",{isGroupBump:!0})&&(n=!0)}}for(const t of a.linked??[]){const i=be(t),c=ie(i.packages,s).filter(r=>e.has(r));if(c.length===0)continue;let o="none";for(const r of c)o=ue(o,e.get(r).type);for(const r of c)J(e,r,o,"LINKED_GROUP",{isGroupBump:!0})&&(n=!0)}return n},_e=new WeakMap,zs=/[!()*+?@[\]{|}]/,ie=(e,s)=>{let a=_e.get(s);a||(a={allNames:s.allPackages().map(t=>t.name),matched:new Map},_e.set(s,a));const n=new Set;for(const t of e){if(!zs.test(t)){n.add(t);continue}let i=a.matched.get(t);i||(i=a.allNames.filter(d=>te(t,d)),a.matched.set(t,i));for(const d of i)n.add(d)}return[...n]},Ys=(e,s,a,n,t,i)=>{let d=!1;const c=n.updateInternalDependencies??"out-of-range",o=r=>{const u=i.get(r.name);if(u!==void 0)return u;const g=re({bump:r.type,bumpMinorPreMajor:t.bumpMinorPreMajor,bumpPatchForMinorPreMajor:t.bumpPatchForMinorPreMajor,current:t.currentVersions?.get(r.name)??a.getPackage(r.name).version,prerelease:t.prerelease});return i.set(r.name,g),g};for(const r of s){if("bumps"in r.payload||!r.payload.cascade)continue;const u=e.get(r.payload.package);if(!u)continue;const g=i.get(u.name)??re({bump:u.type,bumpMinorPreMajor:t.bumpMinorPreMajor,bumpPatchForMinorPreMajor:t.bumpPatchForMinorPreMajor,current:t.currentVersions?.get(u.name)??a.getPackage(u.name).version,prerelease:t.prerelease});i.set(u.name,g);for(const[l,p]of Object.entries(r.payload.cascade))for(const m of ie([l],a)){if(!a.isInternal(m))continue;J(e,m,p,"CASCADE",{isCascadeBump:!0,source:{bumpType:u.type,name:u.name,newVersion:g}})&&(d=!0)}}for(const r of e.values()){const u=t.perPackageConfig?.get(r.name)?.cascadeTo;if(u)for(const[g,l]of Object.entries(u)){if(!Ee(r.type,l.trigger))continue;const p=Me(r.type,l.bumpAs),m=o(r);for(const v of ie([g],a)){if(!a.isInternal(v))continue;J(e,v,p,"CASCADE_TO",{isCascadeBump:!0,source:{bumpType:r.type,name:r.name,newVersion:m}})&&(d=!0)}}}if(c==="out-of-range")return d;for(const r of e.values())if(!r.proactiveSeen&&!(c==="minor"&&ne(r.type)<ne("minor"))){for(const u of a.getDependents(r.name)){const g=Os(u.name,u.kind,t.perPackageConfig,n);if(g===!1||!Ee(r.type,g.trigger))continue;const l=Me(r.type,g.bumpAs);if(l==="none")continue;const p=o(r);J(e,u.name,l,"DEPENDENCY_BUMPED",{isDependencyBump:!0,source:{bumpType:r.type,name:r.name,newVersion:p}})&&(d=!0)}r.proactiveSeen=!0}return d},Js=(e,s,a,n={})=>{const t=e.filter(p=>me(p)),i=t.length>0?e.filter(p=>!me(p)):e,d=new Map,c=[],o=new Map;for(const[p,m]of As(i).entries()){if(!s.isInternal(p)){c.push(`Change file references non-workspace package "${p}" — ignored.`);continue}m!=="none"&&J(d,p,m,"EXPLICIT")}for(const p of n.catalogConsumers??[]){if(!s.isInternal(p.packageName))continue;const m=`catalog:${p.catalog}/${p.dep}`;J(d,p.packageName,"patch","CATALOG_CHANGED",{isDependencyBump:!0,source:{bumpType:"patch",name:m,newVersion:p.newVersion??""}})}const r=new Map,u=p=>{const m=Ne(p,i).map(y=>"releaseAs"in y.payload?{file:y.path,version:y.payload.releaseAs}:void 0).filter(y=>y!==void 0&&typeof y.version=="string"),v=new Set(m.map(y=>y.version));if(v.size>1)throw new A({code:"BUMP_FILE_INVALID",message:`Conflicting releaseAs values for ${p}: ${[...v].join(", ")}. Found in: ${m.map(y=>y.file).join(", ")}. Consolidate the change files to a single override.`,packageName:p});return m[0]?.version},g=new Map;for(const p of d.values()){if(p.type==="none")continue;const m=u(p.name);m&&(g.set(p.name,m),o.set(p.name,m))}for(let p=0;p<de;p+=1){const m=Ws(d,s,o,n,c,a,r),v=Hs(d,s,a),y=Ys(d,i,s,a,n,o);if(!m&&!v&&!y)break;p===de-1&&c.push(`Release plan did not converge after ${de} iterations — releasing the current best plan. This usually indicates a config bug (cyclic cascade?).`)}for(const[p,m]of r){const v=m.size;v>Us&&c.push(`bumpDevDependencies: true triggered ${v} patch-cascades to distinct dependents from a single devdep bump (${p}). Consider scoping with the array form ['only', 'these', 'sources'].`)}const l=[];for(const p of d.values()){if(p.type==="none")continue;const m=s.getPackage(p.name);if(!m)continue;const v=Ne(p.name,i),y=g.get(p.name),P=n.currentVersions?.get(p.name)??m.version,b=y??o.get(p.name)??re({bump:p.type,bumpMinorPreMajor:n.bumpMinorPreMajor,bumpPatchForMinorPreMajor:n.bumpPatchForMinorPreMajor,current:P,prerelease:n.prerelease});l.push({changeFiles:v,isCascadeBump:p.isCascadeBump,isDependencyBump:p.isDependencyBump,isGroupBump:p.isGroupBump,name:p.name,newVersion:b,oldVersion:P,reasons:[...p.reasons],sources:[...p.sources.entries()].map(([$,D])=>({name:$,...D})),type:p.type})}if(l.sort((p,m)=>p.name.localeCompare(m.name)),t.length>0){const p=us(t,l);for(const[m,v]of p.injectionsByPackage){const y=l.find(P=>P.name===m);y&&(y.changeFiles=[...y.changeFiles,...v])}return{consumedChangeFiles:[...i,...p.consumed],releases:l,warnings:c}}return{consumedChangeFiles:i,releases:l,warnings:c}},Se=async(e,s,a={})=>{const n=await e.listPackages(),t=[],i=new Map,d=new Map,c=g=>{const l=ge(g);try{return ke.native(l)}catch{try{return ke(l)}catch{return l}}},o=a.cwd===void 0?void 0:c(a.cwd),r=g=>g.replaceAll("\\","/"),u=[];for(const{manifest:g,manifestPath:l}of n){const p=he(typeof g.name=="string"?g.name:"",g,s);if(g.napi!==void 0||p.versionActions==="native-addon"){const v=r(l.replace(/[/\\]package\.json$/i,""));u.push(`${v}/npm/`)}}for(const{manifest:g,manifestPath:l}of n){if(typeof g.name!="string"||g.name==="")continue;const p=r(l.replace(/[/\\]package\.json$/i,""));if(u.some(y=>p.startsWith(y)))continue;if(rs(g.name),d.has(g.name))throw new A({code:"DUPLICATE_PACKAGE_NAME",message:`Duplicate package name "${g.name}" — at ${d.get(g.name)} and ${l}.`,packageName:g.name});if(d.set(g.name,l),o!==void 0){const y=c(l),P=o.endsWith(Z)?o:`${o}${Z}`,b=D=>Z==="\\"?D.toLowerCase():D,$=b(y);if($!==b(o)&&!$.startsWith(b(P)))throw new A({code:"CONFIG_INVALID",message:`Package manifest is outside the workspace: ${l} (workspace: ${o}).`,packageName:g.name})}const m=he(g.name,g,s);if(!je(g.name,g,m,s))continue;const v=l.replace(/[/\\]package\.json$/i,"");t.push({dir:v,manifest:g,manifestPath:l,name:g.name,private:g.private===!0,version:typeof g.version=="string"?g.version:"0.0.0"}),i.set(g.name,m)}return{packages:t,perPackageConfig:i}},he=(e,s,a)=>{const n=a.packages?.[e]??{},t=s["vis-release"]??{};return{...n,...t}},je=(e,s,a,n)=>a.managed===!1?!1:a.managed===!0?!0:De(e,n.ignore??[])?!1:De(e,n.include??[])?!0:s.private===!0&&!(n.privatePackages?.version??!1)?!1:n.defaultManaged??!1,De=(e,s)=>s.some(a=>te(a,e)),Ve=(e,s)=>s.versionActions!==void 0?s.versionActions:e.manifest.napi!==void 0?"native-addon":e.private?"private":"npm",fa=Object.defineProperty({__proto__:null,discoverPackages:Se,isPackageManaged:je,mergePerPackageConfig:he,resolveVersionActionsId:Ve},Symbol.toStringTag,{value:"Module"}),ha=async(e={})=>{const s=e.cwd??process.cwd(),a=ee(),n=await is(s),t=os(n,a),i=await t.detectVersion(s);if(i&&!Ks(i,t.minVersion))throw new A({code:"PM_VERSION_TOO_LOW",hint:`pnpm install -g ${t.id}@latest (or your equivalent)`,message:`${t.id} version ${i} is below the required minimum ${t.minVersion}. Upgrade ${t.id} to enable release operations.`});let d={};try{const{loadVisConfig:C}=await import("./CONFIG_FILES.js"),S=await C(s);S.release&&(d=S.release)}catch(C){const{code:S}=C,M=C.message??"";if(!(S==="ENOENT"||S==="MODULE_NOT_FOUND"||/cannot find module/i.test(M)))throw C}const c=qs(d,e.config??{});!c.acknowledgeUnstable&&process.env.VIS_RELEASE_SUPPRESS_UNSTABLE!=="1"&&process.stderr.write("[vis release] ⚠ This subsystem is flagged unstable. Set `release.acknowledgeUnstable: true` in vis.config.ts to suppress this warning. (RFC §21.2)\n");const o=e.channel??await Ds(s,a),r=o?Es(o,c.channels):void 0,u=await import("node:fs/promises"),g={listPackages:async()=>{const C=await t.listWorkspacePackages(s);return(await Promise.all(C.map(async M=>{const E=`${M.path}/package.json`;try{const U=await u.readFile(E,"utf8");return{manifest:JSON.parse(U),manifestPath:E}}catch{return}}))).filter(M=>M!==void 0)}},{packages:l,perPackageConfig:p}=await Se(g,c,{cwd:s}),m=new Ss(l),{files:v}=await Is({changesDir:c.changesDir,cwd:s}),{readPreMode:y}=await import("./pre-mode.js"),P=await y(s,c.changesDir??".vis/release");let b;P?.mode==="pre"?b=P.tag:P?.mode==="exit-pending"?b=void 0:b=r?.prerelease;const $=e.firstRelease===!0,{resolveCurrentVersionsForWorkspace:D}=await import("./version-resolver.js"),{versions:h,warnings:B}=await D(l,m,c,p,{cwd:s,firstRelease:$,pm:t,runner:a,skipRegistryLookup:e.skipRegistryLookup===!0}),I=[],_=[];if(c.detectCatalogChanges===!0)try{const{detectCatalogChanges:C,findCatalogConsumers:S,parseCatalogs:M}=await import("./catalog-detector.js"),E=await t.readCatalogYaml(s),U=M(E);let G;try{const k=await a.run("git",["show","HEAD~1:pnpm-workspace.yaml"],{cwd:s,silent:!0});k.exitCode===0&&(G=k.stdout)}catch{}const q=M(G),f=C(q,U).filter(k=>k.oldVersion!==void 0&&k.newVersion!==void 0);if(f.length>0){const k=S(l,U);for(const R of f){const L=k.get(R.catalog)?.get(R.dep)??[];for(const F of L)I.push({catalog:R.catalog,dep:R.dep,newVersion:R.newVersion,oldVersion:R.oldVersion,packageName:F.packageName})}I.length>0&&_.push(`Catalog change-detection: ${f.length} catalog dep(s) moved; ${I.length} consumer-package patch bump(s) tagged CATALOG_CHANGED.`)}}catch(C){_.push(`Catalog change-detection skipped: ${C.message}.`)}const V=Js(v,m,c,{bumpMinorPreMajor:c.bumpMinorPreMajor,bumpPatchForMinorPreMajor:c.bumpPatchForMinorPreMajor,catalogConsumers:I,currentVersions:h,perPackageConfig:p,prerelease:b});if(_.length>0&&V.warnings.push(..._),B.length>0&&V.warnings.push(...B),$&&V.warnings.push('First-release mode: currentVersionResolver forced to "disk", remote tag-collision checks skipped. Drop --first-release after the initial wave lands.'),P?.mode==="pre"&&V.warnings.push(`Pre-mode is ACTIVE (tag "${P.tag}"); every version produces a prerelease. Exit with \`vis release pre exit\` when ready to ship stable.`),P?.mode==="exit-pending"&&V.warnings.push(`Pre-mode is EXIT-PENDING (was "${P.tag}"); the next \`vis release version\` will consolidate the prerelease and delete pre.json.`),r?.overlapping&&r.overlapping.length>0&&V.warnings.push(`Branch "${o}" matches multiple channel patterns: "${r.branch}" (active) plus ${r.overlapping.map(C=>`"${C}"`).join(", ")}. Reorder channels in vis.config.ts if this is unintentional.`),e.projects&&e.projects.length>0){const{default:C}=await import("./index.js"),S=e.projects;V.releases=V.releases.filter(M=>S.some(E=>M.name===E||C(E,M.name)))}return{branch:o,channel:r?{mode:r.mode,prerelease:r.prerelease,tag:r.tag}:void 0,config:c,cwd:s,depGraph:m,firstRelease:$,packages:l,perPackageConfig:p,plan:V,pm:t,preMode:P}},qs=(...e)=>{let s={...Qe};for(const a of e)s={...s,...a};return s},Ks=(e,s)=>{const a=H.coerce(e)?.version??e;try{return H.gte(a,s)}catch{return!0}},x=async(e,s,a)=>{if(!s||s.trim()==="")return;const n=ee(),t=process.platform==="win32",i=t?"cmd":"sh",d=t?["/c",s]:["-c",s],c=await n.run(i,d,{cwd:e,silent:!1});if(c.exitCode!==0)throw new Error(`${a} failed (exit ${c.exitCode}): ${s}`)},Le=async(e,s,a,n={})=>{const{findConflictingPendingStages:t,readStagedRegistry:i,removePendingStages:d,writeStagedRegistry:c}=await import("./staged-registry.js"),o=e.config.changesDir??ae;let r=a??await i(e.cwd,o);if(r.pending.length===0)return;const u=new Map(e.plan.releases.map(y=>[y.name,y.newVersion])),g=[...u.keys()];let l=t(r,g).filter(y=>u.get(y.name)!==y.version);if(l.length===0)return;let p=[];if(!n.skipSelfHeal){const y=n.runner??ee();p=(await Promise.all(l.map(async b=>{const $=await y.run("npm",["view",`${b.name}@${b.version}`,"dist.tarball","--silent"],{cwd:e.cwd,silent:!0});return $.exitCode===0&&$.stdout.trim().length>0?b.id:void 0}))).filter(b=>b!==void 0)}if(p.length>0){if(r=d(r,p),n.persistSelfHeal!==!1)try{await c(e.cwd,o,r)}catch{}if(l=t(r,g).filter(y=>u.get(y.name)!==y.version),l.length===0)return}const m=l.map(y=>` • ${y.name}@${y.version} — stage ${y.id} (${y.reason}, recorded ${y.stagedAt})`).join(`
10
- `),v=s==="version"?"version":"publish";throw new A({code:"STAGE_PENDING",hint:"Resolve via `vis release stage approve <id>` / `--all` or `vis release stage reject <id>`, commit the updated staged.json, then retry.",message:`Refusing to ${v} — ${l.length} package(s) have a pending stage from a prior wave:
11
- ${m}`})},wa=async(e,s={})=>{if(e.plan.releases.length===0)return{changedFiles:[],deletedFiles:[],plan:e.plan};if(await Le(e,"version",void 0,{persistSelfHeal:!1}),!s.dryRun&&e.config.preVersionCommand&&await x(e.cwd,e.config.preVersionCommand,"preVersionCommand"),!s.dryRun&&e.config.groupPreVersionCommands){const{normaliseGroup:l}=await import("../release/types.js"),p=[...e.config.fixed??[],...e.config.linked??[]].map(v=>l(v)),{default:m}=await import("./index.js");for(const[v,y]of Object.entries(e.config.groupPreVersionCommands)){const P=Number.parseInt(v.replace(/^group-/,""),10),b=p[P];!b||!e.plan.releases.some(D=>b.packages.some(h=>D.name===h||m(h,D.name)))||await x(e.cwd,y,`groupPreVersionCommand[${v}]`)}}const a=await import("node:fs/promises"),{readFileSync:n}=await import("node:fs"),{resolveFormatter:t}=await import("./resolveFormatter.js"),{resolveGroupChangelogRouting:i}=await import("./workspace.js"),d=await t(e.config.changelog,e.cwd),c=new Date().toISOString().slice(0,10),o=i(e.config,e.packages,e.cwd),r=await Ze(e.plan,e.depGraph,{changelogPath:l=>o.get(l.name)??`${l.dir}/CHANGELOG.md`,readChangelog:l=>{try{return n(l,"utf8")}catch{return}},readManifest:l=>{try{return n(l,"utf8")}catch{return}},renderChangelogEntry:l=>d({changeFiles:l.changeFiles,date:c,release:l,target:"changelog"})}),u=[];{const{applyExtraFilesForRelease:l}=await import("./extra-files.js"),p=await Promise.all(e.plan.releases.map(async m=>{const v=e.depGraph.getPackage(m.name);if(!v)return{warnings:[],writes:[]};const y=e.perPackageConfig.get(m.name)?.extraFiles??[],P=e.config.publish?.extraFiles??[];return y.length===0&&P.length===0?{warnings:[],writes:[]}:l(e.cwd,v.dir,m.newVersion,m.name,P,y)}));for(const m of p){for(const v of m.writes)r.writes.push({content:v.content,path:v.path});u.push(...m.warnings)}u.length>0&&e.plan.warnings.push(...u)}if(s.dryRun)return{changedFiles:r.writes.map(l=>l.path),deletedFiles:r.deletions,plan:e.plan};await Promise.all([...r.writes.map(l=>qe(l.path,l.content)),...r.deletions.map(async l=>{try{await Ke(l)}catch{}})]);try{await e.pm.installLockfileOnly({cwd:e.cwd,silent:!0})}catch{}if(!s.dryRun&&e.config.formatChangedFiles&&await Xs(r.writes.map(l=>l.path),e.cwd),e.config.plugins?.length){const{runApplyDraftHooks:l}=await import("./defineReleasePlugin.js");await l({config:e.config,cwd:e.cwd},e.plan)}let g;if(s.commit){const{stageAndCommit:l}=await import("./git.js"),p=ee(),m=["pnpm-lock.yaml","package-lock.json","yarn.lock","bun.lock","bun.lockb"],v=await import("node:path"),y=[];for(const b of m)try{await a.access(v.join(e.cwd,b)),y.push(v.join(e.cwd,b))}catch{}const P=e.config.aggregateRelease===!0||typeof e.config.aggregateRelease=="object"&&e.config.aggregateRelease.enabled;if(e.config.oneCommitPerPackage===!0&&!P&&e.plan.releases.length>0){const b=e.channel?.tag??e.branch??"main",$=r.writes.map(B=>B.path),D=new Set,{releases:h}=e.plan;for(let B=0;B<h.length;B+=1){const I=h[B],_=e.depGraph.getPackage(I.name),V=_?`${_.dir}${v.sep}`:void 0,C=V?$.filter(E=>E.startsWith(V)):[];for(const E of C)D.add(E);const S=B===h.length-1?[...$.filter(E=>!D.has(E)),...r.deletions,...y]:[],M=[...C,...S];M.length!==0&&(g=await l({cwd:e.cwd,runner:p},M,`release(${b}): ${I.name}@${I.newVersion} [skip ci]`,{author:e.config.gitUser}))}}else{const b=s.commitMessage??Qs(e),$=[...r.writes.map(D=>D.path),...r.deletions,...y];g=await l({cwd:e.cwd,runner:p},$,b,{author:e.config.gitUser})}}if(!s.dryRun&&e.config.postVersionCommand&&await x(e.cwd,e.config.postVersionCommand,"postVersionCommand"),!s.dryRun&&e.preMode?.mode==="exit-pending"){const{deletePreMode:l,preModeFilePath:p}=await import("./pre-mode.js"),m=e.config.changesDir??".vis/release";await l(e.cwd,m)&&e.plan.warnings.push(`Pre-mode exited: \`${p(e.cwd,m)}\` was deleted. Commit the deletion so the registry stays consistent across CI runs.`)}return{changedFiles:r.writes.map(l=>l.path),commitSha:g,deletedFiles:r.deletions,plan:e.plan}},Xs=async(e,s)=>{if(e.length===0)return;const{join:a}=await import("node:path");let n;try{const{createRequire:i}=await import("node:module"),{pathToFileURL:d}=await import("node:url"),c=i(a(s,"package.json"));n=await import(d(c.resolve("prettier")).href)}catch{return}const t=await import("node:fs/promises");for(const i of e)try{const d=await n.getFileInfo(i);if(d.ignored||!d.inferredParser)continue;const c=await t.readFile(i,"utf8"),o=await n.resolveConfig(i),r=await n.format(c,{...o,filepath:i});r!==c&&await t.writeFile(i,r)}catch{}},Qs=e=>{const s=e.channel?.tag??e.branch??"main",{releases:a}=e.plan,n=a.length<=3?a.map(i=>`${i.name}@${i.newVersion}`).join(", "):`version ${a.length} packages`,t=a.map(i=>`- ${i.name}: ${i.oldVersion} → ${i.newVersion}`).join(`
8
+ `}`},le=e=>/^[a-z0-9-]/.test(e)?e:`"${e}"`,Rs=e=>{const s=new Map,a=t=>t==="major"?3:t==="minor"?2:t==="patch"?1:0,n=(t,o)=>{const p=s.get(t);(p===void 0||a(o)>a(p))&&s.set(t,o)};for(const t of e)if("bumps"in t.payload)for(const[o,p]of Object.entries(t.payload.bumps))n(o,p);else n(t.payload.package,t.payload.bump);return s},Ce=(e,s)=>s.filter(a=>"bumps"in a.payload?Object.hasOwn(a.payload.bumps,e):a.payload.package===e),Ns=new Set(["README.md","readme.md"]),As=async e=>{const s=e.changesDir??ne,a=ge(e.cwd),n=ge(e.cwd,s),t=n,o=a.endsWith(Z)?a:`${a}${Z}`;if(n!==a&&!n.startsWith(o))throw new N({code:"CONFIG_INVALID",message:`changesDir resolves outside the workspace: ${n} (workspace: ${a}). Set release.changesDir to a path inside the repo.`});const p=[];let c;try{c=await Ye(t)}catch(l){if(l.code==="ENOENT")return{files:[],warnings:[]};throw new N({cause:l,code:"CONFIG_INVALID",message:`Cannot read change-files directory ${t}: ${l.message}`})}const r=c.filter(l=>!Ns.has(l)&&l.endsWith(".md"));return{files:await Promise.all(r.map(async l=>{const u=es(t,l),d=await ze(u,"utf8");return Cs(d,u)})),warnings:p}},Es=(e,s)=>{if(!s)return;if(Object.hasOwn(s,e)){const n=Object.keys(s).filter(t=>t!==e&&Ne(t)&&re(t,e));return Re(e,s[e],n)}const a=[];for(const[n]of Object.entries(s))Ne(n)&&re(n,e)&&a.push(n);if(a.length>0){const[n,...t]=a;return Re(e,s[n],t)}},Re=(e,s,a=[])=>{let{tag:n}=s;return n==="branch-name"&&(n=Is(e)),{branch:e,mode:s.mode??"auto-publish",...a.length>0?{overlapping:a}:{},prerelease:s.prerelease,range:s.range,tag:n}},Is=e=>e.toLowerCase().replaceAll(/[^a-z0-9.-]/g,"-").replaceAll(/^-+|-+$/g,"")||"branch",_s=/[!()*+?@[\]{|}]/,Ne=e=>_s.test(e),Ms=async(e,s)=>{try{const a=await s.run("git",["rev-parse","--abbrev-ref","HEAD"],{cwd:e,silent:!0});if(a.exitCode!==0)return;const n=a.stdout.trim();return n==="HEAD"||n===""?void 0:n}catch{return}},Ss=["dependencies","devDependencies","peerDependencies","optionalDependencies"];class Ds{dependents;dependenciesByPackage;packagesByName;constructor(s){this.dependents=new Map,this.dependenciesByPackage=new Map,this.packagesByName=new Map;for(const a of s){if(this.packagesByName.has(a.name))throw new N({code:"DUPLICATE_PACKAGE_NAME",message:`Duplicate package name "${a.name}" — found at ${this.packagesByName.get(a.name).dir} and ${a.dir}.`,packageName:a.name});this.packagesByName.set(a.name,a),this.dependents.set(a.name,[]),this.dependenciesByPackage.set(a.name,[])}for(const a of s)for(const n of Ss){const t=a.manifest[n];if(!(!t||typeof t!="object"))for(const[o,p]of Object.entries(t))this.packagesByName.has(o)&&(this.dependents.get(o).push({kind:n,name:a.name,range:p}),this.dependenciesByPackage.get(a.name).push({kind:n,name:o,range:p}))}}getPackage(s){return this.packagesByName.get(s)}allPackages(){return[...this.packagesByName.values()]}isInternal(s){return this.packagesByName.has(s)}getDependents(s){return this.dependents.get(s)??[]}getDependencies(s){return this.dependenciesByPackage.get(s)??[]}topologicalSort(s){const a=s?new Set(s):new Set(this.packagesByName.keys()),n=new Set,t=new Set,o=[],p=(c,r)=>{if(!n.has(c)){if(t.has(c)){const i=r.indexOf(c),l=i===-1?[...r,c]:[...r.slice(i),c];throw new N({code:"CYCLIC_DEPENDENCY",message:`Cyclic dependency detected: ${l.join(" → ")}`})}t.add(c);for(const i of this.getDependencies(c))a.has(i.name)&&i.kind!=="devDependencies"&&p(i.name,[...r,c]);t.delete(c),n.add(c),o.push(c)}};for(const c of a)p(c,[]);return o}get size(){return this.packagesByName.size}}const js=/\{(name|version|previousVersion|date|repo|contributors)\}/g,Fs=(e,s)=>e.replaceAll(js,(a,n)=>s[n]??""),Vs=(e,s={})=>{const a=new Set;for(const o of s.internalAuthors??[]){const p=o.trim().toLowerCase().replace(/^@/,"");p.length>0&&a.add(p)}const n=new Set,t=[];for(const o of e){const p=o.meta?.author;if(p)for(const c of p.split(",")){const r=c.trim();if(!r)continue;const i=r.replace(/^@/,"");if(i.length===0)continue;const l=i.toLowerCase();n.has(l)||a.has(l)||(n.add(l),t.push(ns(r)))}}return t.length===0?"":t.map(o=>`- ${o}`).join(`
9
+ `)},ie=e=>{const{current:s,prerelease:a}=e;let{bump:n}=e;if(!W.valid(s))throw new N({code:"CONFIG_INVALID",message:`Invalid current version: ${JSON.stringify(s)}`});const t=W.parse(s),o=t.prerelease[0],p=t.prerelease.length>0;if(t.major===0&&e.bumpMinorPreMajor&&(n==="major"&&(n="minor"),n==="minor"&&e.bumpPatchForMinorPreMajor&&(n="patch")),n==="none")return(o??void 0)===(a??void 0)?s:!p&&a?`${t.major}.${t.minor}.${t.patch}-${a}.0`:p&&!a?`${t.major}.${t.minor}.${t.patch}`:p&&a?`${t.major}.${t.minor}.${t.patch}-${a}.0`:s;if(p&&a&&o===a){const r=Ts(t);if(Ae[n]<=Ae[r]){const u=W.inc(s,"prerelease",a);if(!u)throw new N({code:"CONFIG_INVALID",message:`semver.inc returned null for prerelease bump on ${s}`});return u}const i=`${t.major}.${t.minor}.${t.patch}`,l=W.inc(i,n);if(!l)throw new N({code:"CONFIG_INVALID",message:`semver.inc returned null for ${n} bump on ${i}`});return`${l}-${a}.0`}if(a){const r=`${t.major}.${t.minor}.${t.patch}`,i=W.inc(r,n);if(!i)throw new N({code:"CONFIG_INVALID",message:`semver.inc returned null for ${n} bump on ${r}`});return`${i}-${a}.0`}if(p){const r=`${t.major}.${t.minor}.${t.patch}`,i=W.inc(r,n);if(!i)throw new N({code:"CONFIG_INVALID",message:`semver.inc returned null for ${n} bump on ${r}`});return i}const c=W.inc(s,n);if(!c)throw new N({code:"CONFIG_INVALID",message:`semver.inc returned null for ${n} bump on ${s}`});return c},Ae={major:3,minor:2,patch:1},Ts=e=>e.minor===0&&e.patch===0?"major":e.patch===0?"minor":"patch",Ls=(e,s)=>{const a=Se(s);return a?W.satisfies(e,a,{includePrerelease:!0}):!0},Se=e=>{if(!e||e.startsWith("catalog:")||e==="*"||e==="workspace:*"||e==="workspace:^"||e==="workspace:~")return null;if(e.startsWith("workspace:")){const s=e.slice(10);return s==="*"||s==="^"||s==="~"?null:s}if(e.startsWith("npm:")){const s=e.lastIndexOf("@");return s>4?e.slice(s+1):null}return e},de=100,z=(e,s,a,n,{isCascadeBump:t=!1,isDependencyBump:o=!1,isGroupBump:p=!1,source:c}={})=>{const r=e.get(s);if(r){const i=r.type;return r.type=ue(r.type,a),r.reasons.add(n),o&&(r.isDependencyBump=!0),p&&(r.isGroupBump=!0),t&&(r.isCascadeBump=!0),c&&r.sources.set(c.name,{bumpType:c.bumpType,newVersion:c.newVersion}),r.type!==i}return e.set(s,{isCascadeBump:t,isDependencyBump:o,isGroupBump:p,name:s,proactiveSeen:!1,reasons:new Set([n]),sources:c?new Map([[c.name,{bumpType:c.bumpType,newVersion:c.newVersion}]]):new Map,type:a}),!0},Os=(e,s,a,n)=>{const t=a?.get(e)?.dependencyBumpRules?.[s];if(t!==void 0)return t;const o=n.dependencyBumpRules?.[s];return o!==void 0?o:qe[s]??!1},Ee=(e,s)=>te(e)>=te(s),Ie=(e,s)=>s==="match"?e:s,Bs=(e,s)=>s===!0?!0:Array.isArray(s)?s.includes(e):!1,Gs=10,Hs=(e,s,a,n,t,o,p)=>{let c=!1;for(const r of e.values()){const i=s.getPackage(r.name);if(!i)continue;const l=n.currentVersions?.get(r.name)??i.version,u=a.get(r.name)??ie({bump:r.type,bumpMinorPreMajor:n.bumpMinorPreMajor,bumpPatchForMinorPreMajor:n.bumpPatchForMinorPreMajor,current:l,prerelease:n.prerelease});a.set(r.name,u);for(const d of s.getDependents(r.name)){if(d.kind==="devDependencies"){if(!Bs(r.name,o.bumpDevDependencies))continue;if(z(e,d.name,"patch","DEVDEPENDENCY_BUMPED",{isDependencyBump:!0,source:{bumpType:r.type,name:r.name,newVersion:u}})&&(c=!0,a.delete(d.name)),o.bumpDevDependencies===!0){let v=p.get(r.name);v||(v=new Set,p.set(r.name,v)),v.add(d.name)}continue}const g=Se(d.range);if(g===null||Ls(u,g))continue;let f,y="DEPENDENCY_OUT_OF_RANGE";d.kind==="peerDependencies"?(f=r.type==="none"?"patch":r.type,y="PEER_DEP_MATCH",g.startsWith("^0.")&&f!=="patch"&&t.push(`^0.x peer dep "${r.name}" → "${d.name}" produced a ${f} bump. Consider widening the range manually.`)):f="patch",z(e,d.name,f,y,{isDependencyBump:!0,source:{bumpType:r.type,name:r.name,newVersion:u}})&&(c=!0,a.delete(d.name))}}return c},Us=(e,s,a)=>{let n=!1;for(const t of a.fixed??[]){const o=ve(t),p=oe(o.packages,s),c=p.filter(i=>e.has(i));if(c.length===0)continue;let r="none";for(const i of c)r=ue(r,e.get(i).type);for(const i of p){if(!s.isInternal(i))continue;z(e,i,r,"FIXED_GROUP",{isGroupBump:!0})&&(n=!0)}}for(const t of a.linked??[]){const o=ve(t),c=oe(o.packages,s).filter(i=>e.has(i));if(c.length===0)continue;let r="none";for(const i of c)r=ue(r,e.get(i).type);for(const i of c)z(e,i,r,"LINKED_GROUP",{isGroupBump:!0})&&(n=!0)}return n},_e=new WeakMap,Ws=/[!()*+?@[\]{|}]/,oe=(e,s)=>{let a=_e.get(s);a||(a={allNames:s.allPackages().map(t=>t.name),matched:new Map},_e.set(s,a));const n=new Set;for(const t of e){if(!Ws.test(t)){n.add(t);continue}let o=a.matched.get(t);o||(o=a.allNames.filter(p=>re(t,p)),a.matched.set(t,o));for(const p of o)n.add(p)}return[...n]},Ys=(e,s,a,n,t,o)=>{let p=!1;const c=n.updateInternalDependencies??"out-of-range",r=i=>{const l=o.get(i.name);if(l!==void 0)return l;const u=ie({bump:i.type,bumpMinorPreMajor:t.bumpMinorPreMajor,bumpPatchForMinorPreMajor:t.bumpPatchForMinorPreMajor,current:t.currentVersions?.get(i.name)??a.getPackage(i.name).version,prerelease:t.prerelease});return o.set(i.name,u),u};for(const i of s){if("bumps"in i.payload||!i.payload.cascade)continue;const l=e.get(i.payload.package);if(!l)continue;const u=o.get(l.name)??ie({bump:l.type,bumpMinorPreMajor:t.bumpMinorPreMajor,bumpPatchForMinorPreMajor:t.bumpPatchForMinorPreMajor,current:t.currentVersions?.get(l.name)??a.getPackage(l.name).version,prerelease:t.prerelease});o.set(l.name,u);for(const[d,g]of Object.entries(i.payload.cascade))for(const f of oe([d],a)){if(!a.isInternal(f))continue;z(e,f,g,"CASCADE",{isCascadeBump:!0,source:{bumpType:l.type,name:l.name,newVersion:u}})&&(p=!0)}}for(const i of e.values()){const l=t.perPackageConfig?.get(i.name)?.cascadeTo;if(l)for(const[u,d]of Object.entries(l)){if(!Ee(i.type,d.trigger))continue;const g=Ie(i.type,d.bumpAs),f=r(i);for(const y of oe([u],a)){if(!a.isInternal(y))continue;z(e,y,g,"CASCADE_TO",{isCascadeBump:!0,source:{bumpType:i.type,name:i.name,newVersion:f}})&&(p=!0)}}}if(c==="out-of-range")return p;for(const i of e.values())if(!i.proactiveSeen&&!(c==="minor"&&te(i.type)<te("minor"))){for(const l of a.getDependents(i.name)){const u=Os(l.name,l.kind,t.perPackageConfig,n);if(u===!1||!Ee(i.type,u.trigger))continue;const d=Ie(i.type,u.bumpAs);if(d==="none")continue;const g=r(i);z(e,l.name,d,"DEPENDENCY_BUMPED",{isDependencyBump:!0,source:{bumpType:i.type,name:i.name,newVersion:g}})&&(p=!0)}i.proactiveSeen=!0}return p},zs=(e,s,a,n={})=>{const t=e.filter(g=>fe(g)),o=t.length>0?e.filter(g=>!fe(g)):e,p=new Map,c=[],r=new Map;for(const[g,f]of Rs(o).entries()){if(!s.isInternal(g)){c.push(`Change file references non-workspace package "${g}" — ignored.`);continue}f!=="none"&&z(p,g,f,"EXPLICIT")}for(const g of n.catalogConsumers??[]){if(!s.isInternal(g.packageName))continue;const f=`catalog:${g.catalog}/${g.dep}`;z(p,g.packageName,"patch","CATALOG_CHANGED",{isDependencyBump:!0,source:{bumpType:"patch",name:f,newVersion:g.newVersion??""}})}const i=new Map,l=g=>{const f=Ce(g,o).map(w=>"releaseAs"in w.payload?{file:w.path,version:w.payload.releaseAs}:void 0).filter(w=>w!==void 0&&typeof w.version=="string"),y=new Set(f.map(w=>w.version));if(y.size>1)throw new N({code:"BUMP_FILE_INVALID",message:`Conflicting releaseAs values for ${g}: ${[...y].join(", ")}. Found in: ${f.map(w=>w.file).join(", ")}. Consolidate the change files to a single override.`,packageName:g});return f[0]?.version},u=new Map;for(const g of p.values()){if(g.type==="none")continue;const f=l(g.name);f&&(u.set(g.name,f),r.set(g.name,f))}for(let g=0;g<de;g+=1){const f=Hs(p,s,r,n,c,a,i),y=Us(p,s,a),w=Ys(p,o,s,a,n,r);if(!f&&!y&&!w)break;g===de-1&&c.push(`Release plan did not converge after ${de} iterations — releasing the current best plan. This usually indicates a config bug (cyclic cascade?).`)}for(const[g,f]of i){const y=f.size;y>Gs&&c.push(`bumpDevDependencies: true triggered ${y} patch-cascades to distinct dependents from a single devdep bump (${g}). Consider scoping with the array form ['only', 'these', 'sources'].`)}const d=[];for(const g of p.values()){if(g.type==="none")continue;const f=s.getPackage(g.name);if(!f)continue;const y=Ce(g.name,o),w=u.get(g.name),P=n.currentVersions?.get(g.name)??f.version,v=w??r.get(g.name)??ie({bump:g.type,bumpMinorPreMajor:n.bumpMinorPreMajor,bumpPatchForMinorPreMajor:n.bumpPatchForMinorPreMajor,current:P,prerelease:n.prerelease});d.push({changeFiles:y,isCascadeBump:g.isCascadeBump,isDependencyBump:g.isDependencyBump,isGroupBump:g.isGroupBump,name:g.name,newVersion:v,oldVersion:P,reasons:[...g.reasons],sources:[...g.sources.entries()].map(([$,D])=>({name:$,...D})),type:g.type})}if(d.sort((g,f)=>g.name.localeCompare(f.name)),t.length>0){const g=gs(t,d);for(const[f,y]of g.injectionsByPackage){const w=d.find(P=>P.name===f);w&&(w.changeFiles=[...w.changeFiles,...y])}return{consumedChangeFiles:[...o,...g.consumed],releases:d,warnings:c}}return{consumedChangeFiles:o,releases:d,warnings:c}},De=async(e,s,a={})=>{const n=await e.listPackages(),t=[],o=new Map,p=new Map,c=u=>{const d=ge(u);try{return be.native(d)}catch{try{return be(d)}catch{return d}}},r=a.cwd===void 0?void 0:c(a.cwd),i=u=>u.replaceAll("\\","/"),l=[];for(const{manifest:u,manifestPath:d}of n){const g=he(typeof u.name=="string"?u.name:"",u,s);if(u.napi!==void 0||g.versionActions==="native-addon"){const y=i(d.replace(/[/\\]package\.json$/i,""));l.push(`${y}/npm/`)}}for(const{manifest:u,manifestPath:d}of n){if(typeof u.name!="string"||u.name==="")continue;const g=i(d.replace(/[/\\]package\.json$/i,""));if(l.some(w=>g.startsWith(w)))continue;if(ts(u.name),p.has(u.name))throw new N({code:"DUPLICATE_PACKAGE_NAME",message:`Duplicate package name "${u.name}" — at ${p.get(u.name)} and ${d}.`,packageName:u.name});if(p.set(u.name,d),r!==void 0){const w=c(d),P=r.endsWith(Z)?r:`${r}${Z}`,v=D=>Z==="\\"?D.toLowerCase():D,$=v(w);if($!==v(r)&&!$.startsWith(v(P)))throw new N({code:"CONFIG_INVALID",message:`Package manifest is outside the workspace: ${d} (workspace: ${r}).`,packageName:u.name})}const f=he(u.name,u,s);if(!je(u.name,u,f,s))continue;const y=d.replace(/[/\\]package\.json$/i,"");t.push({dir:y,manifest:u,manifestPath:d,name:u.name,private:u.private===!0,version:typeof u.version=="string"?u.version:"0.0.0"}),o.set(u.name,f)}return{packages:t,perPackageConfig:o}},he=(e,s,a)=>{const n=a.packages?.[e]??{},t=s["vis-release"]??{};return{...n,...t}},je=(e,s,a,n)=>a.managed===!1?!1:a.managed===!0?!0:Me(e,n.ignore??[])?!1:Me(e,n.include??[])?!0:s.private===!0&&!(n.privatePackages?.version??!1)?!1:n.defaultManaged??!1,Me=(e,s)=>s.some(a=>re(a,e)),Fe=(e,s)=>s.versionActions!==void 0?s.versionActions:e.manifest.napi!==void 0?"native-addon":e.private?"private":"npm",ha=Object.defineProperty({__proto__:null,discoverPackages:De,isPackageManaged:je,mergePerPackageConfig:he,resolveVersionActionsId:Fe},Symbol.toStringTag,{value:"Module"}),wa=async(e={})=>{const s=e.cwd??process.cwd(),a=ee(),n=await rs(s),t=is(n,a),o=await t.detectVersion(s);if(o&&!Js(o,t.minVersion))throw new N({code:"PM_VERSION_TOO_LOW",hint:`pnpm install -g ${t.id}@latest (or your equivalent)`,message:`${t.id} version ${o} is below the required minimum ${t.minVersion}. Upgrade ${t.id} to enable release operations.`});let p={};try{const{loadVisConfig:R}=await import("./CONFIG_FILES.js"),F=await R(s);F.release&&(p=F.release)}catch(R){const{code:F}=R,M=R.message??"";if(!(F==="ENOENT"||F==="MODULE_NOT_FOUND"||/cannot find module/i.test(M)))throw R}const c=Ks(p,e.config??{});!c.acknowledgeUnstable&&process.env.VIS_RELEASE_SUPPRESS_UNSTABLE!=="1"&&process.stderr.write("[vis release] ⚠ This subsystem is flagged unstable. Set `release.acknowledgeUnstable: true` in vis.config.ts to suppress this warning. (RFC §21.2)\n");const r=e.channel??await Ms(s,a),i=r?Es(r,c.channels):void 0,l=await import("node:fs/promises"),u={listPackages:async()=>{const R=await t.listWorkspacePackages(s);return(await Promise.all(R.map(async M=>{const _=`${M.path}/package.json`;try{const H=await l.readFile(_,"utf8");return{manifest:JSON.parse(H),manifestPath:_}}catch{return}}))).filter(M=>M!==void 0)}},{packages:d,perPackageConfig:g}=await De(u,c,{cwd:s}),f=new Ds(d),{files:y}=await As({changesDir:c.changesDir,cwd:s}),{readPreMode:w}=await import("./pre-mode.js"),P=await w(s,c.changesDir??".vis/release");let v;P?.mode==="pre"?v=P.tag:P?.mode==="exit-pending"?v=void 0:v=i?.prerelease;const $=e.firstRelease===!0,{resolveCurrentVersionsForWorkspace:D}=await import("./version-resolver.js"),{versions:h,warnings:O}=await D(d,f,c,g,{cwd:s,firstRelease:$,pm:t,runner:a,skipRegistryLookup:e.skipRegistryLookup===!0}),I=[],S=[];if(c.detectCatalogChanges===!0)try{const{detectCatalogChanges:R,findCatalogConsumers:F,parseCatalogs:M}=await import("./catalog-detector.js"),_=await t.readCatalogYaml(s),H=M(_);let G;try{const C=await a.run("git",["show","HEAD~1:pnpm-workspace.yaml"],{cwd:s,silent:!0});C.exitCode===0&&(G=C.stdout)}catch{}const J=M(G),m=R(J,H).filter(C=>C.oldVersion!==void 0&&C.newVersion!==void 0);if(m.length>0){const C=F(d,H);for(const A of m){const T=C.get(A.catalog)?.get(A.dep)??[];for(const j of T)I.push({catalog:A.catalog,dep:A.dep,newVersion:A.newVersion,oldVersion:A.oldVersion,packageName:j.packageName})}I.length>0&&S.push(`Catalog change-detection: ${m.length} catalog dep(s) moved; ${I.length} consumer-package patch bump(s) tagged CATALOG_CHANGED.`)}}catch(R){S.push(`Catalog change-detection skipped: ${R.message}.`)}const V=zs(y,f,c,{bumpMinorPreMajor:c.bumpMinorPreMajor,bumpPatchForMinorPreMajor:c.bumpPatchForMinorPreMajor,catalogConsumers:I,currentVersions:h,perPackageConfig:g,prerelease:v});if(S.length>0&&V.warnings.push(...S),O.length>0&&V.warnings.push(...O),$&&V.warnings.push('First-release mode: currentVersionResolver forced to "disk", remote tag-collision checks skipped. Drop --first-release after the initial wave lands.'),P?.mode==="pre"&&V.warnings.push(`Pre-mode is ACTIVE (tag "${P.tag}"); every version produces a prerelease. Exit with \`vis release pre exit\` when ready to ship stable.`),P?.mode==="exit-pending"&&V.warnings.push(`Pre-mode is EXIT-PENDING (was "${P.tag}"); the next \`vis release version\` will consolidate the prerelease and delete pre.json.`),i?.overlapping&&i.overlapping.length>0&&V.warnings.push(`Branch "${r}" matches multiple channel patterns: "${i.branch}" (active) plus ${i.overlapping.map(R=>`"${R}"`).join(", ")}. Reorder channels in vis.config.ts if this is unintentional.`),e.projects&&e.projects.length>0){const{default:R}=await import("./index.js"),F=e.projects;V.releases=V.releases.filter(M=>F.some(_=>M.name===_||R(_,M.name)))}return{branch:r,channel:i?{mode:i.mode,prerelease:i.prerelease,tag:i.tag}:void 0,config:c,cwd:s,depGraph:f,firstRelease:$,packages:d,perPackageConfig:g,plan:V,pm:t,preMode:P}},Ks=(...e)=>{let s={...Xe};for(const a of e)s={...s,...a};return s},Js=(e,s)=>{const a=W.coerce(e)?.version??e;try{return W.gte(a,s)}catch{return!0}},x=async(e,s,a)=>{if(!s||s.trim()==="")return;const n=ee(),t=process.platform==="win32",o=t?"cmd":"sh",p=t?["/c",s]:["-c",s],c=await n.run(o,p,{cwd:e,silent:!1});if(c.exitCode!==0)throw new Error(`${a} failed (exit ${c.exitCode}): ${s}`)},Ve=async(e,s,a,n={})=>{const{findConflictingPendingStages:t,readStagedRegistry:o,removePendingStages:p,writeStagedRegistry:c}=await import("./staged-registry.js"),r=e.config.changesDir??ne;let i=a??await o(e.cwd,r);if(i.pending.length===0)return;const l=new Map(e.plan.releases.map(w=>[w.name,w.newVersion])),u=[...l.keys()];let d=t(i,u).filter(w=>l.get(w.name)!==w.version);if(d.length===0)return;let g=[];if(!n.skipSelfHeal){const w=n.runner??ee();g=(await Promise.all(d.map(async v=>{const $=await w.run("npm",["view",`${v.name}@${v.version}`,"dist.tarball","--silent"],{cwd:e.cwd,silent:!0});return $.exitCode===0&&$.stdout.trim().length>0?v.id:void 0}))).filter(v=>v!==void 0)}if(g.length>0){if(i=p(i,g),n.persistSelfHeal!==!1)try{await c(e.cwd,r,i)}catch{}if(d=t(i,u).filter(w=>l.get(w.name)!==w.version),d.length===0)return}const f=d.map(w=>` • ${w.name}@${w.version} — stage ${w.id} (${w.reason}, recorded ${w.stagedAt})`).join(`
10
+ `),y=s==="version"?"version":"publish";throw new N({code:"STAGE_PENDING",hint:"Resolve via `vis release stage approve <id>` / `--all` or `vis release stage reject <id>`, commit the updated staged.json, then retry.",message:`Refusing to ${y} — ${d.length} package(s) have a pending stage from a prior wave:
11
+ ${f}`})},ya=async(e,s={})=>{if(e.plan.releases.length===0)return{changedFiles:[],deletedFiles:[],plan:e.plan};if(await Ve(e,"version",void 0,{persistSelfHeal:!1}),!s.dryRun&&e.config.preVersionCommand&&await x(e.cwd,e.config.preVersionCommand,"preVersionCommand"),!s.dryRun&&e.config.groupPreVersionCommands){const{normaliseGroup:d}=await import("../release/types.js"),g=[...e.config.fixed??[],...e.config.linked??[]].map(y=>d(y)),{default:f}=await import("./index.js");for(const[y,w]of Object.entries(e.config.groupPreVersionCommands)){const P=Number.parseInt(y.replace(/^group-/,""),10),v=g[P];!v||!e.plan.releases.some(D=>v.packages.some(h=>D.name===h||f(h,D.name)))||await x(e.cwd,w,`groupPreVersionCommand[${y}]`)}}const a=await import("node:fs/promises"),{readFileSync:n}=await import("node:fs"),{resolveFormatter:t}=await import("./resolveFormatter.js"),{resolveGroupChangelogRouting:o}=await import("./workspace.js"),p=await t(e.config.changelog,e.cwd),c=new Date().toISOString().slice(0,10),r=o(e.config,e.packages,e.cwd),i=await Qe(e.plan,e.depGraph,{changelogPath:d=>r.get(d.name)??`${d.dir}/CHANGELOG.md`,readChangelog:d=>{try{return n(d,"utf8")}catch{return}},readManifest:d=>{try{return n(d,"utf8")}catch{return}},renderChangelogEntry:d=>p({changeFiles:d.changeFiles,date:c,release:d,target:"changelog"})}),l=[];{const{applyExtraFilesForRelease:d}=await import("./extra-files.js"),g=await Promise.all(e.plan.releases.map(async f=>{const y=e.depGraph.getPackage(f.name);if(!y)return{warnings:[],writes:[]};const w=e.perPackageConfig.get(f.name)?.extraFiles??[],P=e.config.publish?.extraFiles??[];return w.length===0&&P.length===0?{warnings:[],writes:[]}:d(e.cwd,y.dir,f.newVersion,f.name,P,w)}));for(const f of g){for(const y of f.writes)i.writes.push({content:y.content,path:y.path});l.push(...f.warnings)}l.length>0&&e.plan.warnings.push(...l)}if(s.dryRun)return{changedFiles:i.writes.map(d=>d.path),deletedFiles:i.deletions,plan:e.plan};await Promise.all([...i.writes.map(d=>Ke(d.path,d.content)),...i.deletions.map(async d=>{try{await Je(d)}catch{}})]);try{await e.pm.installLockfileOnly({cwd:e.cwd,silent:!0})}catch{}if(!s.dryRun&&e.config.formatChangedFiles&&await qs(i.writes.map(d=>d.path),e.cwd),e.config.plugins?.length){const{runApplyDraftHooks:d}=await import("./defineReleasePlugin.js");await d({config:e.config,cwd:e.cwd},e.plan)}let u;if(s.commit){const{stageAndCommit:d}=await import("./git.js"),g=ee(),f=["pnpm-lock.yaml","package-lock.json","yarn.lock","bun.lock","bun.lockb"],y=await import("node:path"),w=[];for(const v of f)try{await a.access(y.join(e.cwd,v)),w.push(y.join(e.cwd,v))}catch{}const P=e.config.aggregateRelease===!0||typeof e.config.aggregateRelease=="object"&&e.config.aggregateRelease.enabled;if(e.config.oneCommitPerPackage===!0&&!P&&e.plan.releases.length>0){const v=e.channel?.tag??e.branch??"main",$=i.writes.map(O=>O.path),D=new Set,{releases:h}=e.plan;for(let O=0;O<h.length;O+=1){const I=h[O],S=e.depGraph.getPackage(I.name),V=S?`${S.dir}${y.sep}`:void 0,R=V?$.filter(_=>_.startsWith(V)):[];for(const _ of R)D.add(_);const F=O===h.length-1?[...$.filter(_=>!D.has(_)),...i.deletions,...w]:[],M=[...R,...F];M.length!==0&&(u=await d({cwd:e.cwd,runner:g},M,`release(${v}): ${I.name}@${I.newVersion} [skip ci]`,{author:e.config.gitUser}))}}else{const v=s.commitMessage??Xs(e),$=[...i.writes.map(D=>D.path),...i.deletions,...w];u=await d({cwd:e.cwd,runner:g},$,v,{author:e.config.gitUser})}}if(!s.dryRun&&e.config.postVersionCommand&&await x(e.cwd,e.config.postVersionCommand,"postVersionCommand"),!s.dryRun&&e.preMode?.mode==="exit-pending"){const{deletePreMode:d,preModeFilePath:g}=await import("./pre-mode.js"),f=e.config.changesDir??".vis/release";await d(e.cwd,f)&&e.plan.warnings.push(`Pre-mode exited: \`${g(e.cwd,f)}\` was deleted. Commit the deletion so the registry stays consistent across CI runs.`)}return{changedFiles:i.writes.map(d=>d.path),commitSha:u,deletedFiles:i.deletions,plan:e.plan}},qs=async(e,s)=>{if(e.length===0)return;const{join:a}=await import("node:path");let n;try{const{createRequire:o}=await import("node:module"),{pathToFileURL:p}=await import("node:url"),c=o(a(s,"package.json"));n=await import(p(c.resolve("prettier")).href)}catch{return}const t=await import("node:fs/promises");for(const o of e)try{const p=await n.getFileInfo(o);if(p.ignored||!p.inferredParser)continue;const c=await t.readFile(o,"utf8"),r=await n.resolveConfig(o),i=await n.format(c,{...r,filepath:o});i!==c&&await t.writeFile(o,i)}catch{}},Xs=e=>{const s=e.channel?.tag??e.branch??"main",{releases:a}=e.plan,n=a.length<=3?a.map(o=>`${o.name}@${o.newVersion}`).join(", "):`version ${a.length} packages`,t=a.map(o=>`- ${o.name}: ${o.oldVersion} → ${o.newVersion}`).join(`
12
12
  `);return`release(${s}): ${n} [skip ci]
13
13
 
14
- ${t}`},pe=async(e,s,a,n,t)=>{const{stageAndCommitFile:i}=await import("./git.js"),{stateFilePath:d}=await import("./state.js");try{const c=await i({cwd:e.cwd,runner:s},d(e.cwd,a,!0),`chore(release): ${n} publish lock [skip ci]`,{author:e.config.gitUser,push:!t.noPush,sign:e.config.gitSignCommits===!0});!t.noPush&&c.committed&&!c.pushed&&process.stderr.write(`[vis release] Warning: publish lock (${n}) was committed locally but could not be pushed — cross-runner resume may use a stale lock.
14
+ ${t}`},pe=async(e,s,a,n,t)=>{const{stageAndCommitFile:o}=await import("./git.js"),{stateFilePath:p}=await import("./state.js");try{const c=await o({cwd:e.cwd,runner:s},p(e.cwd,a,!0),`chore(release): ${n} publish lock [skip ci]`,{author:e.config.gitUser,push:!t.noPush,sign:e.config.gitSignCommits===!0});!t.noPush&&c.committed&&!c.pushed&&process.stderr.write(`[vis release] Warning: publish lock (${n}) was committed locally but could not be pushed — cross-runner resume may use a stale lock.
15
15
  `)}catch(c){process.stderr.write(`[vis release] Warning: could not commit publish lock (${n}): ${c.message}
16
- `)}},ya=async(e,s={})=>{const a={failed:[],published:[],skipped:[],tags:[],tagsPushed:!1},n=ee();if(e.plan.releases.length===0)return a;if(!s.dryRun&&e.channel?.mode==="version-pr"){const{createRemoteClient:o,detectRemoteProvider:r}=await import("./detect.js"),u=await r(e.cwd,n,e.config.provider),l=await o(u,{githubHost:e.config.githubHost,gitlabHost:e.config.gitlabHost,httpProxy:e.config.httpProxy}).detectRepoSlug(e.cwd,n),p=e.config.versionPr?.branch??"vis-release/version-packages";if(l)try{const m=await n.run("gh",["pr","list","--head",p,"--state","open","--json","number"],{cwd:e.cwd,silent:!0});if(m.exitCode===0&&m.stdout.trim()&&m.stdout.trim()!=="[]"){const v=JSON.parse(m.stdout);if(v[0])return a.failed.push({name:"_preflight",reason:`Open release PR #${v[0].number} exists. Merge or close it before publishing locally. (Override: --no-push then \`git push --tags\` manually.)`}),a}}catch{}}if(!s.dryRun&&e.config.prePublishCommand)try{await x(e.cwd,e.config.prePublishCommand,"prePublishCommand")}catch(o){return a.failed.push({name:"_prePublishCommand",reason:o.message}),a}const t=e.config.changesDir??ae,{acquireLock:i,releaseLock:d}=await import("./state.js");let c=!1;if(!s.dryRun)try{await i(e.cwd,t),c=!0}catch(o){return a.failed.push({name:"_lock",reason:o.message}),a}try{const{clearState:o,filterPlanByState:r,newState:u,readState:g,writeState:l}=await import("./state.js"),{readStagedRegistry:p,removePendingStages:m,upsertPendingStages:v,writeStagedRegistry:y}=await import("./staged-registry.js"),P=e.config.changesDir??ae,b=e.config.publish?.lockInGit===!0;let $=s.resume||b?await g(e.cwd,P,b):void 0;$&&b&&($.channel=e.channel?.tag);const D=async()=>{s.dryRun||!$||(await l(e.cwd,P,$,b),b&&await pe(e,n,P,"progress",{noPush:s.noPush}))};let h=await p(e.cwd,P);await Le(e,"publish",h,{runner:n}),h=await p(e.cwd,P);const B={...h,pending:[...h.pending]};let{releases:I}=e.plan;$?I=r(I,$):($=u(e.channel?.tag,e.plan.releases),s.dryRun||(await l(e.cwd,P,$,b),b&&await pe(e,n,P,"open",{noPush:s.noPush})));const _=await e.pm.readCatalogYaml(e.cwd),V=xe(_),C=e.depGraph.topologicalSort(I.map(f=>f.name)),S=new Map(I.map(f=>[f.name,f])),M=new Set,E=new Map;for(const f of e.plan.releases){const k=e.depGraph.getPackage(f.name);k&&E.set(f.name,{...k.manifest,version:f.newVersion})}const U={config:e.config,cwd:e.cwd},G=e.config.plugins?.length?await import("./defineReleasePlugin.js"):void 0;for(const f of C){const k=S.get(f);if(!k){a.skipped.push({name:f,reason:"topo-sort returned a name not in the release plan (internal bug)"});continue}const R=e.depGraph.getPackage(f);if(!R)continue;const O=[...new Set(e.depGraph.getDependencies(f).filter(w=>w.kind!=="devDependencies"&&M.has(w.name)).map(w=>w.name))];if(O.length>0){a.skipped.push({name:f,reason:`dependency-failed: not published because ${O.join(", ")} failed to publish (publishing would orphan this package's dependency range)`}),M.add(f);continue}const L=e.perPackageConfig.get(f)??{},F=Ve(R,L),W=s.publishActionsOverride??es(F),T=s.tag??e.channel?.tag;if(G){const w=await G.runWillPublishHooks(U,{dir:R.dir,name:f,oldVersion:k.oldVersion,version:k.newVersion});if(w.skip){a.skipped.push({name:f,reason:`plugin-skipped${w.by?` by "${w.by}"`:""}`}),M.add(f);continue}}const z=h.pending.find(w=>w.name===f&&w.version===k.newVersion);try{const w=await W.publish({catalogs:V,cleanPackageJsonConfig:e.config.publish?.cleanPackageJson,dryRun:s.dryRun,otp:s.otp,perPackageConfig:L,pkg:R,pm:e.pm,provenance:aa(e),registry:L.registry,release:k,resumeStageId:z?.id,tag:T,versionedManifestByName:E,workspaceConfig:e.config});if(w.published||w.alreadyPublished){const N=h.pending.filter(j=>j.name===f&&j.version===k.newVersion).map(j=>j.id);N.length>0&&(h=m(h,N))}if(w.published)a.published.push({name:f,stageId:w.stageId,tarball:w.tarball,version:k.newVersion}),$.published.push(`${f}@${k.newVersion}`),G&&await G.runAfterPublishHooks(U,{dir:R.dir,name:f,oldVersion:k.oldVersion,version:k.newVersion});else if(w.alreadyPublished)a.skipped.push({name:f,reason:"already-published"}),$.published.push(`${f}@${k.newVersion}`);else if(a.skipped.push({name:f,reason:w.output??"skipped"}),w.stageId){const N=(w.output??"").startsWith("stage-rejected")?"rejected":"timeout";h=v(h,[{id:w.stageId,name:f,reason:N,stagedAt:new Date().toISOString(),tag:T??"latest",version:k.newVersion}])}await D()}catch(w){a.failed.push({name:f,reason:w.message}),M.add(f)}}G&&await G.runAfterPublishAllHooks(U,{failed:a.failed.map(f=>({name:f.name,reason:f.reason})),published:a.published.map(f=>({name:f.name,version:f.version})),skipped:a.skipped.map(f=>({name:f.name,reason:f.reason}))});const{resolveSyncTagGroups:q}=await import("./group-tags.js"),se=q(e.config,a.published);if(!s.dryRun&&!s.noTag&&a.published.length>0){const{createOrUpdateFloatingTag:f,createTag:k,defaultTagFor:R,pushTags:O,renderTagPattern:L}=await import("./git.js"),F=e.config.releaseTagPattern,W=e.channel?.tag,T=e.config.floatingMajorTag===!0,z=!!e.channel?.prerelease||!!e.preMode;for(const{name:w,version:N}of a.published){if(se.grouped.has(w))continue;const Y=e.perPackageConfig.get(w)?.releaseTagPattern??F,K=Y?L(Y,{channel:W,name:w,version:N}):R(w,N);try{await k({cwd:e.cwd,runner:n},K,`Release ${w}@${N}`,{signing:e.config.signing,skipRemoteCheck:e.firstRelease}),a.tags.push(K)}catch(X){e.firstRelease&&X instanceof A&&X.code==="TAG_COLLISION"?a.skipped.push({name:K,reason:"tag-creation: tag already exists (first-release — skipped)"}):a.skipped.push({name:K,reason:`tag-creation: ${X.message}`})}const Te=e.depGraph.getPackage(w),Be=e.perPackageConfig.get(w),Oe=Te?.manifest?.private===!0,Ge=Be?.skipNpmPublish===!0;if(T&&!z&&!Y?.includes("{major}")&&!Oe&&!Ge){const X=N.split(/[-+]/,1)[0].split(".")[0];if(X!==void 0&&X!==""){const ve=w.replace(/^@/,"").replaceAll("/","-");if(ve!==""){const oe=`${ve}-v${X}`;try{await f({cwd:e.cwd,runner:n},oe,{push:!s.noPush,signing:e.config.signing}),a.tags.push(oe)}catch(Ue){a.skipped.push({name:oe,reason:`floating-major-tag: ${Ue.message}`})}}}}}for(const w of se.groups)try{await k({cwd:e.cwd,runner:n},w.tag,`Release ${w.name} ${w.version}`,{signing:e.config.signing,skipRemoteCheck:e.firstRelease}),a.tags.push(w.tag)}catch(N){e.firstRelease&&N instanceof A&&N.code==="TAG_COLLISION"?a.skipped.push({name:w.tag,reason:"tag-creation: tag already exists (first-release — skipped)"}):a.skipped.push({name:w.tag,reason:`tag-creation: ${N.message}`})}if(!s.noPush&&a.tags.length>0)try{await O({cwd:e.cwd,runner:n}),a.tagsPushed=!0}catch(w){a.tagsPushed=!1,a.failed.push({name:"_pushTags",reason:`git push --tags failed: ${w.message}. Retry with: git push --tags`})}$.tagged=[...a.tags],$.pushed=a.tagsPushed,await D(),a.failed.length===0&&!s.dryRun&&(await o(e.cwd,P,b),b&&await pe(e,n,P,"close",{noPush:s.noPush}))}if(!s.dryRun){const f=B.pending.length,k=h.pending.length,R=await y(e.cwd,P,h);if(R.changed){const{stageAndCommitFile:O}=await import("./git.js");let L;if(R.removed)L="chore(release): clear pending stage registry [skip ci]";else if(k>f){const F=k-f;L=`chore(release): record ${F} new pending stage${F===1?"":"s"} [skip ci]`}else if(k<f){const F=f-k;L=`chore(release): drain ${F} resolved stage${F===1?"":"s"} [skip ci]`}else L=`chore(release): update pending stage registry (${k} pending) [skip ci]`;try{await O({cwd:e.cwd,runner:n},R.path,L,{author:e.config.gitUser,push:!s.noPush,sign:e.config.gitSignCommits===!0})}catch(F){process.stderr.write(`[vis release] Warning: could not commit ${R.path}: ${F.message}
17
- `)}}}if(!s.dryRun&&a.published.length>0&&e.config.workspaceChangelog!==!1){const f=e.config.workspaceChangelog,k=typeof f=="object"?f:void 0,R=typeof e.config.aggregateRelease=="object"?e.config.aggregateRelease.enabled:e.config.aggregateRelease===!0;if(k!==void 0||R)try{const{writeWorkspaceChangelogWave:O}=await import("./workspace.js"),L=new Set(a.published.map(T=>T.name)),F=e.plan.releases.filter(T=>L.has(T.name)),W=await O({changelogConfig:e.config.changelog,cwd:e.cwd,workspaceChangelog:e.config.workspaceChangelog},F);if(W)try{const{stageAndCommitFile:T}=await import("./git.js");await T({cwd:e.cwd,runner:n},W,"chore(release): record wave [skip ci]",{author:e.config.gitUser,push:!s.noPush,sign:e.config.gitSignCommits===!0})}catch(T){process.stderr.write(`[vis release] Warning: could not commit workspace CHANGELOG.md: ${T.message}
18
- `)}}catch(O){process.stderr.write(`[vis release] Warning: could not write workspace CHANGELOG.md wave entry: ${O.message}
19
- `)}}if(!s.dryRun&&a.published.length>0&&a.tagsPushed){e.config.publish?.noRelease!==!0&&await sa(e,a,n,se);try{const{walkSuccessfulRelease:f}=await import("./success-walk.js"),{createRemoteClient:k,detectRemoteProvider:R}=await import("./detect.js"),{resolveFormatter:O}=await import("./resolveFormatter.js"),L=await R(e.cwd,n,e.config.provider),F=k(L,{githubHost:e.config.githubHost,gitlabHost:e.config.gitlabHost,httpProxy:e.config.httpProxy}),W=await F.detectRepoSlug(e.cwd,n),T=await O(e.config.changelog,e.cwd),{recordRecentlyWalked:z}=await import("./staged-registry.js"),w=new Set([...$.walked??[],...(h.recentlyWalked??[]).map(j=>j.key)]),N={...a,published:a.published.filter(j=>!w.has(`${j.name}@${j.version}`))};if(N.published.length>0){const j=await f(e,N,n,{client:F,formatter:T,repo:W}),Y=N.published.map(K=>`${K.name}@${K.version}`);$.walked=[...$.walked??[],...Y],await D(),h=z(h,Y),j.warnings.length>0&&e.plan.warnings.push(...j.warnings)}}catch(f){e.plan.warnings.push(`successWalk: could not run post-release walk: ${f.message}`)}if(e.config.notifications)try{const{dispatchNotifications:f}=await import("./interface.js"),{createRemoteClient:k,detectRemoteProvider:R}=await import("./detect.js"),O=await R(e.cwd,n,e.config.provider),F=await k(O,{githubHost:e.config.githubHost,gitlabHost:e.config.gitlabHost,httpProxy:e.config.httpProxy}).detectRepoSlug(e.cwd,n);let W;try{const w=`${e.cwd}/package.json`,N=await import("node:fs/promises");W=JSON.parse(await N.readFile(w,"utf8")).name}catch{}const T=new Set([...$.notified??[],...(h.recentlyNotified??[]).map(w=>w.key)]),z=a.published.filter(w=>!T.has(`${w.name}@${w.version}`));if(z.length>0){const w=await f(e.config.notifications,{channel:e.channel?.tag,completedAt:new Date().toISOString(),...W===void 0?{}:{monorepoName:W},published:z.map(N=>({name:N.name,tag:e.channel?.tag,...N.url===void 0?{}:{url:N.url},version:N.version})),...F===void 0?{}:{repo:F},skipped:a.skipped.map(N=>({name:N.name,reason:N.reason}))},{warn:N=>e.plan.warnings.push(N)});if(w.succeeded.length>0){const N=z.map(Y=>`${Y.name}@${Y.version}`);$.notified=[...$.notified??[],...N],await D();const{recordRecentlyNotified:j}=await import("./staged-registry.js");h=j(h,N)}if(w.failed.length>0||w.succeeded.length>0){const N=w.succeeded.length+w.failed.length;if(w.failed.length>0){e.plan.warnings.push(`[notifications] dispatched ${w.succeeded.length}/${N} channels${w.succeeded.length>0?` (succeeded: ${w.succeeded.join(", ")})`:""}; ${w.failed.length} failed.`);for(const j of w.failed)e.plan.warnings.push(`[notifications:${j.id}] ${j.error}`)}}}}catch(f){e.plan.warnings.push(`notifications: dispatch failed: ${f.message}`)}if(!s.dryRun)try{const f=await y(e.cwd,P,h);if(f.changed){const{stageAndCommitFile:k}=await import("./git.js");try{await k({cwd:e.cwd,runner:n},f.path,"chore(release): record cross-runner notify/walk dedupe [skip ci]",{author:e.config.gitUser,push:!s.noPush,sign:e.config.gitSignCommits===!0})}catch(R){process.stderr.write(`[vis release] Warning: could not commit ${f.path} (notify/walk dedupe): ${R.message}
20
- `)}}}catch(f){process.stderr.write(`[vis release] Warning: could not update cross-runner dedupe registry: ${f.message}
21
- `)}}if(!s.dryRun&&e.config.postPublishCommand)try{await x(e.cwd,e.config.postPublishCommand,"postPublishCommand")}catch(f){a.failed.push({name:"_postPublishCommand",reason:f.message})}return a}finally{c&&await d(e.cwd,t)}},Zs=e=>e.length===0?"":`## Related releases
16
+ `)}},Qs=async e=>{const{defaultTagFor:s,floatingMajorTagFor:a,renderTagPattern:n}=await import("./git.js"),{resolveSyncTagGroups:t}=await import("./group-tags.js"),o=e.plan.releases.filter(l=>e.depGraph.getPackage(l.name)?.manifest?.private!==!0).map(l=>({name:l.name,version:l.newVersion})),p=t(e.config,o),c=p.groups.map(l=>l.tag),r=[],i=!!e.channel?.prerelease||!!e.preMode;for(const{name:l,version:u}of o){if(p.grouped.has(l))continue;const d=e.perPackageConfig.get(l),g=d?.releaseTagPattern??e.config.releaseTagPattern;if(c.push(g?n(g,{channel:e.channel?.tag,name:l,version:u}):s(l,u)),e.config.floatingMajorTag===!0&&!i&&!g?.includes("{major}")&&d?.skipNpmPublish!==!0){const f=a(l,u);f!==void 0&&r.push(f)}}return{created:c,updated:r}},Zs=async(e,s,a)=>{if((await s.run("git",["remote","get-url","--push","origin"],{cwd:e.cwd,silent:!0})).exitCode!==0)return;const{getCurrentBranch:t,resolvePushCredentials:o,verifyPushAccess:p}=await import("./git.js"),c={cwd:e.cwd,runner:s},r=await p(c);if(r!==void 0)return`Cannot push to origin, nothing was published. Set VIS_GH_TOKEN (or GITHUB_TOKEN / GITLAB_TOKEN) with write access, or pass --no-push. git said: ${r}`;const{createRemoteClient:i,detectRemoteProvider:l}=await import("./detect.js");let u;try{u=await l(e.cwd,s,e.config.provider)}catch{return}if(u!=="github")return;const g=await i(u,{githubHost:e.config.githubHost,httpProxy:e.config.httpProxy}).detectRepoSlug(e.cwd,s);if(!g)return;const f=await o(c),y={...process.env};f!==void 0&&(y.GH_TOKEN=f.token),e.config.githubHost&&(y.GH_HOST=e.config.githubHost),e.config.httpProxy&&(y.HTTPS_PROXY=e.config.httpProxy,y.HTTP_PROXY=e.config.httpProxy);const{checkGithubPushRules:w}=await import("./github-push-rules.js"),P=a.noTag?{created:[],updated:[]}:await Qs(e),v=await w(s,{branch:await t(c),createdTags:P.created,cwd:e.cwd,env:y,repo:g,signedCommits:e.config.gitSignCommits===!0,updatedTags:P.updated});for(const $ of v.warnings)process.stderr.write(`[vis release] Warning: ${$}
17
+ `);if(v.blocked.length>0)return`GitHub push rules would reject this release, nothing was published:
18
+ - ${v.blocked.join(`
19
+ - `)}
20
+ Grant the pushing token a bypass, adjust the ruleset, or pass --no-push / --no-tag.`},va=async(e,s={})=>{const a={failed:[],published:[],skipped:[],tags:[],tagsPushed:!1},n=ee();if(e.plan.releases.length===0)return a;if(!s.dryRun&&e.channel?.mode==="version-pr"){const{createRemoteClient:r,detectRemoteProvider:i}=await import("./detect.js"),l=await i(e.cwd,n,e.config.provider),d=await r(l,{githubHost:e.config.githubHost,gitlabHost:e.config.gitlabHost,httpProxy:e.config.httpProxy}).detectRepoSlug(e.cwd,n),g=e.config.versionPr?.branch??"vis-release/version-packages";if(d)try{const f=await n.run("gh",["pr","list","--head",g,"--state","open","--json","number"],{cwd:e.cwd,silent:!0});if(f.exitCode===0&&f.stdout.trim()&&f.stdout.trim()!=="[]"){const y=JSON.parse(f.stdout);if(y[0])return a.failed.push({name:"_preflight",reason:`Open release PR #${y[0].number} exists. Merge or close it before publishing locally. (Override: --no-push then \`git push --tags\` manually.)`}),a}}catch{}}if(!s.dryRun&&e.config.prePublishCommand)try{await x(e.cwd,e.config.prePublishCommand,"prePublishCommand")}catch(r){return a.failed.push({name:"_prePublishCommand",reason:r.message}),a}if(!s.dryRun&&!s.noPush){const r=await Zs(e,n,{noTag:s.noTag===!0});if(r!==void 0)return a.failed.push({name:"_pushAccess",reason:r}),a}const t=e.config.changesDir??ne,{acquireLock:o,releaseLock:p}=await import("./state.js");let c=!1;if(!s.dryRun)try{await o(e.cwd,t),c=!0}catch(r){return a.failed.push({name:"_lock",reason:r.message}),a}try{const{clearState:r,filterPlanByState:i,newState:l,readState:u,writeState:d}=await import("./state.js"),{readStagedRegistry:g,removePendingStages:f,upsertPendingStages:y,writeStagedRegistry:w}=await import("./staged-registry.js"),P=e.config.changesDir??ne,v=e.config.publish?.lockInGit===!0;let $=s.resume||v?await u(e.cwd,P,v):void 0;$&&v&&($.channel=e.channel?.tag);const D=async()=>{s.dryRun||!$||(await d(e.cwd,P,$,v),v&&await pe(e,n,P,"progress",{noPush:s.noPush}))};let h=await g(e.cwd,P);await Ve(e,"publish",h,{runner:n}),h=await g(e.cwd,P);const O={...h,pending:[...h.pending]};let{releases:I}=e.plan;$?I=i(I,$):($=l(e.channel?.tag,e.plan.releases),s.dryRun||(await d(e.cwd,P,$,v),v&&await pe(e,n,P,"open",{noPush:s.noPush})));const S=await e.pm.readCatalogYaml(e.cwd),V=Ze(S),R=e.depGraph.topologicalSort(I.map(m=>m.name)),F=new Map(I.map(m=>[m.name,m])),M=new Set,_=new Map;for(const m of e.plan.releases){const C=e.depGraph.getPackage(m.name);C&&_.set(m.name,{...C.manifest,version:m.newVersion})}const H={config:e.config,cwd:e.cwd},G=e.config.plugins?.length?await import("./defineReleasePlugin.js"):void 0;for(const m of R){const C=F.get(m);if(!C){a.skipped.push({name:m,reason:"topo-sort returned a name not in the release plan (internal bug)"});continue}const A=e.depGraph.getPackage(m);if(!A)continue;const B=[...new Set(e.depGraph.getDependencies(m).filter(b=>b.kind!=="devDependencies"&&M.has(b.name)).map(b=>b.name))];if(B.length>0){a.skipped.push({name:m,reason:`dependency-failed: not published because ${B.join(", ")} failed to publish (publishing would orphan this package's dependency range)`}),M.add(m);continue}const T=e.perPackageConfig.get(m)??{},j=Fe(A,T),U=s.publishActionsOverride??xe(j),L=s.tag??e.channel?.tag;if(G){const b=await G.runWillPublishHooks(H,{dir:A.dir,name:m,oldVersion:C.oldVersion,version:C.newVersion});if(b.skip){a.skipped.push({name:m,reason:`plugin-skipped${b.by?` by "${b.by}"`:""}`}),M.add(m);continue}}const Y=h.pending.find(b=>b.name===m&&b.version===C.newVersion);try{const b=await U.publish({catalogs:V,cleanPackageJsonConfig:e.config.publish?.cleanPackageJson,dryRun:s.dryRun,otp:s.otp,perPackageConfig:T,pkg:A,pm:e.pm,provenance:na(e),registry:T.registry,release:C,resumeStageId:Y?.id,tag:L,versionedManifestByName:_,workspaceConfig:e.config});if(b.published||b.alreadyPublished){const k=h.pending.filter(E=>E.name===m&&E.version===C.newVersion).map(E=>E.id);k.length>0&&(h=f(h,k))}if(b.published)a.published.push({name:m,stageId:b.stageId,tarball:b.tarball,version:C.newVersion}),$.published.push(`${m}@${C.newVersion}`),G&&await G.runAfterPublishHooks(H,{dir:A.dir,name:m,oldVersion:C.oldVersion,version:C.newVersion});else if(b.alreadyPublished)a.skipped.push({name:m,reason:"already-published"}),$.published.push(`${m}@${C.newVersion}`);else if(a.skipped.push({name:m,reason:b.output??"skipped"}),b.stageId){const k=(b.output??"").startsWith("stage-rejected")?"rejected":"timeout";h=y(h,[{id:b.stageId,name:m,reason:k,stagedAt:new Date().toISOString(),tag:L??"latest",version:C.newVersion}])}await D()}catch(b){a.failed.push({name:m,reason:b.message}),M.add(m)}}G&&await G.runAfterPublishAllHooks(H,{failed:a.failed.map(m=>({name:m.name,reason:m.reason})),published:a.published.map(m=>({name:m.name,version:m.version})),skipped:a.skipped.map(m=>({name:m.name,reason:m.reason}))});const{resolveSyncTagGroups:J}=await import("./group-tags.js"),se=J(e.config,a.published);if(!s.dryRun&&!s.noTag&&a.published.length>0){const{createOrUpdateFloatingTag:m,createTag:C,defaultTagFor:A,floatingMajorTagFor:B,pushTags:T,renderTagPattern:j}=await import("./git.js"),U=e.config.releaseTagPattern,L=e.channel?.tag,Y=e.config.floatingMajorTag===!0,b=!!e.channel?.prerelease||!!e.preMode;for(const{name:k,version:E}of a.published){if(se.grouped.has(k))continue;const X=e.perPackageConfig.get(k)?.releaseTagPattern??U,ae=X?j(X,{channel:L,name:k,version:E}):A(k,E);try{await C({cwd:e.cwd,runner:n},ae,`Release ${k}@${E}`,{signing:e.config.signing,skipRemoteCheck:e.firstRelease}),a.tags.push(ae)}catch(K){e.firstRelease&&K instanceof N&&K.code==="TAG_COLLISION"?a.skipped.push({name:ae,reason:"tag-creation: tag already exists (first-release — skipped)"}):a.skipped.push({name:ae,reason:`tag-creation: ${K.message}`})}const Te=e.depGraph.getPackage(k),Le=e.perPackageConfig.get(k),Oe=Te?.manifest?.private===!0,Be=Le?.skipNpmPublish===!0;if(Y&&!b&&!X?.includes("{major}")&&!Oe&&!Be){const K=B(k,E);if(K!==void 0)try{await m({cwd:e.cwd,runner:n},K,{push:!s.noPush,signing:e.config.signing}),a.tags.push(K)}catch(Ge){a.skipped.push({name:K,reason:`floating-major-tag: ${Ge.message}`})}}}for(const k of se.groups)try{await C({cwd:e.cwd,runner:n},k.tag,`Release ${k.name} ${k.version}`,{signing:e.config.signing,skipRemoteCheck:e.firstRelease}),a.tags.push(k.tag)}catch(E){e.firstRelease&&E instanceof N&&E.code==="TAG_COLLISION"?a.skipped.push({name:k.tag,reason:"tag-creation: tag already exists (first-release — skipped)"}):a.skipped.push({name:k.tag,reason:`tag-creation: ${E.message}`})}if(!s.noPush&&a.tags.length>0)try{await T({cwd:e.cwd,runner:n}),a.tagsPushed=!0}catch(k){a.tagsPushed=!1,a.failed.push({name:"_pushTags",reason:`git push --tags failed: ${k.message}. Retry with: git push --tags`})}$.tagged=[...a.tags],$.pushed=a.tagsPushed,await D(),a.failed.length===0&&!s.dryRun&&(await r(e.cwd,P,v),v&&await pe(e,n,P,"close",{noPush:s.noPush}))}if(!s.dryRun){const m=O.pending.length,C=h.pending.length,A=await w(e.cwd,P,h);if(A.changed){const{stageAndCommitFile:B}=await import("./git.js");let T;if(A.removed)T="chore(release): clear pending stage registry [skip ci]";else if(C>m){const j=C-m;T=`chore(release): record ${j} new pending stage${j===1?"":"s"} [skip ci]`}else if(C<m){const j=m-C;T=`chore(release): drain ${j} resolved stage${j===1?"":"s"} [skip ci]`}else T=`chore(release): update pending stage registry (${C} pending) [skip ci]`;try{await B({cwd:e.cwd,runner:n},A.path,T,{author:e.config.gitUser,push:!s.noPush,sign:e.config.gitSignCommits===!0})}catch(j){process.stderr.write(`[vis release] Warning: could not commit ${A.path}: ${j.message}
21
+ `)}}}if(!s.dryRun&&a.published.length>0&&e.config.workspaceChangelog!==!1){const m=e.config.workspaceChangelog,C=typeof m=="object"?m:void 0,A=typeof e.config.aggregateRelease=="object"?e.config.aggregateRelease.enabled:e.config.aggregateRelease===!0;if(C!==void 0||A)try{const{writeWorkspaceChangelogWave:B}=await import("./workspace.js"),T=new Set(a.published.map(L=>L.name)),j=e.plan.releases.filter(L=>T.has(L.name)),U=await B({changelogConfig:e.config.changelog,cwd:e.cwd,workspaceChangelog:e.config.workspaceChangelog},j);if(U)try{const{stageAndCommitFile:L}=await import("./git.js");await L({cwd:e.cwd,runner:n},U,"chore(release): record wave [skip ci]",{author:e.config.gitUser,push:!s.noPush,sign:e.config.gitSignCommits===!0})}catch(L){process.stderr.write(`[vis release] Warning: could not commit workspace CHANGELOG.md: ${L.message}
22
+ `)}}catch(B){process.stderr.write(`[vis release] Warning: could not write workspace CHANGELOG.md wave entry: ${B.message}
23
+ `)}}if(!s.dryRun&&a.published.length>0&&a.tagsPushed){e.config.publish?.noRelease!==!0&&await aa(e,a,n,se);try{const{walkSuccessfulRelease:m}=await import("./success-walk.js"),{createRemoteClient:C,detectRemoteProvider:A}=await import("./detect.js"),{resolveFormatter:B}=await import("./resolveFormatter.js"),T=await A(e.cwd,n,e.config.provider),j=C(T,{githubHost:e.config.githubHost,gitlabHost:e.config.gitlabHost,httpProxy:e.config.httpProxy}),U=await j.detectRepoSlug(e.cwd,n),L=await B(e.config.changelog,e.cwd),{recordRecentlyWalked:Y}=await import("./staged-registry.js"),b=new Set([...$.walked??[],...(h.recentlyWalked??[]).map(E=>E.key)]),k={...a,published:a.published.filter(E=>!b.has(`${E.name}@${E.version}`))};if(k.published.length>0){const E=await m(e,k,n,{client:j,formatter:L,repo:U}),q=k.published.map(X=>`${X.name}@${X.version}`);$.walked=[...$.walked??[],...q],await D(),h=Y(h,q),E.warnings.length>0&&e.plan.warnings.push(...E.warnings)}}catch(m){e.plan.warnings.push(`successWalk: could not run post-release walk: ${m.message}`)}if(e.config.notifications)try{const{dispatchNotifications:m}=await import("./interface.js"),{createRemoteClient:C,detectRemoteProvider:A}=await import("./detect.js"),B=await A(e.cwd,n,e.config.provider),j=await C(B,{githubHost:e.config.githubHost,gitlabHost:e.config.gitlabHost,httpProxy:e.config.httpProxy}).detectRepoSlug(e.cwd,n);let U;try{const b=`${e.cwd}/package.json`,k=await import("node:fs/promises");U=JSON.parse(await k.readFile(b,"utf8")).name}catch{}const L=new Set([...$.notified??[],...(h.recentlyNotified??[]).map(b=>b.key)]),Y=a.published.filter(b=>!L.has(`${b.name}@${b.version}`));if(Y.length>0){const b=await m(e.config.notifications,{channel:e.channel?.tag,completedAt:new Date().toISOString(),...U===void 0?{}:{monorepoName:U},published:Y.map(k=>({name:k.name,tag:e.channel?.tag,...k.url===void 0?{}:{url:k.url},version:k.version})),...j===void 0?{}:{repo:j},skipped:a.skipped.map(k=>({name:k.name,reason:k.reason}))},{warn:k=>e.plan.warnings.push(k)});if(b.succeeded.length>0){const k=Y.map(q=>`${q.name}@${q.version}`);$.notified=[...$.notified??[],...k],await D();const{recordRecentlyNotified:E}=await import("./staged-registry.js");h=E(h,k)}if(b.failed.length>0||b.succeeded.length>0){const k=b.succeeded.length+b.failed.length;if(b.failed.length>0){e.plan.warnings.push(`[notifications] dispatched ${b.succeeded.length}/${k} channels${b.succeeded.length>0?` (succeeded: ${b.succeeded.join(", ")})`:""}; ${b.failed.length} failed.`);for(const E of b.failed)e.plan.warnings.push(`[notifications:${E.id}] ${E.error}`)}}}}catch(m){e.plan.warnings.push(`notifications: dispatch failed: ${m.message}`)}if(!s.dryRun)try{const m=await w(e.cwd,P,h);if(m.changed){const{stageAndCommitFile:C}=await import("./git.js");try{await C({cwd:e.cwd,runner:n},m.path,"chore(release): record cross-runner notify/walk dedupe [skip ci]",{author:e.config.gitUser,push:!s.noPush,sign:e.config.gitSignCommits===!0})}catch(A){process.stderr.write(`[vis release] Warning: could not commit ${m.path} (notify/walk dedupe): ${A.message}
24
+ `)}}}catch(m){process.stderr.write(`[vis release] Warning: could not update cross-runner dedupe registry: ${m.message}
25
+ `)}}if(!s.dryRun&&e.config.postPublishCommand)try{await x(e.cwd,e.config.postPublishCommand,"postPublishCommand")}catch(m){a.failed.push({name:"_postPublishCommand",reason:m.message})}return a}finally{c&&await p(e.cwd,t)}},xs=e=>e.length===0?"":`## Related releases
22
26
 
23
27
  ${e.map(a=>`- [${a.name}](${a.url})`).join(`
24
- `)}`,xs=(e,s,a)=>{if(!s||!s.header&&!s.footer)return e;const n=i=>Vs(i,{contributors:a.contributors??"",date:a.date,name:a.name,previousVersion:a.previousVersion,repo:a.repo,version:a.version}).replaceAll(/\n{3,}/g,`
28
+ `)}`,ea=(e,s,a)=>{if(!s||!s.header&&!s.footer)return e;const n=o=>Fs(o,{contributors:a.contributors??"",date:a.date,name:a.name,previousVersion:a.previousVersion,repo:a.repo,version:a.version}).replaceAll(/\n{3,}/g,`
25
29
 
26
- `).replace(/\s+$/,""),t=[];if(s.header){const i=n(s.header);i.length>0&&t.push(i)}if(t.push(e),s.footer){const i=n(s.footer);i.length>0&&t.push(i)}return t.join(`
30
+ `).replace(/\s+$/,""),t=[];if(s.header){const o=n(s.header);o.length>0&&t.push(o)}if(t.push(e),s.footer){const o=n(s.footer);o.length>0&&t.push(o)}return t.join(`
27
31
 
28
- `)},ea=e=>{if(!Array.isArray(e))return;const[s,a]=e;if(s!=="github"||typeof a!="object"||a===null)return;const{internalAuthors:n}=a;if(Array.isArray(n))return n.filter(t=>typeof t=="string")},sa=async(e,s,a,n)=>{const{createRemoteClient:t,detectRemoteProvider:i}=await import("./detect.js"),d=await i(e.cwd,a,e.config.provider),c=t(d,{githubHost:e.config.githubHost,gitlabHost:e.config.gitlabHost,httpProxy:e.config.httpProxy}),o=await c.detectRepoSlug(e.cwd,a);if(!o)return;const r=typeof e.config.aggregateRelease=="object"?e.config.aggregateRelease:{enabled:e.config.aggregateRelease===!0},u=e.config.publish?.draftRelease===!0,g=e.config.publish?.discussionCategory,l=e.config.publish?.addReleases;if(r.enabled){const h=new Date().toISOString().slice(0,10),I=(r.title??"Release {date}").replaceAll("{date}",h),_=`release-${h}`,V=s.published.map(C=>`- \`${C.name}\` → ${C.version}`).join(`
29
- `);try{const C=await c.createRelease(a,{body:V,cwd:e.cwd,discussionCategory:g,draft:u,repo:o,tag:_,title:I});if(C?.url)for(const S of s.published)S.url=C.url}catch{}return}const{defaultTagFor:p,renderTagPattern:m}=await import("./git.js"),v=e.config.releaseTagPattern,y=e.channel?.tag,P=e.config.publish?.releaseAssets??{},b=new Date().toISOString().slice(0,10),$=ea(e.config.changelog),D=Ls(e.plan.consumedChangeFiles??[],{internalAuthors:$});for(const h of n.groups){const B=h.members.map(I=>`- \`${I}\` → ${s.published.find(_=>_.name===I)?.version??h.version}`).join(`
30
- `);try{const I=await c.createRelease(a,{body:B,cwd:e.cwd,discussionCategory:g,draft:u,prerelease:h.version.includes("-"),repo:o,tag:h.tag,title:`${h.name} ${h.version}`});if(I?.url)for(const _ of s.published)h.members.includes(_.name)&&(_.url=I.url)}catch(I){console.warn(`createRelease failed for group ${h.name} (tag ${h.tag}): ${I.message}`)}}for(const h of s.published){if(n.grouped.has(h.name))continue;const I=e.perPackageConfig.get(h.name)?.releaseTagPattern??v,_=I?m(I,{channel:y,name:h.name,version:h.version}):p(h.name,h.version),V=h.version.includes("-");let C=`Release of ${h.name}@${h.version}.`;if(h.stageId&&(C=`${C}
32
+ `)},sa=e=>{if(!Array.isArray(e))return;const[s,a]=e;if(s!=="github"||typeof a!="object"||a===null)return;const{internalAuthors:n}=a;if(Array.isArray(n))return n.filter(t=>typeof t=="string")},aa=async(e,s,a,n)=>{const{createRemoteClient:t,detectRemoteProvider:o}=await import("./detect.js"),p=await o(e.cwd,a,e.config.provider),c=t(p,{githubHost:e.config.githubHost,gitlabHost:e.config.gitlabHost,httpProxy:e.config.httpProxy}),r=await c.detectRepoSlug(e.cwd,a);if(!r)return;const i=typeof e.config.aggregateRelease=="object"?e.config.aggregateRelease:{enabled:e.config.aggregateRelease===!0},l=e.config.publish?.draftRelease===!0,u=e.config.publish?.discussionCategory,d=e.config.publish?.addReleases;if(i.enabled){const h=new Date().toISOString().slice(0,10),I=(i.title??"Release {date}").replaceAll("{date}",h),S=`release-${h}`,V=s.published.map(R=>`- \`${R.name}\` → ${R.version}`).join(`
33
+ `);try{const R=await c.createRelease(a,{body:V,cwd:e.cwd,discussionCategory:u,draft:l,repo:r,tag:S,title:I});if(R?.url)for(const F of s.published)F.url=R.url}catch{}return}const{defaultTagFor:g,renderTagPattern:f}=await import("./git.js"),y=e.config.releaseTagPattern,w=e.channel?.tag,P=e.config.publish?.releaseAssets??{},v=new Date().toISOString().slice(0,10),$=sa(e.config.changelog),D=Vs(e.plan.consumedChangeFiles??[],{internalAuthors:$});for(const h of n.groups){const O=h.members.map(I=>`- \`${I}\` → ${s.published.find(S=>S.name===I)?.version??h.version}`).join(`
34
+ `);try{const I=await c.createRelease(a,{body:O,cwd:e.cwd,discussionCategory:u,draft:l,prerelease:h.version.includes("-"),repo:r,tag:h.tag,title:`${h.name} ${h.version}`});if(I?.url)for(const S of s.published)h.members.includes(S.name)&&(S.url=I.url)}catch(I){console.warn(`createRelease failed for group ${h.name} (tag ${h.tag}): ${I.message}`)}}for(const h of s.published){if(n.grouped.has(h.name))continue;const I=e.perPackageConfig.get(h.name)?.releaseTagPattern??y,S=I?f(I,{channel:w,name:h.name,version:h.version}):g(h.name,h.version),V=h.version.includes("-");let R=`Release of ${h.name}@${h.version}.`;if(h.stageId&&(R=`${R}
31
35
 
32
- > ⏳ **Staged — not yet installable.** Approve via \`vis release stage approve ${h.stageId}\` or the npmjs.com web UI.`),P.stampHashes&&h.tarball&&(C=`${C}
36
+ > ⏳ **Staged — not yet installable.** Approve via \`vis release stage approve ${h.stageId}\` or the npmjs.com web UI.`),P.stampHashes&&h.tarball&&(R=`${R}
33
37
 
34
38
  ### Tarball integrity
35
39
 
36
40
  - size: \`${h.tarball.size}\` bytes
37
41
  - sha256: \`${h.tarball.sha256}\`
38
- - sha512: \`${h.tarball.sha512}\``),l!==void 0&&l!==!1)try{const E=_.lastIndexOf("@"),U=E>0?_.slice(0,E+1):"",G=await c.listRecentReleases(a,{cwd:e.cwd,excludeTag:_,limit:5,repo:o,tagPrefix:U}),q=Zs(G);q&&(C=l==="top"?`${q}
42
+ - sha512: \`${h.tarball.sha512}\``),d!==void 0&&d!==!1)try{const _=S.lastIndexOf("@"),H=_>0?S.slice(0,_+1):"",G=await c.listRecentReleases(a,{cwd:e.cwd,excludeTag:S,limit:5,repo:r,tagPrefix:H}),J=xs(G);J&&(R=d==="top"?`${J}
39
43
 
40
- ${C}`:`${C}
44
+ ${R}`:`${R}
41
45
 
42
- ${q}`)}catch{}const{releaseNoteTemplate:S}=e.config;if(S){const U=e.plan.releases.find(G=>G.name===h.name)?.oldVersion??"";C=xs(C,S,{contributors:D,date:b,name:h.name,previousVersion:U,repo:o,version:h.version})}const M=[];P.uploadTarball&&h.tarball&&M.push(h.tarball.path);try{const E=await c.createRelease(a,{assets:M.length>0?M:void 0,body:C,cwd:e.cwd,discussionCategory:g,draft:u,prerelease:V,repo:o,tag:_,title:`${h.name} v${h.version}`});E?.url&&(h.url=E.url)}catch(E){console.warn(`createRelease failed for ${h.name}@${h.version} (tag ${_}): ${E.message}`)}}},aa=e=>(e.config.publish?.publishArgs??[]).includes("--provenance")&&e.pm.id!=="bun";export{wa as a,ha as b,Is as c,As as d,ma as f,ya as p,Ve as r,fa as w};
46
+ ${J}`)}catch{}const{releaseNoteTemplate:F}=e.config;if(F){const H=e.plan.releases.find(G=>G.name===h.name)?.oldVersion??"";R=ea(R,F,{contributors:D,date:v,name:h.name,previousVersion:H,repo:r,version:h.version})}const M=[];P.uploadTarball&&h.tarball&&M.push(h.tarball.path);try{const _=await c.createRelease(a,{assets:M.length>0?M:void 0,body:R,cwd:e.cwd,discussionCategory:u,draft:l,prerelease:V,repo:r,tag:S,title:`${h.name} v${h.version}`});_?.url&&(h.url=_.url)}catch(_){console.warn(`createRelease failed for ${h.name}@${h.version} (tag ${S}): ${_.message}`)}}},na=e=>(e.config.publish?.publishArgs??[]).includes("--provenance")&&e.pm.id!=="bun";export{ya as a,wa as b,As as c,Rs as d,ma as f,va as p,Fe as r,ha as w};
@@ -1 +1 @@
1
- import{createRequire as C}from"node:module";import{getAffectedProjects as S}from"@visulima/task-runner";import{i as W}from"./index-BjdW45xX.js";import{V as j}from"./vis-user-error-C_S0WF27.js";import{r as A}from"./affected-shas-Dd0P7fGD.js";let T;const $=e=>(T??=C(import.meta.url))(e),f=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,R=e=>{if(typeof f<"u"&&f.versions&&f.versions.node){const[t,s]=f.versions.node.split(".").map(Number);if(t>22||t===22&&s>=3||t===20&&s>=16)return f.getBuiltinModule(e)}return $(e)},{spawnSync:I}=R("node:child_process"),v=new Set(["deep","direct","none"]),B=e=>{const t=[],s=e.split("\0");for(let n=0;n<s.length;n++){const o=s[n];if(!o||o.length<4)continue;const p=o.slice(0,2),d=o.slice(3);if(d&&t.push(d),p.includes("R")||p.includes("C")){n+=1;const c=s[n];c&&t.push(c)}}return t},P=e=>{const t=I("git",["status","--porcelain","-z"],{cwd:e,encoding:"utf8"});return t.error||t.status!==0||typeof t.stdout!="string"?[]:B(t.stdout)},D=async(e,t,s={})=>{const n=e.downstream??"deep",o=e.upstream??"none";if(!v.has(n))throw new j(`Invalid --downstream value: "${n}". Must be "none", "direct", or "deep".`);if(!v.has(o))throw new j(`Invalid --upstream value: "${o}". Must be "none", "direct", or "deep".`);const{projectGraph:p,projects:d,workspaceRoot:c}=t,u=[];let{base:m}=e,{head:r}=e;if(!m||!r){const l=A({defaultBase:s.defaultBase,workspaceRoot:c});m=m||l.base,r=r||l.head,u.push(`Resolved affected refs from ${l.provider} (${l.notes.join("; ")})`)}const k=s.runningInCi??W,h=r==="HEAD"||r==="",b=e.uncommitted??(!k&&h);let a=[];if(b)if(h){const g=(s.readWorkingTreeChanges??P)(c),y=Object.values(d).map(i=>i.root?.replace(/\/$/,"")).filter(i=>!!i&&i!==".");a=g.filter(i=>y.some(_=>i===_||i.startsWith(`${_}/`)));const w=g.length-a.length;a.length>0&&u.push(`including ${a.length} uncommitted working-tree file(s)`),w>0&&u.push(`ignoring ${w} uncommitted path(s) outside any project (untracked scratch would otherwise mark every project affected)`)}else u.push(`ignoring --uncommitted: --head=${r} pins the comparison to a commit, not the working tree`);return{...await S({additionalChangedFiles:a,base:m,downstream:n,head:r,projectGraph:p,projects:d,upstream:o,workspaceRoot:c}),notes:u,uncommittedFileCount:a.length}};export{D as s};
1
+ import{createRequire as C}from"node:module";import{getAffectedProjects as S}from"@visulima/task-runner";import{i as W}from"./index-BjdW45xX.js";import{V as j}from"./vis-user-error-Y7E_pUlk.js";import{r as A}from"./affected-shas-Dd0P7fGD.js";let T;const $=e=>(T??=C(import.meta.url))(e),f=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,R=e=>{if(typeof f<"u"&&f.versions&&f.versions.node){const[t,s]=f.versions.node.split(".").map(Number);if(t>22||t===22&&s>=3||t===20&&s>=16)return f.getBuiltinModule(e)}return $(e)},{spawnSync:I}=R("node:child_process"),v=new Set(["deep","direct","none"]),B=e=>{const t=[],s=e.split("\0");for(let n=0;n<s.length;n++){const o=s[n];if(!o||o.length<4)continue;const p=o.slice(0,2),d=o.slice(3);if(d&&t.push(d),p.includes("R")||p.includes("C")){n+=1;const c=s[n];c&&t.push(c)}}return t},P=e=>{const t=I("git",["status","--porcelain","-z"],{cwd:e,encoding:"utf8"});return t.error||t.status!==0||typeof t.stdout!="string"?[]:B(t.stdout)},D=async(e,t,s={})=>{const n=e.downstream??"deep",o=e.upstream??"none";if(!v.has(n))throw new j(`Invalid --downstream value: "${n}". Must be "none", "direct", or "deep".`);if(!v.has(o))throw new j(`Invalid --upstream value: "${o}". Must be "none", "direct", or "deep".`);const{projectGraph:p,projects:d,workspaceRoot:c}=t,u=[];let{base:m}=e,{head:r}=e;if(!m||!r){const l=A({defaultBase:s.defaultBase,workspaceRoot:c});m=m||l.base,r=r||l.head,u.push(`Resolved affected refs from ${l.provider} (${l.notes.join("; ")})`)}const k=s.runningInCi??W,h=r==="HEAD"||r==="",b=e.uncommitted??(!k&&h);let a=[];if(b)if(h){const g=(s.readWorkingTreeChanges??P)(c),y=Object.values(d).map(i=>i.root?.replace(/\/$/,"")).filter(i=>!!i&&i!==".");a=g.filter(i=>y.some(_=>i===_||i.startsWith(`${_}/`)));const w=g.length-a.length;a.length>0&&u.push(`including ${a.length} uncommitted working-tree file(s)`),w>0&&u.push(`ignoring ${w} uncommitted path(s) outside any project (untracked scratch would otherwise mark every project affected)`)}else u.push(`ignoring --uncommitted: --head=${r} pins the comparison to a commit, not the working tree`);return{...await S({additionalChangedFiles:a,base:m,downstream:n,head:r,projectGraph:p,projects:d,upstream:o,workspaceRoot:c}),notes:u,uncommittedFileCount:a.length}};export{D as s};
@@ -1 +1 @@
1
- import{createRequire as v}from"node:module";import{t as T}from"./compile-cache-DoMHRsRZ.js";import{l as w,i as R,a as j,b as M,c as m,g as S}from"./package-version-BomcrCSe.js";import{i as $}from"./index-BjdW45xX.js";let _;const x=s=>(_??=v(import.meta.url))(s),t=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,b=s=>{if(typeof t<"u"&&t.versions&&t.versions.node){const[e,o]=t.versions.node.split(".").map(Number);if(e>22||e===22&&o>=3||e===20&&o>=16)return t.getBuiltinModule(s)}return x(s)},{createRequire:y}=b("node:module");let N;const O=s=>(N??=y(import.meta.url))(s),r=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,f=s=>{if(typeof r<"u"&&r.versions&&r.versions.node){const[e,o]=r.versions.node.split(".").map(Number);if(e>22||e===22&&o>=3||e===20&&o>=16)return r.getBuiltinModule(s)}return O(s)},{execFileSync:C}=f("node:child_process"),{totalmem:I}=f("node:os"),q=/--max-old-space-size=(\d+)/,z=/--max-semi-space-size=(\d+)/,E=s=>Math.floor(I()/1024/1024*s),P=s=>s<=512?4:s<=1024?8:s<=2048?16:s<=4096?32:s<=8192?64:Math.floor(Math.log2(s))*8,d=(s,e)=>{for(const o of e){const n=s.exec(o);if(n)return Number.parseInt(n[1],10)}},B=s=>{const o=[...w()],n=[...R()],a=d(q,o),p=d(z,o);if(a!==void 0&&p!==void 0)return;const l=a??E(.75),g=p??P(l),c=[];if(a===void 0&&c.push(`--max-old-space-size=${String(l)}`),p===void 0&&c.push(`--max-semi-space-size=${String(g)}`),c.length!==0)try{C(j(),[...c,...o,...n.slice(1)],{env:M(),stdio:"inherit"}),m(0)}catch(h){const u=h.status;m(typeof u=="number"?u:1)}},V=()=>{process.env.VIS_VERSION=S()},H=s=>{!process.stdout.isTTY||$||process.env.TERM==="dumb"||process.stdout.write(`\x1B]0;${s}\x07`)},L=new Set(["","--help","--version","-h","-v","completion","dlx","exec","x"]),i=process.argv[2]??"";!L.has(i)&&!process.argv.includes("--help")&&!process.argv.includes("-h")&&B();process.argv.includes("--no-color")&&(process.env.NO_COLOR="1",process.env.FORCE_COLOR="0");V();T();(async()=>{if(i==="__pm-shim"){const{dispatchShim:e}=await import("../packem_chunks/dispatch.js");e(process.argv[3]??"",process.argv.slice(4));return}if(i==="x"){const{runLeanX:e}=await import("../packem_chunks/lean.js");await e(process.argv.slice(3));return}if(i==="exec"||i==="dlx"){const{runExecCli:e}=await import("../packem_chunks/cli-exec.js");await e();return}const{runCli:s}=await import("../packem_chunks/cli-main.js").then(e=>e.ax);await s()})();export{H as s};
1
+ import{createRequire as v}from"node:module";import{t as T}from"./compile-cache-DoMHRsRZ.js";import{l as w,i as R,a as j,b as M,c as m,g as S}from"./package-version-Bh_b5R5e.js";import{i as $}from"./index-BjdW45xX.js";let _;const x=s=>(_??=v(import.meta.url))(s),t=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,b=s=>{if(typeof t<"u"&&t.versions&&t.versions.node){const[e,o]=t.versions.node.split(".").map(Number);if(e>22||e===22&&o>=3||e===20&&o>=16)return t.getBuiltinModule(s)}return x(s)},{createRequire:y}=b("node:module");let N;const O=s=>(N??=y(import.meta.url))(s),r=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,f=s=>{if(typeof r<"u"&&r.versions&&r.versions.node){const[e,o]=r.versions.node.split(".").map(Number);if(e>22||e===22&&o>=3||e===20&&o>=16)return r.getBuiltinModule(s)}return O(s)},{execFileSync:C}=f("node:child_process"),{totalmem:I}=f("node:os"),q=/--max-old-space-size=(\d+)/,z=/--max-semi-space-size=(\d+)/,E=s=>Math.floor(I()/1024/1024*s),P=s=>s<=512?4:s<=1024?8:s<=2048?16:s<=4096?32:s<=8192?64:Math.floor(Math.log2(s))*8,d=(s,e)=>{for(const o of e){const n=s.exec(o);if(n)return Number.parseInt(n[1],10)}},B=s=>{const o=[...w()],n=[...R()],a=d(q,o),p=d(z,o);if(a!==void 0&&p!==void 0)return;const l=a??E(.75),g=p??P(l),c=[];if(a===void 0&&c.push(`--max-old-space-size=${String(l)}`),p===void 0&&c.push(`--max-semi-space-size=${String(g)}`),c.length!==0)try{C(j(),[...c,...o,...n.slice(1)],{env:M(),stdio:"inherit"}),m(0)}catch(h){const u=h.status;m(typeof u=="number"?u:1)}},V=()=>{process.env.VIS_VERSION=S()},H=s=>{!process.stdout.isTTY||$||process.env.TERM==="dumb"||process.stdout.write(`\x1B]0;${s}\x07`)},L=new Set(["","--help","--version","-h","-v","completion","dlx","exec","x"]),i=process.argv[2]??"";!L.has(i)&&!process.argv.includes("--help")&&!process.argv.includes("-h")&&B();process.argv.includes("--no-color")&&(process.env.NO_COLOR="1",process.env.FORCE_COLOR="0");V();T();(async()=>{if(i==="__pm-shim"){const{dispatchShim:e}=await import("../packem_chunks/dispatch.js");e(process.argv[3]??"",process.argv.slice(4));return}if(i==="x"){const{runLeanX:e}=await import("../packem_chunks/lean.js");await e(process.argv.slice(3));return}if(i==="exec"||i==="dlx"){const{runExecCli:e}=await import("../packem_chunks/cli-exec.js");await e();return}const{runCli:s}=await import("../packem_chunks/cli-main.js").then(e=>e.ax);await s()})();export{H as s};
@@ -1 +1 @@
1
- import{b as e}from"./vis-user-error-C_S0WF27.js";const o={filter:{alias:"F",description:"Filter packages by name pattern",multiple:!0,type:String},parallel:{defaultValue:!1,description:"Run concurrently without topological ordering",type:Boolean},recursive:{alias:"r",defaultValue:!1,description:"Run in every workspace package",type:Boolean},reverse:{defaultValue:!1,description:"Reverse topological execution order",type:Boolean},"shell-mode":{alias:"c",defaultValue:!1,description:"Execute within shell environment",type:Boolean},"workspace-root":{alias:"w",defaultValue:!1,description:"Run on workspace root only",type:Boolean}},l=e({argument:{description:"Command to execute followed by arguments",name:"command",type:String},description:"Execute a local node_modules/.bin command (no remote fallback)",examples:[["vis exec eslint .","Run local eslint"],["vis exec tsc --noEmit","Run local TypeScript check"],["vis exec -r -- eslint .","Run in all workspace packages"],["vis exec -c 'echo $PATH'","Shell mode"]],group:"Run & Execute",loader:()=>import("../packem_chunks/handler.js"),name:"exec",options:o});export{l as e};
1
+ import{b as e}from"./vis-user-error-Y7E_pUlk.js";const o={filter:{alias:"F",description:"Filter packages by name pattern",multiple:!0,type:String},parallel:{defaultValue:!1,description:"Run concurrently without topological ordering",type:Boolean},recursive:{alias:"r",defaultValue:!1,description:"Run in every workspace package",type:Boolean},reverse:{defaultValue:!1,description:"Reverse topological execution order",type:Boolean},"shell-mode":{alias:"c",defaultValue:!1,description:"Execute within shell environment",type:Boolean},"workspace-root":{alias:"w",defaultValue:!1,description:"Run on workspace root only",type:Boolean}},l=e({argument:{description:"Command to execute followed by arguments",name:"command",type:String},description:"Execute a local node_modules/.bin command (no remote fallback)",examples:[["vis exec eslint .","Run local eslint"],["vis exec tsc --noEmit","Run local TypeScript check"],["vis exec -r -- eslint .","Run in all workspace packages"],["vis exec -c 'echo $PATH'","Shell mode"]],group:"Run & Execute",loader:()=>import("../packem_chunks/handler.js"),name:"exec",options:o});export{l as e};