@visulima/vis 1.0.0-alpha.27 → 1.0.0-alpha.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +42 -0
- package/LICENSE.md +3217 -99
- package/dist/bin.js +1 -1
- package/dist/binx.js +1 -1
- package/dist/packem_chunks/bin.js +468 -364
- package/dist/packem_chunks/bloom-status.js +1 -1
- package/dist/packem_chunks/bloom-sync.js +1 -1
- package/dist/packem_chunks/config.js +15 -15
- package/dist/packem_chunks/devtools.js +82 -0
- package/dist/packem_chunks/doctor-probe.js +1 -1
- package/dist/packem_chunks/fix.js +1 -1
- package/dist/packem_chunks/handler.js +1 -1
- package/dist/packem_chunks/handler10.js +1 -2
- package/dist/packem_chunks/handler11.js +5 -1
- package/dist/packem_chunks/handler12.js +1 -5
- package/dist/packem_chunks/handler13.js +27 -1
- package/dist/packem_chunks/handler14.js +5 -27
- package/dist/packem_chunks/handler15.js +1 -5
- package/dist/packem_chunks/handler16.js +1 -1
- package/dist/packem_chunks/handler17.js +1 -1
- package/dist/packem_chunks/handler18.js +1 -1
- package/dist/packem_chunks/handler19.js +1 -1
- package/dist/packem_chunks/handler2.js +1 -1
- package/dist/packem_chunks/handler20.js +5 -1
- package/dist/packem_chunks/handler21.js +2 -5
- package/dist/packem_chunks/handler22.js +2 -2
- package/dist/packem_chunks/handler23.js +1 -2
- package/dist/packem_chunks/handler24.js +1 -1
- package/dist/packem_chunks/handler25.js +5 -1
- package/dist/packem_chunks/handler26.js +1 -5
- package/dist/packem_chunks/handler27.js +3 -1
- package/dist/packem_chunks/handler28.js +1 -3
- package/dist/packem_chunks/handler29.js +7 -1
- package/dist/packem_chunks/handler3.js +4 -4
- package/dist/packem_chunks/handler30.js +32 -6
- package/dist/packem_chunks/handler31.js +3 -33
- package/dist/packem_chunks/handler32.js +8 -3
- package/dist/packem_chunks/handler33.js +1 -1
- package/dist/packem_chunks/handler34.js +4 -4
- package/dist/packem_chunks/handler35.js +11 -3
- package/dist/packem_chunks/handler36.js +3 -22
- package/dist/packem_chunks/handler37.js +21 -60
- package/dist/packem_chunks/handler38.js +61 -3
- package/dist/packem_chunks/handler39.js +3 -6
- package/dist/packem_chunks/handler4.js +5 -5
- package/dist/packem_chunks/handler40.js +6 -24
- package/dist/packem_chunks/handler41.js +24 -153
- package/dist/packem_chunks/handler42.js +153 -10
- package/dist/packem_chunks/handler43.js +6 -6
- package/dist/packem_chunks/handler44.js +10 -708
- package/dist/packem_chunks/handler45.js +708 -24
- package/dist/packem_chunks/handler46.js +24 -322
- package/dist/packem_chunks/handler47.js +322 -48
- package/dist/packem_chunks/handler48.js +48 -3
- package/dist/packem_chunks/handler49.js +3 -27
- package/dist/packem_chunks/handler5.js +7 -7
- package/dist/packem_chunks/handler50.js +21 -190
- package/dist/packem_chunks/handler51.js +194 -33
- package/dist/packem_chunks/handler52.js +34 -0
- package/dist/packem_chunks/handler6.js +1 -1
- package/dist/packem_chunks/handler7.js +1 -1
- package/dist/packem_chunks/handler8.js +1 -1
- package/dist/packem_chunks/handler9.js +1 -1
- package/dist/packem_chunks/heal-accept.js +1 -1
- package/dist/packem_chunks/heal.js +1 -1
- package/dist/packem_chunks/help-command.js +7 -17
- package/dist/packem_chunks/index.js +3 -3
- package/dist/packem_chunks/keys-refresh.js +1 -1
- package/dist/packem_chunks/list.js +2 -2
- package/dist/packem_chunks/loader.js +1 -1
- package/dist/packem_chunks/loader2.js +1 -1
- package/dist/packem_chunks/prune.js +1 -1
- package/dist/packem_chunks/run.js +1 -1
- package/dist/packem_chunks/status.js +1 -1
- package/dist/packem_chunks/sync.js +1 -1
- package/dist/packem_chunks/sync2.js +1 -1
- package/dist/packem_chunks/tripwire.js +2 -2
- package/dist/packem_chunks/verify-lockfile.js +1 -1
- package/dist/packem_shared/Table-3pFgIUZ2-DABgc6rj.js +12 -0
- package/dist/packem_shared/_commonjsHelpers-CLblCigl.js +1 -0
- package/dist/packem_shared/{advisories-xIOdLbAI.js → advisories-DpgSuWDH.js} +1 -1
- package/dist/packem_shared/{affected-shas-Dm7eqcI8.js → affected-shas-BkXXecyi.js} +1 -1
- package/dist/packem_shared/ai-analysis-KP8b5lc0.js +68 -0
- package/dist/packem_shared/{ai-fix-BlYyz5bI.js → ai-fix-CfFWatGY.js} +5 -5
- package/dist/packem_shared/{applyDefaults-KxZkvlp3.js → applyDefaults-DLvOqXGX.js} +1 -1
- package/dist/packem_shared/{build-scripts-3E2pmscY.js → build-scripts-D-ysm_bS.js} +1 -1
- package/dist/packem_shared/{cyclonedx-B3ILsY74.js → cyclonedx-B04lIvwu.js} +3 -3
- package/dist/packem_shared/{dependency-scan-s2MD0vi-.js → dependency-scan-B9wTcLxf.js} +1 -1
- package/dist/packem_shared/{docker-BynKrOLe.js → docker-DxA80dRx.js} +1 -1
- package/dist/packem_shared/{failure-log-B0Uh-65U.js → failure-log-n3j_-w8s.js} +1 -1
- package/dist/packem_shared/index-BDF8gawl.js +29 -0
- package/dist/packem_shared/{index-B_KtN1MB.js → index-BfG9_znI.js} +1 -1
- package/dist/packem_shared/{lifecycle-CJRNbN3x.js → lifecycle-NHIKDiCh.js} +2 -2
- package/dist/packem_shared/lockfile-CoeFxWAv.js +1 -0
- package/dist/packem_shared/lockfile-DAuTDwow.js +1 -0
- package/dist/packem_shared/{manifests-Z3spBpxv.js → manifests-B7wUR3Rk.js} +1 -1
- package/dist/packem_shared/{min-release-age-aEn0x8Vy.js → min-release-age-YyNI7gqV.js} +1 -1
- package/dist/packem_shared/{native-config-sync-DdhTLlKL.js → native-config-sync-CgRIIRZV.js} +2 -2
- package/dist/packem_shared/{osv-bloom-BJhlc_I2.js → osv-bloom-BQSIHt5h.js} +2 -2
- package/dist/packem_shared/pm-runner-Ta_yz2uP.js +1 -0
- package/dist/packem_shared/{provenance-BuiEsWbI.js → provenance-DoEp2uOo.js} +1 -1
- package/dist/packem_shared/{readFileSync-CGmzMUF2-D6rUjGDn.js → readFileSync-4c_c6Qey-6SWMDNdw.js} +1 -1
- package/dist/packem_shared/{registry-keys-pemEkRM9.js → registry-keys-CD1xHavV.js} +1 -1
- package/dist/packem_shared/{resolve-explicit-RgRrUDZv.js → resolve-explicit-DpSc7RN2.js} +1 -1
- package/dist/packem_shared/{runtime-check-DgXsKCsv.js → runtime-check-Cbtb_Utb.js} +1 -1
- package/dist/packem_shared/s1ngularity-CIX7UcT5.js +1 -0
- package/dist/packem_shared/scan-progress-CTVVf9WW.js +2 -0
- package/dist/packem_shared/{selectors-BE2BCnTR.js → selectors-BU8aTRQm.js} +1 -1
- package/dist/packem_shared/{signatures-LYMy8OR5.js → signatures-BHM7cnqB.js} +1 -1
- package/dist/packem_shared/spinner-C8xs6QZv.js +1 -0
- package/dist/packem_shared/spinners-f91Rbo99-Bjf3NcO0.js +1 -0
- package/dist/packem_shared/tabs-xZkm6Y_J.js +1 -0
- package/dist/packem_shared/{toolchain-Jx2lkAYy.js → toolchain-juKl-WgV.js} +1 -1
- package/dist/packem_shared/typosquats-DRKU6d2S.js +1 -0
- package/dist/packem_shared/use-measured-height-Lea6TCVD.js +1 -0
- package/dist/packem_shared/{verify-C8EAHql6.js → verify-DA80ja1b.js} +1 -1
- package/dist/packem_shared/vis-update-app-BCKzlqj8.js +1 -0
- package/dist/packem_shared/{watch-BSVsZ_1I.js → watch-DdR-pFzX.js} +1 -1
- package/dist/packem_shared/{watch-loop-DLlMLg_J.js → watch-loop-C8csFvRU.js} +2 -2
- package/index.d.ts +201 -201
- package/index.js +567 -751
- package/package.json +13 -13
- package/dist/packem_shared/ai-analysis-Csn82p17.js +0 -68
- package/dist/packem_shared/index-efSniSRN.js +0 -29
- package/dist/packem_shared/index.server-B7ETiT4C.js +0 -2
- package/dist/packem_shared/lockfile-BG1HvBzH.js +0 -1
- package/dist/packem_shared/pm-runner-BwX5AL3W.js +0 -1
- package/dist/packem_shared/s1ngularity-Bs9fUf3q.js +0 -1
- package/dist/packem_shared/scan-progress-DjPT66jy.js +0 -2
- package/dist/packem_shared/typosquats-znskIR5j.js +0 -1
- package/dist/packem_shared/use-measured-height-DjYgUOKk.js +0 -1
- package/dist/packem_shared/vis-update-app-qhQPV97i.js +0 -1
|
@@ -1,27 +1,3 @@
|
|
|
1
|
-
var
|
|
2
|
-
|
|
3
|
-
import { defineConfig } from "@visulima/vis/config";
|
|
4
|
-
|
|
5
|
-
export default defineConfig({
|
|
6
|
-
staged: { "*.ts": "eslint --fix" },
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
Coming from lint-staged or nano-staged? Run \`vis migrate lint-staged\` (or \`vis migrate nano-staged\`) to move the config in and remove the legacy files.`)},"resolveConfig"),he=W(e=>{if(typeof e!="object"||e===null)throw new T("Staged config must be an object mapping glob patterns to tasks.");const t=Object.entries(e);if(t.length===0)throw new T("Staged config is empty — at least one glob pattern is required.");for(const[r,s]of t){if(!r||r.trim()==="")throw new T("Staged config keys must be non-empty glob patterns.");Oe(r,s)}return e},"validateConfig"),Oe=W((e,t)=>{if(typeof t=="string"){if(t.trim()==="")throw new T(`Task for "${e}" is an empty string.`);return}if(Array.isArray(t)){if(t.length===0)throw new T(`Task array for "${e}" is empty.`);for(const r of t)Oe(e,r);return}if(typeof t!="function"&&!St(t))throw new T(`Invalid task for "${e}" — expected string, string[], function, or { title, task } object.`)},"validateTask"),St=W(e=>typeof e=="object"&&e!==null&&typeof e.title=="string"&&typeof e.task=="function","isCustomTask");var $t=Object.defineProperty,x=f((e,t)=>$t(e,"name",{value:t,configurable:!0}),"r$2");const pe=2048,g=x(async(e,t)=>{const r=t.input===void 0?void 0:typeof t.input=="string"?t.input:t.input.toString("utf8"),s=await $e("git",[...e],{nodeOptions:{cwd:t.cwd,env:t.env?{...process.env,...t.env}:void 0,stdio:r===void 0?["ignore","pipe","pipe"]:["pipe","pipe","pipe"]},stdin:r}),n=typeof s.exitCode=="number"?s.exitCode:1;if(n!==0&&!t.lenient){const{stderr:i}=s,o=i.length>pe?`${i.slice(0,pe)}…`:i;throw new D(`git ${e.join(" ")} failed with exit code ${n}: ${o.trim()}`,i)}return{exitCode:n,stderr:s.stderr,stdout:s.stdout}},"git"),R=x(async(e,t)=>{const{stdout:r}=await g(e,t);return r.trim()},"gitOut"),xt=x(async e=>{const t=await g(["rev-parse","--is-inside-work-tree"],{cwd:e,lenient:!0});return t.exitCode===0&&t.stdout.trim()==="true"},"isGitRepo"),Ct=x(async e=>R(["rev-parse","--absolute-git-dir"],{cwd:e}),"getGitDirectory"),je=x(async e=>R(["rev-parse","--show-toplevel"],{cwd:e}),"getWorkTree"),ge=x(async e=>R(["write-tree"],{cwd:e}),"writeIndexTree"),It=x(async e=>{const t=await g(["rev-parse","HEAD^{tree}"],{cwd:e,lenient:!0});return t.exitCode===0?t.stdout.trim():""},"headTreeSha"),G={major:2,minor:32},Et=x(e=>{const t=/git version (\d+)\.(\d+)/.exec(e);if(!t)return null;const r=Number.parseInt(t[1]??"",10),s=Number.parseInt(t[2]??"",10);return Number.isNaN(r)||Number.isNaN(s)?null:{major:r,minor:s}},"parseGitVersion"),Mt=x(async e=>{const t=Et(await R(["--version"],{cwd:e}));if(t!==null&&(t.major<G.major||t.major===G.major&&t.minor<G.minor))throw new D(`Git ${G.major}.${G.minor} or newer is required; found ${t.major}.${t.minor}.`)},"assertGitVersion");var Ot=Object.defineProperty,E=f((e,t)=>Ot(e,"name",{value:t,configurable:!0}),"a$2");const jt="ACMR",me=500,At=E(async e=>{const{stdout:t}=await g(["diff-files","--raw","-z"],{cwd:e}),r=t.split("\0").filter(n=>n.length>0),s=[];for(let n=0;n<r.length;n+=1){const i=r[n];if(!i?.startsWith(":"))continue;const o=i.slice(1).split(" "),a=o[3],c=o[4],d=r[n+1];n+=1,c==="A"&&a!==void 0&&/^0+$/.test(a)&&d!==void 0&&s.push(d)}return s},"getIntentToAddPaths"),we=E(async e=>{const{stdout:t}=await g(["ls-files","--others","--exclude-standard","-z"],{cwd:e});return t.split("\0").filter(r=>r.length>0)},"getUntrackedFiles"),Pt=E(async(e,t)=>{if(e.length===0)return;const r=`${e.join("\0")}\0`;await g(["rm","--cached","--quiet","--pathspec-from-file=-","--pathspec-file-nul","--"],{cwd:t.cwd,input:r})},"removeFromIndex"),Rt=E(async e=>{const t=e.diffFilter??jt,r=e.diff===void 0?["diff","--name-only","-z",`--diff-filter=${t}`,"--staged"]:["diff","--name-only","-z",`--diff-filter=${t}`,...e.diff.split(/\s+/).filter(Boolean)],{stdout:s}=await g(r,{cwd:e.cwd}),n=s.split("\0").filter(o=>o.length>0);if(n.length===0)return[];const i=e.workTree??await je(e.cwd);return n.map(o=>He(o)?o:re(i,o))},"getFiles"),Ft=E(async(e,t)=>{if(e.length===0)return null;const r=[];for(let i=0;i<e.length;i+=me){const o=e.slice(i,i+me),{stdout:a}=await g(["diff","--binary","--unified=0","--no-color","--no-ext-diff","--src-prefix=a/","--dst-prefix=b/","--patch","--submodule=short","--",...o],{cwd:t.cwd});a.length>0&&r.push(a)}if(r.length===0)return null;const s=r.join(""),n=s.endsWith(`
|
|
10
|
-
`)?s:`${s}
|
|
11
|
-
`;return Buffer.from(n,"utf8")},"capturePatch"),Nt=E(async e=>{const{stdout:t}=await g(["status","--porcelain=v1","-z"],{cwd:e}),r=t.split("\0"),s=[];for(let n=0;n<r.length;n+=1){const i=r[n];if(i===void 0||i.length<4)continue;const o=i.charAt(0),a=i.charAt(1),c=i.slice(3),d=o==="R"||o==="C"||a==="R"||a==="C";o!==" "&&o!=="?"&&a!==" "&&a!=="?"&&s.push(c),d&&(n+=1)}return s},"getPartiallyStagedFiles"),Gt=E(async(e,t)=>{if(e.length===0)return;const r=`${e.join("\0")}\0`;await g(["checkout","--force","--pathspec-from-file=-","--pathspec-file-nul","--"],{cwd:t.cwd,input:r})},"checkoutPaths"),_t=E(async(e,t)=>{if(await g(["update-index","--again"],{cwd:t.cwd,lenient:!0}),e.length===0)return;const r=`${e.join("\0")}\0`;await g(["add","-u","--pathspec-from-file=-","--pathspec-file-nul","--"],{cwd:t.cwd,input:r})},"updateIndexAgain");var Dt=Object.defineProperty,P=f((e,t)=>Dt(e,"name",{value:t,configurable:!0}),"r$1");const Bt="vis_staged_automatic_backup",Ae=P(()=>`${Bt}-${process.pid}-${Date.now()}-${qe(3).toString("hex")}`,"buildMessage"),Lt=P(async e=>{const t=await R(["stash","create"],{cwd:e});return t.length===0?null:(await g(["stash","store","-m",Ae(),t],{cwd:e}),t)},"createBackupStash"),Ht=P(async e=>{const t=Ae(),{exitCode:r,stdout:s}=await g(["stash","push","--keep-index","--include-untracked","--quiet","-m",t],{cwd:e,lenient:!0});if(r!==0)return null;const n=s.trim();return n.length>0&&/no local changes/i.test(n)?null:R(["rev-parse","stash@{0}"],{cwd:e})},"createHideAllStash"),ae=P(async(e,t)=>{const{exitCode:r,stdout:s}=await g(["reflog","--format=%H %gd","refs/stash"],{cwd:e,lenient:!0});if(r!==0)return null;for(const n of s.split(/\r?\n/)){const[i,o]=n.split(/\s+/,2);if(i===t&&o!==void 0)return o}return null},"findStashRefBySha"),ve=P(async(e,t)=>{if(t===null)return;const r=await ae(e,t);r!==null&&await g(["stash","drop","--quiet",r],{cwd:e})},"dropBackupStash"),qt=P(async(e,t)=>{if(t===null)throw new ue("Backup stash was not found — can't revert working tree.");const r=await ae(e,t);if(r===null)throw new ue(`Backup stash ${t} is no longer reachable — can't revert working tree.`);await g(["reset","--hard","HEAD"],{cwd:e}),await g(["stash","apply","--index","--quiet",r],{cwd:e})},"applyBackupStash"),Ut=P(async(e,t)=>{if(t===null)return;const r=await ae(e,t);r!==null&&await g(["stash","pop","--quiet",r],{cwd:e})},"popHideAllStash");var zt=Object.defineProperty,Vt=f((e,t)=>zt(e,"name",{value:t,configurable:!0}),"l");class Wt{static{f(this,"GitWorkflow")}static{Vt(this,"GitWorkflow")}stagedFiles=[];partiallyStaged=[];workTree="";gitDir="";preTaskIndexTree="";postTaskIndexTree="";headTree="";revertApplied=!1;warnings=[];cwd;options;patch=null;backupStashSha=null;merge=[];shouldStash;shouldHidePartial;shouldHideUnstaged;shouldHideAll;hideAllStashSha=null;intentToAddPaths=[];preTaskUntracked=new Set;constructor(t){this.cwd=t.cwd??process.cwd(),this.options=t,this.shouldStash=t.stash!==!1&&t.diff===void 0,this.shouldHidePartial=t.hidePartiallyStaged!==!1,this.shouldHideUnstaged=t.hideUnstaged===!0,this.shouldHideAll=t.hideAll===!0}async prepare(){if(!await xt(this.cwd))throw new D(`Not a git repository: ${this.cwd}`);await Mt(this.cwd),this.workTree=await je(this.cwd),this.gitDir=await Ct(this.cwd),this.stagedFiles=await Rt({cwd:this.workTree,diff:this.options.diff,diffFilter:this.options.diffFilter,workTree:this.workTree}),this.partiallyStaged=this.stagedFiles.length===0?[]:await Nt(this.workTree),this.snapshotMergeState(),this.intentToAddPaths=await At(this.workTree),this.intentToAddPaths.length>0&&await Pt(this.intentToAddPaths,{cwd:this.workTree}),this.shouldStash?this.backupStashSha=await Lt(this.workTree):this.partiallyStaged.length>0&&this.warnings.push("Running with --no-stash on partially-staged files — unstaged deltas will be captured to a patch, but if re-applying the patch fails after tasks run the changes cannot be recovered."),this.shouldHideAll?this.hideAllStashSha=await Ht(this.workTree):await this.hideUnstagedChanges(),this.preTaskIndexTree=this.stagedFiles.length===0?"":await ge(this.workTree),this.postTaskIndexTree=this.preTaskIndexTree,this.headTree=await It(this.workTree),this.preTaskUntracked=new Set(await we(this.workTree))}async applyModifications({autoStage:t=!1}={}){if(this.stagedFiles.length===0)return;const r=this.stagedFiles.map(s=>B(this.workTree,s));if(await _t(r,{cwd:this.workTree}),t){const s=(await we(this.workTree)).filter(n=>!this.preTaskUntracked.has(n));if(s.length>0){const n=`${s.join("\0")}\0`;await g(["add","--pathspec-from-file=-","--pathspec-file-nul","--"],{cwd:this.workTree,input:n})}}if(this.intentToAddPaths.length>0)try{await g(["add","--intent-to-add","--",...this.intentToAddPaths],{cwd:this.workTree})}catch{}this.postTaskIndexTree=await ge(this.workTree)}indexTreeChanged(){return this.preTaskIndexTree.length>0&&this.postTaskIndexTree.length>0&&this.preTaskIndexTree!==this.postTaskIndexTree}postTaskIndexMatchesHead(){return this.postTaskIndexTree.length>0&&this.headTree.length>0&&this.postTaskIndexTree===this.headTree}async restoreUnstagedChanges(){if(this.revertApplied||this.patch===null||this.shouldHideAll)return;const t=["apply","--whitespace=nowarn","--recount","--unidiff-zero"];let r;try{await g(t,{cwd:this.workTree,input:this.patch});return}catch(s){r=s instanceof D?s.stderr:String(s)}try{await g([...t,"--3way"],{cwd:this.workTree,input:this.patch})}catch(s){const n=s instanceof D&&s.stderr?s.stderr:String(s);throw new fe(`Failed to re-apply unstaged changes after running tasks. Original changes remain in the backup stash — recover with \`git stash list\` and \`git stash apply\`.
|
|
12
|
-
First attempt: ${r??"(no stderr)"}
|
|
13
|
-
Second attempt: ${n}`,{cause:s})}}async revert(){if(this.backupStashSha!==null){try{await qt(this.workTree,this.backupStashSha)}catch(t){throw new fe("Revert failed while restoring the backup stash. Use `git stash list` to recover manually.",{cause:t})}if(await ve(this.workTree,this.backupStashSha),this.intentToAddPaths.length>0)try{await g(["add","--intent-to-add","--",...this.intentToAddPaths],{cwd:this.workTree})}catch{}this.revertApplied=!0}}async cleanup(t){if(this.restoreMergeState(),this.hideAllStashSha!==null)try{await Ut(this.workTree,this.hideAllStashSha)}catch{}t&&this.backupStashSha!==null&&!this.revertApplied&&await ve(this.workTree,this.backupStashSha)}recoveryHint(){return this.backupStashSha===null?null:`Backup stash is preserved (sha ${this.backupStashSha.slice(0,7)}) — restore with: git stash apply --index ${this.backupStashSha}`}async hideUnstagedChanges(){const t=new Set(this.stagedFiles.map(s=>B(this.workTree,s))),r=this.shouldHideUnstaged?[...t]:this.shouldHidePartial?this.partiallyStaged.filter(s=>t.has(s)):[];r.length!==0&&(this.patch=await Ft(r,{cwd:this.workTree}),this.patch!==null&&await Gt(r,{cwd:this.workTree}))}snapshotMergeState(){this.gitDir.length!==0&&(this.merge=["MERGE_HEAD","MERGE_MODE","MERGE_MSG"].map(t=>{const r=re(this.gitDir,t);return oe(r)?{body:De(r),existed:!0,name:t}:{body:null,existed:!1,name:t}}))}restoreMergeState(){if(!(this.gitDir.length===0||this.merge.length===0))for(const t of this.merge){const r=re(this.gitDir,t.name);try{t.existed&&t.body!==null?Be(r,t.body):oe(r)&&Le(r)}catch{}}}}var Kt=Object.defineProperty,K=f((e,t)=>Kt(e,"name",{value:t,configurable:!0}),"r");const Pe=K(e=>e.includes("/"),"isPathStyle"),U=K((e,t)=>t?e.toLowerCase():e,"normalizeForMatch"),Yt=K((e,t,r,s={})=>{const n=Pe(e),i=s.caseInsensitive===!0,o=U(e,i),a=[];for(const c of t){const d=n?B(r,c):Se(c);xe(o,U(d,i))&&a.push(c)}return a},"matchFiles"),Qt=K((e,t,r,s={})=>{if(!t||t.length===0)return[...e];const n=s.caseInsensitive===!0;return e.filter(i=>{for(const o of t){const a=Pe(o)?B(r,i):Se(i),c=U(o,n);if(xe(c,U(a,n)))return!1}return!0})},"applyIgnore");var Jt=Object.defineProperty,L=f((e,t)=>Jt(e,"name",{value:t,configurable:!0}),"g");const Xt=L(e=>{switch(e){case"failed":return"red";case"running":return"cyan";case"skipped":return"yellow";case"success":return"green";default:return"gray"}},"colorForStatus"),ye=L(e=>{if(e==="running")return b(ze,{type:"dots"});const t=e==="failed"?Ce:e==="skipped"?q:e==="success"?Ie:q;return b($,{color:Xt(e),children:t})},"iconForStatus"),ke=L(({state:e,tick:t,verbose:r})=>C(M,{flexDirection:"column",children:[[...e.patterns.values()].map(s=>C(M,{flexDirection:"column",children:[C(M,{children:[ye(s.status),C($,{children:[" ",s.title]})]}),[...s.commands.values()].map(n=>C(M,{flexDirection:"column",marginLeft:2,children:[C(M,{children:[ye(n.status),C($,{children:[" ",n.title," "]}),n.status!=="pending"&&n.status!=="running"?C($,{color:"gray",children:["(",n.durationMs,"ms)"]}):null]}),r&&n.output?b(M,{flexDirection:"column",marginLeft:2,children:n.output.split(/\r?\n/).slice(0,20).map((i,o)=>b($,{color:"gray",children:i},`${n.id}-line-${o}`))}):null,n.status==="failed"&&n.error?b(M,{marginLeft:2,children:b($,{color:"red",children:n.error.message})}):null]},n.id))]},s.id)),e.infoMessages.map((s,n)=>b($,{color:"gray",children:s},`info-${n}`)),e.warnMessages.map((s,n)=>b($,{color:"yellow",children:s},`warn-${n}`)),e.errorMessages.map(({message:s},n)=>b($,{color:"red",children:s},`err-${n}`))]}),"App"),Zt=L((e={})=>{const t=e.verbose===!0,r={errorMessages:[],infoMessages:[],patterns:new Map,started:!1,warnMessages:[]};let s=0;const n=Ue(b(ke,{state:r,tick:s,verbose:t}),{exitOnCtrlC:!1,stdout:process.stderr}),i=L(()=>{s+=1,n.rerender(b(ke,{state:r,tick:s,verbose:t}))},"refresh");return{commandEnd({commandId:o,durationMs:a,error:c,output:d,patternId:u,status:l}){const p=r.patterns.get(u)?.commands.get(o);p&&(p.status=l,p.durationMs=a,p.output=d,p.error=c,i())},commandStart({commandId:o,patternId:a}){const c=r.patterns.get(a)?.commands.get(o);c&&(c.status="running",i())},error({error:o,message:a}){r.errorMessages.push({error:o,message:a}),i()},info({message:o}){r.infoMessages.push(o),i()},patternEnd({patternId:o,status:a}){const c=r.patterns.get(o);c&&(c.status=a,i())},patternStart({patternId:o}){const a=r.patterns.get(o);a&&(a.status="running",i())},start({patterns:o}){r.started=!0;for(const a of o){const c=new Map;for(const d of a.commands)c.set(d.id,{durationMs:0,id:d.id,status:"pending",title:d.title});r.patterns.set(a.id,{commands:c,id:a.id,status:"pending",title:a.title})}i()},async stop(){n.unmount(),await n.waitUntilExit()},warn({message:o}){r.warnMessages.push(o),i()}}},"createInkRenderer");var er=Object.defineProperty,ee=f((e,t)=>er(e,"name",{value:t,configurable:!0}),"a$1");const be=ee((e={})=>{const{quiet:t=!1,verbose:r=!1}=e,s=new Map,n=new Map,i=ee(a=>{t||process.stderr.write(`${a}
|
|
14
|
-
`)},"print"),o=ee(a=>{switch(a){case"failed":return X(Ce);case"running":return J(">");case"skipped":return ce(q);case"success":return Ve(Ie);default:return I(q)}},"iconFor");return{commandEnd({commandId:a,durationMs:c,error:d,output:u,status:l}){const p=n.get(a)??a,w=I(`(${c}ms)`);if(i(` ${o(l)} ${p} ${w}`),l==="failed"&&d&&i(I(d.message)),(l==="failed"||r)&&u&&u.trim().length>0)for(const h of u.split(/\r?\n/))i(` ${I(h)}`)},commandStart({commandId:a}){if(!r)return;const c=n.get(a)??a;i(` ${I("…")} ${c}`)},error({error:a,message:c}){t?process.stderr.write(`${X(c)}
|
|
15
|
-
`):i(X(c)),a?.stack&&(r||!t)&&process.stderr.write(`${I(a.stack)}
|
|
16
|
-
`)},info({message:a}){i(I(a))},patternEnd({patternId:a,status:c}){const d=s.get(a)??a;i(`${o(c)} ${d}`)},patternStart({patternId:a}){const c=s.get(a)??a;i(`${J(">")} ${c}`)},start({patterns:a}){if(a.length===0){i(I("No staged files matched any pattern."));return}const c=new Set(a.flatMap(d=>d.files)).size;i(`${J(">")} Running staged tasks on ${c} file${c===1?"":"s"} across ${a.length} pattern${a.length===1?"":"s"}`);for(const d of a){s.set(d.id,d.title);for(const u of d.commands)n.set(u.id,u.title)}},stop(){},warn({message:a}){i(ce(a))}}},"createPlainRenderer");var tr=Object.defineProperty,rr=f((e,t)=>tr(e,"name",{value:t,configurable:!0}),"t");const sr=rr(async e=>{const{env:t}=process;if(e.debug===!0||e.quiet===!0||t.NODE_ENV==="test"||t.TERM==="dumb"||t.CI!==void 0||!process.stderr.isTTY)return be({quiet:e.quiet,verbose:e.verbose});try{return Zt({verbose:e.verbose})}catch{return be({quiet:e.quiet,verbose:e.verbose})}},"pickRenderer");var nr=Object.defineProperty,_=f((e,t)=>nr(e,"name",{value:t,configurable:!0}),"a");const te=_(e=>typeof e=="object"&&e!==null&&typeof e.title=="string"&&typeof e.task=="function","isCustomTask"),ar=_(async e=>{let t=0,r=0;const s=_(()=>(t+=1,`pattern-${t}`),"nextPatternId"),n=_(()=>(r+=1,`cmd-${r}`),"nextCommandId"),i=_(async(a,c,d)=>{if(typeof a=="string"){d.push({command:a,files:c,id:n(),source:"string",title:a});return}if(Array.isArray(a)){for(const u of a)await i(u,c,d);return}if(typeof a=="function"){const u=await a([...c]);if(typeof u=="string"){d.push({command:u,files:c,id:n(),source:"function",title:u});return}if(Array.isArray(u)){for(const l of u)if(typeof l=="string")d.push({command:l,files:c,id:n(),source:"function",title:l});else if(te(l))d.push({files:c,id:n(),run:l.task,source:"custom",title:l.title});else throw new T("Task function returned an array with an unsupported entry — expected strings or { title, task }.");return}if(te(u)){d.push({files:c,id:n(),run:u.task,source:"custom",title:u.title});return}throw new T("Task function returned an unsupported value — expected string, string[], or { title, task }.")}if(te(a)){d.push({files:c,id:n(),run:a.task,source:"custom",title:a.title});return}throw new T("Unsupported task value — expected string, string[], function, or { title, task }.")},"expandTask"),o=[];for(const[a,c]of Object.entries(e.config)){const d=Yt(a,e.files,e.cwd,{caseInsensitive:e.caseInsensitive===!0});if(d.length===0)continue;const u=e.relative?d.map(p=>B(e.cwd,p)):d,l=[];await i(c,u,l),l.length!==0&&o.push({commands:l,files:u,id:s(),pattern:a,title:`${a} — ${d.length} file${d.length===1?"":"s"}`})}return o},"buildTaskGraph");var ir=Object.defineProperty,Y=f((e,t)=>ir(e,"name",{value:t,configurable:!0}),"c");const or=Y(e=>{const t=[];let r="",s=!1,n=!1;for(let i=0;i<e.length;i+=1){const o=e[i];if(o===void 0)break;if(o==="\\"&&!s&&i+1<e.length){const a=e[i+1];if(a!==void 0){n&&a!=='"'&&a!=="\\"&&(r+=o),r+=a,i+=1;continue}}if(o==='"'&&!s){n=!n;continue}if(o==="'"&&!n){s=!s;continue}if(!s&&!n&&/\s/.test(o)){r.length>0&&(t.push(r),r="");continue}r+=o}if(s||n)throw new T(`Unterminated ${s?"single":"double"} quote in command: ${e}`);return r.length>0&&t.push(r),t},"parseCommandString"),Re=process.platform==="win32"?28e3:131072,cr=Y((e,t,r)=>{const s=[];let n=[],i=t;const o=r<=0?Re:r;for(const a of e){const c=Buffer.byteLength(a)+1;n.length>0&&i+c>o&&(s.push(n),n=[],i=t),n.push(a),i+=c}return n.length>0&&s.push(n),s},"chunkFiles"),dr=Y(async(e,t,r)=>{const s=or(e);if(s.length===0)throw new O(e,"Empty command for staged task.");const[n,...i]=s;if(n===void 0)throw new O(e,"Empty command for staged task.");const o=Buffer.byteLength(n)+i.reduce((u,l)=>u+Buffer.byteLength(l)+1,0),a=cr(t,o,r.maxArgLength??Re),c=Date.now(),d=[];for(const u of a){if(r.signal?.aborted===!0)throw new O(e,"Task aborted by earlier failure.");const l=$e(n,[...i,...u],{nodeOptions:{cwd:r.cwd,env:lr(r.env,r.cwd),killSignal:r.killSignal??"SIGTERM",stdio:["ignore","pipe","pipe"]},...r.signal===void 0?{}:{signal:r.signal}}),p=await l,w=[p.stdout,p.stderr].filter(m=>m.length>0).join(`
|
|
17
|
-
`);w.length>0&&d.push(w);const h=l.process?.signalCode??null;if(l.aborted||h!==null||p.exitCode===void 0){const m=l.aborted?"Task aborted by earlier failure.":h===null?w.trim()||"Task exited without a numeric status code.":`Task killed by signal ${h}.`;throw new O(e,m)}if(p.exitCode!==0)throw new O(e,w.trim()||`Exit code ${p.exitCode} from ${n}`)}return{durationMs:Date.now()-c,output:d.join(`
|
|
18
|
-
`)}},"execCommand"),lr=Y((e,t)=>{const r={...process.env};process.stderr.isTTY&&r.FORCE_COLOR===void 0&&r.NO_COLOR===void 0&&(r.FORCE_COLOR="1");const s=e?{...r,...e}:r;return We(s,t)},"buildTaskEnv");var ur=Object.defineProperty,j=f((e,t)=>ur(e,"name",{value:t,configurable:!0}),"o");const fr=j(async(e,t,r)=>{const s=pr(r.concurrent,e.length),n=[],i=new AbortController;let o=!1,a=0;const c=j(()=>{o||(o=!0,r.continueOnError||i.abort())},"cancel");r.externalSignal&&(r.externalSignal.aborted?c():r.externalSignal.addEventListener("abort",()=>{c()},{once:!0}));const d=j(h=>{for(const m of h.commands)t.commandEnd({commandId:m.id,durationMs:0,patternId:h.id,status:"skipped"})},"emitSkippedCommands"),u=j(async h=>{if(o){d(h),t.patternEnd({patternId:h.id,status:"skipped"});return}t.patternStart({patternId:h.id});let m="success";for(const y of h.commands){if(o){t.commandEnd({commandId:y.id,durationMs:0,patternId:h.id,status:"skipped"}),m=m==="success"?"skipped":m;continue}t.commandStart({commandId:y.id,patternId:h.id});const k=await hr(y,r,i.signal),S=k.status==="failed"&&i.signal.aborted?{...k,status:"skipped"}:k;if(t.commandEnd({commandId:y.id,durationMs:S.durationMs,error:S.error,output:S.output,patternId:h.id,status:S.status}),S.status==="failed"){n.push(y.title),m="failed",c();break}if(S.status==="skipped"){m=m==="success"?"skipped":m;break}}t.patternEnd({patternId:h.id,status:m})},"runOne"),l=j(async()=>{for(;a<e.length;){const h=e[a];a+=1,h&&await u(h)}},"pickNext"),p=[];for(let h=0;h<Math.min(s,e.length);h+=1)p.push(l());await Promise.all(p);const w=r.externalSignal?.aborted===!0;return{failedCommands:n,success:n.length===0&&!w}},"runTasks"),hr=j(async(e,t,r)=>{const s=Date.now();try{if(e.source==="custom"&&e.run)return await e.run([...e.files]),{durationMs:Date.now()-s,status:"success"};if(e.command){const n=await dr(e.command,e.files,{cwd:t.cwd,killSignal:t.killSignal,maxArgLength:t.maxArgLength,signal:r});return{durationMs:n.durationMs,output:t.verbose?n.output:void 0,status:"success"}}return{durationMs:Date.now()-s,error:new O(e.title,"Command has no invocation target."),status:"failed"}}catch(n){const i=n instanceof Error?n:new Error(String(n));return{durationMs:Date.now()-s,error:i,output:i instanceof O?i.message:void 0,status:"failed"}}},"runCommand"),pr=j((e,t)=>{if(e===!1)return 1;if(e===!0){const s=Math.max(1,typeof de=="function"?de():4);return Math.min(Math.max(1,t),s)}const r=Math.floor(e);return r>0?r:1},"concurrencyLimit");var gr=Object.defineProperty,se=f((e,t)=>gr(e,"name",{value:t,configurable:!0}),"u");const mr=!0,wr=se(e=>{try{return!at(e)}catch{return!1}},"detectCaseInsensitive"),vr=se(async(e={})=>{const t=e.cwd??process.cwd(),r=await sr(e),s=await Tt(e);typeof s!="function"&&he(s);const n=new Wt({...e,cwd:t}),i=new AbortController;let o=!1;const a=se(l=>{if(o){process.removeListener("SIGINT",a),process.removeListener("SIGTERM",a),process.kill(process.pid,l);return}o=!0,r.warn({message:`Received ${l} — cancelling staged tasks and restoring state. Press Ctrl+C again to abort.`}),i.abort()},"onInterrupt");process.on("SIGINT",a),process.on("SIGTERM",a);let c={failedCommands:[],ranTasks:!1,success:!0},d=!1,u=!1;try{await n.prepare(),d=!0;for(const k of n.warnings)r.warn({message:k});if(n.stagedFiles.length===0)return e.allowEmpty!==!0&&r.info({message:"No staged files found."}),u=!0,{failedCommands:[],ranTasks:!1,success:!0};const l=wr(t),p=Qt(n.stagedFiles,e.ignore,t,{caseInsensitive:l});if(p.length===0&&n.stagedFiles.length>0)return r.info({message:"Every staged file was excluded by the `ignore` list."}),u=!0,{failedCommands:[],ranTasks:!1,success:!0};const w=typeof s=="function"?he(await s([...p])):s,h=await ar({caseInsensitive:l,config:w,cwd:t,files:p,relative:e.relative});if(r.start({patterns:h}),h.length===0)return r.info({message:"No staged files matched any pattern."}),u=!0,{failedCommands:[],ranTasks:!1,success:!0};const{failedCommands:m,success:y}=await fr(h,r,{concurrent:e.concurrent??mr,continueOnError:e.continueOnError===!0,cwd:t,externalSignal:i.signal,killSignal:e.killSignal,maxArgLength:e.maxArgLength,verbose:e.verbose});if(c={failedCommands:m,ranTasks:!0,success:y},y){if(e.diff===void 0&&(await n.applyModifications({autoStage:e.autoStage===!0}),e.failOnChanges===!0&&n.indexTreeChanged()&&(r.warn({message:"Tasks modified staged content — failing because --fail-on-changes is set."}),c={failedCommands:[...m],ranTasks:!0,success:!1}),e.allowEmpty!==!0&&n.postTaskIndexMatchesHead()))throw new lt("All staged changes were reverted by tasks. Re-stage changes or rerun with --allow-empty.")}else if(e.revert===!0)r.info({message:"Reverting working tree from backup stash."}),await n.revert();else{const k=n.recoveryHint();k&&r.warn({message:k})}return await n.restoreUnstagedChanges(),u=c.success,c}catch(l){const p=l instanceof Error?l.message:String(l),w=l instanceof Error?l:new Error(p);if(r.error({error:w,message:p}),l instanceof A)return{failedCommands:c.failedCommands,ranTasks:c.ranTasks,success:!1};throw l}finally{if(process.removeListener("SIGINT",a),process.removeListener("SIGTERM",a),d)try{await n.cleanup(u)}catch(l){r.error({error:l,message:"Cleanup failed."})}await r.stop()}},"runStaged");var yr=Object.defineProperty,kr=f((e,t)=>yr(e,"name",{value:t,configurable:!0}),"n");const br="VIS_STAGED_CONCURRENT",Te=kr(e=>{const t=e.trim();if(t==="true"||t==="")return!0;if(t==="false")return!1;const r=Number(t);return Number.isNaN(r)?!0:r},"parseConcurrent");var Tr=Object.defineProperty,H=f((e,t)=>Tr(e,"name",{value:t,configurable:!0}),"d");const Sr=H((e,t)=>{const r={};t!==void 0&&(r.config=t);const s=H(v=>e[v]===void 0?void 0:!!e[v],"readBool"),n=H(v=>{const Q=e[v];return typeof Q=="string"&&Q.length>0?Q:void 0},"readString"),i=s("allow-empty");i!==void 0&&(r.allowEmpty=i);const o=s("auto-stage");o!==void 0&&(r.autoStage=o);const a=s("continue-on-error");a!==void 0&&(r.continueOnError=a);const c=s("debug");c!==void 0&&(r.debug=c);const d=s("fail-on-changes");d!==void 0&&(r.failOnChanges=d);const u=s("hide-partially-staged");u!==void 0&&(r.hidePartiallyStaged=u);const l=s("hide-unstaged");l!==void 0&&(r.hideUnstaged=l);const p=s("quiet");p!==void 0&&(r.quiet=p);const w=s("relative");w!==void 0&&(r.relative=w);const h=s("revert");h!==void 0&&(r.revert=h);const m=s("stash");m!==void 0&&(r.stash=m);const y=s("verbose");y!==void 0&&(r.verbose=y);const k=n("cwd");k!==void 0&&(r.cwd=k);const S=n("diff");S!==void 0&&(r.diff=S);const ie=n("diff-filter");if(ie!==void 0&&(r.diffFilter=ie),s("force-kill")===!0&&(r.killSignal="SIGKILL"),e.concurrent===void 0){const v=process.env[br];v!==void 0&&(r.concurrent=Te(v.trim()))}else{const{concurrent:v}=e;r.concurrent=Te(typeof v=="string"?v:typeof v=="number"||typeof v=="boolean"?String(v):"")}return r},"buildRunOptions"),Gr=H(async({options:e,visConfig:t})=>{const r=(t??{}).staged;if(!r)throw new Error(`No "staged" config found in vis.config.ts. Add one:
|
|
19
|
-
|
|
20
|
-
// vis.config.ts
|
|
21
|
-
import { defineConfig } from "@visulima/vis/config";
|
|
22
|
-
|
|
23
|
-
export default defineConfig({
|
|
24
|
-
staged: { '*': 'vis check --fix' },
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
Migrating from lint-staged or nano-staged? Run \`vis migrate lint-staged\` (or \`vis migrate nano-staged\`) to move the config in and remove the legacy files.`);(await vr(Sr(e,r))).success||(process.exitCode=1)},"execute");export{Sr as buildRunOptions,Gr as default};
|
|
1
|
+
var Je=Object.defineProperty;var v=(o,t)=>Je(o,"name",{value:t,configurable:!0});import{createRequire as qe}from"node:module";import{w as p,af as U,a5 as e,a6 as s,n as r,aH as Te,aG as Qe,aI as Ze,aF as et,aJ as tt,aK as rt,k as ot,R as nt,s as it}from"./bin.js";import{A as st}from"../packem_shared/pm-runner-Ta_yz2uP.js";import{b as at}from"./config.js";import{o as lt,M as he,i as dt,$ as ut,K as ht}from"../packem_shared/readFileSync-4c_c6Qey-6SWMDNdw.js";import{g as mt,r as gt}from"../packem_shared/tabs-xZkm6Y_J.js";const Ke=qe(import.meta.url),Q=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Ye=v(o=>{if(typeof Q<"u"&&Q.versions&&Q.versions.node){const[t,i]=Q.versions.node.split(".").map(Number);if(t>22||t===22&&i>=3||t===20&&i>=16)return Q.getBuiltinModule(o)}return Ke(o)},"__cjs_getBuiltinModule"),{writeFileSync:ct}=Ye("node:fs");var ft=Object.defineProperty,pt=v((o,t)=>ft(o,"name",{value:t,configurable:!0}),"a$2"),xt=Object.defineProperty,vt=pt((o,t)=>xt(o,"name",{value:t,configurable:!0}),"r"),jt=Object.defineProperty,bt=vt((o,t)=>jt(o,"name",{value:t,configurable:!0}),"n");const yt=bt((o,{whitespace:t=!0}={})=>o.replace(lt,i=>i.startsWith('"')||i[1]==="*"&&!i.endsWith("*/")?i:t?i.replaceAll(/\S/g," "):""),"stripJsonComments"),V=[{config:{customizations:{vscode:{extensions:["dbaeumer.vscode-eslint","esbenp.prettier-vscode"]}},features:{"ghcr.io/devcontainers/features/git:1":{},"ghcr.io/devcontainers/features/github-cli:1":{}},forwardPorts:[3e3],image:"mcr.microsoft.com/devcontainers/javascript-node:22",name:"Node.js",postCreateCommand:"npm install"},description:"Node.js 22 with Git and GitHub CLI",id:"node",name:"Node.js"},{config:{customizations:{vscode:{extensions:["dbaeumer.vscode-eslint","esbenp.prettier-vscode"]}},features:{"ghcr.io/devcontainers/features/git:1":{},"ghcr.io/devcontainers/features/github-cli:1":{}},forwardPorts:[3e3],image:"mcr.microsoft.com/devcontainers/javascript-node:22",mounts:[{source:"${localWorkspaceFolderBasename}-node_modules",target:"${containerWorkspaceFolder}/node_modules",type:"volume"},{source:"${localWorkspaceFolderBasename}-pnpm-store",target:"/home/node/.local/share/pnpm/store",type:"volume"}],name:"Node.js + pnpm Monorepo",postCreateCommand:"corepack enable && pnpm install",remoteUser:"node",workspaceFolder:"/workspaces/${localWorkspaceFolderBasename}"},description:"Node.js 22 with pnpm, corepack, and optimized volume mounts",id:"node-pnpm",name:"Node.js + pnpm"},{config:{customizations:{vscode:{extensions:["dbaeumer.vscode-eslint","esbenp.prettier-vscode","ms-azuretools.vscode-docker"]}},dockerComposeFile:"docker-compose.yml",forwardPorts:[3e3,5432],name:"Node.js + PostgreSQL",postCreateCommand:"npm install",service:"app",workspaceFolder:"/workspaces/${localWorkspaceFolderBasename}"},description:"Node.js with PostgreSQL via Docker Compose",id:"node-postgres",name:"Node.js + PostgreSQL"},{config:{customizations:{vscode:{extensions:["dbaeumer.vscode-eslint","esbenp.prettier-vscode","ms-azuretools.vscode-docker"]}},features:{"ghcr.io/devcontainers/features/docker-in-docker:2":{},"ghcr.io/devcontainers/features/git:1":{},"ghcr.io/devcontainers/features/github-cli:1":{}},forwardPorts:[3e3],image:"mcr.microsoft.com/devcontainers/javascript-node:22",name:"Node.js + Docker",postCreateCommand:"npm install"},description:"Node.js 22 with Docker-in-Docker for container workflows",id:"node-dind",name:"Node.js + Docker-in-Docker"},{config:{customizations:{vscode:{extensions:["dbaeumer.vscode-eslint","esbenp.prettier-vscode","ms-azuretools.vscode-docker"]}},dockerComposeFile:"docker-compose.yml",features:{"ghcr.io/devcontainers/features/docker-in-docker:2":{}},forwardPorts:[3e3,5432,6379],name:"Full Stack",postCreateCommand:"npm install",service:"app",workspaceFolder:"/workspaces/${localWorkspaceFolderBasename}"},description:"Node.js + PostgreSQL + Redis + Docker via Compose",id:"fullstack",name:"Full Stack"},{config:{customizations:{vscode:{extensions:["ms-python.python","ms-python.vscode-pylance"],settings:{"editor.formatOnSave":!0,"python.defaultInterpreterPath":"/usr/local/bin/python"}}},features:{"ghcr.io/devcontainers/features/git:1":{},"ghcr.io/devcontainers/features/github-cli:1":{},"ghcr.io/devcontainers/features/python:1":{version:"3.12"}},forwardPorts:[8e3],image:"mcr.microsoft.com/devcontainers/python:3.12",name:"Python",postCreateCommand:"pip install -r requirements.txt || true"},description:"Python 3.12 with pip and venv",id:"python",name:"Python"},{config:{customizations:{vscode:{extensions:["golang.go"],settings:{"editor.formatOnSave":!0,"go.toolsManagement.autoUpdate":!0}}},features:{"ghcr.io/devcontainers/features/git:1":{},"ghcr.io/devcontainers/features/go:1":{version:"1.22"}},forwardPorts:[8080],image:"mcr.microsoft.com/devcontainers/go:1.22",name:"Go",postCreateCommand:"go mod download || true"},description:"Go 1.22 development environment",id:"go",name:"Go"},{config:{customizations:{vscode:{extensions:["rust-lang.rust-analyzer","tamasfe.even-better-toml"],settings:{"editor.formatOnSave":!0}}},features:{"ghcr.io/devcontainers/features/git:1":{},"ghcr.io/devcontainers/features/rust:1":{}},image:"mcr.microsoft.com/devcontainers/rust:latest",name:"Rust",postCreateCommand:"cargo build || true"},description:"Rust development with cargo and rust-analyzer",id:"rust",name:"Rust"},{config:{customizations:{vscode:{extensions:["vscjava.vscode-java-pack","vscjava.vscode-maven"]}},features:{"ghcr.io/devcontainers/features/git:1":{},"ghcr.io/devcontainers/features/java:1":{version:"17"}},forwardPorts:[8080],image:"mcr.microsoft.com/devcontainers/java:17",name:"Java",postCreateCommand:"./mvnw install || ./gradlew build || true"},description:"Java 17 with Maven/Gradle support",id:"java",name:"Java"},{config:{customizations:{vscode:{extensions:["ms-azuretools.vscode-docker","ms-kubernetes-tools.vscode-kubernetes-tools","hashicorp.terraform"]}},features:{"ghcr.io/devcontainers/features/aws-cli:1":{},"ghcr.io/devcontainers/features/azure-cli:1":{},"ghcr.io/devcontainers/features/docker-in-docker:2":{},"ghcr.io/devcontainers/features/kubectl-helm-minikube:1":{},"ghcr.io/devcontainers/features/terraform:1":{}},image:"mcr.microsoft.com/devcontainers/base:ubuntu",name:"DevOps"},description:"Docker, Kubernetes, Terraform, AWS & Azure CLIs",id:"devops",name:"DevOps"},{config:{features:{"ghcr.io/devcontainers/features/common-utils:2":{}},image:"mcr.microsoft.com/devcontainers/base:ubuntu",name:"Minimal",remoteUser:"vscode"},description:"Bare Ubuntu with common utilities",id:"minimal",name:"Minimal"},{config:{image:"mcr.microsoft.com/devcontainers/base:ubuntu",name:"Custom"},description:"Minimal Ubuntu base - configure from scratch",id:"custom",name:"Custom (Blank)"}];var wt=Object.defineProperty,Pe=v((o,t)=>wt(o,"name",{value:t,configurable:!0}),"s$7");const Ct=Pe(o=>{const t=he(o,".devcontainer","devcontainer.json");if(!dt(t))return null;const i=ut(t),c=yt(i),a=c!==i;let n;try{n=JSON.parse(c)}catch(l){const m=l instanceof Error?l.message:String(l);throw new Error(`Failed to parse ${t}: ${m}`,{cause:l})}return{config:n,hadComments:a}},"readDevcontainerJson"),St=Pe((o,t,i)=>{const c=i?ht(i):he(o,".devcontainer"),a=i??he(c,"devcontainer.json");at(c),ct(a,`${JSON.stringify(t,null,2)}
|
|
2
|
+
`,"utf8")},"writeDevcontainerJson");var kt=Object.defineProperty,Et=v((o,t)=>kt(o,"name",{value:t,configurable:!0}),"s$6");const It={bun:[{source:"${localWorkspaceFolderBasename}-node_modules",target:"${containerWorkspaceFolder}/node_modules",type:"volume"},{source:"${localWorkspaceFolderBasename}-bun-cache",target:"/home/node/.bun/install/cache",type:"volume"}],deno:[{source:"${localWorkspaceFolderBasename}-deno-cache",target:"/home/node/.cache/deno",type:"volume"}],npm:[{source:"${localWorkspaceFolderBasename}-node_modules",target:"${containerWorkspaceFolder}/node_modules",type:"volume"},{source:"${localWorkspaceFolderBasename}-npm-cache",target:"/home/node/.npm",type:"volume"}],pnpm:[{source:"${localWorkspaceFolderBasename}-node_modules",target:"${containerWorkspaceFolder}/node_modules",type:"volume"},{source:"${localWorkspaceFolderBasename}-pnpm-store",target:"/home/node/.local/share/pnpm/store",type:"volume"}],yarn:[{source:"${localWorkspaceFolderBasename}-node_modules",target:"${containerWorkspaceFolder}/node_modules",type:"volume"},{source:"${localWorkspaceFolderBasename}-yarn-cache",target:"/home/node/.yarn/cache",type:"volume"}]},Tt=[{featureMatch:"docker-in-docker",mounts:[]},{featureMatch:"docker-outside-of-docker",mounts:[{source:"/var/run/docker.sock",target:"/var/run/docker.sock",type:"bind"}]},{featureMatch:"/features/git:",mounts:[{source:"${localWorkspaceFolderBasename}-git-config",target:"/home/node/.gitconfig",type:"volume"}]}],je=Et((o,t,i)=>{const c=[],a=new Set(i.map(l=>typeof l=="string"?l:l.target));if(o)for(const l of It[o])a.has(l.target)||c.push(l);const n=Object.keys(t);for(const{featureMatch:l,mounts:m}of Tt)if(n.some(g=>g.includes(l)))for(const g of m)a.has(g.target)||c.push(g);return c},"getSuggestedMounts"),N=["general","features","ports","lifecycle","extensions","environment","mounts","compose"];var Pt=Object.defineProperty,oe=v((o,t)=>Pt(o,"name",{value:t,configurable:!0}),"c$2");const Z=oe(o=>structuredClone(o),"deepClone");class Dt{static{v(this,"DevcontainerStore")}static{oe(this,"DevcontainerStore")}#o=new Set;#e;constructor(t,i,c=null){const a=t===null,n=t??{name:""},l=Z(n);this.#e={config:l,detectedPm:c,extensionSearch:"",featureSearch:"",fieldEditing:!1,fieldIndex:0,hadComments:i,isDirty:!1,mode:a?"create":"edit",originalConfig:a?null:Z(n),section:"general",showTemplateSelector:a,suggestedMounts:je(c,l.features??{},l.mounts??[]),templateIndex:0}}getSnapshot=oe(()=>this.#e,"getSnapshot");subscribe=oe(t=>(this.#o.add(t),()=>{this.#o.delete(t)}),"subscribe");setSection(t){t!==this.#e.section&&this.#t({...this.#e,fieldEditing:!1,fieldIndex:0,section:t})}nextSection(){const t=(N.indexOf(this.#e.section)+1)%N.length;this.setSection(N[t])}previousSection(){const t=(N.indexOf(this.#e.section)-1+N.length)%N.length;this.setSection(N[t])}setFieldIndex(t){t!==this.#e.fieldIndex&&this.#t({...this.#e,fieldIndex:Math.max(0,t)})}setFieldEditing(t){t!==this.#e.fieldEditing&&this.#t({...this.#e,fieldEditing:t})}setTemplateIndex(t){const i=Math.max(0,Math.min(t,V.length-1));i!==this.#e.templateIndex&&this.#t({...this.#e,templateIndex:i})}applyTemplate(t){const i=V.find(c=>c.id===t);i&&this.#t(this.#r({...this.#e,config:Z(i.config),isDirty:!0,showTemplateSelector:!1}))}dismissTemplateSelector(){this.#t({...this.#e,showTemplateSelector:!1})}updateConfig(t){this.#t({...this.#e,config:{...this.#e.config,...t},isDirty:!0})}toggleFeature(t){const i={...this.#e.config.features};i[t]===void 0?i[t]={}:delete i[t],this.#t(this.#r({...this.#e,config:{...this.#e.config,features:i},isDirty:!0}))}setFeatureSearch(t){this.#t({...this.#e,featureSearch:t,fieldIndex:0})}addPort(t){const i=this.#e.config.forwardPorts??[];if(i.includes(t))return;const c=[...i,t];this.#t({...this.#e,config:{...this.#e.config,forwardPorts:c},isDirty:!0})}removePort(t){const i=[...this.#e.config.forwardPorts??[]];i.splice(t,1),this.#t({...this.#e,config:{...this.#e.config,forwardPorts:i.length>0?i:void 0},isDirty:!0})}toggleExtension(t){const i={...this.#e.config.customizations},c={...i.vscode},a=[...c.extensions??[]],n=a.indexOf(t);n===-1?a.push(t):a.splice(n,1),c.extensions=a.length>0?a:void 0,i.vscode=c.extensions||c.settings?c:void 0,this.#t({...this.#e,config:{...this.#e.config,customizations:i.vscode||i.jetbrains?i:void 0},isDirty:!0})}setExtensionSearch(t){this.#t({...this.#e,extensionSearch:t,fieldIndex:0})}addEnvVar(t,i,c){const a=t==="container"?"containerEnv":"remoteEnv",n={...this.#e.config[a],[i]:c};this.#t({...this.#e,config:{...this.#e.config,[a]:n},isDirty:!0})}removeEnvVar(t,i){const c=t==="container"?"containerEnv":"remoteEnv",a={...this.#e.config[c]};delete a[i],this.#t({...this.#e,config:{...this.#e.config,[c]:Object.keys(a).length>0?a:void 0},isDirty:!0})}addMount(t){const i=[...this.#e.config.mounts??[],t];this.#t(this.#r({...this.#e,config:{...this.#e.config,mounts:i},isDirty:!0}))}removeMount(t){const i=[...this.#e.config.mounts??[]];i.splice(t,1),this.#t(this.#r({...this.#e,config:{...this.#e.config,mounts:i.length>0?i:void 0},isDirty:!0}))}applySuggestedMounts(){if(this.#e.suggestedMounts.length===0)return;const t=[...this.#e.config.mounts??[],...this.#e.suggestedMounts];this.#t(this.#r({...this.#e,config:{...this.#e.config,mounts:t},isDirty:!0}))}setLifecycleCommand(t,i){this.#t({...this.#e,config:{...this.#e.config,[t]:i||void 0},isDirty:!0})}markClean(){this.#t({...this.#e,isDirty:!1,originalConfig:Z(this.#e.config)})}getJsonPreview(){return JSON.stringify(this.#n(),null,2)}cleanConfig(){return this.#n()}#n(){const t=Z(this.#e.config);for(const[i,c]of Object.entries(t))(c===""||c===void 0)&&delete t[i];return t.build&&(t.build.dockerfile===""&&delete t.build.dockerfile,t.build.context===""&&delete t.build.context,t.build.args&&Object.keys(t.build.args).length===0&&delete t.build.args,Object.keys(t.build).length===0&&delete t.build),t.forwardPorts?.length===0&&delete t.forwardPorts,t.mounts?.length===0&&delete t.mounts,t.runServices?.length===0&&delete t.runServices,t.capAdd?.length===0&&delete t.capAdd,t.securityOpt?.length===0&&delete t.securityOpt,t.features&&Object.keys(t.features).length===0&&delete t.features,t.customizations?.vscode?.extensions?.length===0&&delete t.customizations.vscode.extensions,t.customizations?.vscode&&Object.keys(t.customizations.vscode).length===0&&delete t.customizations.vscode,t.customizations&&Object.keys(t.customizations).length===0&&delete t.customizations,t.containerEnv&&Object.keys(t.containerEnv).length===0&&delete t.containerEnv,t.remoteEnv&&Object.keys(t.remoteEnv).length===0&&delete t.remoteEnv,t}#r(t){return{...t,suggestedMounts:je(t.detectedPm,t.config.features??{},t.config.mounts??[])}}#t(t){this.#e=t;for(const i of this.#o)try{i()}catch{}}}const be=[{category:"linting",description:"Integrates ESLint into the editor",id:"dbaeumer.vscode-eslint",name:"ESLint"},{category:"linting",description:"Stylelint CSS/SCSS linting",id:"stylelint.vscode-stylelint",name:"Stylelint"},{category:"formatting",description:"Opinionated code formatter",id:"esbenp.prettier-vscode",name:"Prettier"},{category:"formatting",description:"EditorConfig file support",id:"editorconfig.editorconfig",name:"EditorConfig"},{category:"formatting",description:"Fast Rust-based formatter and linter",id:"biomejs.biome",name:"Biome"},{category:"language",description:"Rich TypeScript and JavaScript support",id:"ms-vscode.vscode-typescript-next",name:"TypeScript Nightly"},{category:"language",description:"Tailwind CSS IntelliSense",id:"bradlc.vscode-tailwindcss",name:"Tailwind CSS"},{category:"language",description:"YAML language support with schemas",id:"redhat.vscode-yaml",name:"YAML"},{category:"language",description:"TOML language support",id:"tamasfe.even-better-toml",name:"TOML"},{category:"language",description:"Dockerfile and Docker Compose support",id:"ms-azuretools.vscode-docker",name:"Docker"},{category:"language",description:"Python language support with Pylance",id:"ms-python.python",name:"Python"},{category:"language",description:"Go language support",id:"golang.go",name:"Go"},{category:"language",description:"Rust language support via rust-analyzer",id:"rust-lang.rust-analyzer",name:"rust-analyzer"},{category:"git",description:"Git supercharged: blame, history, stash, etc.",id:"eamodio.gitlens",name:"GitLens"},{category:"git",description:"GitHub Pull Requests and Issues",id:"github.vscode-pull-request-github",name:"GitHub PR"},{category:"testing",description:"Vitest test explorer integration",id:"vitest.explorer",name:"Vitest Explorer"},{category:"testing",description:"Jest test runner and assertions",id:"orta.vscode-jest",name:"Jest"},{category:"debugging",description:"REST client for testing APIs",id:"humao.rest-client",name:"REST Client"},{category:"debugging",description:"Error Lens: inline error highlighting",id:"usernamehw.errorlens",name:"Error Lens"},{category:"other",description:"Intelligent code completion with AI",id:"github.copilot",name:"GitHub Copilot"},{category:"other",description:"Path autocompletion for imports",id:"christian-kohler.path-intellisense",name:"Path Intellisense"},{category:"other",description:"Import cost display in editor",id:"wix.vscode-import-cost",name:"Import Cost"},{category:"other",description:"Todo Tree: highlight and list TODOs",id:"gruntfuggly.todo-tree",name:"Todo Tree"}],ye=[{category:"language",description:"Node.js runtime via nvm with optional pnpm/yarn",id:"ghcr.io/devcontainers/features/node:1",name:"Node.js"},{category:"language",description:"Python runtime with pip and optional tools",id:"ghcr.io/devcontainers/features/python:1",name:"Python"},{category:"language",description:"Go compiler and tools",id:"ghcr.io/devcontainers/features/go:1",name:"Go"},{category:"language",description:"Rust toolchain via rustup",id:"ghcr.io/devcontainers/features/rust:1",name:"Rust"},{category:"language",description:"Java runtime and JDK via SDKMAN",id:"ghcr.io/devcontainers/features/java:1",name:"Java"},{category:"language",description:".NET SDK and runtime",id:"ghcr.io/devcontainers/features/dotnet:2",name:".NET"},{category:"tool",description:"Common utilities: zsh, Oh My Zsh, git, curl, etc.",id:"ghcr.io/devcontainers/features/common-utils:2",name:"Common Utilities"},{category:"tool",description:"Git version control",id:"ghcr.io/devcontainers/features/git:1",name:"Git"},{category:"tool",description:"Git Large File Storage support",id:"ghcr.io/devcontainers/features/git-lfs:1",name:"Git LFS"},{category:"tool",description:"GitHub CLI for repository management",id:"ghcr.io/devcontainers/features/github-cli:1",name:"GitHub CLI"},{category:"tool",description:"Run Docker containers inside the dev container",id:"ghcr.io/devcontainers/features/docker-in-docker:2",name:"Docker-in-Docker"},{category:"tool",description:"Access host Docker daemon from inside the container",id:"ghcr.io/devcontainers/features/docker-outside-of-docker:1",name:"Docker-from-Docker"},{category:"tool",description:"kubectl, Helm, and Minikube for Kubernetes",id:"ghcr.io/devcontainers/features/kubectl-helm-minikube:1",name:"Kubernetes Tools"},{category:"tool",description:"Infrastructure as code with Terraform",id:"ghcr.io/devcontainers/features/terraform:1",name:"Terraform"},{category:"tool",description:"Nix package manager",id:"ghcr.io/devcontainers/features/nix:1",name:"Nix"},{category:"tool",description:"SSH server for remote connections to the container",id:"ghcr.io/devcontainers/features/sshd:1",name:"SSH Server"},{category:"cloud",description:"Amazon Web Services CLI v2",id:"ghcr.io/devcontainers/features/aws-cli:1",name:"AWS CLI"},{category:"cloud",description:"Microsoft Azure CLI",id:"ghcr.io/devcontainers/features/azure-cli:1",name:"Azure CLI"},{category:"cloud",description:"Google Cloud Platform CLI",id:"ghcr.io/devcontainers/features/gcloud:1",name:"Google Cloud CLI"},{category:"database",description:"PostgreSQL client tools",id:"ghcr.io/devcontainers-extra/features/postgres-client:1",name:"PostgreSQL Client"},{category:"database",description:"Redis client tools",id:"ghcr.io/devcontainers-extra/features/redis-client:1",name:"Redis Client"}];var Ot=Object.defineProperty,De=v((o,t)=>Ot(o,"name",{value:t,configurable:!0}),"r$1");const ge=De(o=>{if(!o)return ye;const t=o.toLowerCase();return ye.filter(i=>i.name.toLowerCase().includes(t)||i.id.toLowerCase().includes(t)||i.description.toLowerCase().includes(t))},"filterFeatures"),fe=De(o=>{if(!o)return be;const t=o.toLowerCase();return be.filter(i=>i.name.toLowerCase().includes(t)||i.id.toLowerCase().includes(t)||i.description.toLowerCase().includes(t))},"filterExtensions");var Ft=Object.defineProperty,At=v((o,t)=>Ft(o,"name",{value:t,configurable:!0}),"t"),$t=Object.defineProperty,Mt=At((o,t)=>$t(o,"name",{value:t,configurable:!0}),"r"),Lt=Object.defineProperty,Oe=Mt((o,t)=>Lt(o,"name",{value:t,configurable:!0}),"r");const Bt=/^[a-z]$/i,Nt=Oe(o=>{const t=o.codePointAt(0);return t!==void 0&&(t<32||t===127)},"isControlCharacter"),Rt=Oe((o,t)=>o.length===0||Nt(o)?!1:t.ctrl&&t.meta?!Bt.test(o):!(t.ctrl||t.meta),"isInsertableInput");var zt=Object.defineProperty,Fe=v((o,t)=>zt(o,"name",{value:t,configurable:!0}),"w$3"),Gt=Object.defineProperty,Ae=Fe((o,t)=>Gt(o,"name",{value:t,configurable:!0}),"A"),_t=Object.defineProperty,ie=Ae((o,t)=>_t(o,"name",{value:t,configurable:!0}),"p");const Wt=/\S+\s*$/,de=ie((o,t)=>o.length===0||!t?void 0:t.find(i=>i.startsWith(o))?.slice(o.length)??void 0,"findSuggestion"),$e=-1,Ut=ie((o,t,i,c)=>t.leftArrow?Math.max(0,i-1):t.home||t.ctrl&&o==="a"?0:t.end||t.ctrl&&o==="e"?c:$e,"handleNavigation"),Vt=ie((o,t,i,c)=>{if(t.backspace&&c>0)return[i.slice(0,c-1)+i.slice(c),c-1];if(t.delete&&c<i.length)return[i.slice(0,c)+i.slice(c+1),c];if(t.ctrl&&o==="u")return[i.slice(c),0];if(t.ctrl&&o==="k")return[i.slice(0,c),c];if(t.ctrl&&o==="w"){const a=i.slice(0,c).replace(Wt,"");return[a+i.slice(c),a.length]}},"handleEditing");function X({defaultValue:o="",isDisabled:t=!1,mask:i=!1,onChange:c,onSubmit:a,placeholder:n,suggestions:l}){const[m,g]=p.useState(o),[f,j]=p.useState(o.length),x=p.useRef(m);x.current=m;const b=p.useRef(f);b.current=f;const w=p.useRef(c);w.current=c;const E=p.useRef(a);E.current=a;const D=de(m,l),R=p.useCallback((P,T)=>{const{current:I}=b,S=x.current;if(T.return){const C=de(S,l),k=C?S+C:S;C&&(g(k),j(k.length),w.current?.(k)),E.current?.(k);return}if(T.escape)return;if(T.rightArrow){const C=de(S,l);if(I===S.length&&C){const k=S+C;g(k),j(k.length),w.current?.(k);return}j(Math.min(S.length,I+1));return}const O=Ut(P,T,I,S.length);if(O!==$e){j(O);return}const q=Vt(P,T,S,I);if(q){const[C,k]=q;g(C),j(k),w.current?.(C);return}if(Rt(P,T)){const C=S.slice(0,I)+P+S.slice(I);g(C),j(I+P.length),w.current?.(C)}},[l]);U(R,{isActive:!t});const L=i?"*".repeat(m.length):m,H=L.slice(0,f),J=L[f],ee=L.slice(f+1);return t?e.jsx(s,{children:e.jsx(r,{dimColor:!0,children:L||n||""})}):m.length===0&&n?e.jsxs(s,{children:[e.jsx(r,{dimColor:!0,inverse:!0,children:n[0]}),e.jsx(r,{dimColor:!0,children:n.slice(1)})]}):e.jsxs(s,{children:[e.jsxs(r,{children:[H,e.jsx(r,{inverse:!0,children:J??" "}),ee]}),D?e.jsx(r,{dimColor:!0,children:D}):void 0]})}v(X,"k");Fe(X,"q");Ae(X,"y");ie(X,"TextInput");var Xt=Object.defineProperty,Ht=v((o,t)=>Xt(o,"name",{value:t,configurable:!0}),"l$1");const Me=["dockerComposeFile","service"],Jt={dockerComposeFile:"Compose File",service:"Service"},we={dockerComposeFile:"docker-compose.yml",service:"app"},qt={dockerComposeFile:"Path to Docker Compose file (relative to .devcontainer/)",service:"Which service in the compose file to connect the IDE to"},Kt=Ht(({config:o,fieldEditing:t,fieldIndex:i,onUpdate:c})=>{const a=!!o.dockerComposeFile,n=!!(o.image||o.build);return e.jsxs(s,{flexDirection:"column",paddingX:1,children:[e.jsx(s,{marginBottom:1,children:e.jsx(r,{bold:!0,color:"cyan",children:"Docker Compose Integration"})}),n&&a&&e.jsx(s,{marginBottom:1,children:e.jsx(r,{color:"yellow",children:"Note: When using Docker Compose, the image/build settings in General are ignored."})}),Me.map((l,m)=>{const g=m===i,f=o[l]??"",j=Array.isArray(o[l])?o[l].join(", "):f;return e.jsxs(s,{flexDirection:"column",marginBottom:1,children:[e.jsxs(s,{children:[e.jsx(s,{width:20,children:e.jsxs(r,{bold:g,color:g?"cyan":"white",children:[g?"❯ ":" ",Jt[l],":"]})}),e.jsx(s,{flexGrow:1,children:g&&t?e.jsx(X,{defaultValue:j,onChange:v(x=>{c({[l]:x||void 0})},"onChange"),placeholder:we[l]}):e.jsx(r,{color:j?"white":"gray",children:j||we[l]})})]}),e.jsx(s,{paddingLeft:4,children:e.jsx(r,{dimColor:!0,children:qt[l]})})]},l)}),e.jsx(s,{marginTop:1,children:e.jsxs(r,{dimColor:!0,children:[e.jsx(r,{bold:!0,color:"white",children:"Enter"})," ","edit field"," ",e.jsx(r,{bold:!0,color:"white",children:"↑↓"})," ","navigate"," ",e.jsx(r,{bold:!0,color:"white",children:"Esc"})," ","stop editing"]})})]})},"DockerComposeSection"),Yt=Me.length;var Qt=Object.defineProperty,Le=v((o,t)=>Qt(o,"name",{value:t,configurable:!0}),"h$2");const Zt=Le(({config:o,fieldIndex:t})=>{const i=o.containerEnv??{},c=o.remoteEnv??{},a=Object.keys(i),n=Object.keys(c),l=a.length,m=a.length+1,g=m+n.length,f=t<=l,j=t>l;return e.jsxs(s,{flexDirection:"column",paddingX:1,children:[e.jsxs(s,{borderColor:f?"cyan":"gray",borderStyle:"single",flexDirection:"column",paddingX:1,paddingY:0,children:[e.jsxs(s,{flexShrink:0,marginBottom:a.length>0?1:0,children:[e.jsx(r,{bold:!0,color:f?"cyan":"white",children:"containerEnv"}),e.jsx(r,{dimColor:!0,children:" — baked into the container image"})]}),a.map((x,b)=>{const w=b===t;return e.jsx(s,{flexShrink:0,children:e.jsxs(r,{color:w?"cyan":void 0,inverse:w,wrap:"truncate",children:[w?" ❯ ":" ",e.jsx(r,{bold:!0,children:x}),e.jsx(r,{dimColor:!0,children:" = "}),e.jsx(r,{children:i[x]})]})},x)}),e.jsx(s,{flexShrink:0,marginTop:a.length>0?1:0,children:e.jsxs(r,{color:t===l?"cyan":"gray",inverse:t===l,children:[" ","+ Add variable..."]})})]}),e.jsxs(s,{borderColor:j?"cyan":"gray",borderStyle:"single",flexDirection:"column",marginTop:1,paddingX:1,paddingY:0,children:[e.jsxs(s,{flexShrink:0,marginBottom:n.length>0?1:0,children:[e.jsx(r,{bold:!0,color:j?"cyan":"white",children:"remoteEnv"}),e.jsx(r,{dimColor:!0,children:" — set at runtime by the IDE"})]}),n.map((x,b)=>{const w=m+b===t;return e.jsx(s,{flexShrink:0,children:e.jsxs(r,{color:w?"cyan":void 0,inverse:w,wrap:"truncate",children:[w?" ❯ ":" ",e.jsx(r,{bold:!0,children:x}),e.jsx(r,{dimColor:!0,children:" = "}),e.jsx(r,{children:c[x]})]})},x)}),e.jsx(s,{flexShrink:0,marginTop:n.length>0?1:0,children:e.jsxs(r,{color:t===g?"cyan":"gray",inverse:t===g,children:[" ","+ Add variable..."]})})]}),e.jsx(s,{flexShrink:0,marginTop:1,children:e.jsxs(r,{dimColor:!0,wrap:"truncate",children:[e.jsx(r,{bold:!0,color:"white",children:"a"}),"/",e.jsx(r,{bold:!0,color:"white",children:"Enter"})," ","add on + row"," ",e.jsx(r,{bold:!0,color:"white",children:"d"})," ","remove"," ",e.jsx(r,{bold:!0,color:"white",children:"↑↓"})," ","navigate"]})})]})},"EnvironmentSection"),er=Le(o=>{const t=Object.keys(o.containerEnv??{}).length,i=Object.keys(o.remoteEnv??{}).length;return t+1+i+1},"getEnvFieldCount");var tr=Object.defineProperty,rr=v((o,t)=>tr(o,"name",{value:t,configurable:!0}),"g$2");const or=rr(({config:o,fieldIndex:t,scrollOffset:i,searchText:c,viewportHeight:a})=>{const n=p.useMemo(()=>new Set(o.customizations?.vscode?.extensions),[o.customizations?.vscode?.extensions]),l=p.useMemo(()=>fe(c),[c]),m=l.length,g=m>a&&a>0;return e.jsxs(s,{flexDirection:"column",flexGrow:1,children:[e.jsxs(s,{flexShrink:0,gap:1,paddingX:1,children:[e.jsxs(r,{bold:!0,color:"cyan",children:[n.size," ","selected"]}),c&&e.jsxs(r,{dimColor:!0,children:["— filter:"," ",e.jsx(r,{color:"yellow",children:c})," ","(",l.length," ","results)"]})]}),e.jsxs(s,{flexDirection:"row",flexGrow:1,overflow:"hidden",children:[e.jsx(s,{flexDirection:"column",flexGrow:1,overflow:"hidden",paddingLeft:1,children:e.jsx(s,{flexDirection:"column",marginTop:-i,children:l.map((f,j)=>{const x=j===t,b=n.has(f.id);return e.jsxs(s,{flexShrink:0,height:1,children:[e.jsx(r,{children:x?">":" "}),e.jsxs(r,{color:b?"white":"gray",children:[" ",b?"☑":"☐"," "]}),e.jsx(s,{flexGrow:1,children:e.jsxs(r,{bold:x,inverse:x,wrap:"truncate",children:[f.name,e.jsxs(r,{dimColor:!0,children:[" ","-",f.id]})]})})]},f.id)})})}),g&&e.jsx(s,{flexShrink:0,marginLeft:1,marginRight:1,children:e.jsx(Te,{contentHeight:m,placement:"inset",scrollOffset:i,style:"block",viewportHeight:a})})]}),l.length===0&&e.jsx(s,{paddingX:1,children:e.jsx(r,{dimColor:!0,children:"No extensions match the search."})})]})},"ExtensionsSection");var nr=Object.defineProperty,ir=v((o,t)=>nr(o,"name",{value:t,configurable:!0}),"g$1");const sr=ir(({config:o,fieldIndex:t,scrollOffset:i,searchText:c,viewportHeight:a})=>{const n=p.useMemo(()=>new Set(Object.keys(o.features??{})),[o.features]),l=p.useMemo(()=>ge(c),[c]),m=l.length,g=m>a&&a>0;return e.jsxs(s,{flexDirection:"column",flexGrow:1,children:[e.jsxs(s,{flexShrink:0,gap:1,paddingX:1,children:[e.jsxs(r,{bold:!0,color:"cyan",children:[n.size," ","selected"]}),c&&e.jsxs(r,{dimColor:!0,children:["— filter:"," ",e.jsx(r,{color:"yellow",children:c})," ","(",l.length," ","results)"]})]}),e.jsxs(s,{flexDirection:"row",flexGrow:1,overflow:"hidden",children:[e.jsx(s,{flexDirection:"column",flexGrow:1,overflow:"hidden",paddingLeft:1,children:e.jsx(s,{flexDirection:"column",marginTop:-i,children:l.map((f,j)=>{const x=j===t,b=n.has(f.id);return e.jsxs(s,{flexShrink:0,height:1,children:[e.jsx(r,{children:x?">":" "}),e.jsxs(r,{color:b?"white":"gray",children:[" ",b?"☑":"☐"," "]}),e.jsx(s,{flexGrow:1,children:e.jsxs(r,{bold:x,inverse:x,wrap:"truncate",children:[f.name,e.jsxs(r,{dimColor:!0,children:[" ","-",f.description]})]})})]},f.id)})})}),g&&e.jsx(s,{flexShrink:0,marginLeft:1,marginRight:1,children:e.jsx(Te,{contentHeight:m,placement:"inset",scrollOffset:i,style:"block",viewportHeight:a})})]}),l.length===0&&e.jsx(s,{paddingX:1,children:e.jsx(r,{dimColor:!0,children:"No features match the search."})})]})},"FeaturesSection");var cr=Object.defineProperty,ar=v((o,t)=>cr(o,"name",{value:t,configurable:!0}),"u$1");const me=["name","image","workspaceFolder","workspaceMount","remoteUser","containerUser","shutdownAction"],lr={containerUser:"Container User",image:"Image",name:"Name",remoteUser:"Remote User",shutdownAction:"Shutdown Action",workspaceFolder:"Workspace Folder",workspaceMount:"Workspace Mount"},Ce={containerUser:"root",image:"mcr.microsoft.com/devcontainers/javascript-node:22",name:"My Dev Container",remoteUser:"node",shutdownAction:"none | stopContainer",workspaceFolder:"/workspaces/${localWorkspaceFolderBasename}",workspaceMount:"source=${localWorkspaceFolder},target=...,type=bind"},ne=["privileged","overrideCommand"],dr={overrideCommand:"Override Command",privileged:"Privileged"},ur=me.length+ne.length,hr=ar(({config:o,fieldEditing:t,fieldIndex:i,onUpdate:c})=>e.jsxs(s,{flexDirection:"column",paddingX:1,children:[e.jsx(s,{marginBottom:1,children:e.jsx(r,{bold:!0,color:"cyan",children:"General Configuration"})}),me.map((a,n)=>{const l=n===i,m=o[a]??"";return e.jsxs(s,{marginBottom:1,children:[e.jsx(s,{width:20,children:e.jsxs(r,{bold:l,color:l?"cyan":"white",children:[l?"❯ ":" ",lr[a],":"]})}),e.jsx(s,{flexGrow:1,children:l&&t?e.jsx(X,{defaultValue:m,onChange:v(g=>{c({[a]:g})},"onChange"),placeholder:Ce[a]}):e.jsx(r,{color:m?"white":"gray",children:m||Ce[a]})})]},a)}),ne.map((a,n)=>{const l=me.length+n===i,m=o[a]??!1;return e.jsxs(s,{marginBottom:n<ne.length-1?1:0,children:[e.jsx(s,{width:20,children:e.jsxs(r,{bold:l,color:l?"cyan":"white",children:[l?"❯ ":" ",dr[a],":"]})}),e.jsx(s,{flexGrow:1,children:e.jsxs(r,{color:m?"green":"gray",children:[m?"yes":"no",l&&e.jsx(r,{dimColor:!0,children:" (Space to toggle)"})]})})]},a)}),e.jsx(s,{marginTop:1,children:e.jsxs(r,{dimColor:!0,children:[e.jsx(r,{bold:!0,color:"white",children:"Enter"})," ","edit field"," ",e.jsx(r,{bold:!0,color:"white",children:"Space"})," ","toggle"," ",e.jsx(r,{bold:!0,color:"white",children:"↑↓"})," ","navigate"," ",e.jsx(r,{bold:!0,color:"white",children:"Esc"})," ","stop editing"]})})]}),"GeneralSection"),Be=ur,ue=ne;var mr=Object.defineProperty,gr=v((o,t)=>mr(o,"name",{value:t,configurable:!0}),"s$3");const Ne=["postCreateCommand","postStartCommand","postAttachCommand","onCreateCommand"],fr={onCreateCommand:"On Create",postAttachCommand:"Post Attach",postCreateCommand:"Post Create",postStartCommand:"Post Start"},pr={onCreateCommand:"Runs once when the container is first created",postAttachCommand:"Runs each time the IDE attaches",postCreateCommand:"Runs after the container is created and workspace mounted",postStartCommand:"Runs each time the container starts"},xr=gr(({config:o,fieldEditing:t,fieldIndex:i,onSetCommand:c})=>e.jsxs(s,{flexDirection:"column",paddingX:1,children:[e.jsx(s,{marginBottom:1,children:e.jsx(r,{bold:!0,color:"cyan",children:"Lifecycle Commands"})}),Ne.map((a,n)=>{const l=n===i,m=o[a],g=Array.isArray(m)?m.join(" && "):m??"";return e.jsxs(s,{flexDirection:"column",marginBottom:1,children:[e.jsx(s,{children:e.jsxs(r,{bold:l,color:l?"cyan":"white",children:[l?"❯ ":" ",fr[a]]})}),e.jsx(s,{paddingLeft:4,children:e.jsx(r,{dimColor:!0,children:pr[a]})}),e.jsx(s,{paddingLeft:4,children:l&&t?e.jsx(X,{defaultValue:g,onChange:v(f=>{c(a,f)},"onChange"),placeholder:"e.g. npm install"}):e.jsx(r,{color:g?"green":"gray",children:g||"(not set)"})})]},a)}),e.jsx(s,{marginTop:1,children:e.jsxs(r,{dimColor:!0,children:[e.jsx(r,{bold:!0,color:"white",children:"Enter"})," ","edit command"," ",e.jsx(r,{bold:!0,color:"white",children:"↑↓"})," ","navigate"," ",e.jsx(r,{bold:!0,color:"white",children:"Esc"})," ","stop editing"]})})]}),"LifecycleSection"),vr=Ne.length;var jr=Object.defineProperty,Re=v((o,t)=>jr(o,"name",{value:t,configurable:!0}),"s$2");const Se=Re(o=>typeof o=="string"?o:`[${o.type}] ${o.source} → ${o.target}`,"formatMount"),br=Re(({addingMount:o,config:t,detectedPm:i,fieldIndex:c,mountPhase:a,mountSource:n,mountTarget:l,mountType:m,suggestedMounts:g})=>{const f=t.mounts??[];return e.jsxs(s,{flexDirection:"column",paddingX:1,children:[e.jsxs(s,{flexShrink:0,gap:1,paddingX:1,children:[e.jsxs(r,{bold:!0,color:"cyan",children:[f.length," ","mounts"]}),i&&e.jsxs(r,{dimColor:!0,children:["— detected:"," ",e.jsx(r,{color:"white",children:i})]})]}),g.length>0&&!o&&e.jsxs(s,{borderColor:"yellow",borderStyle:"single",flexDirection:"column",marginBottom:1,marginTop:1,paddingX:1,children:[e.jsxs(s,{flexShrink:0,children:[e.jsx(r,{bold:!0,color:"yellow",children:"Suggested mounts"}),e.jsxs(r,{dimColor:!0,children:[" ","— press"," ",e.jsx(r,{bold:!0,color:"white",children:"A"})," ","to add all"]})]}),g.map((j,x)=>e.jsx(s,{flexShrink:0,children:e.jsxs(r,{dimColor:!0,wrap:"truncate",children:[" + ",Se(j)]})},`suggestion-${String(x)}`))]}),f.length>0&&e.jsx(s,{flexDirection:"column",marginBottom:1,children:f.map((j,x)=>{const b=x===c;return e.jsxs(s,{flexShrink:0,height:1,children:[e.jsx(r,{children:b?">":" "}),e.jsx(s,{flexGrow:1,children:e.jsxs(r,{bold:b,inverse:b,wrap:"truncate",children:[" ",Se(j)]})})]},`mount-${String(x)}`)})}),!o&&e.jsx(s,{flexShrink:0,children:e.jsxs(r,{color:c===f.length?"cyan":"gray",inverse:c===f.length,children:[" ","+ Add mount..."]})}),o&&e.jsxs(s,{borderColor:"cyan",borderStyle:"single",flexDirection:"column",marginTop:1,paddingX:1,children:[e.jsx(s,{flexShrink:0,marginBottom:1,children:e.jsx(r,{bold:!0,color:"cyan",children:"New Mount"})}),e.jsxs(s,{flexShrink:0,children:[e.jsx(s,{width:12,children:e.jsxs(r,{bold:a==="source",color:a==="source"?"cyan":"white",children:[a==="source"?"❯ ":" ","Source:"]})}),e.jsx(r,{color:n?"yellow":"gray",children:n||(a==="source"?"_":"(type source, Enter to continue)")})]}),e.jsxs(s,{flexShrink:0,children:[e.jsx(s,{width:12,children:e.jsxs(r,{bold:a==="target",color:a==="target"?"cyan":"white",children:[a==="target"?"❯ ":" ","Target:"]})}),e.jsx(r,{color:l?"yellow":"gray",children:l||(a==="target"?"_":"/container/path")})]}),e.jsxs(s,{flexShrink:0,children:[e.jsx(s,{width:12,children:e.jsxs(r,{bold:a==="type",color:a==="type"?"cyan":"white",children:[a==="type"?"❯ ":" ","Type:"]})}),a==="type"?e.jsxs(r,{children:[e.jsx(r,{bold:m==="volume",color:m==="volume"?"cyan":"gray",children:"[1] volume"})," ",e.jsx(r,{bold:m==="bind",color:m==="bind"?"cyan":"gray",children:"[2] bind"})," ",e.jsx(r,{bold:m==="tmpfs",color:m==="tmpfs"?"cyan":"gray",children:"[3] tmpfs"})]}):e.jsx(r,{color:"gray",children:m})]}),e.jsx(s,{flexShrink:0,marginTop:1,children:e.jsx(r,{dimColor:!0,wrap:"truncate",children:a==="type"?"1/2/3 select type, Enter confirm, Esc cancel":"Type text, Enter next step, Esc cancel"})})]}),f.length===0&&!o&&g.length===0&&e.jsx(s,{marginTop:1,children:e.jsx(r,{dimColor:!0,children:"Tip: Use volume mounts for node_modules and caches to improve performance."})})]})},"MountsSection");var yr=Object.defineProperty,wr=v((o,t)=>yr(o,"name",{value:t,configurable:!0}),"s$1");const Cr=wr(({addingPort:o,addPortValue:t,config:i,fieldIndex:c})=>{const a=i.forwardPorts??[],n=c===a.length;return e.jsxs(s,{flexDirection:"column",paddingX:1,children:[e.jsxs(s,{marginBottom:1,children:[e.jsx(r,{bold:!0,color:"cyan",children:"Forwarded Ports"}),e.jsxs(r,{dimColor:!0,children:[" ","(",a.length," ","ports)"]})]}),a.map((l,m)=>{const g=m===c;return e.jsx(s,{children:e.jsxs(r,{color:g?"cyan":void 0,inverse:g,children:[" ",String(l)]})},`port-${String(l)}`)}),e.jsx(s,{marginTop:a.length>0?1:0,children:e.jsxs(r,{color:n?"cyan":"gray",inverse:n,children:[" ",n&&o?e.jsxs(r,{children:["Enter port:"," ",e.jsx(r,{color:"yellow",children:t||"_"})]}):"+ Add port..."]})}),e.jsx(s,{marginTop:1,children:e.jsxs(r,{dimColor:!0,children:[e.jsx(r,{bold:!0,color:"white",children:"Enter"})," ",n?"type port number, Enter to confirm":"select"," ",e.jsx(r,{bold:!0,color:"white",children:"d"})," ","remove selected"," ",e.jsx(r,{bold:!0,color:"white",children:"↑↓"})," ","navigate"]})})]})},"PortsSection");var Sr=Object.defineProperty,kr=v((o,t)=>Sr(o,"name",{value:t,configurable:!0}),"a");const Er=kr(({focused:o,hadComments:t,jsonPreview:i,mode:c,scrollRef:a})=>e.jsxs(s,{borderColor:o?"cyan":"gray",borderStyle:"single",flexDirection:"column",flexGrow:1,children:[e.jsxs(s,{flexShrink:0,paddingX:1,children:[e.jsx(r,{bold:!0,color:o?"cyan":"white",children:"Preview"}),e.jsxs(r,{dimColor:!0,children:[" ","(",c==="create"?"new":"edit",")"]})]}),t&&c==="edit"&&e.jsx(s,{flexShrink:0,paddingX:1,children:e.jsx(r,{color:"yellow",children:"Comments will not be preserved."})}),e.jsx(Qe,{flexGrow:1,ref:a,scrollbar:!0,scrollbarColor:"gray",children:i.split(`
|
|
3
|
+
`).map((n,l)=>e.jsx(r,{color:"green",children:n},`line-${String(l)}`))})]}),"PreviewPanel");var Ir=Object.defineProperty,Tr=v((o,t)=>Ir(o,"name",{value:t,configurable:!0}),"r");const Pr=Tr(o=>{const t=[],i=[],c=[];if(!o.image&&!o.build&&!o.dockerComposeFile&&t.push({field:"image",message:'One of "image", "build", or "dockerComposeFile" is required'}),o.build&&(o.image&&i.push({field:"image",message:'Both "image" and "build" are set; "build" takes precedence'}),o.build.dockerfile||t.push({field:"build.dockerfile",message:'"build" requires a "dockerfile" path'})),o.dockerComposeFile&&!o.service&&t.push({field:"service",message:'"service" is required when using "dockerComposeFile"'}),o.features!==void 0&&(typeof o.features!="object"||Array.isArray(o.features))&&t.push({field:"features",message:'"features" must be an object mapping feature IDs to options'}),o.forwardPorts)if(Array.isArray(o.forwardPorts))for(const[a,n]of o.forwardPorts.entries())typeof n=="number"&&(n<1||n>65535)&&t.push({field:"forwardPorts",message:`Invalid port ${String(n)} at index ${String(a)}`});else t.push({field:"forwardPorts",message:'"forwardPorts" must be an array'});return o.customizations?.vscode?.extensions&&!Array.isArray(o.customizations.vscode.extensions)&&t.push({field:"customizations.vscode.extensions",message:"Extensions must be an array"}),o.customizations?.vscode?.settings&&typeof o.customizations.vscode.settings!="object"&&t.push({field:"customizations.vscode.settings",message:"Settings must be an object"}),o.name||c.push({field:"name",message:"Consider adding a name for better identification"}),(!o.features||Object.keys(o.features).length===0)&&c.push({field:"features",message:"Consider adding features for common tools"}),(!o.customizations?.vscode?.extensions||o.customizations.vscode.extensions.length===0)&&c.push({field:"extensions",message:"Consider adding VS Code extensions for your stack"}),o.privileged&&i.push({field:"privileged",message:"Running in privileged mode is a security risk"}),{errors:t,suggestions:c,valid:t.length===0,warnings:i}},"validateConfig");var Dr=Object.defineProperty,ze=v((o,t)=>Dr(o,"name",{value:t,configurable:!0}),"$");const ke=80,Ee=15,Or=120,Ge=[{description:"Container name, base image, workspace folder, and user",id:"general",label:"General"},{description:"Installable tools and runtimes (Node, Python, Docker, etc.)",id:"features",label:"Features"},{description:"Ports to forward from the container to your host",id:"ports",label:"Ports"},{description:"Commands to run at different stages of the container lifecycle",id:"lifecycle",label:"Lifecycle"},{description:"VS Code extensions to auto-install in the container",id:"extensions",label:"Extensions"},{description:"Environment variables for the container and IDE",id:"environment",label:"Env"},{description:"Volume and bind mounts for persistent data and caches",id:"mounts",label:"Mounts"},{description:"Docker Compose integration for multi-container setups",id:"compose",label:"Compose"}],Fr=new Map(Ge.map(o=>[o.id,o.description])),Ar=ze((o,t,i,c)=>{switch(o){case"compose":return Yt;case"environment":return er(t);case"extensions":return fe(c).length;case"features":return ge(i).length;case"general":return Be;case"lifecycle":return vr;case"mounts":return(t.mounts?.length??0)+1;case"ports":return(t.forwardPorts?.length??0)+1;default:return 0}},"getFieldCount"),$r=ze(({onSave:o,store:t})=>{const{exit:i}=Ze(),{columns:c,rows:a}=et(),n=p.useSyncExternalStore(t.subscribe,t.getSnapshot),[l,m]=p.useState(!1),[g,f]=p.useState(!1),[j,x]=p.useState(!1),[b,w]=p.useState(null),[E,D]=p.useState("editor"),[R,L]=p.useState(0),[H,J]=p.useState(!1),[ee,P]=p.useState(""),[T,I]=p.useState(null),[S,O]=p.useState(""),[q,C]=p.useState(""),[k,z]=p.useState("key"),[se,te]=p.useState(!1),[ce,G]=p.useState(""),[ae,_]=p.useState(""),[pe,K]=p.useState("volume"),[A,W]=p.useState("source"),le=p.useRef(null),B=p.useRef(null),M=p.useRef(null),re=p.useRef(!0);p.useEffect(()=>(re.current=!0,()=>{re.current=!1,M.current&&clearTimeout(M.current)}),[]);const xe=Ar(n.section,n.config,n.featureSearch,n.extensionSearch),Y=Math.max(1,a-9);p.useEffect(()=>{n.section!=="features"&&n.section!=="extensions"||L(u=>n.fieldIndex>=u+Y?n.fieldIndex-Y+1:n.fieldIndex<u?n.fieldIndex:u)},[n.fieldIndex,n.section,Y]),p.useEffect(()=>{L(0)},[n.section,n.featureSearch,n.extensionSearch]);const _e=p.useCallback(()=>{const u=t.cleanConfig(),h=Pr(u);if(!h.valid){const y=h.errors[0];w(y?`Error: ${y.message}`:"Validation failed"),M.current&&clearTimeout(M.current),M.current=setTimeout(()=>{re.current&&w(null)},3e3);return}o(u),t.markClean();const d=h.warnings.length;w(d>0?`Saved! (${String(d)} warning${d>1?"s":""})`:"Saved!"),M.current&&clearTimeout(M.current),M.current=setTimeout(()=>{re.current&&w(null)},2e3)},[o,t]);U((u,h)=>{if(h.downArrow||u==="j")t.setTemplateIndex(n.templateIndex+1);else if(h.upArrow||u==="k")t.setTemplateIndex(n.templateIndex-1);else if(h.return){const d=V[n.templateIndex];d&&t.applyTemplate(d.id)}else h.escape&&t.dismissTemplateSelector()},{isActive:n.showTemplateSelector}),U((u,h)=>{if(h.escape){J(!1),P("");return}if(h.return){const d=Number.parseInt(ee,10);!Number.isNaN(d)&&d>0&&d<=65535&&t.addPort(d),J(!1),P("");return}if(h.backspace){P(d=>d.slice(0,-1));return}u&&/^\d$/u.test(u)&&P(d=>d+u)},{isActive:H}),U((u,h)=>{if(h.escape){I(null),O(""),C(""),z("key");return}if(h.return){if(k==="key"&&S){z("value");return}if(k==="value"&&S){t.addEnvVar(T,S,q),I(null),O(""),C(""),z("key");return}}if(h.backspace){k==="key"?O(d=>d.slice(0,-1)):C(d=>d.slice(0,-1));return}u&&!h.ctrl&&!h.meta&&(k==="key"?O(d=>d+u):C(d=>d+u))},{isActive:T!==null}),U((u,h)=>{if(h.escape){te(!1),G(""),_(""),W("source");return}if(h.return){if(A==="source"&&ce){W("target");return}if(A==="target"&&ae){W("type");return}if(A==="type"){t.addMount({source:ce,target:ae,type:pe}),te(!1),G(""),_(""),W("source");return}}if(A==="type"){switch(u){case"1":{K("volume");break}case"2":{K("bind");break}case"3":{K("tmpfs");break}}return}if(h.backspace){A==="source"?G(d=>d.slice(0,-1)):A==="target"&&_(d=>d.slice(0,-1));return}u&&!h.ctrl&&!h.meta&&(A==="source"?G(d=>d+u):A==="target"&&_(d=>d+u))},{isActive:se}),U((u,h)=>{if(u==="c"&&h.ctrl){i();return}if(!g){if(l){h.escape||u==="?"?m(!1):h.downArrow||u==="j"?le.current?.scrollBy(1):h.upArrow||u==="k"?le.current?.scrollBy(-1):u==="q"&&(m(!1),f(!0));return}if(j){if(h.escape){x(!1),n.section==="features"?t.setFeatureSearch(""):t.setExtensionSearch("");return}if(h.return){x(!1);return}if(h.backspace){n.section==="features"?t.setFeatureSearch(n.featureSearch.slice(0,-1)):t.setExtensionSearch(n.extensionSearch.slice(0,-1));return}if(u&&!h.ctrl&&!h.meta){n.section==="features"?t.setFeatureSearch(n.featureSearch+u):t.setExtensionSearch(n.extensionSearch+u);return}return}if(n.fieldEditing){if(h.escape){t.setFieldEditing(!1);return}if(h.return){t.setFieldEditing(!1);return}return}if(u==="?"){m(!0);return}if(u==="q"){n.isDirty?f(!0):i();return}if(u==="s"){_e();return}if(h.tab){D(d=>d==="editor"?"preview":"editor");return}if(E==="preview"){if(h.downArrow||u==="j"){B.current?.scrollBy(1);return}if(h.upArrow||u==="k"){B.current?.scrollBy(-1);return}if(h.pageDown){B.current?.scrollBy(10);return}if(h.pageUp){B.current?.scrollBy(-10);return}if(h.home){B.current?.scrollToTop();return}if(h.end){B.current?.scrollToBottom();return}h.escape&&D("editor");return}if(h.downArrow||u==="j"){xe>0&&t.setFieldIndex(Math.min(n.fieldIndex+1,xe-1));return}if(h.upArrow||u==="k"){t.setFieldIndex(Math.max(n.fieldIndex-1,0));return}if(h.return){switch(n.section){case"compose":case"general":case"lifecycle":{t.setFieldEditing(!0);break}case"environment":{const d=Object.keys(n.config.containerEnv??{}).length,y=d,$=d+1+Object.keys(n.config.remoteEnv??{}).length;n.fieldIndex===y?(I("container"),O(""),C(""),z("key")):n.fieldIndex===$&&(I("remote"),O(""),C(""),z("key"));break}case"mounts":{const d=n.config.mounts??[];n.fieldIndex===d.length&&(te(!0),G(""),_(""),K("volume"),W("source"));break}case"ports":{const d=n.config.forwardPorts??[];n.fieldIndex===d.length&&(J(!0),P(""));break}}return}if(u===" "){switch(n.section){case"extensions":{const d=fe(n.extensionSearch)[n.fieldIndex];d&&t.toggleExtension(d.id);break}case"features":{const d=ge(n.featureSearch)[n.fieldIndex];d&&t.toggleFeature(d.id);break}case"general":{const d=Be-ue.length,y=n.fieldIndex-d;if(y>=0&&y<ue.length){const $=ue[y];t.updateConfig({[$]:!n.config[$]})}break}}return}if(u==="/"){(n.section==="features"||n.section==="extensions")&&x(!0);return}if(u==="A"&&n.section==="mounts"){t.applySuggestedMounts();return}if(u==="a"){if(n.section==="environment"){const d=Object.keys(n.config.containerEnv??{}).length,y=n.fieldIndex<=d?"container":"remote";I(y),O(""),C(""),z("key")}else n.section==="mounts"&&(te(!0),G(""),_(""),K("volume"),W("source"));return}if(u==="d")switch(n.section){case"environment":{const d=Object.keys(n.config.containerEnv??{}),y=Object.keys(n.config.remoteEnv??{});if(n.fieldIndex<d.length)t.removeEnvVar("container",d[n.fieldIndex]),d.length===1||n.fieldIndex>=d.length-1&&t.setFieldIndex(d.length-2);else{const $=n.fieldIndex-d.length-1;$>=0&&$<y.length&&(t.removeEnvVar("remote",y[$]),y.length===1||$>=y.length-1&&t.setFieldIndex(n.fieldIndex-1))}break}case"mounts":{const d=n.config.mounts??[];if(n.fieldIndex<d.length){t.removeMount(n.fieldIndex);const y=d.length-1;n.fieldIndex>=y&&y>0&&t.setFieldIndex(y-1)}break}case"ports":{const d=n.config.forwardPorts??[];if(n.fieldIndex<d.length){t.removePort(n.fieldIndex);const y=d.length-1;n.fieldIndex>=y&&y>0&&t.setFieldIndex(y-1)}break}}}},{isActive:!n.showTemplateSelector&&!H&&T===null&&!se});const We=p.useMemo(()=>t.getJsonPreview(),[n.config]);if(c<ke||a<Ee)return e.jsx(s,{alignItems:"center",height:a,justifyContent:"center",width:c,children:e.jsxs(r,{color:"yellow",children:["Terminal too small (",c,"x",a,"), need"," ",ke,"x",Ee]})});if(n.showTemplateSelector)return e.jsx(s,{alignItems:"center",flexDirection:"column",height:a,justifyContent:"center",width:c,children:e.jsxs(s,{borderColor:"cyan",borderStyle:"round",flexDirection:"column",paddingX:2,paddingY:1,width:60,children:[e.jsx(s,{justifyContent:"center",marginBottom:1,children:e.jsx(r,{bold:!0,color:"cyan",children:"Select a Template"})}),V.map((u,h)=>{const d=h===n.templateIndex;return e.jsx(s,{children:e.jsxs(r,{color:d?"cyan":void 0,inverse:d,children:[d?" ❯ ":" ",e.jsx(r,{bold:d,children:u.name}),e.jsxs(r,{dimColor:!0,children:[" ","-",u.description]})]})},u.id)}),e.jsx(s,{justifyContent:"center",marginTop:1,children:e.jsxs(r,{dimColor:!0,children:[e.jsx(r,{bold:!0,color:"white",children:"↑↓"})," ","navigate"," ",e.jsx(r,{bold:!0,color:"white",children:"Enter"})," ","select"," ",e.jsx(r,{bold:!0,color:"white",children:"Esc"})," ","blank"]})})]})});let F;switch(n.section){case"compose":{F=e.jsx(Kt,{config:n.config,fieldEditing:n.fieldEditing,fieldIndex:n.fieldIndex,onUpdate:v(u=>{t.updateConfig(u)},"onUpdate")});break}case"environment":{F=e.jsxs(s,{flexDirection:"column",children:[e.jsx(Zt,{config:n.config,fieldIndex:n.fieldIndex}),T!==null&&e.jsx(s,{marginTop:1,paddingX:1,children:e.jsxs(r,{color:"cyan",children:["Add"," ",T," ","env:"," ",k==="key"?e.jsxs(r,{children:["key=",e.jsx(r,{color:"yellow",children:S||"_"})," ","(Enter to set value)"]}):e.jsxs(r,{children:[S,"=",e.jsx(r,{color:"yellow",children:q||"_"})," ","(Enter to confirm, Esc to cancel)"]})]})})]});break}case"extensions":{F=e.jsx(or,{config:n.config,fieldIndex:n.fieldIndex,scrollOffset:R,searchText:n.extensionSearch,viewportHeight:Y});break}case"features":{F=e.jsx(sr,{config:n.config,fieldIndex:n.fieldIndex,scrollOffset:R,searchText:n.featureSearch,viewportHeight:Y});break}case"general":{F=e.jsx(hr,{config:n.config,fieldEditing:n.fieldEditing,fieldIndex:n.fieldIndex,onUpdate:v(u=>{t.updateConfig(u)},"onUpdate")});break}case"lifecycle":{F=e.jsx(xr,{config:n.config,fieldEditing:n.fieldEditing,fieldIndex:n.fieldIndex,onSetCommand:v((u,h)=>{t.setLifecycleCommand(u,h)},"onSetCommand")});break}case"mounts":{F=e.jsx(br,{addingMount:se,config:n.config,detectedPm:n.detectedPm,fieldIndex:n.fieldIndex,mountPhase:A,mountSource:ce,mountTarget:ae,mountType:pe,suggestedMounts:n.suggestedMounts});break}case"ports":{F=e.jsx(Cr,{addingPort:H,addPortValue:ee,config:n.config,fieldIndex:n.fieldIndex});break}default:F=e.jsx(r,{children:"Unknown section"})}const Ue=e.jsxs(s,{borderBottom:!1,borderColor:"gray",borderLeft:!1,borderRight:!1,borderStyle:"single",flexShrink:0,children:[e.jsxs(s,{flexGrow:1,flexWrap:"wrap",gap:2,paddingX:1,children:[e.jsxs(s,{gap:1,children:[e.jsx(r,{bold:!0,color:"white",children:"q"}),e.jsx(r,{dimColor:!0,children:"QUIT"})]}),e.jsxs(s,{gap:1,children:[e.jsx(r,{bold:!0,color:"white",children:"?"}),e.jsx(r,{dimColor:!0,children:"HELP"})]}),e.jsxs(s,{gap:1,children:[e.jsx(r,{bold:!0,color:"white",children:"↑↓"}),e.jsx(r,{dimColor:!0,children:"NAV"})]}),(n.section==="features"||n.section==="extensions")&&e.jsxs(s,{gap:1,children:[e.jsx(r,{bold:!0,color:"white",children:"Space"}),e.jsx(r,{dimColor:!0,children:"CHECK"})]}),e.jsxs(s,{gap:1,children:[e.jsx(r,{bold:!0,color:"white",children:"←→"}),e.jsx(r,{dimColor:!0,children:"TABS"})]}),e.jsxs(s,{gap:1,children:[e.jsx(r,{bold:!0,color:"white",children:"Tab"}),e.jsx(r,{dimColor:!0,children:"PANEL"})]}),(n.section==="features"||n.section==="extensions")&&e.jsxs(s,{gap:1,children:[e.jsx(r,{bold:!0,color:"white",children:"/"}),e.jsx(r,{dimColor:!0,children:"FILTER"})]}),e.jsxs(s,{gap:1,children:[e.jsx(r,{bold:!0,color:"white",children:"s"}),e.jsx(r,{dimColor:!0,children:"SAVE"})]})]}),e.jsxs(s,{paddingX:1,children:[b&&e.jsxs(r,{color:b.startsWith("Error")?"red":"green",children:[b," "]}),n.isDirty&&e.jsx(r,{color:"yellow",children:"[modified]"}),!n.isDirty&&!b&&e.jsx(r,{dimColor:!0,children:"[saved]"})]})]}),Ve=e.jsxs(tt,{footer:e.jsxs(r,{dimColor:!0,children:[e.jsx(r,{bold:!0,color:"white",children:"↑↓"})," ","scroll"," ",e.jsx(r,{bold:!0,color:"white",children:"?"}),"/",e.jsx(r,{bold:!0,color:"white",children:"Esc"})," ","close"]}),scrollRef:le,title:"KEYBOARD SHORTCUTS",visible:l,width:56,children:[e.jsxs(s,{flexDirection:"column",marginBottom:1,children:[e.jsxs(s,{marginBottom:1,children:[e.jsx(r,{dimColor:!0,children:"── "}),e.jsx(r,{bold:!0,color:"white",children:"NAVIGATION"})]}),e.jsxs(r,{children:[" ",e.jsx(r,{bold:!0,color:"white",children:"←→"}),e.jsx(r,{dimColor:!0,children:" Switch tabs"})]}),e.jsxs(r,{children:[" ",e.jsx(r,{bold:!0,color:"white",children:"↑↓"}),"/",e.jsx(r,{bold:!0,color:"white",children:"j/k"}),e.jsx(r,{dimColor:!0,children:" Navigate within section"})]}),e.jsxs(r,{children:[" ",e.jsx(r,{bold:!0,color:"white",children:"Tab"}),e.jsx(r,{dimColor:!0,children:" Switch editor/preview panel"})]}),e.jsxs(r,{children:[" ",e.jsx(r,{bold:!0,color:"white",children:"Enter"}),e.jsx(r,{dimColor:!0,children:" Edit selected field"})]}),e.jsxs(r,{children:[" ",e.jsx(r,{bold:!0,color:"white",children:"Esc"}),e.jsx(r,{dimColor:!0,children:" Stop editing / cancel"})]})]}),e.jsxs(s,{flexDirection:"column",marginBottom:1,children:[e.jsxs(s,{marginBottom:1,children:[e.jsx(r,{dimColor:!0,children:"── "}),e.jsx(r,{bold:!0,color:"white",children:"FEATURES / EXTENSIONS"})]}),e.jsxs(r,{children:[" ",e.jsx(r,{bold:!0,color:"white",children:"Space"}),e.jsx(r,{dimColor:!0,children:" Toggle selection"})]}),e.jsxs(r,{children:[" ",e.jsx(r,{bold:!0,color:"white",children:"/"}),e.jsx(r,{dimColor:!0,children:" Search / filter"})]})]}),e.jsxs(s,{flexDirection:"column",marginBottom:1,children:[e.jsxs(s,{marginBottom:1,children:[e.jsx(r,{dimColor:!0,children:"── "}),e.jsx(r,{bold:!0,color:"white",children:"LISTS (Ports, Mounts, Env)"})]}),e.jsxs(r,{children:[" ",e.jsx(r,{bold:!0,color:"white",children:"a"}),e.jsx(r,{dimColor:!0,children:" Add new entry"})]}),e.jsxs(r,{children:[" ",e.jsx(r,{bold:!0,color:"white",children:"d"}),e.jsx(r,{dimColor:!0,children:" Delete selected entry"})]})]}),e.jsxs(s,{flexDirection:"column",children:[e.jsxs(s,{marginBottom:1,children:[e.jsx(r,{dimColor:!0,children:"── "}),e.jsx(r,{bold:!0,color:"white",children:"ACTIONS"})]}),e.jsxs(r,{children:[" ",e.jsx(r,{bold:!0,color:"white",children:"s"}),e.jsx(r,{dimColor:!0,children:" Save configuration"})]}),e.jsxs(r,{children:[" ",e.jsx(r,{bold:!0,color:"white",children:"q"}),e.jsx(r,{dimColor:!0,children:" Quit"})]}),e.jsxs(r,{children:[" ",e.jsx(r,{bold:!0,color:"white",children:"?"}),e.jsx(r,{dimColor:!0,children:" Toggle help"})]})]})]}),Xe=e.jsx(Er,{focused:E==="preview",hadComments:n.hadComments,jsonPreview:We,mode:n.mode,scrollRef:B}),ve=c>=Or,He=ve?Math.floor(c*.38):0;return e.jsxs(s,{flexDirection:"column",height:a,width:c,children:[e.jsxs(s,{flexShrink:0,gap:1,paddingX:1,children:[e.jsx(r,{bold:!0,inverse:!0,children:" VIS "}),e.jsxs(r,{wrap:"truncate",children:[n.mode==="create"?"Create":"Edit"," ","devcontainer"]})]}),e.jsx(s,{flexShrink:0,paddingX:1,paddingY:1,children:e.jsx(mt,{defaultValue:n.section,keyMap:{useNumbers:!1,useTab:!1},onChange:v(u=>{t.setSection(u),D("editor")},"onChange"),showIndex:!1,children:Ge.map(({id:u,label:h})=>e.jsx(gt,{name:u,children:h},u))})}),e.jsx(s,{flexShrink:0,paddingRight:2,children:e.jsx(r,{dimColor:!0,wrap:"truncate",children:Fr.get(n.section)??""})}),e.jsxs(s,{flexDirection:"row",flexGrow:1,overflow:"hidden",children:[e.jsx(s,{borderColor:E==="editor"?"white":"gray",borderStyle:"single",flexDirection:"column",flexGrow:1,overflow:"hidden",children:F}),ve&&e.jsx(s,{flexShrink:0,width:He,children:Xe})]}),Ue,e.jsx(rt,{autoExitSeconds:3,onCancel:v(()=>{f(!1)},"onCancel"),visible:g}),Ve]})},"VisDevcontainerApp");var Mr=Object.defineProperty,Ie=v((o,t)=>Mr(o,"name",{value:t,configurable:!0}),"c");const Wr=Ie(async({logger:o,options:t,workspaceRoot:i})=>{if(!i)throw new Error("Could not determine workspace root. Run this command inside a monorepo or project directory.");const c=i,a=t.template,n=t.output,l=!!process.stdout.isTTY&&!it;let m=null;try{m=st(c).name}catch{}const g=Ct(c);let f=g?.config??null;const j=g?.hadComments??!1;if(a&&!g){const E=V.find(D=>D.id===a);if(!E){const D=V.map(R=>R.id).join(", ");throw new Error(`Unknown template "${a}". Valid templates: ${D}`)}f=E.config}if(!l){f?o.info(JSON.stringify(f,null,2)):(o.error("No existing devcontainer.json found. Use --template to generate one in non-TTY mode."),process.exitCode=1);return}process.stdin.isTTY&&typeof process.stdin.setRawMode=="function"&&(process.stdin.setRawMode(!0),process.stdin.ref(),process.stdin.resume());const x=setInterval(()=>{},1e3),b=new Dt(f,j,m);a&&!g&&b.dismissTemplateSelector();let w=null;if(await ot(nt.createElement($r,{onSave:Ie(E=>{St(c,E,n),w=E},"onSave"),store:b}),{alternateScreen:!0,exitOnCtrlC:!1,interactive:!0,patchConsole:!0}).waitUntilExit(),clearInterval(x),w){const E=n??".devcontainer/devcontainer.json";o.info(`DevContainer config saved to ${E}`)}},"execute");export{Wr as default};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
var
|
|
2
|
-
Settings that would sync to pnpm-workspace.yaml:`);for(const
|
|
3
|
-
`);const
|
|
4
|
-
`);for(const
|
|
1
|
+
var X=Object.defineProperty;var j=(c,o)=>X(c,"name",{value:o,configurable:!0});import{e as q,g as H,p as m,T as K,h as V,a as Z,G as f,i as A,c as _,j as Q,k as U,R as i,l as W,d as ee,n as y,X as D,B as te,J as oe,s as se}from"./bin.js";import{H as re,e as ae,Z as ne}from"../packem_shared/ai-analysis-KP8b5lc0.js";import{A as ie}from"../packem_shared/pm-runner-Ta_yz2uP.js";import{U as ce,C as le,a as J}from"../packem_shared/vis-update-app-BCKzlqj8.js";var de=Object.defineProperty,ue=j((c,o)=>de(c,"name",{value:o,configurable:!0}),"A");const ve=ue(async({argument:c,logger:o,options:e,visConfig:n,workspaceRoot:R})=>{if(!R)throw new Error("Could not determine workspace root. Run this command inside a monorepo.");const u=R;if(e.securityConfig){const t=ie(u);if(q(n??{},t.name),e.sync&&t.name==="pnpm"){const s=H(n??{});if(s.length>0){m.info(`
|
|
2
|
+
Settings that would sync to pnpm-workspace.yaml:`);for(const x of s)m.success(` ${x}`)}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:M}=K(u),N=V(u),l=n?.update??{},v=Z(u,M,{dev:e.dev,includeInternal:e["include-internal"],peer:e.peer,prod:e.prod});if(v.size===0){o.info("No catalogs found.");return}const h=e.target??l.target??"latest";if(!["latest","minor","patch"].includes(h))throw new Error(`Invalid target "${h}". Use: latest, minor, or patch.`);const z={exclude:[...f(e.exclude),...f(l.exclude)],ignore:f(l.ignore),include:[...f(e.include),...f(l.include),...c],includeLocked:!!e.includeLocked,includePrerelease:e.prerelease||l.prerelease||!1,security:e.security!==!1,target:h};let $=0;for(const t of v.values())$+=t.size;const w=!!process.stdout.isTTY&&!se;let d;const B=w?(t,s)=>{d?d.rerender(i.createElement(J,{current:t,total:s})):d=U(i.createElement(J,{current:t,total:s}),{interactive:!0,patchConsole:!1})}:(t,s)=>{o.info(`Checking ${String(t)}/${String(s)} dependencies...`)};w||o.info(`Checking ${String($)} catalog dependencies against npm registry...
|
|
3
|
+
`);const C=new Set;A("socket")&&C.add("socket"),A("depsDev")&&C.add("deps-dev");const k=n?.security?.policies?.score?.minimum,I=_(n?.security,{disabled:C,minimumScore:k}),{failed:E,outdated:a}=await Q(v,z,N,B,u,I,n?.security?.acceptedRisks);if(d&&(d.clear(),d.unmount()),E.length>0&&o.warn(`Failed to fetch: ${E.join(", ")}`),a.length===0){o.info("All catalog dependencies are up to date.");return}const b=e.format??l.format??"table",L=re(e.aiType??"impact"),p=e.ai?await ae(a,o,n?.ai,L):void 0;if(w&&b==="table"){const t=new ce(a,p??null),s=n?.tui?.autoExit??!1,x=s===!0?3:typeof s=="number"?s:0;await U(i.createElement(le,{autoExitSeconds:x,isDryRun:!0,store:t}),{alternateScreen:!0,exitOnCtrlC:!1,interactive:!0,patchConsole:!0}).waitUntilExit();const O=process.stdout.columns||80;process.stdout.write(`
|
|
4
|
+
`);for(const r of a){const P=r.vulnerabilities?.length||r.socketReport&&r.socketReport.alerts.length>0,S=!!r.acceptedRisk,Y=P?S?"✓":"⚠":"✓",F=S?"gray":r.updateType==="major"?"red":r.updateType==="minor"?"yellow":"green",g=r.socketReport?.score.overall,G=g===void 0?"":` [${String(Math.round(g*100))}%]`,T=g===void 0?void 0:W(g);process.stdout.write(`${ee(i.createElement(y,null," ",i.createElement(y,{color:F},Y),` ${r.packageName} ${r.currentRange} → ${r.newRange}`,i.createElement(y,{dimColor:!0},` ${r.updateType}`),T?i.createElement(y,{color:T},G):null),{columns:O})}
|
|
5
5
|
`)}process.stdout.write(`
|
|
6
|
-
`),o.info(
|
|
7
|
-
`)}else b==="minimal"?process.stdout.write(`${
|
|
8
|
-
`):(
|
|
6
|
+
`),o.info(D(a,k))}else if(b==="json"){const t={failed:E,outdated:a};p&&(t.aiAnalysis=p),process.stdout.write(`${JSON.stringify(t,void 0,2)}
|
|
7
|
+
`)}else b==="minimal"?process.stdout.write(`${te(a)}
|
|
8
|
+
`):(oe(a,o),o.info(D(a,k)),p&&(o.info(""),o.info(ne(p))));e.exitCode&&a.length>0&&(process.exitCode=1)},"execute");export{ve as default};
|