jsrepo 1.41.2 → 1.41.3
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/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {h,g,f,u,c,l,n,t,a,b,w,v,s,k}from'./chunk-J7BJNBQR.js';import {Command,program,Argument,Option}from'commander';import ie from'node:fs';import {outro,confirm,isCancel,cancel,multiselect,text,select,log,password,spinner,intro}from'@clack/prompts';import E from'chalk';import {resolveCommand}from'package-manager-detector/commands';import {detect}from'package-manager-detector/detect';import Y from'pathe';import*as $ from'valibot';import fn from'is-unicode-supported';import {builtinModules}from'node:module';import {Biome,Distribution}from'@biomejs/js-api';import*as vr from'css-dependency';import {walk}from'estree-walker';import {createPathsMatcher,getTsconfig}from'get-tsconfig';import*as Io from'parse5';import*as De from'prettier';import*as Eo from'svelte/compiler';import {Project,SyntaxKind}from'ts-morph';import es from'validate-npm-package-name';import*as qt from'vue/compiler-sfc';import un from'node:os';import {stripVTControlCharacters}from'node:util';import Yn from'escape-string-regexp';import {execa}from'execa';import {detect as detect$1,resolveCommand as resolveCommand$1
|
|
2
|
+
import {h,g,f,u,c,l,n,t,a,b,w,v,s,k}from'./chunk-J7BJNBQR.js';import {Command,program,Argument,Option}from'commander';import ie from'node:fs';import {outro,confirm,isCancel,cancel,multiselect,text,select,log,password,spinner,intro}from'@clack/prompts';import E from'chalk';import {resolveCommand}from'package-manager-detector/commands';import {detect}from'package-manager-detector/detect';import Y from'pathe';import*as $ from'valibot';import fn from'is-unicode-supported';import {builtinModules}from'node:module';import {Biome,Distribution}from'@biomejs/js-api';import*as vr from'css-dependency';import {walk}from'estree-walker';import {createPathsMatcher,getTsconfig}from'get-tsconfig';import*as Io from'parse5';import*as De from'prettier';import*as Eo from'svelte/compiler';import {Project,SyntaxKind}from'ts-morph';import es from'validate-npm-package-name';import*as qt from'vue/compiler-sfc';import un from'node:os';import {stripVTControlCharacters}from'node:util';import Yn from'escape-string-regexp';import {execa}from'execa';import {detect as detect$1,resolveCommand as resolveCommand$1}from'package-manager-detector';import vo from'boxen';import {diffLines,diffChars}from'diff';import mo from'semver';import {cursor,erase}from'sisteransi';import bn from'@anthropic-ai/sdk';import Cn from'ollama';import Rn from'openai';import wn from'conf';import xr from'node-fetch';import zs from'ignore';var pt={name:"jsrepo",description:"A CLI to add shared code from remote repositories.",version:"1.41.3"};var mn=fn(),se=(e,t)=>mn?e:t,qr=se("\u25C6","*"),Yr=se("\u25C6","*"),Qr=se("\u25A0","x"),O=E.gray(se("\u2502","|")),Ct=E.gray(se("\u2500","-")),Xr=E.gray(se("\u2510","+")),Zr=E.gray(se("\u2518","+")),Rt=E.gray(se("\u251C","+")),eo=E.gray(se("\u252C","+"));E.gray(se("\u250C","T"));var to=E.gray(se("\u2514","-")),we=E.bgRgb(245,149,66).black(" WARN "),Pe=E.bgBlueBright.white(" INFO "),St=E.bgRedBright.white(" ERROR "),Ie=E.hex("#f7df1e")("jsrepo");var ro=(e,t)=>{let r=[];for(let[o,n]of e)r.push(t(o,n));return r},oo=(e,t)=>{let r=0;for(let o of e)r=r+t(o);return r};var jt=(e,t,r=" ")=>{if(stripVTControlCharacters(e).length>t)throw new Error("String length is greater than the length provided.");return r.repeat(t-stripVTControlCharacters(e).length)+e};var gn=/\n|\r\n/g,Z=e=>e.split(gn),ee=(e,{lineNumbers:t=false,prefix:r}={})=>{let o=e;if(t){let n=e.length.toString().length+1;o=o.map((s,i)=>`${jt(`${i+1}`,n)} ${s}`);}return r!==void 0&&(o=o.map((n,s)=>`${r(s,e.length)}${n}`)),o.join(un.EOL)};var hn={"no-workspace":"--no-workspace","install-as-dev-dependency":"-D"},yn={"install-as-dev-dependency":"-D"},vn={"no-workspace":"--workspaces=false","install-as-dev-dependency":"-D"},io={"no-workspace":"--ignore-workspace","install-as-dev-dependency":"-D"},ao={"no-workspace":"--focus","install-as-dev-dependency":"-D"},ar={bun:hn,npm:vn,pnpm:io,deno:yn,yarn:ao,"yarn@berry":ao,"pnpm@6":io};var Ce=()=>new wn({projectName:"jsrepo"});var Ge=class{#e;constructor(t){this.#e=t??Ce();}getKey(t){return `${t}-token`.toLowerCase()}get(t){let r=this.getKey(t);return this.#e.get(r,void 0)}set(t,r){let o=this.getKey(t);this.#e.set(o,r);}delete(t){let r=this.getKey(t);this.#e.delete(r);}};var lr={"Claude 3.7 Sonnet":{updateFile:async({originalFile:e,newFile:t,loading:r,verbose:o,additionalInstructions:n,messages:s})=>{let i=await cr("Anthropic");o||r.start("Asking Claude 3.7 Sonnet");let a=Mt({originalFile:e,newFile:t,additionalInstructions:n,rePrompt:s!==void 0&&s.length>0});o?.(`Prompting Claude 3.7 Sonnet with:
|
|
3
3
|
${JSON.stringify(a,null," ")}`);let c=await Sn({model:"claude-3-7-sonnet-latest",prompt:a,apiKey:i,messages:s,maxTokens:(e.content.length+t.content.length)*2});return o||r.stop("Claude 3.7 Sonnet updated the file"),c?{content:Vt(c),prompt:a.message}:{content:t.content,prompt:a.message}}},"ChatGPT 4o":{updateFile:async({originalFile:e,newFile:t,loading:r,verbose:o,additionalInstructions:n,messages:s})=>{let i=await cr("OpenAI");o||r.start("Asking ChatGPT 4o");let a=Mt({originalFile:e,newFile:t,additionalInstructions:n,rePrompt:s!==void 0&&s.length>0});o?.(`Prompting ChatGPT 4o with:
|
|
4
4
|
${JSON.stringify(a,null," ")}`);let c=await co({model:"gpt-4o",prompt:a,apiKey:i,messages:s,maxTokens:(e.content.length+t.content.length)*2});return o||r.stop("ChatGPT 4o updated the file"),c?{content:Vt(c),prompt:a.message}:{content:t.content,prompt:a.message}}},"ChatGPT 4o-mini":{updateFile:async({originalFile:e,newFile:t,loading:r,verbose:o,additionalInstructions:n,messages:s})=>{let i=await cr("OpenAI");o||r.start("Asking ChatGPT 4o-mini");let a=Mt({originalFile:e,newFile:t,additionalInstructions:n,rePrompt:s!==void 0&&s.length>0});o?.(`Prompting ChatGPT 4o with:
|
|
5
5
|
${JSON.stringify(a,null," ")}`);let c=await co({model:"gpt-4o-mini",prompt:a,apiKey:i,messages:s,maxTokens:(e.content.length+t.content.length)*2});return o||r.stop("ChatGPT 4o-mini updated the file"),c?{content:Vt(c),prompt:a.message}:{content:t.content,prompt:a.message}}},Phi4:{updateFile:async({originalFile:e,newFile:t,loading:r,verbose:o,additionalInstructions:n,messages:s})=>{o||r.start("Asking Phi4");let i=Mt({originalFile:e,newFile:t,additionalInstructions:n,rePrompt:s!==void 0&&s.length>0});o?.(`Prompting Phi4 with:
|
|
@@ -28,8 +28,8 @@ ${t.content}
|
|
|
28
28
|
`),h};var dr="latest-version",En=60*60*1e3,fo=async({noCache:e=false}={})=>{try{let t=Ce(),r;if(!e){let a$1=t.get(dr);if(a$1){if(a$1.expiration>Date.now())return r=a$1.version,a(r);t.delete(dr);}}let o=new AbortController,n=setTimeout(()=>{o.abort();},1e3),s=await xr("https://raw.githubusercontent.com/ieedan/jsrepo/refs/heads/main/packages/cli/package.json",{signal:o.signal});if(clearTimeout(n),!s.ok)return b("Error getting version");let{version:i}=await s.json();return r=i,t.set(dr,{expiration:Date.now()+En,version:r}),a(r)}catch(t){return b(`Error getting version: ${t}`)}};var Dn=/^(@[^\/]+\/[^@\/]+)(?:@([^\/]+))?(\/.*)?$/,On=/^([^@\/]+)(?:@([^\/]+))?(\/.*)?$/,Ue=e=>{let t=Dn.exec(e)||On.exec(e);return t?a({name:t[1]||"",version:t[2]||"latest",path:t[3]||""}):b(`invalid package name: ${e}`)};var fr=(e,t)=>{let r=Y.join(e,"package.json");if(ie.existsSync(r))return r;if(e===t)return;let o=e.split(/[\/\\]/);return fr(o.slice(0,o.length-1).join("/"),t)},mr=e=>{if(!ie.existsSync(e))return b(`${e} doesn't exist`);let t=ie.readFileSync(e).toString();try{return a(JSON.parse(t))}catch(r){return b(`Error reading package.json: ${r}`)}},Wt=e=>e[0]==="^"?e.slice(1):e,go=(e,t,{cwd:r})=>{let o=e,n=t,s=mr(Y.join(r,"package.json"));if(!s.isErr()){let i=s.unwrap();if(i.dependencies)for(let a of o){let{name:c,version:l}=Ue(a).unwrap(),d=i.dependencies[c];if(l===void 0&&d){o.delete(a);continue}d&&mo.satisfies(Wt(d),l)&&o.delete(a);}if(i.devDependencies)for(let a of n){let{name:c,version:l}=Ue(a).unwrap(),d=i.devDependencies[c];if(l===void 0&&d){n.delete(a);continue}d&&mo.satisfies(Wt(d),l)&&n.delete(a);}}return {dependencies:o,devDependencies:n}};var wo=async(e,{loading:t})=>{for(let r of e){t.start(r.loadingMessage);try{await r.run();}catch(o){t.stop(`Error while ${r.loadingMessage}`),console.error(o);}t.stop(r.completedMessage);}},bo=async({tasks:e,startMessage:t,stopMessage:r,loading:o})=>{o.start(t),await Promise.all([...e.map(n=>n.run({message:o.message}))]),o.stop(r);},Ee=({verbose:e}={})=>{let t=spinner();return {message:r=>{e?e(r??""):t.message(r);},stop:r=>{e?e(r??""):t.stop(r);},start:r=>{e?e(r??""):t.start(r);}}},et=e=>{let t=vo(e.join(`
|
|
29
29
|
`),{title:"Next Steps",textAlignment:"left",padding:1,borderColor:"gray",borderStyle:{topLeft:stripVTControlCharacters(Rt),bottomLeft:stripVTControlCharacters(Rt),topRight:stripVTControlCharacters(Xr),top:stripVTControlCharacters(Ct),bottom:stripVTControlCharacters(Ct),bottomRight:stripVTControlCharacters(Zr),left:stripVTControlCharacters(O),right:stripVTControlCharacters(O)}});return `${O}
|
|
30
30
|
${t}
|
|
31
|
-
`},ko=(e,t=3)=>{let r=e.slice(0,t),o=e.length-r.length;return `${r.join(", ")}${o>0?` and ${o} other(s)`:""}`},Gn=(e,t,r)=>{let o=
|
|
32
|
-
`),{borderColor:"gray",padding:1,margin:1,textAlignment:"center"})},le=async()=>{console.clear();let e=await fo();e.isOk()&&mo.lt(Re.version,e.unwrap())&&console.info(Gn(Re.name,Re.version,e.unwrap())),intro(`${E.bgHex("#f7df1e").black(` ${Re.name} `)}${E.gray(` v${Re.version} `)}`);},yo="model-preference",mt=async({incoming:e,current:t,config:r,options:o})=>{let n=Ce();process.stdout.write(`${O}
|
|
31
|
+
`},ko=(e,t=3)=>{let r=e.slice(0,t),o=e.length-r.length;return `${r.join(", ")}${o>0?` and ${o} other(s)`:""}`},Gn=async(e,t,r)=>{let o=(await detect$1({cwd:process.cwd()}))?.agent??"npm",n=resolveCommand$1(o,"global",["jsrepo@latest"]),s=[`Update available! ${E.redBright(t)} -> ${E.greenBright(r)}`,`${E.cyan("Changelog")}: https://github.com/ieedan/jsrepo/releases/tag/${e}@${r}`,`Run ${E.cyan(`${n?.command} ${n?.args.join(" ")}`)} to update!`,"",`${E.yellowBright("Star")} on GitHub for updates: https://github.com/ieedan/jsrepo`];return vo(s.join(`
|
|
32
|
+
`),{borderColor:"gray",padding:1,margin:1,textAlignment:"center"})},le=async()=>{console.clear();let e=await fo();e.isOk()&&mo.lt(Re.version,e.unwrap())&&console.info(await Gn(Re.name,Re.version,e.unwrap())),intro(`${E.bgHex("#f7df1e").black(` ${Re.name} `)}${E.gray(` v${Re.version} `)}`);},yo="model-preference",mt=async({incoming:e,current:t,config:r,options:o})=>{let n=Ce();process.stdout.write(`${O}
|
|
33
33
|
`);let s=false,i=e.content,a=n.get(yo,"Claude 3.5 Sonnet"),c=[];for(;;){let l=diffLines(t.content,i),d=po({from:e.path,to:t.path,changes:l,expand:o.expand,maxUnchanged:o.maxUnchanged,prefix:()=>`${O} `,onUnchanged:({from:m,to:h,prefix:u})=>`${u?.()??""}${E.cyan(m)} \u2192 ${E.gray(h)} ${E.gray("(unchanged)")}
|
|
34
34
|
`,intro:({from:m,to:h,changes:u,prefix:y})=>{let f=u.filter(g=>g.added||g.removed).length;return `${y?.()??""}${E.cyan(m)} \u2192 ${E.gray(h)} (${f} change${f===1?"":"s"})
|
|
35
35
|
${y?.()??""}
|