plugin-git-manager 1.2.1 → 1.2.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/client/228.7588a0707cb3694a.js +9 -0
- package/dist/client/597.1698c0124e2f95ce.js +10 -0
- package/dist/client/906.bea20db91f34f5e6.js +10 -0
- package/dist/client/index.js +10 -1
- package/dist/externalVersion.js +15 -5
- package/dist/index.js +9 -0
- package/dist/locale/en-US.json +8 -1
- package/dist/locale/vi-VN.json +8 -1
- package/dist/server/actions/git-actions.js +43 -6
- package/dist/server/actions/gitlab-api.js +9 -0
- package/dist/server/actions/poller.js +9 -0
- package/dist/server/actions/review.js +9 -0
- package/dist/server/actions/role-permissions.js +145 -0
- package/dist/server/ai-tools.js +9 -0
- package/dist/server/collections/gitCodeReviews.js +9 -0
- package/dist/server/collections/gitRepositories.js +9 -0
- package/dist/server/collections/gitReviewFlows.js +9 -0
- package/dist/server/index.js +9 -0
- package/dist/server/migrations/20260508000000-add-auto-review-flow-id.js +9 -0
- package/dist/server/plugin.js +27 -1
- package/dist/server/poller.js +9 -0
- package/dist/server/utils/gitlab-url.js +9 -0
- package/dist/server/utils/redact.js +9 -0
- package/package.json +36 -36
- package/src/client/components/GitManagerSettings.tsx +1 -11
- package/src/client/components/RepositoryPermissions.tsx +130 -0
- package/src/client/index.tsx +36 -2
- package/src/locale/en-US.json +8 -1
- package/src/locale/vi-VN.json +8 -1
- package/src/server/__tests__/smoke.test.ts +17 -0
- package/src/server/actions/git-actions.ts +430 -430
- package/src/server/actions/role-permissions.ts +128 -0
- package/src/server/plugin.ts +46 -25
- package/dist/client/187.d5545b7cc8b90bfc.js +0 -1
- package/dist/client/ai-context.d.ts +0 -8
- package/dist/client/components/AIEmployeeSelect.d.ts +0 -13
- package/dist/client/components/CommitHistory.d.ts +0 -2
- package/dist/client/components/FileExplorer.d.ts +0 -2
- package/dist/client/components/GitManagerSettings.d.ts +0 -2
- package/dist/client/components/GitOperations.d.ts +0 -2
- package/dist/client/components/LLMModelSelect.d.ts +0 -10
- package/dist/client/components/LLMServiceSelect.d.ts +0 -9
- package/dist/client/components/MarkdownView.d.ts +0 -10
- package/dist/client/components/MergeRequests.d.ts +0 -2
- package/dist/client/components/PollingStatus.d.ts +0 -2
- package/dist/client/components/RepositoryConfig.d.ts +0 -2
- package/dist/client/components/ReviewFlows.d.ts +0 -2
- package/dist/client/components/ReviewHistory.d.ts +0 -4
- package/dist/client/components/RunReviewButton.d.ts +0 -31
- package/dist/client/context/GitManagerContext.d.ts +0 -26
- package/dist/client/index.d.ts +0 -5
- package/dist/client/locale.d.ts +0 -2
- package/dist/index.d.ts +0 -2
- package/dist/server/actions/git-actions.d.ts +0 -13
- package/dist/server/actions/gitlab-api.d.ts +0 -4
- package/dist/server/actions/poller.d.ts +0 -8
- package/dist/server/actions/review.d.ts +0 -40
- package/dist/server/ai-tools.d.ts +0 -10
- package/dist/server/collections/gitCodeReviews.d.ts +0 -2
- package/dist/server/collections/gitRepositories.d.ts +0 -2
- package/dist/server/collections/gitReviewFlows.d.ts +0 -2
- package/dist/server/index.d.ts +0 -2
- package/dist/server/migrations/20260508000000-add-auto-review-flow-id.d.ts +0 -6
- package/dist/server/plugin.d.ts +0 -12
- package/dist/server/poller.d.ts +0 -30
- package/dist/server/utils/gitlab-url.d.ts +0 -21
- package/dist/server/utils/redact.d.ts +0 -13
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
"use strict";(self.webpackChunkplugin_git_manager=self.webpackChunkplugin_git_manager||[]).push([["597"],{500:function(e,t,n){n.r(t),n.d(t,{GitManagerSettings:function(){return e3}});var r=n(156),l=n.n(r),a=n(721),o=n(482),i=n(630),c=n(772),u=n(618);function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function d(e,t,n,r,l,a,o){try{var i=e[a](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,l)}function m(e){return function(){var t=this,n=arguments;return new Promise(function(r,l){var a=e.apply(t,n);function o(e){d(a,r,l,o,i,"next",e)}function i(e){d(a,r,l,o,i,"throw",e)}o(void 0)})}}function p(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}function f(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function y(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return s(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(e,t){var n,r,l,a,o={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){var c=[a,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(l=2&c[0]?r.return:c[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,c[1])).done)return l;switch(r=0,l&&(c=[2&c[0],l.value]),c[0]){case 0:case 1:l=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(l=(l=o.trys).length>0&&l[l.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!l||c[1]>l[0]&&c[1]<l[3])){o.label=c[1];break}if(6===c[0]&&o.label<l[1]){o.label=l[1],l=c;break}if(l&&o.label<l[2]){o.label=l[2],o.ops.push(c);break}l[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=l=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var g=a.Typography.Text,v=a.Input.Search,b=a.theme.useToken,E={ts:l().createElement(o.CodeOutlined,{style:{color:"#3178c6"}}),tsx:l().createElement(o.CodeOutlined,{style:{color:"#3178c6"}}),js:l().createElement(o.CodeOutlined,{style:{color:"#f7df1e"}}),jsx:l().createElement(o.CodeOutlined,{style:{color:"#f7df1e"}}),json:l().createElement(o.CodeOutlined,{style:{color:"#5b5b5b"}}),md:l().createElement(o.FileMarkdownOutlined,{style:{color:"#083fa1"}}),html:l().createElement(o.Html5Outlined,{style:{color:"#e34c26"}}),css:l().createElement(o.FileTextOutlined,{style:{color:"#563d7c"}}),py:l().createElement(o.CodeOutlined,{style:{color:"#3572A5"}}),png:l().createElement(o.FileImageOutlined,{style:{color:"#a85e32"}}),jpg:l().createElement(o.FileImageOutlined,{style:{color:"#a85e32"}}),svg:l().createElement(o.FileImageOutlined,{style:{color:"#ffb13b"}})},w=function(){var e,t,n,s=(0,u.N)(),d=b().token,w=(0,c.useAPIClient)(),S=(0,i.E)(),k=S.selectedRepo,C=S.branches,x=S.currentBranch,I=S.refreshBranches,A=y((0,r.useState)([]),2),T=A[0],O=A[1],R=y((0,r.useState)(!1),2),z=R[0],B=R[1],P=y((0,r.useState)(null),2),F=P[0],M=P[1],j=y((0,r.useState)(null),2),D=j[0],L=j[1],q=y((0,r.useState)("HEAD"),2),N=q[0],U=q[1],H=y((0,r.useState)(""),2),W=H[0],_=H[1],G=y((0,r.useState)(""),2),$=G[0],K=G[1],V=y((0,r.useState)(!1),2),J=V[0],Q=V[1],X=(0,r.useCallback)(m(function(){var e,t,n,r,a=arguments;return h(this,function(i){switch(i.label){case 0:if(e=a.length>0&&void 0!==a[0]?a[0]:"",t=a.length>1&&void 0!==a[1]?a[1]:N,!k)return[2,[]];i.label=1;case 1:return i.trys.push([1,3,,4]),[4,w.request({url:"gitManager:fileTree",params:{repositoryId:k.id,ref:t,treePath:e}})];case 2:return[2,(Array.isArray(r=(null==(n=i.sent().data)?void 0:n.data)||n||[])?r:Array.isArray(null==r?void 0:r.data)?r.data:[]).map(function(e){return{key:e.path,title:l().createElement(g,{style:{fontSize:13}},e.name,"blob"===e.type&&e.size>0&&l().createElement(g,{type:"secondary",style:{fontSize:11,marginLeft:8}},e.size>1024?"".concat((e.size/1024).toFixed(1),"KB"):"".concat(e.size,"B"))),icon:function(e,t){if("tree"!==t){var n;return E[(null==(n=e.split(".").pop())?void 0:n.toLowerCase())||""]||l().createElement(o.FileOutlined,null)}}(e.name,e.type),isLeaf:"blob"===e.type,filePath:e.path,fileType:e.type}})];case 3:return console.warn("Failed to load file tree:",i.sent()),[2,[]];case 4:return[2]}})}),[w,k,N]),Y=(0,r.useCallback)(m(function(){return h(this,function(e){switch(e.label){case 0:B(!0),e.label=1;case 1:return e.trys.push([1,,3,4]),[4,X("",N)];case 2:return O(e.sent()),[3,4];case 3:return B(!1),[7];case 4:return[2]}})}),[X,N]);(0,r.useEffect)(function(){(null==k?void 0:k.status)==="connected"?(I(),M(null),L(null)):O([])},[k]),(0,r.useEffect)(function(){x&&"HEAD"===N&&U(x)},[x]),(0,r.useEffect)(function(){(null==k?void 0:k.status)==="connected"&&Y()},[N,k]);var Z=(e=m(function(e){var t;return h(this,function(n){switch(n.label){case 0:if(e.children)return[2];return[4,X(e.filePath,N)];case 1:return t=n.sent(),O(function(n){return function e(t,n,r){return t.map(function(t){return t.key===n?f(p({},t),{children:r}):t.children?f(p({},t),{children:e(t.children,n,r)}):t})}(n,e.key,t)}),[2]}})}),function(t){return e.apply(this,arguments)}),ee=(t=m(function(e,t){var n,r,l,a;return h(this,function(e){switch(e.label){case 0:if(!(n=t.node).isLeaf)return[2];Q(!0),L(n.filePath),e.label=1;case 1:return e.trys.push([1,3,4,5]),[4,w.request({url:"gitManager:fileContent",params:{repositoryId:k.id,ref:N,filePath:n.filePath}})];case 2:return M((null==(a=(null==(l=e.sent().data)||null==(r=l.data)?void 0:r.data)||(null==l?void 0:l.data))?void 0:a.content)||""),[3,5];case 3:return e.sent(),M("// Failed to load file content"),[3,5];case 4:return Q(!1),[7];case 5:return[2]}})}),function(e,n){return t.apply(this,arguments)}),et=(0,r.useRef)();if((0,r.useEffect)(function(){return et.current=setTimeout(function(){return K(W)},300),function(){return clearTimeout(et.current)}},[W]),!k)return l().createElement(a.Empty,{description:s("No repository selected")});if("connected"!==k.status)return l().createElement(a.Empty,{description:s("Repository not cloned yet")});var en=$?function e(t,n){return t.map(function(t){if(t.children){var r=e(t.children,n);if(r.length>0)return f(p({},t),{children:r})}return(t.filePath||"").toLowerCase().includes(n)?t:null}).filter(Boolean)}(T,$.toLowerCase()):T;return l().createElement("div",{style:{display:"flex",height:"calc(100vh - 280px)",gap:0}},l().createElement("div",{style:{width:320,minWidth:280,borderRight:"1px solid ".concat(d.colorBorderSecondary),display:"flex",flexDirection:"column",background:d.colorBgContainer}},l().createElement("div",{style:{padding:"8px 12px",borderBottom:"1px solid ".concat(d.colorBorderSecondary)}},l().createElement(a.Space,{direction:"vertical",style:{width:"100%"},size:6},l().createElement(a.Select,{size:"small",style:{width:"100%"},value:N,onChange:function(e){U(e),M(null),L(null)},options:C.map(function(e){return{label:e,value:e}}),placeholder:"Branch"}),l().createElement(v,{size:"small",placeholder:"Filter files...",allowClear:!0,onChange:function(e){return _(e.target.value)}}))),l().createElement("div",{style:{flex:1,overflow:"auto",padding:"4px 0"}},z?l().createElement("div",{style:{textAlign:"center",padding:40}},l().createElement(a.Spin,null)):l().createElement(a.Tree,{showIcon:!0,treeData:en,loadData:Z,onSelect:ee,selectedKeys:D?[D]:[],style:{fontSize:13},blockNode:!0}))),l().createElement("div",{style:{flex:1,display:"flex",flexDirection:"column",background:d.colorBgLayout}},D?l().createElement(l().Fragment,null,l().createElement("div",{style:{padding:"6px 16px",borderBottom:"1px solid ".concat(d.colorBorderSecondary),background:d.colorBgContainer,display:"flex",alignItems:"center",gap:8}},l().createElement(a.Breadcrumb,{items:D.split("/").map(function(e,t,n){return{title:t===n.length-1?l().createElement(g,{strong:!0},e):e}})}),l().createElement(g,{type:"secondary",style:{marginLeft:"auto",fontSize:12}},{ts:"typescript",tsx:"typescript",js:"javascript",jsx:"javascript",json:"json",md:"markdown",html:"html",css:"css",scss:"scss",py:"python",sh:"bash",yml:"yaml",yaml:"yaml",sql:"sql",xml:"xml",java:"java",go:"go",rs:"rust",rb:"ruby"}[(null==(n=D.split(".").pop())?void 0:n.toLowerCase())||""]||"text")),l().createElement("div",{style:{flex:1,overflow:"auto"}},J?l().createElement("div",{style:{textAlign:"center",padding:40}},l().createElement(a.Spin,null)):l().createElement("pre",{style:{margin:0,padding:16,fontSize:13,lineHeight:1.6,fontFamily:"'JetBrains Mono', 'Fira Code', 'Cascadia Code', Consolas, monospace",whiteSpace:"pre-wrap",wordBreak:"break-all",background:d.colorBgContainer,minHeight:"100%"}},(F||"").split("\n").map(function(e,t){return l().createElement("div",{key:t,style:{display:"flex"}},l().createElement("span",{style:{display:"inline-block",width:50,textAlign:"right",paddingRight:16,color:d.colorTextQuaternary,userSelect:"none",flexShrink:0}},t+1),l().createElement("span",{style:{flex:1}},e||" "))})))):l().createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",height:"100%"}},l().createElement(g,{type:"secondary"},"Select a file to view its content"))))},S=n(645);function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function C(e,t,n,r,l,a,o){try{var i=e[a](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,l)}function x(e){return function(){var t=this,n=arguments;return new Promise(function(r,l){var a=e.apply(t,n);function o(e){C(a,r,l,o,i,"next",e)}function i(e){C(a,r,l,o,i,"throw",e)}o(void 0)})}}function I(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||A(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function A(e,t){if(e){if("string"==typeof e)return k(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return k(e,t)}}function T(e,t){var n,r,l,a,o={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){var c=[a,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(l=2&c[0]?r.return:c[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,c[1])).done)return l;switch(r=0,l&&(c=[2&c[0],l.value]),c[0]){case 0:case 1:l=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(l=(l=o.trys).length>0&&l[l.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!l||c[1]>l[0]&&c[1]<l[3])){o.label=c[1];break}if(6===c[0]&&o.label<l[1]){o.label=l[1],l=c;break}if(l&&o.label<l[2]){o.label=l[2],o.ops.push(c);break}l[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=l=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var O=function(e){var t,n,i,s,d=e.target,m=e.size,p=e.type,f=e.onTriggered,y=(0,u.N)(),h=(0,c.useAPIClient)(),g=(null==(i=S.useAIConfigRepository)?void 0:i.call(S))||{},v=((null==(s=S.useChatBoxActions)?void 0:s.call(S))||{}).triggerTask,b=I((0,r.useState)(!1),2),E=b[0],w=b[1],C=I((0,r.useState)([]),2),O=C[0],R=C[1],z=I((0,r.useState)(!1),2),B=z[0],P=z[1],F=I((0,r.useState)(!1),2),M=F[0],j=F[1],D=I((0,r.useState)(null),2),L=D[0],q=D[1],N=I(a.Form.useForm(),1)[0],U=(0,r.useCallback)(function(){var e=!1,t={repositoryId:d.repositoryId,targetType:d.type};return"mr"===d.type&&(t.mrIid=d.mrIid),"commit"===d.type&&(t.commitSha=d.commitSha),"branch"===d.type&&(t.branch=d.branch),h.request({url:"gitCodeReviews:list",params:{pageSize:1,sort:["-id"],filter:t}}).then(function(t){if(!e){var n;q(((null==t||null==(n=t.data)?void 0:n.data)||[])[0]||null)}}).catch(function(){}),function(){e=!0}},[h,d]);(0,r.useEffect)(function(){return U()},[U]);var H=(0,r.useCallback)(x(function(){var e,t;return T(this,function(n){switch(n.label){case 0:return[4,h.request({url:"gitReviewFlows:list",params:{pageSize:100,filter:{enabled:!0,$or:[{repositoryId:d.repositoryId},{repositoryId:null}]}}})];case 1:return R(t=(null==(e=n.sent().data)?void 0:e.data)||[]),[2,t]}})}),[h,d.repositoryId]),W=(0,r.useCallback)(function(e){var t,n=e.find(function(e){return e.repositoryId===d.repositoryId});return null!=(t=null!=n?n:e[0])?t:null},[d.repositoryId]);(0,r.useEffect)(function(){if(E){var e=!1;return H().then(function(t){if(!e){var n=W(t);(null==n?void 0:n.id)&&N.setFieldValue("flowId",n.id)}}).catch(function(){}),function(){e=!0}}},[E,H,W,N]);var _=(t=x(function(){var e,t,n,r,l,o,i,c,u,s,m;return T(this,function(p){switch(p.label){case 0:return p.trys.push([0,3,4,5]),[4,N.validateFields()];case 1:return n=p.sent(),P(!0),r={repositoryId:d.repositoryId,targetType:d.type,flowId:n.flowId,extraInstructions:n.extraInstructions||void 0},"mr"===d.type&&(r.mrIid=d.mrIid),"commit"===d.type&&(r.commitSha=d.commitSha),"branch"===d.type&&(r.branch=d.branch),[4,h.request({url:"gitManager:triggerReview",method:"post",data:r})];case 2:return o=null==(l=p.sent())||null==(t=l.data)||null==(e=t.data)?void 0:e.reviewId,a.message.success(y("Review started")),w(!1),N.resetFields(),U(),null==f||f(o),[3,5];case 3:if(null==(i=p.sent())?void 0:i.errorFields)return[2];return a.message.error((null==i||null==(m=i.response)||null==(s=m.data)||null==(u=s.errors)||null==(c=u[0])?void 0:c.message)||(null==i?void 0:i.message)||y("Failed to trigger review")),[3,5];case 4:return P(!1),[7];case 5:return[2]}})}),function(){return t.apply(this,arguments)}),G=function(){var e=d.title||K();return"mr"===d.type?{type:"git-merge-request",uid:"".concat(d.repositoryId,":").concat(d.mrIid),title:e,content:{repositoryId:d.repositoryId,mrIid:d.mrIid,title:e}}:"commit"===d.type?{type:"git-commit",uid:"".concat(d.repositoryId,":").concat(d.commitSha),title:e,content:{repositoryId:d.repositoryId,commitSha:d.commitSha,title:e}}:{type:"git-repository",uid:String(d.repositoryId),title:e,content:{repositoryId:d.repositoryId,branch:d.branch,title:e}}},$=(n=x(function(){var e,t,n,r,l,o;return T(this,function(i){switch(i.label){case 0:if(!v||!(null==g?void 0:g.getAIEmployees))return a.message.warning(y("AI plugin is not available")),[2];j(!0),i.label=1;case 1:if(i.trys.push([1,9,10,11]),!O.length)return[3,2];return t=O,[3,4];case 2:return[4,H()];case 3:t=i.sent(),i.label=4;case 4:if(!(null==(n=W(t))?void 0:n.aiEmployeeUsername))return a.message.warning(y("No matching flow available")),[2];if(!(null==(e=g.aiEmployees)?void 0:e.length))return[3,5];return r=g.aiEmployees,[3,7];case 5:return[4,g.getAIEmployees()];case 6:r=i.sent(),i.label=7;case 7:if(!(l=r.find(function(e){return e.username===n.aiEmployeeUsername})))return a.message.warning(y("AI employee not found")),[2];return[4,v({aiEmployee:l,tasks:[{title:"".concat(n.name,": ").concat(K()),message:{user:"mr"===d.type?"Please review merge request !".concat(d.mrIid," (").concat(d.title||"untitled","). Use the attached Git merge request context and the available git tools when you need more detail."):"commit"===d.type?"Please review commit ".concat(d.commitSha," (").concat(d.title||"untitled","). Use the attached Git commit context and the available git tools when you need more detail."):"Please help me inspect branch ".concat(d.branch,". Use the attached Git repository context and the available git tools when you need more detail."),system:n.instructions||void 0,workContext:[G()]},model:n.llmService&&n.model?{llmService:n.llmService,model:n.model}:null,autoSend:!1}]})];case 8:return i.sent(),[3,11];case 9:return o=i.sent(),a.message.error((null==o?void 0:o.message)||y("Failed to open AI chat")),[3,11];case 10:return j(!1),[7];case 11:return[2]}})}),function(){return n.apply(this,arguments)}),K=function(){return"mr"===d.type?"MR !".concat(d.mrIid):"commit"===d.type?"Commit ".concat(String(d.commitSha).slice(0,7)):"Branch ".concat(d.branch)},V=L&&L.headSha&&L.latestSha&&L.headSha!==L.latestSha,J=!!L&&"pending"!==L.status,Q=J?V?y("Re-review (new commits)"):y("Re-run review"):y("Code Review"),X=J?o.ReloadOutlined:o.RobotOutlined,Y=(0,r.useMemo)(function(){var e;return[{key:"run",icon:l().createElement(o.ThunderboltOutlined,null),label:J?y("Re-run automated review"):y("Run automated review"),onClick:function(){return w(!0)}}].concat(function(e){if(Array.isArray(e))return k(e)}(e=L?[{key:"view",icon:l().createElement(o.RobotOutlined,null),label:y("Status: ".concat(L.status))+" - "+y("View in Review History tab"),onClick:function(){a.message.info(y('Please switch to the "Review History" tab to see the details.'))}}]:[])||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||A(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[{key:"chat",icon:l().createElement(o.MessageOutlined,null),label:y("Ask AI Employee"),onClick:$,disabled:M}])},[J,L,M,$]);return l().createElement(l().Fragment,null,l().createElement(a.Dropdown,{menu:{items:Y},placement:"bottomRight",trigger:["click"]},l().createElement(a.Button,{size:void 0===m?"small":m,type:V?"primary":void 0===p?"default":p,icon:l().createElement(X,null),danger:!!V,loading:M},Q)),l().createElement(a.Modal,{title:l().createElement(a.Space,null,l().createElement(o.RobotOutlined,null),l().createElement("span",null,J?y("Re-run code review"):y("Run code review")),l().createElement("span",{style:{color:"#999",fontSize:12,fontWeight:400}},K())),open:E,onCancel:function(){return w(!1)},onOk:_,okText:J?y("Re-run"):y("Start Review"),confirmLoading:B,destroyOnClose:!0},J&&l().createElement(a.Alert,{type:V?"warning":"info",showIcon:!0,style:{marginBottom:12},message:V?y("New commits detected since last review. Re-running will overwrite the existing review."):y("A review already exists for this target. Re-running will overwrite it."),description:l().createElement(a.Space,{size:8,wrap:!0,style:{fontSize:12}},(null==L?void 0:L.headSha)&&l().createElement("span",null,y("Reviewed at"),":\xa0",l().createElement(a.Tag,{style:{fontFamily:"monospace"}},String(L.headSha).slice(0,7))),V&&(null==L?void 0:L.latestSha)&&l().createElement("span",null,y("Latest"),":\xa0",l().createElement(a.Tag,{color:"orange",style:{fontFamily:"monospace"}},String(L.latestSha).slice(0,7))))}),l().createElement(a.Form,{form:N,layout:"vertical"},l().createElement(a.Form.Item,{name:"flowId",label:y("Review Flow"),rules:[{required:!0,message:y("Please select a review flow")}],extra:0===O.length?l().createElement(a.Tooltip,{title:y("Create a review flow in the Review Flows tab first")},l().createElement("span",{style:{color:"#faad14"}},y("No enabled flow found for this repository"))):null},l().createElement(a.Select,{options:O.map(function(e){return{value:e.id,label:"".concat(e.name).concat(e.aiEmployeeUsername?" — @".concat(e.aiEmployeeUsername):"").concat(null==e.repositoryId?" (".concat(y("global"),")"):"")}}),placeholder:y("Select a review flow")})),l().createElement(a.Form.Item,{name:"extraInstructions",label:y("Extra instructions (optional)")},l().createElement(a.Input.TextArea,{rows:4,placeholder:y("e.g. Focus on security issues in authentication")})))))};function R(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function z(e,t,n,r,l,a,o){try{var i=e[a](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,l)}function B(e){return function(){var t=this,n=arguments;return new Promise(function(r,l){var a=e.apply(t,n);function o(e){z(a,r,l,o,i,"next",e)}function i(e){z(a,r,l,o,i,"throw",e)}o(void 0)})}}function P(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return R(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return R(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function F(e,t){var n,r,l,a,o={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){var c=[a,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(l=2&c[0]?r.return:c[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,c[1])).done)return l;switch(r=0,l&&(c=[2&c[0],l.value]),c[0]){case 0:case 1:l=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(l=(l=o.trys).length>0&&l[l.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!l||c[1]>l[0]&&c[1]<l[3])){o.label=c[1];break}if(6===c[0]&&o.label<l[1]){o.label=l[1],l=c;break}if(l&&o.label<l[2]){o.label=l[2],o.ops.push(c);break}l[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=l=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var M=a.Typography.Text,j=a.theme.useToken,D={A:{color:"green",icon:l().createElement(o.PlusCircleOutlined,null),label:"Added"},M:{color:"blue",icon:l().createElement(o.EditOutlined,null),label:"Modified"},D:{color:"red",icon:l().createElement(o.DeleteOutlined,null),label:"Deleted"},R:{color:"orange",icon:l().createElement(o.EditOutlined,null),label:"Renamed"}},L=function(){var e,t,n,s,d=(0,u.N)(),m=j().token,p=(0,c.useAPIClient)(),f=(0,i.E)(),y=f.selectedRepo,h=f.branches,g=f.currentBranch,v=P((0,r.useState)([]),2),b=v[0],E=v[1],w=P((0,r.useState)(!1),2),S=w[0],k=w[1],C=P((0,r.useState)(null),2),x=C[0],I=C[1],A=P((0,r.useState)(null),2),T=A[0],R=A[1],z=P((0,r.useState)(!1),2),L=z[0],U=z[1],H=P((0,r.useState)(null),2),W=H[0],_=H[1],G=P((0,r.useState)(null),2),$=G[0],K=G[1],V=P((0,r.useState)(""),2),J=V[0],Q=V[1],X=(0,r.useCallback)(B(function(){var e,t,n;return F(this,function(r){switch(r.label){case 0:if(!y)return[2];k(!0),r.label=1;case 1:return r.trys.push([1,3,4,5]),[4,p.request({url:"gitManager:log",params:{repositoryId:y.id,maxCount:100}})];case 2:return E((null==(n=(null==(t=r.sent().data)||null==(e=t.data)?void 0:e.data)||(null==t?void 0:t.data))?void 0:n.all)||[]),[3,5];case 3:return console.warn("Failed to load commit history:",r.sent()),E([]),[3,5];case 4:return k(!1),[7];case 5:return[2]}})}),[p,y]);(0,r.useEffect)(function(){(null==y?void 0:y.status)==="connected"?X():E([])},[y]);var Y=b.filter(function(e){var t=J.trim().toLowerCase();return!t||String(e.message||e.subject||e.body||"").toLowerCase().includes(t)}),Z=(e=B(function(e){var t,n;return F(this,function(r){switch(r.label){case 0:I(e),U(!0),_(null),K(null),r.label=1;case 1:return r.trys.push([1,3,4,5]),[4,p.request({url:"gitManager:commitDetail",params:{repositoryId:y.id,commitHash:e.hash}})];case 2:return R((null==(n=r.sent().data)||null==(t=n.data)?void 0:t.data)||(null==n?void 0:n.data)),[3,5];case 3:return r.sent(),R(null),[3,5];case 4:return U(!1),[7];case 5:return[2]}})}),function(t){return e.apply(this,arguments)}),ee=(t=B(function(e,t){var n,r;return F(this,function(l){switch(l.label){case 0:K(t),l.label=1;case 1:return l.trys.push([1,3,,4]),[4,p.request({url:"gitManager:diff",params:{repositoryId:y.id,commitHash:e,file:t}})];case 2:return _((null==(r=l.sent().data)||null==(n=r.data)?void 0:n.data)||(null==r?void 0:r.data)||""),[3,4];case 3:return l.sent(),_("// Failed to load diff"),[3,4];case 4:return[2]}})}),function(e,n){return t.apply(this,arguments)});if(!y)return l().createElement(a.Empty,{description:d("No repository selected")});if("connected"!==y.status)return l().createElement(a.Empty,{description:d("Repository not cloned yet")});var et=[{title:"",key:"graph",width:40,render:function(e,t,n){return l().createElement("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",height:"100%"}},l().createElement("div",{style:{width:10,height:10,borderRadius:"50%",background:0===n?m.colorPrimary:m.colorBorder,border:"2px solid ".concat(0===n?m.colorPrimary:m.colorBorder),zIndex:1}}))}},{title:d("Message"),dataIndex:"message",key:"message",render:function(e,t){return l().createElement("div",null,l().createElement(M,{strong:!0,style:{fontSize:13}},e),l().createElement("div",{style:{marginTop:2}},l().createElement(M,{type:"secondary",style:{fontSize:12}},l().createElement(o.UserOutlined,{style:{marginRight:4}}),t.author_name,l().createElement("span",{style:{margin:"0 8px"}},"\xb7"),l().createElement(o.ClockCircleOutlined,{style:{marginRight:4}}),N(t.date))))}},{title:"Hash",dataIndex:"hash",key:"hash",width:100,render:function(e){return l().createElement(M,{code:!0,copyable:!0,style:{fontSize:12}},null==e?void 0:e.substring(0,7))}},{title:"",key:"action",width:80,render:function(e,t){return l().createElement(a.Button,{size:"small",icon:l().createElement(o.DiffOutlined,null),onClick:function(){return Z(t)}},"Detail")}}];return l().createElement("div",null,l().createElement("div",{style:{marginBottom:12,display:"flex",alignItems:"center",gap:12}},l().createElement(o.BranchesOutlined,null),l().createElement(a.Select,{size:"small",style:{width:200},value:g,options:h.map(function(e){return{label:e,value:e}}),disabled:!0}),l().createElement(a.Input.Search,{allowClear:!0,size:"small",style:{width:280},placeholder:d("Search commit title or message"),value:J,onChange:function(e){return Q(e.target.value)}}),l().createElement(M,{type:"secondary"},Y.length," commits")),S?l().createElement(a.Spin,null):l().createElement(a.Table,{dataSource:Y,columns:et,rowKey:"hash",size:"small",pagination:{pageSize:30,showSizeChanger:!0},onRow:function(e){return{style:{cursor:"pointer"},onClick:function(){return Z(e)}}}}),l().createElement(a.Drawer,{title:x?l().createElement("div",null,l().createElement(M,{strong:!0},x.message),l().createElement("div",null,l().createElement(M,{type:"secondary",style:{fontSize:12}},null==(n=x.hash)?void 0:n.substring(0,7)," \xb7 ",x.author_name," \xb7 ",N(x.date)))):"Commit Detail",open:!!x,onClose:function(){I(null),R(null),_(null),K(null)},width:800,extra:x&&y?l().createElement(O,{target:{type:"commit",repositoryId:y.id,commitSha:x.hash,title:x.message},size:"small"}):null},L?l().createElement(a.Spin,null):T?l().createElement("div",null,l().createElement(M,{strong:!0},"Changed Files (",(null==(s=T.files)?void 0:s.length)||0,")"),l().createElement(a.List,{size:"small",style:{marginTop:8},dataSource:T.files||[],renderItem:function(e){var t=D[e.status]||D.M,n=$===e.file;return l().createElement(a.List.Item,{style:{cursor:"pointer",background:n?m.colorPrimaryBg:void 0,padding:"6px 12px",borderRadius:4},onClick:function(){return ee(x.hash,e.file)}},l().createElement(a.Space,null,l().createElement(a.Tag,{color:t.color,style:{minWidth:70,textAlign:"center"}},t.icon," ",t.label),l().createElement(M,{style:{fontSize:13}},e.file)))}}),null!==W&&l().createElement("div",{style:{marginTop:16}},l().createElement(M,{strong:!0,style:{display:"block",marginBottom:8}},l().createElement(o.FileTextOutlined,null)," ",$),l().createElement(q,{content:W}))):null))},q=(0,r.memo)(function(e){var t=e.content,n=j().token,r=t.split("\n");return l().createElement("div",{style:{fontFamily:"'JetBrains Mono', 'Fira Code', Consolas, monospace",fontSize:12,lineHeight:1.5,border:"1px solid ".concat(n.colorBorderSecondary),borderRadius:6,overflow:"auto",maxHeight:500}},r.map(function(e,t){var r="transparent",a=n.colorText;return e.startsWith("+")&&!e.startsWith("+++")?(r="rgba(46, 160, 67, 0.12)",a="#2ea043"):e.startsWith("-")&&!e.startsWith("---")?(r="rgba(248, 81, 73, 0.12)",a="#f85149"):e.startsWith("@@")?(r="rgba(56, 139, 253, 0.08)",a="#388bfd"):(e.startsWith("diff")||e.startsWith("index"))&&(a=n.colorTextSecondary),l().createElement("div",{key:t,style:{padding:"0 12px",background:r,color:a,whiteSpace:"pre",minHeight:20}},l().createElement("span",{style:{display:"inline-block",width:40,color:n.colorTextQuaternary,userSelect:"none",textAlign:"right",marginRight:12}},t+1),e)}))});function N(e){if(!e)return"";var t=new Date(e),n=new Date().getTime()-t.getTime(),r=n/36e5;return r<1?"".concat(Math.round(n/6e4),"m ago"):r<24?"".concat(Math.round(r),"h ago"):r<168?"".concat(Math.round(r/24),"d ago"):t.toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"})}function U(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function H(e,t,n,r,l,a,o){try{var i=e[a](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,l)}function W(e){return function(){var t=this,n=arguments;return new Promise(function(r,l){var a=e.apply(t,n);function o(e){H(a,r,l,o,i,"next",e)}function i(e){H(a,r,l,o,i,"throw",e)}o(void 0)})}}function _(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return U(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return U(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function G(e,t){var n,r,l,a,o={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){var c=[a,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(l=2&c[0]?r.return:c[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,c[1])).done)return l;switch(r=0,l&&(c=[2&c[0],l.value]),c[0]){case 0:case 1:l=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(l=(l=o.trys).length>0&&l[l.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!l||c[1]>l[0]&&c[1]<l[3])){o.label=c[1];break}if(6===c[0]&&o.label<l[1]){o.label=l[1],l=c;break}if(l&&o.label<l[2]){o.label=l[2],o.ops.push(c);break}l[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=l=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var $=a.Typography.Text;a.Typography.Paragraph,a.Typography.Title;var K=a.theme.useToken,V={opened:{color:"blue",icon:l().createElement(o.MergeOutlined,null),label:"Open"},merged:{color:"purple",icon:l().createElement(o.CheckCircleOutlined,null),label:"Merged"},closed:{color:"red",icon:l().createElement(o.CloseCircleOutlined,null),label:"Closed"}},J=function(){var e,t,n,s=(0,u.N)(),d=K().token,m=(0,c.useAPIClient)(),p=(0,i.E)().selectedRepo,f=_((0,r.useState)([]),2),y=f[0],h=f[1],g=_((0,r.useState)(!1),2),v=g[0],b=g[1],E=_((0,r.useState)("opened"),2),w=E[0],S=E[1],k=_((0,r.useState)(""),2),C=k[0],x=k[1],I=_((0,r.useState)({page:1,perPage:20,total:0,totalPages:0}),2),A=I[0],T=I[1],R=_((0,r.useState)(null),2),z=R[0],B=R[1],P=_((0,r.useState)(null),2),F=P[0],M=P[1],j=_((0,r.useState)(!1),2),D=j[0],L=j[1],q=_((0,r.useState)([]),2),N=q[0],U=q[1],H=_((0,r.useState)(!1),2);H[0],H[1];var J=(0,r.useCallback)(W(function(){var e,t,n,r=arguments;return G(this,function(l){switch(l.label){case 0:if(e=r.length>0&&void 0!==r[0]?r[0]:1,!p)return[2];b(!0),l.label=1;case 1:return l.trys.push([1,3,4,5]),[4,m.request({url:"gitManager:mergeRequests",params:{repositoryId:p.id,state:w,search:C||void 0,page:e,perPage:20}})];case 2:return h((null==(n=(null==(t=l.sent().data)?void 0:t.data)||t)?void 0:n.data)||[]),(null==n?void 0:n.pagination)&&T(n.pagination),[3,5];case 3:return l.sent(),h([]),[3,5];case 4:return b(!1),[7];case 5:return[2]}})}),[m,p,w,C]);(0,r.useEffect)(function(){(null==p?void 0:p.status)==="connected"?J(1):h([])},[p,w]);var X=(e=W(function(e){var t,n,r,l,a,o,i,c,u,s;return G(this,function(d){switch(d.label){case 0:B(e),L(!0),U([]),d.label=1;case 1:return d.trys.push([1,3,4,5]),[4,Promise.all([m.request({url:"gitManager:mergeRequestDetail",params:{repositoryId:p.id,mrIid:e.iid}}),m.request({url:"gitManager:mergeRequestNotes",params:{repositoryId:p.id,mrIid:e.iid}})])];case 2:return c=(i=_.apply(void 0,[d.sent(),2]))[0],u=i[1],M((null==c||null==(n=c.data)||null==(t=n.data)?void 0:t.data)||(null==c||null==(r=c.data)?void 0:r.data)),U(Array.isArray(s=(null==u||null==(a=u.data)||null==(l=a.data)?void 0:l.data)||(null==u||null==(o=u.data)?void 0:o.data))?s:[]),[3,5];case 3:return d.sent(),M(null),[3,5];case 4:return L(!1),[7];case 5:return[2]}})}),function(t){return e.apply(this,arguments)});if(!p)return l().createElement(a.Empty,{description:s("No repository selected")});if("connected"!==p.status)return l().createElement(a.Empty,{description:s("Repository not cloned yet")});var ee=[{title:"",key:"state_icon",width:40,render:function(e,t){var n=V[t.state]||V.opened;return l().createElement(a.Tooltip,{title:n.label},l().createElement("span",{style:{color:d["color".concat("blue"===n.color?"Primary":"purple"===n.color?"PurpleText":"Error")]||n.color,fontSize:16}},n.icon))}},{title:s("Title"),key:"title",render:function(e,t){var n,r;return l().createElement("div",null,l().createElement("div",{style:{display:"flex",alignItems:"center",gap:6}},t.draft&&l().createElement(a.Tag,{color:"default",style:{fontSize:11,lineHeight:"16px"}},"DRAFT"),l().createElement($,{strong:!0,style:{fontSize:13}},t.title),t.hasConflicts&&l().createElement(a.Tooltip,{title:s("Has conflicts")},l().createElement(o.ExclamationCircleOutlined,{style:{color:d.colorWarning}}))),l().createElement("div",{style:{marginTop:2}},l().createElement($,{type:"secondary",style:{fontSize:12}},"!",t.iid,l().createElement("span",{style:{margin:"0 6px"}},"\xb7"),l().createElement(o.UserOutlined,{style:{marginRight:3}}),(null==(n=t.author)?void 0:n.name)||(null==(r=t.author)?void 0:r.username)||"Unknown",l().createElement("span",{style:{margin:"0 6px"}},"\xb7"),l().createElement(o.ClockCircleOutlined,{style:{marginRight:3}}),et(t.updatedAt))))}},{title:"",key:"branches",width:250,render:function(e,t){return l().createElement("div",{style:{fontSize:12}},l().createElement(a.Tag,{color:"blue",style:{fontSize:11}},l().createElement(o.BranchesOutlined,null)," ",t.sourceBranch),l().createElement("span",{style:{margin:"0 4px",color:d.colorTextSecondary}},"→"),l().createElement(a.Tag,{color:"green",style:{fontSize:11}},l().createElement(o.BranchesOutlined,null)," ",t.targetBranch))}},{title:"",key:"labels",width:180,render:function(e,t){var n;return l().createElement(a.Space,{size:2,wrap:!0},(t.labels||[]).slice(0,3).map(function(e){return l().createElement(a.Tag,{key:e,style:{fontSize:11}},e)}),(null==(n=t.labels)?void 0:n.length)>3&&l().createElement($,{type:"secondary",style:{fontSize:11}},"+",t.labels.length-3))}},{title:"",key:"meta",width:120,render:function(e,t){var n;return l().createElement(a.Space,{size:12},t.userNotesCount>0&&l().createElement(a.Tooltip,{title:"".concat(t.userNotesCount," comments")},l().createElement(a.Badge,{count:t.userNotesCount,size:"small",color:d.colorTextSecondary},l().createElement(o.CommentOutlined,{style:{fontSize:14,color:d.colorTextSecondary}}))),(null==(n=t.assignees)?void 0:n.length)>0&&l().createElement(a.Avatar.Group,{size:"small",max:{count:2}},t.assignees.map(function(e){var t;return l().createElement(a.Tooltip,{key:e.username,title:e.name},l().createElement(a.Avatar,{size:"small",src:e.avatarUrl},null==(t=e.name)?void 0:t[0]))})))}},{title:"",key:"actions",width:160,render:function(e,t){return l().createElement(a.Space,{onClick:function(e){return e.stopPropagation()}},l().createElement(O,{target:{type:"mr",repositoryId:p.id,mrIid:t.iid,title:t.title},size:"small"}),l().createElement(a.Tooltip,{title:s("View Details")},l().createElement(a.Button,{size:"small",icon:l().createElement(o.FileTextOutlined,null),onClick:function(e){e.stopPropagation(),X(t)}})),l().createElement(a.Tooltip,{title:s("Open in GitLab")},l().createElement(a.Button,{size:"small",icon:l().createElement(o.ExportOutlined,null),onClick:function(e){e.stopPropagation(),window.open(t.webUrl,"_blank")}})))}}];return l().createElement("div",null,l().createElement("div",{style:{marginBottom:12,display:"flex",alignItems:"center",gap:12,flexWrap:"wrap"}},l().createElement(a.Select,{size:"small",style:{width:140},value:w,onChange:function(e){return S(e)},options:[{label:"\uD83D\uDFE2 ".concat(s("Open")),value:"opened"},{label:"\uD83D\uDFE3 ".concat(s("Merged")),value:"merged"},{label:"\uD83D\uDD34 ".concat(s("Closed")),value:"closed"},{label:"\uD83D\uDCCB ".concat(s("All")),value:"all"}]}),l().createElement(a.Input.Search,{size:"small",style:{width:260},placeholder:s("Search merge requests..."),value:C,onChange:function(e){return x(e.target.value)},onSearch:function(){J(1)},allowClear:!0}),l().createElement(a.Button,{size:"small",icon:l().createElement(o.ReloadOutlined,null),onClick:function(){return J(1)}},s("Refresh")),l().createElement($,{type:"secondary",style:{fontSize:12}},null!=A.total?"".concat(A.total," ").concat(s("total")):"")),v?l().createElement(a.Spin,null):l().createElement(a.Table,{dataSource:y,columns:ee,rowKey:"iid",size:"small",pagination:{current:A.page,pageSize:A.perPage,total:A.total||void 0,onChange:function(e){return J(e)},showSizeChanger:!1},onRow:function(e){return{style:{cursor:"pointer"},onClick:function(){return X(e)}}}}),l().createElement(a.Drawer,{title:z?l().createElement("div",null,l().createElement("div",{style:{display:"flex",alignItems:"center",gap:8}},(t=V[z.state]||V.opened,l().createElement(a.Tag,{color:t.color},t.icon," ",t.label)),z.draft&&l().createElement(a.Tag,null,"DRAFT"),l().createElement($,{strong:!0,style:{fontSize:15}},"!",z.iid)),l().createElement($,{strong:!0,style:{fontSize:16,display:"block",marginTop:4}},z.title)):s("Merge Request"),open:!!z,onClose:function(){B(null),M(null),U([])},width:900,extra:z&&l().createElement(a.Space,null,l().createElement(O,{target:{type:"mr",repositoryId:p.id,mrIid:z.iid,title:z.title},size:"small"}),l().createElement(a.Button,{type:"link",icon:l().createElement(o.ExportOutlined,null),onClick:function(){return window.open(z.webUrl,"_blank")}},s("Open in GitLab")))},D?l().createElement(a.Spin,null):F?l().createElement(a.Tabs,{defaultActiveKey:"overview",items:[{key:"overview",label:s("Overview"),children:l().createElement(Q,{mr:F})},{key:"changes",label:"".concat(s("Changes")," (").concat((null==(n=F.changes)?void 0:n.length)||0,")"),children:l().createElement(Y,{changes:F.changes||[]})},{key:"comments",label:l().createElement(a.Badge,{count:N.length,size:"small",offset:[6,0]},s("Comments")),children:l().createElement(Z,{notes:N})}]}):null))},Q=function(e){var t,n,r,i,c=e.mr,s=(0,u.N)(),d=K().token;return l().createElement("div",null,l().createElement("div",{style:{padding:"12px 16px",background:d.colorBgLayout,borderRadius:8,marginBottom:16,display:"flex",alignItems:"center",gap:8}},l().createElement(a.Tag,{color:"blue"},l().createElement(o.BranchesOutlined,null)," ",c.sourceBranch),l().createElement("span",{style:{color:d.colorTextSecondary,fontSize:16}},"→"),l().createElement(a.Tag,{color:"green"},l().createElement(o.BranchesOutlined,null)," ",c.targetBranch),c.hasConflicts&&l().createElement(a.Tag,{color:"warning",icon:l().createElement(o.ExclamationCircleOutlined,null)},s("Has conflicts"))),c.description&&l().createElement("div",{style:{marginBottom:16}},l().createElement($,{strong:!0},s("Description")),l().createElement("div",{style:{marginTop:8,padding:"12px 16px",background:d.colorBgLayout,borderRadius:8,whiteSpace:"pre-wrap",wordBreak:"break-word",fontSize:13,lineHeight:1.6}},c.description)),l().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"12px 24px",fontSize:13}},l().createElement(X,{label:s("Author"),value:c.author&&l().createElement(a.Space,{size:6},l().createElement(a.Avatar,{size:"small",src:c.author.avatarUrl},null==(t=c.author.name)?void 0:t[0]),l().createElement($,null,c.author.name),l().createElement($,{type:"secondary"},"@",c.author.username))}),l().createElement(X,{label:s("Assignees"),value:(null==(n=c.assignees)?void 0:n.length)>0?l().createElement(a.Space,{size:4,wrap:!0},c.assignees.map(function(e){var t;return l().createElement(a.Tooltip,{key:e.username,title:e.name},l().createElement(a.Tag,{icon:l().createElement(a.Avatar,{size:14,src:e.avatarUrl},null==(t=e.name)?void 0:t[0])},e.name))})):l().createElement($,{type:"secondary"},"—")}),l().createElement(X,{label:s("Reviewers"),value:(null==(r=c.reviewers)?void 0:r.length)>0?l().createElement(a.Space,{size:4,wrap:!0},c.reviewers.map(function(e){return l().createElement(a.Tag,{key:e.username},e.name)})):l().createElement($,{type:"secondary"},"—")}),l().createElement(X,{label:s("Labels"),value:(null==(i=c.labels)?void 0:i.length)>0?l().createElement(a.Space,{size:4,wrap:!0},c.labels.map(function(e){return l().createElement(a.Tag,{key:e},e)})):l().createElement($,{type:"secondary"},"—")}),l().createElement(X,{label:s("Created"),value:l().createElement($,null,en(c.createdAt))}),l().createElement(X,{label:s("Updated"),value:l().createElement($,null,en(c.updatedAt))}),c.mergedBy&&l().createElement(X,{label:s("Merged by"),value:l().createElement($,null,c.mergedBy.name," — ",en(c.mergedAt))}),c.closedBy&&l().createElement(X,{label:s("Closed by"),value:l().createElement($,null,c.closedBy.name," — ",en(c.closedAt))})))},X=function(e){var t=e.label,n=e.value;return l().createElement("div",null,l().createElement($,{type:"secondary",style:{fontSize:12,display:"block",marginBottom:2}},t),l().createElement("div",null,n))},Y=function(e){var t=e.changes,n=K().token,o=(0,u.N)(),i=_((0,r.useState)(null),2),c=i[0],s=i[1];return t.length?l().createElement("div",null,t.map(function(e,t){var r=e.newPath||e.oldPath,o=c===r,i=null;return i=e.newFile?l().createElement(a.Tag,{color:"green"},"NEW"):e.deletedFile?l().createElement(a.Tag,{color:"red"},"DEL"):e.renamedFile?l().createElement(a.Tag,{color:"orange"},"RENAMED"):l().createElement(a.Tag,{color:"blue"},"MOD"),l().createElement("div",{key:t,style:{marginBottom:8}},l().createElement("div",{style:{padding:"6px 12px",background:o?n.colorPrimaryBg:n.colorBgLayout,borderRadius:6,cursor:"pointer",display:"flex",alignItems:"center",gap:8},onClick:function(){return s(o?null:r)}},i,l().createElement($,{style:{fontSize:13,fontFamily:"monospace"}},r),e.renamedFile&&e.oldPath!==e.newPath&&l().createElement($,{type:"secondary",style:{fontSize:11}},"(← ",e.oldPath,")")),o&&e.diff&&l().createElement(ee,{content:e.diff}))})):l().createElement(a.Empty,{description:o("No changes")})},Z=function(e){var t=e.notes,n=K().token,r=(0,u.N)();return t.length?l().createElement("div",null,t.map(function(e){var t,o,i,c,u;return l().createElement("div",{key:e.id,style:{padding:"12px 16px",marginBottom:12,background:n.colorBgLayout,borderRadius:8,borderLeft:"3px solid ".concat(e.resolved?n.colorSuccess:n.colorBorderSecondary)}},l().createElement("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:8}},l().createElement(a.Avatar,{size:"small",src:null==(t=e.author)?void 0:t.avatarUrl},null==(i=e.author)||null==(o=i.name)?void 0:o[0]),l().createElement($,{strong:!0,style:{fontSize:13}},null==(c=e.author)?void 0:c.name),l().createElement($,{type:"secondary",style:{fontSize:12}},"@",null==(u=e.author)?void 0:u.username),l().createElement($,{type:"secondary",style:{fontSize:11,marginLeft:"auto"}},et(e.createdAt)),e.resolvable&&l().createElement(a.Tag,{color:e.resolved?"success":"default",style:{fontSize:11}},e.resolved?r("Resolved"):r("Unresolved"))),l().createElement("div",{style:{whiteSpace:"pre-wrap",wordBreak:"break-word",fontSize:13,lineHeight:1.6}},e.body))})):l().createElement(a.Empty,{description:r("No comments")})},ee=(0,r.memo)(function(e){var t=e.content,n=K().token,r=t.split("\n");return l().createElement("div",{style:{fontFamily:"'JetBrains Mono', 'Fira Code', Consolas, monospace",fontSize:12,lineHeight:1.5,border:"1px solid ".concat(n.colorBorderSecondary),borderRadius:6,overflow:"auto",maxHeight:400,margin:"4px 0"}},r.map(function(e,t){var r="transparent",a=n.colorText;return e.startsWith("+")&&!e.startsWith("+++")?(r="rgba(46, 160, 67, 0.12)",a="#2ea043"):e.startsWith("-")&&!e.startsWith("---")?(r="rgba(248, 81, 73, 0.12)",a="#f85149"):e.startsWith("@@")?(r="rgba(56, 139, 253, 0.08)",a="#388bfd"):(e.startsWith("diff")||e.startsWith("index"))&&(a=n.colorTextSecondary),l().createElement("div",{key:t,style:{padding:"0 12px",background:r,color:a,whiteSpace:"pre",minHeight:20}},l().createElement("span",{style:{display:"inline-block",width:40,color:n.colorTextQuaternary,userSelect:"none",textAlign:"right",marginRight:12}},t+1),e)}))});function et(e){if(!e)return"";var t=new Date(e),n=new Date().getTime()-t.getTime(),r=n/36e5;return r<1?"".concat(Math.round(n/6e4),"m ago"):r<24?"".concat(Math.round(r),"h ago"):r<168?"".concat(Math.round(r/24),"d ago"):t.toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"})}function en(e){return e?new Date(e).toLocaleString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):""}function er(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function el(e,t,n,r,l,a,o){try{var i=e[a](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,l)}function ea(e){return function(){var t=this,n=arguments;return new Promise(function(r,l){var a=e.apply(t,n);function o(e){el(a,r,l,o,i,"next",e)}function i(e){el(a,r,l,o,i,"throw",e)}o(void 0)})}}function eo(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||ec(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ei(e){return function(e){if(Array.isArray(e))return er(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||ec(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ec(e,t){if(e){if("string"==typeof e)return er(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return er(e,t)}}function eu(e,t){var n,r,l,a,o={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){var c=[a,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(l=2&c[0]?r.return:c[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,c[1])).done)return l;switch(r=0,l&&(c=[2&c[0],l.value]),c[0]){case 0:case 1:l=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(l=(l=o.trys).length>0&&l[l.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!l||c[1]>l[0]&&c[1]<l[3])){o.label=c[1];break}if(6===c[0]&&o.label<l[1]){o.label=l[1],l=c;break}if(l&&o.label<l[2]){o.label=l[2],o.ops.push(c);break}l[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=l=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var es=a.Typography.Text,ed=a.theme.useToken,em={not_added:{color:"green",icon:l().createElement(o.FileAddOutlined,null),label:"New"},modified:{color:"blue",icon:l().createElement(o.EditOutlined,null),label:"Modified"},deleted:{color:"red",icon:l().createElement(o.DeleteOutlined,null),label:"Deleted"},renamed:{color:"orange",icon:l().createElement(o.EditOutlined,null),label:"Renamed"},conflicted:{color:"red",icon:l().createElement(o.WarningOutlined,null),label:"Conflict"},created:{color:"green",icon:l().createElement(o.FileAddOutlined,null),label:"Created"}},ep=function(){var e,t,n,s,d,m,p,f=(0,u.N)(),y=ed().token,h=(0,c.useAPIClient)(),g=(0,i.E)(),v=g.selectedRepo,b=g.refreshRepos,E=eo((0,r.useState)(null),2),w=E[0],S=E[1],k=eo((0,r.useState)(null),2),C=k[0],x=k[1],I=eo((0,r.useState)(null),2),A=I[0],T=I[1],O=(0,r.useCallback)(ea(function(){var e,t;return eu(this,function(n){switch(n.label){case 0:if(!v||"connected"!==v.status)return x(null),[2];S("status"),n.label=1;case 1:return n.trys.push([1,3,4,5]),[4,h.request({url:"gitManager:status",method:"post",params:{repositoryId:v.id}})];case 2:return x((null==(t=n.sent().data)||null==(e=t.data)?void 0:e.data)||(null==t?void 0:t.data)),[3,5];case 3:return console.warn("Failed to load git status:",n.sent()),x(null),[3,5];case 4:return S(null),[7];case 5:return[2]}})}),[h,v]);(0,r.useEffect)(function(){O()},[O]);var R=(0,r.useCallback)((e=ea(function(e){var t,n,r,l,o,i,c,u,s;return eu(this,function(d){switch(d.label){case 0:if(!v)return[2];S(e),T(null),d.label=1;case 1:return d.trys.push([1,6,7,8]),[4,h.request({url:"gitManager:".concat(e),method:"post",params:{repositoryId:v.id}})];case 2:if(n=d.sent().data,T({action:e,success:!0,message:f("{{action}} completed successfully",{action:e})}),a.message.success(f("{{action}} completed",{action:e})),r=(null==n||null==(t=n.data)?void 0:t.data)||(null==n?void 0:n.data),"status"===e&&x(r),"fetch"!==e&&"pull"!==e)return[3,4];return[4,O()];case 3:d.sent(),d.label=4;case 4:return[4,b()];case 5:return d.sent(),[3,8];case 6:return s=(null==(l=d.sent())||null==(u=l.response)||null==(c=u.data)||null==(i=c.errors)||null==(o=i[0])?void 0:o.message)||f("{{action}} failed",{action:e}),T({action:e,success:!1,message:s}),a.message.error(s),[3,8];case 7:return S(null),[7];case 8:return[2]}})}),function(t){return e.apply(this,arguments)}),[h,v,b,O]);if(!v)return l().createElement(a.Empty,{description:f("No repository selected")});if("connected"!==v.status)return l().createElement(a.Empty,{description:f("Repository not cloned yet")});var z=C?ei((null==(t=C.not_added)?void 0:t.map(function(e){return{file:e,status:"not_added"}}))||[]).concat(ei((null==(n=C.modified)?void 0:n.map(function(e){return{file:e,status:"modified"}}))||[]),ei((null==(s=C.deleted)?void 0:s.map(function(e){return{file:e,status:"deleted"}}))||[]),ei((null==(d=C.renamed)?void 0:d.map(function(e){return{file:"string"==typeof e?e:e.to,status:"renamed"}}))||[]),ei((null==(m=C.conflicted)?void 0:m.map(function(e){return{file:e,status:"conflicted"}}))||[]),ei((null==(p=C.created)?void 0:p.map(function(e){return{file:e,status:"created"}}))||[])):[];return l().createElement("div",null,l().createElement(a.Space,{size:"middle",wrap:!0,style:{marginBottom:24}},l().createElement(a.Button,{size:"large",icon:l().createElement(o.SyncOutlined,null),loading:"fetch"===w,onClick:function(){return R("fetch")}},f("Fetch")),l().createElement(a.Button,{size:"large",type:"primary",icon:l().createElement(o.CloudDownloadOutlined,null),loading:"pull"===w,onClick:function(){return R("pull")}},f("Pull")),l().createElement(a.Button,{size:"large",icon:l().createElement(o.BranchesOutlined,null),loading:"status"===w,onClick:O},f("Status"))),A&&l().createElement(a.Card,{size:"small",style:{marginBottom:16,borderColor:A.success?y.colorSuccessBorder:y.colorErrorBorder}},l().createElement(a.Space,null,A.success?l().createElement(o.CheckCircleOutlined,{style:{color:y.colorSuccess}}):l().createElement(o.WarningOutlined,{style:{color:y.colorError}}),l().createElement(es,{strong:!0},A.action),l().createElement(es,null,A.message))),C&&l().createElement(a.Card,{title:f("Working Directory Status"),size:"small"},l().createElement(a.Descriptions,{column:3,size:"small",style:{marginBottom:16}},l().createElement(a.Descriptions.Item,{label:"Branch"},l().createElement(a.Tag,{icon:l().createElement(o.BranchesOutlined,null),color:"blue"},C.current)),l().createElement(a.Descriptions.Item,{label:"Tracking"},l().createElement(es,null,C.tracking||"N/A")),l().createElement(a.Descriptions.Item,{label:"Changes"},l().createElement(a.Space,null,C.ahead>0&&l().createElement(a.Badge,{count:"".concat(C.ahead," ahead"),style:{backgroundColor:y.colorPrimary}}),C.behind>0&&l().createElement(a.Badge,{count:"".concat(C.behind," behind"),style:{backgroundColor:y.colorWarning}}),0===C.ahead&&0===C.behind&&l().createElement(a.Tag,{color:"green",icon:l().createElement(o.CheckCircleOutlined,null)},"Up to date")))),z.length>0?l().createElement(l().Fragment,null,l().createElement(es,{strong:!0,style:{display:"block",marginBottom:8}},z.length," changed file(s)"),l().createElement(a.List,{size:"small",dataSource:z,renderItem:function(e){var t=em[e.status]||{color:"default",icon:l().createElement(o.QuestionCircleOutlined,null),label:e.status};return l().createElement(a.List.Item,{style:{padding:"4px 0"}},l().createElement(a.Space,null,l().createElement(a.Tag,{color:t.color,style:{minWidth:80,textAlign:"center"}},t.icon," ",t.label),l().createElement(es,{code:!0,style:{fontSize:13}},e.file)))}})):l().createElement(es,{type:"secondary"},"Working directory clean")))};function ef(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function ey(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ef(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ef(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var eh=function(e){var t=e.value,n=e.onChange,o=e.allowClear,i=e.size,u=e.style,s=e.placeholder,d=(0,c.useAPIClient)(),m=ey((0,r.useState)([]),2),p=m[0],f=m[1],y=ey((0,r.useState)(!1),2),h=y[0],g=y[1];return(0,r.useEffect)(function(){var e=!1;return g(!0),d.request({url:"aiEmployees:listByUser"}).then(function(t){if(!e){var n,r=(null==t||null==(n=t.data)?void 0:n.data)||[];f(Array.isArray(r)?r:[])}}).catch(function(){}).finally(function(){e||g(!1)}),function(){e=!0}},[d]),l().createElement(a.Select,{value:t,onChange:n,allowClear:void 0===o||o,loading:h,size:i,style:u,placeholder:s||"Select AI employee",options:p.map(function(e){return{value:e.username,label:"".concat(e.nickname||e.username," (@").concat(e.username,")")}}),showSearch:!0,optionFilterProp:"label"})};function eg(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function ev(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eg(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return eg(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var eb=function(e){var t=e.value,n=e.onChange,o=e.allowClear,i=e.size,u=e.style,s=e.placeholder,d=(0,c.useAPIClient)(),m=ev((0,r.useState)([]),2),p=m[0],f=m[1],y=ev((0,r.useState)(!1),2),h=y[0],g=y[1];return(0,r.useEffect)(function(){var e=!1;return g(!0),d.request({url:"ai:listAllEnabledModels"}).then(function(t){if(!e){var n,r=(null==t||null==(n=t.data)?void 0:n.data)||[];f(Array.isArray(r)?r:[])}}).catch(function(){}).finally(function(){e||g(!1)}),function(){e=!0}},[d]),l().createElement(a.Select,{value:t,onChange:n,allowClear:void 0===o||o,loading:h,size:i,style:u,placeholder:s||"Select LLM Service",options:p.map(function(e){return{value:e.llmService,label:e.llmServiceTitle||e.llmService}}),showSearch:!0,optionFilterProp:"label"})};function eE(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function ew(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eE(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return eE(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var eS=function(e){var t=e.llmService,n=e.value,o=e.onChange,i=e.allowClear,u=e.size,s=e.style,d=e.placeholder,m=(0,c.useAPIClient)(),p=ew((0,r.useState)([]),2),f=p[0],y=p[1],h=ew((0,r.useState)(!1),2),g=h[0],v=h[1];return(0,r.useEffect)(function(){var e=!1;return t?(v(!0),m.request({url:"ai:listModels",params:{llmService:t}}).then(function(t){if(!e){var n,r=(null==t||null==(n=t.data)?void 0:n.data)||[];y(Array.isArray(r)?r:[])}}).catch(function(){e||y([])}).finally(function(){e||v(!1)}),function(){e=!0}):void y([])},[m,t]),l().createElement(a.Select,{value:n,onChange:o,allowClear:void 0===i||i,loading:g,size:u,style:s,placeholder:d||"Select LLM Model",options:f.map(function(e){return{value:e.id,label:e.id}}),showSearch:!0,optionFilterProp:"label",disabled:!t})};function ek(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eC(e,t,n,r,l,a,o){try{var i=e[a](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,l)}function ex(e){return function(){var t=this,n=arguments;return new Promise(function(r,l){var a=e.apply(t,n);function o(e){eC(a,r,l,o,i,"next",e)}function i(e){eC(a,r,l,o,i,"throw",e)}o(void 0)})}}function eI(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ek(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ek(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function eA(e,t){var n,r,l,a,o={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){var c=[a,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(l=2&c[0]?r.return:c[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,c[1])).done)return l;switch(r=0,l&&(c=[2&c[0],l.value]),c[0]){case 0:case 1:l=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(l=(l=o.trys).length>0&&l[l.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!l||c[1]>l[0]&&c[1]<l[3])){o.label=c[1];break}if(6===c[0]&&o.label<l[1]){o.label=l[1],l=c;break}if(l&&o.label<l[2]){o.label=l[2],o.ops.push(c);break}l[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=l=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var eT={manual:"Manual",onMergeRequestCreated:"On MR Created",both:"Both"},eO={auto:"Auto",manual:"Manual",disabled:"Disabled"},eR=function(){var e,t,n=(0,u.N)(),s=(0,c.useAPIClient)(),d=(0,i.E)().repos,m=eI((0,r.useState)([]),2),p=m[0],f=m[1],y=eI((0,r.useState)(!1),2),h=y[0],g=y[1],v=eI((0,r.useState)(null),2),b=v[0],E=v[1],w=eI((0,r.useState)(!1),2),S=w[0],k=w[1],C=eI(a.Form.useForm(),1)[0],x=(0,r.useCallback)(ex(function(){var e;return eA(this,function(t){switch(t.label){case 0:g(!0),t.label=1;case 1:return t.trys.push([1,,3,4]),[4,s.request({url:"gitReviewFlows:list",params:{pageSize:100}})];case 2:return f((null==(e=t.sent().data)?void 0:e.data)||[]),[3,4];case 3:return g(!1),[7];case 4:return[2]}})}),[s]);(0,r.useEffect)(function(){x()},[x]);var I=(e=ex(function(){var e,t,r,l,o,i;return eA(this,function(c){switch(c.label){case 0:return c.trys.push([0,6,,7]),[4,C.validateFields()];case 1:if((void 0===(e=c.sent()).repositoryId||""===e.repositoryId)&&(e.repositoryId=null),!(null==b?void 0:b.id))return[3,3];return[4,s.request({url:"gitReviewFlows:update",method:"post",params:{filterByTk:b.id},data:e})];case 2:return c.sent(),a.message.success(n("Flow updated")),[3,5];case 3:return[4,s.request({url:"gitReviewFlows:create",method:"post",data:e})];case 4:c.sent(),a.message.success(n("Flow created")),c.label=5;case 5:return k(!1),E(null),C.resetFields(),x(),[3,7];case 6:if(null==(t=c.sent())?void 0:t.errorFields)return[2];return a.message.error((null==t||null==(i=t.response)||null==(o=i.data)||null==(l=o.errors)||null==(r=l[0])?void 0:r.message)||(null==t?void 0:t.message)||n("Failed to save")),[3,7];case 7:return[2]}})}),function(){return e.apply(this,arguments)}),A=(t=ex(function(e){var t;return eA(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,s.request({url:"gitReviewFlows:destroy",method:"post",params:{filterByTk:e}})];case 1:return r.sent(),a.message.success(n("Flow deleted")),x(),[3,3];case 2:return t=r.sent(),a.message.error((null==t?void 0:t.message)||n("Failed to delete")),[3,3];case 3:return[2]}})}),function(e){return t.apply(this,arguments)}),T=function(e){E(e),C.setFieldsValue(e),k(!0)},O=[{title:n("Name"),dataIndex:"name",render:function(e,t){return l().createElement(a.Space,null,l().createElement("span",{style:{fontWeight:500}},e),!t.enabled&&l().createElement(a.Tag,{color:"default"},n("Disabled")))}},{title:n("Repository"),dataIndex:"repositoryId",render:function(e){if(null==e)return l().createElement(a.Tag,{color:"purple"},n("Global"));var t=d.find(function(t){return t.id===e});return t?l().createElement(a.Space,{size:4},l().createElement(o.BranchesOutlined,null),t.name):"#".concat(e)}},{title:n("AI Employee"),dataIndex:"aiEmployeeUsername",render:function(e){return e?l().createElement(a.Tag,{color:"blue"},"@",e):l().createElement("span",{style:{color:"#999"}},"—")}},{title:n("Trigger"),dataIndex:"triggerMode",render:function(e){return l().createElement(a.Tag,null,n(eT[e]||e))}},{title:n("Post"),dataIndex:"postMode",render:function(e){return l().createElement(a.Tag,{color:"auto"===e?"green":"manual"===e?"orange":"default"},n(eO[e]||e))}},{title:"",key:"actions",width:100,render:function(e,t){return l().createElement(a.Space,null,l().createElement(a.Tooltip,{title:n("Edit")},l().createElement(a.Button,{size:"small",icon:l().createElement(o.EditOutlined,null),onClick:function(){return T(t)}})),l().createElement(a.Popconfirm,{title:n("Delete this flow?"),onConfirm:function(){return A(t.id)}},l().createElement(a.Button,{size:"small",danger:!0,icon:l().createElement(o.DeleteOutlined,null)})))}}];return l().createElement("div",null,l().createElement("div",{style:{marginBottom:12,display:"flex",justifyContent:"space-between"}},l().createElement(a.Button,{type:"primary",icon:l().createElement(o.PlusOutlined,null),onClick:function(){E(null),C.resetFields(),C.setFieldsValue({enabled:!0,triggerMode:"manual",postMode:"manual",instructions:"Please review the code changes with a focus on:\n1. Best Practices & Style:\n - C#/VB.NET: Follow standard naming conventions (PascalCase for methods/properties, camelCase for fields). Ensure proper use of async/await (avoid .Result/.Wait()). Use LINQ efficiently.\n - JS/TS: Use strict equality (===), prefer const/let. Ensure TypeScript types are explicit and avoid 'any'.\n2. Performance: Watch out for N+1 queries, unnecessary loops, and memory leaks.\n3. Security: Identify potential SQL injections, XSS vulnerabilities, and improper data validation.\n4. Maintainability: Check for readability, SOLID principles, and DRY. Ensure meaningful naming.\n5. Error Handling: Verify that exceptions are properly caught, handled, and logged."}),k(!0)}},n("Add Review Flow")),l().createElement(a.Button,{onClick:x,loading:h},n("Refresh"))),l().createElement(a.Table,{size:"small",rowKey:"id",loading:h,dataSource:p,columns:O,locale:{emptyText:l().createElement(a.Empty,{description:n("No review flows yet")})},pagination:{pageSize:20}}),l().createElement(a.Modal,{title:(null==b?void 0:b.id)?n("Edit Review Flow"):n("Add Review Flow"),open:S,onCancel:function(){k(!1),E(null),C.resetFields()},onOk:I,width:640,destroyOnClose:!0},l().createElement(a.Form,{form:C,layout:"vertical"},l().createElement(a.Form.Item,{name:"name",label:n("Name"),rules:[{required:!0}]},l().createElement(a.Input,{placeholder:n("e.g. Default review flow")})),l().createElement(a.Form.Item,{name:"repositoryId",label:n("Repository"),extra:n("Leave empty to apply to all repositories")},l().createElement(a.Select,{allowClear:!0,placeholder:n("All repositories (global)"),options:d.map(function(e){return{value:e.id,label:e.name}})})),l().createElement(a.Form.Item,{name:"aiEmployeeUsername",label:n("AI Employee"),rules:[{required:!0}]},l().createElement(eh,{placeholder:n("Select an AI employee")})),l().createElement(a.Space.Compact,{style:{width:"100%"}},l().createElement(a.Form.Item,{name:"llmService",label:n("LLM Service (optional)"),style:{flex:1,marginRight:8}},l().createElement(eb,{placeholder:n("Override flow LLM service")})),l().createElement(a.Form.Item,{noStyle:!0,shouldUpdate:function(e,t){return e.llmService!==t.llmService}},function(e){var t=(0,e.getFieldValue)("llmService");return l().createElement(a.Form.Item,{name:"model",label:n("Model (optional)"),style:{flex:1}},t?l().createElement(eS,{llmService:t,placeholder:n("Override LLM model")}):l().createElement(a.Input,{placeholder:n("Select an LLM service first"),disabled:!0}))})),l().createElement(a.Form.Item,{name:"triggerMode",label:n("Trigger Mode"),rules:[{required:!0}],extra:n("Auto modes require enabling Auto Review on the repository")},l().createElement(a.Select,{options:[{value:"manual",label:n("Manual")},{value:"onMergeRequestCreated",label:n("On Merge Request Created")},{value:"both",label:n("Both")}]})),l().createElement(a.Form.Item,{name:"postMode",label:n("Post Mode"),rules:[{required:!0}]},l().createElement(a.Select,{options:[{value:"auto",label:n("Auto post to MR")},{value:"manual",label:n("Manual approval before posting")},{value:"disabled",label:n("Do not post")}]})),l().createElement(a.Form.Item,{name:"branchFilter",label:n("Branch Filter (regex, optional)")},l().createElement(a.Input,{placeholder:"^(feature|hotfix)/.*$"})),l().createElement(a.Form.Item,{name:"instructions",label:n("Additional Instructions (optional)")},l().createElement(a.Input.TextArea,{rows:8,placeholder:n("Extra guidance appended to every review prompt")})),l().createElement(a.Form.Item,{name:"enabled",label:n("Enabled"),valuePropName:"checked"},l().createElement(a.Switch,null)))))},ez=n(457),eB=a.theme.useToken,eP=function(e){var t=e.content,n=e.maxHeight,r=eB().token;return t?l().createElement("div",{style:{fontSize:13,lineHeight:1.65,color:r.colorText,maxHeight:n,overflow:n?"auto":void 0}},l().createElement(ez.UG,{components:{code:function(e){var t,n,a=e.inline,o=e.children,i=function(e,t){if(null==e)return{};var n,r,l=function(e,t){if(null==e)return{};var n,r,l={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}(e,["inline","children"]),c=String(o).replace(/\n$/,"");return a?l().createElement("code",(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({},i),n=n={style:{background:r.colorBgLayout,padding:"1px 6px",borderRadius:4,fontSize:12,fontFamily:"'JetBrains Mono', 'Fira Code', Consolas, monospace"}},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t),c):l().createElement("pre",{style:{background:r.colorBgLayout,padding:"10px 14px",borderRadius:6,overflowX:"auto",fontSize:12,fontFamily:"'JetBrains Mono', 'Fira Code', Consolas, monospace"}},l().createElement("code",null,c))},blockquote:function(e){var t=e.children;return l().createElement("blockquote",{style:{borderLeft:"3px solid ".concat(r.colorBorder),paddingLeft:12,color:r.colorTextSecondary,margin:"8px 0"}},t)}}},t)):null};function eF(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eM(e,t,n,r,l,a,o){try{var i=e[a](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,l)}function ej(e){return function(){var t=this,n=arguments;return new Promise(function(r,l){var a=e.apply(t,n);function o(e){eM(a,r,l,o,i,"next",e)}function i(e){eM(a,r,l,o,i,"throw",e)}o(void 0)})}}function eD(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return eF(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return eF(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function eL(e,t){var n,r,l,a,o={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){var c=[a,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(l=2&c[0]?r.return:c[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,c[1])).done)return l;switch(r=0,l&&(c=[2&c[0],l.value]),c[0]){case 0:case 1:l=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(l=(l=o.trys).length>0&&l[l.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!l||c[1]>l[0]&&c[1]<l[3])){o.label=c[1];break}if(6===c[0]&&o.label<l[1]){o.label=l[1],l=c;break}if(l&&o.label<l[2]){o.label=l[2],o.ops.push(c);break}l[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=l=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var eq=a.Typography.Text;a.Typography.Title,a.Typography.Paragraph;var eN=a.theme.useToken,eU={pending:"default",running:"blue",completed:"green",failed:"red"},eH={pending_approval:"orange",approved:"cyan",posted:"green",post_failed:"red",skipped:"default",rejected:"red"},eW=function(e){var t,n,s,d=e.initialFilter,m=(0,u.N)();eN().token;var p=(0,c.useAPIClient)(),f=(0,i.E)().repos,y=eD((0,r.useState)([]),2),h=y[0],g=y[1],v=eD((0,r.useState)(!1),2),b=v[0],E=v[1],w=eD((0,r.useState)("all"),2),S=w[0],k=w[1],C=eD((0,r.useState)("pending_approval"===(void 0===d?"all":d)?"pending_approval":"all"),2),x=C[0],I=C[1],A=eD((0,r.useState)("all"),2),T=A[0],O=A[1],R=eD((0,r.useState)(null),2),z=R[0],B=R[1],P=eD((0,r.useState)(!1),2),F=P[0],M=P[1],j=eD((0,r.useState)(""),2),D=j[0],L=j[1],q=(0,r.useCallback)(ej(function(){var e,t;return eL(this,function(n){switch(n.label){case 0:E(!0),n.label=1;case 1:return n.trys.push([1,,3,4]),e={},"all"!==S&&(e.status=S),"all"!==x&&(e.postStatus=x),"all"!==T&&(e.triggeredBy=T),[4,p.request({url:"gitCodeReviews:list",params:{pageSize:50,sort:["-id"],filter:Object.keys(e).length?e:void 0}})];case 2:return g((null==(t=n.sent().data)?void 0:t.data)||[]),[3,4];case 3:return E(!1),[7];case 4:return[2]}})}),[p,S,x,T]);(0,r.useEffect)(function(){q()},[q]),(0,r.useEffect)(function(){if(h.some(function(e){return"running"===e.status||"pending"===e.status})){var e=setInterval(q,4e3);return function(){return clearInterval(e)}}},[h,q]);var N=(0,r.useCallback)((t=ej(function(e){var t,n;return eL(this,function(r){switch(r.label){case 0:return[4,p.request({url:"gitCodeReviews:get",params:{filterByTk:e}})];case 1:return(n=null==(t=r.sent().data)?void 0:t.data)&&(g(function(t){return t.map(function(t){return t.id===e?n:t})}),(null==z?void 0:z.id)===e&&B(n)),[2]}})}),function(e){return t.apply(this,arguments)}),[p,z]),U=(n=ej(function(e){var t,n,r,l,o;return eL(this,function(i){switch(i.label){case 0:if(!z)return[2];i.label=1;case 1:return i.trys.push([1,3,,4]),[4,p.request({url:"gitManager:reviewApprovePost",method:"post",data:{reviewId:z.id,editedMarkdown:e}})];case 2:return i.sent(),a.message.success(m("Review posted to merge request")),M(!1),N(z.id),q(),[3,4];case 3:return t=i.sent(),a.message.error((null==t||null==(o=t.response)||null==(l=o.data)||null==(r=l.errors)||null==(n=r[0])?void 0:n.message)||(null==t?void 0:t.message)||m("Failed to post review")),[3,4];case 4:return[2]}})}),function(e){return n.apply(this,arguments)}),H=(s=ej(function(){var e;return eL(this,function(t){switch(t.label){case 0:if(!z)return[2];t.label=1;case 1:return t.trys.push([1,3,,4]),[4,p.request({url:"gitManager:reviewReject",method:"post",data:{reviewId:z.id}})];case 2:return t.sent(),a.message.success(m("Review rejected")),N(z.id),q(),[3,4];case 3:return e=t.sent(),a.message.error((null==e?void 0:e.message)||m("Failed to reject")),[3,4];case 4:return[2]}})}),function(){return s.apply(this,arguments)}),W=(0,r.useMemo)(function(){var e={};return f.forEach(function(t){return e[t.id]=t}),e},[f]),_=[{title:m("Target"),key:"target",render:function(e,t){var n=W[t.repositoryId],r=(null==n?void 0:n.name)||"#".concat(t.repositoryId);return"mr"===t.targetType?l().createElement(a.Space,{size:4},l().createElement(eq,{strong:!0},r),l().createElement(eq,{type:"secondary"},"!",t.mrIid)):"commit"===t.targetType?l().createElement(a.Space,{size:4},l().createElement(eq,{strong:!0},r),l().createElement(eq,{type:"secondary",style:{fontFamily:"monospace"}},String(t.commitSha||"").slice(0,7))):l().createElement(a.Space,{size:4},l().createElement(eq,{strong:!0},r),l().createElement(eq,{type:"secondary"},t.branch))}},{title:m("Type"),dataIndex:"targetType",width:80,render:function(e){return l().createElement(a.Tag,null,m(e.toUpperCase()))}},{title:m("Status"),dataIndex:"status",width:120,render:function(e){var t=eU[e]||"default",n="running"===e?l().createElement(o.ClockCircleOutlined,{spin:!0}):null;return l().createElement(a.Tag,{color:t,icon:n},m(e))}},{title:m("Post Status"),dataIndex:"postStatus",width:140,render:function(e){return l().createElement(a.Tag,{color:eH[e]||"default"},m(e))}},{title:m("Commit"),key:"sha",width:140,render:function(e,t){var n=t.headSha,r=t.latestSha;return n?l().createElement(a.Space,{size:4},l().createElement(a.Tag,{style:{fontFamily:"monospace",fontSize:11}},String(n).slice(0,7)),n&&r&&n!==r&&l().createElement(a.Tooltip,{title:"".concat(m("New commits"),": ").concat(String(r).slice(0,7))},l().createElement(a.Tag,{color:"orange",style:{fontSize:11}},m("new")))):l().createElement(eq,{type:"secondary"},"—")}},{title:m("Trigger"),dataIndex:"triggeredBy",width:90,render:function(e){return l().createElement(a.Tag,{color:"poll"===e?"geekblue":"default",style:{fontSize:11}},"poll"===e?m("Polling"):m("Manual"))}},{title:m("Duration"),dataIndex:"durationMs",width:90,render:function(e){return e?"".concat((e/1e3).toFixed(1),"s"):"—"}},{title:m("Created"),dataIndex:"createdAt",width:160,render:function(e){return e?new Date(e).toLocaleString():""}},{title:"",key:"actions",width:60,render:function(e,t){return l().createElement(a.Tooltip,{title:m("View")},l().createElement(a.Button,{size:"small",icon:l().createElement(o.FileTextOutlined,null),onClick:function(){B(t),M(!1),L(t.reviewMarkdown||"")}}))}}];return l().createElement("div",null,l().createElement(a.Space,{style:{marginBottom:12},wrap:!0},l().createElement(a.Select,{size:"small",style:{width:140},value:S,onChange:k,options:[{value:"all",label:m("All statuses")},{value:"pending",label:m("pending")},{value:"running",label:m("running")},{value:"completed",label:m("completed")},{value:"failed",label:m("failed")}]}),l().createElement(a.Select,{size:"small",style:{width:180},value:x,onChange:I,options:[{value:"all",label:m("All post statuses")},{value:"pending_approval",label:m("pending_approval")},{value:"approved",label:m("approved")},{value:"posted",label:m("posted")},{value:"post_failed",label:m("post_failed")},{value:"skipped",label:m("skipped")},{value:"rejected",label:m("rejected")}]}),l().createElement(a.Select,{size:"small",style:{width:130},value:T,onChange:O,options:[{value:"all",label:m("All triggers")},{value:"manual",label:m("Manual")},{value:"poll",label:m("Polling")}]}),l().createElement(a.Button,{size:"small",icon:l().createElement(o.ReloadOutlined,null),onClick:q},m("Refresh"))),l().createElement(a.Table,{size:"small",rowKey:"id",loading:b,dataSource:h,columns:_,locale:{emptyText:l().createElement(a.Empty,{description:m("No reviews yet")})},pagination:{pageSize:20},onRow:function(e){return{style:{cursor:"pointer"},onClick:function(){B(e),M(!1),L(e.reviewMarkdown||"")}}}}),l().createElement(a.Drawer,{title:z?l().createElement(a.Space,null,l().createElement(o.RobotOutlined,null),l().createElement("span",null,m("Code Review")),l().createElement(a.Tag,{color:eU[z.status]},m(z.status)),l().createElement(a.Tag,{color:eH[z.postStatus]},m(z.postStatus))):m("Code Review"),open:!!z,onClose:function(){B(null),M(!1)},width:840,extra:z&&l().createElement(a.Space,null,l().createElement(a.Button,{size:"small",icon:l().createElement(o.ReloadOutlined,null),onClick:function(){return N(z.id)}},m("Refresh")),"mr"===z.targetType&&l().createElement(a.Button,{size:"small",icon:l().createElement(o.ExportOutlined,null),onClick:function(){var e,t=W[z.repositoryId],n=null==t||null==(e=t.repoUrl)?void 0:e.replace(/\.git$/,"");n&&z.mrIid&&window.open("".concat(n,"/-/merge_requests/").concat(z.mrIid),"_blank")}},m("Open MR")))},z&&l().createElement(e_,{review:z,editing:F,editedMarkdown:D,onEdit:function(){return M(!0)},onCancelEdit:function(){M(!1),L(z.reviewMarkdown||"")},onChangeMarkdown:L,onApprove:U,onReject:H})))},e_=function(e){var t=e.review,n=e.editing,r=e.editedMarkdown,i=e.onEdit,c=e.onCancelEdit,s=e.onChangeMarkdown,d=e.onApprove,m=e.onReject,p=(0,u.N)(),f=eN().token,y="completed"===t.status&&"mr"===t.targetType&&("pending_approval"===t.postStatus||"approved"===t.postStatus||"post_failed"===t.postStatus);return l().createElement("div",null,"running"===t.status&&l().createElement(a.Alert,{type:"info",showIcon:!0,message:p("Review in progress…"),description:p("The AI employee is analyzing the code. This page will refresh automatically."),style:{marginBottom:16}}),"failed"===t.status&&l().createElement(a.Alert,{type:"error",showIcon:!0,message:p("Review failed"),description:l().createElement("pre",{style:{whiteSpace:"pre-wrap",margin:0}},t.error),style:{marginBottom:16}}),"completed"===t.status&&"post_failed"===t.postStatus&&t.error&&l().createElement(a.Alert,{type:"error",showIcon:!0,message:p("Post Failed"),description:l().createElement("pre",{style:{whiteSpace:"pre-wrap",margin:0}},t.error),style:{marginBottom:16}}),y&&l().createElement(a.Space,{style:{marginBottom:16},wrap:!0},n?l().createElement(l().Fragment,null,l().createElement(a.Button,{type:"primary",icon:l().createElement(o.CheckOutlined,null),onClick:function(){return d(r)}},p("Save & Post")),l().createElement(a.Button,{onClick:c},p("Cancel"))):l().createElement(l().Fragment,null,l().createElement(a.Button,{type:"primary",icon:l().createElement(o.CheckOutlined,null),onClick:function(){return d(t.reviewMarkdown)}},p("Approve & Post")),l().createElement(a.Button,{icon:l().createElement(o.EditOutlined,null),onClick:i},p("Edit & Post")),l().createElement(a.Popconfirm,{title:p("Reject this review?"),onConfirm:m},l().createElement(a.Button,{danger:!0,icon:l().createElement(o.CloseOutlined,null)},p("Reject"))))),l().createElement(a.Tabs,{defaultActiveKey:"content",items:[{key:"content",label:p("Review Content"),children:n?l().createElement(a.Input.TextArea,{value:r,onChange:function(e){return s(e.target.value)},autoSize:{minRows:16,maxRows:40},style:{fontFamily:"'JetBrains Mono', 'Fira Code', Consolas, monospace",fontSize:13}}):t.reviewMarkdown?l().createElement("div",{style:{background:f.colorBgLayout,padding:16,borderRadius:8,maxHeight:"70vh",overflowY:"auto"}},l().createElement(eP,{content:t.reviewMarkdown})):l().createElement(a.Empty,{description:p("No content yet")})},{key:"metadata",label:p("Metadata"),children:l().createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"8px 16px",fontSize:13}},l().createElement(eG,{label:p("Status"),value:t.status}),l().createElement(eG,{label:p("Post Status"),value:t.postStatus}),l().createElement(eG,{label:p("Trigger Type"),value:t.targetType}),l().createElement(eG,{label:p("Triggered By"),value:t.triggeredBy}),l().createElement(eG,{label:p("Reviewed SHA"),value:t.headSha||"—"}),l().createElement(eG,{label:p("Latest SHA"),value:t.latestSha||"—"}),l().createElement(eG,{label:p("Started At"),value:t.startedAt&&new Date(t.startedAt).toLocaleString()}),l().createElement(eG,{label:p("Finished At"),value:t.finishedAt&&new Date(t.finishedAt).toLocaleString()}),l().createElement(eG,{label:p("Duration"),value:t.durationMs?"".concat((t.durationMs/1e3).toFixed(1),"s"):"—"}),l().createElement(eG,{label:p("Posted Note ID"),value:t.postedNoteId||"—"}),l().createElement(eG,{label:p("Approved By"),value:t.approvedBy||"—"}),l().createElement(eG,{label:p("Approved At"),value:t.approvedAt&&new Date(t.approvedAt).toLocaleString()}),l().createElement(eG,{label:p("Session ID"),value:t.sessionId||"—"}),l().createElement(eG,{label:p("Flow ID"),value:t.flowId||"—"}))}]}))},eG=function(e){var t=e.label,n=e.value;return l().createElement("div",null,l().createElement(eq,{type:"secondary",style:{fontSize:12,display:"block"}},t),l().createElement("div",{style:{wordBreak:"break-all"}},n||"—"))};function e$(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function eK(e,t,n,r,l,a,o){try{var i=e[a](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,l)}function eV(e){return function(){var t=this,n=arguments;return new Promise(function(r,l){var a=e.apply(t,n);function o(e){eK(a,r,l,o,i,"next",e)}function i(e){eK(a,r,l,o,i,"throw",e)}o(void 0)})}}function eJ(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return e$(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return e$(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function eQ(e,t){var n,r,l,a,o={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){var c=[a,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(l=2&c[0]?r.return:c[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,c[1])).done)return l;switch(r=0,l&&(c=[2&c[0],l.value]),c[0]){case 0:case 1:l=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(l=(l=o.trys).length>0&&l[l.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!l||c[1]>l[0]&&c[1]<l[3])){o.label=c[1];break}if(6===c[0]&&o.label<l[1]){o.label=l[1],l=c;break}if(l&&o.label<l[2]){o.label=l[2],o.ops.push(c);break}l[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=l=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var eX=a.Typography.Text,eY=a.theme.useToken,eZ=function(){var e,t,n=(0,u.N)();eY().token;var s=(0,c.useAPIClient)(),d=(0,i.E)(),m=d.repos,p=d.refreshRepos,f=eJ((0,r.useState)(null),2),y=f[0],h=f[1],g=eJ((0,r.useState)(!1),2),v=g[0],b=g[1],E=eJ((0,r.useState)(null),2),w=E[0],S=E[1],k=eJ((0,r.useState)([]),2),C=k[0],x=k[1],I=(0,r.useCallback)(eV(function(){var e,t,n,r;return eQ(this,function(l){switch(l.label){case 0:b(!0),l.label=1;case 1:return l.trys.push([1,,4,5]),[4,Promise.all([s.request({url:"gitManager:pollerStatus"}),s.request({url:"gitReviewFlows:list",params:{pageSize:100,filter:{enabled:!0,triggerMode:{$in:["onMergeRequestCreated","both"]}}}})])];case 2:return n=(t=eJ.apply(void 0,[l.sent(),2]))[0].data,r=t[1],h((null==n?void 0:n.data)||null),x((null==r||null==(e=r.data)?void 0:e.data)||[]),[4,p()];case 3:return l.sent(),[3,5];case 4:return b(!1),[7];case 5:return[2]}})}),[s,p]);(0,r.useEffect)(function(){I()},[I]);var A=(e=eV(function(){var e,t,r,l,o,i,c,u,d;return eQ(this,function(m){switch(m.label){case 0:S("all"),m.label=1;case 1:return m.trys.push([1,3,4,5]),[4,s.request({url:"gitManager:pollNow",method:"post"})];case 2:return t=(null==(e=m.sent().data)?void 0:e.data)||{},a.message.success(n("Polled {{scanned}} MRs, triggered {{triggered}} reviews",{scanned:null!=(r=t.scanned)?r:0,triggered:null!=(l=t.triggered)?l:0})),I(),[3,5];case 3:return o=m.sent(),a.message.error((null==o||null==(d=o.response)||null==(u=d.data)||null==(c=u.errors)||null==(i=c[0])?void 0:i.message)||(null==o?void 0:o.message)||n("Failed")),[3,5];case 4:return S(null),[7];case 5:return[2]}})}),function(){return e.apply(this,arguments)}),T=(t=eV(function(e){var t,r,l,o,i,c,u,d,m;return eQ(this,function(p){switch(p.label){case 0:S(e),p.label=1;case 1:return p.trys.push([1,3,4,5]),[4,s.request({url:"gitManager:pollNow",method:"post",data:{repositoryId:e}})];case 2:return r=(null==(t=p.sent().data)?void 0:t.data)||{},a.message.success(n("Polled {{scanned}} MRs, triggered {{triggered}} reviews",{scanned:null!=(l=r.scanned)?l:0,triggered:null!=(o=r.triggered)?o:0})),I(),[3,5];case 3:return i=p.sent(),a.message.error((null==i||null==(m=i.response)||null==(d=m.data)||null==(u=d.errors)||null==(c=u[0])?void 0:c.message)||(null==i?void 0:i.message)||n("Failed")),[3,5];case 4:return S(null),[7];case 5:return[2]}})}),function(e){return t.apply(this,arguments)}),O=m.filter(function(e){return e.autoReview});return l().createElement("div",null,l().createElement(a.Card,{size:"small",style:{marginBottom:16},title:l().createElement(a.Space,null,l().createElement(o.ClockCircleOutlined,null),n("Polling Status")),extra:l().createElement(a.Space,null,l().createElement(a.Button,{size:"small",type:"primary",icon:l().createElement(o.ThunderboltOutlined,null),onClick:A,loading:"all"===w,disabled:0===O.length},n("Poll Now (All)")),l().createElement(a.Button,{size:"small",icon:l().createElement(o.ReloadOutlined,null),onClick:I,loading:v},n("Refresh")))},l().createElement(a.Space,{direction:"vertical",size:4,style:{width:"100%"}},l().createElement(a.Space,null,l().createElement(eX,{type:"secondary"},n("Background poller"),":"),l().createElement(a.Tag,{color:(null==y?void 0:y.running)?"green":"default"},(null==y?void 0:y.running)?n("Running"):n("Stopped")),(null==y?void 0:y.polling)&&l().createElement(a.Tag,{color:"blue"},n("Polling now…"))),l().createElement(a.Space,null,l().createElement(eX,{type:"secondary"},n("Interval"),":"),l().createElement(eX,null,(null==y?void 0:y.intervalSec)?"".concat(y.intervalSec,"s"):"—")),l().createElement(a.Space,null,l().createElement(eX,{type:"secondary"},n("Last tick"),":"),l().createElement(eX,null,(null==y?void 0:y.lastTickAt)?new Date(y.lastTickAt).toLocaleString():n("Never"))),(null==y?void 0:y.lastError)&&l().createElement(a.Space,null,l().createElement(eX,{type:"secondary"},n("Last error"),":"),l().createElement(eX,{type:"danger",style:{fontSize:12}},y.lastError)))),l().createElement(a.Card,{size:"small",title:l().createElement(a.Space,null,l().createElement(o.RobotOutlined,null),n("Auto-Review Repositories")),extra:l().createElement(eX,{type:"secondary",style:{fontSize:12}},n("Toggle Auto Review on the Repositories tab to enable polling"))},0===O.length?l().createElement(a.Empty,{description:n("No repositories have Auto Review enabled")}):l().createElement(a.Table,{size:"small",rowKey:"id",dataSource:O,pagination:!1,columns:[{title:n("Repository Name"),dataIndex:"name"},{title:n("Primary Auto Flow"),dataIndex:"autoReviewFlowId",width:220,render:function(e,t){var r=C.find(function(t){return Number(t.id)===Number(e)}),o=C.find(function(e){return e.repositoryId===t.id||null==e.repositoryId});return r?l().createElement(a.Tag,{color:"blue"},r.name):o?l().createElement(a.Tag,{color:"default"},n("Fallback"),": ",o.name):l().createElement(a.Tag,{color:"red"},n("No matching flow available"))}},{title:n("Last Polled At"),dataIndex:"lastPolledAt",width:200,render:function(e){return e?new Date(e).toLocaleString():n("Never")}},{title:"",key:"actions",width:120,render:function(e,t){return l().createElement(a.Tooltip,{title:n("Poll this repository now")},l().createElement(a.Button,{size:"small",icon:l().createElement(o.ThunderboltOutlined,null),onClick:function(){return T(t.id)},loading:w===t.id},n("Poll Now")))}}]})))},e0=a.Typography.Text,e1=a.theme.useToken,e2=function(){var e=(0,u.N)(),t=e1().token,n=(0,i.E)(),c=n.repos,s=n.selectedRepo,d=n.setSelectedRepo,m=n.refreshRepos;return(0,r.useEffect)(function(){m()},[]),l().createElement("div",{style:{height:"100%"}},l().createElement("div",{style:{padding:"12px 0",marginBottom:16,display:"flex",alignItems:"center",gap:12,borderBottom:"1px solid ".concat(t.colorBorderSecondary)}},l().createElement(o.DatabaseOutlined,{style:{fontSize:16}}),l().createElement(e0,{strong:!0},"Repository:"),l().createElement(a.Select,{style:{minWidth:250},placeholder:e("Select a repository"),value:null==s?void 0:s.id,onChange:function(e){d(c.find(function(t){return t.id===e})||null)},options:c.map(function(t){return{label:l().createElement(a.Space,null,t.name,l().createElement(a.Tag,{color:"connected"===t.status?"green":"default",style:{fontSize:11}},"connected"===t.status?e("Connected"):e("Disconnected"))),value:t.id}}),allowClear:!0,onClear:function(){return d(null)}}),s&&l().createElement(e0,{type:"secondary",style:{fontSize:12}},s.repoUrl)),l().createElement(a.Tabs,{type:"card",defaultActiveKey:"explorer",destroyInactiveTabPane:!0,items:[{key:"explorer",label:l().createElement("span",null,l().createElement(o.FolderOutlined,null)," ",e("File Explorer")),children:l().createElement(w,null)},{key:"history",label:l().createElement("span",null,l().createElement(o.HistoryOutlined,null)," ",e("History")),children:l().createElement(L,null)},{key:"merge-requests",label:l().createElement("span",null,l().createElement(o.MergeOutlined,null)," ",e("Merge Requests")),children:l().createElement(J,null)},{key:"operations",label:l().createElement("span",null,l().createElement(o.ToolOutlined,null)," ",e("Operations")),children:l().createElement(ep,null)},{key:"review-flows",label:l().createElement("span",null,l().createElement(o.RobotOutlined,null)," ",e("Review Flows")),children:l().createElement(eR,null)},{key:"review-history",label:l().createElement("span",null,l().createElement(o.AuditOutlined,null)," ",e("Review History")),children:l().createElement(eW,null)},{key:"polling",label:l().createElement("span",null,l().createElement(o.ClockCircleOutlined,null)," ",e("Polling")),children:l().createElement(eZ,null)}]}))},e3=function(){return l().createElement(i.Z,null,l().createElement(e2,null))}},630:function(e,t,n){n.d(t,{E:function(){return m},Z:function(){return p}});var r=n(156),l=n.n(r),a=n(772);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function i(e,t,n,r,l,a,o){try{var i=e[a](o),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,l)}function c(e){return function(){var t=this,n=arguments;return new Promise(function(r,l){var a=e.apply(t,n);function o(e){i(a,r,l,o,c,"next",e)}function c(e){i(a,r,l,o,c,"throw",e)}o(void 0)})}}function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){i=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return o(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){var n,r,l,a,o={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){var c=[a,i];if(n)throw TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(l=2&c[0]?r.return:c[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,c[1])).done)return l;switch(r=0,l&&(c=[2&c[0],l.value]),c[0]){case 0:case 1:l=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(l=(l=o.trys).length>0&&l[l.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!l||c[1]>l[0]&&c[1]<l[3])){o.label=c[1];break}if(6===c[0]&&o.label<l[1]){o.label=l[1],l=c;break}if(l&&o.label<l[2]){o.label=l[2],o.ops.push(c);break}l[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=l=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var d=(0,r.createContext)(null);function m(){return(0,r.useContext)(d)}var p=function(e){var t=e.children,n=(0,a.useAPIClient)(),o=u((0,r.useState)([]),2),i=o[0],m=o[1],p=u((0,r.useState)(null),2),f=p[0],y=p[1],h=u((0,r.useState)(!1),2),g=h[0],v=h[1],b=u((0,r.useState)([]),2),E=b[0],w=b[1],S=u((0,r.useState)(""),2),k=S[0],C=S[1],x=(0,r.useRef)(f);x.current=f;var I=(0,r.useCallback)(c(function(){var e,t,r,l;return s(this,function(a){switch(a.label){case 0:if(!(e=x.current)||"connected"!==e.status)return w([]),C(""),[2];a.label=1;case 1:return a.trys.push([1,3,,4]),[4,n.request({url:"gitManager:branches",params:{repositoryId:e.id}})];case 2:return(l=(null==(r=a.sent().data)||null==(t=r.data)?void 0:t.data)||(null==r?void 0:r.data))&&(w(l.all||[]),C(l.current||"")),[3,4];case 3:return a.sent(),w([]),C(""),[3,4];case 4:return[2]}})}),[n]),A=(0,r.useCallback)(c(function(){var e,t,r,l;return s(this,function(a){switch(a.label){case 0:v(!0),a.label=1;case 1:return a.trys.push([1,,3,4]),[4,n.request({url:"gitRepositories:list",params:{pageSize:100}})];case 2:return m(t=(null==(e=a.sent().data)?void 0:e.data)||[]),(r=x.current)&&(l=t.find(function(e){return e.id===r.id}))&&y(l),[3,4];case 3:return v(!1),[7];case 4:return[2]}})}),[n]);return l().createElement(d.Provider,{value:{repos:i,selectedRepo:f,loading:g,branches:E,currentBranch:k,setSelectedRepo:y,refreshRepos:A,refreshBranches:I}},t)}},618:function(e,t,n){n.d(t,{N:function(){return l}});var r=n(772);function l(){var e=(0,r.useApp)();return function(t,n){return e.i18n.t(t,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({ns:["plugin-git-manager","client"]},n))}}}}]);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
"use strict";(self.webpackChunkplugin_git_manager=self.webpackChunkplugin_git_manager||[]).push([["906"],{275:function(e,t,r){r.r(t),r.d(t,{RepositoryConfig:function(){return y}});var n=r(156),a=r.n(n),l=r(721),o=r(482),u=r(772),i=r(630),c=r(618);function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function d(e,t,r,n,a,l,o){try{var u=e[l](o),i=u.value}catch(e){r(e);return}u.done?t(i):Promise.resolve(i).then(n,a)}function f(e){return function(){var t=this,r=arguments;return new Promise(function(n,a){var l=e.apply(t,r);function o(e){d(l,n,a,o,u,"next",e)}function u(e){d(l,n,a,o,u,"throw",e)}o(void 0)})}}function p(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,u=!1;try{for(a=a.call(e);!(o=(r=a.next()).done)&&(l.push(r.value),!t||l.length!==t);o=!0);}catch(e){u=!0,n=e}finally{try{o||null==a.return||a.return()}finally{if(u)throw n}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return s(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return s(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function m(e,t){var r,n,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function u(l){return function(u){var i=[l,u];if(r)throw TypeError("Generator is already executing.");for(;o;)try{if(r=1,n&&(a=2&i[0]?n.return:i[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,i[1])).done)return a;switch(n=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,n=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],n=0}finally{r=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}var y=function(){var e,t,r,s=(0,c.N)(),d=(0,u.useAPIClient)(),y=(0,i.E)(),h=y.repos,b=y.refreshRepos,v=y.selectedRepo,g=y.setSelectedRepo,w=p((0,n.useState)(!1),2),E=w[0],S=w[1],R=p((0,n.useState)(null),2),I=R[0],O=R[1],k=p(l.Form.useForm(),1)[0],P=p((0,n.useState)(null),2),C=P[0],F=P[1],j=p((0,n.useState)([]),2),x=j[0],A=j[1],B=(0,n.useCallback)(f(function(){var e;return m(this,function(t){switch(t.label){case 0:return[4,d.request({url:"gitReviewFlows:list",params:{pageSize:100,filter:{enabled:!0,triggerMode:{$in:["onMergeRequestCreated","both"]}}}})];case 1:return A((null==(e=t.sent().data)?void 0:e.data)||[]),[2]}})}),[d]);(0,n.useEffect)(function(){B().catch(function(){})},[B]);var q=function(e){return x.filter(function(t){return t.repositoryId===e||null==t.repositoryId}).map(function(e){return{value:e.id,label:"".concat(e.name).concat(null==e.repositoryId?" (".concat(s("global"),")"):"")}})},T=(e=f(function(){var e,t;return m(this,function(r){switch(r.label){case 0:return[4,k.validateFields()];case 1:e=r.sent(),I&&(!e.pat||"••••••••"===e.pat)&&delete e.pat,r.label=2;case 2:if(r.trys.push([2,8,,9]),!I)return[3,4];return[4,d.request({url:"gitRepositories:update",method:"post",params:{filterByTk:I.id},data:e})];case 3:return r.sent(),l.message.success(s("Repository updated")),[3,6];case 4:return[4,d.request({url:"gitRepositories:create",method:"post",data:e})];case 5:r.sent(),l.message.success(s("Repository added")),r.label=6;case 6:return S(!1),O(null),k.resetFields(),[4,b()];case 7:return r.sent(),[3,9];case 8:return t=r.sent(),l.message.error((null==t?void 0:t.message)||s("Failed to save")),[3,9];case 9:return[2]}})}),function(){return e.apply(this,arguments)}),D=(t=f(function(e){return m(this,function(t){switch(t.label){case 0:return[4,d.request({url:"gitRepositories:destroy",method:"post",params:{filterByTk:e}})];case 1:return t.sent(),(null==v?void 0:v.id)===e&&g(null),l.message.success(s("Deleted")),[4,b()];case 2:return t.sent(),[2]}})}),function(e){return t.apply(this,arguments)}),z=(r=f(function(e){var t,r,n,a,o;return m(this,function(u){switch(u.label){case 0:F("clone-".concat(e.id)),u.label=1;case 1:return u.trys.push([1,4,5,6]),[4,d.request({url:"gitManager:clone",method:"post",params:{repositoryId:e.id}})];case 2:return u.sent(),l.message.success(s("Clone successful")),[4,b()];case 3:return u.sent(),[3,6];case 4:return t=u.sent(),l.message.error((null==t||null==(o=t.response)||null==(a=o.data)||null==(n=a.errors)||null==(r=n[0])?void 0:r.message)||s("Clone failed")),[3,6];case 5:return F(null),[7];case 6:return[2]}})}),function(e){return r.apply(this,arguments)}),U=[{title:s("Repository Name"),dataIndex:"name",key:"name",render:function(e,t){return a().createElement("a",{onClick:function(){return g(t)}},e)}},{title:s("Repository URL"),dataIndex:"repoUrl",key:"repoUrl",ellipsis:!0},{title:s("Local Path"),dataIndex:"localPath",key:"localPath",ellipsis:!0},{title:s("Default Branch"),dataIndex:"defaultBranch",key:"defaultBranch",width:120},{title:a().createElement(l.Tooltip,{title:s("Auto-poll new merge requests every 5 minutes")},a().createElement(l.Space,{size:4},a().createElement(o.RobotOutlined,null),s("Auto Review"))),dataIndex:"autoReview",key:"autoReview",width:110,render:function(e,t){var r;return a().createElement(l.Switch,{size:"small",checked:!!e,onChange:(r=f(function(e){var r,n,a,o;return m(this,function(u){switch(u.label){case 0:return u.trys.push([0,3,,4]),n=q(t.id),[4,d.request({url:"gitRepositories:update",method:"post",params:{filterByTk:t.id},data:{autoReview:e,autoReviewFlowId:e&&!t.autoReviewFlowId?null!=(a=null==(r=n[0])?void 0:r.value)?a:null:t.autoReviewFlowId}})];case 1:return u.sent(),[4,b()];case 2:return u.sent(),[3,4];case 3:return o=u.sent(),l.message.error((null==o?void 0:o.message)||s("Failed to save")),[3,4];case 4:return[2]}})}),function(e){return r.apply(this,arguments)})})}},{title:s("Primary Auto Flow"),dataIndex:"autoReviewFlowId",key:"autoReviewFlowId",width:220,render:function(e,t){var r,n=q(t.id);return a().createElement(l.Select,{allowClear:!0,size:"small",style:{width:"100%"},disabled:!t.autoReview,placeholder:s("Select a flow"),value:e||void 0,options:n,notFoundContent:s("No matching flow available"),onChange:(r=f(function(e){var r;return m(this,function(n){switch(n.label){case 0:return n.trys.push([0,3,,4]),[4,d.request({url:"gitRepositories:update",method:"post",params:{filterByTk:t.id},data:{autoReviewFlowId:e||null}})];case 1:return n.sent(),[4,b()];case 2:return n.sent(),[3,4];case 3:return r=n.sent(),l.message.error((null==r?void 0:r.message)||s("Failed to save")),[3,4];case 4:return[2]}})}),function(e){return r.apply(this,arguments)})})}},{title:s("Status"),dataIndex:"status",key:"status",width:120,render:function(e){var t={connected:{color:"green",label:s("Connected")},error:{color:"red",label:s("Error")}}[e]||{color:"default",label:s("Disconnected")};return a().createElement(l.Tag,{color:t.color},t.label)}},{title:"",key:"actions",width:200,render:function(e,t){return a().createElement(l.Space,{size:"small"},"connected"!==t.status&&a().createElement(l.Button,{size:"small",icon:a().createElement(o.LinkOutlined,null),loading:C==="clone-".concat(t.id),onClick:function(){return z(t)}},s("Clone")),a().createElement(l.Button,{size:"small",onClick:function(){var e,r;O(t),k.setFieldsValue((e=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({},t),r=r={pat:""},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}),e)),S(!0)}},s("Edit")),a().createElement(l.Popconfirm,{title:s("Delete this repository?"),onConfirm:function(){return D(t.id)}},a().createElement(l.Button,{size:"small",danger:!0,icon:a().createElement(o.DeleteOutlined,null)})))}}];return a().createElement("div",null,a().createElement("div",{style:{marginBottom:16}},a().createElement(l.Button,{type:"primary",icon:a().createElement(o.PlusOutlined,null),onClick:function(){O(null),k.resetFields(),S(!0)}},s("Add Repository"))),a().createElement(l.Table,{dataSource:h,columns:U,rowKey:"id",size:"small",pagination:!1,rowClassName:function(e){return(null==v?void 0:v.id)===e.id?"ant-table-row-selected":""}}),a().createElement(l.Modal,{title:I?s("Edit Repository"):s("Add Repository"),open:E,onOk:T,onCancel:function(){S(!1),O(null)},width:520},a().createElement(l.Form,{form:k,layout:"vertical",initialValues:{defaultBranch:"main"}},a().createElement(l.Form.Item,{name:"name",label:s("Repository Name"),rules:[{required:!0}]},a().createElement(l.Input,{placeholder:"my-project"})),a().createElement(l.Form.Item,{name:"repoUrl",label:s("Repository URL"),rules:[{required:!0}]},a().createElement(l.Input,{placeholder:"https://gitlab.com/user/repo.git"})),a().createElement(l.Form.Item,{name:"username",label:s("Username"),rules:[{required:!0}],extra:s("GitLab username for PAT authentication")},a().createElement(l.Input,{placeholder:"gitlab-username"})),a().createElement(l.Form.Item,{name:"localPath",label:s("Local Path"),rules:[{required:!0}]},a().createElement(l.Input,{placeholder:"my-project"})),a().createElement(l.Form.Item,{name:"pat",label:s("Personal Access Token"),rules:I?[]:[{required:!0}]},a().createElement(l.Input.Password,{placeholder:I?"Leave empty to keep current":"ghp_xxxx..."})),a().createElement(l.Form.Item,{name:"defaultBranch",label:s("Default Branch")},a().createElement(l.Input,{placeholder:"main"})),a().createElement(l.Form.Item,{name:"autoReviewFlowId",label:s("Primary Auto Review Flow"),extra:s("Only flows with automatic trigger modes are shown")},a().createElement(l.Select,{allowClear:!0,placeholder:s("Select a flow"),options:q(null==I?void 0:I.id),notFoundContent:s("No matching flow available")})))))}},630:function(e,t,r){r.d(t,{E:function(){return f},Z:function(){return p}});var n=r(156),a=r.n(n),l=r(772);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function u(e,t,r,n,a,l,o){try{var u=e[l](o),i=u.value}catch(e){r(e);return}u.done?t(i):Promise.resolve(i).then(n,a)}function i(e){return function(){var t=this,r=arguments;return new Promise(function(n,a){var l=e.apply(t,r);function o(e){u(l,n,a,o,i,"next",e)}function i(e){u(l,n,a,o,i,"throw",e)}o(void 0)})}}function c(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,u=!1;try{for(a=a.call(e);!(o=(r=a.next()).done)&&(l.push(r.value),!t||l.length!==t);o=!0);}catch(e){u=!0,n=e}finally{try{o||null==a.return||a.return()}finally{if(u)throw n}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return o(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){var r,n,a,l,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return l={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function u(l){return function(u){var i=[l,u];if(r)throw TypeError("Generator is already executing.");for(;o;)try{if(r=1,n&&(a=2&i[0]?n.return:i[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,i[1])).done)return a;switch(n=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,n=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],n=0}finally{r=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}var d=(0,n.createContext)(null);function f(){return(0,n.useContext)(d)}var p=function(e){var t=e.children,r=(0,l.useAPIClient)(),o=c((0,n.useState)([]),2),u=o[0],f=o[1],p=c((0,n.useState)(null),2),m=p[0],y=p[1],h=c((0,n.useState)(!1),2),b=h[0],v=h[1],g=c((0,n.useState)([]),2),w=g[0],E=g[1],S=c((0,n.useState)(""),2),R=S[0],I=S[1],O=(0,n.useRef)(m);O.current=m;var k=(0,n.useCallback)(i(function(){var e,t,n,a;return s(this,function(l){switch(l.label){case 0:if(!(e=O.current)||"connected"!==e.status)return E([]),I(""),[2];l.label=1;case 1:return l.trys.push([1,3,,4]),[4,r.request({url:"gitManager:branches",params:{repositoryId:e.id}})];case 2:return(a=(null==(n=l.sent().data)||null==(t=n.data)?void 0:t.data)||(null==n?void 0:n.data))&&(E(a.all||[]),I(a.current||"")),[3,4];case 3:return l.sent(),E([]),I(""),[3,4];case 4:return[2]}})}),[r]),P=(0,n.useCallback)(i(function(){var e,t,n,a;return s(this,function(l){switch(l.label){case 0:v(!0),l.label=1;case 1:return l.trys.push([1,,3,4]),[4,r.request({url:"gitRepositories:list",params:{pageSize:100}})];case 2:return f(t=(null==(e=l.sent().data)?void 0:e.data)||[]),(n=O.current)&&(a=t.find(function(e){return e.id===n.id}))&&y(a),[3,4];case 3:return v(!1),[7];case 4:return[2]}})}),[r]);return a().createElement(d.Provider,{value:{repos:u,selectedRepo:m,loading:b,branches:w,currentBranch:R,setSelectedRepo:y,refreshRepos:P,refreshBranches:k}},t)}},618:function(e,t,r){r.d(t,{N:function(){return a}});var n=r(772);function a(){var e=(0,n.useApp)();return function(t,r){return e.i18n.t(t,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({ns:["plugin-git-manager","client"]},r))}}}}]);
|
package/dist/client/index.js
CHANGED
|
@@ -1 +1,10 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@nocobase/plugin-ai/client"),require("@nocobase/client"),require("react"),require("@ant-design/icons"),require("antd")):"function"==typeof define&&define.amd?define("plugin-git-manager",["@nocobase/plugin-ai/client","@nocobase/client","react","@ant-design/icons","antd"],t):"object"==typeof exports?exports["plugin-git-manager"]=t(require("@nocobase/plugin-ai/client"),require("@nocobase/client"),require("react"),require("@ant-design/icons"),require("antd")):e["plugin-git-manager"]=t(e["@nocobase/plugin-ai/client"],e["@nocobase/client"],e.react,e["@ant-design/icons"],e.antd)}(self,function(e,t,n,r,o){return function(){var i,u,a,l,c,s,f={41:function(e){e.exports=function(e,t){return"undefined"!=typeof __deoptimization_sideEffect__&&__deoptimization_sideEffect__(e,t),t}},482:function(e){"use strict";e.exports=r},772:function(e){"use strict";e.exports=t},645:function(t){"use strict";t.exports=e},721:function(e){"use strict";e.exports=o},156:function(e){"use strict";e.exports=n}},p={};function d(e){var t=p[e];if(void 0!==t)return t.exports;var n=p[e]={exports:{}};return f[e].call(n.exports,n,n.exports,d),n.exports}d.m=f,d.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return d.d(t,{a:t}),t},d.d=function(e,t){for(var n in t)d.o(t,n)&&!d.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},d.f={},d.e=function(e){return Promise.all(Object.keys(d.f).reduce(function(t,n){return d.f[n](e,t),t},[]))},d.u=function(e){return""+e+"."+({187:"d5545b7cc8b90bfc",228:"7588a0707cb3694a"})[e]+".js"},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i={},u="plugin-git-manager:",d.l=function(e,t,n,r){if(i[e])return void i[e].push(t);if(void 0!==n)for(var o,a,l=document.getElementsByTagName("script"),c=0;c<l.length;c++){var s=l[c];if(s.getAttribute("src")==e||s.getAttribute("data-webpack")==u+n){o=s;break}}o||(a=!0,(o=document.createElement("script")).charset="utf-8",o.timeout=120,d.nc&&o.setAttribute("nonce",d.nc),o.setAttribute("data-webpack",u+n),o.src=e),i[e]=[t];var f=function(t,n){o.onerror=o.onload=null,clearTimeout(p);var r=i[e];if(delete i[e],o.parentNode&&o.parentNode.removeChild(o),r&&r.forEach(function(e){return e(n)}),t)return t(n)},p=setTimeout(f.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=f.bind(null,o.onerror),o.onload=f.bind(null,o.onload),a&&document.head.appendChild(o)},d.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(a=window.__webpack_public_path__||"/").endsWith("/")||(a+="/"),d.p=a+"static/plugins/plugin-git-manager/dist/client/",l={909:0},d.f.j=function(e,t){var n=d.o(l,e)?l[e]:void 0;if(0!==n)if(n)t.push(n[2]);else{var r=new Promise(function(t,r){n=l[e]=[t,r]});t.push(n[2]=r);var o=d.p+d.u(e),i=Error();d.l(o,function(t){if(d.o(l,e)&&(0!==(n=l[e])&&(l[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;i.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",i.name="ChunkLoadError",i.type=r,i.request=o,n[1](i)}},"chunk-"+e,e)}},c=function(e,t){var n,r,o=t[0],i=t[1],u=t[2],a=0;if(o.some(function(e){return 0!==l[e]})){for(n in i)d.o(i,n)&&(d.m[n]=i[n]);u&&u(d)}for(e&&e(t);a<o.length;a++)r=o[a],d.o(l,r)&&l[r]&&l[r][0](),l[r]=0},(s=self.webpackChunkplugin_git_manager=self.webpackChunkplugin_git_manager||[]).forEach(c.bind(null,0)),s.push=c.bind(null,s.push.bind(s));var m={};return!function(){"use strict";d.r(m),d.d(m,{PluginGitManagerClient:function(){return j},default:function(){return k}});var e,t,n,r=d(772),o=d(156),i=d.n(o),u=d(721),a=d(482);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function c(e,t,n,r,o,i,u){try{var a=e[i](u),l=a.value}catch(e){n(e);return}a.done?t(l):Promise.resolve(l).then(r,o)}function s(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function u(e){c(i,r,o,u,a,"next",e)}function a(e){c(i,r,o,u,a,"throw",e)}u(void 0)})}}function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],u=!0,a=!1;try{for(o=o.call(e);!(u=(n=o.next()).done)&&(i.push(n.value),!t||i.length!==t);u=!0);}catch(e){a=!0,r=e}finally{try{u||null==o.return||o.return()}finally{if(a)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return l(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(e,t){var n,r,o,i,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){var l=[i,a];if(n)throw TypeError("Generator is already executing.");for(;u;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return u.label++,{value:l[1],done:!1};case 5:u.label++,r=l[1],l=[0];continue;case 7:l=u.ops.pop(),u.trys.pop();continue;default:if(!(o=(o=u.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){u=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){u.label=l[1];break}if(6===l[0]&&u.label<o[1]){u.label=o[1],o=l;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(l);break}o[2]&&u.ops.pop(),u.trys.pop();continue}l=t.call(e,u)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}var g={name:"git-repository",menu:{icon:i().createElement(a.BranchesOutlined,null),Component:function(){return i().createElement("span",null,"Git Repository")}},tag:{Component:function(e){var t=e.item;return i().createElement(u.Space,{size:4},i().createElement(a.BranchesOutlined,null),i().createElement("span",null,(null==t?void 0:t.title)||"Repo #".concat(null==t?void 0:t.uid)))}},getContent:(e=s(function(e,t){var n,r,o,i;return p(this,function(u){switch(u.label){case 0:return n=t.uid,[4,e.apiClient.request({url:"gitRepositories:get",params:{filterByTk:n}})];case 1:if(!(i=null==(o=u.sent())||null==(r=o.data)?void 0:r.data))return[2,null];return[2,{type:"git-repository",repositoryId:i.id,name:i.name,repoUrl:i.repoUrl,defaultBranch:i.defaultBranch,status:i.status}]}})}),function(t,n){return e.apply(this,arguments)})},b={name:"git-merge-request",menu:{icon:i().createElement(a.MergeOutlined,null),Component:function(){return i().createElement("span",null,"Git Merge Request")}},tag:{Component:function(e){var t=e.item;return i().createElement(u.Space,{size:4},i().createElement(a.MergeOutlined,null),i().createElement("span",null,(null==t?void 0:t.title)||"MR ".concat(null==t?void 0:t.uid)))}},getContent:(t=s(function(e,t){var n,r,o,i,u,a,l,c;return p(this,function(s){switch(s.label){case 0:if(o=(r=f(String(t.uid||"").split(":"),2))[0],i=r[1],u=Number(o),a=Number(i),!u||!a)return[2,null];return[4,e.apiClient.request({url:"gitManager:mergeRequestDetail",params:{repositoryId:u,mrIid:a}})];case 1:return c=null==(l=s.sent())||null==(n=l.data)?void 0:n.data,[2,{type:"git-merge-request",repositoryId:u,mrIid:a,title:null==c?void 0:c.title,sourceBranch:null==c?void 0:c.sourceBranch,targetBranch:null==c?void 0:c.targetBranch,author:null==c?void 0:c.author,changes:null==c?void 0:c.changes,description:null==c?void 0:c.description,webUrl:null==c?void 0:c.webUrl}]}})}),function(e,n){return t.apply(this,arguments)})},y={name:"git-commit",menu:{icon:i().createElement(a.NodeIndexOutlined,null),Component:function(){return i().createElement("span",null,"Git Commit")}},tag:{Component:function(e){var t=e.item;return i().createElement(u.Space,{size:4},i().createElement(a.NodeIndexOutlined,null),i().createElement("span",null,(null==t?void 0:t.title)||"Commit ".concat(null==t?void 0:t.uid)))}},getContent:(n=s(function(e,t){var n,r,o,i,u,a,l;return p(this,function(c){switch(c.label){case 0:if(o=(r=f(String(t.uid||"").split(":"),2))[0],i=r[1],!(u=Number(o))||!i)return[2,null];return[4,e.apiClient.request({url:"gitManager:commitDetail",params:{repositoryId:u,commitHash:i}})];case 1:return l=null==(a=c.sent())||null==(n=a.data)?void 0:n.data,[2,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({type:"git-commit",repositoryId:u,commitSha:i},l)]}})}),function(e,t){return n.apply(this,arguments)})},h=d(41);function v(e,t,n,r,o,i,u){try{var a=e[i](u),l=a.value}catch(e){n(e);return}a.done?t(l):Promise.resolve(l).then(r,o)}function w(e,t,n){return(w=E()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&_(o,n.prototype),o}).apply(null,arguments)}function O(e){return(O=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function _(e,t){return(_=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function x(e){var t="function"==typeof Map?new Map:void 0;return(x=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return w(e,arguments,O(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),_(n,e)})(e)}function E(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(E=function(){return!!e})()}var S=i().lazy(function(){return h("imported_7nc0nn_component",Promise.all([d.e("228"),d.e("187")]).then(d.bind(d,922))).then(function(e){return{default:e.GitManagerSettings}})}),j=function(e){var t;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function n(){var e,t;if(!(this instanceof n))throw TypeError("Cannot call a class as a function");return e=n,t=arguments,e=O(e),function(e,t){var n;if(t&&("object"==((n=t)&&"undefined"!=typeof Symbol&&n.constructor===Symbol?"symbol":typeof n)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,E()?Reflect.construct(e,t||[],O(this).constructor):e.apply(this,t))}return n.prototype=Object.create(e&&e.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),e&&_(n,e),t=[{key:"load",value:function(){var e,t=this;return(e=function(){var e;return function(e,t){var n,r,o,i,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){var l=[i,a];if(n)throw TypeError("Generator is already executing.");for(;u;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return u.label++,{value:l[1],done:!1};case 5:u.label++,r=l[1],l=[0];continue;case 7:l=u.ops.pop(),u.trys.pop();continue;default:if(!(o=(o=u.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){u=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){u.label=l[1];break}if(6===l[0]&&u.label<o[1]){u.label=o[1],o=l;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(l);break}o[2]&&u.ops.pop(),u.trys.pop();continue}l=t.call(e,u)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}(this,function(n){return t.app.pluginSettingsManager.add("git-manager",{title:t.t("Git Manager"),icon:"BranchesOutlined",Component:S,aclSnippet:"pm.plugin-git-manager"}),(null==(e=t.app.aiManager)?void 0:e.registerWorkContext)&&(e.registerWorkContext("git-repository",g),e.registerWorkContext("git-merge-request",b),e.registerWorkContext("git-commit",y)),[2]})},function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function u(e){v(i,r,o,u,a,"next",e)}function a(e){v(i,r,o,u,a,"throw",e)}u(void 0)})})()}}],function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(n.prototype,t),n}(x(r.Plugin)),k=j}(),m}()});
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@nocobase/plugin-acl/client"),require("@nocobase/plugin-ai/client"),require("@nocobase/client"),require("react"),require("@ant-design/icons"),require("antd")):"function"==typeof define&&define.amd?define("plugin-git-manager",["@nocobase/plugin-acl/client","@nocobase/plugin-ai/client","@nocobase/client","react","@ant-design/icons","antd"],t):"object"==typeof exports?exports["plugin-git-manager"]=t(require("@nocobase/plugin-acl/client"),require("@nocobase/plugin-ai/client"),require("@nocobase/client"),require("react"),require("@ant-design/icons"),require("antd")):e["plugin-git-manager"]=t(e["@nocobase/plugin-acl/client"],e["@nocobase/plugin-ai/client"],e["@nocobase/client"],e.react,e["@ant-design/icons"],e.antd)}(self,function(e,t,n,r,o,i){return function(){var a,u,l,c,s,f,p={41:function(e){e.exports=function(e,t){return"undefined"!=typeof __deoptimization_sideEffect__&&__deoptimization_sideEffect__(e,t),t}},482:function(e){"use strict";e.exports=o},772:function(e){"use strict";e.exports=n},465:function(t){"use strict";t.exports=e},645:function(e){"use strict";e.exports=t},721:function(e){"use strict";e.exports=i},156:function(e){"use strict";e.exports=r}},d={};function y(e){var t=d[e];if(void 0!==t)return t.exports;var n=d[e]={exports:{}};return p[e].call(n.exports,n,n.exports,y),n.exports}y.m=p,y.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return y.d(t,{a:t}),t},y.d=function(e,t){for(var n in t)y.o(t,n)&&!y.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},y.f={},y.e=function(e){return Promise.all(Object.keys(y.f).reduce(function(t,n){return y.f[n](e,t),t},[]))},y.u=function(e){return""+e+"."+({228:"7588a0707cb3694a",597:"1698c0124e2f95ce",906:"bea20db91f34f5e6"})[e]+".js"},y.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),y.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a={},u="plugin-git-manager:",y.l=function(e,t,n,r){if(a[e])return void a[e].push(t);if(void 0!==n)for(var o,i,l=document.getElementsByTagName("script"),c=0;c<l.length;c++){var s=l[c];if(s.getAttribute("src")==e||s.getAttribute("data-webpack")==u+n){o=s;break}}o||(i=!0,(o=document.createElement("script")).charset="utf-8",o.timeout=120,y.nc&&o.setAttribute("nonce",y.nc),o.setAttribute("data-webpack",u+n),o.src=e),a[e]=[t];var f=function(t,n){o.onerror=o.onload=null,clearTimeout(p);var r=a[e];if(delete a[e],o.parentNode&&o.parentNode.removeChild(o),r&&r.forEach(function(e){return e(n)}),t)return t(n)},p=setTimeout(f.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=f.bind(null,o.onerror),o.onload=f.bind(null,o.onload),i&&document.head.appendChild(o)},y.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(l=window.__webpack_public_path__||"/").endsWith("/")||(l+="/"),y.p=l+"static/plugins/plugin-git-manager/dist/client/",c={909:0},y.f.j=function(e,t){var n=y.o(c,e)?c[e]:void 0;if(0!==n)if(n)t.push(n[2]);else{var r=new Promise(function(t,r){n=c[e]=[t,r]});t.push(n[2]=r);var o=y.p+y.u(e),i=Error();y.l(o,function(t){if(y.o(c,e)&&(0!==(n=c[e])&&(c[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;i.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",i.name="ChunkLoadError",i.type=r,i.request=o,n[1](i)}},"chunk-"+e,e)}},s=function(e,t){var n,r,o=t[0],i=t[1],a=t[2],u=0;if(o.some(function(e){return 0!==c[e]})){for(n in i)y.o(i,n)&&(y.m[n]=i[n]);a&&a(y)}for(e&&e(t);u<o.length;u++)r=o[u],y.o(c,r)&&c[r]&&c[r][0](),c[r]=0},(f=self.webpackChunkplugin_git_manager=self.webpackChunkplugin_git_manager||[]).forEach(s.bind(null,0)),f.push=s.bind(null,f.push.bind(f));var m={};return!function(){"use strict";y.r(m),y.d(m,{PluginGitManagerClient:function(){return G},default:function(){return U}});var e,t,n,r=y(772),o=y(156),i=y.n(o),a=y(721),u=y(482);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function c(e,t,n,r,o,i,a){try{var u=e[i](a),l=u.value}catch(e){n(e);return}u.done?t(l):Promise.resolve(l).then(r,o)}function s(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function a(e){c(i,r,o,a,u,"next",e)}function u(e){c(i,r,o,a,u,"throw",e)}a(void 0)})}}function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],a=!0,u=!1;try{for(o=o.call(e);!(a=(n=o.next()).done)&&(i.push(n.value),!t||i.length!==t);a=!0);}catch(e){u=!0,r=e}finally{try{a||null==o.return||o.return()}finally{if(u)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return l(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){var l=[i,u];if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(6===l[0]&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(e,a)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}var d={name:"git-repository",menu:{icon:i().createElement(u.BranchesOutlined,null),Component:function(){return i().createElement("span",null,"Git Repository")}},tag:{Component:function(e){var t=e.item;return i().createElement(a.Space,{size:4},i().createElement(u.BranchesOutlined,null),i().createElement("span",null,(null==t?void 0:t.title)||"Repo #".concat(null==t?void 0:t.uid)))}},getContent:(e=s(function(e,t){var n,r,o,i;return p(this,function(a){switch(a.label){case 0:return n=t.uid,[4,e.apiClient.request({url:"gitRepositories:get",params:{filterByTk:n}})];case 1:if(!(i=null==(o=a.sent())||null==(r=o.data)?void 0:r.data))return[2,null];return[2,{type:"git-repository",repositoryId:i.id,name:i.name,repoUrl:i.repoUrl,defaultBranch:i.defaultBranch,status:i.status}]}})}),function(t,n){return e.apply(this,arguments)})},b={name:"git-merge-request",menu:{icon:i().createElement(u.MergeOutlined,null),Component:function(){return i().createElement("span",null,"Git Merge Request")}},tag:{Component:function(e){var t=e.item;return i().createElement(a.Space,{size:4},i().createElement(u.MergeOutlined,null),i().createElement("span",null,(null==t?void 0:t.title)||"MR ".concat(null==t?void 0:t.uid)))}},getContent:(t=s(function(e,t){var n,r,o,i,a,u,l,c;return p(this,function(s){switch(s.label){case 0:if(o=(r=f(String(t.uid||"").split(":"),2))[0],i=r[1],a=Number(o),u=Number(i),!a||!u)return[2,null];return[4,e.apiClient.request({url:"gitManager:mergeRequestDetail",params:{repositoryId:a,mrIid:u}})];case 1:return c=null==(l=s.sent())||null==(n=l.data)?void 0:n.data,[2,{type:"git-merge-request",repositoryId:a,mrIid:u,title:null==c?void 0:c.title,sourceBranch:null==c?void 0:c.sourceBranch,targetBranch:null==c?void 0:c.targetBranch,author:null==c?void 0:c.author,changes:null==c?void 0:c.changes,description:null==c?void 0:c.description,webUrl:null==c?void 0:c.webUrl}]}})}),function(e,n){return t.apply(this,arguments)})},g={name:"git-commit",menu:{icon:i().createElement(u.NodeIndexOutlined,null),Component:function(){return i().createElement("span",null,"Git Commit")}},tag:{Component:function(e){var t=e.item;return i().createElement(a.Space,{size:4},i().createElement(u.NodeIndexOutlined,null),i().createElement("span",null,(null==t?void 0:t.title)||"Commit ".concat(null==t?void 0:t.uid)))}},getContent:(n=s(function(e,t){var n,r,o,i,a,u,l;return p(this,function(c){switch(c.label){case 0:if(o=(r=f(String(t.uid||"").split(":"),2))[0],i=r[1],!(a=Number(o))||!i)return[2,null];return[4,e.apiClient.request({url:"gitManager:commitDetail",params:{repositoryId:a,commitHash:i}})];case 1:return l=null==(u=c.sent())||null==(n=u.data)?void 0:n.data,[2,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({type:"git-commit",repositoryId:a,commitSha:i},l)]}})}),function(e,t){return n.apply(this,arguments)})},h=y(465),v=y.n(h);function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function O(e,t,n,r,o,i,a){try{var u=e[i](a),l=u.value}catch(e){n(e);return}u.done?t(l):Promise.resolve(l).then(r,o)}function S(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function a(e){O(i,r,o,a,u,"next",e)}function u(e){O(i,r,o,a,u,"throw",e)}a(void 0)})}}function E(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function x(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],a=!0,u=!1;try{for(o=o.call(e);!(a=(n=o.next()).done)&&(i.push(n.value),!t||i.length!==t);a=!0);}catch(e){u=!0,r=e}finally{try{a||null==o.return||o.return()}finally{if(u)throw r}}return i}}(e,t)||k(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function j(e){return function(e){if(Array.isArray(e))return w(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||k(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function k(e,t){if(e){if("string"==typeof e)return w(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return w(e,t)}}function P(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){var l=[i,u];if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(6===l[0]&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(e,a)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}var C=function(e){var t,n,u=e.activeRole,l=(0,r.useAPIClient)(),c=x((0,o.useState)(!1),2),s=c[0],f=c[1],p=x((0,o.useState)([]),2),d=p[0],y=p[1],m=x((0,o.useState)({read:[],write:[]}),2),b=m[0],g=m[1];(0,o.useEffect)(function(){(null==u?void 0:u.name)&&h()},[null==u?void 0:u.name]);var h=(t=S(function(){var e,t,n,r,o,i;return P(this,function(c){switch(c.label){case 0:f(!0),c.label=1;case 1:return c.trys.push([1,3,,4]),[4,Promise.all([l.request({resource:"gitRepositories",action:"list",params:{paginate:!1,sort:["name"]}}),l.request({url:"gitManager:rolePermissions",method:"get",params:{roleName:u.name}})])];case 2:return r=(n=x.apply(void 0,[c.sent(),2]))[0],i=(null==(o=n[1])||null==(e=o.data)?void 0:e.data)||(null==o?void 0:o.data)||{read:[],write:[]},y((null==r||null==(t=r.data)?void 0:t.data)||[]),g({read:i.read||[],write:i.write||[]}),[3,4];case 3:return console.error(c.sent()),a.message.error("Failed to load repository permissions"),[3,4];case 4:return f(!1),[2]}})}),function(){return t.apply(this,arguments)}),v=(n=S(function(e,t,n){var r,o,i,c;return P(this,function(s){switch(s.label){case 0:var f,p;r=b[t]||[],o=n?j(new Set(j(r).concat([e]))):r.filter(function(t){return t!==e}),f=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){E(e,t,n[t])})}return e}({},b),p=null!=(p=E({},t,o))?p:{},Object.getOwnPropertyDescriptors?Object.defineProperties(f,Object.getOwnPropertyDescriptors(p)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(p)).forEach(function(e){Object.defineProperty(f,e,Object.getOwnPropertyDescriptor(p,e))}),i=f,c=b,g(i),s.label=1;case 1:return s.trys.push([1,3,,4]),[4,l.request({url:"gitManager:updateRolePermissions",method:"post",data:{roleName:u.name,values:i}})];case 2:return s.sent(),[3,4];case 3:return s.sent(),a.message.error("Failed to update permissions"),g(c),[3,4];case 4:return[2]}})}),function(e,t,r){return n.apply(this,arguments)}),w=[{title:"Repository Name",dataIndex:"name",key:"name",render:function(e){return i().createElement(a.Typography.Text,{strong:!0},e)}},{title:"Repository URL",dataIndex:"repoUrl",key:"repoUrl",ellipsis:!0,render:function(e){return i().createElement(a.Typography.Text,{type:"secondary"},e)}},{title:"Read (List, Browse Files, View History)",key:"read",width:100,render:function(e,t){return i().createElement(a.Checkbox,{checked:(b.read||[]).includes(t.id),onChange:function(e){return v(t.id,"read",e.target.checked)}})}},{title:"Write (Clone, Pull, Push, Review)",key:"write",width:100,render:function(e,t){return i().createElement(a.Checkbox,{checked:(b.write||[]).includes(t.id),onChange:function(e){return v(t.id,"write",e.target.checked)}})}}];return s&&!d.length?i().createElement(a.Spin,{style:{display:"block",margin:"40px auto"}}):i().createElement("div",{style:{padding:16}},i().createElement("div",{style:{marginBottom:16}},i().createElement(a.Typography.Text,{type:"secondary"},"Configure access permissions for each repository for the role"," ",i().createElement(a.Typography.Text,{strong:!0},(null==u?void 0:u.title)||(null==u?void 0:u.name)),".")),i().createElement(a.Table,{dataSource:d,columns:w,rowKey:"id",pagination:!1,size:"small",bordered:!0}))},_=y(41);function T(e,t,n,r,o,i,a){try{var u=e[i](a),l=u.value}catch(e){n(e);return}u.done?t(l):Promise.resolve(l).then(r,o)}function q(e,t,n){return(q=A()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&R(o,n.prototype),o}).apply(null,arguments)}function M(e){return(M=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function R(e,t){return(R=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function I(e){var t="function"==typeof Map?new Map:void 0;return(I=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return q(e,arguments,M(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),R(n,e)})(e)}function A(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(A=function(){return!!e})()}var B=i().lazy(function(){return _("imported_7nc0nn_component",Promise.all([y.e("228"),y.e("597")]).then(y.bind(y,500))).then(function(e){return{default:e.GitManagerSettings}})}),N=i().lazy(function(){return _("imported_-1shj34q_component",y.e("906").then(y.bind(y,275))).then(function(e){return{default:e.RepositoryConfig}})}),G=function(e){var t;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function n(){var e,t;if(!(this instanceof n))throw TypeError("Cannot call a class as a function");return e=n,t=arguments,e=M(e),function(e,t){var n;if(t&&("object"==((n=t)&&"undefined"!=typeof Symbol&&n.constructor===Symbol?"symbol":typeof n)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,A()?Reflect.construct(e,t||[],M(this).constructor):e.apply(this,t))}return n.prototype=Object.create(e&&e.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),e&&R(n,e),t=[{key:"load",value:function(){var e,t=this;return(e=function(){var e,n;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){var l=[i,u];if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(6===l[0]&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(e,a)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}(this,function(r){return t.app.pluginSettingsManager.add("git-manager",{title:t.t("Git Manager"),icon:"BranchesOutlined"}),t.app.pluginSettingsManager.add("git-manager.repositories",{title:t.t("Repositories"),Component:N,aclSnippet:"pm.plugin-git-manager.repositories"}),t.app.pluginSettingsManager.add("git-manager.manage",{title:t.t("Manage"),Component:B,aclSnippet:"pm.plugin-git-manager.manage"}),(null==(e=t.app.aiManager)?void 0:e.registerWorkContext)&&(e.registerWorkContext("git-repository",d),e.registerWorkContext("git-merge-request",b),e.registerWorkContext("git-commit",g)),(n=t.app.pm.get(v()))&&n.settingsUI.addPermissionsTab(function(e){e.t;var t=e.TabLayout,n=e.activeRole;return{key:"git-manager",label:"Git Manager",sort:25,children:i().createElement(t,null,i().createElement(C,{activeRole:n}))}}),[2]})},function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function a(e){T(i,r,o,a,u,"next",e)}function u(e){T(i,r,o,a,u,"throw",e)}a(void 0)})})()}}],function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(n.prototype,t),n}(I(r.Plugin)),U=G}(),m}()});
|
package/dist/externalVersion.js
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
module.exports = {
|
|
2
11
|
"react": "18.2.0",
|
|
3
12
|
"antd": "5.24.2",
|
|
4
13
|
"@ant-design/icons": "5.6.1",
|
|
5
|
-
"@nocobase/client": "2.0.
|
|
6
|
-
"@nocobase/
|
|
14
|
+
"@nocobase/client": "2.0.60",
|
|
15
|
+
"@nocobase/plugin-acl": "2.0.60",
|
|
16
|
+
"@nocobase/server": "2.0.60",
|
|
7
17
|
"sequelize": "6.35.2",
|
|
8
18
|
"dayjs": "1.11.13",
|
|
9
|
-
"@nocobase/plugin-ai": "2.0.
|
|
10
|
-
"@nocobase/actions": "2.0.
|
|
11
|
-
"@nocobase/database": "2.0.
|
|
19
|
+
"@nocobase/plugin-ai": "2.0.60",
|
|
20
|
+
"@nocobase/actions": "2.0.60",
|
|
21
|
+
"@nocobase/database": "2.0.60"
|
|
12
22
|
};
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __create = Object.create;
|
|
2
11
|
var __defProp = Object.defineProperty;
|
|
3
12
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
package/dist/locale/en-US.json
CHANGED
|
@@ -186,5 +186,12 @@
|
|
|
186
186
|
"Only flows with automatic trigger modes are shown": "Only flows with automatic trigger modes are shown",
|
|
187
187
|
"Fallback": "Fallback",
|
|
188
188
|
"AI employee not found": "AI employee not found",
|
|
189
|
-
"Failed to open AI chat": "Failed to open AI chat"
|
|
189
|
+
"Failed to open AI chat": "Failed to open AI chat",
|
|
190
|
+
"Manage": "Manage",
|
|
191
|
+
"Repository Permissions": "Repository Permissions",
|
|
192
|
+
"Read (List, Browse Files, View History)": "Read (List, Browse Files, View History)",
|
|
193
|
+
"Write (Clone, Pull, Push, Review)": "Write (Clone, Pull, Push, Review)",
|
|
194
|
+
"Configure access permissions for each repository for the role {{roleName}}": "Configure access permissions for each repository for the role {{roleName}}",
|
|
195
|
+
"Failed to load repository permissions": "Failed to load repository permissions",
|
|
196
|
+
"Failed to update permissions": "Failed to update permissions"
|
|
190
197
|
}
|
package/dist/locale/vi-VN.json
CHANGED
|
@@ -179,5 +179,12 @@
|
|
|
179
179
|
"new": "mới",
|
|
180
180
|
"Reviewed SHA": "SHA đã đánh giá",
|
|
181
181
|
"Latest SHA": "SHA mới nhất",
|
|
182
|
-
"All triggers": "Tất cả nguồn"
|
|
182
|
+
"All triggers": "Tất cả nguồn",
|
|
183
|
+
"Manage": "Quản lý",
|
|
184
|
+
"Repository Permissions": "Phân quyền kho mã nguồn",
|
|
185
|
+
"Read (List, Browse Files, View History)": "Đọc (Xem danh sách, Duyệt tệp, Xem lịch sử)",
|
|
186
|
+
"Write (Clone, Pull, Push, Review)": "Ghi (Sao chép, Kéo về, Đẩy lên, Đánh giá)",
|
|
187
|
+
"Configure access permissions for each repository for the role {{roleName}}": "Cấu hình quyền truy cập cho từng kho mã nguồn đối với vai trò {{roleName}}",
|
|
188
|
+
"Failed to load repository permissions": "Không thể tải phân quyền kho mã nguồn",
|
|
189
|
+
"Failed to update permissions": "Cập nhật phân quyền thất bại"
|
|
183
190
|
}
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __create = Object.create;
|
|
2
11
|
var __defProp = Object.defineProperty;
|
|
3
12
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -44,12 +53,16 @@ module.exports = __toCommonJS(git_actions_exports);
|
|
|
44
53
|
var import_simple_git = __toESM(require("simple-git"));
|
|
45
54
|
var path = __toESM(require("path"));
|
|
46
55
|
var fs = __toESM(require("fs"));
|
|
56
|
+
var import_child_process = require("child_process");
|
|
47
57
|
var import_redact = require("../utils/redact");
|
|
48
|
-
const REF_PATTERN = /^(?!-)[a-zA-Z0-9._
|
|
58
|
+
const REF_PATTERN = /^(?!-)[a-zA-Z0-9._/-]+$/;
|
|
49
59
|
const repoLocks = /* @__PURE__ */ new Map();
|
|
60
|
+
const GIT_BINARY = process.env.GIT_BINARY_PATH || process.env.GIT_EXECUTABLE || "git";
|
|
61
|
+
let gitAvailabilityChecked = false;
|
|
50
62
|
function acquireLock(key) {
|
|
51
63
|
const prev = repoLocks.get(key) || Promise.resolve();
|
|
52
|
-
let release
|
|
64
|
+
let release = () => {
|
|
65
|
+
};
|
|
53
66
|
const next = new Promise((resolve) => {
|
|
54
67
|
release = resolve;
|
|
55
68
|
});
|
|
@@ -113,11 +126,30 @@ function getAuthUrl(repoUrl, pat, username) {
|
|
|
113
126
|
url.password = pat.trim();
|
|
114
127
|
return url.toString();
|
|
115
128
|
}
|
|
129
|
+
function getGitMissingMessage() {
|
|
130
|
+
return `Git executable "${GIT_BINARY}" was not found on the server. Install git in the app/worker container, or set GIT_BINARY_PATH to the absolute git binary path.`;
|
|
131
|
+
}
|
|
132
|
+
function assertGitAvailable(ctx) {
|
|
133
|
+
if (gitAvailabilityChecked) return;
|
|
134
|
+
const check = (0, import_child_process.spawnSync)(GIT_BINARY, ["--version"], { stdio: "ignore" });
|
|
135
|
+
if (check.error || check.status !== 0) {
|
|
136
|
+
ctx.throw(503, getGitMissingMessage());
|
|
137
|
+
}
|
|
138
|
+
gitAvailabilityChecked = true;
|
|
139
|
+
}
|
|
140
|
+
function isMissingGitError(error) {
|
|
141
|
+
const message = (error == null ? void 0 : error.message) || String(error);
|
|
142
|
+
return (error == null ? void 0 : error.code) === "ENOENT" || /spawn .*git.*ENOENT/i.test(message);
|
|
143
|
+
}
|
|
144
|
+
function createGit(baseDir) {
|
|
145
|
+
return (0, import_simple_git.default)({ baseDir, binary: GIT_BINARY });
|
|
146
|
+
}
|
|
116
147
|
function getGit(ctx, localPath) {
|
|
117
148
|
if (!fs.existsSync(localPath)) {
|
|
118
149
|
ctx.throw(400, "Repository directory does not exist. Please clone the repository first.");
|
|
119
150
|
}
|
|
120
|
-
|
|
151
|
+
assertGitAvailable(ctx);
|
|
152
|
+
return createGit(localPath);
|
|
121
153
|
}
|
|
122
154
|
async function getRepo(ctx) {
|
|
123
155
|
const { repositoryId } = ctx.action.params;
|
|
@@ -154,9 +186,10 @@ async function clone(ctx, next) {
|
|
|
154
186
|
fs.mkdirSync(path.dirname(localPath), { recursive: true });
|
|
155
187
|
}
|
|
156
188
|
const authUrl = getAuthUrl(repoUrl, pat, username);
|
|
189
|
+
assertGitAvailable(ctx);
|
|
157
190
|
try {
|
|
158
|
-
await (
|
|
159
|
-
await (
|
|
191
|
+
await createGit().clone(authUrl, localPath, ["--branch", defaultBranch]);
|
|
192
|
+
await createGit(localPath).remote(["set-url", "origin", repoUrl]);
|
|
160
193
|
await ctx.db.getRepository("gitRepositories").update({
|
|
161
194
|
filterByTk: repo.get("id"),
|
|
162
195
|
values: { status: "connected" }
|
|
@@ -167,6 +200,9 @@ async function clone(ctx, next) {
|
|
|
167
200
|
filterByTk: repo.get("id"),
|
|
168
201
|
values: { status: "error" }
|
|
169
202
|
});
|
|
203
|
+
if (isMissingGitError(err)) {
|
|
204
|
+
ctx.throw(503, getGitMissingMessage());
|
|
205
|
+
}
|
|
170
206
|
throw (0, import_redact.redactError)(err);
|
|
171
207
|
}
|
|
172
208
|
await next();
|
|
@@ -276,7 +312,8 @@ async function fileTree(ctx, next) {
|
|
|
276
312
|
const match = line.match(/^(\d+)\s+(blob|tree)\s+([a-f0-9]+)\s+(-|\d+)\t(.+)$/);
|
|
277
313
|
if (!match) return null;
|
|
278
314
|
const fullPath = match[5];
|
|
279
|
-
const
|
|
315
|
+
const parts = fullPath.split("/");
|
|
316
|
+
const name = fullPath.includes("/") ? parts[parts.length - 1] : fullPath;
|
|
280
317
|
return {
|
|
281
318
|
mode: match[1],
|
|
282
319
|
type: match[2],
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
var __defProp = Object.defineProperty;
|
|
2
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|