reviewme 0.0.7 → 0.0.8
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/frontend/index.html
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
</script>
|
|
19
19
|
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 28 28'><rect width='28' height='28' rx='6' fill='%23121817'/><path d='M9 6.5v14h10.5' fill='none' stroke='%234c67dc' stroke-width='2.7' stroke-linecap='round' stroke-linejoin='round'/><path d='M14.5 10.5h6M17.5 7.5v6' fill='none' stroke='%235bc98a' stroke-width='1.5' stroke-linecap='round'/><path d='M14.5 17h6' fill='none' stroke='%23f07979' stroke-width='1.5' stroke-linecap='round'/></svg>" />
|
|
20
20
|
<title>ReviewMe</title>
|
|
21
|
-
<link rel="stylesheet" crossorigin href="./chunks/index-24nqzty0.css"><script type="module" crossorigin src="./chunks/index-
|
|
21
|
+
<link rel="stylesheet" crossorigin href="./chunks/index-24nqzty0.css"><script type="module" crossorigin src="./chunks/index-47st1cx6.js"></script></head>
|
|
22
22
|
<body>
|
|
23
23
|
<div id="root"></div>
|
|
24
24
|
|
package/dist/server/main.js
CHANGED
|
@@ -136,7 +136,7 @@ ${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.pus
|
|
|
136
136
|
`)+1;while(t!==0)this.onNewLine(this.offset+t),t=this.source.indexOf(`
|
|
137
137
|
`,t)+1}yield*this.pop();break;default:yield*this.pop(),yield*this.step()}}*blockMap(e){let t=e.items[e.items.length-1];switch(this.type){case"newline":if(this.onKeyLine=!1,t.value){let s="end"in t.value?t.value.end:void 0;if((Array.isArray(s)?s[s.length-1]:void 0)?.type==="comment")s?.push(this.sourceToken);else e.items.push({start:[this.sourceToken]})}else if(t.sep)t.sep.push(this.sourceToken);else t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else if(t.sep)t.sep.push(this.sourceToken);else{if(this.atIndentedComment(t.start,e.indent)){let n=e.items[e.items.length-2]?.value?.end;if(Array.isArray(n)){is(n,t.start),n.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return}if(this.indent>=e.indent){let s=!this.onKeyLine&&this.indent===e.indent,n=s&&(t.sep||t.explicitKey)&&this.type!=="seq-item-ind",r=[];if(n&&t.sep&&!t.value){let i=[];for(let o=0;o<t.sep.length;++o){let a=t.sep[o];switch(a.type){case"newline":i.push(o);break;case"space":break;case"comment":if(a.indent>e.indent)i.length=0;break;default:i.length=0}}if(i.length>=2)r=t.sep.splice(i[1])}switch(this.type){case"anchor":case"tag":if(n||t.value)r.push(this.sourceToken),e.items.push({start:r}),this.onKeyLine=!0;else if(t.sep)t.sep.push(this.sourceToken);else t.start.push(this.sourceToken);return;case"explicit-key-ind":if(!t.sep&&!t.explicitKey)t.start.push(this.sourceToken),t.explicitKey=!0;else if(n||t.value)r.push(this.sourceToken),e.items.push({start:r,explicitKey:!0});else this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]});this.onKeyLine=!0;return;case"map-value-ind":if(t.explicitKey)if(!t.sep)if(ae(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{let i=Me(t.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:null,sep:[this.sourceToken]}]})}else if(t.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(ae(t.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:r,key:null,sep:[this.sourceToken]}]});else if(To(t.key)&&!ae(t.sep,"newline")){let i=Me(t.start),o=t.key,a=t.sep;a.push(this.sourceToken),delete t.key,delete t.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:o,sep:a}]})}else if(r.length>0)t.sep=t.sep.concat(r,this.sourceToken);else t.sep.push(this.sourceToken);else if(!t.sep)Object.assign(t,{key:null,sep:[this.sourceToken]});else if(t.value||n)e.items.push({start:r,key:null,sep:[this.sourceToken]});else if(ae(t.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]});else t.sep.push(this.sourceToken);this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let i=this.flowScalar(this.type);if(n||t.value)e.items.push({start:r,key:i,sep:[]}),this.onKeyLine=!0;else if(t.sep)this.stack.push(i);else Object.assign(t,{key:i,sep:[]}),this.onKeyLine=!0;return}default:{let i=this.startBlockValue(e);if(i){if(i.type==="block-seq"){if(!t.explicitKey&&t.sep&&!ae(t.sep,"newline")){yield*this.pop({type:"error",offset:this.offset,message:"Unexpected block-seq-ind on same line with key",source:this.source});return}}else if(s)e.items.push({start:r});this.stack.push(i);return}}}}yield*this.pop(),yield*this.step()}*blockSequence(e){let t=e.items[e.items.length-1];switch(this.type){case"newline":if(t.value){let s="end"in t.value?t.value.end:void 0;if((Array.isArray(s)?s[s.length-1]:void 0)?.type==="comment")s?.push(this.sourceToken);else e.items.push({start:[this.sourceToken]})}else t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(t.start,e.indent)){let n=e.items[e.items.length-2]?.value?.end;if(Array.isArray(n)){is(n,t.start),n.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return;case"anchor":case"tag":if(t.value||this.indent<=e.indent)break;t.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==e.indent)break;if(t.value||ae(t.start,"seq-item-ind"))e.items.push({start:[this.sourceToken]});else t.start.push(this.sourceToken);return}if(this.indent>e.indent){let s=this.startBlockValue(e);if(s){this.stack.push(s);return}}yield*this.pop(),yield*this.step()}*flowCollection(e){let t=e.items[e.items.length-1];if(this.type==="flow-error-end"){let s;do yield*this.pop(),s=this.peek(1);while(s?.type==="flow-collection")}else if(e.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":if(!t||t.sep)e.items.push({start:[this.sourceToken]});else t.start.push(this.sourceToken);return;case"map-value-ind":if(!t||t.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(t.sep)t.sep.push(this.sourceToken);else Object.assign(t,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":if(!t||t.value)e.items.push({start:[this.sourceToken]});else if(t.sep)t.sep.push(this.sourceToken);else t.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let n=this.flowScalar(this.type);if(!t||t.value)e.items.push({start:[],key:n,sep:[]});else if(t.sep)this.stack.push(n);else Object.assign(t,{key:n,sep:[]});return}case"flow-map-end":case"flow-seq-end":e.end.push(this.sourceToken);return}let s=this.startBlockValue(e);if(s)this.stack.push(s);else yield*this.pop(),yield*this.step()}else{let s=this.peek(2);if(s.type==="block-map"&&(this.type==="map-value-ind"&&s.indent===e.indent||this.type==="newline"&&!s.items[s.items.length-1].sep))yield*this.pop(),yield*this.step();else if(this.type==="map-value-ind"&&s.type!=="flow-collection"){let n=rs(s),r=Me(n);vo(e);let i=e.end.splice(1,e.end.length);i.push(this.sourceToken);let o={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:r,key:e,sep:i}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=o}else yield*this.lineEnd(e)}}flowScalar(e){if(this.onNewLine){let t=this.source.indexOf(`
|
|
138
138
|
`)+1;while(t!==0)this.onNewLine(this.offset+t),t=this.source.indexOf(`
|
|
139
|
-
`,t)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let t=rs(e),s=Me(t);return s.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:s,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let t=rs(e),s=Me(t);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:s,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,t){if(this.type!=="comment")return!1;if(this.indent<=t)return!1;return e.every((s)=>s.type==="newline"||s.type==="space")}*documentEnd(e){if(this.type!=="doc-mode"){if(e.end)e.end.push(this.sourceToken);else e.end=[this.sourceToken];if(this.type==="newline")yield*this.pop()}}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:if(e.end)e.end.push(this.sourceToken);else e.end=[this.sourceToken];if(this.type==="newline")yield*this.pop()}}}ng.Parser=Ao});var Oo=v(function(fg){var Ro=Rn(),ig=Ze(),it=et(),og=Ms(),ag=N(),lg=Dn(),Co=qn();function No(e){let t=e.prettyErrors!==!1;return{lineCounter:e.lineCounter||t&&new lg.LineCounter||null,prettyErrors:t}}function cg(e,t={}){let{lineCounter:s,prettyErrors:n}=No(t),r=new Co.Parser(s?.addNewLine),i=new Ro.Composer(t),o=Array.from(i.compose(r.parse(e)));if(n&&s)for(let a of o)a.errors.forEach(it.prettifyError(e,s)),a.warnings.forEach(it.prettifyError(e,s));if(o.length>0)return o;return Object.assign([],{empty:!0},i.streamInfo())}function xo(e,t={}){let{lineCounter:s,prettyErrors:n}=No(t),r=new Co.Parser(s?.addNewLine),i=new Ro.Composer(t),o=null;for(let a of i.compose(r.parse(e),!0,e.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new it.YAMLParseError(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}if(n&&s)o.errors.forEach(it.prettifyError(e,s)),o.warnings.forEach(it.prettifyError(e,s));return o}function dg(e,t,s){let n=void 0;if(typeof t==="function")n=t;else if(s===void 0&&t&&typeof t==="object")s=t;let r=xo(e,s);if(!r)return null;if(r.warnings.forEach((i)=>og.warn(r.options.logLevel,i)),r.errors.length>0)if(r.options.logLevel!=="silent")throw r.errors[0];else r.errors=[];return r.toJS(Object.assign({reviver:n},s))}function ug(e,t,s){let n=null;if(typeof t==="function"||Array.isArray(t))n=t;else if(s===void 0&&t)s=t;if(typeof s==="string")s=s.length;if(typeof s==="number"){let r=Math.round(s);s=r<1?void 0:r>8?{indent:8}:{indent:r}}if(e===void 0){let{keepUndefined:r}=s??t??{};if(!r)return}if(ag.isDocument(e)&&!n)return e.toString(s);return new ig.Document(e,n,s).toString(s)}fg.parse=dg;fg.parseAllDocuments=cg;fg.parseDocument=xo;fg.stringify=ug});import{spawn as dy}from"node:child_process";var jn={name:"reviewme",version:"0.0.
|
|
139
|
+
`,t)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let t=rs(e),s=Me(t);return s.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:s,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let t=rs(e),s=Me(t);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:s,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,t){if(this.type!=="comment")return!1;if(this.indent<=t)return!1;return e.every((s)=>s.type==="newline"||s.type==="space")}*documentEnd(e){if(this.type!=="doc-mode"){if(e.end)e.end.push(this.sourceToken);else e.end=[this.sourceToken];if(this.type==="newline")yield*this.pop()}}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:if(e.end)e.end.push(this.sourceToken);else e.end=[this.sourceToken];if(this.type==="newline")yield*this.pop()}}}ng.Parser=Ao});var Oo=v(function(fg){var Ro=Rn(),ig=Ze(),it=et(),og=Ms(),ag=N(),lg=Dn(),Co=qn();function No(e){let t=e.prettyErrors!==!1;return{lineCounter:e.lineCounter||t&&new lg.LineCounter||null,prettyErrors:t}}function cg(e,t={}){let{lineCounter:s,prettyErrors:n}=No(t),r=new Co.Parser(s?.addNewLine),i=new Ro.Composer(t),o=Array.from(i.compose(r.parse(e)));if(n&&s)for(let a of o)a.errors.forEach(it.prettifyError(e,s)),a.warnings.forEach(it.prettifyError(e,s));if(o.length>0)return o;return Object.assign([],{empty:!0},i.streamInfo())}function xo(e,t={}){let{lineCounter:s,prettyErrors:n}=No(t),r=new Co.Parser(s?.addNewLine),i=new Ro.Composer(t),o=null;for(let a of i.compose(r.parse(e),!0,e.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new it.YAMLParseError(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}if(n&&s)o.errors.forEach(it.prettifyError(e,s)),o.warnings.forEach(it.prettifyError(e,s));return o}function dg(e,t,s){let n=void 0;if(typeof t==="function")n=t;else if(s===void 0&&t&&typeof t==="object")s=t;let r=xo(e,s);if(!r)return null;if(r.warnings.forEach((i)=>og.warn(r.options.logLevel,i)),r.errors.length>0)if(r.options.logLevel!=="silent")throw r.errors[0];else r.errors=[];return r.toJS(Object.assign({reviver:n},s))}function ug(e,t,s){let n=null;if(typeof t==="function"||Array.isArray(t))n=t;else if(s===void 0&&t)s=t;if(typeof s==="string")s=s.length;if(typeof s==="number"){let r=Math.round(s);s=r<1?void 0:r>8?{indent:8}:{indent:r}}if(e===void 0){let{keepUndefined:r}=s??t??{};if(!r)return}if(ag.isDocument(e)&&!n)return e.toString(s);return new ig.Document(e,n,s).toString(s)}fg.parse=dg;fg.parseAllDocuments=cg;fg.parseDocument=xo;fg.stringify=ug});import{spawn as dy}from"node:child_process";var jn={name:"reviewme",version:"0.0.8",license:"Apache-2.0",description:"A local, browser-based Git branch review tool with inline comments and Codex threads.",type:"module",bin:{reviewme:"bin/reviewme.mjs"},files:["bin","dist/frontend","dist/server","examples/themes","LICENSE","README.md","THIRD_PARTY_NOTICES.md"],engines:{node:">=22.13"},publishConfig:{access:"public"},scripts:{clean:"node scripts/clean-dist.mjs",dev:"npm run build && node ./bin/reviewme.mjs","build:frontend":"bun build ./src/frontend/index.html ./node_modules/@pierre/diffs/dist/worker/worker.js --outdir ./dist/frontend --entry-naming '[name].[ext]' --chunk-naming 'chunks/[name]-[hash].[ext]' --asset-naming 'assets/[name]-[hash].[ext]' --minify","build:server":"bun build ./src/server/main.ts --target=node --outdir=./dist/server --entry-naming=main.js --minify --sourcemap=linked",build:"npm run clean && npm run build:frontend && npm run build:server","release:auth":"npm whoami --registry=https://registry.npmjs.org/ >/dev/null 2>&1 || npm login --auth-type=web --registry=https://registry.npmjs.org/","release:check":"npm run build && node scripts/verify-release.mjs",release:"npm run release:auth && npm run release:check && npm publish --ignore-scripts",prepack:"npm run build && node scripts/verify-release.mjs",start:"./bin/reviewme.mjs",test:"bun test",typecheck:"tsc --noEmit"},devDependencies:{"@pierre/diffs":"^1.3.6","@pierre/trees":"^1.0.0-beta.6","@types/react":"^19.2.2","@types/react-dom":"^19.2.2","bun-types":"^1.3.14","lucide-react":"^1.35.0",react:"^19.2.8","react-dom":"^19.2.8",typescript:"^5.9.3",yaml:"^2.9.0"}};import{basename as ra,join as Xn}from"node:path";import{spawn as zn}from"node:child_process";import{mkdtemp as ia,readFile as oa,rm as Ee}from"node:fs/promises";import{tmpdir as aa}from"node:os";import{Readable as la}from"node:stream";import{spawn as Bo}from"node:child_process";import{realpath as jo}from"node:fs/promises";import{resolve as Ko}from"node:path";class G extends Error{args;exitCode;stderr;constructor(e,t){let s=["git",...e].join(" "),n=t.stderr.trim()||`exited with code ${t.exitCode}`;super(`${s}: ${n}`);this.name="GitCommandError",this.args=e,this.exitCode=t.exitCode,this.stderr=t.stderr}}async function Kn(e){if(!e)return"";let t=[];for await(let s of e)t.push(Buffer.isBuffer(s)?s:Buffer.from(s));return Buffer.concat(t).toString("utf8")}function Wo(e){return new Promise((t,s)=>{let n=(i)=>{e.off("close",r),s(i)},r=(i)=>{e.off("error",n),t(i??1)};e.once("error",n),e.once("close",r)})}async function at(e,t){let s;try{s=Bo("git",[...e],{cwd:t,stdio:["ignore","pipe","pipe"]})}catch(n){throw Error(`Unable to start git: ${n instanceof Error?n.message:String(n)}`)}try{let[n,r,i]=await Promise.all([Kn(s.stdout),Kn(s.stderr),Wo(s)]);return{stdout:n,stderr:r,exitCode:i}}catch(n){throw Error(`Unable to start git: ${n instanceof Error?n.message:String(n)}`)}}async function Wn(e=process.cwd(),t=at){let s=Ko(e),n=await t(["-C",s,"rev-parse","--show-toplevel"],s);if(n.exitCode!==0)throw new G(["-C",s,"rev-parse","--show-toplevel"],n);let r=n.stdout.trim();if(!r)throw Error(`${s} is not inside a Git repository`);return jo(r)}async function H(e,t,s=at){let n=await s(t,e);if(n.exitCode!==0)throw new G(t,n);return n.stdout}import{access as Ho,constants as Yo,realpath as Hn}from"node:fs/promises";import{dirname as Jo,isAbsolute as Vo,relative as Go,resolve as ls,sep as cs,win32 as Xo}from"node:path";var Yn=new TextEncoder;class Y extends Error{constructor(e="Path must point to a file inside the repository"){super(e);this.name="InvalidRepositoryPathError"}}function Jn(){let e=new Uint8Array(32);crypto.getRandomValues(e);let t="";for(let s of e)t+=String.fromCharCode(s);return btoa(t).replaceAll("+","-").replaceAll("/","_").replaceAll("=","")}function zo(e,t){if(!t)return!1;let s=Yn.encode(e),n=Yn.encode(t),r=s.length^n.length,i=Math.max(s.length,n.length);for(let o=0;o<i;o+=1)r|=(s[o]??0)^(n[o]??0);return r===0}function Qo(e){let t=e.headers.get("authorization");if(t){let n=/^Bearer\s+(.+)$/i.exec(t.trim());if(n?.[1])return n[1]}let s=e.headers.get("x-review-token");if(s)return s;return new URL(e.url).searchParams.get("token")}function Vn(e,t){return zo(t,Qo(e))}function Gn(e,t){let s=e.endsWith(cs)?e:`${e}${cs}`;return t===e||t.startsWith(s)}function Se(e,t){if(typeof t!=="string"||t.length===0)throw new Y("A non-empty repository-relative path is required");if(t.includes("\x00")||t.includes("\r")||t.includes(`
|
|
140
140
|
`))throw new Y("Path contains a forbidden control character");let s=t.replaceAll("\\","/");if(s.startsWith("/")||Vo(t)||Xo.isAbsolute(t)||/^[A-Za-z]:\//.test(s))throw new Y("Path must be repository-relative");let n=ls(e),r=ls(n,s);if(!Gn(n,r))throw new Y("Path resolves outside the repository");let i=Go(n,r).split(cs).join("/");if(!i||i==="."||i.startsWith("../")||i==="..")throw new Y("Path must identify a file inside the repository");return{relativePath:i,absolutePath:r}}async function ds(e,t){let s=Se(e,t),n=ls(e),r=s.absolutePath;while(r!==n)try{await Ho(r,Yo.F_OK);let i=await Hn(r);if(!Gn(await Hn(n),i))throw new Y("Path resolves outside the repository");return s}catch(i){if(i instanceof Y)throw i;r=Jo(r)}return s}import{existsSync as Zo}from"node:fs";import{spawn as ea}from"node:child_process";class lt extends Error{exitCode;constructor(e,t){super(t);this.name="OpenCommandError",this.exitCode=e}}var ta=process.platform==="darwin"?'open "$VR_FILE"':'xdg-open "$VR_FILE"';async function sa(e){if(!e)return"";let t=[];for await(let s of e)t.push(Buffer.isBuffer(s)?s:Buffer.from(s));return Buffer.concat(t).toString("utf8")}function na(e){return new Promise((t,s)=>{let n=(i)=>{e.off("close",r),s(i)},r=(i)=>{e.off("error",n),t(i??1)};e.once("error",n),e.once("close",r)})}function us(e=process.env.REVIEWME_OPEN_COMMAND?.trim()||ta){if(e.trim()==="")throw Error("Open command cannot be empty");return async(t)=>{let s;try{s=ea("/bin/sh",["-lc",e],{cwd:t.repositoryRoot,env:{...process.env,VR_FILE:t.absolutePath,VR_REL_FILE:t.relativePath,VR_FILE_EXISTS:String(Zo(t.absolutePath)),VR_ROOT:t.repositoryRoot,VR_SIDE:t.side??"new",VR_COMMIT:t.commit??t.headSha??"",VR_BASE_SHA:t.baseSha??"",VR_HEAD_SHA:t.headSha??"",VR_LINE:t.line===void 0?"":String(t.line),VR_COLUMN:t.column===void 0?"":String(t.column)},stdio:["ignore","ignore","pipe"]})}catch(i){throw new lt(-1,`Unable to start the open command: ${i instanceof Error?i.message:String(i)}`)}let[n,r]=await Promise.all([sa(s.stderr),na(s)]).catch((i)=>{throw new lt(-1,`Unable to start the open command: ${i instanceof Error?i.message:String(i)}`)});if(r!==0)throw new lt(r,n.trim()||"The open command returned a non-zero exit code")}}var Ty=us();class ce extends Error{code;constructor(e,t){super(t);this.name="RepositoryServiceError",this.code=e}}class dt extends ce{constructor(e){super("file_not_found",`Changed file not found: ${e}`);this.name="FileNotFoundError"}}function ca(e){if(e==null||e.trim()==="")return null;let t=e.trim().replace(/^git@github\.com:/,"ssh://git@github.com/");try{let s=new URL(t);if(s.hostname.toLowerCase()!=="github.com")return null;let[n,r]=s.pathname.replace(/^\/+/,"").split("/"),i=r?.replace(/\.git$/,"");return n&&i?{owner:n,repository:i}:null}catch{return null}}function Qn(e,t,s=[],n=!1){return["diff",...n?["--cached"]:[],"--patch","--binary","--full-index","--no-color","--no-ext-diff","-O","/dev/null","--find-renames","--find-copies",e,...t==null?[]:[t],"--",...s]}async function fs(e){if(!e)return"";let t=[];for await(let s of e)t.push(Buffer.isBuffer(s)?s:Buffer.from(s));return Buffer.concat(t).toString("utf8")}function Zn(e){return new Promise((t,s)=>{let n=(i)=>{e.off("close",r),s(i)},r=(i)=>{e.off("error",n),t(i??1)};e.once("error",n),e.once("close",r)})}function De(e,t,s){if(e&&(t||s))throw Error("Use either a range or --from/--to, not both");if(t||s){if(!t||!s)throw Error("--from and --to must be provided together");return ct(t),ct(s),{range:`${t}..${s}`,from:t,to:s,mode:"direct"}}if(!e)return{range:"main...HEAD",from:"main",to:"HEAD",mode:"merge-base"};let n=e.indexOf("..."),r=n<0?e.indexOf(".."):-1,i=n>=0?"...":r>=0?"..":null,o=n>=0?n:r;if(!i||o<0||e.indexOf(i,o+i.length)>=0)throw Error("Range must use exactly one `A...B` or `A..B` separator");let a=e.slice(0,o),l=e.slice(o+i.length);return ct(a),ct(l),{range:e,from:a,to:l,mode:i==="..."?"merge-base":"direct"}}function ct(e){if(!e||/[\0\r\n\t ]/.test(e)||e.startsWith("-")||e.includes(".."))throw Error(`Invalid Git ref: ${e||"(empty)"}`)}function tr(e){let t,s,n,r,i,o,a=!0,l=!1,c,p,u,h=!1,y=(b,d,g)=>{let _=b.indexOf("=");if(_>=0)return[b.slice(_+1),d];let S=e[d+1];if(!S||S.startsWith("-"))throw Error(`${g} requires a value`);return[S,d+1]};for(let b=0;b<e.length;b+=1){let d=e[b];if(d==="--help"||d==="-h"){h=!0;continue}if(d==="--no-open"){a=!1;continue}if(d==="--open"){a=!0;continue}if(d==="--auth"){l=!0;continue}if(d==="--open-command"||d.startsWith("--open-command=")){[c,b]=y(d,b,"--open-command");continue}if(d==="--color-theme"||d.startsWith("--color-theme=")){[p,b]=y(d,b,"--color-theme");continue}if(d==="--exit-on-close-after"||d.startsWith("--exit-on-close-after=")){let g=d.indexOf("="),_=g>=0?d.slice(g+1):e[++b],S=Number(_);if(_===void 0||!Number.isInteger(S)||Math.abs(S)>2147483)throw Error("--exit-on-close-after must be an integer between -2147483 and 2147483 seconds");u=S;continue}if(d==="--from"||d.startsWith("--from=")){[s,b]=y(d,b,"--from");continue}if(d==="--to"||d.startsWith("--to=")){[n,b]=y(d,b,"--to");continue}if(d==="--repo"||d.startsWith("--repo=")){[r,b]=y(d,b,"--repo");continue}if(d==="--port"||d.startsWith("--port=")){let[g,_]=y(d,b,"--port"),S=Number(g);if(!Number.isInteger(S)||S<0||S>65535)throw Error("--port must be an integer between 0 and 65535");i=S,b=_;continue}if(d==="--watch-interval"||d.startsWith("--watch-interval=")){let[g,_]=y(d,b,"--watch-interval"),S=Number(g);if(!Number.isInteger(S)||S<100)throw Error("--watch-interval must be an integer of at least 100ms");o=S,b=_;continue}if(d.startsWith("-"))throw Error(`Unknown option: ${d}`);if(t){if(r)throw Error(`Unexpected argument: ${d}`);r=d}else t=d}return{range:t,from:s,to:n,repoPath:r,port:i,openBrowser:a,auth:l,openCommand:c,colorThemePath:p,watchIntervalMs:o,exitOnCloseAfterSeconds:u,help:h}}var sr=`Usage: reviewme [RANGE] [REPOSITORY]
|
|
141
141
|
|
|
142
142
|
Compare a branch with a local Git ref and open the review in your browser.
|
|
@@ -414,5 +414,5 @@ data: ${JSON.stringify(u)}
|
|
|
414
414
|
Update available: ${e} → ${r}
|
|
415
415
|
Run: npx reviewme@latest`)}catch{}}function cy(e,t){let s=/^(\d+)\.(\d+)\.(\d+)$/.exec(e),n=/^(\d+)\.(\d+)\.(\d+)$/.exec(t);if(s==null||n==null)return!1;for(let r=1;r<=3;r+=1){let i=Number(s[r])-Number(n[r]);if(i!==0)return i>0}return!1}async function qo(e=process.argv.slice(2),t={}){try{let s=tr(e);if(s.help)return console.log(sr),0;let n=ut({repoPath:s.repoPath,range:s.range,from:s.from,to:s.to,openCommand:s.openCommand,watchIntervalMs:s.watchIntervalMs}),r=s.colorThemePath==null?void 0:await Mo(s.colorThemePath),i=await br({...t,service:n,port:s.port,auth:s.auth,watchIntervalMs:s.watchIntervalMs,colorTheme:r,exitOnCloseAfterSeconds:s.exitOnCloseAfterSeconds});if(console.log(`ReviewMe: ${i.url}`),Do(jn.version),s.openBrowser)await uy(i.url);let o=()=>i.close();return process.once("SIGINT",o),process.once("SIGTERM",o),0}catch(s){return console.error(s instanceof Error?s.message:String(s)),1}}async function uy(e){let t=process.platform,s=t==="darwin"?["open",e]:t==="win32"?["cmd","/c","start","",e]:["xdg-open",e];try{let[n,...r]=s;if(!n)return;let i=dy(n,r,{stdio:"ignore",detached:!0});i.once("error",()=>{}),i.unref()}catch{}}var Fo=await qo();if(Fo!==0)process.exitCode=Fo;
|
|
416
416
|
|
|
417
|
-
//# debugId=
|
|
417
|
+
//# debugId=40AAA248C3E69CFF64756E2164756E21
|
|
418
418
|
//# sourceMappingURL=main.js.map
|