jsrepo 1.44.1 → 1.44.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import {h,g,f,u,c,s,l,n,t,a,b,w,v,k as k$1}from'./chunk-S5EESQYE.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 O from'chalk';import {resolveCommand}from'package-manager-detector/commands';import {detect}from'package-manager-detector/detect';import Y from'pathe';import*as k from'valibot';import Dn from'is-unicode-supported';import {builtinModules}from'node:module';import {createPathsMatcher,getTsconfig}from'get-tsconfig';import Ko from'validate-npm-package-name';import Nn from'node:os';import {stripVTControlCharacters}from'node:util';import ys from'escape-string-regexp';import {execa}from'execa';import {detect as detect$1,resolveCommand as resolveCommand$1}from'package-manager-detector';import mo from'boxen';import {diffLines,diffChars}from'diff';import ao from'semver';import {cursor,erase}from'sisteransi';import Mn from'@anthropic-ai/sdk';import Un from'ollama';import zn from'openai';import _n from'conf';import xr from'node-fetch';import {Biome,Distribution}from'@biomejs/js-api';import*as $o from'css-dependency';import*as xo from'prettier';import*as Ro from'parse5';import Rs from'oxc-parser';import {walk}from'estree-walker';import*as Bo from'svelte/compiler';import*as Vo from'vue/compiler-sfc';import gi from'ignore';var gt={name:"jsrepo",description:"A CLI to add shared code from remote repositories.",version:"1.44.1"};var Tn=Dn(),se=(e,t)=>Tn?e:t,Ur=se("\u25C6","*"),zr=se("\u25C6","*"),Gr=se("\u25A0","x"),D=O.gray(se("\u2502","|")),Pt=O.gray(se("\u2500","-")),Kr=O.gray(se("\u2510","+")),Hr=O.gray(se("\u2518","+")),It=O.gray(se("\u251C","+")),qr=O.gray(se("\u252C","+"));O.gray(se("\u250C","T"));var Yr=O.gray(se("\u2514","-")),fe=O.bgRgb(245,149,66).black(" WARN "),Ee=O.bgBlueBright.white(" INFO "),Et=O.bgRedBright.white(" ERROR "),Oe=O.hex("#f7df1e")("jsrepo");var Qr=(e,t)=>{let r=[];for(let[o,n]of e)r.push(t(o,n));return r},Xr=(e,t)=>{let r=0;for(let o of e)r=r+t(o);return r};var Ot=(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 An=/\n|\r\n/g,M=e=>e.split(An),W=(e,{lineNumbers:t=false,prefix:r}={})=>{let o=e;if(t){let n=e.length.toString().length+1;o=o.map((s,i)=>`${Ot(`${i+1}`,n)} ${s}`);}return r!==void 0&&(o=o.map((n,s)=>`${r(s,e.length)}${n}`)),o.join(Nn.EOL)};var Fn={"no-workspace":"--no-workspace","install-as-dev-dependency":"-D"},Ln={"install-as-dev-dependency":"-D"},Bn={"no-workspace":"--workspaces=false","install-as-dev-dependency":"-D"},to={"no-workspace":"--ignore-workspace","install-as-dev-dependency":"-D"},ro={"no-workspace":"--focus","install-as-dev-dependency":"-D"},lr={bun:Fn,npm:Bn,pnpm:to,deno:Ln,yarn:ro,"yarn@berry":ro,"pnpm@6":to};var De=()=>new _n({projectName:"jsrepo"});var pr="http-registries-w-tokens",Te=class{#e;constructor(t){this.#e=t??De();}getKey(t){return `${t}-token`.toLowerCase()}get(t){let r=this.getKey(t);return this.#e.get(r,void 0)}set(t,r){if(t.startsWith("http")){let n=this.getHttpRegistriesWithTokens(),s=t.slice(5);n||(n=[]),n.includes(s)||n.push(s),this.#e.set(pr,n);}let o=this.getKey(t);this.#e.set(o,r);}delete(t){if(t.startsWith("http")){let o=this.getHttpRegistriesWithTokens(),n=t.slice(5),s=o.indexOf(n);s!==-1&&(o=[...o.slice(0,s),...o.slice(s+1)]),this.#e.set(pr,o);}let r=this.getKey(t);this.#e.delete(r);}getHttpRegistriesWithTokens(){let t=this.#e.get(pr);return t||[]}};var mr={"Claude 3.7 Sonnet":{updateFile:async({originalFile:e,newFile:t,loading:r,verbose:o,additionalInstructions:n,messages:s})=>{let i=await oo("Anthropic");o||r.start("Asking Claude 3.7 Sonnet");let a=dr({originalFile:e,newFile:t,additionalInstructions:n,rePrompt:s!==void 0&&s.length>0});o?.(`Prompting Claude 3.7 Sonnet with:
2
+ import {h,g,f,u,c,s,l,n,t,a,b,w,v,k as k$1}from'./chunk-S5EESQYE.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 O from'chalk';import {resolveCommand}from'package-manager-detector/commands';import {detect}from'package-manager-detector/detect';import Y from'pathe';import*as k from'valibot';import Dn from'is-unicode-supported';import {builtinModules}from'node:module';import {createPathsMatcher,getTsconfig}from'get-tsconfig';import Ko from'validate-npm-package-name';import Nn from'node:os';import {stripVTControlCharacters}from'node:util';import ys from'escape-string-regexp';import {execa}from'execa';import {detect as detect$1,resolveCommand as resolveCommand$1}from'package-manager-detector';import mo from'boxen';import {diffLines,diffChars}from'diff';import ao from'semver';import {cursor,erase}from'sisteransi';import Mn from'@anthropic-ai/sdk';import Un from'ollama';import zn from'openai';import _n from'conf';import xr from'node-fetch';import {Biome,Distribution}from'@biomejs/js-api';import*as $o from'css-dependency';import*as xo from'prettier';import*as Ro from'parse5';import Rs from'oxc-parser';import {walk}from'estree-walker';import*as Bo from'svelte/compiler';import*as Vo from'vue/compiler-sfc';import gi from'ignore';var gt={name:"jsrepo",description:"A CLI to add shared code from remote repositories.",version:"1.44.2"};var Tn=Dn(),se=(e,t)=>Tn?e:t,Ur=se("\u25C6","*"),zr=se("\u25C6","*"),Gr=se("\u25A0","x"),D=O.gray(se("\u2502","|")),Pt=O.gray(se("\u2500","-")),Kr=O.gray(se("\u2510","+")),Hr=O.gray(se("\u2518","+")),It=O.gray(se("\u251C","+")),qr=O.gray(se("\u252C","+"));O.gray(se("\u250C","T"));var Yr=O.gray(se("\u2514","-")),fe=O.bgRgb(245,149,66).black(" WARN "),Ee=O.bgBlueBright.white(" INFO "),Et=O.bgRedBright.white(" ERROR "),Oe=O.hex("#f7df1e")("jsrepo");var Qr=(e,t)=>{let r=[];for(let[o,n]of e)r.push(t(o,n));return r},Xr=(e,t)=>{let r=0;for(let o of e)r=r+t(o);return r};var Ot=(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 An=/\n|\r\n/g,M=e=>e.split(An),W=(e,{lineNumbers:t=false,prefix:r}={})=>{let o=e;if(t){let n=e.length.toString().length+1;o=o.map((s,i)=>`${Ot(`${i+1}`,n)} ${s}`);}return r!==void 0&&(o=o.map((n,s)=>`${r(s,e.length)}${n}`)),o.join(Nn.EOL)};var Fn={"no-workspace":"--no-workspace","install-as-dev-dependency":"-D"},Ln={"install-as-dev-dependency":"-D"},Bn={"no-workspace":"--workspaces=false","install-as-dev-dependency":"-D"},to={"no-workspace":"--ignore-workspace","install-as-dev-dependency":"-D"},ro={"no-workspace":"--focus","install-as-dev-dependency":"-D"},lr={bun:Fn,npm:Bn,pnpm:to,deno:Ln,yarn:ro,"yarn@berry":ro,"pnpm@6":to};var De=()=>new _n({projectName:"jsrepo"});var pr="http-registries-w-tokens",Te=class{#e;constructor(t){this.#e=t??De();}getKey(t){return `${t}-token`.toLowerCase()}get(t){let r=this.getKey(t);return this.#e.get(r,void 0)}set(t,r){if(t.startsWith("http")){let n=this.getHttpRegistriesWithTokens(),s=t.slice(5);n||(n=[]),n.includes(s)||n.push(s),this.#e.set(pr,n);}let o=this.getKey(t);this.#e.set(o,r);}delete(t){if(t.startsWith("http")){let o=this.getHttpRegistriesWithTokens(),n=t.slice(5),s=o.indexOf(n);s!==-1&&(o=[...o.slice(0,s),...o.slice(s+1)]),this.#e.set(pr,o);}let r=this.getKey(t);this.#e.delete(r);}getHttpRegistriesWithTokens(){let t=this.#e.get(pr);return t||[]}};var mr={"Claude 3.7 Sonnet":{updateFile:async({originalFile:e,newFile:t,loading:r,verbose:o,additionalInstructions:n,messages:s})=>{let i=await oo("Anthropic");o||r.start("Asking Claude 3.7 Sonnet");let a=dr({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 Kn({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:fr(c),prompt:a.message}:{content:t.content,prompt:a.message}}},"OpenAI o3-mini":{updateFile:async({originalFile:e,newFile:t,loading:r,verbose:o,additionalInstructions:n,messages:s})=>{let i=await oo("OpenAI");o||r.start("Asking OpenAI o3-mini");let a=dr({originalFile:e,newFile:t,additionalInstructions:n,rePrompt:s!==void 0&&s.length>0});o?.(`Prompting OpenAI o3-mini with:
4
4
  ${JSON.stringify(a,null," ")}`);let c=await Gn({model:"o3-mini",prompt:a,apiKey:i,messages:s,maxTokens:(e.content.length+t.content.length)*2});return o||r.stop("OpenAI o3-mini updated the file"),c?{content:fr(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=dr({originalFile:e,newFile:t,additionalInstructions:n,rePrompt:s!==void 0&&s.length>0});o?.(`Prompting Phi4 with:
5
5
  ${JSON.stringify(i,null," ")}`);let a=await Hn({model:"phi4",prompt:i,messages:s});return o||r.stop("Phi4 updated the file"),a?{content:fr(a),prompt:i.message}:{content:t.content,prompt:i.message}}}},Gn=async({prompt:e,maxTokens:t,model:r,apiKey:o,messages:n})=>{let a=(await new zn({apiKey:o}).chat.completions.create({model:r,max_completion_tokens:t,messages:[{role:"system",content:e.system},...n??[],{role:"user",content:e.message}]})).choices[0];return a.message.content===null?null:a.message.content},Kn=async({prompt:e,messages:t,maxTokens:r,model:o,apiKey:n})=>{let s=new Mn({apiKey:n}),i=[];if(t)for(let l of t)i.push({role:l.role,content:[{type:"text",text:l.content}]});i.push({role:"user",content:[{type:"text",text:e.message}]});let c=(await s.messages.create({model:o,max_tokens:Math.min(r,8192),temperature:.5,system:e.system,messages:i})).content[0];return c.type!=="text"?null:c.text},Hn=async({prompt:e,messages:t,model:r})=>(await Un.chat({model:r,messages:[{role:"system",content:e.system},...t??[],{role:"user",content:e.message}]})).message.content,dr=({originalFile:e,newFile:t,additionalInstructions:r,rePrompt:o})=>({system:"You will merge two files provided by the user. You will respond only with the resulting code. DO NOT format the code with markdown, DO NOT put the code inside of triple quotes, only return the code as a raw string. DO NOT make unnecessary changes.",message:o?r??"":`
@@ -34,14 +34,14 @@ ${t}
34
34
  ${m?.()??""}
35
35
  `}});if(process.stdout.write(p),(l.length>1||t.content==="")&&(s=o.yes,!o.yes&&!o.no)){let u=[{label:"Accept",value:"accept"},{label:"Reject",value:"reject"}];c.length>0?u.push({label:`\u2728 ${O.yellow("Update with AI")} \u2728 ${O.gray("(Iterate)")}`,value:"update-iterate"},{label:`\u2728 ${O.yellow("Update with AI")} \u2728 ${O.gray("(Start over)")}`,value:"update"}):u.push({label:`\u2728 ${O.yellow("Update with AI")} \u2728`,value:"update"});let v=await select({message:"Accept changes?",options:u});if(isCancel(v)&&(cancel("Canceled!"),process.exit(0)),v==="update"||v==="update-iterate"){v==="update"&&(c=[]);let b=await select({message:"Select a model",options:Object.keys(mr).map(h=>({label:h,value:h})),initialValue:a});isCancel(b)&&(cancel("Canceled!"),process.exit(0)),b!==a&&n.set(fo,b),a=b;let m=await text({message:"Additional instructions:",defaultValue:"None",validate:h=>{if(c.length!==0&&h.trim()==="")return "Please provide additional context so that I know how I can improve."}});isCancel(m)&&(cancel("Canceled!"),process.exit(0));try{let{content:h,prompt:f}=await mr[a].updateFile({originalFile:t,newFile:{content:v==="update-iterate"?i:e.content,path:e.path},additionalInstructions:m!=="None"?m:void 0,loading:o.loading,verbose:o.verbose,messages:c});i=h,c.push({role:"user",content:f}),c.push({role:"assistant",content:h});}catch(h){o.loading.stop(),log.error(O.red(`Error getting completions: ${h}`)),process.stdout.write(`${D}
36
36
  `);continue}i=await Kt({file:{content:i,destPath:t.path},biomeOptions:r.biomeOptions,prettierOptions:r.prettierOptions,formatter:r.formatter}),process.stdout.write(`${D}
37
- `);continue}s=v==="accept";break}break}return s?{applyChanges:true,updatedContent:i}:{applyChanges:false}},Je=async(e,t,{yes:r,no:o=false,cwd:n,pm:s,ignoreWorkspace:i=false})=>{let{dependencies:a,devDependencies:c}=lo(e,t,{cwd:n});if(a.size>0||c.size>0){let p=r;if(!r&&!o){let u=await confirm({message:"Would you like to install dependencies?",initialValue:true});isCancel(u)&&(cancel("Canceled!"),process.exit(0)),p=u;}if(p)return a.size>0&&await vr({pm:s,deps:Array.from(a),dev:false,cwd:n,ignoreWorkspace:i}),c.size>0&&await vr({pm:s,deps:Array.from(c),dev:false,cwd:n,ignoreWorkspace:i}),{installed:true,dependencies:a,devDependencies:c}}return {installed:false,dependencies:a,devDependencies:c}},yo=e=>{let t=O.dim(D),r=O.green(Ur),o=O.green(zr),n=O.red(Gr);process.stdout.write(`${t}
37
+ `);continue}s=v==="accept";break}break}return s?{applyChanges:true,updatedContent:i}:{applyChanges:false}},Je=async(e,t,{yes:r,no:o=false,cwd:n,pm:s,ignoreWorkspace:i=false})=>{let{dependencies:a,devDependencies:c}=lo(e,t,{cwd:n});if(a.size>0||c.size>0){let p=r;if(!r&&!o){let u=await confirm({message:"Would you like to install dependencies?",initialValue:true});isCancel(u)&&(cancel("Canceled!"),process.exit(0)),p=u;}if(p)return a.size>0&&await vr({pm:s,deps:Array.from(a),dev:false,cwd:n,ignoreWorkspace:i}),c.size>0&&await vr({pm:s,deps:Array.from(c),dev:true,cwd:n,ignoreWorkspace:i}),{installed:true,dependencies:a,devDependencies:c}}return {installed:false,dependencies:a,devDependencies:c}},yo=e=>{let t=O.dim(D),r=O.green(Ur),o=O.green(zr),n=O.red(Gr);process.stdout.write(`${t}
38
38
  `),process.stdout.write(`${r} ${e}
39
39
  `);let s="",i="",a=(l=false)=>{if(!i)return;let p=process.stdout.columns,v=i.split(`
40
40
  `).reduce((b,m)=>b+Math.ceil(m.length/p),0)+(l?1:0);process.stdout.write(cursor.up(v)),process.stdout.write(erase.down());},c=(l=0)=>{let p=s.split(`
41
41
  `).slice(-l);i="";for(let u of p)i+=`${t} ${u}
42
42
  `;process.stdout.write(O.dim(i));};return {set text(l){a(),s+=l;let p=Math.ceil(process.stdout.rows/2);c(p);},fail(l){a(true),process.stdout.write(`${n} ${l}
43
43
  `),c();},success(l){a(true),process.stdout.write(`${o} ${l}
44
- `);}}};var vr=async({pm:e,deps:t,dev:r,cwd:o,ignoreWorkspace:n=false})=>{let s=[...t];let i=lr[e]["no-workspace"];n&&i&&s.push(i);let a=resolveCommand$1(e,"add",s);a==null&&program.error(O.red(`Could not resolve add command for '${e}'.`));let c=yo(`Installing dependencies with ${e}...`);try{let l=execa(a.command,[...a.args],{cwd:o});l.stdout.on("data",p=>{c.text=p;}),l.stderr.on("data",p=>{c.text=p;}),await l,c.success(`Installed ${O.cyan(t.join(", "))}`);}catch{c.fail("Failed to install dependencies"),process.exit(2);}},gs=/\{\{([^\/]+)\/([^\}]+)\}\}/g,wo=({template:e,config:t,destPath:r,cwd:o})=>{let n=Y.join(r,"../");return e.replace(gs,(s,i,a)=>{if(t.paths[i]===void 0){if(t.paths["*"].startsWith(".")){let c=Y.relative(n,Y.join(o,t.paths["*"],i,a));return c.startsWith(".")?c:`./${c}`}return Y.join(t.paths["*"],i,a)}if(t.paths[i].startsWith(".")){let c=Y.relative(n,Y.join(o,t.paths[i],a));return c.startsWith(".")?c:`./${c}`}return Y.join(t.paths[i],a)})};var Tt=async({file:e,config:t,imports:r,watermark:o,prettierOptions:n,biomeOptions:s,cwd:i,verbose:a$1})=>{let c=st.find(p=>p.matches(e.destPath)),l=e.content;if(c){t.watermark&&(l=`${c.comment(o)}
44
+ `);}}};var vr=async({pm:e,deps:t,dev:r,cwd:o,ignoreWorkspace:n=false})=>{let s=[...t];r&&s.push(lr[e]["install-as-dev-dependency"]);let i=lr[e]["no-workspace"];n&&i&&s.push(i);let a=resolveCommand$1(e,"add",s);a==null&&program.error(O.red(`Could not resolve add command for '${e}'.`));let c=yo(`Installing dependencies with ${e}...`);try{let l=execa(a.command,[...a.args],{cwd:o});l.stdout.on("data",p=>{c.text=p;}),l.stderr.on("data",p=>{c.text=p;}),await l,c.success(`Installed ${O.cyan(t.join(", "))}`);}catch{c.fail("Failed to install dependencies"),process.exit(2);}},gs=/\{\{([^\/]+)\/([^\}]+)\}\}/g,wo=({template:e,config:t,destPath:r,cwd:o})=>{let n=Y.join(r,"../");return e.replace(gs,(s,i,a)=>{if(t.paths[i]===void 0){if(t.paths["*"].startsWith(".")){let c=Y.relative(n,Y.join(o,t.paths["*"],i,a));return c.startsWith(".")?c:`./${c}`}return Y.join(t.paths["*"],i,a)}if(t.paths[i].startsWith(".")){let c=Y.relative(n,Y.join(o,t.paths[i],a));return c.startsWith(".")?c:`./${c}`}return Y.join(t.paths[i],a)})};var Tt=async({file:e,config:t,imports:r,watermark:o,prettierOptions:n,biomeOptions:s,cwd:i,verbose:a$1})=>{let c=st.find(p=>p.matches(e.destPath)),l=e.content;if(c){t.watermark&&(l=`${c.comment(o)}
45
45
 
46
46
  ${l}`),a$1?.(`Formatting ${O.bold(e.destPath)}`);try{l=await c.format(l,{filePath:e.destPath,formatter:t.formatter,prettierOptions:n,biomeOptions:s});}catch(p){return b(`Error formatting ${O.bold(e.destPath)} ${p}`)}}for(let[p,u]of Object.entries(r)){let v=wo({template:u,config:t,destPath:e.destPath,cwd:i}),b=new RegExp(`(['"])${ys(p)}\\1`,"g");l=l.replaceAll(b,`$1${v}$1`);}return a(l)},Kt=async({file:e,formatter:t,prettierOptions:r,biomeOptions:o})=>{let n=st.find(i=>i.matches(e.destPath)),s=e.content;if(n)try{s=await n.format(e.content,{filePath:e.destPath,formatter:t,prettierOptions:r,biomeOptions:o});}catch{return s}return s},ko=e=>{let t=[".js",".ts",".cjs",".mjs"];if(!k$1(e,t))return;let r=Y.dirname(e),o=ie.readdirSync(r),n=Y.parse(e);for(let s of o)if(k$1(s,t)&&Y.parse(s).name===n.name)return Y.join(r,s)},vt=e=>{let t;try{if(t=getTsconfig(e,"tsconfig.json"),!t&&(t=getTsconfig(e,"jsconfig.json"),!t))return a(null)}catch(r){return b(`Error while trying to get ${O.bold("tsconfig.json")}: ${r}`)}return a(t)};var Co={matches:e=>e.endsWith(".css"),resolveDependencies:({filePath:e,isSubDir:t,excludeDeps:r,dirs:o,cwd:n,containingDir:s})=>{let i=ie.readFileSync(e).toString(),a$1=$o.parse(i,{allowTailwindDirectives:true});if(a$1.isErr())return b(a$1.unwrapErr().message);let c=a$1.unwrap(),l=$e({moduleSpecifiers:c.map(p=>p.module),filePath:e,isSubDir:t,dirs:o,cwd:n,containingDir:s,doNotInstall:r});return l.isErr()?b(l.unwrapErr().map(p=>ke(p)).join(`
47
47
  `)):a(l.unwrap())},comment:e=>`/*