@visulima/vis 1.0.0-alpha.20 → 1.0.0-alpha.22

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.
Files changed (112) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/LICENSE.md +206 -141
  3. package/README.md +21 -4
  4. package/dist/config/index.d.ts +199 -6
  5. package/dist/packem_chunks/bin.js +318 -318
  6. package/dist/packem_chunks/bloom-status.js +2 -0
  7. package/dist/packem_chunks/bloom-sync.js +2 -0
  8. package/dist/packem_chunks/cache-attestation.js +1 -0
  9. package/dist/packem_chunks/config.js +15 -15
  10. package/dist/packem_chunks/fix.js +1 -1
  11. package/dist/packem_chunks/handler.js +1 -1
  12. package/dist/packem_chunks/handler10.js +2 -1
  13. package/dist/packem_chunks/handler11.js +1 -5
  14. package/dist/packem_chunks/handler12.js +5 -1
  15. package/dist/packem_chunks/handler13.js +1 -27
  16. package/dist/packem_chunks/handler14.js +28 -5
  17. package/dist/packem_chunks/handler15.js +5 -1
  18. package/dist/packem_chunks/handler16.js +1 -1
  19. package/dist/packem_chunks/handler17.js +1 -1
  20. package/dist/packem_chunks/handler18.js +1 -1
  21. package/dist/packem_chunks/handler19.js +1 -1
  22. package/dist/packem_chunks/handler2.js +4 -2
  23. package/dist/packem_chunks/handler20.js +1 -5
  24. package/dist/packem_chunks/handler21.js +5 -2
  25. package/dist/packem_chunks/handler22.js +2 -2
  26. package/dist/packem_chunks/handler23.js +2 -18
  27. package/dist/packem_chunks/handler24.js +18 -1
  28. package/dist/packem_chunks/handler25.js +1 -1
  29. package/dist/packem_chunks/handler26.js +1 -5
  30. package/dist/packem_chunks/handler27.js +5 -1
  31. package/dist/packem_chunks/handler28.js +1 -3
  32. package/dist/packem_chunks/handler29.js +3 -1
  33. package/dist/packem_chunks/handler3.js +4 -4
  34. package/dist/packem_chunks/handler30.js +1 -7
  35. package/dist/packem_chunks/handler31.js +6 -32
  36. package/dist/packem_chunks/handler32.js +33 -3
  37. package/dist/packem_chunks/handler33.js +3 -1
  38. package/dist/packem_chunks/handler34.js +1 -26
  39. package/dist/packem_chunks/handler35.js +26 -3
  40. package/dist/packem_chunks/handler36.js +5 -7
  41. package/dist/packem_chunks/handler37.js +6 -6
  42. package/dist/packem_chunks/handler38.js +1 -1
  43. package/dist/packem_chunks/handler39.js +61 -6
  44. package/dist/packem_chunks/handler4.js +6 -8
  45. package/dist/packem_chunks/handler40.js +6 -24
  46. package/dist/packem_chunks/handler41.js +215 -10
  47. package/dist/packem_chunks/handler42.js +24 -153
  48. package/dist/packem_chunks/handler43.js +153 -25
  49. package/dist/packem_chunks/handler44.js +10 -24
  50. package/dist/packem_chunks/handler45.js +25 -213
  51. package/dist/packem_chunks/handler46.js +24 -3
  52. package/dist/packem_chunks/handler47.js +3 -27
  53. package/dist/packem_chunks/handler48.js +21 -161
  54. package/dist/packem_chunks/handler49.js +173 -33
  55. package/dist/packem_chunks/handler5.js +8 -1
  56. package/dist/packem_chunks/handler50.js +34 -0
  57. package/dist/packem_chunks/handler6.js +1 -1
  58. package/dist/packem_chunks/handler7.js +1 -1
  59. package/dist/packem_chunks/handler8.js +1 -1
  60. package/dist/packem_chunks/handler9.js +1 -2
  61. package/dist/packem_chunks/heal-accept.js +1 -1
  62. package/dist/packem_chunks/heal.js +1 -1
  63. package/dist/packem_chunks/help-command.js +16 -16
  64. package/dist/packem_chunks/index.js +2 -2
  65. package/dist/packem_chunks/keys-refresh.js +1 -1
  66. package/dist/packem_chunks/list.js +1 -1
  67. package/dist/packem_chunks/loader.js +4 -1
  68. package/dist/packem_chunks/loader2.js +1 -0
  69. package/dist/packem_chunks/prune.js +1 -1
  70. package/dist/packem_chunks/run.js +1 -1
  71. package/dist/packem_chunks/status.js +1 -1
  72. package/dist/packem_chunks/sync.js +1 -1
  73. package/dist/packem_chunks/sync2.js +1 -1
  74. package/dist/packem_chunks/verify-lockfile.js +2 -0
  75. package/dist/packem_shared/{advisories-DsynpacV.js → advisories-DS8JEB_g.js} +1 -1
  76. package/dist/packem_shared/{ai-analysis-uYuTIIXi.js → ai-analysis-DGBZYlxF.js} +1 -1
  77. package/dist/packem_shared/{ai-cache-DuwHYx2O.js → ai-cache-BjlXWJtl.js} +1 -1
  78. package/dist/packem_shared/{ai-fix-DzrA-dVz.js → ai-fix-BhcTrkuW.js} +6 -6
  79. package/dist/packem_shared/cyclonedx-CO7-Y1B1.js +4 -0
  80. package/dist/packem_shared/dependency-scan-DPHTzA5r.js +1 -0
  81. package/dist/packem_shared/docker-lk0-5Z-i.js +60 -0
  82. package/dist/packem_shared/{failure-log-C3LEMmkq.js → failure-log-DF7nrFIs.js} +1 -1
  83. package/dist/packem_shared/{flakiness-Dq6K4ymq.js → flakiness-DKCOYwN7.js} +1 -1
  84. package/dist/packem_shared/index-B4gpNmrG.js +1 -0
  85. package/dist/packem_shared/license-zZU7aavK.js +1 -0
  86. package/dist/packem_shared/{lifecycle-Dv3nAtoD.js → lifecycle-boYwVQSE.js} +2 -2
  87. package/dist/packem_shared/{min-release-age-BFozFonQ.js → min-release-age-D462DvYM.js} +1 -1
  88. package/dist/packem_shared/{native-config-sync-Dvi1g2nQ.js → native-config-sync-B0_ef78M.js} +9 -9
  89. package/dist/packem_shared/osv-bloom-QSAn2Dcw.js +2 -0
  90. package/dist/packem_shared/provenance-smHa8efI.js +1 -0
  91. package/dist/packem_shared/{registry-keys-CewRFW0e.js → registry-keys-3qaVog76.js} +1 -1
  92. package/dist/packem_shared/resolve-explicit-BgFQHUEP.js +5 -0
  93. package/dist/packem_shared/{run-summary-utils-BaBGP3bo.js → run-summary-utils-DIJV_dUD.js} +1 -1
  94. package/dist/packem_shared/runtime-check-DrMx4Q9L.js +1 -0
  95. package/dist/packem_shared/s1ngularity-CwSBPB3I.js +1 -0
  96. package/dist/packem_shared/signatures-b-jJYoZd.js +2 -0
  97. package/dist/packem_shared/toolchain-OH1PXwbZ.js +5 -0
  98. package/dist/packem_shared/{typosquats-BCeR-sLf.js → typosquats-CJ4o1l7U.js} +1 -1
  99. package/dist/packem_shared/{verify-07kUNTuP.js → verify-CQbzknur.js} +1 -1
  100. package/dist/packem_shared/{vis-update-app-CFrlJ3mW.js → vis-update-app-Bnu1EIgE.js} +1 -1
  101. package/index.d.ts +78 -0
  102. package/index.js +57 -53
  103. package/package.json +22 -12
  104. package/schemas/project.schema.json +37 -7
  105. package/schemas/vis-config.schema.json +2376 -2026
  106. package/dist/packem_shared/cyclonedx-CiHXuG8M.js +0 -4
  107. package/dist/packem_shared/dependency-scan-DC3nAFHS.js +0 -1
  108. package/dist/packem_shared/docker-B-CIN_nj.js +0 -60
  109. package/dist/packem_shared/resolve-explicit-CC4Kifk5.js +0 -5
  110. package/dist/packem_shared/runtime-check-BusAwPb2.js +0 -1
  111. package/dist/packem_shared/signatures-5ZdjJ2Pu.js +0 -2
  112. package/dist/packem_shared/toolchain-Cc3cwyLP.js +0 -5
@@ -1,24 +1,10 @@
1
- var Fe=Object.defineProperty;var $=(e,t)=>Fe(e,"name",{value:t,configurable:!0});import{createRequire as Ae}from"node:module";import{M as g,i as S,$ as N,b as pe}from"./config.js";import{bk as he,bl as X,bm as Me,bn as Ne,bo as Z,bp as Be,bq as He,b8 as De,an as We,a$ as Le,br as me,bs as ke,bt as ye}from"./bin.js";import{NATIVE_BINDING_VERSION as ie,allKnownTags as Ve,tagsFromPath as Ge,tagsFromPaths as Je,parseShebang as Ke}from"#native";const _e=Ae(import.meta.url),I=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,q=$(e=>{if(typeof I<"u"&&I.versions&&I.versions.node){const[t,o]=I.versions.node.split(".").map(Number);if(t>22||t===22&&o>=3||t===20&&o>=16)return I.getBuiltinModule(e)}return _e(e)},"__cjs_getBuiltinModule"),{readdirSync:de,statSync:z,readFileSync:B,existsSync:H,writeFileSync:x,unlinkSync:Pe,rmSync:Te,chmodSync:Ce}=q("node:fs"),{cwd:M}=I,{createInterface:Ie}=q("node:readline"),{spawnSync:R}=q("node:child_process"),{basename:qe}=q("node:path");var Ue=Object.defineProperty,V=$((e,t)=>Ue(e,"name",{value:t,configurable:!0}),"c$5");const ze=/^# ([^:\s]\S*)(?::\s+(.+))?$/,Ye=V(e=>{const t=[],o=e.split(`
2
- `);let r;for(const s of o){if(s.startsWith("#!")||s.startsWith("# Generated by")||s.startsWith("# NOTE:")||s==="set -e"||s==="")continue;const n=ze.exec(s);if(n){r&&t.push(r),r={command:"",id:n[1]??"",...n[2]?{name:n[2]}:{}};continue}r?r.command=r.command.length>0?`${r.command}
3
- ${s}`:s:r={command:s,id:"(custom)"}}return r&&t.push(r),t},"parseStageScript"),Qe=V((e,t)=>{const o=g(e,t),r=[],s=new Set(he);if(S(o))for(const n of de(o)){if(n.startsWith(".")||n==="_"||!s.has(n))continue;const i=g(o,n);if(!z(i).isFile())continue;const a=N(i),c=Ye(a);r.push({blocks:c,rawLineCount:a.split(`
4
- `).length,stage:n})}return r.sort((n,i)=>n.stage.localeCompare(i.stage)),{hooksDirectory:t,stages:r}},"listHooks"),Xe=V(e=>{const t=[];if(e.stages.length===0)return t.push(`No hooks installed in ${e.hooksDirectory}/.`),t;t.push(`Hooks in ${e.hooksDirectory}/:`);for(const o of e.stages)if(t.push("",`${o.stage} (${o.rawLineCount} lines)`),o.blocks.length===0)t.push(" (empty)");else for(const r of o.blocks){const s=r.name?`${r.id} — ${r.name}`:r.id;t.push(` - ${s}`);const n=r.command.split(`
5
- `).find(i=>i.trim()!=="");if(n){const i=n.length>120?`${n.slice(0,117)}...`:n;t.push(` ${i}`)}}return t},"formatListResult"),Ze=V((e,t)=>{const o=Qe(M(),e);for(const r of Xe(o))t.info(r)},"runList");var et=Object.defineProperty,j=$((e,t)=>et(e,"name",{value:t,configurable:!0}),"o$2");const ae=4;if(ie!==ae)throw new Error(`vis native binding ABI mismatch: expected ${ae}, got ${ie}. Rebuild via \`pnpm --filter @visulima/vis run build:native\` or reinstall the platform binding package.`);const $e={".releaserc":["release-config","vis-config"],".releaserc.json":["release-config","vis-config"],"nx.json":["nx-workspace","vis-config"],"packem.config.js":["packem-config","vis-config"],"packem.config.mjs":["packem-config","vis-config"],"packem.config.ts":["packem-config","vis-config"],"pnpm-workspace.yaml":["pnpm-workspace","vis-config"],"project.json":["nx-project","vis-config"],"turbo.json":["turbo-config","vis-config"],"vis.config.js":["vis-config"],"vis.config.ts":["vis-config"]},ve=[[".releaserc.json",["release-config","vis-config"]]],we=j(e=>{const t=new Set,o=qe(e),r=$e[o];if(r)for(const n of r)t.add(n);const s=o.toLowerCase();for(const[n,i]of ve)if(s.endsWith(n))for(const a of i)t.add(a);return t},"classifyVis"),be=new Set([...Object.values($e).flat(),...ve.flatMap(([,e])=>e)]);let K;const xe=j(()=>(K||(K=new Set(Ve())),K),"getPrekUniverse");j(e=>{const t=new Set(Ge(e)),o=we(e);return{all:new Set([...t,...o]),prek:t,vis:o}},"classify");const tt=j(e=>{const t=Je([...e]),o=new Map;for(const[r,s]of e.entries()){const n=new Set(t[r]),i=we(s),a=new Set([...n,...i]);o.set(s,{all:a,prek:n,vis:i})}return o},"classifyMany");j(e=>Ke(e),"parseShebang");const ot=j(e=>xe().has(e)||be.has(e),"isKnownTag");j(e=>xe().has(e),"isPrekTag");j(e=>be.has(e),"isVisTag");const rt=j((e,t)=>{const{all:o}=e;if(t.types&&t.types.length>0){for(const r of t.types)if(!o.has(r))return!1}if(t.typesOr&&t.typesOr.length>0){let r=!1;for(const s of t.typesOr)if(o.has(s)){r=!0;break}if(!r)return!1}if(t.excludeTypes&&t.excludeTypes.length>0){for(const r of t.excludeTypes)if(o.has(r))return!1}return!0},"matchesFilter");var nt=Object.defineProperty,_=$((e,t)=>nt(e,"name",{value:t,configurable:!0}),"i$3");const st=_(e=>{let t=0;const{length:o}=e,r=_(()=>{for(;t<o&&/\s/.test(e[t]);)t+=1},"skipWs"),s=_(()=>{if(e[t]!=='"')throw new Error(`expected string at ${t}`);t+=1;const c=t;for(;t<o&&e[t]!=='"';)t+=e[t]==="\\"?2:1;const l=e.slice(c,t);return t+=1,JSON.parse(`"${l}"`)},"parseString"),n=_(()=>{switch(r(),e[t]){case'"':{s();break}case"[":{i();break}case"{":{a();break}default:for(;t<o&&!",}]".includes(e[t])&&!/\s/.test(e[t]);)t+=1}},"parseValue"),i=_(()=>{if(t+=1,r(),e[t]==="]"){t+=1;return}for(;t<o;)if(n(),r(),e[t]===",")t+=1,r();else if(e[t]==="]"){t+=1;return}},"parseArray"),a=_(()=>{t+=1,r();const c=new Set;if(e[t]==="}"){t+=1;return}for(;t<o;){r();const l=s();if(c.has(l))throw new Error(`Duplicate key: ${l}`);if(c.add(l),r(),e[t]!==":")throw new Error(`expected colon at ${t}`);if(t+=1,n(),r(),e[t]===",")t+=1,r();else if(e[t]==="}"){t+=1;return}}},"parseObject");r(),n()},"detectDuplicateJsonKeys"),it=_((e,t,o)=>{let r=0;for(const s of e){const n=B(g(o.root,s),"utf8");try{JSON.parse(n),st(n)}catch(i){const a=i instanceof Error?i.message:String(i);o.logger.info(`${s}: Failed to json decode (${a})`),r=1}}return r},"runCheckJson");var at=Object.defineProperty,Ee=$((e,t)=>at(e,"name",{value:t,configurable:!0}),"c$4");const ct=Ee(e=>{const t=R("git",["rev-parse","--git-dir"],{cwd:e,encoding:"utf8"});if(t.status!==0)return!1;const o=t.stdout.trim(),r=o.startsWith("/")?o:g(e,o);return H(g(r,"MERGE_MSG"))?H(g(r,"MERGE_HEAD"))||H(g(r,"rebase-apply"))||H(g(r,"rebase-merge")):!1},"isInMerge"),ft=["<<<<<<< ","======= ",`=======\r
6
- `,`=======
7
- `,">>>>>>> "],lt=Ee((e,t,o)=>{if(!t.includes("--assume-in-merge")&&!ct(o.root))return 0;let r=0;for(const s of e){const n=B(g(o.root,s),"utf8").split(`
8
- `);for(let i=0;i<n.length;i+=1){const a=n[i]+(i<n.length-1?`
9
- `:"");for(const c of ft)a.startsWith(c)&&(o.logger.info(`${s}:${i+1}: Merge conflict string ${JSON.stringify(c.trim())} found`),r=1)}}return r},"runCheckMergeConflict");var ut=Object.defineProperty,gt=$((e,t)=>ut(e,"name",{value:t,configurable:!0}),"c$3");const dt=gt((e,t,o)=>{let r=0;for(const s of e){const n=g(o.root,s),i=B(n);if(i.length===0)continue;let a=i.length;const c=i[a-1];if(c!==10&&c!==13){x(n,Buffer.concat([i,Buffer.from([10])])),o.logger.info(`Fixing ${s}`),r=1;continue}for(;a>0&&(i[a-1]===10||i[a-1]===13);)a-=1;if(a===0){x(n,Buffer.alloc(0)),o.logger.info(`Fixing ${s}`),r=1;continue}const l=i.subarray(a);let d;l[0]===13&&l[1]===10?d=Buffer.from([13,10]):l[0]===13?d=Buffer.from([13]):d=Buffer.from([10]),!l.equals(d)&&(x(n,Buffer.concat([i.subarray(0,a),d])),o.logger.info(`Fixing ${s}`),r=1)}return r},"runEndOfFileFixer");var pt=Object.defineProperty,ce=$((e,t)=>pt(e,"name",{value:t,configurable:!0}),"h$2");const ht={cr:Buffer.from([13]),crlf:Buffer.from([13,10]),lf:Buffer.from([10])},mt=new Set(["auto","cr","crlf","lf","no"]),kt=ce((e,t,o)=>{let r="auto";for(let n=0;n<t.length;n+=1){const i=t[n];if(i==="-f"||i==="--fix"){n+=1;const a=t[n];if(a===void 0)return o.logger.error(`mixed-line-ending: ${i} requires a value (auto|no|lf|crlf|cr)`),2;r=a}else i.startsWith("--fix=")&&(r=i.slice(6))}if(!mt.has(r))return o.logger.error(`mixed-line-ending: invalid --fix value ${r}`),2;let s=0;for(const n of e){const i=g(o.root,n),a=B(i),c=[],l=ce(f=>{const p=c.find(b=>b.kind===f);p?p.count+=1:c.push({count:1,kind:f})},"bumpCount"),d=[];let u=0;for(let f=0;f<a.length;f+=1){const p=a[f];p===13&&a[f+1]===10?(d.push({content:a.subarray(u,f),ending:"crlf"}),l("crlf"),f+=1,u=f+1):p===13?(d.push({content:a.subarray(u,f),ending:"cr"}),l("cr"),u=f+1):p===10&&(d.push({content:a.subarray(u,f),ending:"lf"}),l("lf"),u=f+1)}u<a.length&&d.push({content:a.subarray(u),ending:null});const m=c.length>1;if(r==="no"){m&&(o.logger.info(`${n}: mixed line endings`),s=1);continue}let k;if(r==="auto"){if(!m)continue;let f;for(const p of c)(!f||p.count>f.count)&&(f=p);k=f?.kind}else if(k=r,!c.some(f=>f.kind!==k&&f.count>0))continue;const w=ht[k],h=[];for(const f of d)h.push(f.content),f.ending!==null&&h.push(w);x(i,Buffer.concat(h)),o.logger.info(`${n}: fixed mixed line endings`),s=1}return s},"runMixedLineEnding");var yt=Object.defineProperty,$t=$((e,t)=>yt(e,"name",{value:t,configurable:!0}),"g$3");const fe=new Set([9,11,12,13,32]),vt=/\.(?:md|markdown|mdown|mdx)$/i,wt=$t((e,t,o)=>{let r=0;for(const s of e){const n=vt.test(s),i=g(o.root,s),a=B(i),c=[];let l=0;for(;l<=a.length;){let u=l;for(;u<a.length&&a[u]!==10;)u+=1;const m=u<a.length&&a[u]===10;let k=u,w=!1;m&&u>l&&a[u-1]===13&&(w=!0,k=u-1);const h=a.subarray(l,k);let f=h.length;for(;f>0&&fe.has(h[f-1]);)f-=1;const p=h.some(b=>!fe.has(b));if(n&&h.length>=2&&h[h.length-1]===32&&h[h.length-2]===32&&p&&(f=Math.min(f+2,h.length)),c.push(h.subarray(0,f)),w&&c.push(Buffer.from([13])),m&&c.push(Buffer.from([10])),!m)break;l=u+1}const d=Buffer.concat(c);d.equals(a)||(x(i,d),o.logger.info(`Fixing ${s}`),r=1)}return r},"runTrailingWhitespace");var bt=Object.defineProperty,Se=$((e,t)=>bt(e,"name",{value:t,configurable:!0}),"t");const ee={"check-json":it,"check-merge-conflict":lt,"end-of-file-fixer":dt,"mixed-line-ending":kt,"trailing-whitespace":wt},xt=Object.keys(ee).sort();Se(e=>Object.hasOwn(ee,e),"isBuiltin");const Et=Se(e=>ee[e],"getBuiltin");var St=Object.defineProperty,O=$((e,t)=>St(e,"name",{value:t,configurable:!0}),"r");const F="config.json",W=1,Rt=new Set(["alwaysRun","args","builtin","entry","exclude","excludeTypes","fail","files","id","name","passFilenames","types","typesOr","verbose"]),jt=new Set(["failFast","stages","version"]),Ot=["args","exclude","excludeTypes","files","passFilenames","types","typesOr"],Re=O((e,t)=>g(e,t,F),"configPath"),Y=O(e=>e!==null&&typeof e=="object"&&!Array.isArray(e),"isStringRecord"),D=O(e=>{if(!Array.isArray(e))return;const t=[];for(const o of e){if(typeof o!="string")return;t.push(o)}return t},"asStringArray"),L=O(e=>typeof e=="boolean"?e:void 0,"asBoolean"),C=O(e=>typeof e=="string"&&e.length>0?e:void 0,"asNonEmptyString"),Ft=O((e,t,o)=>{if(!Y(e))throw new TypeError("hook entry must be an object");if(typeof e.id!="string"||e.id.length===0)throw new TypeError("hook entry is missing `id`");const r={id:e.id},s=L(e.alwaysRun);s!==void 0&&(r.alwaysRun=s);const n=D(e.args);n&&(r.args=n);const i=C(e.builtin);i&&(r.builtin=i);const a=C(e.entry);a&&(r.entry=a);const c=C(e.exclude);c&&(r.exclude=c);const l=D(e.excludeTypes);l&&(r.excludeTypes=l);const d=C(e.fail);d&&(r.fail=d);const u=C(e.files);u&&(r.files=u);const m=C(e.name);m&&(r.name=m);const k=L(e.passFilenames);k!==void 0&&(r.passFilenames=k);const w=D(e.types);w&&(r.types=w);const h=D(e.typesOr);h&&(r.typesOr=h);const f=L(e.verbose);if(f!==void 0&&(r.verbose=f),[r.builtin,r.entry,r.fail].filter(p=>p!==void 0).length!==1)throw new TypeError(`hook "${r.id}" must set exactly one of \`builtin\`, \`entry\`, \`fail\``);if(r.fail!==void 0){const p=Ot.filter(b=>r[b]!==void 0);if(p.length>0)throw new TypeError(`hook "${r.id}" is a \`fail\` entry — remove ${p.join(", ")} (filters do not apply)`)}for(const p of Object.keys(e))Rt.has(p)||t.push({hookId:r.id,message:`unknown field "${p}" ignored`,stage:o});return r},"parseEntry"),At=O((e,t)=>{if(!Y(e))throw new TypeError("hook config must be an object");if(e.version!==W)throw new TypeError(`unsupported hook config version: expected ${W}, got ${String(e.version)}`);if(!Y(e.stages))throw new TypeError("hook config is missing `stages` map");const o={};for(const[n,i]of Object.entries(e.stages)){if(!Array.isArray(i))throw new TypeError(`hook config: stage "${n}" must be an array`);o[n]=i.map(a=>Ft(a,t,n))}const r={stages:o,version:W},s=L(e.failFast);s!==void 0&&(r.failFast=s);for(const n of Object.keys(e))jt.has(n)||t.push({message:`unknown top-level field "${n}" ignored`});return r},"parseConfig"),je=O((e,t=X,o)=>{const r=Re(e,t);if(!S(r))return;const s=N(r);let n;try{n=JSON.parse(s)}catch(i){const a=i instanceof Error?i.message:String(i);throw new TypeError(`failed to parse ${r}: ${a}`,{cause:i})}return At(n,o??[])},"loadHookConfig"),_t=O((e,t,o)=>{const r=Re(e,t);x(r,`${JSON.stringify(o,void 0,4)}
10
- `,"utf8")},"writeHookConfig");var Pt=Object.defineProperty,v=$((e,t)=>Pt(e,"name",{value:t,configurable:!0}),"d");const Tt=new Map([["pre-commit/pre-commit-hooks#check-json","check-json"],["pre-commit/pre-commit-hooks#check-merge-conflict","check-merge-conflict"],["pre-commit/pre-commit-hooks#end-of-file-fixer","end-of-file-fixer"],["pre-commit/pre-commit-hooks#mixed-line-ending","mixed-line-ending"],["pre-commit/pre-commit-hooks#trailing-whitespace","trailing-whitespace"]]),Ct=/[<>=!~]=/,It=/github\.com[/:]([^/\s]+\/[^/\s.]+)/i,Mt="# Generated by `vis hook migrate` from prek",Nt=v(e=>`#!/usr/bin/env sh
11
- ${Mt}
12
- exec vis hook run ${e} "$@"
13
- `,"stageScriptBody"),te=v(e=>{for(const t of Me)if(S(g(e,t)))return t},"detectPrekConfig"),Bt=v(e=>Ne[e]??e,"mapPrekStage"),Ht=v(e=>It.exec(e)?.[1]??e,"normalizeRepoKey"),Dt=v(e=>{if(Ct.test(e))return;if(e.startsWith("@")){const r=e.indexOf("@",1);if(r===-1)return{name:e,version:"latest"};const s=e.slice(r+1).trim();return{name:e.slice(0,r),version:s||"latest"}}const t=e.indexOf("@");if(t===-1)return{name:e,version:"latest"};const o=e.slice(t+1).trim();return{name:e.slice(0,t),version:o||"latest"}},"parseAdditionalDep"),Wt=v(e=>{const t=[];for(const o of[e.types,e.types_or,e.exclude_types])for(const r of o??[])ot(r)||t.push(r);return t},"unknownTypes"),Lt=v((e,t)=>(e.stages&&e.stages.length>0?e.stages:t??["pre-commit"]).map(o=>Bt(o)),"resolveStages"),qt=v((e,t,o)=>{const r=e.id??"<unknown>",s=Z.has(t),n={id:r};return e.name&&(n.name=e.name),e.language==="fail"?(n.fail=e.entry??e.name??r,n):(o?n.builtin=o:e.entry&&(n.entry=e.entry),Array.isArray(e.args)&&e.args.length>0&&(n.args=[...e.args]),s||(e.files&&(n.files=e.files),e.exclude&&(n.exclude=e.exclude),e.types&&e.types.length>0&&(n.types=[...e.types]),e.types_or&&e.types_or.length>0&&(n.typesOr=[...e.types_or]),e.exclude_types&&e.exclude_types.length>0&&(n.excludeTypes=[...e.exclude_types])),(e.pass_filenames===!1||s)&&(n.passFilenames=!1),(e.always_run||s)&&(n.alwaysRun=!0),e.verbose&&(n.verbose=!0),n)},"buildHookEntry"),Vt=v((e,t,o,r)=>{if(Array.isArray(e.additional_dependencies))for(const s of e.additional_dependencies){const n=Dt(s);if(!n){r.push(`"${t}": additional_dependency "${s}" uses a pip-style pin and cannot be added to package.json — install manually.`);continue}o.push({hookId:t,name:n.name,raw:s,version:n.version})}},"collectAdditionalDeps"),Gt=v(e=>{const t={},o=[],r=[],s=[],n=[];(e.files||e.exclude)&&r.push("top-level files/exclude filter dropped — apply it per hook if needed");for(const a of e.repos??[]){const c=a.repo??"<unknown>",l=c==="local",d=l?void 0:Ht(c);for(const u of a.hooks??[]){const m=u.id??"<unknown>";let k;if(l){const f=u.language??"system";if(!Be.has(f)){o.push({hookId:m,reason:`language "${f}" needs an isolated toolchain — run via prek or reimplement as a system command`,repo:c});continue}if(f!=="fail"&&!u.entry){o.push({hookId:m,reason:"missing `entry`",repo:c});continue}}else if(d&&(k=Tt.get(`${d}#${m}`)),!k){o.push({hookId:m,reason:`remote repo "${c}"@${a.rev??"?"} has no bundled equivalent — run via prek or replace with a system command`,repo:c});continue}Vt(u,m,n,s);const w=Wt(u);w.length>0&&r.push(`hook "${m}": unsupported types ${w.join(", ")} — those entries are ignored by the dispatcher`);const h=Lt(u,e.default_stages);for(const f of h){if(f==="manual")continue;if(!He.has(f)){o.push({hookId:m,reason:`unsupported stage "${f}"`,repo:c});continue}const p=qt(u,f,k),b=t[f];b?b.push(p):t[f]=[p]}}}const i={stages:t,version:W};return e.fail_fast&&(i.failFast=!0),{additionalDeps:n,config:i,droppedFilters:r,manualSteps:s,skippedHooks:o}},"convertPrekConfig"),Jt=v(e=>{const t=De(e);if(t&&typeof t=="object")return t},"parsePrekConfig"),Kt=v(e=>{if(e.endsWith(".toml")){const o=We(e);return o&&typeof o=="object"?o:void 0}const t=N(e);return Jt(t)},"loadPrekConfig"),Ut=v((e,t,o)=>{const r=g(e,"package.json"),s=[],n=[];if(!S(r)||t.length===0)return{added:s,skipped:n};const i=N(r),a=JSON.parse(i),c=a.devDependencies??{},l=a.dependencies??{};for(const u of t){if(u.name in c||u.name in l){n.push(u.name);continue}c[u.name]=u.version,s.push(u.name)}if(s.length===0)return{added:s,skipped:n};a.devDependencies=c;const d=Le(r,i,{defaultIndent:" ",useEditorconfig:o});return x(r,`${JSON.stringify(a,void 0,d)}
14
- `,"utf8"),{added:s,skipped:n}},"mergeAdditionalDependencies"),zt=v((e,t)=>{const o=g(e,t);pe(o),x(g(o,"README.md"),["# Vis hook config","","`config.json` is the single source of truth for what each stage","script runs. Auto-generated by `vis hook migrate`. Edit by hand","or re-run the migrator after updating your prek config.","",`Bundled builtins: ${xt.join(", ")}`,""].join(`
15
- `),"utf8")},"writeConfigReadme"),Yt=v((e,t)=>{R("prek",["--version"],{cwd:e,encoding:"utf8"}).status===0?R("prek",["uninstall"],{cwd:e,encoding:"utf8"}).status===0?t.info("Detached prek via `prek uninstall`."):t.info("`prek uninstall` did not exit cleanly — continuing. You may need to run it manually."):t.info("prek binary not found on PATH — skipping `prek uninstall`. Run it manually if prek is installed elsewhere.")},"detachPrek"),Oe=v((e,t,o,r={})=>{const s=te(e),n=r.dryRun===!0;if(!s)return{isError:!0,message:"No prek configuration found (.pre-commit-config.yaml, .pre-commit-config.yml, or prek.toml)"};o.info(`Found prek config at ${s}`);const i=g(e,s),a=N(i),c=Kt(i);if(!c)return{isError:!0,message:`Could not parse ${s}`};const{additionalDeps:l,config:d,droppedFilters:u,manualSteps:m,skippedHooks:k}=Gt(c),w=Object.keys(d.stages);if(w.length===0&&k.length===0)return{isError:!0,message:`${s} has no hooks to migrate`};if(!n){const y=R("git",["config","--local","core.hooksPath"],{cwd:e,encoding:"utf8"});if(y.status===0){const J=y.stdout?.toString().trim();J&&(J.includes(".prek")||J.includes("prek-hooks"))&&R("git",["config","--local","--unset","core.hooksPath"],{cwd:e})}const T=me(t);if(T.isError)return T;T.message&&o.info(T.message)}const h=g(e,t);n||pe(h),n?o.info(` (would write) ${t}/${F}`):(_t(e,t,d),zt(e,t),o.info(` Wrote ${t}/${F}`));let f=0;for(const y of w){const T=Nt(y);n?o.info(` (would write) ${t}/${y}`):(x(g(h,y),T,{mode:493}),o.info(` Wrote ${t}/${y}`)),f+=1}const{added:p,skipped:b}=n?{added:l.map(y=>y.name),skipped:[]}:Ut(e,l,r.useEditorconfig);if(p.length>0){const y=n?"would add":"Added";o.info(`${y} ${p.length} package${p.length===1?"":"s"} to devDependencies: ${p.join(", ")}`),n||o.info("Run your package manager's install (e.g. `pnpm install`) to pick up the new devDependencies.")}b.length>0&&o.info(`Skipped ${b.length} already-declared package${b.length===1?"":"s"}: ${b.join(", ")}`),n||Yt(e,o);const se=`${i}.bak`;if(n?o.info(` (would remove) ${s} and back it up to ${s}.bak`):(S(se)||x(se,a,"utf8"),Pe(i),o.info(`Removed ${s} (backup at ${s}.bak)`)),k.length>0){o.warn(`Skipped ${k.length} hook${k.length===1?"":"s"} that cannot run without prek:`);for(const y of k)o.warn(` - ${y.repo}::${y.hookId} — ${y.reason}`)}if(u.length>0){o.warn("Partial filter translations:");for(const y of u)o.warn(` - ${y}`)}if(m.length>0){o.warn("Manual follow-up required:");for(const y of m)o.warn(` - ${y}`)}return{isError:!1,message:`${n?"would migrate":"Migration complete:"} ${f} stage script${f===1?"":"s"} ${n?"into":"written to"} ${t}/`}},"migrateFromPrek");var Qt=Object.defineProperty,oe=$((e,t)=>Qt(e,"name",{value:t,configurable:!0}),"i$2");const Xt=oe(e=>{const t=[];let o=0;for(let r=0;r<e.length;r+=1)e[r]===0&&(r>o&&t.push(e.subarray(o,r).toString("utf8")),o=r+1);return o<e.length&&t.push(e.subarray(o).toString("utf8")),t},"splitNulBuffer"),U=oe((e,t,o)=>{const r=R("git",[...e],{cwd:o,encoding:"buffer"});if(r.status!==0){const s=r.stderr?r.stderr.toString():"";throw new Error(`git ${t} failed${s?`: ${s.trim()}`:""}`)}return r.stdout.length===0?[]:Xt(r.stdout)},"gitListFiles"),Zt=oe((e,t)=>{switch(e.kind){case"all":return U(["ls-files","-z"],"ls-files",t);case"range":return U(["diff","--name-only","--diff-filter=ACM","-z",e.fromRef,e.toRef],"diff --from-ref/--to-ref",t);case"staged":return U(["diff","--cached","--name-only","--diff-filter=ACM","-z"],"diff --cached",t);default:{const o=e;throw new Error(`unknown discover mode: ${JSON.stringify(o)}`)}}},"discoverFiles");var eo=Object.defineProperty,re=$((e,t)=>eo(e,"name",{value:t,configurable:!0}),"i$1");const le=re((e,t)=>{try{return new RegExp(e)}catch(o){const r=o instanceof Error?o.message:String(o);throw new Error(`invalid ${t} regex ${JSON.stringify(e)}: ${r}`,{cause:o})}},"compileRegex"),to=re(e=>e.types&&e.types.length>0||e.typesOr&&e.typesOr.length>0||e.excludeTypes&&e.excludeTypes.length>0||!1,"hasTagFilters"),oo=re((e,t)=>{let o=e;if(t.files){const n=le(t.files,"files");o=o.filter(i=>n.test(i))}if(t.exclude){const n=le(t.exclude,"exclude");o=o.filter(i=>!n.test(i))}if(!to(t))return[...o];const r=tt(o),s={excludeTypes:t.excludeTypes,types:t.types,typesOr:t.typesOr};return o.filter(n=>{const i=r.get(n);return i?rt(i,s):!1})},"applyHookFilter");var ro=Object.defineProperty,A=$((e,t)=>ro(e,"name",{value:t,configurable:!0}),"u$2");const no=32*1024,so=A((e,t)=>{const o=[],r=Math.max(1024,no-t);let s=[],n=0;for(const i of e){const a=Buffer.byteLength(i,"utf8")+8;n+a>r&&s.length>0&&(o.push(s),s=[],n=0),s.push(i),n+=a}return s.length>0&&o.push(s),o},"chunkFiles"),io=A(e=>({error:A(t=>{e.error(t)},"error"),info:A(t=>{e.info(t)},"info")}),"builtinLoggerFor"),ue=A((e,t,o)=>o?o.message:t?`terminated by signal ${t}`:`exited with status ${String(e)}`,"describeSpawnFailure"),ao=A((e,t,o,r,s)=>{const n=r?s.extraArgs:[];if(!o||t.length===0){const c=R("sh",["-c",e,"sh",...n],{cwd:s.root,stdio:"inherit"});return c.status===null?(s.logger.error(`hook command failed: ${ue(c.status,c.signal,c.error)}`),1):c.status}const i=Buffer.byteLength(e,"utf8")+Buffer.byteLength("sh","utf8")+Buffer.byteLength("-c","utf8")+n.reduce((c,l)=>c+Buffer.byteLength(l,"utf8")+8,0)+64;let a=0;for(const c of so(t,i)){const l=R("sh",["-c",`${e} "$@"`,"sh",...n,...c],{cwd:s.root,stdio:"inherit"});l.status===null?(s.logger.error(`hook command failed: ${ue(l.status,l.signal,l.error)}`),a|=1):a|=l.status}return a},"runShellCommand"),co=A((e,t,o)=>{if(e.fail!==void 0)return o.logger.info(e.fail),1;const r=Z.has(o.stage);let s;try{s=oo(t,e)}catch(c){const l=c instanceof Error?c.message:String(c);return o.logger.error(`hook "${e.id}": ${l}`),2}if(s.length===0&&e.alwaysRun!==!0&&!r)return 0;const n=e.passFilenames!==!1;if(e.verbose){const c=e.name??e.id;o.logger.info(`+ ${c}`)}if(e.builtin){const c=Et(e.builtin);if(!c)return o.logger.error(`unknown builtin "${e.builtin}" referenced by hook "${e.id}"`),2;const l={logger:io(o.logger),root:o.root};try{return c(s,e.args??[],l)}catch(d){const u=d instanceof Error?d.message:String(d);return o.logger.error(`builtin "${e.builtin}" crashed: ${u}`),1}}if(e.entry===void 0)return o.logger.error(`hook "${e.id}" has no \`entry\`, \`builtin\`, or \`fail\` to run`),2;const i=(e.args??[]).map(c=>`'${c.replaceAll("'",String.raw`'\''`)}'`).join(" "),a=i?`${e.entry} ${i}`:e.entry;return ao(a,s,n,r,o)},"runHookEntry"),fo=A((e,t,o,r)=>{const s=e.stages[t];if(!s||s.length===0)return 0;let n=0;for(const i of s){const a=co(i,o,r);if(a!==0&&(n|=a,e.failFast))return n}return n},"runStage");var lo=Object.defineProperty,ne=$((e,t)=>lo(e,"name",{value:t,configurable:!0}),"s");const uo="pre-commit",go=ne(e=>{if(e.lastCommit&&(e.fromRef||e.toRef))throw new Error("--last-commit cannot be combined with --from-ref or --to-ref");const t=e.lastCommit?"HEAD~1":e.fromRef,o=e.lastCommit?"HEAD":e.toRef;if(t&&!o||o&&!t)throw new Error("--from-ref and --to-ref must be specified together");return t&&o?{fromRef:t,kind:"range",toRef:o}:e.allFiles?{kind:"all"}:{kind:"staged"}},"resolveDiscoverMode"),po=ne((e,t,o,r)=>{const s=o.stage??uo,n=je(e,t);if(!n)throw new Error(`No hook config found at ${t}/config.json. Install or migrate hooks first.`);const i=n.stages[s];if(!i||i.length===0)return r.info(`No hooks configured for stage "${s}".`),0;const a=Z.has(s)?void 0:go(o),c=a?.kind==="all"?" (--all-files)":a?.kind==="range"?` (${a.fromRef}..${a.toRef})`:"";r.info(`Running ${s}${c}`);const l=a?Zt(a,e):[],d={extraArgs:o.extraArgs??[],logger:r,root:e,stage:s};return fo(n,s,l,d)},"runHookStage"),ho=ne((e,t,o)=>{const r=po(M(),e,t,o);if(r!==0)throw new Error(`Hook stage exited with code ${r}`)},"runRun");var mo=Object.defineProperty,ko=$((e,t)=>mo(e,"name",{value:t,configurable:!0}),"e");const yo=ko((e=X)=>{if(R("git",["config","--local","core.hooksPath"]).status!==0)return{isError:!1,message:"No custom hooks path configured"};const{status:t,stderr:o}=R("git",["config","--local","--unset","core.hooksPath"]);if(t===null)return{isError:!0,message:"git command not found"};if(t&&t!==5)return{isError:!0,message:String(o)};const r=g(e,"_");return S(r)&&Te(r,{force:!0,recursive:!0}),{isError:!1,message:""}},"uninstallHooks");var $o=Object.defineProperty,G=$((e,t)=>$o(e,"name",{value:t,configurable:!0}),"u");const vo=new Set(he),wo=G(e=>{const t=R("sh",["-n",e],{encoding:"utf8"});if(t.status===null)return`failed to run "sh -n" (${t.error?.message??"unknown error"})`;if(t.status!==0)return t.stderr.trim()||`sh -n exited with ${t.status}`},"runSyntaxCheck"),bo=G((e,t)=>{const o=[],r=g(e,t),s=R("git",["config","--local","core.hooksPath"],{cwd:e,encoding:"utf8"});if(s.status===0){const i=s.stdout.trim(),a=`${t}/_`;i&&i!==a&&o.push({kind:"warning",message:`core.hooksPath is "${i}" — expected "${a}". Re-run \`vis hook install\` to fix.`})}else o.push({kind:"warning",message:"core.hooksPath is not set — run `vis hook install`."});if(S(g(r,"_"))||o.push({kind:"error",message:`Dispatcher directory ${t}/_ is missing. Run \`vis hook install\`.`}),!S(r))return o.push({kind:"error",message:`Hooks directory ${t}/ is missing.`}),{issues:o,ok:!1};let n=!1;for(const i of de(r)){if(i.startsWith(".")||i==="_"||i===F||i==="README.md")continue;if(!vo.has(i)){o.push({kind:"warning",message:`Unknown hook "${i}" — not a standard git hook.`,path:g(t,i)});continue}const a=g(r,i);if(!z(a).isFile())continue;n=!0;const c=z(a).mode&511;(c&64)===0&&o.push({kind:"warning",message:`Script is not owner-executable (mode ${c.toString(8)}).`,path:g(t,i)});const l=wo(a);l&&o.push({kind:"error",message:`Shell syntax error: ${l}`,path:g(t,i)})}if(n){const i=g(r,F);if(S(i))try{je(e,t)}catch(a){o.push({kind:"error",message:`${F} is malformed: ${a instanceof Error?a.message:String(a)}`,path:g(t,F)})}else o.push({kind:"error",message:`Stage scripts are present but ${t}/${F} is missing. Re-run \`vis hook migrate\`.`})}return{issues:o,ok:!o.some(i=>i.kind==="error")}},"validateHooks"),xo=G((e,t)=>{if(e.issues.length===0)return[`Hook directory ${t}/ looks good.`];const o=[];for(const r of e.issues){const s=r.kind==="error"?"ERROR":"WARN ",n=r.path?` (${r.path})`:"";o.push(`${s} ${r.message}${n}`)}return o.push("",e.ok?"No errors — warnings only.":`${e.issues.filter(r=>r.kind==="error").length} error(s).`),o},"formatValidationResult"),Eo=G((e,t)=>{const o=bo(M(),e),r=xo(o,e);for(const s of r)s.startsWith("ERROR")||s.startsWith("WARN")?t.warn(s):t.info(s);if(!o.ok)throw new Error("Hook validation failed")},"runValidate");var So=Object.defineProperty,E=$((e,t)=>So(e,"name",{value:t,configurable:!0}),"i");const P=E(e=>e.hooksDir??X,"resolveHooksDirectory"),ge=E(e=>new Promise(t=>{const o=Ie({input:process.stdin,output:process.stdout});o.question(`${e} (y/N) `,r=>{o.close();const s=r.trim().toLowerCase();t(s==="y"||s==="yes")})}),"confirmPrompt"),Ro=E(async(e,t,o)=>{const r=M(),s=ke(r),n=te(r);if(s&&n)throw new Error(`Found both husky (${s}/) and prek (${n}). Remove or migrate one before running \`vis hook install\`.`);if(s){if(t.info(`Existing husky installation found at ${s}/`),await ge("Would you like to migrate your husky hooks to vis?")){const a=ye(r,e,t,{useEditorconfig:o});if(a.isError)throw new Error(a.message);a.message&&t.info(a.message);return}t.info("Aborting install. Remove husky first or run 'vis hook migrate' to migrate.");return}if(n){if(t.info(`Existing prek configuration found at ${n}`),await ge("Would you like to migrate your prek hooks to vis?")){const a=Oe(r,e,t,{useEditorconfig:o});if(a.isError)throw new Error(a.message);a.message&&t.info(a.message);return}t.info("Aborting install. Remove the prek config first or run 'vis hook migrate' to migrate.");return}t.info(`Installing git hooks in ${e}/...`);const i=me(e);if(i.message){if(i.isError)throw new Error(i.message);t.info(i.message);return}S(g(r,e,"pre-commit"))||x(g(r,e,"pre-commit"),`#!/usr/bin/env sh
16
- `,{mode:493}),t.info("Git hooks installed successfully.")},"executeInstall"),jo=E((e,t,o,r)=>{const s=M(),n=ke(s),i=te(s);if(n&&i)throw new Error(`Found both husky (${n}/) and prek (${i}). Migrate one at a time — rename or remove one before retrying.`);if(!n&&!i)throw new Error("No husky (.husky/) or prek (.pre-commit-config.yaml / prek.toml) configuration found to migrate.");t&&o.info("(dry-run) no files will be written");const a=n?ye(s,e,o,{dryRun:t,useEditorconfig:r}):Oe(s,e,o,{dryRun:t,useEditorconfig:r});if(a.isError)throw new Error(a.message);a.message&&o.info(a.message)},"executeMigrate"),Q="# vis:secrets-hook",Oo=`#!/usr/bin/env sh
17
- ${Q}
18
- # Scan staged files for secrets before each commit. Remove this block or the whole file to disable.
19
- pnpm exec vis secrets --staged --quiet || exit 1
20
- `,Fo=E((e,t,o)=>{if(e!=="secrets")throw new Error(`Unknown hook add target "${String(e)}". Currently supported: "secrets".`);const r=M(),s=g(r,t,"pre-commit");if(!S(g(r,t)))throw new Error(`Hooks directory ${t}/ does not exist. Run \`vis hook install\` first.`);if(S(s)){const n=N(s);if(n.includes(Q)){o.info(`Secrets hook already present in ${s}.`);return}if(/\bvis secrets\b/.test(n)){o.warn(`Found a \`vis secrets\` invocation in ${s} without the managed marker — leaving it untouched.`);return}const i=`${n.trimEnd()}
21
-
22
- ${Q}
23
- pnpm exec vis secrets --staged --quiet || exit 1
24
- `;x(s,i),Ce(s,493),o.info(`Appended secrets scan to ${s}.`);return}x(s,Oo,{mode:493}),o.info(`Created ${s} with a secrets-scan pre-commit check.`)},"executeAdd"),Ao=E((e,t)=>{t.info("Removing git hooks...");const o=yo(e);if(o.message){if(o.isError)throw new Error(o.message);t.info(o.message);return}t.info("Git hooks removed successfully.")},"executeUninstall"),_o=E(async({logger:e,options:t,visConfig:o})=>{await Ro(P(t),e,o?.editorconfig??!0)},"hookInstallImpl"),Po=E(({logger:e,options:t})=>{Ao(P(t),e)},"hookUninstallImpl"),To=E(({logger:e,options:t,visConfig:o})=>{jo(P(t),!!t.dryRun,e,o?.editorconfig??!0)},"hookMigrateImpl"),Co=E(({logger:e,options:t})=>{Ze(P(t),e)},"hookListImpl"),Io=E(({logger:e,options:t})=>{Eo(P(t),e)},"hookValidateImpl"),Mo=E(({argument:e,logger:t,options:o})=>{ho(P(o),{allFiles:!!o.allFiles,extraArgs:e.slice(1),fromRef:o.fromRef,lastCommit:!!o.lastCommit,stage:e[0],toRef:o.toRef},t)},"hookRunImpl"),No=E(({argument:e,logger:t,options:o})=>{Fo(e[0],P(o),t)},"hookAddImpl"),qo=_o,Vo=Po,Go=To,Jo=Co,Ko=Io,Uo=Mo,zo=No;export{zo as hookAddExecute,qo as hookInstallExecute,Jo as hookListExecute,Go as hookMigrateExecute,Uo as hookRunExecute,Vo as hookUninstallExecute,Ko as hookValidateExecute};
1
+ var Mt=Object.defineProperty;var P=(e,t)=>Mt(e,"name",{value:t,configurable:!0});import{createRequire as jt}from"node:module";import{k as zt,K as Je,aV as Xe,bd as Bt,o as Lt,A as ut,U as pt,d as Vt,R as ht,b as gt,V as Ut,T as Gt,f as _t,p as u,I as be,ag as M,e as Ee,E as $,a as Ae,j as ce,q as Pe,af as ft,s as Ht,Q as Yt}from"./bin.js";import{M as q,i as Ie,n as mt,b as Wt,$ as Kt,O as qt,C as yt,j as Jt}from"./config.js";import{render as Xt}from"@visulima/tui";import Qt,{useSyncExternalStore as Zt,useState as Re,useEffect as Qe,useRef as Ze,useMemo as Ue,useCallback as et}from"react";import{X as ii}from"../packem_shared/xxh3-DrAUNq4n.js";import{x as it,A as wt,L as ri,F as ni,T as oi,U as si,a as li,I as ai}from"./handler42.js";import{c as ci}from"../packem_shared/runtime-check-DrMx4Q9L.js";import{s as di}from"../packem_shared/scan-progress-CMynp3eA.js";import{f as ui,l as pi}from"../packem_shared/dependency-scan-DPHTzA5r.js";import{jsxs as c,jsx as r,Fragment as hi}from"react/jsx-runtime";import{Box as p}from"@visulima/tui/components/box";import{Dialog as gi}from"@visulima/tui/components/dialog";import{Text as n}from"@visulima/tui/components/text";import{useApp as fi}from"@visulima/tui/hooks/use-app";import{useInput as mi}from"@visulima/tui/hooks/use-input";import{useWindowSize as yi}from"@visulima/tui/hooks/use-window-size";import{ScrollView as ki}from"@visulima/tui/components/scroll-view";import{ScrollBar as wi}from"@visulima/tui/components/scroll-bar";import{Spinner as bt}from"@visulima/tui/components/spinner";import{Tab as bi}from"@visulima/tui/components/tab";import{Tabs as vi}from"@visulima/tui/components/tabs";import{u as $i}from"../packem_shared/use-measured-height-DjYgUOKk.js";import{s as Si}from"../packem_shared/verify-CQbzknur.js";const Et=jt(import.meta.url),xe=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,dt=P(e=>{if(typeof xe<"u"&&xe.versions&&xe.versions.node){const[t,i]=xe.versions.node.split(".").map(Number);if(t>22||t===22&&i>=3||t===20&&i>=16)return xe.getBuiltinModule(e)}return Et(e)},"__cjs_getBuiltinModule"),{statSync:ei,rmSync:tt,writeFileSync:ti,readFileSync:kt}=dt("node:fs"),{spawnSync:ze}=dt("node:child_process");var Ci=Object.defineProperty,De=P((e,t)=>Ci(e,"name",{value:t,configurable:!0}),"r$2");const Ge=De(()=>q(zt(),"doctor"),"getCacheDirectory"),xi=1800*1e3,rt=De(e=>{if(!e)return"";try{return String(ei(e).mtimeMs)}catch{return""}},"safeMtime"),Ri=2,Ti=De(e=>{const t=JSON.stringify({configMtime:rt(e.configPath),lockfileMtime:rt(e.lockfilePath),schema:Ri,sections:[...e.sections].toSorted(),socketEnabled:e.socketEnabled,workspaceRoot:e.workspaceRoot});return ii(Buffer.from(t))},"buildDoctorCacheKey"),Ai=De(e=>{const t=q(Ge(),`${e}.json`);if(Ie(t))try{const i=mt(t);if(Date.now()-i.createdAt>i.ttlMs){tt(t,{force:!0});return}return{...i.results,sections:new Set(i.results.sections)}}catch{tt(t,{force:!0});return}},"readDoctorCache"),Pi=De((e,t,i=xi)=>{Wt(Ge());const s={createdAt:Date.now(),results:{...t,sections:[...t.sections]},ttlMs:i};ti(q(Ge(),`${e}.json`),JSON.stringify(s,void 0,2),"utf8")},"writeDoctorCache");var Ii=Object.defineProperty,E=P((e,t)=>Ii(e,"name",{value:t,configurable:!0}),"n$1");const Fe="orphans",Di=E(()=>{if(process.platform!=="linux")return{id:"inotify",message:"inotify capacity check skipped (not Linux).",status:"skip"};let e;try{const t=kt("/proc/sys/fs/inotify/max_user_watches","utf8").trim(),i=Number.parseInt(t,10);Number.isFinite(i)&&i>0&&(e=i)}catch{return{id:"inotify",message:"Could not read /proc/sys/fs/inotify/max_user_watches.",status:"warn"}}return e===void 0?{id:"inotify",message:"inotify max_user_watches reported a non-numeric value.",status:"warn"}:e<65536?{detail:{maxWatches:e},id:"inotify",message:`inotify watcher limit is ${String(e)} — large monorepos can exhaust this. Bump now with \`sudo sysctl fs.inotify.max_user_watches=524288\` and persist via \`/etc/sysctl.d/99-vis.conf\` so it survives reboot.`,status:"warn"}:{detail:{maxWatches:e},id:"inotify",message:`inotify capacity OK (${String(e)} watches).`,status:"ok"}},"checkInotifyCapacity"),Oi=E(()=>{const e=!!process.stdin.isTTY,t=!!process.stdout.isTTY;return e&&t?{id:"tty",message:"Interactive TTY available — watch keybinds enabled.",status:"ok"}:!e&&!t?{id:"tty",message:"No TTY on stdin/stdout — running in CI / piped mode (keybinds disabled).",status:"skip"}:{detail:{stdin:String(e),stdout:String(t)},id:"tty",message:e?"stdin is a TTY but stdout is not — output is being captured; keybinds still work.":"stdout is a TTY but stdin is not — keybinds disabled (input is piped).",status:"skip"}},"checkTtyAvailability"),Ni=E(()=>{const e=process.pid;try{return process.platform==="win32"?St(e):$t(e)}catch{return[]}},"listOrphanPids"),Fi=E(()=>{const e=process.pid;let t;try{t=process.platform==="win32"?St(e):$t(e)}catch{return{id:Fe,message:"Could not enumerate processes (ps/tasklist failed).",status:"warn"}}if(t.length===0)return{id:Fe,message:"No orphaned vis/task-runner processes detected.",status:"ok"};if(t.length<=2)return{detail:{count:t.length,pids:t.join(",")},id:Fe,message:`${String(t.length)} possibly orphaned process(es) detected (PIDs: ${t.join(", ")}). Likely benign.`,status:"skip"};const i=process.platform==="win32"?t.map(s=>`taskkill /F /PID ${String(s)}`).join(" & "):`kill ${t.join(" ")}`;return{detail:{count:t.length,pids:t.join(",")},id:"orphans",message:`${String(t.length)} possibly orphaned vis/task-runner processes — run \`vis doctor --fix\` to clean them up, or kill them manually: ${i}`,status:"warn"}},"checkOrphanedRunners"),Mi=E((e={})=>{const t=e.enumerate??Ni,i=e.force===!0?"SIGKILL":"SIGTERM",s=e.kill??Li,o=t(),l=[],d=[];for(const h of o)try{s(h,i),l.push(h)}catch(a){const f=a.code??a.message;if(f==="ESRCH"){l.push(h);continue}d.push({pid:h,reason:f})}return{failed:d,killed:l}},"killOrphanedRunners"),ji=E(e=>ze("taskkill",e,{encoding:"utf8"}),"defaultTaskkillRunner"),Ei=E((e,t)=>{process.kill(e,t)},"defaultProcessKill"),zi=E((e,t,i=ji)=>{const s=t==="SIGKILL"?["/F","/PID",String(e)]:["/PID",String(e)],o=i(s);if(o.error)throw o.error;if(typeof o.status=="number"&&o.status!==0){const l=o.status===128?"ESRCH":`taskkill exited with code ${String(o.status)}`,d=new Error(l);throw d.code=l,d}},"killViaTaskkill"),Bi=E((e,t,i=Ei)=>{i(e,t)},"killViaSignal"),Li=E((e,t)=>{if(process.platform==="win32"){zi(e,t);return}Bi(e,t)},"defaultKill"),vt=E((e,t)=>{const i=ze(e,t,{encoding:"utf8"});if(i.error)throw i.error;if(typeof i.status=="number"&&i.status!==0)throw new Error(`${e} exited with code ${String(i.status)}`);return typeof i.stdout=="string"?i.stdout:""},"runProcessListing"),$t=E(e=>{const t=vt("ps",["-Ao","pid=,command="]),i=[];for(const s of t.split(`
2
+ `)){if(s.length===0)continue;const o=/^\s*(\d+)\s+(.+)$/.exec(s);if(!o)continue;const l=Number.parseInt(o[1]??"",10),d=(o[2]??"").toLowerCase();!Number.isFinite(l)||l===e||(/(?:^|[ /])vis-native(?:\s|$|[-.])/.test(d)||/(?:^|[ /])vis\s+run\b/.test(d)||/(?:^|[ /])task-runner(?:\s|$|[-.])/.test(d))&&i.push(l)}return i},"listOrphansUnix"),St=E(e=>{const t=vt("tasklist",["/FO","CSV","/NH"]),i=[];for(const s of t.split(/\r?\n/)){if(s.length===0)continue;const o=s.split(/","/).map(h=>h.replaceAll(/^"|"$/g,"")),l=(o[0]??"").toLowerCase(),d=Number.parseInt(o[1]??"",10);!Number.isFinite(d)||d===e||(l==="vis.exe"||l.startsWith("vis-native")||l.includes("task-runner"))&&i.push(d)}return i},"listOrphansWindows"),Vi=E(()=>{let e;try{const t=ze("watchman",["--version"],{encoding:"utf8",timeout:2e3});if(t.error||typeof t.status=="number"&&t.status!==0)throw t.error??new Error("watchman exited non-zero");e=typeof t.stdout=="string"?t.stdout.trim():void 0}catch{return{id:"watchman",message:"Watchman not found — `vis` uses native fs.watch (fine for small repos). Install Watchman + `fb-watchman` to scale watch mode on large monorepos.",status:"skip"}}return{detail:e?{version:e}:void 0,id:"watchman",message:e?`Watchman available (${e}) — scalable watch backend in use.`:"Watchman available — scalable watch backend in use.",status:"ok"}},"checkWatchmanAvailability"),Ui=E((e=process.cwd())=>{let t="";try{t=kt(q(e,".gitattributes"),"utf8")}catch(i){if(i.code!=="ENOENT")return{id:"git-lfs",message:"Could not read .gitattributes.",status:"warn"}}if(!t.includes("filter=lfs"))return{id:"git-lfs",message:"No Git LFS tracking declared in .gitattributes.",status:"skip"};try{const i=ze("git",["lfs","version"],{encoding:"utf8",timeout:2e3});if(i.error||typeof i.status=="number"&&i.status!==0)throw i.error??new Error("git-lfs not available")}catch{return{id:"git-lfs",message:"Repo tracks files via Git LFS but `git-lfs` is not installed — checked-out LFS files are pointer stubs, not real content. Install git-lfs and run `git lfs pull`.",status:"warn"}}return{id:"git-lfs",message:"Git LFS tracking declared and `git-lfs` is installed.",status:"ok"}},"checkGitLfsTracking"),Gi=E(e=>[Di(),Oi(),Vi(),Ui(e),Fi()],"runRuntimeDiagnostics");var _i=Object.defineProperty,we=P((e,t)=>_i(e,"name",{value:t,configurable:!0}),"s$2");const ke=[{id:"dependencies",label:"Deps"},{id:"security",label:"Security"},{id:"optimization",label:"Optimize"},{id:"runtime",label:"Runtime"}],je=["dependencies","security","optimization","runtime"],me=we(e=>{const t=new Map;for(const i of je)t.set(i,[]);for(const i of e)t.get(i.section).push(i);for(const[i,s]of t)s.length===0&&t.delete(i);return t},"groupBySection"),ye=we((e,t,i,s)=>{let o=e.filter(l=>l.section===t);if(s&&(o=o.filter(l=>l.severity===s)),i){const l=i.toLowerCase();o=o.filter(d=>d.title.toLowerCase().includes(l))}return[...o]},"filterFindings"),Hi=we(e=>{const t={dependencies:"idle",optimization:"idle",runtime:"idle",security:"idle"};for(const i of je)e.has(i)&&(t[i]="idle");return t},"initialStatus");class nt{static{P(this,"DoctorStore")}static{we(this,"DoctorStore")}#e;#i=new Set;constructor(t=[]){const i=Array.isArray(t)?{findings:t}:t,s=i.findings??[],o=i.activeSections??new Set(je),l=je.find(a=>o.has(a))??"dependencies",d=ye(s,l,"",void 0),h=Hi(o);if(s.length>0)for(const a of s)h[a.section]="done";this.#e={all:s,entries:d,filterActive:!1,filterText:"",filterType:l,focusedPanel:"list",grouped:me(d),pendingAction:void 0,sectionError:{},sectionMessage:{},sectionStatus:h,selectedIndex:0,severityFilter:void 0}}getSnapshot=we(()=>this.#e,"getSnapshot");subscribe=we(t=>(this.#i.add(t),()=>{this.#i.delete(t)}),"subscribe");setSelectedIndex(t){const i=Math.max(0,Math.min(t,this.#e.entries.length-1));i!==this.#e.selectedIndex&&this.#t({...this.#e,selectedIndex:i})}setFocusedPanel(t){t!==this.#e.focusedPanel&&this.#t({...this.#e,focusedPanel:t})}setFilterType(t){if(t===this.#e.filterType)return;const i=ye(this.#e.all,t,this.#e.filterText,this.#e.severityFilter);this.#t({...this.#e,entries:i,filterType:t,grouped:me(i),selectedIndex:0})}setFilter(t){const i=ye(this.#e.all,this.#e.filterType,t,this.#e.severityFilter);this.#t({...this.#e,entries:i,filterText:t,grouped:me(i),selectedIndex:0})}setFilterActive(t){if(t===this.#e.filterActive)return;if(t){this.#t({...this.#e,filterActive:!0});return}const i=ye(this.#e.all,this.#e.filterType,"",this.#e.severityFilter);this.#t({...this.#e,entries:i,filterActive:!1,filterText:"",grouped:me(i),selectedIndex:0})}setPendingAction(t){this.#t({...this.#e,pendingAction:t})}setSeverityFilter(t){if(t===this.#e.severityFilter)return;const i=ye(this.#e.all,this.#e.filterType,this.#e.filterText,t);this.#t({...this.#e,entries:i,grouped:me(i),selectedIndex:0,severityFilter:t})}startSection(t,i){this.#t({...this.#e,sectionMessage:{...this.#e.sectionMessage,[t]:i},sectionStatus:{...this.#e.sectionStatus,[t]:"running"}})}completeSection(t,i){const s=[...this.#e.all,...i],o=ye(s,this.#e.filterType,this.#e.filterText,this.#e.severityFilter),l={...this.#e.sectionMessage};delete l[t],this.#t({...this.#e,all:s,entries:o,grouped:me(o),sectionMessage:l,sectionStatus:{...this.#e.sectionStatus,[t]:"done"}})}failSection(t,i){this.#t({...this.#e,sectionError:{...this.#e.sectionError,[t]:i},sectionStatus:{...this.#e.sectionStatus,[t]:"error"}})}#t(t){this.#e=t;for(const i of this.#i)try{i()}catch{}}}var Yi=Object.defineProperty,Ct=P((e,t)=>Yi(e,"name",{value:t,configurable:!0}),"r$1");const ot={error:0,warn:1},Wi=Ct(e=>!!e.acceptedRisk,"isAcknowledged"),xt=Ct(e=>{const t=[];if(e.sections.has("dependencies")){for(const i of e.outdated)t.push({entry:i,id:`outdated:${i.packageName}`,kind:"outdated",section:"dependencies",severity:"warn",subtitle:`${i.currentRange} → ${i.newRange} (${i.updateType})`,title:i.packageName});for(const i of e.duplicates)t.push({id:`duplicate:${i.name}`,kind:"duplicate",pkg:i,section:"dependencies",severity:"warn",subtitle:`${String(i.versions.length)} versions installed`,title:i.name})}if(e.sections.has("security"))for(const i of e.outdated){if(i.vulnerabilities&&i.vulnerabilities.length>0){const s=i.vulnerabilities[0],o=Wi(i)?"warn":"error",l=i.vulnerabilities.length;t.push({entry:i,id:`vuln:${i.packageName}`,kind:"vulnerability",packageName:i.packageName,section:"security",severity:o,subtitle:l===1?`${s.severity} · ${s.id}`:`${String(l)} advisories · top: ${s.severity} ${s.id}`,title:i.packageName})}if(i.socketReport&&i.socketReport.alerts.length>0){const s=Math.round(i.socketReport.score.overall*100);t.push({entry:i,id:`socket:${i.packageName}`,kind:"socket",packageName:i.packageName,section:"security",severity:"warn",subtitle:`${String(i.socketReport.alerts.length)} alert${i.socketReport.alerts.length===1?"":"s"} · score ${String(s)}%`,title:i.packageName})}}if(e.sections.has("optimization"))for(const i of e.optimizations)t.push({entry:i,id:`opt:${i.packageName}`,kind:"optimization",section:"optimization",severity:"warn",subtitle:`${i.category} → ${i.replacement}`,title:i.packageName});if(e.sections.has("runtime"))for(const i of e.runtime)i.status==="warn"&&t.push({diagnostic:i,id:`runtime:${i.id}`,kind:"runtime",section:"runtime",severity:"warn",title:i.message});return t.sort((i,s)=>{if(i.section!==s.section){const o=["dependencies","security","optimization","runtime"];return o.indexOf(i.section)-o.indexOf(s.section)}return ot[i.severity]-ot[s.severity]}),t},"flattenFindings"),Rt={dependencies:"Dependencies",optimization:"Optimization",runtime:"Runtime",security:"Security"};var Ki=Object.defineProperty,qi=P((e,t)=>Ki(e,"name",{value:t,configurable:!0}),"a$2");const Ji={error:"red",warn:"yellow"},Xi={error:"✖",warn:"⚠"},Qi={error:" ERROR ",warn:" WARN "},Zi=qi(({children:e,hint:t,message:i,severity:s,title:o})=>{const l=Ji[s];return c(p,{borderColor:l,borderStyle:"single",flexDirection:"column",flexShrink:0,paddingX:1,children:[c(p,{gap:1,children:[r(n,{backgroundColor:l,bold:!0,color:"black",children:Qi[s]}),r(n,{bold:!0,color:l,children:Xi[s]}),r(n,{bold:!0,wrap:"truncate-end",children:o})]}),r(n,{wrap:"truncate-end",children:i}),t?r(n,{dimColor:!0,wrap:"truncate-end",children:t}):null,e]})},"ConfigBanner");var er=Object.defineProperty,te=P((e,t)=>er(e,"name",{value:t,configurable:!0}),"d$2");const tr={CRITICAL:"red",HIGH:"red",LOW:"gray",MODERATE:"yellow",UNKNOWN:"gray"},ir={critical:"red",high:"red",low:"gray",medium:"yellow"},rr={major:"red",minor:"yellow",patch:"green"},A=te(({children:e,label:t,width:i=14})=>c(p,{children:[r(p,{width:i,children:c(n,{dimColor:!0,children:[t,":"]})}),typeof e=="string"?r(n,{children:e}):e]}),"FieldRow"),oe=te(({children:e})=>r(p,{marginTop:1,children:r(n,{bold:!0,color:"white",children:e})}),"SectionTitle"),nr=te(({finding:e})=>{const{entry:t}=e,i=rr[t.updateType]??"white";return c(p,{flexDirection:"column",children:[r(A,{label:"Current",children:t.currentRange}),c(A,{label:"Target",children:[r(n,{children:t.newRange}),c(n,{bold:!0,color:i,children:[" (",t.updateType,")"]})]}),r(A,{label:"Catalog",children:t.catalogName}),t.acceptedRisk?r(A,{label:"Risk ack",children:r(n,{dimColor:!0,children:t.acceptedRisk.reason??"(no reason recorded)"})}):null,r(oe,{children:"Action"}),c(n,{dimColor:!0,children:["Run"," ",r(n,{bold:!0,color:"white",children:"vis update"})," ","to apply this change."]})]})},"OutdatedDetail"),or=te(({finding:e})=>c(p,{flexDirection:"column",children:[r(A,{label:"Versions",children:r(n,{children:String(e.pkg.versions.length)})}),r(oe,{children:"Installed versions"}),e.pkg.versions.map(t=>c(n,{children:[" · ",t]},t)),r(oe,{children:"Action"}),c(n,{dimColor:!0,children:["Run"," ",r(n,{bold:!0,color:"white",children:"vis dedupe"})," ","to consolidate to a single resolution."]})]}),"DuplicateDetail"),sr=te(({finding:e})=>{const t=e.entry.vulnerabilities??[];return c(p,{flexDirection:"column",children:[r(A,{label:"Package",children:e.packageName}),r(A,{label:"Current",children:e.entry.currentRange}),r(A,{label:"Advisories",children:String(t.length)}),e.entry.acceptedRisk?r(A,{label:"Risk ack",children:r(n,{dimColor:!0,children:e.entry.acceptedRisk.reason??"(no reason recorded)"})}):null,t.map(i=>{const s=tr[i.severity]??"gray";return c(p,{flexDirection:"column",marginTop:1,children:[c(p,{children:[r(n,{bold:!0,color:s,children:i.severity}),r(n,{children:" "}),r(n,{children:i.id}),typeof i.cvssScore=="number"?c(n,{dimColor:!0,children:[" · CVSS ",i.cvssScore.toFixed(1)]}):null]}),r(n,{wrap:"wrap",children:i.summary}),i.fixedVersions.length>0?c(n,{dimColor:!0,children:["Fixed in: ",i.fixedVersions.join(", ")]}):null,i.aliases&&i.aliases.length>0?c(n,{dimColor:!0,children:["Aliases: ",i.aliases.join(", ")]}):null]},i.id)})]})},"VulnerabilityDetail"),lr=te(({finding:e})=>{const t=e.entry.socketReport;if(!t)return r(n,{dimColor:!0,children:"No Socket report attached."});const i=Math.round(t.score.overall*100),s=Je(t.score.overall);return c(p,{flexDirection:"column",children:[r(A,{label:"Package",children:e.packageName}),r(A,{label:"Overall",children:c(n,{color:s,children:[String(i),"%"]})}),r(A,{label:"Alerts",children:String(t.alerts.length)}),e.entry.acceptedRisk?r(A,{label:"Risk ack",children:r(n,{dimColor:!0,children:e.entry.acceptedRisk.reason??"(no reason recorded)"})}):null,r(oe,{children:"Score breakdown"}),Object.entries(t.score).map(([o,l])=>{if(o==="overall")return null;const d=typeof l=="number"?l:0,h=Math.round(d*100),a=Je(d);return c(p,{children:[r(p,{width:14,children:c(n,{dimColor:!0,children:[o,":"]})}),c(n,{color:a,children:[String(h),"%"]})]},o)}),r(oe,{children:"Alerts"}),t.alerts.map((o,l)=>{const d=ir[o.severity]??"gray";return c(p,{flexDirection:"column",marginBottom:1,children:[c(p,{children:[r(n,{bold:!0,color:d,children:o.severity}),r(n,{children:" "}),r(n,{children:o.type})]}),o.props?r(n,{dimColor:!0,wrap:"wrap",children:JSON.stringify(o.props)}):null]},`${o.type}-${String(l)}`)})]})},"SocketDetail"),ar=te(({finding:e})=>{const{entry:t}=e;return c(p,{flexDirection:"column",children:[r(A,{label:"Package",children:t.packageName}),r(A,{label:"Category",children:t.category}),r(A,{label:"Replacement",children:t.replacement}),t.overrideSpec?r(A,{label:"Override",children:t.overrideSpec}):null,r(A,{label:"Codemod",children:r(n,{color:t.hasCodemod?"green":"gray",children:t.hasCodemod?"available":"not available"})}),t.docUrl?r(A,{label:"Guide",children:r(n,{color:"cyan",underline:!0,children:t.docUrl})}):null,r(oe,{children:"Action"}),t.hasCodemod?c(n,{dimColor:!0,children:["Run"," ",r(n,{bold:!0,color:"white",children:"vis optimize"})," ","to apply the codemod interactively."]}):t.overrideSpec?c(n,{dimColor:!0,children:["Run"," ",r(n,{bold:!0,color:"white",children:"vis optimize"})," ","to install the package override."]}):t.docUrl?r(n,{dimColor:!0,children:"No automated codemod. Open the migration guide above for the recommended alternative and steps."}):r(n,{dimColor:!0,children:"No automated codemod. Consult the package's docs or the e18e module-replacements guide for an alternative."})]})},"OptimizationDetail"),cr=te(({finding:e})=>{const{diagnostic:t}=e,i=t.status==="warn"?"yellow":t.status==="ok"?"green":"gray";return c(p,{flexDirection:"column",children:[r(A,{label:"Check",children:t.id}),r(A,{label:"Status",children:r(n,{color:i,children:t.status})}),r(oe,{children:"Message"}),r(n,{wrap:"wrap",children:t.message}),t.detail&&Object.keys(t.detail).length>0?c(hi,{children:[r(oe,{children:"Details"}),Object.entries(t.detail).map(([s,o])=>c(p,{children:[r(p,{width:20,children:c(n,{dimColor:!0,children:[s,":"]})}),r(n,{children:String(o)})]},s))]}):null]})},"RuntimeDetail"),dr=te(({finding:e,focused:t,scrollRef:i})=>{const s=t?"white":"gray";if(!e)return r(p,{alignItems:"center",borderColor:"gray",borderStyle:"single",flexDirection:"column",flexGrow:1,justifyContent:"center",children:r(n,{dimColor:!0,children:"No finding selected"})});let o;switch(e.kind){case"duplicate":{o=r(or,{finding:e});break}case"optimization":{o=r(ar,{finding:e});break}case"outdated":{o=r(nr,{finding:e});break}case"runtime":{o=r(cr,{finding:e});break}case"socket":{o=r(lr,{finding:e});break}case"vulnerability":{o=r(sr,{finding:e});break}default:{o=r(n,{dimColor:!0,children:"Unknown finding kind."});break}}return c(p,{borderColor:s,borderStyle:"single",flexDirection:"column",flexGrow:1,children:[c(p,{flexShrink:0,paddingTop:1,paddingX:2,children:[r(n,{bold:!0,color:"white",children:e.title}),c(n,{dimColor:!0,children:[" ",Rt[e.section]]})]}),c(ki,{flexGrow:1,flexShrink:1,paddingX:2,ref:i,scrollbar:!0,scrollbarColor:"gray",scrollbarStyle:"block",children:[r(n,{}),o]})]})},"DoctorDetailPanel");var ur=Object.defineProperty,Oe=P((e,t)=>ur(e,"name",{value:t,configurable:!0}),"c$2");const Tt={error:"red",warn:"yellow"},pr={error:"✖",warn:"⚠"},hr=Oe(e=>e.kind==="outdated"||e.kind==="vulnerability"||e.kind==="socket"?!!e.entry.acceptedRisk:!1,"hasAcceptedRisk"),gr=Oe(({finding:e,isSelected:t})=>{const i=Tt[e.severity],s=hr(e);return c(p,{flexShrink:0,height:1,children:[r(n,{children:t?">":" "}),c(n,{color:i,children:[" ",pr[e.severity]," "]}),r(p,{flexGrow:1,children:r(n,{bold:t,inverse:t,wrap:"truncate",children:e.title})}),s?r(n,{color:"cyan",children:" ack"}):null,e.subtitle?c(n,{dimColor:!0,wrap:"truncate",children:[" ",e.subtitle]}):null]})},"FindingRow"),fr=Oe(({count:e,section:t})=>c(p,{flexShrink:0,height:1,marginTop:1,children:[r(n,{dimColor:!0,children:"▼ "}),r(n,{bold:!0,color:"white",children:Rt[t].toUpperCase()}),c(n,{dimColor:!0,children:[" (",e,")"]})]}),"SectionHeader"),mr=Oe(({count:e,label:t,status:i})=>c(n,{children:[t,i==="running"?c(n,{children:[" ",r(bt,{type:"dots"})]}):null,i==="error"?r(n,{bold:!0,color:"red",children:" ✖"}):c(n,{dimColor:!0,children:[" (",String(e),")"]})]}),"TabLabel"),yr=Oe(({elapsedMs:e,entries:t,filterActive:i,filterText:s,filterType:o,focused:l,fromCache:d=!1,grouped:h,onViewportHeightChange:a,scrollOffset:f,sectionCounts:w,sectionMessage:v,sectionStatus:I,selectedIndex:z,severityFilter:g,totalAll:D,viewportHeight:B})=>{const J=l?"white":"gray",{measuredHeight:V,ref:L}=$i(B,a);let R=0,G=0;for(const S of t)S.severity==="error"?R+=1:S.severity==="warn"&&(G+=1);const _=[];R>0&&_.push(`${String(R)} error${R===1?"":"s"}`),G>0&&_.push(`${String(G)} warn${G===1?"":"s"}`);const se=_.length>0?` (${_.join(", ")})`:"",ie=(e/1e3).toFixed(1),U=[];for(const[S,C]of h){U.push(r(fr,{count:C.length,section:S},`hdr-${S}`));for(const X of C){const T=t.indexOf(X);U.push(r(gr,{finding:X,isSelected:T===z},X.id))}}let j=0;for(const[,S]of h)j+=2+S.length;const Y=j>V&&V>0;return c(p,{borderColor:J,borderStyle:"single",flexDirection:"column",flexGrow:1,children:[c(p,{flexShrink:0,gap:1,paddingX:1,children:[r(n,{bold:!0,inverse:!0,children:" DOCTOR "}),c(n,{wrap:"truncate",children:[t.length,t.length===D?"":`/${String(D)}`," finding",t.length===1?"":"s",se]}),g?r(n,{bold:!0,color:Tt[g],inverse:!0,children:` ${g.toUpperCase()} ONLY `}):null,d?r(n,{bold:!0,color:"cyan",inverse:!0,children:" CACHED "}):null,c(n,{dimColor:!0,children:[" · ",ie,"s"]})]}),r(p,{flexShrink:0,paddingX:1,paddingY:1,children:r(vi,{isFocused:l,keyMap:{next:[],previous:[],useNumbers:!1,useTab:!1},onChange:P(()=>{},"onChange"),showIndex:!1,value:o,children:ke.map(({id:S,label:C})=>r(bi,{name:S,children:r(mr,{count:w[S],label:C,status:I[S]})},S))})}),(()=>{const S=Object.keys(I).filter(C=>I[C]==="running"&&v[C]).map(C=>v[C]);return S.length===0?null:r(p,{flexShrink:0,paddingX:1,children:c(n,{dimColor:!0,wrap:"truncate",children:[r(bt,{type:"dots"})," ",S.join(" · ")]})})})(),i&&c(p,{flexShrink:0,paddingX:1,children:[r(n,{bold:!0,color:"white",children:"/ "}),r(n,{children:s}),r(n,{inverse:!0,children:" "})]}),c(p,{flexDirection:"row",flexGrow:1,overflow:"hidden",ref:L,children:[r(p,{flexDirection:"column",flexGrow:1,overflow:"hidden",paddingLeft:1,children:r(p,{flexDirection:"column",marginTop:-f,children:U.length>0?U:r(p,{marginTop:1,children:r(n,{dimColor:!0,children:"No findings match the current filter."})})})}),Y&&r(p,{flexShrink:0,marginLeft:1,marginRight:1,children:r(wi,{contentHeight:j,placement:"inset",scrollOffset:f,style:"block",viewportHeight:V})})]},`list-${o}-${s}`)]})},"DoctorListPanel");var kr=Object.defineProperty,Be=P((e,t)=>kr(e,"name",{value:t,configurable:!0}),"g$1");const wr=Be(e=>{if(e.kind==="outdated")return{command:`vis update ${e.entry.packageName}`,description:`Update ${e.entry.packageName} to ${e.entry.newRange}`};if(e.kind==="duplicate")return{command:`vis dedupe ${e.pkg.name}`,description:`Dedupe ${e.pkg.name} (${String(e.pkg.versions.length)} versions)`}},"buildUpdateAction"),br=Be(e=>{if(e.kind==="optimization")return{command:`vis optimize ${e.entry.packageName}`,description:`Replace ${e.entry.packageName} with ${e.entry.replacement}`}},"buildOptimizeAction"),vr=Be(e=>{if(e.kind!=="outdated"&&e.kind!=="vulnerability"&&e.kind!=="socket")return;const t=e.kind==="outdated"?e.entry.packageName:e.packageName,i=["// Add to vis.config.ts:","security: {"," acceptedRisks: {",` "${t}": {`,' reason: "explain why this risk is acceptable",',' expiresAt: "YYYY-MM-DD",'," },"," },","},"].join(`
3
+ `);return{command:i,configSnippet:i,description:`Acknowledge risk for ${t}`}},"buildAckAction"),$r=100,Sr=40,Cr=10,xr=Be(({autoExitSeconds:e=0,banner:t,fromCache:i=!1,startedAt:s,store:o})=>{const{exit:l}=fi(),{columns:d,rows:h}=yi(),a=Zt(o.subscribe,o.getSnapshot),[f,w]=Re(!1),[v,I]=Re(!1),[z,g]=Re(0),[D,B]=Re(()=>Date.now());Qe(()=>{const k=setInterval(()=>{B(Date.now())},1e3);return()=>{clearInterval(k)}},[]);const J=D-s,V=Ze(null),L=Ze(null),R=a.entries[a.selectedIndex]??null,G=Ue(()=>{const k={dependencies:0,optimization:0,runtime:0,security:0};for(const y of a.all)k[y.section]+=1;return k},[a.all]),_=t?t.hint?5:4:0,se=Ue(()=>{for(const k of Object.keys(a.sectionStatus))if(a.sectionStatus[k]==="running"&&a.sectionMessage[k])return 1;return 0},[a.sectionStatus,a.sectionMessage]),ie=d>=$r,U=ie?Math.max(1,h-_-2):Math.floor(h*.55),j=Math.max(1,U-6-se-(a.filterActive?1:0)),[Y,S]=Re(j),C=Y>0?Y:j,X=Ue(()=>{let k=0;for(const[,y]of a.grouped)k+=2+y.length;return k},[a.grouped]),T=Math.max(0,X-C),le=Math.min(z,T),ue=et(k=>{let y=0,b=0;for(const[,Ce]of a.grouped){y+=2;for(let ae=0;ae<Ce.length;ae++){if(b===k)return y;y+=1,b+=1}}return y},[a.grouped]),O=et(k=>{const y=ue(k);g(b=>y>b+C-2?Math.min(T,Math.max(0,y-C+2)):y<b+1?Math.max(0,y-1):b)},[ue,C,T]);if(Qe(()=>{L.current?.scrollToTop()},[R?.id]),mi((k,y)=>{if(k==="c"&&y.ctrl){l();return}if(!v){if(f){y.escape||k==="?"?w(!1):k==="q"?(w(!1),I(!0)):y.downArrow||k==="j"?V.current?.scrollBy(1):(y.upArrow||k==="k")&&V.current?.scrollBy(-1);return}if(k==="?"){w(!0);return}if(k==="q"){I(!0);return}if(y.tab){o.setFocusedPanel(a.focusedPanel==="list"?"detail":"list");return}if(a.filterActive){if(y.escape||y.return){o.setFilterActive(!1);return}if(y.backspace){g(0),o.setFilter(a.filterText.slice(0,-1));return}k&&!y.ctrl&&!y.meta&&(g(0),o.setFilter(a.filterText+k));return}if(a.focusedPanel==="list"&&(y.leftArrow||y.rightArrow)){const b=ke.findIndex(ae=>ae.id===a.filterType),Ce=y.rightArrow?(b+1)%ke.length:(b-1+ke.length)%ke.length;g(0),L.current?.scrollToTop(),o.setFilterType(ke[Ce].id);return}if(a.focusedPanel==="list"){if(y.downArrow||k==="j"){const b=Math.min(a.selectedIndex+1,a.entries.length-1);o.setSelectedIndex(b),O(b);return}if(y.upArrow||k==="k"){const b=Math.max(a.selectedIndex-1,0);o.setSelectedIndex(b),O(b);return}if(y.pageDown){const b=Math.min(a.selectedIndex+10,a.entries.length-1);o.setSelectedIndex(b),O(b);return}if(y.pageUp){const b=Math.max(a.selectedIndex-10,0);o.setSelectedIndex(b),O(b);return}if(y.home){o.setSelectedIndex(0),g(0);return}if(y.end){const b=a.entries.length-1;o.setSelectedIndex(b),O(b);return}if(k==="/"){o.setFilterActive(!0);return}if(k==="e"){o.setSeverityFilter(a.severityFilter==="error"?void 0:"error"),g(0);return}if(k==="w"){o.setSeverityFilter(a.severityFilter==="warn"?void 0:"warn"),g(0);return}if(k==="u"&&R){const b=wr(R);b&&(o.setPendingAction(b),l());return}if(k==="o"&&R){const b=br(R);b&&(o.setPendingAction(b),l());return}if(k==="a"&&R){const b=vr(R);b&&(o.setPendingAction(b),l());return}if(k==="d"){o.setFocusedPanel("detail");return}return}if(y.escape||y.leftArrow){o.setFocusedPanel("list");return}if(y.downArrow||k==="j"){L.current?.scrollBy(1);return}if(y.upArrow||k==="k"){L.current?.scrollBy(-1);return}if(y.pageDown){L.current?.scrollBy(10);return}if(y.pageUp){L.current?.scrollBy(-10);return}if(y.home){L.current?.scrollToTop();return}y.end&&L.current?.scrollToBottom()}},{isActive:!0}),d<Sr||h<Cr)return r(p,{alignItems:"center",height:h,justifyContent:"center",width:d,children:c(n,{color:"yellow",children:["Terminal too small (",d,"x",h,")"]})});const Q=a.focusedPanel==="detail",ee=[c(p,{gap:1,children:[r(n,{bold:!0,color:"white",children:"q"}),r(n,{dimColor:!0,children:"QUIT"})]},"q"),c(p,{gap:1,children:[r(n,{bold:!0,color:"white",children:"?"}),r(n,{dimColor:!0,children:"HELP"})]},"?"),c(p,{gap:1,children:[r(n,{bold:!0,color:"white",children:"↑↓"}),r(n,{dimColor:!0,children:Q?"SCROLL":"NAV"})]},"nav"),Q?c(p,{gap:1,children:[r(n,{bold:!0,color:"white",children:"←/Esc"}),r(n,{dimColor:!0,children:"LIST"})]},"lr"):c(p,{gap:1,children:[r(n,{bold:!0,color:"white",children:"←→"}),r(n,{dimColor:!0,children:"SECTION"})]},"lr"),c(p,{gap:1,children:[r(n,{bold:!0,color:"white",children:"/"}),r(n,{dimColor:!0,children:"SEARCH"})]},"search"),c(p,{gap:1,children:[r(n,{bold:!0,color:"white",children:"e/w"}),r(n,{dimColor:!0,children:"SEVERITY"})]},"sev"),c(p,{gap:1,children:[r(n,{bold:!0,color:"white",children:"u/o/a"}),r(n,{dimColor:!0,children:"ACTION"})]},"actions"),c(p,{gap:1,children:[r(n,{bold:!0,color:"white",children:"Tab"}),r(n,{dimColor:!0,children:"PANEL"})]},"tab")],pe=r(p,{borderBottom:!1,borderColor:"gray",borderLeft:!1,borderRight:!1,borderStyle:"single",flexShrink:0,children:r(p,{gap:2,overflow:"hidden",paddingX:1,children:ee})}),he=c(gi,{footer:c(n,{dimColor:!0,children:[r(n,{bold:!0,color:"white",children:"↑↓"})," scroll ",r(n,{bold:!0,color:"white",children:"?"}),"/",r(n,{bold:!0,color:"white",children:"Esc"})," close"]}),scrollRef:V,title:"DOCTOR — KEYBOARD SHORTCUTS",visible:f,width:56,children:[c(p,{flexDirection:"column",marginBottom:1,children:[c(p,{marginBottom:1,children:[r(n,{dimColor:!0,children:"── "}),r(n,{bold:!0,color:"white",children:"NAVIGATION"})]}),c(p,{children:[r(p,{width:26,children:c(n,{children:[r(n,{bold:!0,color:"white",children:" ↑/k "}),r(n,{dimColor:!0,children:"Move up"})]})}),c(n,{children:[r(n,{bold:!0,color:"white",children:" ↓/j "}),r(n,{dimColor:!0,children:"Move down"})]})]}),c(p,{children:[r(p,{width:26,children:c(n,{children:[r(n,{bold:!0,color:"white",children:" PgUp"}),r(n,{dimColor:!0,children:" Jump up 10"})]})}),c(n,{children:[r(n,{bold:!0,color:"white",children:" PgDn"}),r(n,{dimColor:!0,children:" Jump down 10"})]})]}),c(p,{children:[r(p,{width:26,children:c(n,{children:[r(n,{bold:!0,color:"white",children:" Home"}),r(n,{dimColor:!0,children:" Jump to top"})]})}),c(n,{children:[r(n,{bold:!0,color:"white",children:" End"}),r(n,{dimColor:!0,children:" Jump to bottom"})]})]}),c(n,{children:[r(n,{bold:!0,color:"white",children:" Tab"}),r(n,{dimColor:!0,children:" Switch panel"})]}),c(n,{children:[r(n,{bold:!0,color:"white",children:" →/←"}),r(n,{dimColor:!0,children:" Section tabs (list) / Focus list (detail)"})]})]}),c(p,{flexDirection:"column",marginBottom:1,children:[c(p,{marginBottom:1,children:[r(n,{dimColor:!0,children:"── "}),r(n,{bold:!0,color:"white",children:"FILTER"})]}),c(n,{children:[r(n,{bold:!0,color:"white",children:" /"}),r(n,{dimColor:!0,children:" Open text filter (Esc/Enter to close)"})]}),c(n,{children:[r(n,{bold:!0,color:"white",children:" e"}),r(n,{dimColor:!0,children:" Toggle errors-only filter"})]}),c(n,{children:[r(n,{bold:!0,color:"white",children:" w"}),r(n,{dimColor:!0,children:" Toggle warns-only filter"})]})]}),c(p,{flexDirection:"column",marginBottom:1,children:[c(p,{marginBottom:1,children:[r(n,{dimColor:!0,children:"── "}),r(n,{bold:!0,color:"white",children:"ACTIONS"})]}),c(n,{children:[r(n,{bold:!0,color:"white",children:" u"}),r(n,{dimColor:!0,children:" Exit + suggest update / dedupe command"})]}),c(n,{children:[r(n,{bold:!0,color:"white",children:" o"}),r(n,{dimColor:!0,children:" Exit + suggest optimize command"})]}),c(n,{children:[r(n,{bold:!0,color:"white",children:" a"}),r(n,{dimColor:!0,children:" Exit + print risk-ack snippet"})]}),c(n,{children:[r(n,{bold:!0,color:"white",children:" d"}),r(n,{dimColor:!0,children:" Focus detail panel"})]})]}),c(p,{flexDirection:"column",children:[c(p,{marginBottom:1,children:[r(n,{dimColor:!0,children:"── "}),r(n,{bold:!0,color:"white",children:"EXIT"})]}),c(n,{children:[r(n,{bold:!0,color:"white",children:" q"}),r(n,{dimColor:!0,children:" Quit (with countdown)"})]}),c(n,{children:[r(n,{bold:!0,color:"white",children:" Ctrl+C"}),r(n,{dimColor:!0,children:" Quit immediately"})]})]})]}),ge=r(yr,{elapsedMs:J,entries:a.entries,filterActive:a.filterActive,filterText:a.filterText,filterType:a.filterType,focused:a.focusedPanel==="list",fromCache:i,grouped:a.grouped,onViewportHeightChange:S,scrollOffset:le,sectionCounts:G,sectionMessage:a.sectionMessage,sectionStatus:a.sectionStatus,selectedIndex:a.selectedIndex,severityFilter:a.severityFilter,totalAll:a.all.length,viewportHeight:C}),fe=t?r(Zi,{hint:t.hint,message:t.message,severity:t.severity,title:t.title}):null,Se=r(dr,{finding:R,focused:a.focusedPanel==="detail",scrollRef:L});if(ie){const k=Math.floor(d*.4);return c(p,{flexDirection:"column",height:h,width:d,children:[fe,c(p,{flexDirection:"row",flexGrow:1,children:[r(p,{flexGrow:1,children:ge}),r(p,{width:k,children:Se})]}),pe,r(Xe,{autoExitSeconds:e||3,onCancel:P(()=>{I(!1)},"onCancel"),visible:v}),he]})}return c(p,{flexDirection:"column",height:h,width:d,children:[fe,r(p,{height:U,children:ge}),r(p,{flexGrow:1,children:Se}),pe,r(Xe,{autoExitSeconds:e||3,onCancel:P(()=>{I(!1)},"onCancel"),visible:v}),he]})},"VisDoctorApp");var Rr=Object.defineProperty,ve=P((e,t)=>Rr(e,"name",{value:t,configurable:!0}),"n");const Tr=ve(e=>e.replaceAll(/[$()+.?[\\\]^{|}]/g,String.raw`\$&`),"escapeRegex"),Ar=ve(e=>{const t=e.split("*").map(i=>Tr(i));return new RegExp(`^${t.join(".*")}$`,"i")},"compilePattern"),Pr=ve(e=>e?e.split(",").map(t=>t.trim()).filter(t=>t.length>0).map(t=>Ar(t)):[],"parseFilterPatterns"),Me=ve((e,t)=>{for(const i of t)if(i.test(e))return!0;return!1},"matchesAny"),Ir=ve((e,t,i)=>{if(t.length===0)return e;const s=e.outdated.filter(f=>Me(f.packageName,t)),o=e.duplicates.filter(f=>Me(f.name,t)),l=e.optimizations.filter(f=>Me(f.packageName,t));let d=0,h=0,a=0;for(const f of s)f.vulnerabilities&&(d+=f.vulnerabilities.length),f.socketReport&&(h+=f.socketReport.alerts.length,f.socketReport.score.overall<i&&(a+=1));return{...e,duplicates:o,optimizations:l,outdated:s,socketIssues:{alerts:h,lowScore:a},vulnCount:d}},"applyFilter"),At=ve((e,t)=>t.length===0?[...e]:e.filter(i=>{if(i.kind==="runtime")return!0;const s=i.kind==="duplicate"?i.pkg.name:i.kind==="outdated"||i.kind==="optimization"?i.entry.packageName:i.packageName;return Me(s,t)}),"filterFindingsByPattern");var Dr=Object.defineProperty,$e=P((e,t)=>Dr(e,"name",{value:t,configurable:!0}),"r");const Pt=["dependencies","security","optimization","runtime"],st=$e(e=>{const t=new Set;if(!e)return t;for(const i of e.split(",")){const s=i.trim().toLowerCase();Pt.includes(s)&&t.add(s)}return t},"parseSectionList"),Or=$e((e,t)=>{if(e!==void 0&&e!=="")return st(e);const i=st(t);return new Set(Pt.filter(s=>!i.has(s)))},"resolveSections"),It=$e(e=>{const t={micro:0,native:0,preferred:0,socket:0,total:e.length};for(const i of e)switch(i.category){case"micro-utility":{t.micro+=1;break}case"native":{t.native+=1;break}case"preferred":{t.preferred+=1;break}case"socket":{t.socket+=1;break}}return t},"summarizeOptimizations"),ne=$e((e,t)=>{if(!e.sections.has(t))return"skip";switch(t){case"dependencies":return e.outdated.length>0||e.duplicates.length>0?"warn":"ok";case"optimization":return e.optimizations.length>0?"warn":"ok";case"runtime":return e.runtime.some(i=>i.status==="warn")?"warn":"ok";case"security":return e.vulnCount>0||e.socketIssues.alerts>0?"error":e.socketIssues.lowScore>0?"warn":"ok";default:return"ok"}},"sectionStatus"),Nr=$e((e,t)=>{const i=It(e.optimizations),s={dependencies:ne(e,"dependencies"),optimization:ne(e,"optimization"),runtime:ne(e,"runtime"),security:ne(e,"security")},o=new Set([...Object.values(s),e.supplyChain.status]),l=o.has("error")?"error":o.has("warn")?"warn":"ok";return{dependencies:{duplicates:e.duplicates.length,installed:e.installedCount,outdated:e.outdated.length,status:s.dependencies},elapsedMs:e.elapsedMs,optimizations:{microUtilities:i.micro,native:i.native,preferred:i.preferred,socket:i.socket,status:s.optimization,total:i.total},packageManager:t,runtime:e.runtime.map(d=>({detail:d.detail,id:d.id,message:d.message,status:d.status})),runtimeStatus:s.runtime,security:{alerts:e.socketIssues.alerts,lowScorePackages:e.socketIssues.lowScore,status:s.security,vulnerabilities:e.vulnCount},status:l,supplyChain:{findings:e.supplyChain.findings.map(d=>({detail:d.detail,label:d.label,severity:d.severity})),status:e.supplyChain.status},workspaces:e.workspaceCount}},"buildJsonPayload"),lt=$e((e,t)=>{const i=e.runtime.some(o=>o.status==="warn"),s=e.vulnCount>0||e.socketIssues.alerts>0;return t?s||e.outdated.length>0||e.duplicates.length>0||i:s},"shouldFail");var Fr=Object.defineProperty,Le=P((e,t)=>Fr(e,"name",{value:t,configurable:!0}),"u$1");const Mr=["aube-workspace.yaml","pnpm-workspace.yaml"],Te=Le(e=>typeof e=="boolean"?e:void 0,"asBool"),jr=Le(e=>{if(e==="no-downgrade"||e==="off")return e},"asTrustPolicy"),Er=Le(e=>{const t={allowBuildsCount:0,blockExoticSubdeps:void 0,jailBuilds:void 0,minimumReleaseAge:void 0,minimumReleaseAgeStrict:void 0,paranoid:void 0,source:void 0,strictDepBuilds:void 0,trustPolicy:void 0};for(const i of Mr){const s=q(e,i);if(!Ie(s))continue;let o;try{o=Bt(Kt(s))}catch{continue}if(typeof o!="object"||o===null)continue;const l=o;return t.source=i,t.paranoid=Te(l.paranoid),t.trustPolicy=jr(l.trustPolicy),t.blockExoticSubdeps=Te(l.blockExoticSubdeps),t.jailBuilds=Te(l.jailBuilds),t.strictDepBuilds=Te(l.strictDepBuilds),t.minimumReleaseAgeStrict=Te(l.minimumReleaseAgeStrict),typeof l.minimumReleaseAge=="number"&&Number.isFinite(l.minimumReleaseAge)&&(t.minimumReleaseAge=l.minimumReleaseAge),l.allowBuilds&&typeof l.allowBuilds=="object"&&!Array.isArray(l.allowBuilds)&&(t.allowBuildsCount=Object.keys(l.allowBuilds).length),t}return t},"readAubeSecurityPosture"),zr=Le(e=>e.paranoid?{...e,jailBuilds:!0,minimumReleaseAgeStrict:!0,strictDepBuilds:!0,trustPolicy:"no-downgrade"}:e,"applyAubeParanoidOverrides");var Br=Object.defineProperty,_e=P((e,t)=>Br(e,"name",{value:t,configurable:!0}),"i");const Lr=/^(@[\w./-]+\/[\w./-]+|[\w.-]+)@(.+)$/,Vr=_e(e=>{const t=Lr.exec(e);if(t)return{name:t[1],version:t[2]}},"parsePatchKey"),Ur=_e((e,t)=>{let i;try{if(t==="pnpm"){const o=q(e,"pnpm-workspace.yaml");Ie(o)&&(i=Lt(o)?.patchedDependencies)}else if(t==="bun"){const o=q(e,"package.json");Ie(o)&&(i=mt(o)?.patchedDependencies)}}catch{return[]}if(!i||typeof i!="object")return[];const s=[];for(const[o,l]of Object.entries(i)){if(typeof l!="string"||l.length===0)continue;const d=Vr(o);d&&s.push({name:d.name,patchFile:l,resolvedPatchFile:qt(l)?l:yt(e,l),version:d.version})}return s},"readPatchedDependencies"),Gr=_e(e=>{const t=[];for(const i of e)Ie(i.resolvedPatchFile)||t.push({entry:i,kind:"missing-file"});return t},"findPatchIssues");var _r=Object.defineProperty,Dt=P((e,t)=>_r(e,"name",{value:t,configurable:!0}),"c");const at=Dt(e=>e.some(t=>t.severity==="error")?"error":e.some(t=>t.severity==="warn")?"warn":"ok","rollUpStatus"),Hr=Dt((e,t={})=>{const i=[],s=e?.security;if(!s)return i.push({detail:"Use defineConfig() from '@visulima/vis/config' to apply secure defaults.",label:"No security config — running with the PM's native defaults",severity:"warn"}),{findings:i,status:at(i)};const o=s.policies?.firstSeen?.minutes,l=s.policies?.publisherChange,d=s.policies?.installScripts;o===void 0?i.push({detail:"Set security.policies.firstSeen.minutes to block packages published in the last N minutes (mitigates supply-chain attacks).",label:"policies.firstSeen.minutes is not set",severity:"warn"}):o===0?i.push({detail:"New packages can be installed immediately after publishing. Consider setting a non-zero cooldown.",label:"policies.firstSeen.minutes is explicitly 0",severity:"warn"}):i.push({label:`policies.firstSeen.minutes: ${String(o)} minutes`,severity:"ok"}),l?.mode===void 0||l.mode==="off"?i.push({detail:"Packages whose trust level has decreased will not be blocked. Consider 'no-downgrade'.",label:`policies.publisherChange.mode: ${l?.mode??"not set"}`,severity:"warn"}):i.push({label:`policies.publisherChange.mode: ${l.mode}`,severity:"ok"}),s.blockExoticSubdeps===void 0||!s.blockExoticSubdeps?i.push({detail:"Transitive dependencies can pull code from git repos or tarball URLs. Set to true to block.",label:`blockExoticSubdeps: ${String(s.blockExoticSubdeps??!1)}`,severity:"warn"}):i.push({label:"blockExoticSubdeps: true",severity:"ok"});const h=d?.allow?Object.keys(d.allow).length:0;if(h===0?i.push({detail:"Lifecycle scripts are blocked by default. List trusted packages here to opt them back in (e.g. esbuild, @prisma/client).",label:"policies.installScripts.allow: not configured",severity:"warn"}):i.push({label:`policies.installScripts.allow: ${String(h)} ${h===1?"entry":"entries"}`,severity:"ok"}),d?.strict&&h===0&&i.push({detail:"All dependencies with build scripts will be blocked. Run 'vis approve-builds' to populate the allow list.",label:"policies.installScripts.strict is on but allow is empty",severity:"error"}),t.workspaceRoot){const a=Si(t.workspaceRoot);if(a.length>0){const f=[...new Set(a.map(w=>w.tool))].sort((w,v)=>w.localeCompare(v)).join(", ");i.push({detail:"Run `vis migrate verify` for the full list, then re-run `vis migrate <tool>` to clean up.",label:`${String(a.length)} leftover ${a.length===1?"reference":"references"} to ${f}`,severity:"warn"})}}if(t.workspaceRoot&&t.packageManager==="aube"){const a=Er(t.workspaceRoot),f=zr(a),w=f.source?` (from ${f.source})`:"";f.paranoid===!0&&i.push({detail:"Forces jailBuilds, trustPolicy=no-downgrade, minimumReleaseAgeStrict, strictStoreIntegrity, and strictDepBuilds on.",label:`aube paranoid: true${w}`,severity:"ok"}),f.trustPolicy==="off"&&i.push({detail:"Trust downgrades between releases will not be blocked. Set trustPolicy: no-downgrade in aube-workspace.yaml.",label:`aube trustPolicy: off${w}`,severity:"warn"}),f.blockExoticSubdeps===!1&&i.push({detail:"Transitive deps from git+, file:, and tarball URLs will not be blocked. Re-enable with blockExoticSubdeps: true.",label:`aube blockExoticSubdeps: false${w}`,severity:"warn"}),f.minimumReleaseAge===0&&i.push({detail:"Newly published versions are not held in a cooling window. Restore with minimumReleaseAge: 1440 (24h) or higher.",label:`aube minimumReleaseAge: 0${w}`,severity:"warn"}),f.jailBuilds===!0&&i.push({label:`aube jailBuilds: true${w}`,severity:"ok"}),f.strictDepBuilds===!0&&i.push({label:`aube strictDepBuilds: true${w}`,severity:"ok"}),f.allowBuildsCount>0&&i.push({label:`aube allowBuilds: ${String(f.allowBuildsCount)} ${f.allowBuildsCount===1?"entry":"entries"}${w}`,severity:"ok"})}if(t.workspaceRoot&&t.packageManager){const a=Ur(t.workspaceRoot,t.packageManager);if(a.length>0){const f=Gr(a);if(f.length===0)i.push({label:`patchedDependencies: ${String(a.length)} ${a.length===1?"entry":"entries"} resolved`,severity:"ok"});else for(const w of f)i.push({detail:`Referenced from ${t.packageManager==="pnpm"?"pnpm-workspace.yaml":"package.json"} but the file is not present at ${w.entry.patchFile}.`,label:`patchedDependencies: missing patch file for ${w.entry.name}@${w.entry.version}`,severity:"error"})}}return{findings:i,status:at(i)}},"buildSupplyChainPosture");var Yr=Object.defineProperty,x=P((e,t)=>Yr(e,"name",{value:t,configurable:!0}),"u");const H=x(e=>e>=1e3?`${(e/1e3).toFixed(1)}s`:`${String(Math.round(e))}ms`,"fmtDuration"),Ne=x(async(e,t,i,s)=>{if(!e)return i();e.start(t);const o=Date.now();try{const l=await i(),d=Date.now()-o,{status:h,summary:a}=s(l,d);return e.finish(t,h,a),l}catch(l){const d=Date.now()-o,h=l instanceof Error?l.message:String(l);throw e.finish(t,"error",`${h} (${H(d)})`),l}},"tracked"),Wr=x((e,t)=>{const i={duplicates:t.duplicates,elapsedMs:0,installedCount:0,optimizations:t.optimizations,outdated:t.outdated,runtime:t.runtime,sections:new Set([e]),socketIssues:{alerts:0,lowScore:0},supplyChain:{findings:[],status:"ok"},vulnCount:0,workspaceCount:0};return xt(i)},"buildSectionFindings"),ct=x(async e=>{const{filterPatterns:t,installed:i,progress:s,resolveCodemods:o,sections:l,store:d,visConfig:h,workspaceRoot:a}=e,f=l.has("dependencies"),w=l.has("security"),v=l.has("optimization"),I=l.has("runtime"),z=x((m,N)=>At(Wr(m,N),t),"sectionFindings"),g=ut(a),{packageManager:D}=pt(a),B=it(q(a,"package.json"),!1),J=wt(a),V=new Set(B);for(const m of J){const N=it(q(yt(a,m),"package.json"),!1);for(const F of N)V.add(F)}const L=Vt(a),R=ht(a,D),G=gt(h?.security,{minimumScore:h?.security?.policies?.score?.minimum}),_=h?.security?.policies?.score?.minimum??ft,se=h?.security?.acceptedRisks,ie=ri(a,g.name),U={exclude:[],ignore:[],include:[],includeLocked:!1,includePrerelease:!1,security:!0,target:"latest"},j=f?ui(a,g.name):[],Y=v?ni(V):[],S=v?oi(V,ie,g,!1):[],C=new Set(Y.map(m=>m.packageName)),X=S.filter(m=>!C.has(m.packageName)),T=[...Y,...X],le=I?Gi(a):[];d&&(f&&d.startSection("dependencies",R.size>0?"checking outdated catalog dependencies":"scanning duplicates"),w&&d.startSection("security",i.length>0?`scanning ${String(i.length)} packages for advisories`:"no installed packages to scan"),v&&d.startSection("optimization","matching e18e + socket overrides"),I&&d.startSection("runtime","running runtime diagnostics")),d&&I&&d.completeSection("runtime",z("runtime",{duplicates:[],optimizations:[],outdated:[],runtime:le}));const ue=(f||w)&&R.size>0?Ne(s,"outdated",()=>Ut(R,U,L,void 0,a,G,se),(m,N)=>{const F=m.outdated.length;return{status:F>0?"warn":"ok",summary:F>0?`${String(F)} outdated · ${H(N)}`:`up to date · ${H(N)}`}}):Promise.resolve({failed:[],ignored:[],outdated:[]}),O=w&&i.length>0?Ne(s,"vulnerabilities",()=>Gt(i.map(m=>({name:m.name,version:m.version}))),(m,N)=>{let F=0;for(const re of m.values())F+=re.length;return{status:F>0?"error":"ok",summary:F>0?`${String(F)} found · ${H(N)}`:`none found · ${H(N)}`}}):Promise.resolve(new Map),Q=w&&G.length>0&&i.length>0?Ne(s,"socket",()=>_t(G,i.map(m=>({name:m.name,version:m.version}))),(m,N)=>{let F=0,re=0;for(const qe of m.values())F+=qe.alerts.length,qe.score.overall<_&&(re+=1);const Ke=F+re;return{status:Ke>0?"warn":"ok",summary:Ke>0?`${String(F)} alert${F===1?"":"s"}, ${String(re)} low-score · ${H(N)}`:`clean · ${H(N)}`}}):Promise.resolve(new Map);let ee,pe,he,ge;const fe=ue.catch(m=>(ee=m instanceof Error?m.message:String(m),d||u.warn(`Outdated scan failed: ${ee}`),{failed:[],ignored:[],outdated:[]})),Se=O.catch(m=>(pe=m instanceof Error?m.message:String(m),d||u.warn(`Vulnerability scan failed: ${pe}`),new Map)),k=Q.catch(m=>(he=m instanceof Error?m.message:String(m),d||u.warn(`Socket scan failed: ${he}`),new Map)),y=d&&f?fe.then(m=>{if(ee){d.failSection("dependencies",ee);return}d.completeSection("dependencies",z("dependencies",{duplicates:j,optimizations:[],outdated:m.outdated,runtime:[]}))}):void 0,b=d&&w?Promise.all([fe,Se,k]).then(([m])=>{const N=ee??pe??he;if(N){d.failSection("security",N);return}d.completeSection("security",z("security",{duplicates:[],optimizations:[],outdated:m.outdated,runtime:[]}))}):void 0,Ce=(async()=>{if(o&&v&&T.length>0&&await Ne(s,"codemods",async()=>(await si(T),T),(m,N)=>{const F=m.filter(re=>re.hasCodemod||re.category==="socket").length;return{status:"ok",summary:`${String(F)} auto-fixable · ${H(N)}`}}).catch(m=>{ge=m instanceof Error?m.message:String(m)}),d&&v){if(ge){d.failSection("optimization",ge);return}d.completeSection("optimization",z("optimization",{duplicates:[],optimizations:T,outdated:[],runtime:[]}))}})(),[ae,Nt,Ft]=await Promise.all([fe,Se,k]);await Promise.all([y,b,Ce]);let Ye=0,We=0;if(w&&G.length>0)for(const m of Ft.values())Ye+=m.alerts.length,m.score.overall<_&&(We+=1);let Ve=0;if(w){for(const m of ae.outdated)m.vulnerabilities&&m.vulnerabilities.length>0&&(Ve+=m.vulnerabilities.length);for(const m of Nt.values())Ve+=m.length}return{duplicates:j,installedCount:i.length,optimizations:v?T:[],outdated:f?ae.outdated:[],runtime:le,sections:l,socketIssues:{alerts:Ye,lowScore:We},supplyChain:Hr(h,{packageManager:D,workspaceRoot:a}),vulnCount:Ve,workspaceCount:J.length}},"streamScans"),Kr=x(e=>{switch(e){case"error":return Ae(M.failure);case"skip":return $(M.dash);case"warn":return Ee(M.warning);default:return be(M.success)}},"sectionIcon"),de=x((e,t)=>{const i=process.stderr.columns??80,s=Math.max(20,Math.min(i-2,60)),o=M.dash.repeat(2),l=`${Kr(t)} ${ce(e)}`,d=l.replaceAll(/\[[0-9;]*m/g,"").length,h=Math.max(0,s-d-o.length-2);return`${o} ${l} ${$(M.dash.repeat(h))}`},"heading"),K=x(e=>` ${be(M.success)} ${e}`,"itemOk"),Z=x(e=>` ${Ee(M.warning)} ${e}`,"itemWarn"),He=x(e=>` ${Ae(M.failure)} ${e}`,"itemError"),Ot=x(e=>` ${$(M.dash)} ${$(e)}`,"itemSkip"),W=x((e,t,i)=>{const s=`${ce(String(e))} ${$(t)}`;return i?`${s} ${$(`(${i})`)}`:s},"countLine"),qr=x(e=>{if(e.sections.has("dependencies")){if(u.log(""),u.log(de("Dependencies",ne(e,"dependencies"))),u.log(K(W(e.installedCount,"packages installed"))),e.outdated.length>0){const t=e.outdated.filter(l=>l.updateType==="major").length,i=e.outdated.filter(l=>l.updateType==="minor").length,s=e.outdated.filter(l=>l.updateType==="patch").length,o=[];t>0&&o.push(`${String(t)} major`),i>0&&o.push(`${String(i)} minor`),s>0&&o.push(`${String(s)} patch`),u.log(Z(W(e.outdated.length,"outdated",o.join(", "))))}else u.log(K("All dependencies up to date"));e.duplicates.length>0?u.log(Z(W(e.duplicates.length,"packages with duplicate versions"))):u.log(K("No duplicate dependencies"))}},"displayDependencies"),Jr=x(e=>{e.sections.has("security")&&(u.log(""),u.log(de("Security",ne(e,"security"))),e.vulnCount>0?u.log(He(W(e.vulnCount,`vulnerabilit${e.vulnCount===1?"y":"ies"} found`))):u.log(K("No known vulnerabilities")),e.socketIssues.alerts>0&&u.log(Z(W(e.socketIssues.alerts,`Socket.dev security alert${e.socketIssues.alerts===1?"":"s"}`))),e.socketIssues.lowScore>0&&u.log(Z(W(e.socketIssues.lowScore,`package${e.socketIssues.lowScore===1?"":"s"} with low security score`))),e.socketIssues.alerts===0&&e.socketIssues.lowScore===0&&e.vulnCount===0&&u.log(K("No security issues detected")))},"displaySecurity"),Xr=x(e=>{if(!e.sections.has("optimization"))return;u.log(""),u.log(de("Optimization",ne(e,"optimization")));const t=It(e.optimizations);if(t.total===0){u.log(K("No optimizations available"));return}t.native>0&&u.log(Z(W(t.native,"replaceable with native APIs"))),t.preferred>0&&u.log(Z(W(t.preferred,"with lighter alternatives"))),t.micro>0&&u.log(Z(W(t.micro,"trivial micro-utilities"))),t.socket>0&&u.log(Z(W(t.socket,"@socketregistry overrides available")))},"displayOptimization"),Qr=x(e=>{u.log(""),u.log(de("Supply Chain",e.supplyChain.status));for(const t of e.supplyChain.findings){const i=t.severity==="ok"?K(t.label):t.severity==="error"?He(t.label):Z(t.label);u.log(i),t.detail&&u.log(` ${$(M.arrow)} ${$(t.detail)}`)}e.supplyChain.status!=="ok"&&u.log(` ${$(M.arrow)} ${$("Configure with security.* in vis.config.ts. See `vis check --security-config` for details.")}`)},"displaySupplyChain"),Zr=x(e=>{if(e.sections.has("runtime")){u.log(""),u.log(de("Runtime",ne(e,"runtime")));for(const t of e.runtime)t.status==="ok"?u.log(K(t.message)):t.status==="skip"?u.log(Ot(t.message)):u.log(Z(t.message))}},"displayRuntime"),en=x((e,t)=>{const i=e.vulnCount,s=e.runtime.filter(l=>l.status==="warn").length,o=e.outdated.length+e.duplicates.length+e.optimizations.length+s;if(t){if(i===0&&o===0)u.success(`Everything looks good! ${$(`(${H(e.elapsedMs)})`)}`);else{const l=[];i>0&&l.push(Ae(`${String(i)} security`)),o>0&&l.push(Ee(`${String(o)} improvement${o===1?"":"s"}`)),u.log(`${Ae(M.failure)} ${l.join(", ")} ${$(`(${H(e.elapsedMs)})`)}`)}return}u.log(""),u.log(de("Summary","ok")),i===0&&o===0?u.success(`Everything looks good! ${$(`(${H(e.elapsedMs)})`)}`):(i>0&&u.error(`${String(i)} security issue${i===1?"":"s"}`),o>0&&u.log(` ${Pe(M.arrow)} ${ce(String(o))} ${$(`improvement${o===1?"":"s"} available`)} ${$(`(${H(e.elapsedMs)})`)}`))},"displaySummary"),tn=x(e=>{const t=[];if(e.outdated.length>0&&t.push("vis update — update outdated dependencies"),(e.vulnCount>0||e.socketIssues.alerts>0)&&t.push("vis audit — detailed security analysis"),e.optimizations.length>0&&t.push("vis optimize — apply optimizations interactively"),e.duplicates.length>0&&t.push("vis dedupe — reduce duplicate versions"),t.length>0){u.log(""),u.log(ce("Next steps:"));for(const i of t)u.log(` ${$(M.arrow)} ${i}`)}u.log("")},"displayActions"),rn=x((e,t)=>{t||(qr(e),Jr(e),Xr(e),Zr(e),Qr(e)),en(e,t)},"displayResults"),nn=x((e,t,i,s,o)=>{const l=[],d=e.has("dependencies"),h=e.has("security"),a=e.has("optimization");return(d||h)&&t>0&&l.push({id:"outdated",label:"Outdated catalog dependencies"}),h&&s>0&&l.push({id:"vulnerabilities",label:"Known vulnerabilities (OSV)"}),h&&i&&s>0&&l.push({id:"socket",label:"Socket.dev supply-chain reports"}),a&&o&&l.push({id:"codemods",label:"Codemod availability"}),l},"planScanTasks"),on=x(e=>{if(u.log(""),u.log(`${ce(Pe("vis doctor"))} ${$("— project health check")}`),u.log(K(`Detected ${e.packageManagerName} v${e.packageManagerVersion}`)),e.workspaceCount!==void 0&&e.workspaceCount>0&&u.log(K(W(e.workspaceCount,`workspace package${e.workspaceCount===1?"":"s"}`))),e.runtimeFindings.length===0)u.log(K(`Node.js ${e.nodeVersion}`));else{for(const t of e.runtimeFindings){const i=t.severity==="error"?Ae:Ee;u.log(He(`Runtime: ${i(t.message)}`))}u.log(` ${$(M.arrow)} Run ${be("vis toolchain install")} to install pinned versions, or ${be("vis toolchain status")} for the per-tool breakdown.`)}u.log("")},"printBanner"),On=x(async({logger:e,options:t,visConfig:i,visConfigError:s,workspaceRoot:o})=>{if(!o)throw new Error("Could not determine workspace root.");const l=t.format==="json"||t.json===!0,d=Or(t.only,t.skip),h=!!t.quiet,a=t.progress===!1,f=Pr(t.filter);if(d.size===0){u.error("No sections selected. Check your --only / --skip values."),process.exitCode=2;return}const w=Date.now(),v=ut(o),I=ci(o),z=!!process.stdout.isTTY,g=!l&&z&&!Ht&&!h&&!a;!l&&!g&&on({nodeVersion:process.versions.node,packageManagerName:v.name,packageManagerVersion:v.version,runtimeFindings:I,workspaceCount:void 0});const D=ht(o,pt(o).packageManager),B=pi(o,v.name),J=B.length,V=gt(i?.security).length>0,L=i?.security?.policies?.score?.minimum??ft,R=wt(o);if(!l&&!h&&!g){const O=R.length>0?$(` · ${String(R.length)} workspace package${R.length===1?"":"s"}`):"";u.log(`${$("·")} ${$("Found")} ${ce(String(J))} ${$(`installed package${J===1?"":"s"}`)}${O}`)}const G=s?{hint:s.file?`Continuing with default settings — fix or regenerate ${s.file} (vis init --force).`:"Continuing with default settings.",message:s.message,severity:"error",title:s.file?`Failed to load ${s.file}`:"Failed to load vis.config"}:void 0,_={bun:"bun.lock",npm:"package-lock.json",pnpm:"pnpm-lock.yaml",yarn:"yarn.lock"}[v.name],se=_?q(o,_):void 0,ie=Jt(o),U=t.cache!==!1&&!t.fix?Ti({configPath:ie,lockfilePath:se,sections:d,socketEnabled:V,workspaceRoot:o}):void 0,j=U?Ai(U):void 0,Y=j!==void 0;let S,C;if(g){const O=j?new nt({activeSections:d,findings:At(xt(j),f)}):new nt({activeSections:d}),Q=Xt(Qt.createElement(xr,{banner:G,fromCache:Y,startedAt:w,store:O}),{alternateScreen:!0,exitOnCtrlC:!1,interactive:!0,patchConsole:!0});try{S=j??await ct({filterPatterns:f,installed:B,resolveCodemods:!!t.fix,sections:d,store:O,visConfig:i,workspaceRoot:o})}catch(ee){throw Q.unmount(),ee}await Q.waitUntilExit(),C=O.getSnapshot().pendingAction}else if(j)S=j;else{const O=nn(d,D.size,V,J,!!t.fix),Q=di(O,{live:!l&&!h&&!a});try{S=await ct({filterPatterns:f,installed:B,progress:Q,resolveCodemods:!!t.fix,sections:d,visConfig:i,workspaceRoot:o})}finally{Q.stop()}}const X={...S,elapsedMs:Date.now()-w};if(U&&!Y)try{Pi(U,X)}catch{}const T=Ir(X,f,L);if(l){process.stdout.write(`${JSON.stringify(Nr(T,v.name),void 0,2)}
4
+ `),t.exitCode&&lt(T,!!t.strict)&&(process.exitCode=1);return}Y&&!h&&u.log(`${$("·")} Cached results (use --no-cache to refresh)`),f.length>0&&!h&&u.log(`${$("·")} Filter active: ${Pe(t.filter??"")}`),rn(T,h);const le=T.runtime.some(O=>O.id===Fe&&O.status==="warn"),ue=T.sections.has("optimization")&&T.optimizations.length>0;t.fix&&(ue||le)?await sn({force:!!t.fixForce,logger:e,pm:v,recoverOrphans:le,results:T,useEditorconfig:i?.editorconfig??!0,workspaceRoot:o}):h||tn(T),C&&(process.stdout.write(`
5
+ `),process.stdout.write(`${ce(" ")}${C.description}
6
+ `),C.configSnippet?(process.stdout.write(`
7
+ `),process.stdout.write(`${$(C.configSnippet)}
8
+ `)):process.stdout.write(` ${Pe(C.command)}
9
+ `),process.stdout.write(`
10
+ `)),t.exitCode&&lt(T,!!t.strict)&&(process.exitCode=1)},"execute"),sn=x(async e=>{const{force:t,logger:i,pm:s,recoverOrphans:o,results:l,useEditorconfig:d,workspaceRoot:h}=e;u.log(""),u.log(de("Applying fixes","ok"));const a=l.optimizations.filter(g=>g.category==="socket"&&g.overrideSpec).map(g=>({original:g.packageName,spec:g.overrideSpec})),f=l.optimizations.filter(g=>g.category!=="socket"&&g.hasCodemod),w=l.optimizations.filter(g=>g.category!=="socket"&&!g.hasCodemod);let v=!1,I=0;const z=[];if(o){const g=Mi({force:t});if(g.killed.length>0&&(u.success(`Cleaned up ${String(g.killed.length)} orphaned process${g.killed.length===1?"":"es"} (PIDs: ${g.killed.join(", ")}).`),v=!0),g.failed.length>0){const D=t?"":" Re-run with `--fix --fix-force` to escalate to SIGKILL.";u.warn(`Could not signal ${String(g.failed.length)} orphan${g.failed.length===1?"":"s"}: ${g.failed.map(B=>`${String(B.pid)} (${B.reason})`).join(", ")}.${D}`)}}if(a.length>0){const g=li(h,q(h,"package.json"),a,s,d);g.added.length>0&&(u.success(`Added ${String(g.added.length)} security override${g.added.length===1?"":"s"}.`),v=!0),g.updated.length>0&&(u.success(`Updated ${String(g.updated.length)} override${g.updated.length===1?"":"s"}.`),v=!0)}for(const g of f)try{const D=await ai(h,g.packageName);D.filesChanged>0&&(u.success(`${g.packageName}: ${String(D.filesChanged)} file${D.filesChanged===1?"":"s"} updated`),I+=1,v=!0)}catch(D){const B=D instanceof Error?D.message:String(D);z.push({error:B,package:g.packageName}),u.warn(`${g.packageName}: codemod failed — ${B}`)}a.length>0&&(u.log(`${Pe(M.arrow)} Running ${s.name} install to update lockfile…`),Yt(s,{dev:!1,filter:[],force:!1,frozenLockfile:!1,ignoreScripts:!1,lockfileOnly:!1,noOptional:!1,offline:!1,prod:!1,recursive:!1,silent:!1,workspaceRoot:!1},h,i),v=!0),u.log(""),v?u.success(`Fixes applied. ${I>0?`${String(I)} codemod${I===1?"":"s"} applied.`:""}`.trim()):u.log(Ot("No auto-fixable items in the current run.")),z.length>0&&u.warn(`${String(z.length)} codemod${z.length===1?"":"s"} failed (run ${be("vis optimize")} for the interactive picker).`),w.length>0&&u.notice(`${String(w.length)} optimization${w.length===1?"":"s"} need manual review (no codemod). Run ${be("vis optimize")} to inspect them.`)},"runFixes");export{On as default};