react-grab 0.0.82 → 0.0.83
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/dist/{chunk-STRAHFDU.js → chunk-D2T4TGEM.js} +2 -2
- package/dist/{chunk-VX5TI23F.cjs → chunk-FU7ZULMN.cjs} +2 -2
- package/dist/cli.cjs +3 -3
- package/dist/core.cjs +1 -1
- package/dist/core.js +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.global.js +2 -2
- package/dist/index.js +1 -1
- package/package.json +2 -2
package/dist/cli.cjs
CHANGED
|
@@ -214,7 +214,7 @@ Filtered results for: ${this.inputValue?this.inputValue:t.gray("Enter something
|
|
|
214
214
|
`),this.close();}submit(){this.value=this.value||false,this.done=true,this.aborted=false,this.fire(),this.render(),this.out.write(`
|
|
215
215
|
`),this.close();}_(a,h){return a.toLowerCase()==="y"?(this.value=true,this.submit()):a.toLowerCase()==="n"?(this.value=false,this.submit()):this.bell()}render(){this.closed||(this.firstRender?this.out.write(n.hide):this.out.write(s(this.outputText,this.out.columns)),super.render(),this.outputText=[r.symbol(this.done,this.aborted),t.bold(this.msg),r.delimiter(this.done),this.done?this.value?this.yesMsg:this.noMsg:t.gray(this.initialValue?this.yesOption:this.noOption)].join(" "),this.out.write(i.line+n.to(0)+this.outputText));}}return yo=o,yo}var Co,Pd;function Qy(){return Pd||(Pd=1,Co={TextPrompt:By(),SelectPrompt:My(),TogglePrompt:Hy(),DatePrompt:Jy(),NumberPrompt:Ky(),MultiselectPrompt:Zd(),AutocompletePrompt:zy(),AutocompleteMultiselectPrompt:Xy(),ConfirmPrompt:Zy()}),Co}var $d;function eC(){return $d||($d=1,function(t){let e=t,r=Qy(),s=o=>o;function i(o,u,a={}){return new Promise((h,l)=>{let c=new r[o](u),d=a.onAbort||s,f=a.onSubmit||s,p=a.onExit||s;c.on("state",u.onState||s),c.on("submit",m=>h(f(m))),c.on("exit",m=>h(p(m))),c.on("abort",m=>l(d(m)));})}e.text=o=>i("TextPrompt",o),e.password=o=>(o.style="password",e.text(o)),e.invisible=o=>(o.style="invisible",e.text(o)),e.number=o=>i("NumberPrompt",o),e.date=o=>i("DatePrompt",o),e.confirm=o=>i("ConfirmPrompt",o),e.list=o=>{let u=o.separator||",";return i("TextPrompt",o,{onSubmit:a=>a.split(u).map(h=>h.trim())})},e.toggle=o=>i("TogglePrompt",o),e.select=o=>i("SelectPrompt",o),e.multiselect=o=>{o.choices=[].concat(o.choices||[]);let u=a=>a.filter(h=>h.selected).map(h=>h.value);return i("MultiselectPrompt",o,{onAbort:u,onSubmit:u})},e.autocompleteMultiselect=o=>{o.choices=[].concat(o.choices||[]);let u=a=>a.filter(h=>h.selected).map(h=>h.value);return i("AutocompleteMultiselectPrompt",o,{onAbort:u,onSubmit:u})};let n=(o,u)=>Promise.resolve(u.filter(a=>a.title.slice(0,o.length).toLowerCase()===o.toLowerCase()));e.autocomplete=o=>(o.suggest=o.suggest||n,o.choices=[].concat(o.choices||[]),i("AutocompletePrompt",o));}(Ln)),Ln}var _o,kd;function tC(){if(kd)return _o;kd=1;let t=eC(),e=["suggest","format","onState","validate","onRender","type"],r=()=>{};async function s(u=[],{onSubmit:a=r,onCancel:h=r}={}){let l={},c=s._override||{};u=[].concat(u);let d,f,p,m,g,b,y=async(v,F,E=false)=>{if(!(!E&&v.validate&&v.validate(F)!==true))return v.format?await v.format(F,l):F};for(f of u)if({name:m,type:g}=f,typeof g=="function"&&(g=await g(d,{...l},f),f.type=g),!!g){for(let v in f){if(e.includes(v))continue;let F=f[v];f[v]=typeof F=="function"?await F(d,{...l},b):F;}if(b=f,typeof f.message!="string")throw new Error("prompt message is required");if({name:m,type:g}=f,t[g]===void 0)throw new Error(`prompt type (${g}) is not defined`);if(c[f.name]!==void 0&&(d=await y(f,c[f.name]),d!==void 0)){l[m]=d;continue}try{d=s._injected?i(s._injected,f.initial):await t[g](f),l[m]=d=await y(f,d,!0),p=await a(f,d,l);}catch{p=!await h(f,l);}if(p)return l}return l}function i(u,a){let h=u.shift();if(h instanceof Error)throw h;return h===void 0?a:h}function n(u){s._injected=(s._injected||[]).concat(u);}function o(u){s._override=Object.assign({},u);}return _o=Object.assign(s,{prompt:s,prompts:t,inject:n,override:o}),_o}var vo,Id;function rC(){return Id||(Id=1,vo=tC()),vo}var sC=rC(),iC=So(sC);var tf=["npm","yarn","yarn@berry","pnpm","pnpm@6","bun","deno"],Oo={"bun.lock":"bun","bun.lockb":"bun","deno.lock":"deno","pnpm-lock.yaml":"pnpm","yarn.lock":"yarn","package-lock.json":"npm","npm-shrinkwrap.json":"npm"},rf={bun:"https://bun.sh",deno:"https://deno.com",pnpm:"https://pnpm.io/installation","pnpm@6":"https://pnpm.io/6.x/installation",yarn:"https://classic.yarnpkg.com/en/docs/install","yarn@berry":"https://yarnpkg.com/getting-started/install",npm:"https://docs.npmjs.com/cli/v8/configuring-npm/install"};async function hC(t={}){let{cwd:e,onUnknown:r}=t;for(let s of dC(e)){for(let n of Object.keys(Oo))if(await sf(vt__default.default.join(s,n))){let o=Oo[n],u=await Md(vt__default.default.join(s,"package.json"),r);return u||{name:o,agent:o}}let i=await Md(vt__default.default.join(s,"package.json"),r);if(i)return i}return null}function*dC(t=ke__default.default.cwd()){let e=vt__default.default.resolve(t),{root:r}=vt__default.default.parse(e);for(;e&&e!==r;)yield e,e=vt__default.default.dirname(e);}async function Md(t,e){return !t||!await sf(t)?null:fC(t,e)}function fC(t,e){try{let r=JSON.parse(Kd__default.default.readFileSync(t,"utf8")),s;if(typeof r.packageManager=="string"){let[i,n]=r.packageManager.replace(/^\^/,"").split("@"),o=n;return i==="yarn"&&Number.parseInt(n)>1?(s="yarn@berry",o="berry",{name:i,agent:s,version:o}):i==="pnpm"&&Number.parseInt(n)<7?(s="pnpm@6",{name:i,agent:s,version:o}):tf.includes(i)?(s=i,{name:i,agent:s,version:o}):e?.(r.packageManager)??null}}catch{}return null}async function sf(t){try{if((await zd__default.default.stat(t)).isFile())return !0}catch{}return false}var L="\x1B[",mr="\x1B]",Nt="\x07",as=";",nf=process.env.TERM_PROGRAM==="Apple_Terminal",B={};B.cursorTo=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");return typeof e!="number"?L+(t+1)+"G":L+(e+1)+";"+(t+1)+"H"};B.cursorMove=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");let r="";return t<0?r+=L+-t+"D":t>0&&(r+=L+t+"C"),e<0?r+=L+-e+"A":e>0&&(r+=L+e+"B"),r};B.cursorUp=(t=1)=>L+t+"A";B.cursorDown=(t=1)=>L+t+"B";B.cursorForward=(t=1)=>L+t+"C";B.cursorBackward=(t=1)=>L+t+"D";B.cursorLeft=L+"G";B.cursorSavePosition=nf?"\x1B7":L+"s";B.cursorRestorePosition=nf?"\x1B8":L+"u";B.cursorGetPosition=L+"6n";B.cursorNextLine=L+"E";B.cursorPrevLine=L+"F";B.cursorHide=L+"?25l";B.cursorShow=L+"?25h";B.eraseLines=t=>{let e="";for(let r=0;r<t;r++)e+=B.eraseLine+(r<t-1?B.cursorUp():"");return t&&(e+=B.cursorLeft),e};B.eraseEndLine=L+"K";B.eraseStartLine=L+"1K";B.eraseLine=L+"2K";B.eraseDown=L+"J";B.eraseUp=L+"1J";B.eraseScreen=L+"2J";B.scrollUp=L+"S";B.scrollDown=L+"T";B.clearScreen="\x1Bc";B.clearTerminal=process.platform==="win32"?`${B.eraseScreen}${L}0f`:`${B.eraseScreen}${L}3J${L}H`;B.beep=Nt;B.link=(t,e)=>[mr,"8",as,as,e,Nt,t,mr,"8",as,as,Nt].join("");B.image=(t,e={})=>{let r=`${mr}1337;File=inline=1`;return e.width&&(r+=`;width=${e.width}`),e.height&&(r+=`;height=${e.height}`),e.preserveAspectRatio===false&&(r+=";preserveAspectRatio=0"),r+":"+t.toString("base64")+Nt};B.iTerm={setCwd:(t=process.cwd())=>`${mr}50;CurrentDir=${t}${Nt}`,annotation:(t,e={})=>{let r=`${mr}1337;`,s=typeof e.x<"u",i=typeof e.y<"u";if((s||i)&&!(s&&i&&typeof e.length<"u"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return t=t.replace(/\|/g,""),r+=e.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",e.length>0?r+=(s?[t,e.length,e.x,e.y]:[e.length,t]).join("|"):r+=t,r+Nt}};var xo,Hd;function of(){return Hd||(Hd=1,xo=(t,e=process.argv)=>{let r=t.startsWith("-")?"":t.length===1?"-":"--",s=e.indexOf(r+t),i=e.indexOf("--");return s!==-1&&(i===-1||s<i)}),xo}var Fo,Nd;function pC(){if(Nd)return Fo;Nd=1;let t=wy__default.default,e=mf__default.default,r=of(),{env:s}=process,i;r("no-color")||r("no-colors")||r("color=false")||r("color=never")?i=0:(r("color")||r("colors")||r("color=true")||r("color=always"))&&(i=1),"FORCE_COLOR"in s&&(s.FORCE_COLOR==="true"?i=1:s.FORCE_COLOR==="false"?i=0:i=s.FORCE_COLOR.length===0?1:Math.min(parseInt(s.FORCE_COLOR,10),3));function n(a){return a===0?false:{level:a,hasBasic:true,has256:a>=2,has16m:a>=3}}function o(a,h){if(i===0)return 0;if(r("color=16m")||r("color=full")||r("color=truecolor"))return 3;if(r("color=256"))return 2;if(a&&!h&&i===void 0)return 0;let l=i||0;if(s.TERM==="dumb")return l;if(process.platform==="win32"){let c=t.release().split(".");return Number(c[0])>=10&&Number(c[2])>=10586?Number(c[2])>=14931?3:2:1}if("CI"in s)return ["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(c=>c in s)||s.CI_NAME==="codeship"?1:l;if("TEAMCITY_VERSION"in s)return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(s.TEAMCITY_VERSION)?1:0;if(s.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in s){let c=parseInt((s.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(s.TERM_PROGRAM){case "iTerm.app":return c>=3?3:2;case "Apple_Terminal":return 2}}return /-256(color)?$/i.test(s.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(s.TERM)||"COLORTERM"in s?1:l}function u(a){let h=o(a,a&&a.isTTY);return n(h)}return Fo={supportsColor:u,stdout:n(o(true,e.isatty(1))),stderr:n(o(true,e.isatty(2)))},Fo}var wo,qd;function mC(){if(qd)return wo;qd=1;let t=pC(),e=of();function r(i){if(/^\d{3,4}$/.test(i)){let o=/(\d{1,2})(\d{2})/.exec(i);return {major:0,minor:parseInt(o[1],10),patch:parseInt(o[2],10)}}let n=(i||"").split(".").map(o=>parseInt(o,10));return {major:n[0],minor:n[1],patch:n[2]}}function s(i){let{env:n}=process;if("FORCE_HYPERLINK"in n)return !(n.FORCE_HYPERLINK.length>0&&parseInt(n.FORCE_HYPERLINK,10)===0);if(e("no-hyperlink")||e("no-hyperlinks")||e("hyperlink=false")||e("hyperlink=never"))return false;if(e("hyperlink=true")||e("hyperlink=always"))return true;if(!t.supportsColor(i)||i&&!i.isTTY||process.platform==="win32")return false;if("NETLIFY"in n)return true;if("CI"in n||"TEAMCITY_VERSION"in n)return false;if("TERM_PROGRAM"in n){let o=r(n.TERM_PROGRAM_VERSION);switch(n.TERM_PROGRAM){case "iTerm.app":return o.major===3?o.minor>=1:o.major>3}}if("VTE_VERSION"in n){if(n.VTE_VERSION==="0.50.0")return false;let o=r(n.VTE_VERSION);return o.major>0||o.minor>=50}return false}return wo={supportsHyperlink:s,stdout:s(process.stdout),stderr:s(process.stderr)},wo}var gC=mC(),To=So(gC);function gr(t,e,{target:r="stdout",...s}={}){return To[r]?B.link(t,e):s.fallback===false?t:typeof s.fallback=="function"?s.fallback(t,e):`${t} (\u200B${e}\u200B)`}gr.isSupported=To.stdout;gr.stderr=(t,e,r={})=>gr(t,e,{target:"stderr",...r});gr.stderr.isSupported=To.stderr;var Ht=module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli.cjs', document.baseURI).href))),DC=Object.create,uf=Object.defineProperty,bC=Object.getOwnPropertyDescriptor,yC=Object.getOwnPropertyNames,CC=Object.getPrototypeOf,_C=Object.prototype.hasOwnProperty,gt=(t=>typeof Ht<"u"?Ht:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof Ht<"u"?Ht:e)[r]}):t)(function(t){if(typeof Ht<"u")return Ht.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')}),be=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),vC=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of yC(e))!_C.call(t,i)&&i!==r&&uf(t,i,{get:()=>e[i],enumerable:!(s=bC(e,i))||s.enumerable});return t},xC=(t,e,r)=>(r=t!=null?DC(CC(t)):{},vC(uf(r,"default",{value:t,enumerable:true}),t)),FC=be((t,e)=>{e.exports=n,n.sync=o;var r=gt("fs");function s(u,a){var h=a.pathExt!==void 0?a.pathExt:process.env.PATHEXT;if(!h||(h=h.split(";"),h.indexOf("")!==-1))return true;for(var l=0;l<h.length;l++){var c=h[l].toLowerCase();if(c&&u.substr(-c.length).toLowerCase()===c)return true}return false}function i(u,a,h){return !u.isSymbolicLink()&&!u.isFile()?false:s(a,h)}function n(u,a,h){r.stat(u,function(l,c){h(l,l?false:i(c,u,a));});}function o(u,a){return i(r.statSync(u),u,a)}}),wC=be((t,e)=>{e.exports=s,s.sync=i;var r=gt("fs");function s(u,a,h){r.stat(u,function(l,c){h(l,l?false:n(c,a));});}function i(u,a){return n(r.statSync(u),a)}function n(u,a){return u.isFile()&&o(u,a)}function o(u,a){var h=u.mode,l=u.uid,c=u.gid,d=a.uid!==void 0?a.uid:process.getuid&&process.getuid(),f=a.gid!==void 0?a.gid:process.getgid&&process.getgid(),p=parseInt("100",8),m=parseInt("010",8),g=parseInt("001",8),b=p|m,y=h&g||h&m&&c===f||h&p&&l===d||h&b&&d===0;return y}}),EC=be((t,e)=>{gt("fs");var r;process.platform==="win32"||global.TESTING_WINDOWS?r=FC():r=wC(),e.exports=s,s.sync=i;function s(n,o,u){if(typeof o=="function"&&(u=o,o={}),!u){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(a,h){s(n,o||{},function(l,c){l?h(l):a(c);});})}r(n,o||{},function(a,h){a&&(a.code==="EACCES"||o&&o.ignoreErrors)&&(a=null,h=false),u(a,h);});}function i(n,o){try{return r.sync(n,o||{})}catch(u){if(o&&o.ignoreErrors||u.code==="EACCES")return false;throw u}}}),AC=be((t,e)=>{var r=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",s=gt("path"),i=r?";":":",n=EC(),o=l=>Object.assign(new Error(`not found: ${l}`),{code:"ENOENT"}),u=(l,c)=>{let d=c.colon||i,f=l.match(/\//)||r&&l.match(/\\/)?[""]:[...r?[process.cwd()]:[],...(c.path||process.env.PATH||"").split(d)],p=r?c.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",m=r?p.split(d):[""];return r&&l.indexOf(".")!==-1&&m[0]!==""&&m.unshift(""),{pathEnv:f,pathExt:m,pathExtExe:p}},a=(l,c,d)=>{typeof c=="function"&&(d=c,c={}),c||(c={});let{pathEnv:f,pathExt:p,pathExtExe:m}=u(l,c),g=[],b=v=>new Promise((F,E)=>{if(v===f.length)return c.all&&g.length?F(g):E(o(l));let R=f[v],P=/^".*"$/.test(R)?R.slice(1,-1):R,O=s.join(P,l),T=!P&&/^\.[\\\/]/.test(l)?l.slice(0,2)+O:O;F(y(T,v,0));}),y=(v,F,E)=>new Promise((R,P)=>{if(E===p.length)return R(b(F+1));let O=p[E];n(v+O,{pathExt:m},(T,te)=>{if(!T&&te)if(c.all)g.push(v+O);else return R(v+O);return R(y(v,F,E+1))});});return d?b(0).then(v=>d(null,v),d):b(0)},h=(l,c)=>{c=c||{};let{pathEnv:d,pathExt:f,pathExtExe:p}=u(l,c),m=[];for(let g=0;g<d.length;g++){let b=d[g],y=/^".*"$/.test(b)?b.slice(1,-1):b,v=s.join(y,l),F=!y&&/^\.[\\\/]/.test(l)?l.slice(0,2)+v:v;for(let E=0;E<f.length;E++){let R=F+f[E];try{if(n.sync(R,{pathExt:p}))if(c.all)m.push(R);else return R}catch{}}}if(c.all&&m.length)return m;if(c.nothrow)return null;throw o(l)};e.exports=a,a.sync=h;}),OC=be((t,e)=>{var r=(s={})=>{let i=s.env||process.env;return (s.platform||process.platform)!=="win32"?"PATH":Object.keys(i).reverse().find(n=>n.toUpperCase()==="PATH")||"Path"};e.exports=r,e.exports.default=r;}),SC=be((t,e)=>{var r=gt("path"),s=AC(),i=OC();function n(u,a){let h=u.options.env||process.env,l=process.cwd(),c=u.options.cwd!=null,d=c&&process.chdir!==void 0&&!process.chdir.disabled;if(d)try{process.chdir(u.options.cwd);}catch{}let f;try{f=s.sync(u.command,{path:h[i({env:h})],pathExt:a?r.delimiter:void 0});}catch{}finally{d&&process.chdir(l);}return f&&(f=r.resolve(c?u.options.cwd:"",f)),f}function o(u){return n(u)||n(u,true)}e.exports=o;}),RC=be((t,e)=>{var r=/([()\][%!^"`<>&|;, *?])/g;function s(n){return n=n.replace(r,"^$1"),n}function i(n,o){return n=`${n}`,n=n.replace(/(\\*)"/g,'$1$1\\"'),n=n.replace(/(\\*)$/,"$1$1"),n=`"${n}"`,n=n.replace(r,"^$1"),o&&(n=n.replace(r,"^$1")),n}e.exports.command=s,e.exports.argument=i;}),TC=be((t,e)=>{e.exports=/^#!(.*)/;}),PC=be((t,e)=>{var r=TC();e.exports=(s="")=>{let i=s.match(r);if(!i)return null;let[n,o]=i[0].replace(/#! ?/,"").split(" "),u=n.split("/").pop();return u==="env"?o:o?`${u} ${o}`:u};}),$C=be((t,e)=>{var r=gt("fs"),s=PC();function i(n){let o=Buffer.alloc(150),u;try{u=r.openSync(n,"r"),r.readSync(u,o,0,150,0),r.closeSync(u);}catch{}return s(o.toString())}e.exports=i;}),kC=be((t,e)=>{var r=gt("path"),s=SC(),i=RC(),n=$C(),o=process.platform==="win32",u=/\.(?:com|exe)$/i,a=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function h(d){d.file=s(d);let f=d.file&&n(d.file);return f?(d.args.unshift(d.file),d.command=f,s(d)):d.file}function l(d){if(!o)return d;let f=h(d),p=!u.test(f);if(d.options.forceShell||p){let m=a.test(f);d.command=r.normalize(d.command),d.command=i.command(d.command),d.args=d.args.map(b=>i.argument(b,m));let g=[d.command].concat(d.args).join(" ");d.args=["/d","/s","/c",`"${g}"`],d.command=process.env.comspec||"cmd.exe",d.options.windowsVerbatimArguments=true;}return d}function c(d,f,p){f&&!Array.isArray(f)&&(p=f,f=null),f=f?f.slice(0):[],p=Object.assign({},p);let m={command:d,args:f,options:p,file:void 0,original:{command:d,args:f}};return p.shell?m:l(m)}e.exports=c;}),IC=be((t,e)=>{var r=process.platform==="win32";function s(u,a){return Object.assign(new Error(`${a} ${u.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${a} ${u.command}`,path:u.command,spawnargs:u.args})}function i(u,a){if(!r)return;let h=u.emit;u.emit=function(l,c){if(l==="exit"){let d=n(c,a);if(d)return h.call(u,"error",d)}return h.apply(u,arguments)};}function n(u,a){return r&&u===1&&!a.file?s(a.original,"spawn"):null}function o(u,a){return r&&u===1&&!a.file?s(a.original,"spawnSync"):null}e.exports={hookChildProcess:i,verifyENOENT:n,verifyENOENTSync:o,notFoundError:s};}),BC=be((t,e)=>{var r=gt("child_process"),s=kC(),i=IC();function n(u,a,h){let l=s(u,a,h),c=r.spawn(l.command,l.args,l.options);return i.hookChildProcess(c,l),c}function o(u,a,h){let l=s(u,a,h),c=r.spawnSync(l.command,l.args,l.options);return c.error=c.error||i.verifyENOENTSync(c.status,l),c}e.exports=n,e.exports.spawn=n,e.exports.sync=o,e.exports._parse=s,e.exports._enoent=i;}),MC=/^path$/i,Ld={key:"PATH",value:""};function HC(t){for(let e in t){if(!Object.prototype.hasOwnProperty.call(t,e)||!MC.test(e))continue;let r=t[e];return r?{key:e,value:r}:Ld}return Ld}function NC(t,e){let r=e.value.split(vt.delimiter),s=t,i;do r.push(vt.resolve(s,"node_modules",".bin")),i=s,s=vt.dirname(s);while(s!==i);return {key:e.key,value:r.join(vt.delimiter)}}function qC(t,e){let r={...process.env,...e},s=NC(t,HC(r));return r[s.key]=s.value,r}var LC=t=>{let e=t.length,r=new stream.PassThrough,s=()=>{--e===0&&r.emit("end");};for(let i of t)i.pipe(r,{end:false}),i.on("end",s);return r},jC=xC(BC()),jd=class extends Error{result;output;get exitCode(){if(this.result.exitCode!==null)return this.result.exitCode}constructor(t,e){super(`Process exited with non-zero status (${t.exitCode})`),this.result=t,this.output=e;}},GC={timeout:void 0,persist:false},VC={windowsHide:true};function UC(t,e){return {command:vt.normalize(t),args:e??[]}}function WC(t){let e=new AbortController;for(let r of t){if(r.aborted)return e.abort(),r;let s=()=>{e.abort(r.reason);};r.addEventListener("abort",s,{signal:e.signal});}return e.signal}var YC=class{_process;_aborted=false;_options;_command;_args;_resolveClose;_processClosed;_thrownError;get process(){return this._process}get pid(){return this._process?.pid}get exitCode(){if(this._process&&this._process.exitCode!==null)return this._process.exitCode}constructor(t,e,r){this._options={...GC,...r},this._command=t,this._args=e??[],this._processClosed=new Promise(s=>{this._resolveClose=s;});}kill(t){return this._process?.kill(t)===true}get aborted(){return this._aborted}get killed(){return this._process?.killed===true}pipe(t,e,r){return JC(t,e,{...r,stdin:this})}async*[Symbol.asyncIterator](){let t=this._process;if(!t)return;let e=[];this._streamErr&&e.push(this._streamErr),this._streamOut&&e.push(this._streamOut);let r=LC(e),s=Jd__default.default.createInterface({input:r});for await(let i of s)yield i.toString();if(await this._processClosed,t.removeAllListeners(),this._thrownError)throw this._thrownError;if(this._options?.throwOnError&&this.exitCode!==0&&this.exitCode!==void 0)throw new jd(this)}async _waitForOutput(){let t=this._process;if(!t)throw new Error("No process was started");let e="",r="";if(this._streamErr)for await(let i of this._streamErr)e+=i.toString();if(this._streamOut)for await(let i of this._streamOut)r+=i.toString();if(await this._processClosed,this._options?.stdin&&await this._options.stdin,t.removeAllListeners(),this._thrownError)throw this._thrownError;let s={stderr:e,stdout:r,exitCode:this.exitCode};if(this._options.throwOnError&&this.exitCode!==0&&this.exitCode!==void 0)throw new jd(this,s);return s}then(t,e){return this._waitForOutput().then(t,e)}_streamOut;_streamErr;spawn(){let t=ke.cwd(),e=this._options,r={...VC,...e.nodeOptions},s=[];this._resetState(),e.timeout!==void 0&&s.push(AbortSignal.timeout(e.timeout)),e.signal!==void 0&&s.push(e.signal),e.persist===true&&(r.detached=true),s.length>0&&(r.signal=WC(s)),r.env=qC(t,r.env);let{command:i,args:n}=UC(this._command,this._args),o=(0, jC._parse)(i,n,r),u=child_process.spawn(o.command,o.args,o.options);if(u.stderr&&(this._streamErr=u.stderr),u.stdout&&(this._streamOut=u.stdout),this._process=u,u.once("error",this._onError),u.once("close",this._onClose),e.stdin!==void 0&&u.stdin&&e.stdin.process){let{stdout:a}=e.stdin.process;a&&a.pipe(u.stdin);}}_resetState(){this._aborted=false,this._processClosed=new Promise(t=>{this._resolveClose=t;}),this._thrownError=void 0;}_onError=t=>{if(t.name==="AbortError"&&(!(t.cause instanceof Error)||t.cause.name!=="TimeoutError")){this._aborted=true;return}this._thrownError=t;};_onClose=()=>{this._resolveClose&&this._resolveClose();}},af=(t,e,r)=>{let s=new YC(t,e,r);return s.spawn(),s},JC=af;var Oe={},Ct={},Gd;function KC(){if(Gd)return Ct;Gd=1,Object.defineProperty(Ct,"__esModule",{value:true}),Ct.sync=Ct.isexe=void 0;let t=Kd__default.default,e=zd__default.default,r=async(o,u={})=>{let{ignoreErrors:a=false}=u;try{return i(await(0,e.stat)(o),u)}catch(h){let l=h;if(a||l.code==="EACCES")return false;throw l}};Ct.isexe=r;let s=(o,u={})=>{let{ignoreErrors:a=false}=u;try{return i((0,t.statSync)(o),u)}catch(h){let l=h;if(a||l.code==="EACCES")return false;throw l}};Ct.sync=s;let i=(o,u)=>o.isFile()&&n(o,u),n=(o,u)=>{let a=u.uid??process.getuid?.(),h=u.groups??process.getgroups?.()??[],l=u.gid??process.getgid?.()??h[0];if(a===void 0||l===void 0)throw new Error("cannot get uid or gid");let c=new Set([l,...h]),d=o.mode,f=o.uid,p=o.gid,m=parseInt("100",8),g=parseInt("010",8),b=parseInt("001",8),y=m|g;return !!(d&b||d&g&&c.has(p)||d&m&&f===a||d&y&&a===0)};return Ct}var _t={},Vd;function zC(){if(Vd)return _t;Vd=1,Object.defineProperty(_t,"__esModule",{value:true}),_t.sync=_t.isexe=void 0;let t=Kd__default.default,e=zd__default.default,r=async(o,u={})=>{let{ignoreErrors:a=false}=u;try{return n(await(0,e.stat)(o),o,u)}catch(h){let l=h;if(a||l.code==="EACCES")return false;throw l}};_t.isexe=r;let s=(o,u={})=>{let{ignoreErrors:a=false}=u;try{return n((0,t.statSync)(o),o,u)}catch(h){let l=h;if(a||l.code==="EACCES")return false;throw l}};_t.sync=s;let i=(o,u)=>{let{pathExt:a=process.env.PATHEXT||""}=u,h=a.split(";");if(h.indexOf("")!==-1)return true;for(let l=0;l<h.length;l++){let c=h[l].toLowerCase(),d=o.substring(o.length-c.length).toLowerCase();if(c&&d===c)return true}return false},n=(o,u,a)=>o.isFile()&&i(u,a);return _t}var Eo={},Ud;function XC(){return Ud||(Ud=1,Object.defineProperty(Eo,"__esModule",{value:true})),Eo}var Wd;function ZC(){return Wd||(Wd=1,function(t){var e=Oe&&Oe.__createBinding||(Object.create?function(h,l,c,d){d===void 0&&(d=c);var f=Object.getOwnPropertyDescriptor(l,c);(!f||("get"in f?!l.__esModule:f.writable||f.configurable))&&(f={enumerable:true,get:function(){return l[c]}}),Object.defineProperty(h,d,f);}:function(h,l,c,d){d===void 0&&(d=c),h[d]=l[c];}),r=Oe&&Oe.__setModuleDefault||(Object.create?function(h,l){Object.defineProperty(h,"default",{enumerable:true,value:l});}:function(h,l){h.default=l;}),s=Oe&&Oe.__importStar||function(h){if(h&&h.__esModule)return h;var l={};if(h!=null)for(var c in h)c!=="default"&&Object.prototype.hasOwnProperty.call(h,c)&&e(l,h,c);return r(l,h),l},i=Oe&&Oe.__exportStar||function(h,l){for(var c in h)c!=="default"&&!Object.prototype.hasOwnProperty.call(l,c)&&e(l,h,c);};Object.defineProperty(t,"__esModule",{value:true}),t.sync=t.isexe=t.posix=t.win32=void 0;let n=s(KC());t.posix=n;let o=s(zC());t.win32=o,i(XC(),t);let a=(process.env._ISEXE_TEST_PLATFORM_||process.platform)==="win32"?o:n;t.isexe=a.isexe,t.sync=a.sync;}(Oe)),Oe}var Ao,Yd;function QC(){if(Yd)return Ao;Yd=1;let{isexe:t,sync:e}=ZC(),{join:r,delimiter:s,sep:i,posix:n}=vt__default.default,o=process.platform==="win32",u=new RegExp(`[${n.sep}${i===n.sep?"":i}]`.replace(/(\\)/g,"\\$1")),a=new RegExp(`^\\.${u.source}`),h=p=>Object.assign(new Error(`not found: ${p}`),{code:"ENOENT"}),l=(p,{path:m=process.env.PATH,pathExt:g=process.env.PATHEXT,delimiter:b=s})=>{let y=p.match(u)?[""]:[...o?[process.cwd()]:[],...(m||"").split(b)];if(o){let v=g||[".EXE",".CMD",".BAT",".COM"].join(b),F=v.split(b).flatMap(E=>[E,E.toLowerCase()]);return p.includes(".")&&F[0]!==""&&F.unshift(""),{pathEnv:y,pathExt:F,pathExtExe:v}}return {pathEnv:y,pathExt:[""]}},c=(p,m)=>{let g=/^".*"$/.test(p)?p.slice(1,-1):p;return (!g&&a.test(m)?m.slice(0,2):"")+r(g,m)},d=async(p,m={})=>{let{pathEnv:g,pathExt:b,pathExtExe:y}=l(p,m),v=[];for(let F of g){let E=c(F,p);for(let R of b){let P=E+R;if(await t(P,{pathExt:y,ignoreErrors:true})){if(!m.all)return P;v.push(P);}}}if(m.all&&v.length)return v;if(m.nothrow)return null;throw h(p)},f=(p,m={})=>{let{pathEnv:g,pathExt:b,pathExtExe:y}=l(p,m),v=[];for(let F of g){let E=c(F,p);for(let R of b){let P=E+R;if(e(P,{pathExt:y,ignoreErrors:true})){if(!m.all)return P;v.push(P);}}}if(m.all&&v.length)return v;if(m.nothrow)return null;throw h(p)};return Ao=d,d.sync=f,Ao}var e_=QC(),t_=So(e_);vt.join(wy__default.default.tmpdir(),"antfu-ni");function lf(t){return t_.sync(t,{nothrow:true})!==null}async function Po({autoInstall:t,programmatic:e,cwd:r}={}){let{name:s,agent:i,version:n}=await hC({cwd:r,onUnknown:o=>{e||console.warn("[ni] Unknown packageManager:",o);}})||{};if(s&&!lf(s)&&!e){if(!t){console.warn(`[ni] Detected ${s} but it doesn't seem to be installed.
|
|
216
216
|
`),ke__default.default.env.CI&&ke__default.default.exit(1);let o=gr(s,rf[s]),{tryInstall:u}=await iC({name:"tryInstall",type:"confirm",message:`Would you like to globally install ${o}?`});u||ke__default.default.exit(1);}await af("npm",["i","-g",`${s}${n?`@${n}`:""}`],{nodeOptions:{stdio:"inherit",cwd:r},throwOnError:true});}return i}ke__default.default.env.NI_CONFIG_FILE;var s_=ke__default.default.platform==="win32"?ke__default.default.env.USERPROFILE:ke__default.default.env.HOME;vt__default.default.join(s_||"~/",".nirc");var o_=async t=>{let e=await Po({cwd:t});return e&&["npm","yarn","pnpm","bun"].includes(e)?e:"npm"},cf=t=>{let e=vt.join(t,"package.json");if(!Kd.existsSync(e))return "unknown";try{let r=JSON.parse(Kd.readFileSync(e,"utf-8")),s={...r.dependencies,...r.devDependencies};return s.next?"next":s.vite?"vite":s.webpack?"webpack":"unknown"}catch{return "unknown"}},u_=t=>{let e=Kd.existsSync(vt.join(t,"app")),r=Kd.existsSync(vt.join(t,"src","app")),s=Kd.existsSync(vt.join(t,"pages")),i=Kd.existsSync(vt.join(t,"src","pages"));return e||r?"app":s||i?"pages":"unknown"},a_=t=>{if(Kd.existsSync(vt.join(t,"pnpm-workspace.yaml"))||Kd.existsSync(vt.join(t,"lerna.json")))return true;let e=vt.join(t,"package.json");if(Kd.existsSync(e))try{if(JSON.parse(Kd.readFileSync(e,"utf-8")).workspaces)return !0}catch{return false}return false},l_=t=>{let e=[],r=vt.join(t,"pnpm-workspace.yaml");if(Kd.existsSync(r)){let o=Kd.readFileSync(r,"utf-8").split(`
|
|
217
|
-
`),u=false;for(let a of o){if(a.match(/^packages:\s*$/)){u=true;continue}if(u){if(a.match(/^[a-zA-Z]/)||a.trim()===""){a.match(/^[a-zA-Z]/)&&(u=false);continue}let h=a.match(/^\s*-\s*['"]?([^'"#\n]+?)['"]?\s*$/);h&&e.push(h[1].trim());}}}let s=vt.join(t,"lerna.json");if(Kd.existsSync(s))try{let n=JSON.parse(Kd.readFileSync(s,"utf-8"));Array.isArray(n.packages)&&e.push(...n.packages);}catch{}let i=vt.join(t,"package.json");if(Kd.existsSync(i))try{let n=JSON.parse(Kd.readFileSync(i,"utf-8"));Array.isArray(n.workspaces)?e.push(...n.workspaces):n.workspaces?.packages&&e.push(...n.workspaces.packages);}catch{}return [...new Set(e)]},c_=(t,e)=>{let r=[],s=e.replace(/\/\*$/,""),i=vt.join(t,s);if(!Kd.existsSync(i))return r;try{let n=Kd.readdirSync(i,{withFileTypes:!0});for(let o of n)if(o.isDirectory()){let u=vt.join(i,o.name,"package.json");Kd.existsSync(u)&&r.push(vt.join(i,o.name));}}catch{return r}return r},h_=t=>{let e=vt.join(t,"package.json");if(!Kd.existsSync(e))return false;try{let r=JSON.parse(Kd.readFileSync(e,"utf-8")),s={...r.dependencies,...r.devDependencies};return !!(s.react||s["react-dom"])}catch{return false}},hf=t=>{let e=l_(t),r=[];for(let s of e){let i=c_(t,s);for(let n of i){let o=cf(n),u=h_(n);if(u||o!=="unknown"){let a=vt.join(n,"package.json"),h=vt.basename(n);try{h=JSON.parse(Kd.readFileSync(a,"utf-8")).name||h;}catch{}r.push({name:h,path:n,framework:o,hasReact:u});}}}return r},d_=t=>{if(!Kd.existsSync(t))return false;try{let e=Kd.readFileSync(t,"utf-8");return [/["'`][^"'`]*react-grab/,/react-grab[^"'`]*["'`]/,/<[^>]*react-grab/i,/import[^;]*react-grab/i,/require[^)]*react-grab/i,/from\s+[^;]*react-grab/i,/src[^>]*react-grab/i].some(s=>s.test(e))}catch{return false}},f_=t=>{let e=vt.join(t,"package.json");if(Kd.existsSync(e))try{let s=JSON.parse(Kd.readFileSync(e,"utf-8"));if({...s.dependencies,...s.devDependencies}["react-grab"])return !0}catch{}return [vt.join(t,"app","layout.tsx"),vt.join(t,"app","layout.jsx"),vt.join(t,"src","app","layout.tsx"),vt.join(t,"src","app","layout.jsx"),vt.join(t,"pages","_document.tsx"),vt.join(t,"pages","_document.jsx"),vt.join(t,"instrumentation-client.ts"),vt.join(t,"instrumentation-client.js"),vt.join(t,"src","instrumentation-client.ts"),vt.join(t,"src","instrumentation-client.js"),vt.join(t,"index.html"),vt.join(t,"public","index.html"),vt.join(t,"src","index.tsx"),vt.join(t,"src","index.ts"),vt.join(t,"src","main.tsx"),vt.join(t,"src","main.ts")].some(d_)},p_=["@react-grab/claude-code","@react-grab/cursor","@react-grab/opencode","@react-grab/codex","@react-grab/gemini","@react-grab/amp"],m_=t=>{let e=vt.join(t,"package.json");if(!Kd.existsSync(e))return null;try{let r=JSON.parse(Kd.readFileSync(e,"utf-8")),s={...r.dependencies,...r.devDependencies};return s["@remix-run/react"]||s.remix?"remix":s.astro?"astro":s["@sveltejs/kit"]?"sveltekit":s.gatsby?"gatsby":null}catch{return null}},g_=t=>{let e=vt.join(t,"package.json");if(!Kd.existsSync(e))return [];try{let r=JSON.parse(Kd.readFileSync(e,"utf-8")),s={...r.dependencies,...r.devDependencies};return p_.filter(i=>!!s[i]).map(i=>i.replace("@react-grab/",""))}catch{return []}};var Dr=async(t=process.cwd())=>{let e=cf(t);return {packageManager:await o_(t),framework:e,nextRouterType:e==="next"?u_(t):"unknown",isMonorepo:a_(t),projectRoot:t,hasReactGrab:f_(t),installedAgents:g_(t),unsupportedFramework:m_(t)}};var D_="\x1B[31m",b_="\x1B[32m",ls="\x1B[90m",xt="\x1B[0m",y_="\x1B[1m",C_=(t,e)=>{let r=t.split(`
|
|
217
|
+
`),u=false;for(let a of o){if(a.match(/^packages:\s*$/)){u=true;continue}if(u){if(a.match(/^[a-zA-Z]/)||a.trim()===""){a.match(/^[a-zA-Z]/)&&(u=false);continue}let h=a.match(/^\s*-\s*['"]?([^'"#\n]+?)['"]?\s*$/);h&&e.push(h[1].trim());}}}let s=vt.join(t,"lerna.json");if(Kd.existsSync(s))try{let n=JSON.parse(Kd.readFileSync(s,"utf-8"));Array.isArray(n.packages)&&e.push(...n.packages);}catch{}let i=vt.join(t,"package.json");if(Kd.existsSync(i))try{let n=JSON.parse(Kd.readFileSync(i,"utf-8"));Array.isArray(n.workspaces)?e.push(...n.workspaces):n.workspaces?.packages&&e.push(...n.workspaces.packages);}catch{}return [...new Set(e)]},c_=(t,e)=>{let r=[],s=e.replace(/\/\*$/,""),i=vt.join(t,s);if(!Kd.existsSync(i))return r;try{let n=Kd.readdirSync(i,{withFileTypes:!0});for(let o of n)if(o.isDirectory()){let u=vt.join(i,o.name,"package.json");Kd.existsSync(u)&&r.push(vt.join(i,o.name));}}catch{return r}return r},h_=t=>{let e=vt.join(t,"package.json");if(!Kd.existsSync(e))return false;try{let r=JSON.parse(Kd.readFileSync(e,"utf-8")),s={...r.dependencies,...r.devDependencies};return !!(s.react||s["react-dom"])}catch{return false}},hf=t=>{let e=l_(t),r=[];for(let s of e){let i=c_(t,s);for(let n of i){let o=cf(n),u=h_(n);if(u||o!=="unknown"){let a=vt.join(n,"package.json"),h=vt.basename(n);try{h=JSON.parse(Kd.readFileSync(a,"utf-8")).name||h;}catch{}r.push({name:h,path:n,framework:o,hasReact:u});}}}return r},d_=t=>{if(!Kd.existsSync(t))return false;try{let e=Kd.readFileSync(t,"utf-8");return [/["'`][^"'`]*react-grab/,/react-grab[^"'`]*["'`]/,/<[^>]*react-grab/i,/import[^;]*react-grab/i,/require[^)]*react-grab/i,/from\s+[^;]*react-grab/i,/src[^>]*react-grab/i].some(s=>s.test(e))}catch{return false}},f_=t=>{let e=vt.join(t,"package.json");if(Kd.existsSync(e))try{let s=JSON.parse(Kd.readFileSync(e,"utf-8"));if({...s.dependencies,...s.devDependencies}["react-grab"])return !0}catch{}return [vt.join(t,"app","layout.tsx"),vt.join(t,"app","layout.jsx"),vt.join(t,"src","app","layout.tsx"),vt.join(t,"src","app","layout.jsx"),vt.join(t,"pages","_document.tsx"),vt.join(t,"pages","_document.jsx"),vt.join(t,"instrumentation-client.ts"),vt.join(t,"instrumentation-client.js"),vt.join(t,"src","instrumentation-client.ts"),vt.join(t,"src","instrumentation-client.js"),vt.join(t,"index.html"),vt.join(t,"public","index.html"),vt.join(t,"src","index.tsx"),vt.join(t,"src","index.ts"),vt.join(t,"src","main.tsx"),vt.join(t,"src","main.ts")].some(d_)},p_=["@react-grab/claude-code","@react-grab/cursor","@react-grab/opencode","@react-grab/codex","@react-grab/gemini","@react-grab/amp","@react-grab/ami","@react-grab/instant"],m_=t=>{let e=vt.join(t,"package.json");if(!Kd.existsSync(e))return null;try{let r=JSON.parse(Kd.readFileSync(e,"utf-8")),s={...r.dependencies,...r.devDependencies};return s["@remix-run/react"]||s.remix?"remix":s.astro?"astro":s["@sveltejs/kit"]?"sveltekit":s.gatsby?"gatsby":null}catch{return null}},g_=t=>{let e=vt.join(t,"package.json");if(!Kd.existsSync(e))return [];try{let r=JSON.parse(Kd.readFileSync(e,"utf-8")),s={...r.dependencies,...r.devDependencies};return p_.filter(i=>!!s[i]).map(i=>i.replace("@react-grab/",""))}catch{return []}};var Dr=async(t=process.cwd())=>{let e=cf(t);return {packageManager:await o_(t),framework:e,nextRouterType:e==="next"?u_(t):"unknown",isMonorepo:a_(t),projectRoot:t,hasReactGrab:f_(t),installedAgents:g_(t),unsupportedFramework:m_(t)}};var D_="\x1B[31m",b_="\x1B[32m",ls="\x1B[90m",xt="\x1B[0m",y_="\x1B[1m",C_=(t,e)=>{let r=t.split(`
|
|
218
218
|
`),s=e.split(`
|
|
219
219
|
`),i=[];Math.max(r.length,s.length);let o=0,u=0;for(;o<r.length||u<s.length;){let a=r[o],h=s[u];if(a===h)i.push({type:"unchanged",content:a,lineNumber:u+1}),o++,u++;else if(a===void 0)i.push({type:"added",content:h,lineNumber:u+1}),u++;else if(h===void 0)i.push({type:"removed",content:a}),o++;else {let l=s.indexOf(a,u),c=r.indexOf(h,o);if(l!==-1&&(c===-1||l-u<c-o))for(;u<l;)i.push({type:"added",content:s[u],lineNumber:u+1}),u++;else if(c!==-1)for(;o<c;)i.push({type:"removed",content:r[o]}),o++;else i.push({type:"removed",content:a}),i.push({type:"added",content:h,lineNumber:u+1}),o++,u++;}}return i},__=(t,e=3)=>{let r=[],s=-1,i=false,n=t.map((o,u)=>o.type!=="unchanged"?u:-1).filter(o=>o!==-1);if(n.length===0)return `${ls}No changes${xt}`;for(let o of n){let u=Math.max(0,o-e),a=Math.min(t.length-1,o+e);u>s+1&&s!==-1&&r.push(`${ls} ...${xt}`);for(let h=Math.max(u,s+1);h<=a;h++){let l=t[h];l.type==="added"?(r.push(`${b_}+ ${l.content}${xt}`),i=true):l.type==="removed"?(r.push(`${D_}- ${l.content}${xt}`),i=true):r.push(`${ls} ${l.content}${xt}`),s=h;}}return i?r.join(`
|
|
220
220
|
`):`${ls}No changes${xt}`},qt=(t,e,r)=>{console.log(`
|
|
@@ -314,8 +314,8 @@ ${_s}`));}let a=Nf(e),h=n.match(/<Head[^>]*>/);return h&&(n=n.replace(h[0],`${h[
|
|
|
314
314
|
${a}`)),{success:true,filePath:s,message:"Add React Grab"+(e!=="none"?` with ${e} agent`:""),originalContent:i,newContent:n}},_v=(t,e,r)=>{let s=mv(t);if(!s)return {success:false,filePath:"",message:"Could not find index.html"};let i=Kd.readFileSync(s,"utf-8"),n=i,o=xr(i);if(o&&r)return Dv(i,e,s);if(o)return {success:true,filePath:s,message:"React Grab is already installed in this file",noChanges:true};let u=qf(e),a=n.match(/<head[^>]*>/i);return a&&(n=n.replace(a[0],`${a[0]}
|
|
315
315
|
${u}`)),{success:true,filePath:s,message:"Add React Grab"+(e!=="none"?` with ${e} agent`:""),originalContent:i,newContent:n}},vv=(t,e,r)=>{let s=gv(t);if(!s)return {success:false,filePath:"",message:"Could not find entry file (src/index.tsx, src/main.tsx, etc.)"};let i=Kd.readFileSync(s,"utf-8"),n=xr(i);if(n&&r)return bv(i,e,s);if(n)return {success:true,filePath:s,message:"React Grab is already installed in this file",noChanges:true};let u=`${Lf(e)}
|
|
316
316
|
|
|
317
|
-
${i}`;return {success:true,filePath:s,message:"Add React Grab"+(e!=="none"?` with ${e} agent`:""),originalContent:i,newContent:u}},vs=(t,e,r,s,i=false)=>{switch(e){case "next":return r==="app"?yv(t,s,i):Cv(t,s,i);case "vite":return _v(t,s,i);case "webpack":return vv(t,s,i);default:return {success:false,filePath:"",message:`Unknown framework: ${e}. Please add React Grab manually.`}}},Wf=t=>{try{return Kd.accessSync(t,Kd.constants.W_OK),!0}catch{return false}},xs=t=>{if(t.success&&t.newContent&&t.filePath){if(!Wf(t.filePath))return {success:false,error:`Cannot write to ${t.filePath}. Check file permissions.`};try{return Kd.writeFileSync(t.filePath,t.newContent),{success:!0}}catch(e){return {success:false,error:`Failed to write to ${t.filePath}: ${e instanceof Error?e.message:"Unknown error"}`}}}return {success:true}};var jf={"claude-code":"npx @react-grab/claude-code@latest &&",cursor:"npx @react-grab/cursor@latest &&",opencode:"npx @react-grab/opencode@latest &&",codex:"npx @react-grab/codex@latest &&",gemini:"npx @react-grab/gemini@latest &&",amp:"npx @react-grab/amp@latest &&"},Fs=(t,e,r)=>{if(e==="none"||e==="ami")return {success:true,filePath:"",message:e==="ami"?"Ami does not require package.json modification"
|
|
318
|
-
`;return {success:!0,filePath:s,message:`Add ${e} server to dev script`,originalContent:i,newContent:a}}catch{return {success:false,filePath:s,message:"Failed to parse package.json"}}},ws=t=>{if(t.success&&t.newContent&&t.filePath){if(!Wf(t.filePath))return {success:false,error:`Cannot write to ${t.filePath}. Check file permissions.`};try{return Kd.writeFileSync(t.filePath,t.newContent),{success:!0}}catch(e){return {success:false,error:`Failed to write to ${t.filePath}: ${e instanceof Error?e.message:"Unknown error"}`}}}return {success:true}};var xv="0.0.82",Es={"claude-code":"Claude Code",cursor:"Cursor",opencode:"Opencode",codex:"Codex",gemini:"Gemini",amp:"Amp",ami:"Ami"},Yf=new lt().name("add").description("add an agent integration").argument("[agent]","agent to add (claude-code, cursor, opencode, codex, gemini, amp, ami)").option("-y, --yes","skip confirmation prompts",false).option("-c, --cwd <cwd>","working directory (defaults to current directory)",process.cwd()).action(async(t,e)=>{console.log(`${As.default.magenta("\u269B")} ${As.default.bold("React Grab")} ${As.default.gray(xv)}`),console.log();try{let r=e.cwd,s=e.yes,i=ue("Preflight checks.").start(),n=await Dr(r);n.hasReactGrab||(i.fail("React Grab is not installed."),w.break(),w.error(`Run ${j.info("react-grab init")} first to install React Grab.`),w.break(),process.exit(1)),i.succeed();let o=["claude-code","cursor","opencode","codex","gemini","amp","ami"].filter(p=>!n.installedAgents.includes(p));o.length===0&&(w.break(),w.success("All agent integrations are already installed."),w.break(),process.exit(0));let u;if(t)["claude-code","cursor","opencode","codex","gemini","amp","ami"].includes(t)||(w.break(),w.error(`Invalid agent: ${t}`),w.error("Available agents: claude-code, cursor, opencode, codex, gemini, amp, ami"),w.break(),process.exit(1)),n.installedAgents.includes(t)&&(w.break(),w.warn(`${Es[t]} is already installed.`),w.break(),process.exit(0)),u=t;else if(s)w.break(),w.error("Please specify an agent to add."),w.error("Available agents: "+o.join(", ")),w.break(),process.exit(1);else {w.break();let{agent:p}=await(0,tu.default)({type:"select",name:"agent",message:`Which ${j.info("agent integration")} would you like to add?`,choices:o.map(m=>({title:Es[m],value:m}))});p||(w.break(),process.exit(1)),u=p;}ue(`Adding ${Es[u]}.`).start().succeed();let h=vs(n.projectRoot,n.framework,n.nextRouterType,u,!0),l=Fs(n.projectRoot,u,n.installedAgents);h.success||(w.break(),w.error(h.message),w.break(),process.exit(1));let c=!h.noChanges&&h.originalContent&&h.newContent,d=l.success&&!l.noChanges&&l.originalContent&&l.newContent;if((c||d)&&(w.break(),c&&qt(h.filePath,h.originalContent,h.newContent),d&&(c&&w.break(),qt(l.filePath,l.originalContent,l.newContent)),!s)){w.break();let{proceed:p}=await(0,tu.default)({type:"confirm",name:"proceed",message:"Apply these changes?",initial:!0});p||(w.break(),w.log("Changes cancelled."),w.break(),process.exit(0));}let f=hs(u,!1);if(f.length>0){let p=ue(`Installing ${f.join(", ")}.`).start();try{cs(f,n.packageManager,n.projectRoot),p.succeed();}catch(m){p.fail(),jt(m);}}if(c){let p=ue(`Applying changes to ${h.filePath}.`).start(),m=xs(h);m.success||(p.fail(),w.break(),w.error(m.error||"Failed to write file."),w.break(),process.exit(1)),p.succeed();}if(d){let p=ue(`Applying changes to ${l.filePath}.`).start(),m=ws(l);m.success||(p.fail(),w.break(),w.error(m.error||"Failed to write file."),w.break(),process.exit(1)),p.succeed();}w.break(),w.log(`${j.success("Success!")} ${Es[u]} has been added.`),w.log("Make sure to start the agent server before using it."),w.break();}catch(r){jt(r);}});var Ss=we(sr()),Rs=we(us());var Kf="0.0.82",Fv="https://react-grab.com/api/report-cli",Os="https://github.com/aidenybai/react-grab",Jf=async(t,e,r)=>{try{await fetch(Fv,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:t,version:Kf,config:e,error:r?{message:r.message,stack:r.stack}:void 0,timestamp:new Date().toISOString()})}).catch(()=>{});}catch{}},ru={next:"Next.js",vite:"Vite",webpack:"Webpack",unknown:"Unknown"},wv={npm:"npm",yarn:"Yarn",pnpm:"pnpm",bun:"Bun"},Ev={remix:"Remix",astro:"Astro",sveltekit:"SvelteKit",gatsby:"Gatsby"},zf=new lt().name("init").description("initialize React Grab in your project").option("-y, --yes","skip confirmation prompts",false).option("-f, --force","force overwrite existing config",false).option("-a, --agent <agent>","agent integration (claude-code, cursor, opencode, codex, gemini, amp, ami)").option("--skip-install","skip package installation",false).option("-c, --cwd <cwd>","working directory (defaults to current directory)",process.cwd()).action(async t=>{console.log(`${Ss.default.magenta("\u269B")} ${Ss.default.bold("React Grab")} ${Ss.default.gray(Kf)}`),console.log();try{let e=t.cwd,r=t.yes,s=ue("Preflight checks.").start(),i=await Dr(e);i.hasReactGrab&&!t.force&&(s.succeed(),w.break(),w.warn("React Grab is already installed."),w.log(`Use ${j.info("--force")} to reconfigure, or ${j.info("react-grab add")} to add an agent.`),w.break(),process.exit(0)),s.succeed();let n=ue("Verifying framework.").start();if(i.unsupportedFramework){let b=Ev[i.unsupportedFramework];n.fail(`Found ${j.info(b)}.`),w.break(),w.log(`${b} is not yet supported by automatic setup.`),w.log(`Visit ${j.info(Os)} for manual setup.`),w.break(),process.exit(1);}if(i.framework==="unknown")if(i.isMonorepo&&!r){n.info("Verifying framework. Found monorepo.");let y=hf(i.projectRoot).filter(v=>v.hasReact||v.framework!=="unknown");if(y.length>0){w.break();let v=[...y].sort((P,O)=>P.framework==="unknown"&&O.framework!=="unknown"?1:P.framework!=="unknown"&&O.framework==="unknown"?-1:0),{selectedProject:F}=await(0,Rs.default)({type:"select",name:"selectedProject",message:"Select a project to install React Grab:",choices:v.map(P=>{let O=P.framework!=="unknown"?` ${j.dim(`(${ru[P.framework]})`)}`:"";return {title:`${P.name}${O}`,value:P.path}})});F||(w.break(),process.exit(1)),process.chdir(F);let E=await Dr(F);Object.assign(i,E),ue("Verifying framework.").start().succeed(`Verifying framework. Found ${j.info(ru[E.framework])}.`);}else n.fail("Could not detect a supported framework."),w.break(),w.log(`Visit ${j.info(Os)} for manual setup.`),w.break(),process.exit(1);}else n.fail("Could not detect a supported framework."),w.break(),w.log("React Grab supports Next.js, Vite, and Webpack projects."),w.log(`Visit ${j.info(Os)} for manual setup.`),w.break(),process.exit(1);else n.succeed(`Verifying framework. Found ${j.info(ru[i.framework])}.`);i.framework==="next"&&ue("Detecting router type.").start().succeed(`Detecting router type. Found ${j.info(i.nextRouterType==="app"?"App Router":"Pages Router")}.`),ue("Detecting package manager.").start().succeed(`Detecting package manager. Found ${j.info(wv[i.packageManager])}.`);let u=i.framework,a=i.packageManager,h=i.nextRouterType,l=t.agent||"none";if(!r&&!t.agent){w.break();let{agent:b}=await(0,Rs.default)({type:"select",name:"agent",message:`Would you like to add an ${j.info("agent integration")}?`,choices:[{title:"None",value:"none"},{title:"Claude Code",value:"claude-code"},{title:"Cursor",value:"cursor"},{title:"Opencode",value:"opencode"},{title:"Codex",value:"codex"},{title:"Gemini",value:"gemini"},{title:"Amp",value:"amp"},{title:"Ami",value:"ami"}]});b===void 0&&(w.break(),process.exit(1)),l=b;}let c=vs(i.projectRoot,u,h,l,!1),d=Fs(i.projectRoot,l,i.installedAgents);c.success||(w.break(),w.error(c.message),w.error(`Visit ${j.info(Os)} for manual setup.`),w.break(),process.exit(1));let f=!c.noChanges&&c.originalContent&&c.newContent,p=d.success&&!d.noChanges&&d.originalContent&&d.newContent;if((f||p)&&(w.break(),f&&qt(c.filePath,c.originalContent,c.newContent),p&&(f&&w.break(),qt(d.filePath,d.originalContent,d.newContent)),w.break(),w.warn("Auto-detection may not be 100% accurate."),w.warn("Please verify the changes before committing."),!r)){w.break();let{proceed:b}=await(0,Rs.default)({type:"confirm",name:"proceed",message:"Apply these changes?",initial:!0});b||(w.break(),w.log("Changes cancelled."),w.break(),process.exit(0));}let m=!i.hasReactGrab,g=l!=="none"&&!i.installedAgents.includes(l);if(!t.skipInstall&&(m||g)){let b=hs(l,m);if(b.length>0){let y=ue(`Installing ${b.join(", ")}.`).start();try{cs(b,a,i.projectRoot),y.succeed();}catch(v){y.fail(),jt(v);}}}if(f){let b=ue(`Applying changes to ${c.filePath}.`).start(),y=xs(c);y.success||(b.fail(),w.break(),w.error(y.error||"Failed to write file."),w.break(),process.exit(1)),b.succeed();}if(p){let b=ue(`Applying changes to ${d.filePath}.`).start(),y=ws(d);y.success||(b.fail(),w.break(),w.error(y.error||"Failed to write file."),w.break(),process.exit(1)),b.succeed();}w.break(),w.log(`${j.success("Success!")} React Grab has been installed.`),w.log("You may now start your development server."),w.break(),await Jf("completed",{framework:u,packageManager:a,router:h,agent:l!=="none"?l:void 0,isMonorepo:i.isMonorepo});}catch(e){jt(e),await Jf("error",void 0,e);}});var oi=we(sr()),ui=we(Pg()),ua=we(us());var aE="0.0.82",$g=2e3,kg='<script src="//unpkg.com/react-grab/dist/index.global.js"></script>',lE=t=>`<script src="//unpkg.com/${t}/dist/client.global.js"></script>`,Bg=async(t,e)=>new Promise(r=>{let s=http.createServer();s.listen(t,e,()=>{s.close(()=>r(t));}),s.on("error",()=>{r(Bg(t+1,e));});}),cE=t=>t.startsWith("http://")||t.startsWith("https://")?t:`http://${t}`,hE=async t=>{try{return (await fetch(t,{method:"HEAD",redirect:"follow"})).url}catch{return t}},Mg=new lt().name("start").alias("proxy").description("start a proxy server for a given URL").argument("[url]","target URL to proxy (e.g., localhost:3000)").option("-p, --port <port>","starting port for the proxy server",String($g)).option("--host <hostname>","hostname to bind the proxy server to","localhost").option("--provider <package>","provider package to run via npx (e.g., @react-grab/cursor)").action(async(t,e)=>{console.log(`${oi.default.magenta("\u269B")} ${oi.default.bold("React Grab")} ${oi.default.gray(aE)}`),console.log();let r=t,s=e.provider;if(!r){let{targetUrl:y}=await(0, ua.default)({type:"text",name:"targetUrl",message:"Enter the target URL to proxy:",initial:"localhost:3000"});if(y||(w.break(),process.exit(1)),r=y,!s){let{selectedProvider:v}=await(0, ua.default)({type:"select",name:"selectedProvider",message:`Select a ${j.info("provider")} to use:`,choices:[{title:"None",value:""},{title:"Claude Code",value:"@react-grab/claude-code"},{title:"Cursor",value:"@react-grab/cursor"},{title:"Opencode",value:"@react-grab/opencode"},{title:"Codex",value:"@react-grab/codex"},{title:"Gemini",value:"@react-grab/gemini"},{title:"Amp",value:"@react-grab/amp"},{title:"Ami",value:"@react-grab/ami"}]});v===void 0&&(w.break(),process.exit(1)),s=v||void 0;}w.break();}let i=cE(r),n=await hE(i),o=parseInt(e.port,10),u=e.host||"localhost";(isNaN(o)||o<1||o>65535)&&(w.break(),w.error("Invalid port number. Please provide a port between 1 and 65535."),w.break(),process.exit(1));let a=await Bg(o,u),h=s?kg+lE(s):kg,l=y=>{let v=y.indexOf("</head>");if(v!==-1)return y.slice(0,v)+h+y.slice(v);let F=y.indexOf("</body>");return F!==-1?y.slice(0,F)+h+y.slice(F):y+h},c=(0, ui.createProxyMiddleware)({target:n,changeOrigin:true,followRedirects:false,ws:true,selfHandleResponse:true,cookieDomainRewrite:{"*":""},autoRewrite:true,preserveHeaderKeyCase:true,xfwd:true,on:{error:(y,v,F)=>{"writeHead"in F&&!F.headersSent&&(F.writeHead(503,{"Content-Type":"text/plain"}),F.end(`Proxy error: Unable to connect to ${n}`));},proxyReq:y=>{y.removeHeader("accept-encoding");},proxyRes:(0, ui.responseInterceptor)(async(y,v)=>{if(!(v.headers["content-type"]||"").includes("text/html"))return y;let R=y.toString("utf-8");return l(R)})}}),d=http.createServer((y,v)=>{c(y,v,F=>{F&&(w.error(`Request error: ${F}`),v.writeHead(500),v.end("Internal Server Error"));});});d.on("upgrade",c.upgrade);let f=ue("Starting.").start(),p=()=>{f.succeed(`Open in your browser: http://${u}:${a}`);let y=["npx react-grab@latest start",r];e.port!==String($g)&&y.push(`--port=${e.port}`),u!=="localhost"&&y.push(`--host=${u}`),s&&y.push(`--provider=${s}`),w.break(),w.log(j.dim(`$ ${y.join(" ")}`));},m=false,g=!s,b=()=>{m&&g&&p();};if(d.listen(a,u,()=>{m=true,b();}),s){let y=child_process.spawn("npx",[`${s}@latest`],{stdio:"ignore",shell:true,detached:false}),v=()=>{y.killed||y.kill();};process.on("exit",v),process.on("SIGINT",()=>{v(),process.exit(0);}),process.on("SIGTERM",()=>{v(),process.exit(0);}),y.on("error",F=>{f.fail(`Failed to start provider: ${F.message}`);}),y.on("spawn",()=>{g=true,b();}),y.on("close",F=>{F!==0&&F!==null&&w.error(`Provider exited with code ${F}`);});}d.on("error",y=>{w.break(),w.error(`Server error: ${y.message}`),w.break(),process.exit(1);});});var dE="0.0.82",fE="https://react-grab.com/api/version";process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));try{fetch(`${fE}?source=cli&t=${Date.now()}`).catch(()=>{});}catch{}var ai=new lt().name("react-grab").description("add React Grab to your project").version(dE,"-v, --version","display the version number");ai.addCommand(zf);ai.addCommand(Yf);ai.addCommand(Mg);ai.parse();
|
|
317
|
+
${i}`;return {success:true,filePath:s,message:"Add React Grab"+(e!=="none"?` with ${e} agent`:""),originalContent:i,newContent:u}},vs=(t,e,r,s,i=false)=>{switch(e){case "next":return r==="app"?yv(t,s,i):Cv(t,s,i);case "vite":return _v(t,s,i);case "webpack":return vv(t,s,i);default:return {success:false,filePath:"",message:`Unknown framework: ${e}. Please add React Grab manually.`}}},Wf=t=>{try{return Kd.accessSync(t,Kd.constants.W_OK),!0}catch{return false}},xs=t=>{if(t.success&&t.newContent&&t.filePath){if(!Wf(t.filePath))return {success:false,error:`Cannot write to ${t.filePath}. Check file permissions.`};try{return Kd.writeFileSync(t.filePath,t.newContent),{success:!0}}catch(e){return {success:false,error:`Failed to write to ${t.filePath}: ${e instanceof Error?e.message:"Unknown error"}`}}}return {success:true}};var jf={"claude-code":"npx @react-grab/claude-code@latest &&",cursor:"npx @react-grab/cursor@latest &&",opencode:"npx @react-grab/opencode@latest &&",codex:"npx @react-grab/codex@latest &&",gemini:"npx @react-grab/gemini@latest &&",amp:"npx @react-grab/amp@latest &&"},Fs=(t,e,r)=>{if(e==="none"||e==="ami"||e==="instant")return {success:true,filePath:"",message:e==="ami"||e==="instant"?`${e==="ami"?"Ami":"Instant"} does not require package.json modification`:"No agent selected, skipping package.json modification",noChanges:true};let s=vt.join(t,"package.json");if(!Kd.existsSync(s))return {success:false,filePath:"",message:"Could not find package.json"};let i=Kd.readFileSync(s,"utf-8"),n=jf[e];if(!n)return {success:false,filePath:s,message:`Unknown agent: ${e}`};if(i.includes(n))return {success:true,filePath:s,message:`Agent ${e} dev script is already configured`,noChanges:true};try{let o=JSON.parse(i);if(!o.scripts?.dev)return {success:!1,filePath:s,message:'No "dev" script found in package.json'};let u=o.scripts.dev;for(let h of r){let l=jf[h];if(l&&u.includes(l))return {success:!0,filePath:s,message:`Agent ${h} is already in dev script`,noChanges:!0}}o.scripts.dev=`${n} ${u}`;let a=JSON.stringify(o,null,2)+`
|
|
318
|
+
`;return {success:!0,filePath:s,message:`Add ${e} server to dev script`,originalContent:i,newContent:a}}catch{return {success:false,filePath:s,message:"Failed to parse package.json"}}},ws=t=>{if(t.success&&t.newContent&&t.filePath){if(!Wf(t.filePath))return {success:false,error:`Cannot write to ${t.filePath}. Check file permissions.`};try{return Kd.writeFileSync(t.filePath,t.newContent),{success:!0}}catch(e){return {success:false,error:`Failed to write to ${t.filePath}: ${e instanceof Error?e.message:"Unknown error"}`}}}return {success:true}};var xv="0.0.83",Es={"claude-code":"Claude Code",cursor:"Cursor",opencode:"Opencode",codex:"Codex",gemini:"Gemini",amp:"Amp",ami:"Ami",instant:"Instant"},Yf=new lt().name("add").description("add an agent integration").argument("[agent]","agent to add (claude-code, cursor, opencode, codex, gemini, amp, ami, instant)").option("-y, --yes","skip confirmation prompts",false).option("-c, --cwd <cwd>","working directory (defaults to current directory)",process.cwd()).action(async(t,e)=>{console.log(`${As.default.magenta("\u269B")} ${As.default.bold("React Grab")} ${As.default.gray(xv)}`),console.log();try{let r=e.cwd,s=e.yes,i=ue("Preflight checks.").start(),n=await Dr(r);n.hasReactGrab||(i.fail("React Grab is not installed."),w.break(),w.error(`Run ${j.info("react-grab init")} first to install React Grab.`),w.break(),process.exit(1)),i.succeed();let o=["claude-code","cursor","opencode","codex","gemini","amp","ami","instant"].filter(p=>!n.installedAgents.includes(p));o.length===0&&(w.break(),w.success("All agent integrations are already installed."),w.break(),process.exit(0));let u;if(t)["claude-code","cursor","opencode","codex","gemini","amp","ami","instant"].includes(t)||(w.break(),w.error(`Invalid agent: ${t}`),w.error("Available agents: claude-code, cursor, opencode, codex, gemini, amp, ami, instant"),w.break(),process.exit(1)),n.installedAgents.includes(t)&&(w.break(),w.warn(`${Es[t]} is already installed.`),w.break(),process.exit(0)),u=t;else if(s)w.break(),w.error("Please specify an agent to add."),w.error("Available agents: "+o.join(", ")),w.break(),process.exit(1);else {w.break();let{agent:p}=await(0,tu.default)({type:"select",name:"agent",message:`Which ${j.info("agent integration")} would you like to add?`,choices:o.map(m=>({title:Es[m],value:m}))});p||(w.break(),process.exit(1)),u=p;}ue(`Adding ${Es[u]}.`).start().succeed();let h=vs(n.projectRoot,n.framework,n.nextRouterType,u,!0),l=Fs(n.projectRoot,u,n.installedAgents);h.success||(w.break(),w.error(h.message),w.break(),process.exit(1));let c=!h.noChanges&&h.originalContent&&h.newContent,d=l.success&&!l.noChanges&&l.originalContent&&l.newContent;if((c||d)&&(w.break(),c&&qt(h.filePath,h.originalContent,h.newContent),d&&(c&&w.break(),qt(l.filePath,l.originalContent,l.newContent)),!s)){w.break();let{proceed:p}=await(0,tu.default)({type:"confirm",name:"proceed",message:"Apply these changes?",initial:!0});p||(w.break(),w.log("Changes cancelled."),w.break(),process.exit(0));}let f=hs(u,!1);if(f.length>0){let p=ue(`Installing ${f.join(", ")}.`).start();try{cs(f,n.packageManager,n.projectRoot),p.succeed();}catch(m){p.fail(),jt(m);}}if(c){let p=ue(`Applying changes to ${h.filePath}.`).start(),m=xs(h);m.success||(p.fail(),w.break(),w.error(m.error||"Failed to write file."),w.break(),process.exit(1)),p.succeed();}if(d){let p=ue(`Applying changes to ${l.filePath}.`).start(),m=ws(l);m.success||(p.fail(),w.break(),w.error(m.error||"Failed to write file."),w.break(),process.exit(1)),p.succeed();}w.break(),w.log(`${j.success("Success!")} ${Es[u]} has been added.`),w.log("Make sure to start the agent server before using it."),w.break();}catch(r){jt(r);}});var Ss=we(sr()),Rs=we(us());var Kf="0.0.83",Fv="https://react-grab.com/api/report-cli",Os="https://github.com/aidenybai/react-grab",Jf=async(t,e,r)=>{try{await fetch(Fv,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:t,version:Kf,config:e,error:r?{message:r.message,stack:r.stack}:void 0,timestamp:new Date().toISOString()})}).catch(()=>{});}catch{}},ru={next:"Next.js",vite:"Vite",webpack:"Webpack",unknown:"Unknown"},wv={npm:"npm",yarn:"Yarn",pnpm:"pnpm",bun:"Bun"},Ev={remix:"Remix",astro:"Astro",sveltekit:"SvelteKit",gatsby:"Gatsby"},zf=new lt().name("init").description("initialize React Grab in your project").option("-y, --yes","skip confirmation prompts",false).option("-f, --force","force overwrite existing config",false).option("-a, --agent <agent>","agent integration (claude-code, cursor, opencode, codex, gemini, amp, ami, instant)").option("--skip-install","skip package installation",false).option("-c, --cwd <cwd>","working directory (defaults to current directory)",process.cwd()).action(async t=>{console.log(`${Ss.default.magenta("\u269B")} ${Ss.default.bold("React Grab")} ${Ss.default.gray(Kf)}`),console.log();try{let e=t.cwd,r=t.yes,s=ue("Preflight checks.").start(),i=await Dr(e);i.hasReactGrab&&!t.force&&(s.succeed(),w.break(),w.warn("React Grab is already installed."),w.log(`Use ${j.info("--force")} to reconfigure, or ${j.info("react-grab add")} to add an agent.`),w.break(),process.exit(0)),s.succeed();let n=ue("Verifying framework.").start();if(i.unsupportedFramework){let b=Ev[i.unsupportedFramework];n.fail(`Found ${j.info(b)}.`),w.break(),w.log(`${b} is not yet supported by automatic setup.`),w.log(`Visit ${j.info(Os)} for manual setup.`),w.break(),process.exit(1);}if(i.framework==="unknown")if(i.isMonorepo&&!r){n.info("Verifying framework. Found monorepo.");let y=hf(i.projectRoot).filter(v=>v.hasReact||v.framework!=="unknown");if(y.length>0){w.break();let v=[...y].sort((P,O)=>P.framework==="unknown"&&O.framework!=="unknown"?1:P.framework!=="unknown"&&O.framework==="unknown"?-1:0),{selectedProject:F}=await(0,Rs.default)({type:"select",name:"selectedProject",message:"Select a project to install React Grab:",choices:v.map(P=>{let O=P.framework!=="unknown"?` ${j.dim(`(${ru[P.framework]})`)}`:"";return {title:`${P.name}${O}`,value:P.path}})});F||(w.break(),process.exit(1)),process.chdir(F);let E=await Dr(F);Object.assign(i,E),ue("Verifying framework.").start().succeed(`Verifying framework. Found ${j.info(ru[E.framework])}.`);}else n.fail("Could not detect a supported framework."),w.break(),w.log(`Visit ${j.info(Os)} for manual setup.`),w.break(),process.exit(1);}else n.fail("Could not detect a supported framework."),w.break(),w.log("React Grab supports Next.js, Vite, and Webpack projects."),w.log(`Visit ${j.info(Os)} for manual setup.`),w.break(),process.exit(1);else n.succeed(`Verifying framework. Found ${j.info(ru[i.framework])}.`);i.framework==="next"&&ue("Detecting router type.").start().succeed(`Detecting router type. Found ${j.info(i.nextRouterType==="app"?"App Router":"Pages Router")}.`),ue("Detecting package manager.").start().succeed(`Detecting package manager. Found ${j.info(wv[i.packageManager])}.`);let u=i.framework,a=i.packageManager,h=i.nextRouterType,l=t.agent||"none";if(!r&&!t.agent){w.break();let{agent:b}=await(0,Rs.default)({type:"select",name:"agent",message:`Would you like to add an ${j.info("agent integration")}?`,choices:[{title:"None",value:"none"},{title:"Claude Code",value:"claude-code"},{title:"Cursor",value:"cursor"},{title:"Opencode",value:"opencode"},{title:"Codex",value:"codex"},{title:"Gemini",value:"gemini"},{title:"Amp",value:"amp"},{title:"Ami",value:"ami"},{title:"Instant",value:"instant"}]});b===void 0&&(w.break(),process.exit(1)),l=b;}let c=vs(i.projectRoot,u,h,l,!1),d=Fs(i.projectRoot,l,i.installedAgents);c.success||(w.break(),w.error(c.message),w.error(`Visit ${j.info(Os)} for manual setup.`),w.break(),process.exit(1));let f=!c.noChanges&&c.originalContent&&c.newContent,p=d.success&&!d.noChanges&&d.originalContent&&d.newContent;if((f||p)&&(w.break(),f&&qt(c.filePath,c.originalContent,c.newContent),p&&(f&&w.break(),qt(d.filePath,d.originalContent,d.newContent)),w.break(),w.warn("Auto-detection may not be 100% accurate."),w.warn("Please verify the changes before committing."),!r)){w.break();let{proceed:b}=await(0,Rs.default)({type:"confirm",name:"proceed",message:"Apply these changes?",initial:!0});b||(w.break(),w.log("Changes cancelled."),w.break(),process.exit(0));}let m=!i.hasReactGrab,g=l!=="none"&&!i.installedAgents.includes(l);if(!t.skipInstall&&(m||g)){let b=hs(l,m);if(b.length>0){let y=ue(`Installing ${b.join(", ")}.`).start();try{cs(b,a,i.projectRoot),y.succeed();}catch(v){y.fail(),jt(v);}}}if(f){let b=ue(`Applying changes to ${c.filePath}.`).start(),y=xs(c);y.success||(b.fail(),w.break(),w.error(y.error||"Failed to write file."),w.break(),process.exit(1)),b.succeed();}if(p){let b=ue(`Applying changes to ${d.filePath}.`).start(),y=ws(d);y.success||(b.fail(),w.break(),w.error(y.error||"Failed to write file."),w.break(),process.exit(1)),b.succeed();}w.break(),w.log(`${j.success("Success!")} React Grab has been installed.`),w.log("You may now start your development server."),w.break(),await Jf("completed",{framework:u,packageManager:a,router:h,agent:l!=="none"?l:void 0,isMonorepo:i.isMonorepo});}catch(e){jt(e),await Jf("error",void 0,e);}});var oi=we(sr()),ui=we(Pg()),ua=we(us());var aE="0.0.83",$g=2e3,kg='<script src="//unpkg.com/react-grab/dist/index.global.js"></script>',lE=t=>`<script src="//unpkg.com/${t}/dist/client.global.js"></script>`,Bg=async(t,e)=>new Promise(r=>{let s=http.createServer();s.listen(t,e,()=>{s.close(()=>r(t));}),s.on("error",()=>{r(Bg(t+1,e));});}),cE=t=>t.startsWith("http://")||t.startsWith("https://")?t:`http://${t}`,hE=async t=>{try{return (await fetch(t,{method:"HEAD",redirect:"follow"})).url}catch{return t}},Mg=new lt().name("start").alias("proxy").description("start a proxy server for a given URL").argument("[url]","target URL to proxy (e.g., localhost:3000)").option("-p, --port <port>","starting port for the proxy server",String($g)).option("--host <hostname>","hostname to bind the proxy server to","localhost").option("--provider <package>","provider package to run via npx (e.g., @react-grab/cursor)").action(async(t,e)=>{console.log(`${oi.default.magenta("\u269B")} ${oi.default.bold("React Grab")} ${oi.default.gray(aE)}`),console.log();let r=t,s=e.provider;if(!r){let{targetUrl:y}=await(0, ua.default)({type:"text",name:"targetUrl",message:"Enter the target URL to proxy:",initial:"localhost:3000"});if(y||(w.break(),process.exit(1)),r=y,!s){let{selectedProvider:v}=await(0, ua.default)({type:"select",name:"selectedProvider",message:`Select a ${j.info("provider")} to use:`,choices:[{title:"None",value:""},{title:"Claude Code",value:"@react-grab/claude-code"},{title:"Cursor",value:"@react-grab/cursor"},{title:"Opencode",value:"@react-grab/opencode"},{title:"Codex",value:"@react-grab/codex"},{title:"Gemini",value:"@react-grab/gemini"},{title:"Amp",value:"@react-grab/amp"},{title:"Ami",value:"@react-grab/ami"}]});v===void 0&&(w.break(),process.exit(1)),s=v||void 0;}w.break();}let i=cE(r),n=await hE(i),o=parseInt(e.port,10),u=e.host||"localhost";(isNaN(o)||o<1||o>65535)&&(w.break(),w.error("Invalid port number. Please provide a port between 1 and 65535."),w.break(),process.exit(1));let a=await Bg(o,u),h=s?kg+lE(s):kg,l=y=>{let v=y.indexOf("</head>");if(v!==-1)return y.slice(0,v)+h+y.slice(v);let F=y.indexOf("</body>");return F!==-1?y.slice(0,F)+h+y.slice(F):y+h},c=(0, ui.createProxyMiddleware)({target:n,changeOrigin:true,followRedirects:false,ws:true,selfHandleResponse:true,cookieDomainRewrite:{"*":""},autoRewrite:true,preserveHeaderKeyCase:true,xfwd:true,on:{error:(y,v,F)=>{"writeHead"in F&&!F.headersSent&&(F.writeHead(503,{"Content-Type":"text/plain"}),F.end(`Proxy error: Unable to connect to ${n}`));},proxyReq:y=>{y.removeHeader("accept-encoding");},proxyRes:(0, ui.responseInterceptor)(async(y,v)=>{if(!(v.headers["content-type"]||"").includes("text/html"))return y;let R=y.toString("utf-8");return l(R)})}}),d=http.createServer((y,v)=>{c(y,v,F=>{F&&(w.error(`Request error: ${F}`),v.writeHead(500),v.end("Internal Server Error"));});});d.on("upgrade",c.upgrade);let f=ue("Starting.").start(),p=()=>{f.succeed(`Open in your browser: http://${u}:${a}`);let y=["npx react-grab@latest start",r];e.port!==String($g)&&y.push(`--port=${e.port}`),u!=="localhost"&&y.push(`--host=${u}`),s&&y.push(`--provider=${s}`),w.break(),w.log(j.dim(`$ ${y.join(" ")}`));},m=false,g=!s,b=()=>{m&&g&&p();};if(d.listen(a,u,()=>{m=true,b();}),s){let y=child_process.spawn("npx",[`${s}@latest`],{stdio:"ignore",shell:true,detached:false}),v=()=>{y.killed||y.kill();};process.on("exit",v),process.on("SIGINT",()=>{v(),process.exit(0);}),process.on("SIGTERM",()=>{v(),process.exit(0);}),y.on("error",F=>{f.fail(`Failed to start provider: ${F.message}`);}),y.on("spawn",()=>{g=true,b();}),y.on("close",F=>{F!==0&&F!==null&&w.error(`Provider exited with code ${F}`);});}d.on("error",y=>{w.break(),w.error(`Server error: ${y.message}`),w.break(),process.exit(1);});});var dE="0.0.83",fE="https://react-grab.com/api/version";process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));try{fetch(`${fE}?source=cli&t=${Date.now()}`).catch(()=>{});}catch{}var ai=new lt().name("react-grab").description("add React Grab to your project").version(dE,"-v, --version","display the version number");ai.addCommand(zf);ai.addCommand(Yf);ai.addCommand(Mg);ai.parse();
|
|
319
319
|
/*! Bundled license information:
|
|
320
320
|
|
|
321
321
|
http-proxy/lib/http-proxy/passes/web-outgoing.js:
|
package/dist/core.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkFU7ZULMN_cjs=require('./chunk-FU7ZULMN.cjs');Object.defineProperty(exports,"DEFAULT_THEME",{enumerable:true,get:function(){return chunkFU7ZULMN_cjs.d}});Object.defineProperty(exports,"formatElementInfo",{enumerable:true,get:function(){return chunkFU7ZULMN_cjs.c}});Object.defineProperty(exports,"generateSnippet",{enumerable:true,get:function(){return chunkFU7ZULMN_cjs.e}});Object.defineProperty(exports,"getStack",{enumerable:true,get:function(){return chunkFU7ZULMN_cjs.b}});Object.defineProperty(exports,"init",{enumerable:true,get:function(){return chunkFU7ZULMN_cjs.f}});Object.defineProperty(exports,"isInstrumentationActive",{enumerable:true,get:function(){return chunkFU7ZULMN_cjs.a}});
|
package/dist/core.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{d as DEFAULT_THEME,c as formatElementInfo,e as generateSnippet,b as getStack,f as init,a as isInstrumentationActive}from'./chunk-
|
|
1
|
+
export{d as DEFAULT_THEME,c as formatElementInfo,e as generateSnippet,b as getStack,f as init,a as isInstrumentationActive}from'./chunk-D2T4TGEM.js';
|
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkFU7ZULMN_cjs=require('./chunk-FU7ZULMN.cjs');/**
|
|
2
2
|
* @license MIT
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) 2025 Aiden Bai
|
|
@@ -6,4 +6,4 @@
|
|
|
6
6
|
* This source code is licensed under the MIT license found in the
|
|
7
7
|
* LICENSE file in the root directory of this source tree.
|
|
8
8
|
*/
|
|
9
|
-
var e=null,A=()=>typeof window>"u"?e:window.__REACT_GRAB__??e??null,d=t=>{e=t,typeof window<"u"&&(t?window.__REACT_GRAB__=t:delete window.__REACT_GRAB__);};typeof window<"u"&&(window.__REACT_GRAB__?e=window.__REACT_GRAB__:(e=
|
|
9
|
+
var e=null,A=()=>typeof window>"u"?e:window.__REACT_GRAB__??e??null,d=t=>{e=t,typeof window<"u"&&(t?window.__REACT_GRAB__=t:delete window.__REACT_GRAB__);};typeof window<"u"&&(window.__REACT_GRAB__?e=window.__REACT_GRAB__:(e=chunkFU7ZULMN_cjs.f(),window.__REACT_GRAB__=e,window.dispatchEvent(new CustomEvent("react-grab:init",{detail:e}))));Object.defineProperty(exports,"DEFAULT_THEME",{enumerable:true,get:function(){return chunkFU7ZULMN_cjs.d}});Object.defineProperty(exports,"formatElementInfo",{enumerable:true,get:function(){return chunkFU7ZULMN_cjs.c}});Object.defineProperty(exports,"generateSnippet",{enumerable:true,get:function(){return chunkFU7ZULMN_cjs.e}});Object.defineProperty(exports,"getStack",{enumerable:true,get:function(){return chunkFU7ZULMN_cjs.b}});Object.defineProperty(exports,"init",{enumerable:true,get:function(){return chunkFU7ZULMN_cjs.f}});Object.defineProperty(exports,"isInstrumentationActive",{enumerable:true,get:function(){return chunkFU7ZULMN_cjs.a}});exports.getGlobalApi=A;exports.setGlobalApi=d;
|