@visulima/vis 2.0.1 → 2.0.2

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 (149) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/LICENSE.md +862 -170
  3. package/dist/bin.js +1 -1
  4. package/dist/binx.js +1 -1
  5. package/dist/packem_chunks/CONFIG_FILES.js +3 -3
  6. package/dist/packem_chunks/bloom-status.js +1 -1
  7. package/dist/packem_chunks/bloom-sync.js +1 -1
  8. package/dist/packem_chunks/catalog.js +68 -68
  9. package/dist/packem_chunks/cli-exec.js +1 -1
  10. package/dist/packem_chunks/cli-main.js +145 -143
  11. package/dist/packem_chunks/dispatch.js +1 -1
  12. package/dist/packem_chunks/doctor-probe.js +1 -1
  13. package/dist/packem_chunks/fix.js +3 -3
  14. package/dist/packem_chunks/handler.js +1 -1
  15. package/dist/packem_chunks/handler10.js +3 -3
  16. package/dist/packem_chunks/handler11.js +1 -1
  17. package/dist/packem_chunks/handler12.js +3 -3
  18. package/dist/packem_chunks/handler13.js +1 -1
  19. package/dist/packem_chunks/handler14.js +1 -1
  20. package/dist/packem_chunks/handler15.js +1 -1
  21. package/dist/packem_chunks/handler16.js +1 -1
  22. package/dist/packem_chunks/handler17.js +1 -1
  23. package/dist/packem_chunks/handler18.js +1 -1
  24. package/dist/packem_chunks/handler19.js +1 -1
  25. package/dist/packem_chunks/handler2.js +1 -1
  26. package/dist/packem_chunks/handler20.js +2 -2
  27. package/dist/packem_chunks/handler21.js +1 -1
  28. package/dist/packem_chunks/handler22.js +1 -1
  29. package/dist/packem_chunks/handler23.js +1 -1
  30. package/dist/packem_chunks/handler24.js +1 -1
  31. package/dist/packem_chunks/handler26.js +1 -1
  32. package/dist/packem_chunks/handler27.js +1 -1
  33. package/dist/packem_chunks/handler28.js +1 -1
  34. package/dist/packem_chunks/handler29.js +1 -1
  35. package/dist/packem_chunks/handler3.js +1 -1
  36. package/dist/packem_chunks/handler30.js +1 -1
  37. package/dist/packem_chunks/handler4.js +4 -4
  38. package/dist/packem_chunks/handler5.js +1 -1
  39. package/dist/packem_chunks/handler50.js +5 -5
  40. package/dist/packem_chunks/handler51.js +2 -2
  41. package/dist/packem_chunks/handler53.js +1 -1
  42. package/dist/packem_chunks/handler54.js +2 -2
  43. package/dist/packem_chunks/handler55.js +1 -1
  44. package/dist/packem_chunks/handler58.js +4 -4
  45. package/dist/packem_chunks/handler59.js +1 -1
  46. package/dist/packem_chunks/handler6.js +7 -7
  47. package/dist/packem_chunks/handler60.js +2 -2
  48. package/dist/packem_chunks/handler61.js +13 -13
  49. package/dist/packem_chunks/handler62.js +3 -3
  50. package/dist/packem_chunks/handler63.js +2 -2
  51. package/dist/packem_chunks/handler64.js +4 -4
  52. package/dist/packem_chunks/handler66.js +1 -1
  53. package/dist/packem_chunks/handler67.js +16 -16
  54. package/dist/packem_chunks/handler68.js +1 -1
  55. package/dist/packem_chunks/handler69.js +15 -15
  56. package/dist/packem_chunks/handler7.js +1 -1
  57. package/dist/packem_chunks/handler70.js +5 -5
  58. package/dist/packem_chunks/handler71.js +1 -1
  59. package/dist/packem_chunks/handler72.js +23 -23
  60. package/dist/packem_chunks/handler73.js +5 -5
  61. package/dist/packem_chunks/handler74.js +22 -22
  62. package/dist/packem_chunks/handler75.js +2 -2
  63. package/dist/packem_chunks/handler76.js +5 -5
  64. package/dist/packem_chunks/handler77.js +18 -18
  65. package/dist/packem_chunks/handler78.js +25 -25
  66. package/dist/packem_chunks/handler8.js +1 -1
  67. package/dist/packem_chunks/handler9.js +1 -1
  68. package/dist/packem_chunks/heal-accept.js +2 -2
  69. package/dist/packem_chunks/heal.js +4 -4
  70. package/dist/packem_chunks/help-command.js +46 -46
  71. package/dist/packem_chunks/index3.js +3 -3
  72. package/dist/packem_chunks/keys-refresh.js +1 -1
  73. package/dist/packem_chunks/lean.js +2 -2
  74. package/dist/packem_chunks/list.js +1 -1
  75. package/dist/packem_chunks/loader.js +1 -1
  76. package/dist/packem_chunks/prompts.js +1 -1
  77. package/dist/packem_chunks/prune.js +1 -1
  78. package/dist/packem_chunks/status.js +1 -1
  79. package/dist/packem_chunks/sync.js +1 -1
  80. package/dist/packem_chunks/sync2.js +1 -1
  81. package/dist/packem_chunks/tripwire.js +1 -1
  82. package/dist/packem_chunks/ts-loader.js +6 -6
  83. package/dist/packem_chunks/verify-lockfile.js +1 -1
  84. package/dist/packem_shared/{advisories-BGeuHJQg.js → advisories-CCBGdU8U.js} +1 -1
  85. package/dist/packem_shared/{affected-selection-B85ND6JV.js → affected-selection-Dj-ymxhw.js} +1 -1
  86. package/dist/packem_shared/{affected-shas-BWRRAB47.js → affected-shas-PwkVbPch.js} +1 -1
  87. package/dist/packem_shared/ai-analysis-bGCAc1jR.js +68 -0
  88. package/dist/packem_shared/{ai-fix-BgBU0TOz.js → ai-fix-DV5-dHBY.js} +4 -4
  89. package/dist/packem_shared/{augment-HVeX6LpU.js → augment-24KX2nkI.js} +1 -1
  90. package/dist/packem_shared/{bin-DKod8Iqo.js → bin-CtzhnYMp.js} +1 -1
  91. package/dist/packem_shared/{build-scripts-CM8M1xcG.js → build-scripts-w4SNeR7D.js} +1 -1
  92. package/dist/packem_shared/{command-runtime-BVi4lL8k.js → command-runtime-BLFPUYAT.js} +1 -1
  93. package/dist/packem_shared/{cyclonedx-y7VLI-1d.js → cyclonedx-C4KaVTn1.js} +3 -3
  94. package/dist/packem_shared/{dependency-scan-BAzKpXdW.js → dependency-scan-D_ona0Qm.js} +1 -1
  95. package/dist/packem_shared/{docker-D1LStSlH.js → docker-DaVs-9wK.js} +27 -27
  96. package/dist/packem_shared/{en-BxrK-n-J.js → en-D3CfXlO7.js} +13 -13
  97. package/dist/packem_shared/{failure-log-ChuFC-8f.js → failure-log-CTneNcio.js} +2 -2
  98. package/dist/packem_shared/glob-BUjyjdE8-C4M8e02u.js +1 -0
  99. package/dist/packem_shared/index-CTMU29dI.js +1 -0
  100. package/dist/packem_shared/index-uBVnF4ji.js +35 -0
  101. package/dist/packem_shared/index.server-CusjRLCh.js +2 -0
  102. package/dist/packem_shared/{lifecycle-Db0qh6vR.js → lifecycle-B8A2T3gx.js} +1 -1
  103. package/dist/packem_shared/{lockfile-CDQ0n4P5.js → lockfile-Bccery3L.js} +1 -1
  104. package/dist/packem_shared/{manifests-Da_no4ZH.js → manifests-BDkwiVbh.js} +1 -1
  105. package/dist/packem_shared/{min-release-age-V6L6dpiP.js → min-release-age-OaYpLwux.js} +1 -1
  106. package/dist/packem_shared/missing-package-json-BqS-OnKd.js +1 -0
  107. package/dist/packem_shared/{native-config-sync-C0pUePad.js → native-config-sync-Ds1FtcrM.js} +3 -3
  108. package/dist/packem_shared/{osv-bloom-DNFpvSSO.js → osv-bloom-pKp7urSB.js} +2 -2
  109. package/dist/packem_shared/package-version-C47v64aB.js +4 -0
  110. package/dist/packem_shared/packument-HBVbyf7x.js +1 -0
  111. package/dist/packem_shared/pm-runner-C6eTANt1.js +1 -0
  112. package/dist/packem_shared/{project-name-filter-u2Q7YpQH.js → project-name-filter-CJ3XX2TI.js} +1 -1
  113. package/dist/packem_shared/{provenance-9OT8sTqn.js → provenance-D4Cza8cp.js} +1 -1
  114. package/dist/packem_shared/{readJsonSync-BnWiH5-R-BpnwAB0Z.js → readJsonSync-DweZd5ZA-0eZh9sGm.js} +1 -1
  115. package/dist/packem_shared/{registry-keys-CYHd7qU2.js → registry-keys-C0ez2VND.js} +1 -1
  116. package/dist/packem_shared/{resolve-explicit-DC3XssJa.js → resolve-explicit-BbT764KS.js} +1 -1
  117. package/dist/packem_shared/{resolve-runtime-f5l4ODsH.js → resolve-runtime-D_vZovbB.js} +1 -1
  118. package/dist/packem_shared/{run-file-zB4ACnUy.js → run-file-DyPFFN9U.js} +1 -1
  119. package/dist/packem_shared/{runtime-check-CWvAfu5u.js → runtime-check-D4um-yQq.js} +1 -1
  120. package/dist/packem_shared/{s1ngularity-DsmC71xt.js → s1ngularity-St6dhKiq.js} +1 -1
  121. package/dist/packem_shared/scan-progress-q-N2JtIp.js +2 -0
  122. package/dist/packem_shared/{selectors-CtxnIT4X.js → selectors-Ce_6UAoY.js} +1 -1
  123. package/dist/packem_shared/{signatures-Dwx5fD4g.js → signatures-Dyeyg1q9.js} +1 -1
  124. package/dist/packem_shared/target-merge-Cfy7c__2.js +11 -0
  125. package/dist/packem_shared/{target-options-BO4Uxt0k.js → target-options-7XcbqGDe.js} +1 -1
  126. package/dist/packem_shared/{toolchain-BY8lJaSN.js → toolchain-C_pNMBM6.js} +1 -1
  127. package/dist/packem_shared/{typosquats-BUGgotNu.js → typosquats-xzcAGPiM.js} +1 -1
  128. package/dist/packem_shared/{use-measured-height-BLZt9dW2.js → use-measured-height-CBjN0fle.js} +1 -1
  129. package/dist/packem_shared/{verify-B0ztxKMa.js → verify-Dve9PQj3.js} +1 -1
  130. package/dist/packem_shared/vis-update-app-DMAC2pPf.js +1 -0
  131. package/dist/packem_shared/vis-user-error-xmha3L4n.js +30 -0
  132. package/dist/packem_shared/{watch-CGrUW_JD.js → watch-BXOOX7lx.js} +1 -1
  133. package/dist/packem_shared/{watch-loop-DIwSMjlA.js → watch-loop-Q7UpkVbr.js} +4 -4
  134. package/dist/runtime/preload.js +1 -1
  135. package/index.js +52 -52
  136. package/package.json +16 -16
  137. package/dist/packem_shared/ai-analysis-oNMAj1wd.js +0 -68
  138. package/dist/packem_shared/glob-BUjyjdE8-BSrdzgma.js +0 -1
  139. package/dist/packem_shared/index-BJw7gKD1.js +0 -1
  140. package/dist/packem_shared/index-DND6ptxQ.js +0 -35
  141. package/dist/packem_shared/index.server-qvZ-cy29.js +0 -2
  142. package/dist/packem_shared/missing-package-json-Jw8IEHct.js +0 -1
  143. package/dist/packem_shared/package-version-DjHDww_5.js +0 -4
  144. package/dist/packem_shared/packument-N3EWbZpL.js +0 -1
  145. package/dist/packem_shared/pm-runner-Bssje5qH.js +0 -1
  146. package/dist/packem_shared/scan-progress-Ch8s3Uwl.js +0 -2
  147. package/dist/packem_shared/target-merge-b7bE1AEx.js +0 -11
  148. package/dist/packem_shared/vis-update-app-D1gLJB1O.js +0 -1
  149. package/dist/packem_shared/vis-user-error-DjFv8uxy.js +0 -28
@@ -1,4 +1,4 @@
1
- import{E as u}from"../packem_shared/index.server-qvZ-cy29.js";import{m as p}from"../packem_shared/index-DND6ptxQ.js";const f={docker:".dockerignore",npm:".npmignore",slug:".slugignore",vercel:".vercelignore"},m=[".git",".gitattributes",".gitignore",".editorconfig",".vscode/",".idea/",".DS_Store","*.md","LICENSE*","LICENCE*","CHANGELOG*","CONTRIBUTING*","AUTHORS*","docs/","doc/","examples/","example/",".github/",".gitlab-ci.yml",".circleci/","appveyor.yml",".eslintrc*","eslint.config.*",".prettierrc*","prettier.config.*","*.log","npm-debug.log*","*.d.ts","*.map","*.flow","tsconfig*.json","__tests__/","__mocks__/","test/","tests/","*.test.*","*.spec.*","coverage/",".nyc_output/"],w={docker:["node_modules",".vis/","Dockerfile*",".dockerignore"],npm:[],slug:["node_modules"],vercel:["node_modules",".vercel/"]},$=e=>{const r=new Set,n=[];for(const t of[...m,...w[e]])r.has(t)||(r.add(t),n.push(t));return n},h=e=>e.trim(),_="# Added by vis ignore",v=(e,r)=>{const n=new Set;for(const o of e.split(/\r?\n/u)){const c=h(o);c!==""&&!c.startsWith("#")&&n.add(c)}const t=[];for(const o of r)n.has(o)||(n.add(o),t.push(o));if(t.length===0)return{added:t,content:e};const s=e.includes(`\r
1
+ import{E as u}from"../packem_shared/index.server-CusjRLCh.js";import{w as p}from"../packem_shared/index-uBVnF4ji.js";const f={docker:".dockerignore",npm:".npmignore",slug:".slugignore",vercel:".vercelignore"},m=[".git",".gitattributes",".gitignore",".editorconfig",".vscode/",".idea/",".DS_Store","*.md","LICENSE*","LICENCE*","CHANGELOG*","CONTRIBUTING*","AUTHORS*","docs/","doc/","examples/","example/",".github/",".gitlab-ci.yml",".circleci/","appveyor.yml",".eslintrc*","eslint.config.*",".prettierrc*","prettier.config.*","*.log","npm-debug.log*","*.d.ts","*.map","*.flow","tsconfig*.json","__tests__/","__mocks__/","test/","tests/","*.test.*","*.spec.*","coverage/",".nyc_output/"],w={docker:["node_modules",".vis/","Dockerfile*",".dockerignore"],npm:[],slug:["node_modules"],vercel:["node_modules",".vercel/"]},$=e=>{const r=new Set,n=[];for(const t of[...m,...w[e]])r.has(t)||(r.add(t),n.push(t));return n},h=e=>e.trim(),_="# Added by vis ignore",v=(e,r)=>{const n=new Set;for(const o of e.split(/\r?\n/u)){const c=h(o);c!==""&&!c.startsWith("#")&&n.add(c)}const t=[];for(const o of r)n.has(o)||(n.add(o),t.push(o));if(t.length===0)return{added:t,content:e};const s=e.includes(`\r
2
2
  `)?`\r
3
3
  `:`
4
4
  `,d=[_,...t].join(s);if(e.trim()==="")return{added:t,content:`${d}${s}`};const i=e.endsWith(`
@@ -1,4 +1,4 @@
1
- import{E as d}from"../packem_shared/index.server-qvZ-cy29.js";import{m as g,l as y,z as k,q as w,c as l}from"../packem_shared/index-DND6ptxQ.js";import{a as $,b as h,f as x}from"../packem_shared/subtree-DSm0QEoE.js";import{a as u}from"../packem_shared/utils-CRueU43T.js";import{P as b,c as R}from"./catalog.js";import{a as A}from"../packem_shared/readJsonSync-BnWiH5-R-BpnwAB0Z.js";const j=["aube-workspace.yaml","pnpm-workspace.yaml"],q=/^\s*packages\s*:\s*$/,E=/^(\s*)-\s/,v=(c,i)=>{const r=c.includes(`\r
1
+ import{E as d}from"../packem_shared/index.server-CusjRLCh.js";import{w as g,l as y,z as k,j as w,q as l}from"../packem_shared/index-uBVnF4ji.js";import{a as $,b as h,f as x}from"../packem_shared/subtree-DSm0QEoE.js";import{a as u}from"../packem_shared/utils-CRueU43T.js";import{P as b,e as R}from"./catalog.js";import{a as A}from"../packem_shared/readJsonSync-DweZd5ZA-0eZh9sGm.js";const j=["aube-workspace.yaml","pnpm-workspace.yaml"],E=/^\s*packages\s*:\s*$/,q=/^(\s*)-\s/,v=(c,i)=>{const r=c.includes(`\r
2
2
  `)?`\r
3
3
  `:`
4
- `,e=c.split(/\r?\n/),a=e.findIndex(t=>q.test(t));if(a===-1)return;let s=" ";for(let t=a+1;t<e.length;t++){const o=E.exec(e[t]);if(o){s=o[1];break}if(e[t].trim().length>0)break}return e.splice(a+1,0,`${s}- "${i}"`),e.join(r)},P=(c,i,r)=>{const e=g(c,"package.json");let a;try{a=A(e)}catch{return!1}const{workspaces:s}=a;return Array.isArray(s)?s.includes(i)?!1:(r||l(e,{...a,workspaces:[...s,i]},{detectIndent:!0}),!0):s&&typeof s=="object"&&Array.isArray(s.packages)?s.packages.includes(i)?!1:(r||l(e,{...a,workspaces:{...s,packages:[...s.packages,i]}},{detectIndent:!0}),!0):!1},I=({dryRun:c=!1,prefix:i,workspaceRoot:r})=>{const e=u(i),a=b(r);if(!a)return{status:"no-config"};if(R(r,a).some(s=>u(s)===e))return{status:"already-covered"};for(const s of j){const t=g(r,s);if(!y(t))continue;const o=v(k(t),e);if(o!==void 0)return c||w(t,o),{entry:e,file:s,status:"added"}}return P(r,e,c)?{entry:e,file:"package.json",status:"added"}:{status:"no-config"}},H=async({argument:c,fs:i,logger:r,options:e,process:a,workspaceRoot:s})=>{const t=c[0];if(!t)throw new Error("Missing <source>. Pass a git repository URL or local path to import.");if(!e.prefix)throw new Error("Missing --prefix <dir>. Pass the target directory in the monorepo (e.g. packages/tooling/foo).");const o=s??a.cwd,n=u(e.prefix),f=e.ref??"HEAD";if($(o),await(async p=>{try{return await i.access(p),!0}catch{return!1}})(g(o,n)))throw new Error(`Target "${n}" already exists. git subtree add requires a non-existent prefix.`);if(e.dryRun){const p=e.squash?" --squash":"",m=e.message?` -m "${e.message}"`:"";r.info("Dry run — no changes will be made. Planned steps:"),r.info(` git subtree add --prefix=${n}${p}${m} ${t} ${f}`),e.noRegister||r.info(` register ${n} into the workspace config (skipped if already covered by an existing glob)`);return}if(h(o),r.info(`Importing ${d(t)}@${f} → ${n} ...`),x({cwd:o,message:e.message,prefix:n,ref:f,repo:t,squash:e.squash}),r.info(`✓ Imported ${t} into ${n} (history preserved).`),e.noRegister)r.info(d(`Skipped workspace registration (--no-register). Add ${n} to your workspace config manually.`));else{const p=I({prefix:n,workspaceRoot:o});p.status==="already-covered"?r.info(`✓ ${n} is already covered by an existing workspace glob.`):p.status==="added"?r.info(`✓ Registered ${p.entry} in ${p.file}.`):r.warn(`Could not auto-register ${n}: no workspace config found. Add it to pnpm-workspace.yaml or package.json#workspaces manually.`)}r.info(d("Note: project.json / nx tags are not generated. Add them if your tooling needs them."))};export{H as default};
4
+ `,e=c.split(/\r?\n/),a=e.findIndex(t=>E.test(t));if(a===-1)return;let s=" ";for(let t=a+1;t<e.length;t++){const o=q.exec(e[t]);if(o){s=o[1];break}if(e[t].trim().length>0)break}return e.splice(a+1,0,`${s}- "${i}"`),e.join(r)},P=(c,i,r)=>{const e=g(c,"package.json");let a;try{a=A(e)}catch{return!1}const{workspaces:s}=a;return Array.isArray(s)?s.includes(i)?!1:(r||l(e,{...a,workspaces:[...s,i]},{detectIndent:!0}),!0):s&&typeof s=="object"&&Array.isArray(s.packages)?s.packages.includes(i)?!1:(r||l(e,{...a,workspaces:{...s,packages:[...s.packages,i]}},{detectIndent:!0}),!0):!1},I=({dryRun:c=!1,prefix:i,workspaceRoot:r})=>{const e=u(i),a=b(r);if(!a)return{status:"no-config"};if(R(r,a).some(s=>u(s)===e))return{status:"already-covered"};for(const s of j){const t=g(r,s);if(!y(t))continue;const o=v(k(t),e);if(o!==void 0)return c||w(t,o),{entry:e,file:s,status:"added"}}return P(r,e,c)?{entry:e,file:"package.json",status:"added"}:{status:"no-config"}},H=async({argument:c,fs:i,logger:r,options:e,process:a,workspaceRoot:s})=>{const t=c[0];if(!t)throw new Error("Missing <source>. Pass a git repository URL or local path to import.");if(!e.prefix)throw new Error("Missing --prefix <dir>. Pass the target directory in the monorepo (e.g. packages/tooling/foo).");const o=s??a.cwd,n=u(e.prefix),f=e.ref??"HEAD";if($(o),await(async p=>{try{return await i.access(p),!0}catch{return!1}})(g(o,n)))throw new Error(`Target "${n}" already exists. git subtree add requires a non-existent prefix.`);if(e.dryRun){const p=e.squash?" --squash":"",m=e.message?` -m "${e.message}"`:"";r.info("Dry run — no changes will be made. Planned steps:"),r.info(` git subtree add --prefix=${n}${p}${m} ${t} ${f}`),e.noRegister||r.info(` register ${n} into the workspace config (skipped if already covered by an existing glob)`);return}if(h(o),r.info(`Importing ${d(t)}@${f} → ${n} ...`),x({cwd:o,message:e.message,prefix:n,ref:f,repo:t,squash:e.squash}),r.info(`✓ Imported ${t} into ${n} (history preserved).`),e.noRegister)r.info(d(`Skipped workspace registration (--no-register). Add ${n} to your workspace config manually.`));else{const p=I({prefix:n,workspaceRoot:o});p.status==="already-covered"?r.info(`✓ ${n} is already covered by an existing workspace glob.`):p.status==="added"?r.info(`✓ Registered ${p.entry} in ${p.file}.`):r.warn(`Could not auto-register ${n}: no workspace config found. Add it to pnpm-workspace.yaml or package.json#workspaces manually.`)}r.info(d("Note: project.json / nx tags are not generated. Add them if your tooling needs them."))};export{H as default};
@@ -1 +1 @@
1
- import{y as b}from"../packem_shared/index-DND6ptxQ.js";import{v}from"./catalog.js";import{f as $,a as x}from"../packem_shared/selectors-CtxnIT4X.js";import E from"./index.js";import{h as J}from"./cli-main.js";const P=(e,n)=>{for(const g of n)if(E(g,e))return!0;return!1},C=(e,n={})=>{const{depTypes:g,excludePatterns:f,externalOnly:y,includePatterns:u,internalOnly:h}=n;if(h&&y)return[];const l=g&&g.length>0?new Set(g):void 0,k=u&&u.length>0?u:void 0,T=f&&f.length>0?f:void 0,w=[];for(const m of e)h&&!m.isInternal||y&&m.isInternal||l&&!l.has(m.depType)||k&&(!m.packageName||!P(m.packageName,k))||T&&m.packageName&&P(m.packageName,T)||w.push(m);return w},q=new Set(["json","ndjson","table"]),B=e=>{if(e===void 0)return"table";const n=e.toLowerCase();if(!q.has(n))throw new Error(`--format must be one of: table, json, ndjson (got "${e}")`);return n},S=(e,n)=>({depName:e.depName,depType:e.depType,isInternal:e.isInternal,packageDir:e.packageDir,packageJsonPath:b(n,e.packageJsonPath),packageName:e.packageName,specifier:e.specifier}),D=new Set(["dependencies","devDependencies","optionalDependencies","overrides","peerDependencies","pnpm.overrides","resolutions"]),L=e=>{if(!e||e.length===0)return;const n=[],g=[];for(const f of e)for(const y of f.split(",")){const u=y.trim();u&&(D.has(u)?n.push(u):g.push(u))}if(g.length>0)throw new Error(`Unknown --dep-type value(s): ${g.join(", ")}. Valid: ${[...D].join(", ")}`);return n.length>0?n:void 0},W=async({logger:e,options:n,visConfig:g,workspaceRoot:f})=>{if(!f)throw new Error("Could not determine workspace root.");const y=B(n.format);if(n.deps===!0){if(n.internalOnly&&n.externalOnly)throw new Error("--internal-only and --external-only are mutually exclusive");const c=L(n.depType),i=J(f);let r=C(i,{depTypes:c,excludePatterns:n.exclude,externalOnly:n.externalOnly,includePatterns:n.include,internalOnly:n.internalOnly});if(n.query||n.tag&&n.tag.length>0){const{workspace:t}=v(f,g),p=$(Object.keys(t.projects),t,n.query),N=new Set(x(p,t,n.tag));r=r.filter(O=>O.packageName!==void 0&&N.has(O.packageName))}const d=[...r].sort((t,p)=>{const N=`${t.packageName??t.packageDir} ${t.depType} ${t.depName}`,O=`${p.packageName??p.packageDir} ${p.depType} ${p.depName}`;return N.localeCompare(O)});if(y==="ndjson"){for(const t of d)e.info(JSON.stringify(S(t,f)));return}if(y==="json"){const t=d.map(p=>S(p,f));e.info(JSON.stringify(t,null,n.pretty===!0?2:void 0));return}if(d.length===0){e.info("No matching dep-instances.");return}const a=["Package","Block","Dep","Specifier","Internal","Path"],o=d.map(t=>[t.packageName??t.packageDir,t.depType,t.depName,t.specifier,t.isInternal?"yes":"no",b(f,t.packageJsonPath)]),s=a.map((t,p)=>Math.max(t.length,...o.map(N=>(N[p]??"").length))),j=(t,p)=>t.padEnd(p);e.info(a.map((t,p)=>j(t,s[p])).join(" ")),e.info(s.map(t=>"─".repeat(t)).join("──"));for(const t of o)e.info(t.map((p,N)=>j(p,s[N])).join(" "));e.info(""),e.info(`${String(d.length)} dep-instance(s)`);return}if(y==="ndjson")throw new Error("--format=ndjson is only supported with --deps");const{projectOptions:u,workspace:h}=v(f,g);let l=Object.keys(h.projects).sort();if(n.query&&(l=$(l,h,n.query)),l=x(l,h,n.tag),l.length===0){e.info("No projects found.");return}const k=n.inferred===!0,T=n.targets===!0||k;if(y==="json"){const c=l.map(i=>{const r=h.projects[i],d=u.get(i)??{},a=Object.entries(r.targets??{}).map(([o])=>{const s=d[o],j=s?.inferred===!0;return{aliases:s?.aliases??[],command:s?.command,description:s?.description,...j?{inferred:!0}:{},name:o,type:s?.type}}).filter(o=>!k||o.inferred===!0);return{language:r.language,layer:r.layer,name:i,root:r.root,stack:r.stack,tags:r.tags??[],targets:a,type:r.projectType??"library"}});e.info(JSON.stringify(c,null,2));return}const w=(c,i)=>{const r=c.map((a,o)=>{let s=0;for(const j of i)s=Math.max(s,(j[o]??"").length);return Math.max(a.length,s)}),d=(a,o)=>a.padEnd(o);e.info(c.map((a,o)=>d(a,r[o])).join(" ")),e.info(r.map(a=>"─".repeat(a)).join("──"));for(const a of i)e.info(a.map((o,s)=>d(o,r[s])).join(" "))};if(T){const c=[];for(const i of l){const r=h.projects[i],d=u.get(i)??{};for(const a of Object.keys(r.targets??{}).sort()){const o=d[a],s=o?.inferred===!0;if(k&&!s)continue;const j=r.targets?.[a],t=j?.cache===!1?"no":j?.cache===!0?"yes":"default";c.push([i,a,o?.type??"—",t,s?"yes":"no",o?.description??"—"])}}if(c.length===0){e.info(k?"No inferred targets found.":"No targets found.");return}w(["Project","Target","Type","Cache","Inferred","Description"],c),e.info(""),e.info(`${String(c.length)} target(s) across ${String(l.length)} project(s)`);return}const m=["Project","Type","Layer","Tags","Targets"],I=l.map(c=>{const i=h.projects[c],r=Object.keys(i.targets??{});return[c,i.projectType??"library",i.layer??"—",(i.tags??[]).join(", ")||"—",r.length>4?`${r.slice(0,4).join(", ")}… (${String(r.length)})`:r.join(", ")||"—"]});w(m,I),e.info(""),e.info(`${String(l.length)} project(s)`)};export{W as default};
1
+ import{b as D}from"../packem_shared/index-uBVnF4ji.js";import{v}from"./catalog.js";import{f as $,a as x}from"../packem_shared/selectors-Ce_6UAoY.js";import E from"./index.js";import{h as J}from"./cli-main.js";const P=(e,n)=>{for(const g of n)if(E(g,e))return!0;return!1},C=(e,n={})=>{const{depTypes:g,excludePatterns:f,externalOnly:y,includePatterns:u,internalOnly:h}=n;if(h&&y)return[];const l=g&&g.length>0?new Set(g):void 0,k=u&&u.length>0?u:void 0,T=f&&f.length>0?f:void 0,w=[];for(const m of e)h&&!m.isInternal||y&&m.isInternal||l&&!l.has(m.depType)||k&&(!m.packageName||!P(m.packageName,k))||T&&m.packageName&&P(m.packageName,T)||w.push(m);return w},q=new Set(["json","ndjson","table"]),B=e=>{if(e===void 0)return"table";const n=e.toLowerCase();if(!q.has(n))throw new Error(`--format must be one of: table, json, ndjson (got "${e}")`);return n},S=(e,n)=>({depName:e.depName,depType:e.depType,isInternal:e.isInternal,packageDir:e.packageDir,packageJsonPath:D(n,e.packageJsonPath),packageName:e.packageName,specifier:e.specifier}),b=new Set(["dependencies","devDependencies","optionalDependencies","overrides","peerDependencies","pnpm.overrides","resolutions"]),L=e=>{if(!e||e.length===0)return;const n=[],g=[];for(const f of e)for(const y of f.split(",")){const u=y.trim();u&&(b.has(u)?n.push(u):g.push(u))}if(g.length>0)throw new Error(`Unknown --dep-type value(s): ${g.join(", ")}. Valid: ${[...b].join(", ")}`);return n.length>0?n:void 0},W=async({logger:e,options:n,visConfig:g,workspaceRoot:f})=>{if(!f)throw new Error("Could not determine workspace root.");const y=B(n.format);if(n.deps===!0){if(n.internalOnly&&n.externalOnly)throw new Error("--internal-only and --external-only are mutually exclusive");const c=L(n.depType),i=J(f);let r=C(i,{depTypes:c,excludePatterns:n.exclude,externalOnly:n.externalOnly,includePatterns:n.include,internalOnly:n.internalOnly});if(n.query||n.tag&&n.tag.length>0){const{workspace:t}=v(f,g),p=$(Object.keys(t.projects),t,n.query),N=new Set(x(p,t,n.tag));r=r.filter(O=>O.packageName!==void 0&&N.has(O.packageName))}const d=[...r].sort((t,p)=>{const N=`${t.packageName??t.packageDir} ${t.depType} ${t.depName}`,O=`${p.packageName??p.packageDir} ${p.depType} ${p.depName}`;return N.localeCompare(O)});if(y==="ndjson"){for(const t of d)e.info(JSON.stringify(S(t,f)));return}if(y==="json"){const t=d.map(p=>S(p,f));e.info(JSON.stringify(t,null,n.pretty===!0?2:void 0));return}if(d.length===0){e.info("No matching dep-instances.");return}const a=["Package","Block","Dep","Specifier","Internal","Path"],o=d.map(t=>[t.packageName??t.packageDir,t.depType,t.depName,t.specifier,t.isInternal?"yes":"no",D(f,t.packageJsonPath)]),s=a.map((t,p)=>Math.max(t.length,...o.map(N=>(N[p]??"").length))),j=(t,p)=>t.padEnd(p);e.info(a.map((t,p)=>j(t,s[p])).join(" ")),e.info(s.map(t=>"─".repeat(t)).join("──"));for(const t of o)e.info(t.map((p,N)=>j(p,s[N])).join(" "));e.info(""),e.info(`${String(d.length)} dep-instance(s)`);return}if(y==="ndjson")throw new Error("--format=ndjson is only supported with --deps");const{projectOptions:u,workspace:h}=v(f,g);let l=Object.keys(h.projects).sort();if(n.query&&(l=$(l,h,n.query)),l=x(l,h,n.tag),l.length===0){e.info("No projects found.");return}const k=n.inferred===!0,T=n.targets===!0||k;if(y==="json"){const c=l.map(i=>{const r=h.projects[i],d=u.get(i)??{},a=Object.entries(r.targets??{}).map(([o])=>{const s=d[o],j=s?.inferred===!0;return{aliases:s?.aliases??[],command:s?.command,description:s?.description,...j?{inferred:!0}:{},name:o,type:s?.type}}).filter(o=>!k||o.inferred===!0);return{language:r.language,layer:r.layer,name:i,root:r.root,stack:r.stack,tags:r.tags??[],targets:a,type:r.projectType??"library"}});e.info(JSON.stringify(c,null,2));return}const w=(c,i)=>{const r=c.map((a,o)=>{let s=0;for(const j of i)s=Math.max(s,(j[o]??"").length);return Math.max(a.length,s)}),d=(a,o)=>a.padEnd(o);e.info(c.map((a,o)=>d(a,r[o])).join(" ")),e.info(r.map(a=>"─".repeat(a)).join("──"));for(const a of i)e.info(a.map((o,s)=>d(o,r[s])).join(" "))};if(T){const c=[];for(const i of l){const r=h.projects[i],d=u.get(i)??{};for(const a of Object.keys(r.targets??{}).sort()){const o=d[a],s=o?.inferred===!0;if(k&&!s)continue;const j=r.targets?.[a],t=j?.cache===!1?"no":j?.cache===!0?"yes":"default";c.push([i,a,o?.type??"—",t,s?"yes":"no",o?.description??"—"])}}if(c.length===0){e.info(k?"No inferred targets found.":"No targets found.");return}w(["Project","Target","Type","Cache","Inferred","Description"],c),e.info(""),e.info(`${String(c.length)} target(s) across ${String(l.length)} project(s)`);return}const m=["Project","Type","Layer","Tags","Targets"],I=l.map(c=>{const i=h.projects[c],r=Object.keys(i.targets??{});return[c,i.projectType??"library",i.layer??"—",(i.tags??[]).join(", ")||"—",r.length>4?`${r.slice(0,4).join(", ")}… (${String(r.length)})`:r.join(", ")||"—"]});w(m,I),e.info(""),e.info(`${String(l.length)} project(s)`)};export{W as default};
@@ -1,5 +1,5 @@
1
- import{createRequire as z}from"node:module";import{m as M,o as G,q as F,s as p,t as P,u as Y,Y as L,x as H,y as D,z as K,C as Q,D as U,E as X,L as Z,F as tt,H as ot,G as I,$ as et}from"./cli-main.js";import{l as k,m as f,z as j,u as it,q as O,I as rt,J as at}from"../packem_shared/index-DND6ptxQ.js";import"../packem_shared/public-api-WqUCiyIe.js";import{loadVisConfig as ct}from"./CONFIG_FILES.js";import{v as ft}from"../packem_shared/verify-B0ztxKMa.js";let J;const W=t=>(J??=z(import.meta.url))(t),$=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,V=t=>{if(typeof $<"u"&&$.versions&&$.versions.node){const[o,s]=$.versions.node.split(".").map(Number);if(o>22||o===22&&s>=3||o===20&&s>=16)return $.getBuiltinModule(t)}return W(t)},{readdirSync:st,statSync:nt}=V("node:fs"),{stdin:T,stdout:ut}=$,{createInterface:pt}=V("node:readline/promises"),w="__global__",R=t=>[...new Set(t)].sort((o,s)=>o.localeCompare(s)),gt=t=>`{${Object.keys(t).sort().map(o=>`${o}=${JSON.stringify(t[o])}`).join(",")}}`,y=t=>{if(!Array.isArray(t))return[];const o=[];for(const s of t)typeof s=="string"?o.push(s):s&&typeof s=="object"&&o.push(gt(s));return R(o)},h=t=>({cache:void 0,dependsOn:[],env:[],id:t,inputs:[],outputs:[]}),m=(t,o,s)=>s?`^${o}`:t&&t!=="self"&&t!=="~"?`${t}#${o}`:o,dt=(t,o)=>{const s=t.trim();if(o==="moon"){if(s.startsWith("^:"))return m(void 0,s.slice(2),!0);if(s.startsWith("~:"))return m(void 0,s.slice(2),!1);if(s.includes(":")){const[n,e]=s.split(":");return m(n,e??"",!1)}return s}if(s.startsWith("^"))return m(void 0,s.slice(1),!0);if(s.includes("#")){const[n,e]=s.split("#");return m(n,e??"",!1)}return s},C=(t,o)=>{if(!Array.isArray(t))return[];const s=[];for(const n of t){if(typeof n=="string"){s.push(dt(n,o));continue}if(!n||typeof n!="object")continue;const e=n,{target:i}=e;if(!i)continue;if(e.dependencies===!0){s.push(m(void 0,i,!0));continue}if(e.projects===void 0){s.push(m(void 0,i,!1));continue}const r=Array.isArray(e.projects)?e.projects:[e.projects];for(const c of r)s.push(c==="^"?m(void 0,i,!0):m(c,i,!1))}return R(s)},E=t=>{if(k(t))try{return JSON.parse(j(t))}catch{return}},lt=t=>{const o=new Map,s=E(f(t,"turbo.json"));if(!s)return o;const n=s.tasks??s.pipeline??{};for(const[i,r]of Object.entries(n)){const c=i.includes("#")?i:`*#${i}`,a=h(c);a.dependsOn=C(r.dependsOn,"turbo"),a.inputs=y(r.inputs),a.outputs=y(r.outputs),a.env=R([...r.env??[],...r.passThroughEnv??[]]),a.cache=r.cache===!1?!1:void 0,o.set(c,a)}const e=h(w);return e.inputs=y(s.globalDependencies),e.env=R([...s.globalEnv??[],...s.globalPassThroughEnv??[]]),(e.inputs.length>0||e.env.length>0)&&o.set(w,e),o},vt=new Set([".git",".nx",".turbo",".vis","build","coverage","dist","node_modules"]),S=(t,o,s=8)=>{const n=[],e=(i,r)=>{if(r>s)return;let c;try{c=st(i)}catch{return}for(const a of c.toSorted()){if(a===o){n.push(f(i,a));continue}if(a.startsWith(".")&&a!==".moon"||vt.has(a))continue;const u=f(i,a);try{nt(u).isDirectory()&&e(u,r+1)}catch{}}};return e(t,0),n},_=(t,o)=>{t.dependsOn=C(o.dependsOn,"nx"),t.inputs=y(o.inputs),t.outputs=y(o.outputs),t.cache=typeof o.cache=="boolean"?o.cache:void 0},yt=t=>{const o=new Map,s=E(f(t,"nx.json"));for(const[n,e]of Object.entries(s?.targetDefaults??{})){const i=`*#${n}`,r=h(i);_(r,e),o.set(i,r)}for(const n of S(t,"project.json")){const e=E(n);if(!(!e?.name||!e.targets))for(const[i,r]of Object.entries(e.targets)){const c=`${e.name}#${i}`,a=h(c);_(a,r),o.set(c,a)}}return o},N=(t,o)=>{t.dependsOn=C(o.deps,"moon"),t.inputs=y(o.inputs),t.outputs=y(o.outputs),t.cache=typeof o.options?.cache=="boolean"?o.options.cache:void 0},A=t=>{if(k(t))try{return it(t)}catch{return}},mt=t=>{const o=new Map,s=f(t,".moon"),n=[f(s,"tasks.yml"),f(s,"tasks.yaml")];for(const e of n){const i=A(e);if(i){for(const[r,c]of Object.entries(i.tasks??{})){const a=`*#${r}`,u=h(a);N(u,c),o.set(a,u)}if(i.implicitInputs&&i.implicitInputs.length>0){const r=h(w);r.inputs=y(i.implicitInputs),o.set(w,r)}}}for(const e of[...S(t,"moon.yml"),...S(t,"moon.yaml")]){const i=A(e);if(!i?.tasks)continue;const r=e.split(/[/\\]/).at(-2)??"*";for(const[c,a]of Object.entries(i.tasks)){const u=`${r}#${c}`,v=h(u);N(v,a),o.set(u,v)}}return o},ht=(t,o)=>{t.dependsOn=C(o.dependsOn,"vis"),t.inputs=y(o.inputs),t.outputs=y(o.outputs),t.env=R([...o.env??[],...o.passThroughEnv??[],...o.options?.passThroughEnv??[]]),t.cache=o.cache===!1?!1:typeof o.cache=="boolean"?o.cache:void 0},kt=async t=>{const o=new Map,s=await ct(t);for(const[i,r]of Object.entries(s.tasks??{})){const c=`*#${i}`,a=h(c);ht(a,r??{}),o.set(c,a)}const n=s.taskRunner??{},e=h(w);return e.inputs=y(n.globalInputs),e.env=R([...n.globalEnv??[],...n.globalPassThroughEnv??[]]),(e.inputs.length>0||e.env.length>0)&&o.set(w,e),o},wt=(t,o)=>{switch(o){case"moon":return mt(t);case"nx":return yt(t);default:return lt(t)}},Rt=t=>{const o=[];return k(f(t,"turbo.json"))&&o.push("turbo"),k(f(t,"nx.json"))&&o.push("nx"),(k(f(t,".moon","tasks.yml"))||k(f(t,".moon","tasks.yaml")))&&o.push("moon"),o.length===1?o[0]:void 0},x=(t,o,s,n,e)=>{const i=n.filter(a=>!e.includes(a)),r=e.filter(a=>!n.includes(a));if(i.length===0&&r.length===0)return;const c=[];i.length>0&&c.push(`dropped [${i.join(", ")}]`),r.length>0&&c.push(`added [${r.join(", ")}]`),t.push({axis:s,detail:`${s} diverged: ${c.join("; ")}`,node:o,severity:i.length>0?"error":"warning"})},$t=(t,o,s)=>{const n=[],e=R([...t.keys(),...o.keys()]);for(const i of e){const r=t.get(i),c=o.get(i);if(r&&!c){const a=s==="turbo"&&i.includes("#")&&!i.startsWith("*#")&&i!==w;n.push({axis:"target-set",detail:a?`source target \`${i}\` was skipped by design (turbo project#task is migrated into per-project project.json — move it there and re-verify)`:`source target \`${i}\` has no equivalent in the migrated vis config`,node:i,severity:a?"warning":"error"});continue}if(!r&&c){n.push({axis:"target-set",detail:`migrated vis config defines \`${i}\` with no source equivalent (extra target — not a regression, but review)`,node:i,severity:"warning"});continue}!r||!c||(x(n,i,"dependsOn",r.dependsOn,c.dependsOn),x(n,i,"inputs",r.inputs,c.inputs),x(n,i,"outputs",r.outputs,c.outputs),x(n,i,"env",r.env,c.env),r.cache!==void 0&&c.cache!==void 0&&r.cache!==c.cache&&n.push({axis:"cache",detail:`cache flag diverged: source=${String(r.cache)} vis=${String(c.cache)} (changes what invalidates the cache)`,node:i,severity:"error"}))}return n.sort((i,r)=>i.node.localeCompare(r.node)||i.axis.localeCompare(r.axis)),{findings:n,source:s,sourceNodeCount:t.size,visNodeCount:o.size}},bt=new Set(["json","ndjson","table"]),xt=t=>({equivalent:t.findings.every(o=>o.severity!=="error"),findings:t.findings,source:t.source,sourceNodeCount:t.sourceNodeCount,visNodeCount:t.visNodeCount}),Ct=(t,o,s)=>{if(o==="json"){process.stdout.write(`${JSON.stringify(xt(t),void 0,2)}
1
+ import{createRequire as z}from"node:module";import{m as M,o as F,q as J,s as p,t as P,u as Y,Y as L,x as H,y as D,z as K,C as Q,D as U,E as X,L as Z,F as tt,H as ot,G as I,$ as et}from"./cli-main.js";import{l as w,w as f,z as j,u as it,j as O,c as rt,K as at}from"../packem_shared/index-uBVnF4ji.js";import"../packem_shared/public-api-WqUCiyIe.js";import{loadVisConfig as ct}from"./CONFIG_FILES.js";import{v as ft}from"../packem_shared/verify-Dve9PQj3.js";let W;const G=t=>(W??=z(import.meta.url))(t),$=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,V=t=>{if(typeof $<"u"&&$.versions&&$.versions.node){const[o,s]=$.versions.node.split(".").map(Number);if(o>22||o===22&&s>=3||o===20&&s>=16)return $.getBuiltinModule(t)}return G(t)},{readdirSync:st,statSync:nt}=V("node:fs"),{stdin:T,stdout:ut}=$,{createInterface:pt}=V("node:readline/promises"),k="__global__",R=t=>[...new Set(t)].sort((o,s)=>o.localeCompare(s)),gt=t=>`{${Object.keys(t).sort().map(o=>`${o}=${JSON.stringify(t[o])}`).join(",")}}`,y=t=>{if(!Array.isArray(t))return[];const o=[];for(const s of t)typeof s=="string"?o.push(s):s&&typeof s=="object"&&o.push(gt(s));return R(o)},m=t=>({cache:void 0,dependsOn:[],env:[],id:t,inputs:[],outputs:[]}),h=(t,o,s)=>s?`^${o}`:t&&t!=="self"&&t!=="~"?`${t}#${o}`:o,dt=(t,o)=>{const s=t.trim();if(o==="moon"){if(s.startsWith("^:"))return h(void 0,s.slice(2),!0);if(s.startsWith("~:"))return h(void 0,s.slice(2),!1);if(s.includes(":")){const[n,e]=s.split(":");return h(n,e??"",!1)}return s}if(s.startsWith("^"))return h(void 0,s.slice(1),!0);if(s.includes("#")){const[n,e]=s.split("#");return h(n,e??"",!1)}return s},C=(t,o)=>{if(!Array.isArray(t))return[];const s=[];for(const n of t){if(typeof n=="string"){s.push(dt(n,o));continue}if(!n||typeof n!="object")continue;const e=n,{target:i}=e;if(!i)continue;if(e.dependencies===!0){s.push(h(void 0,i,!0));continue}if(e.projects===void 0){s.push(h(void 0,i,!1));continue}const r=Array.isArray(e.projects)?e.projects:[e.projects];for(const c of r)s.push(c==="^"?h(void 0,i,!0):h(c,i,!1))}return R(s)},E=t=>{if(w(t))try{return JSON.parse(j(t))}catch{return}},lt=t=>{const o=new Map,s=E(f(t,"turbo.json"));if(!s)return o;const n=s.tasks??s.pipeline??{};for(const[i,r]of Object.entries(n)){const c=i.includes("#")?i:`*#${i}`,a=m(c);a.dependsOn=C(r.dependsOn,"turbo"),a.inputs=y(r.inputs),a.outputs=y(r.outputs),a.env=R([...r.env??[],...r.passThroughEnv??[]]),a.cache=r.cache===!1?!1:void 0,o.set(c,a)}const e=m(k);return e.inputs=y(s.globalDependencies),e.env=R([...s.globalEnv??[],...s.globalPassThroughEnv??[]]),(e.inputs.length>0||e.env.length>0)&&o.set(k,e),o},vt=new Set([".git",".nx",".turbo",".vis","build","coverage","dist","node_modules"]),S=(t,o,s=8)=>{const n=[],e=(i,r)=>{if(r>s)return;let c;try{c=st(i)}catch{return}for(const a of c.toSorted()){if(a===o){n.push(f(i,a));continue}if(a.startsWith(".")&&a!==".moon"||vt.has(a))continue;const u=f(i,a);try{nt(u).isDirectory()&&e(u,r+1)}catch{}}};return e(t,0),n},_=(t,o)=>{t.dependsOn=C(o.dependsOn,"nx"),t.inputs=y(o.inputs),t.outputs=y(o.outputs),t.cache=typeof o.cache=="boolean"?o.cache:void 0},yt=t=>{const o=new Map,s=E(f(t,"nx.json"));for(const[n,e]of Object.entries(s?.targetDefaults??{})){const i=`*#${n}`,r=m(i);_(r,e),o.set(i,r)}for(const n of S(t,"project.json")){const e=E(n);if(!(!e?.name||!e.targets))for(const[i,r]of Object.entries(e.targets)){const c=`${e.name}#${i}`,a=m(c);_(a,r),o.set(c,a)}}return o},N=(t,o)=>{t.dependsOn=C(o.deps,"moon"),t.inputs=y(o.inputs),t.outputs=y(o.outputs),t.cache=typeof o.options?.cache=="boolean"?o.options.cache:void 0},A=t=>{if(w(t))try{return it(t)}catch{return}},ht=t=>{const o=new Map,s=f(t,".moon"),n=[f(s,"tasks.yml"),f(s,"tasks.yaml")];for(const e of n){const i=A(e);if(i){for(const[r,c]of Object.entries(i.tasks??{})){const a=`*#${r}`,u=m(a);N(u,c),o.set(a,u)}if(i.implicitInputs&&i.implicitInputs.length>0){const r=m(k);r.inputs=y(i.implicitInputs),o.set(k,r)}}}for(const e of[...S(t,"moon.yml"),...S(t,"moon.yaml")]){const i=A(e);if(!i?.tasks)continue;const r=e.split(/[/\\]/).at(-2)??"*";for(const[c,a]of Object.entries(i.tasks)){const u=`${r}#${c}`,v=m(u);N(v,a),o.set(u,v)}}return o},mt=(t,o)=>{t.dependsOn=C(o.dependsOn,"vis"),t.inputs=y(o.inputs),t.outputs=y(o.outputs),t.env=R([...o.env??[],...o.passThroughEnv??[],...o.options?.passThroughEnv??[]]),t.cache=o.cache===!1?!1:typeof o.cache=="boolean"?o.cache:void 0},wt=async t=>{const o=new Map,s=await ct(t);for(const[i,r]of Object.entries(s.tasks??{})){const c=`*#${i}`,a=m(c);mt(a,r??{}),o.set(c,a)}const n=s.taskRunner??{},e=m(k);return e.inputs=y(n.globalInputs),e.env=R([...n.globalEnv??[],...n.globalPassThroughEnv??[]]),(e.inputs.length>0||e.env.length>0)&&o.set(k,e),o},kt=(t,o)=>{switch(o){case"moon":return ht(t);case"nx":return yt(t);default:return lt(t)}},Rt=t=>{const o=[];return w(f(t,"turbo.json"))&&o.push("turbo"),w(f(t,"nx.json"))&&o.push("nx"),(w(f(t,".moon","tasks.yml"))||w(f(t,".moon","tasks.yaml")))&&o.push("moon"),o.length===1?o[0]:void 0},x=(t,o,s,n,e)=>{const i=n.filter(a=>!e.includes(a)),r=e.filter(a=>!n.includes(a));if(i.length===0&&r.length===0)return;const c=[];i.length>0&&c.push(`dropped [${i.join(", ")}]`),r.length>0&&c.push(`added [${r.join(", ")}]`),t.push({axis:s,detail:`${s} diverged: ${c.join("; ")}`,node:o,severity:i.length>0?"error":"warning"})},$t=(t,o,s)=>{const n=[],e=R([...t.keys(),...o.keys()]);for(const i of e){const r=t.get(i),c=o.get(i);if(r&&!c){const a=s==="turbo"&&i.includes("#")&&!i.startsWith("*#")&&i!==k;n.push({axis:"target-set",detail:a?`source target \`${i}\` was skipped by design (turbo project#task is migrated into per-project project.json — move it there and re-verify)`:`source target \`${i}\` has no equivalent in the migrated vis config`,node:i,severity:a?"warning":"error"});continue}if(!r&&c){n.push({axis:"target-set",detail:`migrated vis config defines \`${i}\` with no source equivalent (extra target — not a regression, but review)`,node:i,severity:"warning"});continue}!r||!c||(x(n,i,"dependsOn",r.dependsOn,c.dependsOn),x(n,i,"inputs",r.inputs,c.inputs),x(n,i,"outputs",r.outputs,c.outputs),x(n,i,"env",r.env,c.env),r.cache!==void 0&&c.cache!==void 0&&r.cache!==c.cache&&n.push({axis:"cache",detail:`cache flag diverged: source=${String(r.cache)} vis=${String(c.cache)} (changes what invalidates the cache)`,node:i,severity:"error"}))}return n.sort((i,r)=>i.node.localeCompare(r.node)||i.axis.localeCompare(r.axis)),{findings:n,source:s,sourceNodeCount:t.size,visNodeCount:o.size}},bt=new Set(["json","ndjson","table"]),xt=t=>({equivalent:t.findings.every(o=>o.severity!=="error"),findings:t.findings,source:t.source,sourceNodeCount:t.sourceNodeCount,visNodeCount:t.visNodeCount}),Ct=(t,o,s)=>{if(o==="json"){process.stdout.write(`${JSON.stringify(xt(t),void 0,2)}
2
2
  `);return}if(o==="ndjson"){for(const n of t.findings)process.stdout.write(`${JSON.stringify(n)}
3
- `);return}if(s.info(`Migration equivalence: ${t.source} → vis`),s.info(` source nodes: ${String(t.sourceNodeCount)} vis nodes: ${String(t.visNodeCount)}`),t.findings.length===0){s.info(" ✓ task graph + cache-key surface preserved (no divergence).");return}for(const n of t.findings){const e=` [${n.severity}] ${n.node} (${n.axis}) — ${n.detail}`;n.severity==="error"?s.warn(e):s.info(e)}},jt=(t,o)=>t.findings.some(s=>o==="warning"?!0:s.severity==="error")?1:0,B=async t=>{if(!T.isTTY)return!0;const o=pt({input:T,output:ut});try{const s=(await o.question(`${t} [Y/n] `)).trim().toLowerCase();return s===""||s==="y"||s==="yes"}finally{o.close()}},Et=[{description:"VisConfig.targetDefaults → VisConfig.tasks",next:"tasks",previous:"targetDefaults"},{description:"VisConfig.taskDefaults → VisConfig.scopedTasks",next:"scopedTasks",previous:"taskDefaults"},{description:"VisConfig.taskRunnerOptions → VisConfig.taskRunner",next:"taskRunner",previous:"taskRunnerOptions"},{description:"ScopedTasksBlock.scope → ScopedTasksBlock.match",next:"match",previous:"scope"},{description:"ScopedTasksBlock.targets → ScopedTasksBlock.tasks",next:"tasks",previous:"targets"}],St=[{description:"VisTaskConfig.targets → VisTaskConfig.tasks",next:"tasks",previous:"targets"}],Mt=t=>new RegExp(String.raw`(^|[\s,{(\[])(["']?)${t}\2(\s*:)`,"gmu"),Ot=(t,o)=>{let s=t;const n=[];for(const e of o){const i=Mt(e.previous);i.test(s)&&(i.lastIndex=0,s=s.replace(i,(r,c,a,u)=>`${c}${a}${e.next}${a}${u}`),n.push(e))}return{applied:n,output:s}},q=(t,o)=>Ot(t,o),Tt=["vis.config.ts","vis.config.mts","vis.config.cts","vis.config.js","vis.config.mjs","vis.config.cjs"],_t=new Set(["vis.task.cjs","vis.task.cts","vis.task.js","vis.task.mjs","vis.task.mts","vis.task.ts"]),Nt=t=>{for(const o of Tt){const s=f(t,o);if(k(s))return s}},At=t=>{const o=[];try{for(const s of rt(t,{includeDirs:!1,includeFiles:!0,includeSymlinks:!1,skip:[/node_modules/,/\.git/,/\.vis\b/,/dist\b/,/\.next\b/,/\.nuxt\b/]}))_t.has(at(s.path))&&o.push(s.path)}catch{}return o},qt=(t,o,s,n)=>{const e=Nt(t);if(e){const r=j(e),{applied:c,output:a}=q(r,Et);if(c.length===0)s.info(`${e} already uses the current schema — no rewrite needed.`);else if(o.dryRun)s.info(`── ${e} (preview) ──`),s.info(a),s.info("── end preview ──"),s.info(`Would apply ${String(c.length)} rename(s): ${c.map(u=>u.description).join(", ")}`);else{M(e,n),O(e,a),s.info(`Rewrote ${e} (backup at ${e}.bak). Applied ${String(c.length)} rename(s).`);for(const u of c)n.manualSteps.push(`Renamed ${u.description} in ${e}`)}}else s.warn("No vis.config.ts found at workspace root — nothing to migrate."),n.warnings.push("No vis.config.{ts,mts,cts,js,mjs,cjs} at workspace root.");const i=o.taskConfigPaths??At(t);for(const r of i){if(!k(r))continue;const c=j(r),a=q(c,St);if(a.applied.length!==0)if(o.dryRun)s.info(`── ${r} (preview) ──`),s.info(a.output),s.info("── end preview ──"),s.info(`Would apply ${String(a.applied.length)} rename(s): ${a.applied.map(u=>u.description).join(", ")}`);else{M(r,n),O(r,a.output),s.info(`Rewrote ${r} (backup at ${r}.bak). Applied ${String(a.applied.length)} rename(s).`);for(const u of a.applied)n.manualSteps.push(`Renamed ${u.description} in ${r}`)}}},g=t=>{const o=t.workspaceRoot??process.cwd(),s=t.visConfig??{};return{config:s,dryRun:!!t.options.dryRun,logger:t.logger,packageManager:et(o),report:I(),root:o,useEditorconfig:typeof s.editorconfig=="boolean"?s.editorconfig:!0}},d=async(t,o,s)=>{if(o.yes||o.dryRun)return!0;const n=await B(`This will edit files, scripts, and hooks for "${t}". Backups (.bak) will be created. Continue?`);return n||s.info("Aborted."),n},l=t=>{t.dryRun&&t.logger.info(`Running in dry-run mode — no changes will be made.
4
- `)},Vt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("deps",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating dependencies and scripts ──"),P(e.root,e.packageManager,e.config,{dryRun:e.dryRun},t,e.report),t.info(""),p(e.report,t)},Dt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("lint-staged",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating lint-staged ──"),Y(e.root,{dryRun:e.dryRun,useEditorconfig:e.useEditorconfig},t,e.report),t.info(""),p(e.report,t)},It=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("nano-staged",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating nano-staged ──"),L(e.root,{dryRun:e.dryRun,useEditorconfig:e.useEditorconfig},t,e.report),t.info(""),p(e.report,t)},Bt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("turborepo",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating turborepo ──"),H(e.root,{dryRun:e.dryRun,useEditorconfig:e.useEditorconfig},t,e.report),D(e.root,{dryRun:e.dryRun},t),t.info(""),p(e.report,t)},zt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("nx",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating nx ──");const i=!!o.aggressive;K(e.root,{aggressive:i,dryRun:e.dryRun,force:i||!!o.force,rewriteSyncGenerators:i||!!o.rewriteSyncGenerators,useEditorconfig:e.useEditorconfig},t,e.report),t.info(""),p(e.report,t)},Jt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("moon",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating moon ──"),Q(e.root,{copyTemplates:!!o.copyTemplates,dryRun:e.dryRun,useEditorconfig:e.useEditorconfig},t,e.report),D(e.root,{dryRun:e.dryRun},t),t.info(""),p(e.report,t)},Wt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("gitleaks",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating gitleaks ──"),U(e.root,{dryRun:e.dryRun,useEditorconfig:e.useEditorconfig},t,e.report),t.info(""),p(e.report,t)},Gt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("kingfisher",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating Kingfisher ──"),X(e.root,{dryRun:e.dryRun,useEditorconfig:e.useEditorconfig},t,e.report),t.info(""),p(e.report,t)},Ft=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("secretlint",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating secretlint ──"),Z(e.root,{dryRun:e.dryRun,useEditorconfig:e.useEditorconfig},t,e.report),t.info(""),p(e.report,t)},Pt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("syncpack",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating syncpack ──"),tt(e.root,{dryRun:e.dryRun,useEditorconfig:e.useEditorconfig},t,e.report),t.info(""),p(e.report,t)},Yt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("sherif",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating sherif ──"),ot(e.root,{dryRun:e.dryRun,useEditorconfig:e.useEditorconfig},t,e.report),t.info(""),p(e.report,t)},Lt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("self",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating vis.config.ts to current schema ──"),qt(e.root,{dryRun:e.dryRun},t,e.report),t.info(""),p(e.report,t)},Ht=({logger:t,workspaceRoot:o})=>{const s=o??process.cwd();ft(s,t).length>0&&(process.exitCode=1)},Kt=async({logger:t,options:o,workspaceRoot:s})=>{const n=s??process.cwd(),e=o.format??"table";if(!bt.has(e)){t.warn(`Invalid --format: ${String(o.format)}. Expected table | json | ndjson.`),process.exitCode=1;return}const i=o.failOn==="warning"?"warning":"error";let r;if(o.from){if(o.from!=="turbo"&&o.from!=="nx"&&o.from!=="moon"){t.warn(`Invalid --from: ${o.from}. Expected turbo | nx | moon.`),process.exitCode=1;return}r=o.from}else if(r=Rt(n),!r){t.warn("Could not auto-detect the source tool (need exactly one of turbo.json / nx.json / .moon/tasks.yml). Pass --from <turbo|nx|moon>."),process.exitCode=1;return}const c=wt(n,r);if(c.size===0){t.warn(`No ${r} task graph found at ${n} — nothing to verify.`),process.exitCode=1;return}const a=await kt(n);if(a.size===0){t.warn("No migrated vis task graph found (vis.config.ts has no tasks). Run the migrator first."),process.exitCode=1;return}const u=$t(c,a,r);Ct(u,e,t),process.exitCode=jt(u,i)},Qt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{const e=n??process.cwd(),i=G(e,s??{}),r=F(i);if(r.length===0){t.info("No applicable migrations detected in this workspace.");return}const c=!!o.dryRun;t.info(`Detected ${String(r.length)} migration(s):`);for(const v of r)t.info(` • ${v.title} — ${v.description}`);if(t.info(""),!o.yes&&!c&&!await B("Apply all detected migrations? Backups (.bak) will be created.")){t.info("Aborted.");return}c&&t.info(`Running in dry-run mode — no changes will be made.
5
- `);const a=I(),u=[];for(const v of r)try{if(t.info(`── Applying ${v.title} ──`),c)for(const b of v.probe(i))t.info(b);else v.apply(i,a,t);t.info("")}catch(b){u.push({error:b,id:v.id}),t.warn(`Failed to apply ${v.title}: ${b.message}`)}p(a,t),u.length>0&&(t.warn(""),t.warn(`${String(u.length)} migration(s) failed — see messages above.`),process.exitCode=1)},so=Vt,no=Dt,io=It,ro=Bt,ao=zt,co=Jt,uo=Wt,po=Gt,fo=Ft,go=Pt,lo=Yt,vo=Lt,yo=Ht,mo=Kt,ho=Qt;export{ho as migrateAllExecute,so as migrateDepsExecute,uo as migrateGitleaksExecute,po as migrateKingfisherExecute,no as migrateLintStagedExecute,co as migrateMoonExecute,io as migrateNanoStagedExecute,ao as migrateNxExecute,fo as migrateSecretlintExecute,vo as migrateSelfExecute,lo as migrateSherifExecute,go as migrateSyncpackExecute,ro as migrateTurborepoExecute,yo as migrateVerifyExecute,mo as migrateVerifyGraphExecute};
3
+ `);return}if(s.info(`Migration equivalence: ${t.source} → vis`),s.info(` source nodes: ${String(t.sourceNodeCount)} vis nodes: ${String(t.visNodeCount)}`),t.findings.length===0){s.info(" ✓ task graph + cache-key surface preserved (no divergence).");return}for(const n of t.findings){const e=` [${n.severity}] ${n.node} (${n.axis}) — ${n.detail}`;n.severity==="error"?s.warn(e):s.info(e)}},jt=(t,o)=>t.findings.some(s=>o==="warning"?!0:s.severity==="error")?1:0,B=async t=>{if(!T.isTTY)return!0;const o=pt({input:T,output:ut});try{const s=(await o.question(`${t} [Y/n] `)).trim().toLowerCase();return s===""||s==="y"||s==="yes"}finally{o.close()}},Et=[{description:"VisConfig.targetDefaults → VisConfig.tasks",next:"tasks",previous:"targetDefaults"},{description:"VisConfig.taskDefaults → VisConfig.scopedTasks",next:"scopedTasks",previous:"taskDefaults"},{description:"VisConfig.taskRunnerOptions → VisConfig.taskRunner",next:"taskRunner",previous:"taskRunnerOptions"},{description:"ScopedTasksBlock.scope → ScopedTasksBlock.match",next:"match",previous:"scope"},{description:"ScopedTasksBlock.targets → ScopedTasksBlock.tasks",next:"tasks",previous:"targets"}],St=[{description:"VisTaskConfig.targets → VisTaskConfig.tasks",next:"tasks",previous:"targets"}],Mt=t=>new RegExp(String.raw`(^|[\s,{(\[])(["']?)${t}\2(\s*:)`,"gmu"),Ot=(t,o)=>{let s=t;const n=[];for(const e of o){const i=Mt(e.previous);i.test(s)&&(i.lastIndex=0,s=s.replace(i,(r,c,a,u)=>`${c}${a}${e.next}${a}${u}`),n.push(e))}return{applied:n,output:s}},q=(t,o)=>Ot(t,o),Tt=["vis.config.ts","vis.config.mts","vis.config.cts","vis.config.js","vis.config.mjs","vis.config.cjs"],_t=new Set(["vis.task.cjs","vis.task.cts","vis.task.js","vis.task.mjs","vis.task.mts","vis.task.ts"]),Nt=t=>{for(const o of Tt){const s=f(t,o);if(w(s))return s}},At=t=>{const o=[];try{for(const s of rt(t,{includeDirs:!1,includeFiles:!0,includeSymlinks:!1,skip:[/node_modules/,/\.git/,/\.vis\b/,/dist\b/,/\.next\b/,/\.nuxt\b/]}))_t.has(at(s.path))&&o.push(s.path)}catch{}return o},qt=(t,o,s,n)=>{const e=Nt(t);if(e){const r=j(e),{applied:c,output:a}=q(r,Et);if(c.length===0)s.info(`${e} already uses the current schema — no rewrite needed.`);else if(o.dryRun)s.info(`── ${e} (preview) ──`),s.info(a),s.info("── end preview ──"),s.info(`Would apply ${String(c.length)} rename(s): ${c.map(u=>u.description).join(", ")}`);else{M(e,n),O(e,a),s.info(`Rewrote ${e} (backup at ${e}.bak). Applied ${String(c.length)} rename(s).`);for(const u of c)n.manualSteps.push(`Renamed ${u.description} in ${e}`)}}else s.warn("No vis.config.ts found at workspace root — nothing to migrate."),n.warnings.push("No vis.config.{ts,mts,cts,js,mjs,cjs} at workspace root.");const i=o.taskConfigPaths??At(t);for(const r of i){if(!w(r))continue;const c=j(r),a=q(c,St);if(a.applied.length!==0)if(o.dryRun)s.info(`── ${r} (preview) ──`),s.info(a.output),s.info("── end preview ──"),s.info(`Would apply ${String(a.applied.length)} rename(s): ${a.applied.map(u=>u.description).join(", ")}`);else{M(r,n),O(r,a.output),s.info(`Rewrote ${r} (backup at ${r}.bak). Applied ${String(a.applied.length)} rename(s).`);for(const u of a.applied)n.manualSteps.push(`Renamed ${u.description} in ${r}`)}}},g=t=>{const o=t.workspaceRoot??process.cwd(),s=t.visConfig??{};return{config:s,dryRun:!!t.options.dryRun,logger:t.logger,packageManager:et(o),report:I(),root:o,useEditorconfig:typeof s.editorconfig=="boolean"?s.editorconfig:!0}},d=async(t,o,s)=>{if(o.yes||o.dryRun)return!0;const n=await B(`This will edit files, scripts, and hooks for "${t}". Backups (.bak) will be created. Continue?`);return n||s.info("Aborted."),n},l=t=>{t.dryRun&&t.logger.info(`Running in dry-run mode — no changes will be made.
4
+ `)},Vt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("deps",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating dependencies and scripts ──"),P(e.root,e.packageManager,e.config,{dryRun:e.dryRun},t,e.report),t.info(""),p(e.report,t)},Dt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("lint-staged",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating lint-staged ──"),Y(e.root,{dryRun:e.dryRun,useEditorconfig:e.useEditorconfig},t,e.report),t.info(""),p(e.report,t)},It=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("nano-staged",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating nano-staged ──"),L(e.root,{dryRun:e.dryRun,useEditorconfig:e.useEditorconfig},t,e.report),t.info(""),p(e.report,t)},Bt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("turborepo",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating turborepo ──"),H(e.root,{dryRun:e.dryRun,useEditorconfig:e.useEditorconfig},t,e.report),D(e.root,{dryRun:e.dryRun},t),t.info(""),p(e.report,t)},zt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("nx",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating nx ──");const i=!!o.aggressive;K(e.root,{aggressive:i,dryRun:e.dryRun,force:i||!!o.force,rewriteSyncGenerators:i||!!o.rewriteSyncGenerators,useEditorconfig:e.useEditorconfig},t,e.report),t.info(""),p(e.report,t)},Wt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("moon",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating moon ──"),Q(e.root,{copyTemplates:!!o.copyTemplates,dryRun:e.dryRun,useEditorconfig:e.useEditorconfig},t,e.report),D(e.root,{dryRun:e.dryRun},t),t.info(""),p(e.report,t)},Gt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("gitleaks",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating gitleaks ──"),U(e.root,{dryRun:e.dryRun,useEditorconfig:e.useEditorconfig},t,e.report),t.info(""),p(e.report,t)},Ft=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("kingfisher",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating Kingfisher ──"),X(e.root,{dryRun:e.dryRun,useEditorconfig:e.useEditorconfig},t,e.report),t.info(""),p(e.report,t)},Jt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("secretlint",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating secretlint ──"),Z(e.root,{dryRun:e.dryRun,useEditorconfig:e.useEditorconfig},t,e.report),t.info(""),p(e.report,t)},Pt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("syncpack",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating syncpack ──"),tt(e.root,{dryRun:e.dryRun,useEditorconfig:e.useEditorconfig},t,e.report),t.info(""),p(e.report,t)},Yt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("sherif",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating sherif ──"),ot(e.root,{dryRun:e.dryRun,useEditorconfig:e.useEditorconfig},t,e.report),t.info(""),p(e.report,t)},Lt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{if(!await d("self",o,t))return;const e=g({logger:t,options:o,visConfig:s,workspaceRoot:n});l(e),t.info("── Migrating vis.config.ts to current schema ──"),qt(e.root,{dryRun:e.dryRun},t,e.report),t.info(""),p(e.report,t)},Ht=({logger:t,workspaceRoot:o})=>{const s=o??process.cwd();ft(s,t).length>0&&(process.exitCode=1)},Kt=async({logger:t,options:o,workspaceRoot:s})=>{const n=s??process.cwd(),e=o.format??"table";if(!bt.has(e)){t.warn(`Invalid --format: ${String(o.format)}. Expected table | json | ndjson.`),process.exitCode=1;return}const i=o.failOn==="warning"?"warning":"error";let r;if(o.from){if(o.from!=="turbo"&&o.from!=="nx"&&o.from!=="moon"){t.warn(`Invalid --from: ${o.from}. Expected turbo | nx | moon.`),process.exitCode=1;return}r=o.from}else if(r=Rt(n),!r){t.warn("Could not auto-detect the source tool (need exactly one of turbo.json / nx.json / .moon/tasks.yml). Pass --from <turbo|nx|moon>."),process.exitCode=1;return}const c=kt(n,r);if(c.size===0){t.warn(`No ${r} task graph found at ${n} — nothing to verify.`),process.exitCode=1;return}const a=await wt(n);if(a.size===0){t.warn("No migrated vis task graph found (vis.config.ts has no tasks). Run the migrator first."),process.exitCode=1;return}const u=$t(c,a,r);Ct(u,e,t),process.exitCode=jt(u,i)},Qt=async({logger:t,options:o,visConfig:s,workspaceRoot:n})=>{const e=n??process.cwd(),i=F(e,s??{}),r=J(i);if(r.length===0){t.info("No applicable migrations detected in this workspace.");return}const c=!!o.dryRun;t.info(`Detected ${String(r.length)} migration(s):`);for(const v of r)t.info(` • ${v.title} — ${v.description}`);if(t.info(""),!o.yes&&!c&&!await B("Apply all detected migrations? Backups (.bak) will be created.")){t.info("Aborted.");return}c&&t.info(`Running in dry-run mode — no changes will be made.
5
+ `);const a=I(),u=[];for(const v of r)try{if(t.info(`── Applying ${v.title} ──`),c)for(const b of v.probe(i))t.info(b);else v.apply(i,a,t);t.info("")}catch(b){u.push({error:b,id:v.id}),t.warn(`Failed to apply ${v.title}: ${b.message}`)}p(a,t),u.length>0&&(t.warn(""),t.warn(`${String(u.length)} migration(s) failed — see messages above.`),process.exitCode=1)},so=Vt,no=Dt,io=It,ro=Bt,ao=zt,co=Wt,uo=Gt,po=Ft,fo=Jt,go=Pt,lo=Yt,vo=Lt,yo=Ht,ho=Kt,mo=Qt;export{mo as migrateAllExecute,so as migrateDepsExecute,uo as migrateGitleaksExecute,po as migrateKingfisherExecute,no as migrateLintStagedExecute,co as migrateMoonExecute,io as migrateNanoStagedExecute,ao as migrateNxExecute,fo as migrateSecretlintExecute,vo as migrateSelfExecute,lo as migrateSherifExecute,go as migrateSyncpackExecute,ro as migrateTurborepoExecute,yo as migrateVerifyExecute,ho as migrateVerifyGraphExecute};
@@ -1,4 +1,4 @@
1
- import{createRequire as K}from"node:module";import{j as b,E as m,q as k,I as N,V as U,s as P}from"../packem_shared/index.server-qvZ-cy29.js";import{m as h,d as W,A,l as z}from"../packem_shared/index-DND6ptxQ.js";import{v as I,S as G}from"./catalog.js";import{d as X}from"../packem_shared/lockfile-CDQ0n4P5.js";import{p as Q,s as Z}from"../packem_shared/docker-D1LStSlH.js";import{I as re}from"../packem_shared/index-BWl4DbMp.js";import{g as L}from"../packem_shared/en-BxrK-n-J.js";let Y;const J=e=>(Y??=K(import.meta.url))(e),g=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,y=e=>{if(typeof g<"u"&&g.versions&&g.versions.node){const[o,t]=g.versions.node.split(".").map(Number);if(o>22||o===22&&t>=3||o===20&&t>=16)return g.getBuiltinModule(e)}return J(e)},{createInterface:O}=y("node:readline"),{spawn:ee}=y("node:child_process"),{createHash:oe}=y("node:crypto"),{existsSync:T,writeFileSync:te,chmodSync:ne}=y("node:fs"),D={aube:{base:["RUN corepack enable"],build:e=>e?`RUN aube run --filter ${e} build`:"RUN aube run build",install:"RUN aube install --frozen-lockfile"},bun:{base:["RUN npm install -g bun"],build:e=>e?`RUN bun run --filter ${e} build`:"RUN bun run build",install:"RUN --mount=type=cache,target=/root/.bun/install/cache bun install --frozen-lockfile"},npm:{base:[],build:e=>e?`RUN npm run build --workspace ${e}`:"RUN npm run build",install:"RUN --mount=type=cache,target=/root/.npm npm ci"},pnpm:{base:["ENV PNPM_HOME=/pnpm","ENV PATH=$PNPM_HOME:$PATH","RUN corepack enable"],build:e=>e?`RUN pnpm --filter ${e} build`:"RUN pnpm build",install:"RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile"},yarn:{base:["RUN corepack enable"],build:e=>e?`RUN yarn workspace ${e} build`:"RUN yarn build",install:"RUN --mount=type=cache,target=/usr/local/share/.cache/yarn yarn install --immutable"}},se=e=>{const{focus:o,manager:t,nodeVersion:r}=e,n=D[t]??D.npm;return["# syntax=docker/dockerfile:1","","# Generated by 'vis docker init'. Before building, scaffold the context:",`# vis docker scaffold${o?` --focus=${o}`:""} --include-sources`,"# then build with BuildKit enabled (DOCKER_BUILDKIT=1).","",`FROM node:${r}-slim AS base`,"WORKDIR /app",...n.base,"","# --- install dependencies from the scaffolded manifests only ---","FROM base AS deps","COPY .vis/docker/workspace/ ./",n.install,"","# --- build the focus project, then drop unfocused workspace projects ---","FROM deps AS build","COPY .vis/docker/sources/ ./",n.build(o),"RUN npx vis docker prune --context=.vis/docker","","# --- minimal runtime image ---",`FROM node:${r}-slim AS runtime`,"WORKDIR /app","ENV NODE_ENV=production","COPY --from=build /app ./","USER node","# TODO: point this at your app's entrypoint",'CMD ["node", "index.js"]',""].join(`
1
+ import{createRequire as K}from"node:module";import{j as b,E as m,q as k,I as N,V as U,s as P}from"../packem_shared/index.server-CusjRLCh.js";import{w as h,d as W,v as A,l as z}from"../packem_shared/index-uBVnF4ji.js";import{v as I,S as G}from"./catalog.js";import{d as X}from"../packem_shared/lockfile-Bccery3L.js";import{p as Q,s as Z}from"../packem_shared/docker-DaVs-9wK.js";import{I as re}from"../packem_shared/index-BWl4DbMp.js";import{g as L}from"../packem_shared/en-D3CfXlO7.js";let Y;const J=e=>(Y??=K(import.meta.url))(e),g=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,y=e=>{if(typeof g<"u"&&g.versions&&g.versions.node){const[o,t]=g.versions.node.split(".").map(Number);if(o>22||o===22&&t>=3||o===20&&t>=16)return g.getBuiltinModule(e)}return J(e)},{createInterface:O}=y("node:readline"),{spawn:ee}=y("node:child_process"),{createHash:oe}=y("node:crypto"),{existsSync:T,writeFileSync:te,chmodSync:ne}=y("node:fs"),D={aube:{base:["RUN corepack enable"],build:e=>e?`RUN aube run --filter ${e} build`:"RUN aube run build",install:"RUN aube install --frozen-lockfile"},bun:{base:["RUN npm install -g bun"],build:e=>e?`RUN bun run --filter ${e} build`:"RUN bun run build",install:"RUN --mount=type=cache,target=/root/.bun/install/cache bun install --frozen-lockfile"},npm:{base:[],build:e=>e?`RUN npm run build --workspace ${e}`:"RUN npm run build",install:"RUN --mount=type=cache,target=/root/.npm npm ci"},pnpm:{base:["ENV PNPM_HOME=/pnpm","ENV PATH=$PNPM_HOME:$PATH","RUN corepack enable"],build:e=>e?`RUN pnpm --filter ${e} build`:"RUN pnpm build",install:"RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile"},yarn:{base:["RUN corepack enable"],build:e=>e?`RUN yarn workspace ${e} build`:"RUN yarn build",install:"RUN --mount=type=cache,target=/usr/local/share/.cache/yarn yarn install --immutable"}},se=e=>{const{focus:o,manager:t,nodeVersion:r}=e,n=D[t]??D.npm;return["# syntax=docker/dockerfile:1","","# Generated by 'vis docker init'. Before building, scaffold the context:",`# vis docker scaffold${o?` --focus=${o}`:""} --include-sources`,"# then build with BuildKit enabled (DOCKER_BUILDKIT=1).","",`FROM node:${r}-slim AS base`,"WORKDIR /app",...n.base,"","# --- install dependencies from the scaffolded manifests only ---","FROM base AS deps","COPY .vis/docker/workspace/ ./",n.install,"","# --- build the focus project, then drop unfocused workspace projects ---","FROM deps AS build","COPY .vis/docker/sources/ ./",n.build(o),"RUN npx vis docker prune --context=.vis/docker","","# --- minimal runtime image ---",`FROM node:${r}-slim AS runtime`,"WORKDIR /app","ENV NODE_ENV=production","COPY --from=build /app ./","USER node","# TODO: point this at your app's entrypoint",'CMD ["node", "index.js"]',""].join(`
2
2
  `)},$="v2.14.0",S=`https://github.com/hadolint/hadolint/releases/download/${$}`,ie={"hadolint-linux-arm64":"331f1d3511b84a4f1e3d18d52fec284723e4019552f4f47b19322a53ce9a40ed","hadolint-linux-x86_64":"6bf226944684f56c84dd014e8b979d27425c0148f61b3bd99bcc6f39e9dc5a47","hadolint-macos-arm64":"3625e2e9f43dcfe7bd38738a5f5520ed50ce39ed28485266e6803dd7bc197b10","hadolint-macos-x86_64":"2b69a853433f1eca522ffb921cd490bd1321424d03331fd8390f93b7fb4a02e9","hadolint-windows-x86_64.exe":"8e0ee174f88edb14f207a68430c7a53c2883ed509cdbde9a3a26fffa140fa5e4"},ae=e=>ie[e],ce=(e=process.platform,o=process.arch)=>{const t=e==="darwin"?"macos":e==="linux"?"linux":e==="win32"?"windows":void 0;if(t===void 0)return;const r=o==="arm64"?"arm64":o==="x64"?"x86_64":void 0;if(t==="windows")return"hadolint-windows-x86_64.exe";if(r!==void 0)return`hadolint-${t}-${r}`},H=e=>h(L(),"hadolint",$,e.endsWith(".exe")?"hadolint.exe":"hadolint"),le=()=>{const e=process.platform==="win32"?"hadolint.exe":"hadolint",o=(process.env.PATH??"").split(process.platform==="win32"?";":":");for(const t of o)if(t!==""&&T(h(t,e)))return e},de=e=>e.trim().split(/\s+/u)[0]??"",C=async e=>{const o=await fetch(e,{redirect:"follow"});if(!o.ok)throw new Error(`download failed (${String(o.status)} ${o.statusText}) for ${e}`);return Buffer.from(await o.arrayBuffer())},ue=async e=>{const o=H(e),t=ae(e),r=await C(`${S}/${e}`),n=oe("sha256").update(r).digest("hex");if(t===void 0){const s=await C(`${S}/${e}.sha256`),i=de(s.toString("utf8")).toLowerCase();if(i==="")throw new Error("hadolint checksum sidecar was empty or unparseable. Refusing to use the download.");if(i!==n)throw new Error(`hadolint checksum mismatch (expected ${i}, got ${n}). Refusing to use the download.`)}else if(t.toLowerCase()!==n)throw new Error(`hadolint checksum mismatch (expected ${t.toLowerCase()}, got ${n}). Refusing to use the download.`);return W(h(L(),"hadolint",$)),te(o,r),process.platform!=="win32"&&ne(o,493),o},fe=async()=>{const e=O({input:process.stdin,output:process.stderr}),o=await new Promise(t=>{e.question(` Download hadolint ${k($)} now? ${m("[y/N]")} `,r=>{t(r.trim().toLowerCase())})});return e.close(),o==="y"||o==="yes"},pe=async e=>{const{autoInstall:o=!1,log:t}=e,r=le();if(r!==void 0)return r;const n=ce();if(n===void 0){t(`hadolint has no prebuilt binary for ${process.platform}/${process.arch}. Install it manually: https://github.com/hadolint/hadolint`);return}const s=H(n);if(T(s))return s;if(!o){if(!(process.stdin.isTTY&&!re)){t(`hadolint is not installed. Re-run with ${b("--install")} (or install hadolint on PATH) to enable Dockerfile linting.`);return}if(t(`${b("hadolint")} is required to lint Dockerfiles but was not found on your PATH.`),!await fe()){t(`Skipped. Install it yourself or re-run with ${b("--install")}.`);return}}t(`Downloading hadolint ${$} (${n})…`);try{const i=await ue(n);return t(`Installed hadolint to ${m(i)}`),i}catch(i){t(`Failed to download hadolint: ${i.message}`);return}},_=async(e,o,t)=>{if(o.length===0)return[];const r=["--format","json","--no-fail",...t!==void 0&&t!==""?["--config",t]:[],...o],n=await new Promise((i,l)=>{const a=ee(e,r,{stdio:["ignore","pipe","pipe"],windowsHide:!0});let d="",u="";a.stdout?.on("data",c=>{d+=c.toString("utf8")}),a.stderr?.on("data",c=>{u+=c.toString("utf8")}),a.on("error",l),a.on("close",()=>{if(d.trim()===""&&u.trim()!==""){l(new Error(u.trim()));return}i(d)})});if(n.trim()==="")return[];let s;try{s=JSON.parse(n)}catch{throw new Error("Could not parse hadolint JSON output.")}return Array.isArray(s)?s:[]},j=(e,o,t)=>{if(!(!/\bapt-get\b/u.test(e)||!/\binstall\b/u.test(e)||t.test(e)))return e.replace(/\binstall\b/u,`install ${o}`)},R={DL3014:e=>j(e,"-y",/(?:^|\s)(?:-y|--yes|--assume-yes|-qq?)\b/u),DL3015:e=>j(e,"--no-install-recommends",/--no-install-recommends\b/u),DL3020:e=>/^\s*ADD\b/u.test(e)?e.replace(/^(\s*)ADD\b/u,"$1COPY"):void 0,DL3027:e=>/(?:^|\s)apt\s/u.test(e)&&!/\bapt-get\b/u.test(e)?e.replace(/(^|\s)apt(\s)/u,"$1apt-get$2"):void 0},M=new Set(Object.keys(R)),me=(e,o)=>{const t=e.includes(`\r
3
3
  `)?`\r
4
4
  `:`
@@ -1,8 +1,8 @@
1
- import{T as H}from"../packem_shared/package-version-DjHDww_5.js";import"../packem_shared/index-DND6ptxQ.js";import"../packem_shared/public-api-WqUCiyIe.js";import{E as J,R as O,b as P,V as K,d as T,a,h as Z,e as g,H as N,W as q,G as Q,F as p}from"./catalog.js";import{B as X}from"../packem_shared/en-BxrK-n-J.js";import{I as _}from"../packem_shared/index-BWl4DbMp.js";import{K as ee,Z as te,W as oe}from"../packem_shared/ai-analysis-oNMAj1wd.js";import{w as re,k as se,p as m,i as U}from"./cli-main.js";import{A as ne}from"../packem_shared/pm-runner-Bssje5qH.js";import{U as ie,b as ae,u as D}from"../packem_shared/vis-update-app-D1gLJB1O.js";const we=async({argument:b,logger:o,options:e,visConfig:i,workspaceRoot:C})=>{if(!C)throw new Error("Could not determine workspace root. Run this command inside a monorepo.");const d=C;if(e.securityConfig){const t=ne(d);if(re(i??{},t.name),e.sync&&t.name==="pnpm"){const r=se(i??{});if(r.length>0){m.info(`
2
- Settings that would sync to pnpm-workspace.yaml:`);for(const R of r)m.success(` ${R}`)}else m.info("No security settings to sync.")}else e.sync&&t.name!=="pnpm"&&(m.info(`--sync is only available for pnpm projects. Your project uses ${t.name}.`),m.info("vis enforces security settings at the vis layer for non-pnpm projects."));if(!e.security&&!b?.length)return}const{packageManager:F}=H(d),I=J(d),c=i?.update??{},y=O(d,F,{dev:e.dev,includeInternal:e["include-internal"],peer:e.peer,prod:e.prod});if(y.size===0){o.info("No catalogs found.");return}const h=e.target??c.target??"latest";if(!["latest","minor","patch"].includes(h))throw new Error(`Invalid target "${h}". Use: latest, minor, or patch.`);const M={exclude:[...p(e.exclude),...p(c.exclude)],ignore:p(c.ignore),include:[...p(e.include),...p(c.include),...b],includeLocked:!!e.includeLocked,includePrerelease:e.prerelease||c.prerelease||!1,security:e.security!==!1,target:h};let x=0;for(const t of y.values())x+=t.size;const w=!!process.stdout.isTTY&&!_;let l;const z=w?(t,r)=>{l?l.rerender(a.createElement(D,{current:t,total:r})):l=T(a.createElement(D,{current:t,total:r}),{interactive:!0,patchConsole:!1})}:(t,r)=>{o.info(`Checking ${String(t)}/${String(r)} dependencies...`)};w||o.info(`Checking ${String(x)} catalog dependencies against npm registry...
3
- `);const $=new Set;U("socket")&&$.add("socket"),U("depsDev")&&$.add("deps-dev");const v=i?.security?.policies?.score?.minimum,A=P(i?.security,{disabled:$,minimumScore:v}),{failed:k,outdated:n}=await K(y,M,I,z,d,A,i?.security?.acceptedRisks);if(l&&(l.clear(),l.unmount()),k.length>0&&o.warn(`Failed to fetch: ${k.join(", ")}`),n.length===0){o.info("All catalog dependencies are up to date.");return}const E=e.format??c.format??"table",L=ee(e.aiType??"impact"),u=e.ai?await te(n,o,i?.ai,L):void 0;if(w&&E==="table"){const t=new ie(n,u??null),r=i?.tui?.autoExit??!1,R=r===!0?3:typeof r=="number"?r:0;await T(a.createElement(ae,{autoExitSeconds:R,isDryRun:!0,store:t}),{alternateScreen:!0,exitOnCtrlC:!1,interactive:!0,patchConsole:!0}).waitUntilExit();const V=process.stdout.columns||80;process.stdout.write(`
4
- `);for(const s of n){const W=s.vulnerabilities?.length||s.socketReport&&s.socketReport.alerts.length>0,S=!!s.acceptedRisk,Y=W?S?"✓":"⚠":"✓",B=S?"gray":s.updateType==="major"?"red":s.updateType==="minor"?"yellow":"green",f=s.socketReport?.score.overall,G=f===void 0?"":` [${String(Math.round(f*100))}%]`,j=f===void 0?void 0:X(f);process.stdout.write(`${Z(a.createElement(g,null," ",a.createElement(g,{color:B},Y),` ${s.packageName} ${s.currentRange} → ${s.newRange}`,a.createElement(g,{dimColor:!0},` ${s.updateType}`),j?a.createElement(g,{color:j},G):null),{columns:V})}
1
+ import{I as O}from"../packem_shared/package-version-C47v64aB.js";import"../packem_shared/index-uBVnF4ji.js";import"../packem_shared/public-api-WqUCiyIe.js";import{g as P,b as K,d as W,U as Z,X as U,R as a,h as q,i as g,j as I,B as H,J as Q,G as p}from"./catalog.js";import{B as V}from"../packem_shared/en-D3CfXlO7.js";import{I as _}from"../packem_shared/index-BWl4DbMp.js";import{K as ee,Z as te,W as oe}from"../packem_shared/ai-analysis-bGCAc1jR.js";import{w as re,k as se,p as m,i as N}from"./cli-main.js";import{A as ne}from"../packem_shared/pm-runner-C6eTANt1.js";import{U as ie,b as ae,u as T}from"../packem_shared/vis-update-app-DMAC2pPf.js";const he=async({argument:C,logger:o,options:e,visConfig:i,workspaceRoot:R})=>{if(!R)throw new Error("Could not determine workspace root. Run this command inside a monorepo.");const d=R;if(e.securityConfig){const t=ne(d);if(re(i??{},t.name),e.sync&&t.name==="pnpm"){const r=se(i??{});if(r.length>0){m.info(`
2
+ Settings that would sync to pnpm-workspace.yaml:`);for(const E of r)m.success(` ${E}`)}else m.info("No security settings to sync.")}else e.sync&&t.name!=="pnpm"&&(m.info(`--sync is only available for pnpm projects. Your project uses ${t.name}.`),m.info("vis enforces security settings at the vis layer for non-pnpm projects."));if(!e.security&&!C?.length)return}const{packageManager:B}=O(d),D=P(d),c=i?.update??{},y=K(d,B,{dev:e.dev,includeInternal:e["include-internal"],peer:e.peer,prod:e.prod});if(y.size===0){o.info("No catalogs found.");return}const $=e.target??c.target??"latest";if(!["latest","minor","patch"].includes($))throw new Error(`Invalid target "${$}". Use: latest, minor, or patch.`);const J={exclude:[...p(e.exclude),...p(c.exclude)],ignore:p(c.ignore),include:[...p(e.include),...p(c.include),...C],includeLocked:!!e.includeLocked,includePrerelease:e.prerelease||c.prerelease||!1,security:e.security!==!1,target:$};let x=0;for(const t of y.values())x+=t.size;const h=!!process.stdout.isTTY&&!_;let l;const M=h?(t,r)=>{l?l.rerender(a.createElement(T,{current:t,total:r})):l=U(a.createElement(T,{current:t,total:r}),{interactive:!0,patchConsole:!1})}:(t,r)=>{o.info(`Checking ${String(t)}/${String(r)} dependencies...`)};h||o.info(`Checking ${String(x)} catalog dependencies against npm registry...
3
+ `);const w=new Set;N("socket")&&w.add("socket"),N("depsDev")&&w.add("deps-dev");const v=i?.security?.policies?.score?.minimum,z=W(i?.security,{disabled:w,minimumScore:v}),{failed:k,outdated:n}=await Z(y,J,D,M,d,z,i?.security?.acceptedRisks);if(l&&(l.clear(),l.unmount()),k.length>0&&o.warn(`Failed to fetch: ${k.join(", ")}`),n.length===0){o.info("All catalog dependencies are up to date.");return}const b=e.format??c.format??"table",A=ee(e.aiType??"impact"),u=e.ai?await te(n,o,i?.ai,A):void 0;if(h&&b==="table"){const t=new ie(n,u??null),r=i?.tui?.autoExit??!1,E=r===!0?3:typeof r=="number"?r:0;await U(a.createElement(ae,{autoExitSeconds:E,isDryRun:!0,store:t}),{alternateScreen:!0,exitOnCtrlC:!1,interactive:!0,patchConsole:!0}).waitUntilExit();const L=process.stdout.columns||80;process.stdout.write(`
4
+ `);for(const s of n){const X=s.vulnerabilities?.length||s.socketReport&&s.socketReport.alerts.length>0,S=!!s.acceptedRisk,Y=X?S?"✓":"⚠":"✓",F=S?"gray":s.updateType==="major"?"red":s.updateType==="minor"?"yellow":"green",f=s.socketReport?.score.overall,G=f===void 0?"":` [${String(Math.round(f*100))}%]`,j=f===void 0?void 0:V(f);process.stdout.write(`${q(a.createElement(g,null," ",a.createElement(g,{color:F},Y),` ${s.packageName} ${s.currentRange} → ${s.newRange}`,a.createElement(g,{dimColor:!0},` ${s.updateType}`),j?a.createElement(g,{color:j},G):null),{columns:L})}
5
5
  `)}process.stdout.write(`
6
- `),o.info(N(n,v))}else if(E==="json"){const t={failed:k,outdated:n};u&&(t.aiAnalysis=u),process.stdout.write(`${JSON.stringify(t,void 0,2)}
7
- `)}else E==="minimal"?process.stdout.write(`${q(n)}
8
- `):(Q(n,o),o.info(N(n,v)),u&&(o.info(""),o.info(oe(u))));e.exitCode&&n.length>0&&(process.exitCode=1)};export{we as default};
6
+ `),o.info(I(n,v))}else if(b==="json"){const t={failed:k,outdated:n};u&&(t.aiAnalysis=u),process.stdout.write(`${JSON.stringify(t,void 0,2)}
7
+ `)}else b==="minimal"?process.stdout.write(`${H(n)}
8
+ `):(Q(n,o),o.info(I(n,v)),u&&(o.info(""),o.info(oe(u))));e.exitCode&&n.length>0&&(process.exitCode=1)};export{he as default};
@@ -1,3 +1,3 @@
1
- import{createRequire as G}from"node:module";import{I as F,q as U,j as N,E as O}from"../packem_shared/index.server-qvZ-cy29.js";import{y as E}from"../packem_shared/index-DND6ptxQ.js";import{P as D}from"./cli-main.js";import{d as A,f as C,r as Q,a as X,b as Y,s as Z,c as ee,e as te,g as se,h as re,i as ie,j as ne,k as oe,l as ae,m as de,n as ce,o as fe,p as le,q as pe,t as ue}from"../packem_shared/watch-loop-DIwSMjlA.js";import{i as h}from"./catalog.js";let H;const I=t=>(H??=G(import.meta.url))(t),k=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,L=t=>{if(typeof k<"u"&&k.versions&&k.versions.node){const[e,s]=k.versions.node.split(".").map(Number);if(e>22||e===22&&s>=3||e===20&&s>=16)return k.getBuiltinModule(t)}return I(t)},{createHash:_}=L("node:crypto"),ge=t=>t.startsWith("/")||/^[a-z]:[\\/]/i.test(t),q=(t,e)=>ge(e)?e:`${t}/${e}`,me={argsCheck:(t,e)=>P(t,e,"check"),argsFix:(t,e)=>P(t,e,"fix"),bin:()=>["pnpm","exec","dprint"],cacheKey:(t,e)=>{const s=["dprint",t.declaredVersion??"unknown",t.configFile??"no-config",e.quiet?"q":"",...e.extraArgs??[]];return _("sha256").update(s.join("|")).digest("hex").slice(0,16)},detect:(t,e)=>{const s=A(e,h.dprint.packageNames[0]),r=C(t,h.dprint.configFiles);if(!(!s&&!r))return{adapter:"dprint",configFile:r,declared:!!s,declaredVersion:s,root:t}},extensions:["cjs","css","cts","dockerfile","html","js","json","jsonc","jsx","md","mdx","mjs","mts","toml","ts","tsx","yaml","yml"],id:"dprint",kind:"fmt",parse:(t,e)=>{if(t.exitCode===0)return[];const s=[];for(const r of t.stdout.split(/\r?\n/)){const i=r.trim();!i||i.startsWith("[")||i.startsWith("Checked ")||i.startsWith("Error:")||s.push({adapter:"dprint",file:q(e.root,i),fixable:!0,message:"Code style issues would be auto-fixed",severity:"info"})}return s}},P=(t,e,s)=>{const r=s==="fix"?["fmt"]:["check","--list-different"];return e.extraArgs?.length&&r.push(...e.extraArgs),r.push(...t),r},he={argsCheck:(t,e)=>T(t,e,"check"),argsFix:(t,e)=>T(t,e,"fix"),bin:()=>["pnpm","exec","oxfmt"],cacheKey:(t,e)=>{const s=["oxfmt",t.declaredVersion??"unknown",t.configFile??"no-config",e.quiet?"q":"",...e.extraArgs??[]];return _("sha256").update(s.join("|")).digest("hex").slice(0,16)},detect:(t,e)=>{const s=A(e,h.oxfmt.packageNames[0]),r=C(t,h.oxfmt.configFiles);if(!(!s&&!r))return{adapter:"oxfmt",configFile:r,declared:!!s,declaredVersion:s,root:t}},extensions:["cjs","cts","js","json","jsonc","jsx","mjs","mts","ts","tsx"],id:"oxfmt",kind:"fmt",parse:(t,e)=>{if(t.exitCode===0)return[];const s=[];for(const r of t.stdout.split(/\r?\n/)){const i=r.trim();!i||i.startsWith("[")||s.push({adapter:"oxfmt",file:q(e.root,i),fixable:!0,message:"Code style issues would be auto-fixed",severity:"info"})}return s}},T=(t,e,s)=>{const r=s==="fix"?["--write"]:["--list-different"];return e.extraArgs?.length&&r.push(...e.extraArgs),r.push(...t),r},xe={argsCheck:(t,e)=>B(t,e,"check"),argsFix:(t,e)=>B(t,e,"fix"),bin:()=>["pnpm","exec","prettier"],cacheKey:(t,e)=>{const s=["prettier",t.declaredVersion??"unknown",t.configFile??"no-config",e.quiet?"q":"",...e.extraArgs??[]];return _("sha256").update(s.join("|")).digest("hex").slice(0,16)},detect:(t,e)=>{const s=A(e,h.prettier.packageNames[0]),r=C(t,h.prettier.configFiles);if(!(!s&&!r))return{adapter:"prettier",configFile:r,declared:!!s,declaredVersion:s,root:t}},extensions:["cjs","css","cts","html","js","json","jsx","less","md","mdx","mjs","mts","scss","ts","tsx","vue","yaml","yml"],id:"prettier",kind:"fmt",parse:(t,e)=>{if(t.exitCode===0)return[];const s=[];for(const r of t.stdout.split(/\r?\n/)){const i=r.trim();i&&(i.startsWith("[")||s.push({adapter:"prettier",file:q(e.root,i),fixable:!0,message:"Code style issues would be auto-fixed",severity:"info"}))}return s}},B=(t,e,s)=>{const r=s==="fix"?["--write"]:["--list-different"];return e.quiet&&r.push("--log-level","warn"),e.extraArgs?.length&&r.push(...e.extraArgs),r.push(...t),r},ke=[he,ce,me,xe,fe,le],qe=async({logger:t,options:e,visConfig:s,workspaceRoot:r})=>{const i=r??process.cwd(),u=s?.fmt,w=Q(ke,u?.order),K=X(i,w),x=Y(K,w,"fmt").filter(({adapter:l})=>u?.adapters?.[l.id]?.enabled!==!1);if(x.length===0){t.warn("vis fmt: no formatter detected in this workspace (looked for: oxfmt, biome, dprint, prettier, ruff, deno-fmt).");return}const R=l=>{const o=u?.adapters?.[l]?.extraArgs;return o&&o.length>0?[...o]:void 0},b={quiet:e.quiet??!1},$=we(e),y=e.check?"check":"fix";let d;if(e.staged){if(d=Z(i),d===void 0)t.warn("vis fmt: could not resolve --staged (not a git repo or git unavailable). Falling back to a workspace-wide run.");else if(d.length===0){t.info(F("✓ fmt: no staged files"));return}}else if(typeof e.since=="string"&&e.since.length>0){if(d=ee(i,e.since),d===void 0)t.warn(`vis fmt: could not resolve --since ${e.since} (not a git repo or unknown ref). Falling back to a workspace-wide run.`);else if(d.length===0){t.info(F(`✓ fmt: no files changed since ${e.since}`));return}}const z=D(i,void 0,void 0,!0),v=e.format??"human";v==="human"&&e.output!==void 0&&t.warn("vis fmt: --output is ignored for the human format; pass --format json|minimal|sarif|junit|github to redirect findings to a file.");const M=async l=>{const o=$.length>0?$:l,g=[];if(o){const n=se(o,x,u?.extensionOverrides);for(const{adapter:a,presence:c}of x){const f=n.get(a.id);if(!f||f.length===0)continue;const W=R(a.id),V={adapter:a,files:f,presence:c};W&&(V.options={...b,extraArgs:W}),g.push(V)}}else for(const{adapter:n,presence:a}of x){const c=R(n.id),f={adapter:n,files:["."],presence:a};c&&(f.options={...b,extraArgs:c}),g.push(f)}if(g.length===0)return;const J=await re(g,b,y,{cacheRoot:z}),j=g.map((n,a)=>{const c=J[a],f=n.adapter.parse(c,n.presence);return{adapter:n.adapter,durationMs:c.durationMs,exitCode:c.exitCode,findings:f}}),p=ie(j.map(n=>({adapter:n.adapter.id,durationMs:n.durationMs,exitCode:n.exitCode,findingCount:n.findings.length,findings:n.findings}))),m=v==="human"?void 0:ne({cwd:i,target:e.output});try{switch(v){case"github":{m.write(de({runs:j.map(n=>({findings:n.findings})),workspaceRoot:i}));break}case"json":{m.write(`${JSON.stringify({findings:p.findings,mode:y,runs:p.runs},null,2)}
2
- `);break}case"junit":{m.write(ae({runs:j.map(n=>({adapter:n.adapter.id,durationMs:n.durationMs,findings:n.findings})),workspaceRoot:i}));break}case"minimal":{je(p.findings,i,m);break}case"sarif":{m.write(oe({runs:j.map(n=>({adapter:n.adapter.id,findings:n.findings,presence:g.find(a=>a.adapter.id===n.adapter.id)?.presence})),workspaceRoot:i}));break}default:ye(p.findings,i,y,t)}}finally{m?.close()}const S=y==="fix"?p.hadProcessFailure?1:0:ue({...p,maxSeverity:p.findings.length>0?"error":void 0});S!==0&&(process.exitCode=S)};if(e.watch){const l=[...new Set(x.flatMap(({adapter:o})=>o.extensions))];await te({extensions:l,initialFiles:d,label:"fmt",log:o=>{t.info(o)},runCycle:M,workspaceRoot:i});return}await M(d)},we=t=>{const e=t;return[...e._??e.args??[]]},ye=(t,e,s,r)=>{if(t.length===0){r.info(F(s==="fix"?"✓ fmt: nothing to change":"✓ fmt: all files already formatted"));return}const i=pe(t),u=s==="fix"?U(N("Formatted:")):N("Would change:");r.info(u);for(const w of i.keys())r.info(` ${O("·")} ${E(e,w)}`);s==="check"&&(r.info(""),r.info(O(`Run \`vis fmt\` to apply changes (${String(i.size)} file${i.size===1?"":"s"}).`)))},je=(t,e,s)=>{for(const r of t)s.write(`${r.adapter} ${E(e,r.file)}
1
+ import{createRequire as G}from"node:module";import{I as F,q as U,j as N,E as O}from"../packem_shared/index.server-CusjRLCh.js";import{b as E}from"../packem_shared/index-uBVnF4ji.js";import{P as D}from"./cli-main.js";import{d as A,f as C,r as Q,a as X,b as Y,s as Z,c as ee,e as te,g as se,h as re,i as ie,j as ne,k as oe,l as ae,m as de,n as ce,o as fe,p as le,q as pe,t as ue}from"../packem_shared/watch-loop-Q7UpkVbr.js";import{n as h}from"./catalog.js";let H;const I=t=>(H??=G(import.meta.url))(t),k=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,L=t=>{if(typeof k<"u"&&k.versions&&k.versions.node){const[e,s]=k.versions.node.split(".").map(Number);if(e>22||e===22&&s>=3||e===20&&s>=16)return k.getBuiltinModule(t)}return I(t)},{createHash:_}=L("node:crypto"),ge=t=>t.startsWith("/")||/^[a-z]:[\\/]/i.test(t),q=(t,e)=>ge(e)?e:`${t}/${e}`,me={argsCheck:(t,e)=>P(t,e,"check"),argsFix:(t,e)=>P(t,e,"fix"),bin:()=>["pnpm","exec","dprint"],cacheKey:(t,e)=>{const s=["dprint",t.declaredVersion??"unknown",t.configFile??"no-config",e.quiet?"q":"",...e.extraArgs??[]];return _("sha256").update(s.join("|")).digest("hex").slice(0,16)},detect:(t,e)=>{const s=A(e,h.dprint.packageNames[0]),r=C(t,h.dprint.configFiles);if(!(!s&&!r))return{adapter:"dprint",configFile:r,declared:!!s,declaredVersion:s,root:t}},extensions:["cjs","css","cts","dockerfile","html","js","json","jsonc","jsx","md","mdx","mjs","mts","toml","ts","tsx","yaml","yml"],id:"dprint",kind:"fmt",parse:(t,e)=>{if(t.exitCode===0)return[];const s=[];for(const r of t.stdout.split(/\r?\n/)){const i=r.trim();!i||i.startsWith("[")||i.startsWith("Checked ")||i.startsWith("Error:")||s.push({adapter:"dprint",file:q(e.root,i),fixable:!0,message:"Code style issues would be auto-fixed",severity:"info"})}return s}},P=(t,e,s)=>{const r=s==="fix"?["fmt"]:["check","--list-different"];return e.extraArgs?.length&&r.push(...e.extraArgs),r.push(...t),r},he={argsCheck:(t,e)=>T(t,e,"check"),argsFix:(t,e)=>T(t,e,"fix"),bin:()=>["pnpm","exec","oxfmt"],cacheKey:(t,e)=>{const s=["oxfmt",t.declaredVersion??"unknown",t.configFile??"no-config",e.quiet?"q":"",...e.extraArgs??[]];return _("sha256").update(s.join("|")).digest("hex").slice(0,16)},detect:(t,e)=>{const s=A(e,h.oxfmt.packageNames[0]),r=C(t,h.oxfmt.configFiles);if(!(!s&&!r))return{adapter:"oxfmt",configFile:r,declared:!!s,declaredVersion:s,root:t}},extensions:["cjs","cts","js","json","jsonc","jsx","mjs","mts","ts","tsx"],id:"oxfmt",kind:"fmt",parse:(t,e)=>{if(t.exitCode===0)return[];const s=[];for(const r of t.stdout.split(/\r?\n/)){const i=r.trim();!i||i.startsWith("[")||s.push({adapter:"oxfmt",file:q(e.root,i),fixable:!0,message:"Code style issues would be auto-fixed",severity:"info"})}return s}},T=(t,e,s)=>{const r=s==="fix"?["--write"]:["--list-different"];return e.extraArgs?.length&&r.push(...e.extraArgs),r.push(...t),r},xe={argsCheck:(t,e)=>B(t,e,"check"),argsFix:(t,e)=>B(t,e,"fix"),bin:()=>["pnpm","exec","prettier"],cacheKey:(t,e)=>{const s=["prettier",t.declaredVersion??"unknown",t.configFile??"no-config",e.quiet?"q":"",...e.extraArgs??[]];return _("sha256").update(s.join("|")).digest("hex").slice(0,16)},detect:(t,e)=>{const s=A(e,h.prettier.packageNames[0]),r=C(t,h.prettier.configFiles);if(!(!s&&!r))return{adapter:"prettier",configFile:r,declared:!!s,declaredVersion:s,root:t}},extensions:["cjs","css","cts","html","js","json","jsx","less","md","mdx","mjs","mts","scss","ts","tsx","vue","yaml","yml"],id:"prettier",kind:"fmt",parse:(t,e)=>{if(t.exitCode===0)return[];const s=[];for(const r of t.stdout.split(/\r?\n/)){const i=r.trim();i&&(i.startsWith("[")||s.push({adapter:"prettier",file:q(e.root,i),fixable:!0,message:"Code style issues would be auto-fixed",severity:"info"}))}return s}},B=(t,e,s)=>{const r=s==="fix"?["--write"]:["--list-different"];return e.quiet&&r.push("--log-level","warn"),e.extraArgs?.length&&r.push(...e.extraArgs),r.push(...t),r},ke=[he,ce,me,xe,fe,le],qe=async({logger:t,options:e,visConfig:s,workspaceRoot:r})=>{const i=r??process.cwd(),u=s?.fmt,w=Q(ke,u?.order),K=X(i,w),x=Y(K,w,"fmt").filter(({adapter:l})=>u?.adapters?.[l.id]?.enabled!==!1);if(x.length===0){t.warn("vis fmt: no formatter detected in this workspace (looked for: oxfmt, biome, dprint, prettier, ruff, deno-fmt).");return}const R=l=>{const o=u?.adapters?.[l]?.extraArgs;return o&&o.length>0?[...o]:void 0},y={quiet:e.quiet??!1},$=we(e),b=e.check?"check":"fix";let d;if(e.staged){if(d=Z(i),d===void 0)t.warn("vis fmt: could not resolve --staged (not a git repo or git unavailable). Falling back to a workspace-wide run.");else if(d.length===0){t.info(F("✓ fmt: no staged files"));return}}else if(typeof e.since=="string"&&e.since.length>0){if(d=ee(i,e.since),d===void 0)t.warn(`vis fmt: could not resolve --since ${e.since} (not a git repo or unknown ref). Falling back to a workspace-wide run.`);else if(d.length===0){t.info(F(`✓ fmt: no files changed since ${e.since}`));return}}const z=D(i,void 0,void 0,!0),v=e.format??"human";v==="human"&&e.output!==void 0&&t.warn("vis fmt: --output is ignored for the human format; pass --format json|minimal|sarif|junit|github to redirect findings to a file.");const M=async l=>{const o=$.length>0?$:l,g=[];if(o){const n=se(o,x,u?.extensionOverrides);for(const{adapter:a,presence:c}of x){const f=n.get(a.id);if(!f||f.length===0)continue;const W=R(a.id),V={adapter:a,files:f,presence:c};W&&(V.options={...y,extraArgs:W}),g.push(V)}}else for(const{adapter:n,presence:a}of x){const c=R(n.id),f={adapter:n,files:["."],presence:a};c&&(f.options={...y,extraArgs:c}),g.push(f)}if(g.length===0)return;const J=await re(g,y,b,{cacheRoot:z}),j=g.map((n,a)=>{const c=J[a],f=n.adapter.parse(c,n.presence);return{adapter:n.adapter,durationMs:c.durationMs,exitCode:c.exitCode,findings:f}}),p=ie(j.map(n=>({adapter:n.adapter.id,durationMs:n.durationMs,exitCode:n.exitCode,findingCount:n.findings.length,findings:n.findings}))),m=v==="human"?void 0:ne({cwd:i,target:e.output});try{switch(v){case"github":{m.write(de({runs:j.map(n=>({findings:n.findings})),workspaceRoot:i}));break}case"json":{m.write(`${JSON.stringify({findings:p.findings,mode:b,runs:p.runs},null,2)}
2
+ `);break}case"junit":{m.write(ae({runs:j.map(n=>({adapter:n.adapter.id,durationMs:n.durationMs,findings:n.findings})),workspaceRoot:i}));break}case"minimal":{je(p.findings,i,m);break}case"sarif":{m.write(oe({runs:j.map(n=>({adapter:n.adapter.id,findings:n.findings,presence:g.find(a=>a.adapter.id===n.adapter.id)?.presence})),workspaceRoot:i}));break}default:be(p.findings,i,b,t)}}finally{m?.close()}const S=b==="fix"?p.hadProcessFailure?1:0:ue({...p,maxSeverity:p.findings.length>0?"error":void 0});S!==0&&(process.exitCode=S)};if(e.watch){const l=[...new Set(x.flatMap(({adapter:o})=>o.extensions))];await te({extensions:l,initialFiles:d,label:"fmt",log:o=>{t.info(o)},runCycle:M,workspaceRoot:i});return}await M(d)},we=t=>{const e=t;return[...e._??e.args??[]]},be=(t,e,s,r)=>{if(t.length===0){r.info(F(s==="fix"?"✓ fmt: nothing to change":"✓ fmt: all files already formatted"));return}const i=pe(t),u=s==="fix"?U(N("Formatted:")):N("Would change:");r.info(u);for(const w of i.keys())r.info(` ${O("·")} ${E(e,w)}`);s==="check"&&(r.info(""),r.info(O(`Run \`vis fmt\` to apply changes (${String(i.size)} file${i.size===1?"":"s"}).`)))},je=(t,e,s)=>{for(const r of t)s.write(`${r.adapter} ${E(e,r.file)}
3
3
  `)};export{qe as default};
@@ -1,22 +1,22 @@
1
- import{createRequire as te}from"node:module";import{E as u,j as g,q as y}from"../packem_shared/index.server-qvZ-cy29.js";import{m as S,l as N,I as V,H as G,y as K,d as L,A as P,o as ne,q as oe,B as ie}from"../packem_shared/index-DND6ptxQ.js";import{f as pe}from"../packem_shared/giget-CAxjpwew.js";import{p as l}from"./cli-main.js";let re;const se=t=>(re??=te(import.meta.url))(t),j=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,E=t=>{if(typeof j<"u"&&j.versions&&j.versions.node){const[e,r]=j.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return j.getBuiltinModule(t)}return se(t)},{fileURLToPath:ae}=E("node:url"),{createInterface:ce}=E("node:readline"),{mkdtempSync:le,rmSync:fe}=E("node:fs"),{tmpdir:ue}=E("node:os"),{spawnSync:de}=E("node:child_process"),J=[".ts",".mts",".cts",".js",".mjs",".cjs"],me="template.yml",he=[".d",".test",".spec",".config",".bench",".stories"],$e=[".d.ts",".d.mts",".d.cts",".js.map",".mjs.map",".cjs.map",".ts.map"],Y=t=>{for(const e of J)if(t.endsWith(e))return t.slice(0,-e.length);return t},we=t=>{if($e.some(r=>t.endsWith(r))||!J.some(r=>t.endsWith(r)))return!1;const e=Y(t);return!he.some(r=>e.endsWith(r))},H=(t,e)=>{const r=[];if(!N(t))return r;for(const s of V(t,{includeDirs:!1,includeSymlinks:!1,maxDepth:1})){if(!we(s.name))continue;const n=Y(s.name);r.push({load:()=>ye(s.path),name:n,path:s.path,source:e})}return r},x=(t,e)=>{const r=[];if(!N(t))return r;for(const s of V(t,{includeFiles:!1,includeSymlinks:!1,maxDepth:1})){if(s.path===t)continue;const n=S(s.path,me);N(n)&&r.push({load:()=>ve(s.path,s.name),name:s.name,path:s.path,source:e})}return r},ge=()=>{try{const t=ae(import.meta.url),e=S(G(t),"..","..","templates");return N(e)?e:void 0}catch{return}},q=t=>{const{extraDirectories:e=[],onWarning:r,workspaceRoot:s}=t,n=[...H(S(s,".vis","templates"),"native"),...x(S(s,".vis","templates"),"moon"),...x(S(s,".moon","templates"),"moon")];for(const o of e)n.push(...x(o,"config")),n.push(...H(o,"config"));const i=ge();i&&n.push(...x(i,"builtin"));const a=new Map;for(const o of n){const c=a.get(o.name);if(!c){a.set(o.name,o);continue}r&&r(`Template "${o.name}" exists in multiple sources — using ${c.source} (${c.path}), ignoring ${o.source} (${o.path}).`)}return[...a.values()].sort((o,c)=>o.name.localeCompare(c.name))},ye=async t=>{const{loadNativeTemplate:e}=await import("./loader2.js");return e(t)},ve=async(t,e)=>{const{loadMoonTemplate:r}=await import("./index3.js");return r(t,e)},I=(t,e)=>new Promise(r=>{t.question(e,s=>{r(s.trim())})}),be=async(t,e,r)=>{const s=await I(t,` ${e} ${u(r?"[Y/n]":"[y/N]")} `);return s===""?r:s.toLowerCase()==="y"||s.toLowerCase()==="yes"},Se=async(t,e,r,s)=>{process.stderr.write(` ${e}
1
+ import{createRequire as te}from"node:module";import{E as u,j as g,q as y}from"../packem_shared/index.server-CusjRLCh.js";import{w as S,l as N,c as G,J as H,b as J,d as K,v as P,a as ne,j as oe,P as ie}from"../packem_shared/index-uBVnF4ji.js";import{f as pe}from"../packem_shared/giget-CAxjpwew.js";import{p as l}from"./cli-main.js";let re;const se=t=>(re??=te(import.meta.url))(t),R=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,E=t=>{if(typeof R<"u"&&R.versions&&R.versions.node){const[e,r]=R.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return R.getBuiltinModule(t)}return se(t)},{fileURLToPath:ae}=E("node:url"),{createInterface:ce}=E("node:readline"),{mkdtempSync:le,rmSync:fe}=E("node:fs"),{tmpdir:ue}=E("node:os"),{spawnSync:de}=E("node:child_process"),L=[".ts",".mts",".cts",".js",".mjs",".cjs"],me="template.yml",he=[".d",".test",".spec",".config",".bench",".stories"],we=[".d.ts",".d.mts",".d.cts",".js.map",".mjs.map",".cjs.map",".ts.map"],Y=t=>{for(const e of L)if(t.endsWith(e))return t.slice(0,-e.length);return t},$e=t=>{if(we.some(r=>t.endsWith(r))||!L.some(r=>t.endsWith(r)))return!1;const e=Y(t);return!he.some(r=>e.endsWith(r))},U=(t,e)=>{const r=[];if(!N(t))return r;for(const s of G(t,{includeDirs:!1,includeSymlinks:!1,maxDepth:1})){if(!$e(s.name))continue;const n=Y(s.name);r.push({load:()=>ye(s.path),name:n,path:s.path,source:e})}return r},x=(t,e)=>{const r=[];if(!N(t))return r;for(const s of G(t,{includeFiles:!1,includeSymlinks:!1,maxDepth:1})){if(s.path===t)continue;const n=S(s.path,me);N(n)&&r.push({load:()=>ve(s.path,s.name),name:s.name,path:s.path,source:e})}return r},ge=()=>{try{const t=ae(import.meta.url),e=S(H(t),"..","..","templates");return N(e)?e:void 0}catch{return}},q=t=>{const{extraDirectories:e=[],onWarning:r,workspaceRoot:s}=t,n=[...U(S(s,".vis","templates"),"native"),...x(S(s,".vis","templates"),"moon"),...x(S(s,".moon","templates"),"moon")];for(const o of e)n.push(...x(o,"config")),n.push(...U(o,"config"));const i=ge();i&&n.push(...x(i,"builtin"));const a=new Map;for(const o of n){const c=a.get(o.name);if(!c){a.set(o.name,o);continue}r&&r(`Template "${o.name}" exists in multiple sources — using ${c.source} (${c.path}), ignoring ${o.source} (${o.path}).`)}return[...a.values()].sort((o,c)=>o.name.localeCompare(c.name))},ye=async t=>{const{loadNativeTemplate:e}=await import("./loader2.js");return e(t)},ve=async(t,e)=>{const{loadMoonTemplate:r}=await import("./index3.js");return r(t,e)},D=(t,e)=>new Promise(r=>{t.question(e,s=>{r(s.trim())})}),be=async(t,e,r)=>{const s=await D(t,` ${e} ${u(r?"[Y/n]":"[y/N]")} `);return s===""?r:s.toLowerCase()==="y"||s.toLowerCase()==="yes"},Se=async(t,e,r,s)=>{process.stderr.write(` ${e}
2
2
  `);for(const[n,i]of r.entries()){const a=g(y(` ${String(n+1)}.`)),o=i===s?u(" (default)"):"";process.stderr.write(`${a} ${i}${o}
3
- `)}for(;;){const n=await I(t,`
3
+ `)}for(;;){const n=await D(t,`
4
4
  ${u(`Enter choice (1-${String(r.length)}):`)} `);if(n===""&&s!==void 0)return s;const i=Number.parseInt(n,10);if(Number.isInteger(i)&&i>=1&&i<=r.length)return r[i-1];const a=r.find(o=>o===n);if(a)return a;process.stderr.write(` ${u("Invalid choice. Try again.")}
5
5
  `)}},Te=async(t,e,r,s)=>{process.stderr.write(` ${e} ${u("(comma-separated numbers)")}
6
6
  `);for(const[n,i]of r.entries()){const a=g(y(` ${String(n+1)}.`)),o=s.includes(i)?u(" (default)"):"";process.stderr.write(`${a} ${i}${o}
7
- `)}for(;;){const n=await I(t,`
7
+ `)}for(;;){const n=await D(t,`
8
8
  ${u("Enter choices:")} `);if(n===""&&s.length>0)return s;const i=n.split(",").map(a=>Number.parseInt(a.trim(),10)).filter(a=>Number.isInteger(a)&&a>=1&&a<=r.length);if(i.length>0)return i.map(a=>r[a-1]);process.stderr.write(` ${u("Invalid choice. Try again.")}
9
- `)}},Re=t=>` ${u(`${t}:`)} `,je=(t,e)=>e.prompt??t,Ne=t=>Object.entries(t).sort(([e,r],[s,n])=>{const i=r.order??0,a=n.order??0;return i!==a?i-a:e.localeCompare(s)}),U=(t,e)=>{switch(t.type){case"array":return e.split(",").map(r=>r.trim()).filter(Boolean);case"boolean":return e==="true"||e==="1"||e==="yes"||e==="y";case"enum":return t.multiple?e.split(",").map(r=>r.trim()).filter(Boolean):e;case"number":{const r=Number(e);if(Number.isNaN(r))throw new TypeError(`Expected a number, got "${e}"`);return r}default:return e}},B=(t,e,r)=>{if(e.type==="enum"){const s=Array.isArray(r)?r:[r];for(const n of s)if(typeof n!="string"||!e.values.includes(n))throw new Error(`Variable "${t}" must be one of: ${e.values.join(", ")} (got "${String(n)}")`)}},Ee=async t=>{const{defaults:e,interactive:r,overrides:s,variables:n}=t,i={},a=r?ce({input:process.stdin,output:process.stderr}):null;try{for(const[o,c]of Ne(n)){if(Object.hasOwn(s,o)){const w=U(c,s[o]??"");B(o,c,w),i[o]=w;continue}if(e||!r||c.internal){if(c.default!==void 0){B(o,c,c.default),i[o]=c.default;continue}if(c.required)throw new Error(`Required variable "${o}" not provided. Pass --${o}=<value> or remove --defaults.`);continue}const m=je(o,c);let f;if(c.type==="boolean")f=await be(a,m,!!(c.default??!1));else if(c.type==="enum")if(c.multiple){const w=Array.isArray(c.default)?c.default:[];f=await Te(a,m,c.values,w)}else{const w=typeof c.default=="string"?c.default:void 0;f=await Se(a,m,c.values,w)}else{const w=c.default===void 0?"":` (${String(c.default)})`,v=await I(a,Re(`${m}${w}`));if(v===""&&c.default!==void 0)f=c.default;else if(v===""){if(c.required)throw new Error(`Variable "${o}" is required`);continue}else f=U(c,v)}B(o,c,f),i[o]=f}return i}finally{a?.close()}},_e=["git://","npm://","https://","github:","gitlab:","bitbucket:","sourcehut:"],ke=t=>_e.some(e=>t.startsWith(e)),Oe=async(t,e={})=>{const r=e.targetDirectory===void 0,s=e.targetDirectory??le(S(ue(),"vis-generate-")),n=()=>{if(r)try{fe(s,{force:!0,recursive:!0})}catch{}};l.info(`Downloading ${t}…`);try{const i=await pe(t,{auth:e.auth||process.env.GIGET_AUTH||process.env.GITHUB_TOKEN||process.env.GH_TOKEN||void 0,dir:s,force:!0,preferOffline:e.preferOffline});return{cleanup:n,directory:i.dir}}catch(i){n();const a=i instanceof Error?i.message:String(i);throw l.warn(`Failed to download template: ${a}`),i}},z=(t,e="")=>{const r=[];for(const[s,n]of Object.entries(t)){const i=e?`${e}/${s}`:s;typeof n=="string"||Buffer.isBuffer(n)?r.push({content:n,path:i}):n&&typeof n=="object"&&r.push(...z(n,i))}return r},xe=t=>t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`,qe=(t,e)=>{if(P(e))throw new Error(`Refusing to write outside destination: template produced absolute path "${e}".`);const r=S(t,e),s=K(t,r);if(s===".."||s.startsWith(`..${ne}`)||P(s))throw new Error(`Refusing to write outside destination: "${e}" resolves to "${r}" which escapes "${t}".`);return r},Ie=(t,e)=>{L(G(t)),oe(t,e)},De=(t,e,r=!1)=>{const s=typeof t=="string"?[t]:t.commands,n=typeof t=="string"?r:t.silent??r;for(const i of s){n||l.info(`$ ${i}`);const a=de(i,{cwd:e,shell:!0,stdio:n?"ignore":"inherit"});if(a.status!==0)return l.warn(`Script failed (exit ${String(a.status)}): ${i}`),!1}return!0},We=t=>{const e=new Map;for(const r of t){const s=typeof r=="string"?0:r.phase??0,n=e.get(s);n?n.push(r):e.set(s,[r])}return[...e.entries()].sort(([r],[s])=>r-s)},Be=async(t,e)=>{const r={builtins:{dest_dir:e.destination,dest_rel_dir:K(e.workspaceRoot,e.destination)||".",working_dir:e.cwd,workspace_root:e.workspaceRoot},options:e.options},s=await t.produce(r),n=s.files?z(s.files):[],i=s.filesMeta??{},a=[];for(const o of n){const c=qe(e.destination,o.path);a.push({file:o,meta:i[o.path]??{},target:c})}if(e.dryRun){l.info(`${g(y("Plan"))} ${u("(dry-run, no files written)")}`);for(const o of a){const c=Buffer.isBuffer(o.file.content)?o.file.content.length:Buffer.byteLength(o.file.content,"utf8");process.stderr.write(` ${u("write")} ${o.file.path} ${u(`(${xe(c)})`)}
10
- `)}}else{L(e.destination);let o=0,c=0;for(const m of a){const{file:f,meta:w,target:v}=m,D=N(v),b=e.force||w.force===!0;if(D&&!b){l.warn(`Skipped existing file: ${f.path} (use --force or set frontmatter force: true to overwrite)`),c+=1;continue}Ie(v,f.content),o+=1}l.success(`Wrote ${String(o)} file${o===1?"":"s"}${c>0?`, skipped ${String(c)}`:""}`)}if(!e.dryRun&&!e.skipScripts&&s.scripts&&s.scripts.length>0){const o=We(s.scripts);l.info(`Running ${String(s.scripts.length)} script${s.scripts.length===1?"":"s"} across ${String(o.length)} phase${o.length===1?"":"s"}…`);for(const[,c]of o)if((await Promise.all(c.map(m=>Promise.resolve(De(m,e.destination))))).includes(!1))throw new Error("Script failed — aborting.")}if(s.suggestions&&s.suggestions.length>0){process.stderr.write(`
9
+ `)}},je=t=>` ${u(`${t}:`)} `,Re=(t,e)=>e.prompt??t,Ne=t=>Object.entries(t).sort(([e,r],[s,n])=>{const i=r.order??0,a=n.order??0;return i!==a?i-a:e.localeCompare(s)}),V=(t,e)=>{switch(t.type){case"array":return e.split(",").map(r=>r.trim()).filter(Boolean);case"boolean":return e==="true"||e==="1"||e==="yes"||e==="y";case"enum":return t.multiple?e.split(",").map(r=>r.trim()).filter(Boolean):e;case"number":{const r=Number(e);if(Number.isNaN(r))throw new TypeError(`Expected a number, got "${e}"`);return r}default:return e}},B=(t,e,r)=>{if(e.type==="enum"){const s=Array.isArray(r)?r:[r];for(const n of s)if(typeof n!="string"||!e.values.includes(n))throw new Error(`Variable "${t}" must be one of: ${e.values.join(", ")} (got "${String(n)}")`)}},Ee=async t=>{const{defaults:e,interactive:r,overrides:s,variables:n}=t,i={},a=r?ce({input:process.stdin,output:process.stderr}):null;try{for(const[o,c]of Ne(n)){if(Object.hasOwn(s,o)){const $=V(c,s[o]??"");B(o,c,$),i[o]=$;continue}if(e||!r||c.internal){if(c.default!==void 0){B(o,c,c.default),i[o]=c.default;continue}if(c.required)throw new Error(`Required variable "${o}" not provided. Pass --${o}=<value> or remove --defaults.`);continue}const m=Re(o,c);let f;if(c.type==="boolean")f=await be(a,m,!!(c.default??!1));else if(c.type==="enum")if(c.multiple){const $=Array.isArray(c.default)?c.default:[];f=await Te(a,m,c.values,$)}else{const $=typeof c.default=="string"?c.default:void 0;f=await Se(a,m,c.values,$)}else{const $=c.default===void 0?"":` (${String(c.default)})`,v=await D(a,je(`${m}${$}`));if(v===""&&c.default!==void 0)f=c.default;else if(v===""){if(c.required)throw new Error(`Variable "${o}" is required`);continue}else f=V(c,v)}B(o,c,f),i[o]=f}return i}finally{a?.close()}},_e=["git://","npm://","https://","github:","gitlab:","bitbucket:","sourcehut:"],ke=t=>_e.some(e=>t.startsWith(e)),Oe=async(t,e={})=>{const r=e.targetDirectory===void 0,s=e.targetDirectory??le(S(ue(),"vis-generate-")),n=()=>{if(r)try{fe(s,{force:!0,recursive:!0})}catch{}};l.info(`Downloading ${t}…`);try{const i=await pe(t,{auth:e.auth||process.env.GIGET_AUTH||process.env.GITHUB_TOKEN||process.env.GH_TOKEN||void 0,dir:s,force:!0,preferOffline:e.preferOffline});return{cleanup:n,directory:i.dir}}catch(i){n();const a=i instanceof Error?i.message:String(i);throw l.warn(`Failed to download template: ${a}`),i}},z=(t,e="")=>{const r=[];for(const[s,n]of Object.entries(t)){const i=e?`${e}/${s}`:s;typeof n=="string"||Buffer.isBuffer(n)?r.push({content:n,path:i}):n&&typeof n=="object"&&r.push(...z(n,i))}return r},xe=t=>t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`,qe=(t,e)=>{if(P(e))throw new Error(`Refusing to write outside destination: template produced absolute path "${e}".`);const r=S(t,e),s=J(t,r);if(s===".."||s.startsWith(`..${ne}`)||P(s))throw new Error(`Refusing to write outside destination: "${e}" resolves to "${r}" which escapes "${t}".`);return r},De=(t,e)=>{K(H(t)),oe(t,e)},We=(t,e,r=!1)=>{const s=typeof t=="string"?[t]:t.commands,n=typeof t=="string"?r:t.silent??r;for(const i of s){n||l.info(`$ ${i}`);const a=de(i,{cwd:e,shell:!0,stdio:n?"ignore":"inherit"});if(a.status!==0)return l.warn(`Script failed (exit ${String(a.status)}): ${i}`),!1}return!0},Ie=t=>{const e=new Map;for(const r of t){const s=typeof r=="string"?0:r.phase??0,n=e.get(s);n?n.push(r):e.set(s,[r])}return[...e.entries()].sort(([r],[s])=>r-s)},Be=async(t,e)=>{const r={builtins:{dest_dir:e.destination,dest_rel_dir:J(e.workspaceRoot,e.destination)||".",working_dir:e.cwd,workspace_root:e.workspaceRoot},options:e.options},s=await t.produce(r),n=s.files?z(s.files):[],i=s.filesMeta??{},a=[];for(const o of n){const c=qe(e.destination,o.path);a.push({file:o,meta:i[o.path]??{},target:c})}if(e.dryRun){l.info(`${g(y("Plan"))} ${u("(dry-run, no files written)")}`);for(const o of a){const c=Buffer.isBuffer(o.file.content)?o.file.content.length:Buffer.byteLength(o.file.content,"utf8");process.stderr.write(` ${u("write")} ${o.file.path} ${u(`(${xe(c)})`)}
10
+ `)}}else{K(e.destination);let o=0,c=0;for(const m of a){const{file:f,meta:$,target:v}=m,W=N(v),b=e.force||$.force===!0;if(W&&!b){l.warn(`Skipped existing file: ${f.path} (use --force or set frontmatter force: true to overwrite)`),c+=1;continue}De(v,f.content),o+=1}l.success(`Wrote ${String(o)} file${o===1?"":"s"}${c>0?`, skipped ${String(c)}`:""}`)}if(!e.dryRun&&!e.skipScripts&&s.scripts&&s.scripts.length>0){const o=Ie(s.scripts);l.info(`Running ${String(s.scripts.length)} script${s.scripts.length===1?"":"s"} across ${String(o.length)} phase${o.length===1?"":"s"}…`);for(const[,c]of o)if((await Promise.all(c.map(m=>Promise.resolve(We(m,e.destination))))).includes(!1))throw new Error("Script failed — aborting.")}if(s.suggestions&&s.suggestions.length>0){process.stderr.write(`
11
11
  `),l.notice("Next steps:");for(const o of s.suggestions)process.stderr.write(` ${u("•")} ${o}
12
- `)}},Pe=async t=>{let e;try{e=(await t.load()).about?.description}catch{}return{description:e,name:t.name,path:t.path,source:t.source}},Ae=(t,e)=>{const r={default:e.default,name:t,order:e.order,prompt:e.prompt,required:e.required,type:e.type};return e.type==="enum"&&(r.multiple=e.multiple,r.values=e.values),r},Ce=async t=>{const e=await t.load(),r=Object.entries(e.options??{}).sort(([s,n],[i,a])=>{const o=n.order??0,c=a.order??0;return o===c?s.localeCompare(i):o-c}).map(([s,n])=>Ae(s,n));return{description:e.about?.description??"",destination:e.destination,name:t.name,path:t.path,source:t.source,variables:r}},Me=t=>{if(t.length===0){l.info("No templates found."),l.notice("Create one at .vis/templates/<name>.ts (programmatic) or .vis/templates/<name>/ (moon-format with template.yml).");return}l.info("Available templates:");for(const e of t){const r=u(`(${e.source})`);process.stderr.write(` ${g(y(e.name))} ${r}
13
- `)}},Fe=(t,e)=>{const r={},s=[];for(let n=0;n<t.length;n++){const i=t[n];if(!i.startsWith("--")){s.push(i);continue}const a=i.indexOf("=");if(a===-1){const m=i.slice(2);if(m.startsWith("no-"))r[m.slice(3)]="false";else{r[m]="true";const f=t[n+1];f!==void 0&&!f.startsWith("-")&&e?.(`\`--${m} ${f}\` was read as boolean \`--${m}=true\` and \`${f}\` was ignored. For a string value use \`--${m}=${f}\`.`)}continue}const o=i.slice(2,a),c=i.slice(a+1);r[o]=c}return{overrides:r,remaining:s}},He=async t=>{const{createInterface:e}=await import("node:readline"),r=e({input:process.stdin,output:process.stderr});try{process.stderr.write(` ${g(y("vis generate"))} ${u("— pick a template")}
12
+ `)}},Pe=async t=>{let e;try{e=(await t.load()).about?.description}catch{}return{description:e,name:t.name,path:t.path,source:t.source}},Ce=(t,e)=>{const r={default:e.default,name:t,order:e.order,prompt:e.prompt,required:e.required,type:e.type};return e.type==="enum"&&(r.multiple=e.multiple,r.values=e.values),r},Ae=async t=>{const e=await t.load(),r=Object.entries(e.options??{}).sort(([s,n],[i,a])=>{const o=n.order??0,c=a.order??0;return o===c?s.localeCompare(i):o-c}).map(([s,n])=>Ce(s,n));return{description:e.about?.description??"",destination:e.destination,name:t.name,path:t.path,source:t.source,variables:r}},Me=t=>{if(t.length===0){l.info("No templates found."),l.notice("Create one at .vis/templates/<name>.ts (programmatic) or .vis/templates/<name>/ (moon-format with template.yml).");return}l.info("Available templates:");for(const e of t){const r=u(`(${e.source})`);process.stderr.write(` ${g(y(e.name))} ${r}
13
+ `)}},Fe=(t,e)=>{const r={},s=[];for(let n=0;n<t.length;n++){const i=t[n];if(!i.startsWith("--")){s.push(i);continue}const a=i.indexOf("=");if(a===-1){const m=i.slice(2);if(m.startsWith("no-"))r[m.slice(3)]="false";else{r[m]="true";const f=t[n+1];f!==void 0&&!f.startsWith("-")&&e?.(`\`--${m} ${f}\` was read as boolean \`--${m}=true\` and \`${f}\` was ignored. For a string value use \`--${m}=${f}\`.`)}continue}const o=i.slice(2,a),c=i.slice(a+1);r[o]=c}return{overrides:r,remaining:s}},Ue=async t=>{const{createInterface:e}=await import("node:readline"),r=e({input:process.stdin,output:process.stderr});try{process.stderr.write(` ${g(y("vis generate"))} ${u("— pick a template")}
14
14
 
15
15
  `);for(const[s,n]of t.entries()){const i=g(y(` ${String(s+1)}.`));process.stderr.write(`${i} ${n.name} ${u(`(${n.source})`)}
16
16
  `)}return new Promise((s,n)=>{r.question(`
17
- ${u(`Enter choice (1-${String(t.length)}):`)} `,i=>{const a=Number.parseInt(i.trim(),10);Number.isInteger(a)&&a>=1&&a<=t.length?s(t[a-1].name):n(new Error("Invalid choice."))})})}finally{r.close()}},Je=async({argument:t,options:e,rawUnknown:r,visConfig:s,workspaceRoot:n})=>{const i=e.cwd||n||process.cwd(),a=n??i,o=s?.generator,c=Array.isArray(t)?t:t?[t]:[];if(e.list){const p=q({extraDirectories:o?.templates??[],onWarning:d=>{l.warn(d)},workspaceRoot:a});if(e.json){const d=await Promise.all(p.map(h=>Pe(h)));process.stdout.write(`${JSON.stringify(d,null,2)}
18
- `);return}Me(p);return}if(e.describe){const p=c[0];if(!p)throw new Error("`--describe` requires a template name. Run `vis generate --list` to see available templates.");const d=q({extraDirectories:o?.templates??[],onWarning:$=>{l.warn($)},workspaceRoot:a}).find($=>$.name===p);if(!d)throw new Error(`Template "${p}" not found. Run \`vis generate --list\` to see available templates.`);const h=await Ce(d);if(e.json){process.stdout.write(`${JSON.stringify(h,null,2)}
19
- `);return}if(l.info(`Template: ${g(y(h.name))} ${u(`(${h.source})`)}`),h.description&&l.info(h.description),h.destination&&l.info(`Destination: ${u(h.destination)}`),h.variables.length===0)l.info("No variables.");else{l.info("Variables:");for(const $ of h.variables){const O=[$.type];$.required&&O.push("required"),$.default!==void 0&&O.push(`default=${JSON.stringify($.default)}`),$.values&&O.push(`values=${$.values.join("|")}`),process.stderr.write(` ${g(y($.name))} ${u(`(${O.join(", ")})`)}
20
- `)}}return}let m=[...r??[]];if(m.length===0){const p=process.argv.slice(2),d=p.indexOf("--");d!==-1&&(m=p.slice(d+1))}const f=c.indexOf("--"),w=f===-1?[]:c.slice(f+1),v=f===-1?c:c.slice(0,f),{overrides:D}=Fe([...w,...m],p=>{l.warn(p)});let b,_,k;const R=v[0];let W;if(R&&ke(R)){const p=await Oe(R,{auth:o?.auth,preferOffline:!!e.preferOffline||o?.preferOffline});W=p.cleanup;try{const d=q({extraDirectories:[p.directory],workspaceRoot:a}).find(h=>h.path.startsWith(p.directory));if(!d)throw new Error(`Downloaded template at ${p.directory} contains no template.yml or *.ts entrypoint.`);b=await d.load(),_=d.name,k=b.destination}catch(d){throw W(),d}}else{const p=q({extraDirectories:o?.templates??[],onWarning:$=>{l.warn($)},workspaceRoot:a});if(p.length===0)throw new Error("No templates found. Create one at .vis/templates/<name>.ts or .vis/templates/<name>/template.yml.");let d;if(R)d=R;else{if(e.interactive===!1||!process.stdin.isTTY)throw new Error("No template specified. Pass a template name (see `vis generate --list`) or run interactively in a terminal.");d=await He(p)}const h=p.find($=>$.name===d);if(!h)throw new Error(`Template "${d}" not found. Run 'vis generate --list' to see available templates.`);b=await h.load(),_=h.name,k=b.destination}const A=e.to,C=!!e.dryRun,Q=!!e.force,M=!!e.defaults,X=!!e.skipScripts,Z=e.interactive!==!1&&!!process.stdin.isTTY&&!M;let T;A?T=A:k?T=k:T=".";const F=P(T)?T:ie(i,T);l.info(`Template: ${g(y(_))}`),l.info(`Target: ${u(F)}`),process.stderr.write(`
21
- `);const ee=await Ee({defaults:M,interactive:Z,overrides:D,variables:b.options??{}});try{await Be(b,{cwd:i,destination:F,dryRun:C,force:Q,options:ee,skipScripts:X,workspaceRoot:a}),C||(process.stderr.write(`
22
- `),l.success(`Template '${_}' applied.`))}finally{W?.()}};export{Je as default};
17
+ ${u(`Enter choice (1-${String(t.length)}):`)} `,i=>{const a=Number.parseInt(i.trim(),10);Number.isInteger(a)&&a>=1&&a<=t.length?s(t[a-1].name):n(new Error("Invalid choice."))})})}finally{r.close()}},Le=async({argument:t,options:e,rawUnknown:r,visConfig:s,workspaceRoot:n})=>{const i=e.cwd||n||process.cwd(),a=n??i,o=s?.generator,c=Array.isArray(t)?t:t?[t]:[];if(e.list){const p=q({extraDirectories:o?.templates??[],onWarning:d=>{l.warn(d)},workspaceRoot:a});if(e.json){const d=await Promise.all(p.map(h=>Pe(h)));process.stdout.write(`${JSON.stringify(d,null,2)}
18
+ `);return}Me(p);return}if(e.describe){const p=c[0];if(!p)throw new Error("`--describe` requires a template name. Run `vis generate --list` to see available templates.");const d=q({extraDirectories:o?.templates??[],onWarning:w=>{l.warn(w)},workspaceRoot:a}).find(w=>w.name===p);if(!d)throw new Error(`Template "${p}" not found. Run \`vis generate --list\` to see available templates.`);const h=await Ae(d);if(e.json){process.stdout.write(`${JSON.stringify(h,null,2)}
19
+ `);return}if(l.info(`Template: ${g(y(h.name))} ${u(`(${h.source})`)}`),h.description&&l.info(h.description),h.destination&&l.info(`Destination: ${u(h.destination)}`),h.variables.length===0)l.info("No variables.");else{l.info("Variables:");for(const w of h.variables){const O=[w.type];w.required&&O.push("required"),w.default!==void 0&&O.push(`default=${JSON.stringify(w.default)}`),w.values&&O.push(`values=${w.values.join("|")}`),process.stderr.write(` ${g(y(w.name))} ${u(`(${O.join(", ")})`)}
20
+ `)}}return}let m=[...r??[]];if(m.length===0){const p=process.argv.slice(2),d=p.indexOf("--");d!==-1&&(m=p.slice(d+1))}const f=c.indexOf("--"),$=f===-1?[]:c.slice(f+1),v=f===-1?c:c.slice(0,f),{overrides:W}=Fe([...$,...m],p=>{l.warn(p)});let b,_,k;const j=v[0];let I;if(j&&ke(j)){const p=await Oe(j,{auth:o?.auth,preferOffline:!!e.preferOffline||o?.preferOffline});I=p.cleanup;try{const d=q({extraDirectories:[p.directory],workspaceRoot:a}).find(h=>h.path.startsWith(p.directory));if(!d)throw new Error(`Downloaded template at ${p.directory} contains no template.yml or *.ts entrypoint.`);b=await d.load(),_=d.name,k=b.destination}catch(d){throw I(),d}}else{const p=q({extraDirectories:o?.templates??[],onWarning:w=>{l.warn(w)},workspaceRoot:a});if(p.length===0)throw new Error("No templates found. Create one at .vis/templates/<name>.ts or .vis/templates/<name>/template.yml.");let d;if(j)d=j;else{if(e.interactive===!1||!process.stdin.isTTY)throw new Error("No template specified. Pass a template name (see `vis generate --list`) or run interactively in a terminal.");d=await Ue(p)}const h=p.find(w=>w.name===d);if(!h)throw new Error(`Template "${d}" not found. Run 'vis generate --list' to see available templates.`);b=await h.load(),_=h.name,k=b.destination}const C=e.to,A=!!e.dryRun,Q=!!e.force,M=!!e.defaults,X=!!e.skipScripts,Z=e.interactive!==!1&&!!process.stdin.isTTY&&!M;let T;C?T=C:k?T=k:T=".";const F=P(T)?T:ie(i,T);l.info(`Template: ${g(y(_))}`),l.info(`Target: ${u(F)}`),process.stderr.write(`
21
+ `);const ee=await Ee({defaults:M,interactive:Z,overrides:W,variables:b.options??{}});try{await Be(b,{cwd:i,destination:F,dryRun:A,force:Q,options:ee,skipScripts:X,workspaceRoot:a}),A||(process.stderr.write(`
22
+ `),l.success(`Template '${_}' applied.`))}finally{I?.()}};export{Le as default};
@@ -1,4 +1,4 @@
1
- import{z as F,H as P,y as S,m as b,q as I,c as U,d as T}from"../packem_shared/index-DND6ptxQ.js";import _ from"./index.js";import{v as q,g as J}from"./catalog.js";import{n as M}from"../packem_shared/manifests-Da_no4ZH.js";import{Q as C,T as B}from"./cli-main.js";import{s as z}from"../packem_shared/glob-BUjyjdE8-BSrdzgma.js";const H=(e,t)=>{const o=t.replace(/^\.?\//,"");return o===""||o==="."?`/${e}/`:e===""||e==="."?`/${o}`:`/${e}/${o}`},v=(e,t,o=[])=>{const s=[],n=new Set;for(const[r,a]of Object.entries(t?.globalPaths??{}))s.push({owners:a,path:r,source:"project-json"}),n.add(r);for(const[r,a]of Object.entries(e.projects)){const i=a.owners??[];for(const c of i){const f=H(a.root??r,c.path);s.push({channel:c.channel,owners:c.owners,path:f,projectId:r,source:"project-json"}),n.add(f)}}for(const r of o)n.has(r.path)||(s.push(r),n.add(r.path));return(t?.orderBy??"file-source")==="project-id"?s.sort((r,a)=>(r.projectId??"").localeCompare(a.projectId??"")||r.path.localeCompare(a.path)):s.sort((r,a)=>r.path.localeCompare(a.path)),s},K="Update each project's project.json `owners` field and re-run the command.",Q=e=>["# CODEOWNERS — generated by `vis sync codeowners`. Do not edit by hand.",e?`# Re-run with: ${e}`:`# ${K}`,""],W=e=>{const t=[];for(const o of e){const s=o.owners.join(" "),n=o.channel?` # notify: ${o.channel}`:"";t.push(`${o.path} ${s}${n}`)}return t},Y=(e,t={})=>[...Q(t.regenerationCommand),...W(e),""].join(`
1
+ import{z as F,J as P,b as S,w as b,j as I,q as U,d as T}from"../packem_shared/index-uBVnF4ji.js";import _ from"./index.js";import{v as J,k as q}from"./catalog.js";import{n as M}from"../packem_shared/manifests-BDkwiVbh.js";import{Q as C,T as B}from"./cli-main.js";import{s as z}from"../packem_shared/glob-BUjyjdE8-C4M8e02u.js";const K=(e,t)=>{const o=t.replace(/^\.?\//,"");return o===""||o==="."?`/${e}/`:e===""||e==="."?`/${o}`:`/${e}/${o}`},v=(e,t,o=[])=>{const s=[],n=new Set;for(const[r,a]of Object.entries(t?.globalPaths??{}))s.push({owners:a,path:r,source:"project-json"}),n.add(r);for(const[r,a]of Object.entries(e.projects)){const i=a.owners??[];for(const c of i){const f=K(a.root??r,c.path);s.push({channel:c.channel,owners:c.owners,path:f,projectId:r,source:"project-json"}),n.add(f)}}for(const r of o)n.has(r.path)||(s.push(r),n.add(r.path));return(t?.orderBy??"file-source")==="project-id"?s.sort((r,a)=>(r.projectId??"").localeCompare(a.projectId??"")||r.path.localeCompare(a.path)):s.sort((r,a)=>r.path.localeCompare(a.path)),s},H="Update each project's project.json `owners` field and re-run the command.",Q=e=>["# CODEOWNERS — generated by `vis sync codeowners`. Do not edit by hand.",e?`# Re-run with: ${e}`:`# ${H}`,""],W=e=>{const t=[];for(const o of e){const s=o.owners.join(" "),n=o.channel?` # notify: ${o.channel}`:"";t.push(`${o.path} ${s}${n}`)}return t},Y=(e,t={})=>[...Q(t.regenerationCommand),...W(e),""].join(`
2
2
  `),O={begin:"# BEGIN vis-codeowners",end:"# END vis-codeowners"},V=(e,t=O,o={})=>{const s=o.regenerationCommand?`# Generated by vis sync codeowners — re-run with: ${o.regenerationCommand}`:"# Generated by `vis sync codeowners` — do not edit by hand.";return[t.begin,s,...W(e),t.end].join(`
3
3
  `)},X=(e,t,o=O)=>{const s=e.indexOf(o.begin),n=e.indexOf(o.end);if(s!==-1&&n!==-1&&n>s){const a=e.slice(0,s),i=n+o.end.length,c=e.slice(i);return`${a}${t}${c}`}const r=e.replace(/\s+$/u,"");return`${r.length===0?"":`${r}
4
4
 
@@ -57,5 +57,5 @@ ${t}
57
57
  code-owner approval. Enable 'Require approval from Code Owners' on the
58
58
  protected branch (GitLab Premium/Ultimate) for a real merge gate:
59
59
  https://docs.gitlab.com/ee/user/project/codeowners/"
60
- `},he=e=>e.length===0?[]:[{content:pe(e),path:".github/workflows/write-guard.yml"},{content:ue(e),path:".gitlab/write-guard.gitlab-ci.yml"}],L=new Set(["nested-codeowners","package-json-maintainers","project-json"]),A=(e,t,o)=>{const s=new Set,n=[];for(const r of e??[])for(const a of r.split(",")){const i=a.trim();if(i.length===0)continue;if(o&&!o(i))throw new Error(`Unknown codeowners source: "${i}". Known: ${[...L].join(", ")}.`);const c=i;s.has(c)||(s.add(c),n.push(c))}return n.length>0?n:[...t]},ge=e=>L.has(e),G=["codeowners","package-json-fields"],me=(e,t)=>t.some(o=>_(o,e)),we=async(e,t,o,s,n)=>{const r=Object.entries(s.projects).filter(([,i])=>i.restricted===!0).map(([i,c])=>({name:i,root:c.root??i})),a=he(r);if(a.length===0){t.info("No projects flagged `restricted: true` in project.json. Skipping Write Guard.");return}if(n){let i=!1;for(const c of a){const f=b(o,c.path);let h="";try{h=await e.readFile(f,"utf8")}catch(p){if(p.code!=="ENOENT")throw p}h.trim()!==c.content.trim()&&(t.error(`${c.path} is out of date. Run \`vis sync codeowners --write-guard\` to update it.`),i=!0)}i?process.exitCode=1:t.info(`Write Guard CI is up to date (${a.length} files, ${r.length} restricted projects).`);return}for(const i of a){const c=b(o,i.path);T(P(c)),I(c,i.content),t.info(`Wrote ${i.path}`)}t.info(`Write Guard CI scoped to ${r.length} restricted project${r.length===1?"":"s"}.`)},$e=async({fs:e,logger:t,options:o,visConfig:s,workspaceRoot:n})=>{const r=n,{workspace:a}=q(r,s),i=s?.codeowners;o.writeGuard===!0&&await we(e,t,r,a,o.check===!0);const c=A(o.from,i?.sources??["project-json"],ge),f=o.regenerationCommand??i?.regenerationCommand,h=o.preserveBlock===!0||i?.preserveBlock===!0,p=i?.blockMarker??O,$=o.nestedIncludes??i?.nestedIncludes,g=o.out??"CODEOWNERS",w=[];if(c.includes("nested-codeowners")){const m=await ne(r,$,g);for(const j of m)w.push({...j,source:"nested"})}if(c.includes("package-json-maintainers")){const m=ie(a,r);for(const j of m)w.push({...j,source:"maintainers"})}const l=c.includes("project-json")?v(a,i,w):v({projects:{}},i,w);if(l.length===0){t.info("No `owners` entries found in any source. Nothing to sync.");return}const y=b(r,g);let d="";try{d=await e.readFile(y,"utf8")}catch(m){if(m.code!=="ENOENT")throw m}const u={regenerationCommand:f},k=h?X(d,V(l,p,u),p):Y(l,u);if(o.check){if(d.trim()!==k.trim()){t.error(`${y} is out of date. Run \`vis sync codeowners\` to update it.`),process.exitCode=1;return}t.info(`${y} is up to date.`);return}I(y,k),t.info(`Wrote ${l.length} entries to ${y}`)},ke=({logger:e,options:t,visConfig:o,workspaceRoot:s})=>{const n=s,r=o?.editorconfig??!0,a=C(b(n,"package.json"));if(!a){e.error("Could not read root package.json. Nothing to sync."),process.exitCode=1;return}const i=A(t.fields,ae),c=t.ignorePackageName??[],f=t.check===!0,h=(t.format??"human").toLowerCase(),p=t.quiet===!0,$=B(n).filter(d=>d!=="."),g=[];let w=0;for(const d of $){const u=b(n,d,"package.json"),k=C(u);if(!k)continue;const m=typeof k.name=="string"?k.name:void 0;if(m!==void 0&&c.length>0&&me(m,c))continue;w+=1;const j=de(a,k,{fields:i});j.length!==0&&g.push({filePath:u,packageJsonPath:S(n,u),packageName:m,pkg:k,pkgChanges:j})}if(!f)for(const d of g)fe(d.pkg,d.pkgChanges),U(d.filePath,d.pkg,{indent:J(d.filePath,{useEditorconfig:r}),overwrite:!0});const l=g.flatMap(d=>d.pkgChanges.map(u=>({after:u.after,before:u.before,field:u.field,packageJsonPath:d.packageJsonPath,packageName:d.packageName}))),y={changes:l,fields:i,kind:"package-json-fields",mode:f?"check":"write",totalChanges:l.length,totalPackages:w};if(h==="json")process.stdout.write(`${JSON.stringify(y,null,4)}
61
- `);else if(l.length===0)e.info(`All ${w} package${w===1?"":"s"} in sync (fields: ${i.join(", ")}).`);else if(f){if(!p)for(const d of l)e.error(`${d.packageJsonPath}: ${d.field} drifts from root`);e.error(`Found ${l.length} field drift${l.length===1?"":"s"} across ${g.length} package${g.length===1?"":"s"}. Run \`vis sync package-json-fields\` to fix.`)}else{if(!p)for(const d of g)e.info(`${d.packageJsonPath}: synced ${d.pkgChanges.map(u=>u.field).join(", ")}`);e.info(`Synced ${l.length} field${l.length===1?"":"s"} across ${g.length} package${g.length===1?"":"s"}.`)}f&&l.length>0&&(process.exitCode=1)},ve=async e=>{const t=e.argument[0];if(!t)throw new Error(`Missing sync kind. Usage: vis sync <kind> (known kinds: ${G.join(", ")})`);if(!e.workspaceRoot)throw new Error("Could not determine workspace root. Run inside a monorepo.");if(t==="codeowners"){await $e(e);return}if(t==="package-json-fields"){ke(e);return}throw new Error(`Unknown sync kind: "${t}". Known kinds: ${G.join(", ")}.`)};export{ve as default};
60
+ `},he=e=>e.length===0?[]:[{content:pe(e),path:".github/workflows/write-guard.yml"},{content:ue(e),path:".gitlab/write-guard.gitlab-ci.yml"}],L=new Set(["nested-codeowners","package-json-maintainers","project-json"]),A=(e,t,o)=>{const s=new Set,n=[];for(const r of e??[])for(const a of r.split(",")){const i=a.trim();if(i.length===0)continue;if(o&&!o(i))throw new Error(`Unknown codeowners source: "${i}". Known: ${[...L].join(", ")}.`);const c=i;s.has(c)||(s.add(c),n.push(c))}return n.length>0?n:[...t]},ge=e=>L.has(e),G=["codeowners","package-json-fields"],we=(e,t)=>t.some(o=>_(o,e)),me=async(e,t,o,s,n)=>{const r=Object.entries(s.projects).filter(([,i])=>i.restricted===!0).map(([i,c])=>({name:i,root:c.root??i})),a=he(r);if(a.length===0){t.info("No projects flagged `restricted: true` in project.json. Skipping Write Guard.");return}if(n){let i=!1;for(const c of a){const f=b(o,c.path);let h="";try{h=await e.readFile(f,"utf8")}catch(p){if(p.code!=="ENOENT")throw p}h.trim()!==c.content.trim()&&(t.error(`${c.path} is out of date. Run \`vis sync codeowners --write-guard\` to update it.`),i=!0)}i?process.exitCode=1:t.info(`Write Guard CI is up to date (${a.length} files, ${r.length} restricted projects).`);return}for(const i of a){const c=b(o,i.path);T(P(c)),I(c,i.content),t.info(`Wrote ${i.path}`)}t.info(`Write Guard CI scoped to ${r.length} restricted project${r.length===1?"":"s"}.`)},$e=async({fs:e,logger:t,options:o,visConfig:s,workspaceRoot:n})=>{const r=n,{workspace:a}=J(r,s),i=s?.codeowners;o.writeGuard===!0&&await me(e,t,r,a,o.check===!0);const c=A(o.from,i?.sources??["project-json"],ge),f=o.regenerationCommand??i?.regenerationCommand,h=o.preserveBlock===!0||i?.preserveBlock===!0,p=i?.blockMarker??O,$=o.nestedIncludes??i?.nestedIncludes,g=o.out??"CODEOWNERS",m=[];if(c.includes("nested-codeowners")){const w=await ne(r,$,g);for(const y of w)m.push({...y,source:"nested"})}if(c.includes("package-json-maintainers")){const w=ie(a,r);for(const y of w)m.push({...y,source:"maintainers"})}const l=c.includes("project-json")?v(a,i,m):v({projects:{}},i,m);if(l.length===0){t.info("No `owners` entries found in any source. Nothing to sync.");return}const k=b(r,g);let d="";try{d=await e.readFile(k,"utf8")}catch(w){if(w.code!=="ENOENT")throw w}const u={regenerationCommand:f},j=h?X(d,V(l,p,u),p):Y(l,u);if(o.check){if(d.trim()!==j.trim()){t.error(`${k} is out of date. Run \`vis sync codeowners\` to update it.`),process.exitCode=1;return}t.info(`${k} is up to date.`);return}I(k,j),t.info(`Wrote ${l.length} entries to ${k}`)},je=({logger:e,options:t,visConfig:o,workspaceRoot:s})=>{const n=s,r=o?.editorconfig??!0,a=C(b(n,"package.json"));if(!a){e.error("Could not read root package.json. Nothing to sync."),process.exitCode=1;return}const i=A(t.fields,ae),c=t.ignorePackageName??[],f=t.check===!0,h=(t.format??"human").toLowerCase(),p=t.quiet===!0,$=B(n).filter(d=>d!=="."),g=[];let m=0;for(const d of $){const u=b(n,d,"package.json"),j=C(u);if(!j)continue;const w=typeof j.name=="string"?j.name:void 0;if(w!==void 0&&c.length>0&&we(w,c))continue;m+=1;const y=de(a,j,{fields:i});y.length!==0&&g.push({filePath:u,packageJsonPath:S(n,u),packageName:w,pkg:j,pkgChanges:y})}if(!f)for(const d of g)fe(d.pkg,d.pkgChanges),U(d.filePath,d.pkg,{indent:q(d.filePath,{useEditorconfig:r}),overwrite:!0});const l=g.flatMap(d=>d.pkgChanges.map(u=>({after:u.after,before:u.before,field:u.field,packageJsonPath:d.packageJsonPath,packageName:d.packageName}))),k={changes:l,fields:i,kind:"package-json-fields",mode:f?"check":"write",totalChanges:l.length,totalPackages:m};if(h==="json")process.stdout.write(`${JSON.stringify(k,null,4)}
61
+ `);else if(l.length===0)e.info(`All ${m} package${m===1?"":"s"} in sync (fields: ${i.join(", ")}).`);else if(f){if(!p)for(const d of l)e.error(`${d.packageJsonPath}: ${d.field} drifts from root`);e.error(`Found ${l.length} field drift${l.length===1?"":"s"} across ${g.length} package${g.length===1?"":"s"}. Run \`vis sync package-json-fields\` to fix.`)}else{if(!p)for(const d of g)e.info(`${d.packageJsonPath}: synced ${d.pkgChanges.map(u=>u.field).join(", ")}`);e.info(`Synced ${l.length} field${l.length===1?"":"s"} across ${g.length} package${g.length===1?"":"s"}.`)}f&&l.length>0&&(process.exitCode=1)},ve=async e=>{const t=e.argument[0];if(!t)throw new Error(`Missing sync kind. Usage: vis sync <kind> (known kinds: ${G.join(", ")})`);if(!e.workspaceRoot)throw new Error("Could not determine workspace root. Run inside a monorepo.");if(t==="codeowners"){await $e(e);return}if(t==="package-json-fields"){je(e);return}throw new Error(`Unknown sync kind: "${t}". Known kinds: ${G.join(", ")}.`)};export{ve as default};
@@ -1,3 +1,3 @@
1
- import{createRequire as G}from"node:module";import{I as q,j as Q,E as O,V as K,s as T,q as X}from"../packem_shared/index.server-qvZ-cy29.js";import{y as B}from"../packem_shared/index-DND6ptxQ.js";import{P as Y}from"./cli-main.js";import{d as k,f as v,r as Z,a as ee,b as ne,s as te,c as ie,e as re,u as se,h as oe,i as ae,j as le,k as ce,l as de,m as ue,n as fe,v as ge,w as pe,q as me,t as he}from"../packem_shared/watch-loop-DIwSMjlA.js";import{i as c}from"./catalog.js";let H;const U=e=>(H??=G(import.meta.url))(e),w=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,D=e=>{if(typeof w<"u"&&w.versions&&w.versions.node){const[n,t]=w.versions.node.split(".").map(Number);if(n>22||n===22&&t>=3||n===20&&t>=16)return w.getBuiltinModule(e)}return U(e)},{createHash:y}=D("node:crypto"),xe={1:"warning",2:"error"},we={argsCheck:(e,n)=>V(e,n,!1),argsFix:(e,n)=>V(e,n,!0),bin:()=>["pnpm","exec","eslint"],cacheKey:(e,n)=>{const t=["eslint",e.declaredVersion??"unknown",e.configFile??"no-config",n.maxWarnings===void 0?"":`mw=${n.maxWarnings}`,n.quiet?"q":"",...n.extraArgs??[]];return y("sha256").update(t.join("|")).digest("hex").slice(0,16)},detect:(e,n)=>{const t=k(n,c.eslint.packageNames[0]),i=v(e,c.eslint.configFiles);if(!(!t&&!i))return{adapter:"eslint",configFile:i,declared:!!t,declaredVersion:t,root:e}},extensions:["cjs","cts","js","jsx","mjs","mts","ts","tsx","vue"],id:"eslint",kind:"lint",parse:(e,n)=>{if(!e.stdout.trim())return[];let t;try{t=JSON.parse(e.stdout)}catch{return[{adapter:"eslint",file:n.root,fixable:!1,message:`eslint output was not valid JSON (exit ${e.exitCode})`,severity:"error"}]}const i=[];for(const r of t)for(const s of r.messages)i.push({adapter:"eslint",column:s.column,endColumn:s.endColumn,endLine:s.endLine,file:r.filePath,fixable:!!s.fix,line:s.line,message:s.message,ruleId:s.ruleId??void 0,severity:s.fatal?"error":xe[s.severity]??"warning"});return i}},V=(e,n,t)=>{const i=["--format","json","--no-error-on-unmatched-pattern"];return t&&i.push("--fix"),n.quiet&&i.push("--quiet"),typeof n.maxWarnings=="number"&&i.push("--max-warnings",String(n.maxWarnings)),n.extraArgs?.length&&i.push(...n.extraArgs),i.push(...e),i},ke=/^([^:]+):(\d+)(?::(\d+))?\s+([\w/-]+)\s+(.+)$/,ve=e=>{const n=ke.exec(e);if(!n)return;const[,t,i,r,s,a]=n;return{column:r===void 0?void 0:Number(r),file:t,line:Number(i),message:a,ruleId:s}},ye=e=>e.startsWith("/")||/^[a-z]:[\\/]/i.test(e),$e={argsCheck:(e,n)=>J(e,n,!1),argsFix:(e,n)=>J(e,n,!0),bin:()=>["pnpm","exec","markdownlint-cli2"],cacheKey:(e,n)=>{const t=["markdownlint",e.declaredVersion??"unknown",e.configFile??"no-config",n.maxWarnings===void 0?"":`mw=${n.maxWarnings}`,n.quiet?"q":"",...n.extraArgs??[]];return y("sha256").update(t.join("|")).digest("hex").slice(0,16)},detect:(e,n)=>{const t=c.markdownlint.packageNames.map(r=>k(n,r)).find(r=>r!==void 0),i=v(e,c.markdownlint.configFiles);if(!(!t&&!i))return{adapter:"markdownlint",configFile:i,declared:!!t,declaredVersion:t,root:e}},extensions:["markdown","md"],id:"markdownlint",kind:"lint",parse:(e,n)=>{const t=(e.stderr||e.stdout||"").trim();if(!t)return[];const i=[];for(const r of t.split(/\r?\n/)){const s=ve(r.trim());s&&i.push({adapter:"markdownlint",column:s.column,file:ye(s.file)?s.file:`${n.root}/${s.file}`,fixable:!0,line:s.line,message:s.message,ruleId:s.ruleId,severity:"warning"})}return i}},J=(e,n,t)=>{const i=[];return t&&i.push("--fix"),n.extraArgs?.length&&i.push(...n.extraArgs),e.length===0?i.push("**/*.md"):i.push(...e),i},be={advice:"info",error:"error",warning:"warning"},Ae={argsCheck:(e,n)=>R(e,n,!1),argsFix:(e,n)=>R(e,n,!0),bin:()=>["pnpm","exec","oxlint"],cacheKey:(e,n)=>{const t=["oxlint",e.declaredVersion??"unknown",e.configFile??"no-config",n.maxWarnings===void 0?"":`mw=${n.maxWarnings}`,n.quiet?"q":"",...n.extraArgs??[]];return y("sha256").update(t.join("|")).digest("hex").slice(0,16)},detect:(e,n)=>{const t=k(n,c.oxlint.packageNames[0]),i=v(e,c.oxlint.configFiles);if(!(!t&&!i))return{adapter:"oxlint",configFile:i,declared:!!t,declaredVersion:t,root:e}},extensions:["astro","cjs","cts","js","jsx","mjs","mts","svelte","ts","tsx","vue"],id:"oxlint",kind:"lint",parse:(e,n)=>{if(!e.stdout.trim())return[];let t;try{t=JSON.parse(e.stdout)}catch{return[{adapter:"oxlint",file:n.root,fixable:!1,message:`oxlint output was not valid JSON (exit ${e.exitCode})`,severity:"error"}]}const i=[];for(const r of t.diagnostics??[]){const s=r.labels?.[0]?.span;i.push({adapter:"oxlint",column:s?.column,file:r.filename??n.root,fixable:!1,line:s?.line,message:r.message??"",ruleId:r.code,severity:be[r.severity??""]??"warning"})}return i}},R=(e,n,t)=>{const i=["--format","json"];return t&&i.push("--fix"),n.quiet&&i.push("--quiet"),typeof n.maxWarnings=="number"&&i.push(`--max-warnings=${String(n.maxWarnings)}`),n.extraArgs?.length&&i.push(...n.extraArgs),i.push(...e),i},Fe={error:"error",info:"info",style:"info",warning:"warning"},je=e=>e.startsWith("/")||/^[a-z]:[\\/]/i.test(e),Ce=(e,n)=>e?je(e)?e:`${n}/${e}`:n,Se={argsCheck:(e,n)=>L(e,n),argsFix:(e,n)=>L(e,n),bin:()=>["shellcheck"],cacheKey:(e,n)=>{const t=["shellcheck",e.declaredVersion??"unknown",e.configFile??"no-config",n.quiet?"q":"",...n.extraArgs??[]];return y("sha256").update(t.join("|")).digest("hex").slice(0,16)},detect:(e,n)=>{const t=k(n,c.shellcheck.packageNames[0]),i=v(e,c.shellcheck.configFiles);if(!(!t&&!i))return{adapter:"shellcheck",configFile:i,declared:!!t,declaredVersion:t,root:e}},extensions:["bash","ksh","sh"],id:"shellcheck",kind:"lint",parse:(e,n)=>{if(!e.stdout.trim())return[];let t;try{t=JSON.parse(e.stdout)}catch{return[{adapter:"shellcheck",file:n.root,fixable:!1,message:`shellcheck output was not valid JSON (exit ${e.exitCode})`,severity:"error"}]}const i=[];for(const r of t.comments??[])i.push({adapter:"shellcheck",column:r.column,endColumn:r.endColumn,endLine:r.endLine,file:Ce(r.file,n.root),fixable:!!r.fix,line:r.line,message:r.message??"",ruleId:r.code===void 0?void 0:`SC${String(r.code)}`,severity:Fe[r.level??""]??"warning"});return i}},L=(e,n)=>{const t=["--format=json1"];return n.extraArgs?.length&&t.push(...n.extraArgs),t.push(...e),t},qe={error:"error",warning:"warning"},We={argsCheck:(e,n)=>M(e,n,!1),argsFix:(e,n)=>M(e,n,!0),bin:()=>["pnpm","exec","stylelint"],cacheKey:(e,n)=>{const t=["stylelint",e.declaredVersion??"unknown",e.configFile??"no-config",n.maxWarnings===void 0?"":`mw=${n.maxWarnings}`,n.quiet?"q":"",...n.extraArgs??[]];return y("sha256").update(t.join("|")).digest("hex").slice(0,16)},detect:(e,n)=>{const t=k(n,c.stylelint.packageNames[0]),i=v(e,c.stylelint.configFiles);if(!(!t&&!i))return{adapter:"stylelint",configFile:i,declared:!!t,declaredVersion:t,root:e}},extensions:["astro","css","less","sass","scss","svelte","vue"],id:"stylelint",kind:"lint",parse:(e,n)=>{if(!e.stdout.trim())return[];let t;try{t=JSON.parse(e.stdout)}catch{return[{adapter:"stylelint",file:n.root,fixable:!1,message:`stylelint output was not valid JSON (exit ${e.exitCode})`,severity:"error"}]}const i=[];for(const r of t)for(const s of r.warnings??[])i.push({adapter:"stylelint",column:s.column,endColumn:s.endColumn,endLine:s.endLine,file:r.source,fixable:!1,line:s.line,message:s.text??"",ruleId:s.rule,severity:qe[s.severity??""]??"warning"});return i}},M=(e,n,t)=>{const i=["--formatter","json"];return t&&i.push("--fix"),n.quiet&&i.push("--quiet"),typeof n.maxWarnings=="number"&&i.push("--max-warnings",String(n.maxWarnings)),n.extraArgs?.length&&i.push(...n.extraArgs),i.push(...e),i},Ne=[Ae,fe,we,We,ge,$e,Se,pe],Pe=async({logger:e,options:n,visConfig:t,workspaceRoot:i})=>{const r=i??process.cwd(),s=t?.lint,a=Z(Ne,s?.order),j=ee(r,a),d=ne(j,a,"lint").filter(({adapter:l})=>s?.adapters?.[l.id]?.enabled!==!1);if(d.length===0){e.warn("vis lint: no linter detected in this workspace (looked for: oxlint, biome, eslint, stylelint, ruff, markdownlint, shellcheck, deno).");return}const C=l=>{const u=s?.adapters?.[l]?.extraArgs;return u&&u.length>0?[...u]:void 0},$={extraArgs:void 0,maxWarnings:typeof n.maxWarnings=="number"?n.maxWarnings:void 0,quiet:n.quiet??!1},b=_e(n),P=n.fix?"fix":"check";let f;if(n.staged){if(f=te(r),f===void 0)e.warn("vis lint: could not resolve --staged (not a git repo or git unavailable). Falling back to a workspace-wide run.");else if(f.length===0){e.info(q("✓ lint: no staged files"));return}}else if(typeof n.since=="string"&&n.since.length>0){if(f=ie(r,n.since),f===void 0)e.warn(`vis lint: could not resolve --since ${n.since} (not a git repo or unknown ref). Falling back to a workspace-wide run.`);else if(f.length===0){e.info(q(`✓ lint: no files changed since ${n.since}`));return}}const W=b.length>0?b:void 0,E=Y(r,void 0,void 0,!0),S=n.format??"human";S==="human"&&n.output!==void 0&&e.warn("vis lint: --output is ignored for the human format; pass --format json|minimal|sarif|junit|github to redirect findings to a file.");const N=async l=>{const u=l!==void 0&&l.length>0&&W===void 0,m=[];for(const{adapter:o,presence:x}of d){let g;if(u){if(g=se(l,o.extensions),g.length===0)continue}else g=W??l??["."];const F=C(o.id),I={adapter:o,files:g,presence:x};F&&(I.options={...$,extraArgs:F}),m.push(I)}if(m.length===0)return;const z=await oe(m,$,P,{cacheRoot:E}),A=m.map((o,x)=>{const g=z[x],F=o.adapter.parse(g,o.presence);return{adapter:o.adapter,durationMs:g.durationMs,exitCode:g.exitCode,findings:F}}),h=ae(A.map(o=>({adapter:o.adapter.id,durationMs:o.durationMs,exitCode:o.exitCode,findingCount:o.findings.length,findings:o.findings}))),p=S==="human"?void 0:le({cwd:r,target:n.output});try{switch(S){case"github":{p.write(ue({runs:A.map(o=>({findings:o.findings})),workspaceRoot:r}));break}case"json":{p.write(`${JSON.stringify({findings:h.findings,runs:h.runs},null,2)}
2
- `);break}case"junit":{p.write(de({runs:A.map(o=>({adapter:o.adapter.id,durationMs:o.durationMs,findings:o.findings})),workspaceRoot:r}));break}case"minimal":{Oe(h.findings,r,p);break}case"sarif":{p.write(ce({runs:A.map(o=>({adapter:o.adapter.id,findings:o.findings,presence:m.find(x=>x.adapter.id===o.adapter.id)?.presence})),workspaceRoot:r}));break}default:Ie(h.findings,r,e)}}finally{p?.close()}const _=he(h);_!==0&&(process.exitCode=_)};if(n.watch){const l=[...new Set(d.flatMap(({adapter:u})=>u.extensions))];await re({extensions:l,initialFiles:f,label:"lint",log:u=>{e.info(u)},runCycle:N,workspaceRoot:r});return}await N(f)},_e=e=>{const n=e;return[...n._??n.args??[]]},Ie=(e,n,t)=>{if(e.length===0){t.info(q("✓ lint: no findings"));return}const i=me(e);for(const[a,j]of i){t.info(Q(B(n,a)));for(const d of j){const C=Ve(d),$=Je(d.severity),b=d.ruleId?O(` ${d.ruleId}`):"";t.info(` ${O(C)} ${$} ${d.message}${b}`)}}const r=e.filter(a=>a.severity==="error").length,s=e.filter(a=>a.severity==="warning").length;t.info(""),t.info(`${K(`${String(r)} error${r===1?"":"s"}`)}, ${T(`${String(s)} warning${s===1?"":"s"}`)}`)},Oe=(e,n,t)=>{for(const i of e){const r=B(n,i.file),s=i.line??"",a=i.column??"";t.write(`${i.adapter} ${r} ${String(s)} ${String(a)} ${i.severity} ${i.ruleId??""} ${i.message}
1
+ import{createRequire as G}from"node:module";import{I as q,j as Q,E as O,V as K,s as T,q as X}from"../packem_shared/index.server-CusjRLCh.js";import{b as B}from"../packem_shared/index-uBVnF4ji.js";import{P as Y}from"./cli-main.js";import{d as k,f as v,r as Z,a as ee,b as ne,s as te,c as ie,e as re,u as se,h as oe,i as ae,j as le,k as ce,l as de,m as ue,n as fe,v as ge,w as pe,q as me,t as he}from"../packem_shared/watch-loop-Q7UpkVbr.js";import{n as c}from"./catalog.js";let H;const U=e=>(H??=G(import.meta.url))(e),w=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,D=e=>{if(typeof w<"u"&&w.versions&&w.versions.node){const[n,t]=w.versions.node.split(".").map(Number);if(n>22||n===22&&t>=3||n===20&&t>=16)return w.getBuiltinModule(e)}return U(e)},{createHash:y}=D("node:crypto"),xe={1:"warning",2:"error"},we={argsCheck:(e,n)=>V(e,n,!1),argsFix:(e,n)=>V(e,n,!0),bin:()=>["pnpm","exec","eslint"],cacheKey:(e,n)=>{const t=["eslint",e.declaredVersion??"unknown",e.configFile??"no-config",n.maxWarnings===void 0?"":`mw=${n.maxWarnings}`,n.quiet?"q":"",...n.extraArgs??[]];return y("sha256").update(t.join("|")).digest("hex").slice(0,16)},detect:(e,n)=>{const t=k(n,c.eslint.packageNames[0]),i=v(e,c.eslint.configFiles);if(!(!t&&!i))return{adapter:"eslint",configFile:i,declared:!!t,declaredVersion:t,root:e}},extensions:["cjs","cts","js","jsx","mjs","mts","ts","tsx","vue"],id:"eslint",kind:"lint",parse:(e,n)=>{if(!e.stdout.trim())return[];let t;try{t=JSON.parse(e.stdout)}catch{return[{adapter:"eslint",file:n.root,fixable:!1,message:`eslint output was not valid JSON (exit ${e.exitCode})`,severity:"error"}]}const i=[];for(const r of t)for(const s of r.messages)i.push({adapter:"eslint",column:s.column,endColumn:s.endColumn,endLine:s.endLine,file:r.filePath,fixable:!!s.fix,line:s.line,message:s.message,ruleId:s.ruleId??void 0,severity:s.fatal?"error":xe[s.severity]??"warning"});return i}},V=(e,n,t)=>{const i=["--format","json","--no-error-on-unmatched-pattern"];return t&&i.push("--fix"),n.quiet&&i.push("--quiet"),typeof n.maxWarnings=="number"&&i.push("--max-warnings",String(n.maxWarnings)),n.extraArgs?.length&&i.push(...n.extraArgs),i.push(...e),i},ke=/^([^:]+):(\d+)(?::(\d+))?\s+([\w/-]+)\s+(.+)$/,ve=e=>{const n=ke.exec(e);if(!n)return;const[,t,i,r,s,a]=n;return{column:r===void 0?void 0:Number(r),file:t,line:Number(i),message:a,ruleId:s}},ye=e=>e.startsWith("/")||/^[a-z]:[\\/]/i.test(e),be={argsCheck:(e,n)=>J(e,n,!1),argsFix:(e,n)=>J(e,n,!0),bin:()=>["pnpm","exec","markdownlint-cli2"],cacheKey:(e,n)=>{const t=["markdownlint",e.declaredVersion??"unknown",e.configFile??"no-config",n.maxWarnings===void 0?"":`mw=${n.maxWarnings}`,n.quiet?"q":"",...n.extraArgs??[]];return y("sha256").update(t.join("|")).digest("hex").slice(0,16)},detect:(e,n)=>{const t=c.markdownlint.packageNames.map(r=>k(n,r)).find(r=>r!==void 0),i=v(e,c.markdownlint.configFiles);if(!(!t&&!i))return{adapter:"markdownlint",configFile:i,declared:!!t,declaredVersion:t,root:e}},extensions:["markdown","md"],id:"markdownlint",kind:"lint",parse:(e,n)=>{const t=(e.stderr||e.stdout||"").trim();if(!t)return[];const i=[];for(const r of t.split(/\r?\n/)){const s=ve(r.trim());s&&i.push({adapter:"markdownlint",column:s.column,file:ye(s.file)?s.file:`${n.root}/${s.file}`,fixable:!0,line:s.line,message:s.message,ruleId:s.ruleId,severity:"warning"})}return i}},J=(e,n,t)=>{const i=[];return t&&i.push("--fix"),n.extraArgs?.length&&i.push(...n.extraArgs),e.length===0?i.push("**/*.md"):i.push(...e),i},$e={advice:"info",error:"error",warning:"warning"},Ae={argsCheck:(e,n)=>R(e,n,!1),argsFix:(e,n)=>R(e,n,!0),bin:()=>["pnpm","exec","oxlint"],cacheKey:(e,n)=>{const t=["oxlint",e.declaredVersion??"unknown",e.configFile??"no-config",n.maxWarnings===void 0?"":`mw=${n.maxWarnings}`,n.quiet?"q":"",...n.extraArgs??[]];return y("sha256").update(t.join("|")).digest("hex").slice(0,16)},detect:(e,n)=>{const t=k(n,c.oxlint.packageNames[0]),i=v(e,c.oxlint.configFiles);if(!(!t&&!i))return{adapter:"oxlint",configFile:i,declared:!!t,declaredVersion:t,root:e}},extensions:["astro","cjs","cts","js","jsx","mjs","mts","svelte","ts","tsx","vue"],id:"oxlint",kind:"lint",parse:(e,n)=>{if(!e.stdout.trim())return[];let t;try{t=JSON.parse(e.stdout)}catch{return[{adapter:"oxlint",file:n.root,fixable:!1,message:`oxlint output was not valid JSON (exit ${e.exitCode})`,severity:"error"}]}const i=[];for(const r of t.diagnostics??[]){const s=r.labels?.[0]?.span;i.push({adapter:"oxlint",column:s?.column,file:r.filename??n.root,fixable:!1,line:s?.line,message:r.message??"",ruleId:r.code,severity:$e[r.severity??""]??"warning"})}return i}},R=(e,n,t)=>{const i=["--format","json"];return t&&i.push("--fix"),n.quiet&&i.push("--quiet"),typeof n.maxWarnings=="number"&&i.push(`--max-warnings=${String(n.maxWarnings)}`),n.extraArgs?.length&&i.push(...n.extraArgs),i.push(...e),i},Fe={error:"error",info:"info",style:"info",warning:"warning"},je=e=>e.startsWith("/")||/^[a-z]:[\\/]/i.test(e),Ce=(e,n)=>e?je(e)?e:`${n}/${e}`:n,Se={argsCheck:(e,n)=>L(e,n),argsFix:(e,n)=>L(e,n),bin:()=>["shellcheck"],cacheKey:(e,n)=>{const t=["shellcheck",e.declaredVersion??"unknown",e.configFile??"no-config",n.quiet?"q":"",...n.extraArgs??[]];return y("sha256").update(t.join("|")).digest("hex").slice(0,16)},detect:(e,n)=>{const t=k(n,c.shellcheck.packageNames[0]),i=v(e,c.shellcheck.configFiles);if(!(!t&&!i))return{adapter:"shellcheck",configFile:i,declared:!!t,declaredVersion:t,root:e}},extensions:["bash","ksh","sh"],id:"shellcheck",kind:"lint",parse:(e,n)=>{if(!e.stdout.trim())return[];let t;try{t=JSON.parse(e.stdout)}catch{return[{adapter:"shellcheck",file:n.root,fixable:!1,message:`shellcheck output was not valid JSON (exit ${e.exitCode})`,severity:"error"}]}const i=[];for(const r of t.comments??[])i.push({adapter:"shellcheck",column:r.column,endColumn:r.endColumn,endLine:r.endLine,file:Ce(r.file,n.root),fixable:!!r.fix,line:r.line,message:r.message??"",ruleId:r.code===void 0?void 0:`SC${String(r.code)}`,severity:Fe[r.level??""]??"warning"});return i}},L=(e,n)=>{const t=["--format=json1"];return n.extraArgs?.length&&t.push(...n.extraArgs),t.push(...e),t},qe={error:"error",warning:"warning"},We={argsCheck:(e,n)=>M(e,n,!1),argsFix:(e,n)=>M(e,n,!0),bin:()=>["pnpm","exec","stylelint"],cacheKey:(e,n)=>{const t=["stylelint",e.declaredVersion??"unknown",e.configFile??"no-config",n.maxWarnings===void 0?"":`mw=${n.maxWarnings}`,n.quiet?"q":"",...n.extraArgs??[]];return y("sha256").update(t.join("|")).digest("hex").slice(0,16)},detect:(e,n)=>{const t=k(n,c.stylelint.packageNames[0]),i=v(e,c.stylelint.configFiles);if(!(!t&&!i))return{adapter:"stylelint",configFile:i,declared:!!t,declaredVersion:t,root:e}},extensions:["astro","css","less","sass","scss","svelte","vue"],id:"stylelint",kind:"lint",parse:(e,n)=>{if(!e.stdout.trim())return[];let t;try{t=JSON.parse(e.stdout)}catch{return[{adapter:"stylelint",file:n.root,fixable:!1,message:`stylelint output was not valid JSON (exit ${e.exitCode})`,severity:"error"}]}const i=[];for(const r of t)for(const s of r.warnings??[])i.push({adapter:"stylelint",column:s.column,endColumn:s.endColumn,endLine:s.endLine,file:r.source,fixable:!1,line:s.line,message:s.text??"",ruleId:s.rule,severity:qe[s.severity??""]??"warning"});return i}},M=(e,n,t)=>{const i=["--formatter","json"];return t&&i.push("--fix"),n.quiet&&i.push("--quiet"),typeof n.maxWarnings=="number"&&i.push("--max-warnings",String(n.maxWarnings)),n.extraArgs?.length&&i.push(...n.extraArgs),i.push(...e),i},Ne=[Ae,fe,we,We,ge,be,Se,pe],Pe=async({logger:e,options:n,visConfig:t,workspaceRoot:i})=>{const r=i??process.cwd(),s=t?.lint,a=Z(Ne,s?.order),j=ee(r,a),d=ne(j,a,"lint").filter(({adapter:l})=>s?.adapters?.[l.id]?.enabled!==!1);if(d.length===0){e.warn("vis lint: no linter detected in this workspace (looked for: oxlint, biome, eslint, stylelint, ruff, markdownlint, shellcheck, deno).");return}const C=l=>{const u=s?.adapters?.[l]?.extraArgs;return u&&u.length>0?[...u]:void 0},b={extraArgs:void 0,maxWarnings:typeof n.maxWarnings=="number"?n.maxWarnings:void 0,quiet:n.quiet??!1},$=_e(n),P=n.fix?"fix":"check";let f;if(n.staged){if(f=te(r),f===void 0)e.warn("vis lint: could not resolve --staged (not a git repo or git unavailable). Falling back to a workspace-wide run.");else if(f.length===0){e.info(q("✓ lint: no staged files"));return}}else if(typeof n.since=="string"&&n.since.length>0){if(f=ie(r,n.since),f===void 0)e.warn(`vis lint: could not resolve --since ${n.since} (not a git repo or unknown ref). Falling back to a workspace-wide run.`);else if(f.length===0){e.info(q(`✓ lint: no files changed since ${n.since}`));return}}const W=$.length>0?$:void 0,E=Y(r,void 0,void 0,!0),S=n.format??"human";S==="human"&&n.output!==void 0&&e.warn("vis lint: --output is ignored for the human format; pass --format json|minimal|sarif|junit|github to redirect findings to a file.");const N=async l=>{const u=l!==void 0&&l.length>0&&W===void 0,m=[];for(const{adapter:o,presence:x}of d){let g;if(u){if(g=se(l,o.extensions),g.length===0)continue}else g=W??l??["."];const F=C(o.id),I={adapter:o,files:g,presence:x};F&&(I.options={...b,extraArgs:F}),m.push(I)}if(m.length===0)return;const z=await oe(m,b,P,{cacheRoot:E}),A=m.map((o,x)=>{const g=z[x],F=o.adapter.parse(g,o.presence);return{adapter:o.adapter,durationMs:g.durationMs,exitCode:g.exitCode,findings:F}}),h=ae(A.map(o=>({adapter:o.adapter.id,durationMs:o.durationMs,exitCode:o.exitCode,findingCount:o.findings.length,findings:o.findings}))),p=S==="human"?void 0:le({cwd:r,target:n.output});try{switch(S){case"github":{p.write(ue({runs:A.map(o=>({findings:o.findings})),workspaceRoot:r}));break}case"json":{p.write(`${JSON.stringify({findings:h.findings,runs:h.runs},null,2)}
2
+ `);break}case"junit":{p.write(de({runs:A.map(o=>({adapter:o.adapter.id,durationMs:o.durationMs,findings:o.findings})),workspaceRoot:r}));break}case"minimal":{Oe(h.findings,r,p);break}case"sarif":{p.write(ce({runs:A.map(o=>({adapter:o.adapter.id,findings:o.findings,presence:m.find(x=>x.adapter.id===o.adapter.id)?.presence})),workspaceRoot:r}));break}default:Ie(h.findings,r,e)}}finally{p?.close()}const _=he(h);_!==0&&(process.exitCode=_)};if(n.watch){const l=[...new Set(d.flatMap(({adapter:u})=>u.extensions))];await re({extensions:l,initialFiles:f,label:"lint",log:u=>{e.info(u)},runCycle:N,workspaceRoot:r});return}await N(f)},_e=e=>{const n=e;return[...n._??n.args??[]]},Ie=(e,n,t)=>{if(e.length===0){t.info(q("✓ lint: no findings"));return}const i=me(e);for(const[a,j]of i){t.info(Q(B(n,a)));for(const d of j){const C=Ve(d),b=Je(d.severity),$=d.ruleId?O(` ${d.ruleId}`):"";t.info(` ${O(C)} ${b} ${d.message}${$}`)}}const r=e.filter(a=>a.severity==="error").length,s=e.filter(a=>a.severity==="warning").length;t.info(""),t.info(`${K(`${String(r)} error${r===1?"":"s"}`)}, ${T(`${String(s)} warning${s===1?"":"s"}`)}`)},Oe=(e,n,t)=>{for(const i of e){const r=B(n,i.file),s=i.line??"",a=i.column??"";t.write(`${i.adapter} ${r} ${String(s)} ${String(a)} ${i.severity} ${i.ruleId??""} ${i.message}
3
3
  `)}},Ve=e=>e.line===void 0?"":e.column===void 0?String(e.line):`${String(e.line)}:${String(e.column)}`,Je=e=>e==="error"?K("error"):e==="warning"?T("warn "):X("info ");export{Pe as default};