@tachybase/module-backup 1.6.15 → 1.6.16

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.
@@ -1,4 +1,4 @@
1
- (function(N,S){typeof exports=="object"&&typeof module!="undefined"?S(exports,require("@tachybase/client"),require("react/jsx-runtime"),require("react"),require("@tachybase/schema"),require("@tego/client"),require("@ant-design/icons"),require("antd"),require("react-i18next")):typeof define=="function"&&define.amd?define(["exports","@tachybase/client","react/jsx-runtime","react","@tachybase/schema","@tego/client","@ant-design/icons","antd","react-i18next"],S):(N=typeof globalThis!="undefined"?globalThis:N||self,S(N["@tachybase/module-backup"]={},N["@tachybase/client"],N.jsxRuntime,N.react,N["@tachybase/schema"],N["@tego/client"],N["@ant-design/icons"],N.antd,N["react-i18next"]))})(this,function(N,S,r,f,le,Ae,re,C,X){"use strict";var Gt=Object.defineProperty,Yt=Object.defineProperties;var Kt=Object.getOwnPropertyDescriptors;var pt=Object.getOwnPropertySymbols;var Xt=Object.prototype.hasOwnProperty,Qt=Object.prototype.propertyIsEnumerable;var ft=(N,S,r)=>S in N?Gt(N,S,{enumerable:!0,configurable:!0,writable:!0,value:r}):N[S]=r,$=(N,S)=>{for(var r in S||(S={}))Xt.call(S,r)&&ft(N,r,S[r]);if(pt)for(var r of pt(S))Qt.call(S,r)&&ft(N,r,S[r]);return N},te=(N,S)=>Yt(N,Kt(S));var G=(N,S,r)=>new Promise((f,le)=>{var Ae=X=>{try{C(r.next(X))}catch(ee){le(ee)}},re=X=>{try{C(r.throw(X))}catch(ee){le(ee)}},C=X=>X.done?f(X.value):Promise.resolve(X.value).then(Ae,re);C((r=r.apply(N,S)).next())});var ee=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{},me={exports:{}},mt=me.exports,Ne;function ht(){return Ne||(Ne=1,function(e,o){(function(a,t){t()})(mt,function(){function a(l,c){return typeof c=="undefined"?c={autoBom:!1}:typeof c!="object"&&(console.warn("Deprecated: Expected third argument to be a object"),c={autoBom:!c}),c.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(l.type)?new Blob(["\uFEFF",l],{type:l.type}):l}function t(l,c,b){var p=new XMLHttpRequest;p.open("GET",l),p.responseType="blob",p.onload=function(){i(p.response,c,b)},p.onerror=function(){console.error("could not download file")},p.send()}function n(l){var c=new XMLHttpRequest;c.open("HEAD",l,!1);try{c.send()}catch(b){}return 200<=c.status&&299>=c.status}function u(l){try{l.dispatchEvent(new MouseEvent("click"))}catch(b){var c=document.createEvent("MouseEvents");c.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),l.dispatchEvent(c)}}var s=typeof window=="object"&&window.window===window?window:typeof self=="object"&&self.self===self?self:typeof ee=="object"&&ee.global===ee?ee:void 0,d=s.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),i=s.saveAs||(typeof window!="object"||window!==s?function(){}:"download"in HTMLAnchorElement.prototype&&!d?function(l,c,b){var p=s.URL||s.webkitURL,y=document.createElement("a");c=c||l.name||"download",y.download=c,y.rel="noopener",typeof l=="string"?(y.href=l,y.origin===location.origin?u(y):n(y.href)?t(l,c,b):u(y,y.target="_blank")):(y.href=p.createObjectURL(l),setTimeout(function(){p.revokeObjectURL(y.href)},4e4),setTimeout(function(){u(y)},0))}:"msSaveOrOpenBlob"in navigator?function(l,c,b){if(c=c||l.name||"download",typeof l!="string")navigator.msSaveOrOpenBlob(a(l,b),c);else if(n(l))t(l,c,b);else{var p=document.createElement("a");p.href=l,p.target="_blank",setTimeout(function(){u(p)})}}:function(l,c,b,p){if(p=p||open("","_blank"),p&&(p.document.title=p.document.body.innerText="downloading..."),typeof l=="string")return t(l,c,b);var y=l.type==="application/octet-stream",v=/constructor/i.test(s.HTMLElement)||s.safari,m=/CriOS\/[\d]+/.test(navigator.userAgent);if((m||y&&v||d)&&typeof FileReader!="undefined"){var x=new FileReader;x.onloadend=function(){var g=x.result;g=m?g:g.replace(/^data:[^;]*;/,"data:attachment/file;"),p?p.location.href=g:location=g,p=null},x.readAsDataURL(l)}else{var B=s.URL||s.webkitURL,M=B.createObjectURL(l);p?p.location=M:location.href=M,p=null,setTimeout(function(){B.revokeObjectURL(M)},4e4)}});s.saveAs=i.saveAs=i,e.exports=i})}(me)),me.exports}var yt=ht();const ie="backup";function Q(){return X.useTranslation([ie,"core"],{nsMode:"fallback"})}const vt=e=>S.tval(e,{ns:ie}),gt=({inProgress:e=!1,status:o,progress:a=0,currentStep:t,downloadProgress:n,showDownloadText:u=!0,width:s="180px"})=>{const{t:d}=Q();if(e||o==="in_progress"){const i=a!=null?a:0,l=t||d("Backing up");return r.jsxs("div",{style:{width:s},children:[r.jsx(C.Progress,{percent:i,status:"active",showInfo:!1}),u&&r.jsxs("div",{style:{fontSize:"12px",color:"rgba(0, 0, 0, 0.45)",marginTop:"4px",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:[l," ",i>0?`${i}%`:""]})]})}return o==="error"?r.jsx("div",{style:{width:s},children:r.jsx(C.Progress,{percent:0,status:"exception",showInfo:!1})}):o==="ok"?r.jsx("div",{style:{width:s},children:r.jsx(C.Progress,{percent:100,status:"success",showInfo:!1})}):n!==void 0&&n>=0?r.jsxs("div",{style:{width:s},children:[r.jsx(C.Progress,{percent:n,status:"active",showInfo:!1}),u&&r.jsxs("div",{style:{fontSize:"12px",color:"rgba(0, 0, 0, 0.45)",marginTop:"4px",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:[d("Downloading")," ",n,"%"]})]},`download-${n}`):null};function bt({dataSource:e,onDataSourceUpdate:o,onComplete:a,messageType:t="backup:progress",timeout:n=5*60*1e3,onTimeout:u}){const s=S.useApp(),d=f.useRef(a),i=f.useRef(u),l=f.useRef(e),c=f.useRef(!1),b=f.useRef(new Map),p=f.useRef(new Map);f.useEffect(()=>{d.current=a,i.current=u,l.current=e},[a,u,e]),f.useEffect(()=>{if(!s.ws||!s.ws.enabled)return;const m=le.autorun(()=>{if(s.ws.connected&&!c.current){const x=s.apiClient.auth.getToken();if(x){const B={type:"signIn",payload:{token:x}};s.ws.send(JSON.stringify(B)),c.current=!0}}else s.ws.connected||(c.current=!1)});return()=>{m(),c.current=!1}},[s.ws,s.apiClient]);const y=f.useCallback(m=>{const x=p.current.get(m);x&&clearTimeout(x),b.current.set(m,Date.now());const B=setTimeout(()=>{var g;const M=b.current.get(m);M&&Date.now()-M>=n&&(o(h=>h.map(O=>O.name===m&&(O.inProgress||O.status==="in_progress")?(console.warn(`[BackupProgress] Backup task ${m} timed out after ${n}ms`),te($({},O),{inProgress:!1,status:"error",progress:O.progress||0,currentStep:"Timeout: No progress update received"})):O)),p.current.delete(m),b.current.delete(m),(g=i.current)==null||g.call(i,m))},n);p.current.set(m,B)},[n,o]),v=f.useCallback(m=>{const x=p.current.get(m);x&&(clearTimeout(x),p.current.delete(m)),b.current.delete(m)},[]);f.useEffect(()=>{e.forEach(m=>{if((m.inProgress||m.status==="in_progress")&&m.name){if(m.progress>=100){v(m.name);return}p.current.has(m.name)||y(m.name)}else m.name&&p.current.has(m.name)&&v(m.name)})},[e,y,v]),f.useEffect(()=>{if(!s.ws)return;const m=x=>{var B;try{const M=JSON.parse(x.data);if((M==null?void 0:M.type)===t){if(!M.payload){console.warn("[BackupProgress] Received message without payload:",M);return}const{fileName:g,progress:h}=M.payload;if(!g||!h){console.warn("[BackupProgress] Invalid message format:",M.payload);return}if(h.percent>=100){v(g),(B=d.current)==null||B.call(d,g);return}o(O=>O.map(w=>w.name===g?(y(g),te($({},w),{inProgress:!0,status:"in_progress",progress:h.percent,currentStep:h.currentStep})):w))}}catch(M){}};return s.ws.on("message",m),()=>{s.ws.off("message",m),p.current.forEach(x=>{clearTimeout(x)}),p.current.clear(),b.current.clear()}},[s.ws,t,o,y,v])}function xt(e){const o=S.useAPIClient(),[a,t]=f.useState({}),n=f.useCallback(s=>G(null,null,function*(){const d=s.name;t(i=>te($({},i),{[d]:0})),e!=null&&e.onDownloadStart&&e.onDownloadStart(d);try{const i=yield o.request({url:"backupFiles:download",method:"get",params:{filterByTk:d},responseType:"blob",onDownloadProgress:c=>{if(c.total){const b=Math.round(c.loaded*100/c.total);t(p=>te($({},p),{[d]:b}))}}});t(c=>{const b=$({},c);return delete b[d],b});const l=(i==null?void 0:i.data)||i;e!=null&&e.onDownloadComplete&&e.onDownloadComplete(d,l)}catch(i){if(t(l=>{const c=$({},l);return delete c[d],c}),e!=null&&e.onDownloadError)e.onDownloadError(d,i);else throw i}}),[o,e]),u=f.useCallback(s=>{t(s?d=>{const i=$({},d);return delete i[s],i}:{})},[]);return{downloadProgress:a,handleDownload:n,clearDownloadProgress:u}}const{Dragger:kt}=C.Upload;function wt(e){const o=t=>{var n;(n=e.onChange)==null||n.call(e,t)},a=S.useAPIClient();return te($({},e),{customRequest({action:t,data:n,file:u,filename:s,headers:d,onError:i,onProgress:l,onSuccess:c,withCredentials:b}){const p=new FormData;return n&&Object.keys(n).forEach(y=>{p.append(y,n[y])}),p.append(s,u),a.axios.post(t,p,{withCredentials:b,headers:d,onUploadProgress:({total:y,loaded:v})=>{l({percent:Math.round(v/y*100).toFixed(2)},u)}}).then(({data:y})=>{c(y,u)}).catch(i).finally(()=>{}),{abort(){}}},onChange:o})}const Fe=e=>{const{collectionsData:o}=e,{t:a}=Q(),[t,n]=f.useState(!1),[u,s]=f.useState(o);f.useEffect(()=>{s(o)},[o]);const d=S.useAPIClient(),i=S.useCompile(),l=f.useMemo(()=>d.resource("backupFiles"),[d]),c=()=>G(null,null,function*(){if(e.isBackup){const m=yield l.dumpableCollections();s(m==null?void 0:m.data),n(!0)}n(!0)}),b=()=>{n(!1)},p=()=>{n(!1)},y=[{title:a("Collection"),dataIndex:"collection",key:"collection",render:(m,x)=>{const B=i(x.title);return x.name===B?B:r.jsxs("div",{children:[x.name," ",r.jsxs("span",{style:{color:"rgba(0, 0, 0, 0.3)",fontSize:"0.9em"},children:["(",i(x.title),")"]})]})}},{title:a("Origin"),dataIndex:"origin",key:"origin",width:"50%"}],v=Object.keys(u||{}).map(m=>({key:m,label:a(`${m}.title`),children:r.jsxs(r.Fragment,{children:[r.jsx(C.Alert,{style:{marginBottom:16},message:a(`${m}.description`)}),r.jsx(C.Table,{pagination:{pageSize:100},bordered:!0,size:"small",dataSource:u[m],columns:y,scroll:{y:400}})]})}));return r.jsxs(r.Fragment,{children:[r.jsx("a",{onClick:c,children:a("Learn more")}),r.jsx(C.Modal,{title:a("Backup instructions"),width:"80vw",open:t,footer:null,onOk:b,onCancel:p,children:r.jsx(C.Tabs,{defaultActiveKey:"required",items:v})})]})},Ee=({ButtonComponent:e=C.Button,title:o,upload:a=!1,fileData:t})=>{const{t:n}=Q(),[u,s]=f.useState(["required"]),[d,i]=f.useState(!1),[l,c]=f.useState(null),[b,p]=f.useState(!1),y=S.useAPIClient(),v=f.useMemo(()=>y.resource("backupFiles"),[y]),[m,x]=f.useState([]),B=u.length>0&&u.length<m.length,M=m.length===u.length;f.useEffect(()=>{const k=Object.keys((l==null?void 0:l.dumpableCollectionsGroupByGroup)||[]).map(F=>({value:F,label:n(`${F}.title`),disabled:["required","skipped"].includes(F)}));x(k),k.length>0&&s(k.map(F=>F.value))},[l,n]);const g=()=>G(null,null,function*(){var k,F,E;if(i(!0),!a){p(!0);const{data:q}=yield v.get({filterByTk:t.name}),I=Object.keys(((F=(k=q==null?void 0:q.data)==null?void 0:k.meta)==null?void 0:F.dumpableCollectionsGroupByGroup)||[]).map(H=>({value:H,label:n(`${H}.title`),disabled:["required","skipped"].includes(H)}));x(I),c((E=q==null?void 0:q.data)==null?void 0:E.meta),I.length>0&&s(I.map(H=>H.value)),p(!1)}}),h=()=>{v.restore({values:{dataTypes:u,filterByTk:t==null?void 0:t.name,key:l==null?void 0:l.key}}),i(!1)},O=()=>{i(!1),c(null),m.length>0?s(m.map(k=>k.value)):s(["required"])},w=k=>{s(k.target.checked?m.map(F=>F.value):["required"])};return r.jsxs(r.Fragment,{children:[r.jsx(e,{onClick:g,children:o}),r.jsx(C.Modal,{title:n("Restore"),width:800,footer:a&&!l?null:void 0,open:d,onOk:h,onCancel:O,children:r.jsxs(C.Spin,{spinning:b,children:[a&&!l&&r.jsx(St,{setRestoreData:c}),(!a||l)&&[r.jsxs("strong",{style:{fontWeight:600,display:"block",margin:"16px 0 8px"},children:[n("Select the data to be restored")," (",r.jsx(Fe,{collectionsData:l==null?void 0:l.dumpableCollectionsGroupByGroup}),"):"]},"info"),r.jsx("div",{style:{lineHeight:2,marginBottom:8},children:r.jsxs(Ae.FormItem,{children:[r.jsx(S.Checkbox.Group,{options:m,style:{flexDirection:"column"},value:u,onChange:k=>s(k)}),r.jsx(C.Divider,{}),r.jsx(S.Checkbox,{indeterminate:B,onChange:w,checked:M,children:n("Check all")})]})},"dataType")]]})})]})},Ct=({ButtonComponent:e=C.Button,refresh:o})=>{const{t:a}=Q(),[t,n]=f.useState(!1),[u,s]=f.useState(["required"]),d=S.useAPIClient(),[i,l]=f.useState([]),c=["required","user","third-party","custom"],b=u.length>0&&u.length<i.filter(h=>h.value!=="skipped").length,p=i.filter(h=>h.value!=="skipped").length===u.length,y=h=>{s(h.target.checked?i.filter(O=>O.value!=="skipped").map(O=>O.value):["required"])},v=h=>{const O=i.filter(w=>c.includes(w.value)&&w.value!=="skipped").map(w=>w.value);if(h.target.checked){const w=[...new Set([...u.filter(k=>k==="required"),...O])];s(w)}else s(["required"])},m=f.useMemo(()=>{const h=i.filter(k=>c.includes(k.value)&&k.value!=="skipped").map(k=>k.value),O=h.filter(k=>u.includes(k)),w=u.filter(k=>k!=="required"&&!h.includes(k));return h.length>0&&O.length===h.length&&w.length===0},[u,i]),x=f.useMemo(()=>{const h=i.filter(w=>c.includes(w.value)&&w.value!=="skipped").map(w=>w.value),O=h.filter(w=>u.includes(w));return O.length>0&&O.length<h.length},[u,i]),B=()=>G(null,null,function*(){const{data:h}=yield d.resource("backupFiles").dumpableCollections(),O=Object.keys(h||[]).map(k=>({value:k,label:a(`${k}.title`),disabled:["required","skipped"].includes(k)}));l(O);const w=O.filter(k=>c.includes(k.value)&&k.value!=="skipped").map(k=>k.value);s(["required",...w]),n(!0)}),M=h=>G(null,null,function*(){yield d.request({url:"backupFiles:create",method:"post",data:{dataTypes:u,method:h}}),n(!1);const O=i.filter(w=>c.includes(w.value)&&w.value!=="skipped").map(w=>w.value);s(["required",...O]),setTimeout(()=>{o()},500)}),g=()=>{n(!1);const h=i.filter(O=>c.includes(O.value)&&O.value!=="skipped").map(O=>O.value);s(["required",...h])};return r.jsxs(r.Fragment,{children:[r.jsx(e,{icon:r.jsx(re.PlusOutlined,{}),type:"primary",onClick:B,children:a("New backup")}),r.jsxs(C.Modal,{title:a("New backup"),width:800,open:t,onCancel:g,footer:[r.jsxs(C.Row,{gutter:16,justify:"end",align:"middle",children:[r.jsx(C.Col,{children:r.jsx(C.Button,{onClick:g,children:a("Cancel")},"cancel")}),r.jsx(C.Col,{children:r.jsx(C.Dropdown.Button,{type:"primary",onClick:()=>M("priority"),overlay:r.jsxs(C.Menu,{children:[r.jsx(C.Menu.Item,{onClick:()=>M("main"),children:a("Self backup")},"main"),r.jsx(C.Menu.Item,{onClick:()=>M("worker"),children:a("Worker backup")},"worker")]}),children:a("Backup")},"submit")})]})],children:[r.jsxs("strong",{style:{fontWeight:600,display:"block",margin:"16px 0 8px"},children:[a("Select the data to be backed up")," (",r.jsx(Fe,{isBackup:!0}),"):"]}),r.jsxs("div",{style:{lineHeight:2,marginBottom:8},children:[r.jsx(S.Checkbox.Group,{options:i,style:{flexDirection:"column"},onChange:h=>s(h),value:u}),r.jsx(C.Divider,{}),r.jsxs(C.Space,{children:[r.jsx(S.Checkbox,{indeterminate:x,onChange:v,checked:m,children:a("Check common")}),r.jsx(S.Checkbox,{indeterminate:b,onChange:y,checked:p,children:a("Check all")})]})]})]})]})},St=e=>{const{t:o}=Q(),a={multiple:!1,action:"/backupFiles:upload",onChange(t){var u,s,d;t.fileList.length>1&&t.fileList.splice(0,t.fileList.length-1);const{status:n}=t.file;n==="done"?(C.message.success(`${t.file.name} `+o("file uploaded successfully")),e.setRestoreData(te($({},(s=(u=t.file.response)==null?void 0:u.data)==null?void 0:s.meta),{key:(d=t.file.response)==null?void 0:d.data.key}))):n==="error"&&C.message.error(`${t.file.name} `+o("file upload failed"))},onDrop(t){}};return r.jsxs(kt,te($({},wt(a)),{children:[r.jsx("p",{className:"ant-upload-drag-icon",children:r.jsx(re.InboxOutlined,{})}),r.jsxs("p",{className:"ant-upload-text",children:[" ",o("Click or drag file to this area to upload")]})]}))},Ot=()=>{const{t:e}=Q(),o=S.useAPIClient(),a=S.useApp(),[t,n]=f.useState([]),[u,s]=f.useState(!1),{modal:d,notification:i}=C.App.useApp(),[l,c]=f.useState(!1),[b,p]=f.useState(""),y=f.useMemo(()=>o.resource("backupFiles"),[o]),{downloadProgress:v,handleDownload:m}=xt({onDownloadStart:g=>{p(g),c(!0)},onDownloadComplete:(g,h)=>{yt.saveAs(h,g),c(!1),p(""),i.success({key:"downloadBackup",message:r.jsx("span",{children:e("Downloaded success!")}),duration:1})},onDownloadError:(g,h)=>{c(!1),p(""),i.error({key:"downloadBackup",message:r.jsx("span",{children:e("Download failed")}),duration:3})}}),x=f.useCallback((g=!0)=>G(null,null,function*(){g&&s(!0);try{const{data:h}=yield y.list(),O=(h==null?void 0:h.rows)||(h==null?void 0:h.data)||[];n(O)}finally{g&&s(!1)}}),[y]),B=f.useCallback(()=>G(null,null,function*(){yield x()}),[x]);S.useNoticeSub("backup",g=>{(i[g.level]||i.info)({key:"backup",message:g.msg}),B()}),f.useEffect(()=>{x()},[x]),bt({dataSource:t,onDataSourceUpdate:n,onComplete:g=>{x(!1)},onTimeout:g=>{i.error({key:"backup-timeout",message:e("Backup timeout",{ns:"backup"}),description:`${g} ${e("No progress update received for a long time",{ns:"backup"})}`,duration:5}),x(!1)}}),f.useEffect(()=>{if(!t.some(w=>w.inProgress||w.status==="in_progress"))return;let h=null;const O=le.autorun(()=>{var F,E;const w=((F=a.ws)==null?void 0:F.enabled)&&((E=a.ws)==null?void 0:E.connected);h&&(clearInterval(h),h=null),h=setInterval(()=>{x(!1)},w?1e3:500)});return()=>{O(),h&&clearInterval(h)}},[t,x,a.ws]);const M=g=>{d.confirm({title:e("Delete record",{ns:"core"}),content:e("Are you sure you want to delete it?",{ns:"core"}),onOk:()=>G(null,null,function*(){yield y.destroy({filterByTk:g.name}),yield x(),C.message.success(e("Deleted successfully"))})})};return r.jsxs("div",{children:[r.jsxs(C.Card,{bordered:!1,children:[r.jsxs(C.Space,{style:{float:"right",marginBottom:16},children:[r.jsx(C.Button,{onClick:B,icon:r.jsx(re.ReloadOutlined,{}),children:e("Refresh")}),r.jsx(Ee,{upload:!0,title:r.jsxs(r.Fragment,{children:[r.jsx(re.UploadOutlined,{})," ",e("Restore backup from local")]})}),r.jsx(Ct,{refresh:B})]}),r.jsx(C.Table,{dataSource:t,loading:u,columns:[{title:e("Backup file"),dataIndex:"name",width:400,onCell:g=>g.inProgress?{colSpan:1}:{},render:(g,h)=>h.status==="error"?r.jsxs("div",{style:{color:"red"},children:[g,"(",e("Error"),")"]}):r.jsx("div",{children:g})},{title:e("Backup progress"),dataIndex:"progress",width:200,align:"center",render:(g,h)=>r.jsx(gt,{inProgress:h.inProgress,status:h.status,progress:h.progress,currentStep:h.currentStep,downloadProgress:v[h.name],showDownloadText:!1})},{title:e("File size"),dataIndex:"fileSize",width:150,render:(g,h)=>{var k;const O=(k=h.progress)!=null?k:0,w=h.currentStep||e("Backing up");return h.inProgress?r.jsxs("div",{style:{width:"150px",fontSize:"12px",color:"rgba(0, 0, 0, 0.45)",marginTop:"4px",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:[O>0?`${O}%`:""," ",w]}):g}},{title:e("Created at",{ns:"core"}),dataIndex:"createdAt",onCell:g=>g.inProgress?{colSpan:0}:{},render:g=>r.jsx(S.DatePicker.ReadPretty,{value:g,showTime:!0})},{title:e("Actions",{ns:"core"}),dataIndex:"actions",onCell:g=>g.inProgress?{colSpan:0}:{},render:(g,h)=>r.jsxs(C.Space,{split:r.jsx(C.Divider,{type:"vertical"}),children:[h.status!=="error"&&r.jsx(Ee,{ButtonComponent:"a",title:e("Restore"),fileData:h}),h.status!=="error"&&r.jsx("a",{type:"link",onClick:()=>m(h),children:e("Download")}),r.jsx("a",{onClick:()=>M(h),children:e("Delete")})]})}]})]}),r.jsx(C.Modal,{title:e("Downloading"),open:l,closable:!1,maskClosable:!1,footer:null,width:400,children:r.jsxs("div",{style:{padding:"20px 0"},children:[r.jsx("div",{style:{marginBottom:16,fontSize:"14px",color:"rgba(0, 0, 0, 0.65)"},children:b}),r.jsx(C.Progress,{percent:b&&v[b]||0,status:"active",showInfo:!0,format:g=>`${g}%`})]})})]})},Mt={dumpRules:"required",name:"autoBackup",shared:!0,createdAt:!0,updatedAt:!0,createdBy:!0,updatedBy:!0,fields:[{type:"string",name:"title",required:!0,uiSchema:{title:'{{ t("Title") }}',type:"string","x-component":"Input",required:!0}},{type:"boolean",name:"enabled",defaultValue:!1,uiSchema:{title:'{{ t("Enabled") }}',type:"boolean","x-component":"Checkbox",required:!0}},{type:"array",name:"dumpRules",uiSchema:{title:'{{ t("Dump rules") }}',type:"string","x-component":"Input",required:!0}},{type:"string",name:"repeat",required:!0,uiSchema:{title:'{{t("Repeat mode")}}',type:"string","x-component":"RepeatField"}},{type:"integer",name:"maxNumber",uiSchema:{title:'{{ t("Max number") }}',type:"integer","x-component":"Input",required:!0}}]};var _=function(){return _=Object.assign||function(e){for(var o,a=1,t=arguments.length;a<t;a++)for(var n in o=arguments[a])Object.prototype.hasOwnProperty.call(o,n)&&(e[n]=o[n]);return e},_.apply(this,arguments)};function Ie(e,o){var a={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&o.indexOf(t)<0&&(a[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function"){var n=0;for(t=Object.getOwnPropertySymbols(e);n<t.length;n++)o.indexOf(t[n])<0&&Object.prototype.propertyIsEnumerable.call(e,t[n])&&(a[t[n]]=e[t[n]])}return a}function he(e,o,a){if(a||arguments.length===2)for(var t,n=0,u=o.length;n<u;n++)!t&&n in o||(t||(t=Array.prototype.slice.call(o,0,n)),t[n]=o[n]);return e.concat(t||Array.prototype.slice.call(o))}var Dt=[{name:"@yearly",value:"0 0 1 1 *"},{name:"@annually",value:"0 0 1 1 *"},{name:"@monthly",value:"0 0 1 * *"},{name:"@weekly",value:"0 0 * * 0"},{name:"@daily",value:"0 0 * * *"},{name:"@midnight",value:"0 0 * * *"},{name:"@hourly",value:"0 * * * *"}],oe=[{type:"minutes",min:0,max:59,total:60},{type:"hours",min:0,max:23,total:24},{type:"month-days",min:1,max:31,total:31},{type:"months",min:1,max:12,total:12,alt:["JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"]},{type:"week-days",min:0,max:6,total:7,alt:["SUN","MON","TUE","WED","THU","FRI","SAT"]}],A={everyText:"every",emptyMonths:"every month",emptyMonthDays:"every day of the month",emptyMonthDaysShort:"day of the month",emptyWeekDays:"every day of the week",emptyWeekDaysShort:"day of the week",emptyHours:"every hour",emptyMinutes:"every minute",emptyMinutesForHourPeriod:"every",yearOption:"year",monthOption:"month",weekOption:"week",dayOption:"day",hourOption:"hour",minuteOption:"minute",rebootOption:"reboot",prefixPeriod:"Every",prefixMonths:"in",prefixMonthDays:"on",prefixWeekDays:"on",prefixWeekDaysForMonthAndYearPeriod:"and",prefixHours:"at",prefixMinutes:":",prefixMinutesForHourPeriod:"at",suffixMinutesForHourPeriod:"minute(s)",errorInvalidCron:"Invalid cron expression",clearButtonText:"Clear",weekDays:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],altWeekDays:["SUN","MON","TUE","WED","THU","FRI","SAT"],altMonths:["JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"]};function je(e,o){for(var a=[],t=e;t<=o;t++)a.push(t);return a}function ye(e){return e.sort(function(o,a){return o-a}),e}function Le(e){var o=[];return e.forEach(function(a){o.indexOf(a)<0&&o.push(a)}),o}function Z(e){return Object.entries(e).filter(function(o){var a=o[0],t=o[1];return a&&t}).map(function(o){return o[0]}).join(" ")}function Ve(e,o){e&&e({type:"invalid_cron",description:o.errorInvalidCron||A.errorInvalidCron})}function ve(e){var o=parseInt(e,10),a=Number(e);return o===a?a:NaN}function qe(e,o,a,t,n,u,s,d,i,l,c,b,p,y){a&&a(void 0),o(!1);var v=!1;if(!e){if(t==="always"||u&&t==="for-default-value")return;v=!0}if(!v){if(d&&(d===!0||d.includes(e))){if(e==="@reboot")return void y("reboot");var m=Dt.find(function(M){return M.name===e});m&&(e=m.value)}try{var x=function(M){if(typeof M!="string")throw new Error("Invalid cron string");var g=M.replace(/\s+/g," ").trim().split(" ");if(g.length===5)return g.map(function(h,O){return function(w,k){if(w==="*"||w==="*/1")return[];var F=ye(Le(ze(function(q,I,H){if(H){q=q.toUpperCase();for(var D=0;D<H.length;D++)q=q.replace(H[D],"".concat(D+I))}return q}(w,k.min,k.alt).split(",").map(function(q){var I,H=q.split("/");if(H.length>2)throw new Error('Invalid value "'.concat(w,' for "').concat(k.type,'"'));var D=H[0],P=H[1];I=D==="*"?je(k.min,k.max):function(j,L,U){var W=j.split("-");if(W.length===1){var ue=ve(W[0]);if(isNaN(ue))throw new Error('Invalid value "'.concat(L,'" for ').concat(U.type));return[ue]}if(W.length===2){var Y=ve(W[0]),ae=ve(W[1]);if(isNaN(Y)||isNaN(ae))throw new Error('Invalid value "'.concat(L,'" for ').concat(U.type));if(ae<Y)throw new Error('Max range is less than min range in "'.concat(j,'" for ').concat(U.type));return je(Y,ae)}throw new Error('Invalid value "'.concat(j,'" for ').concat(U.type))}(D,w,k);var T=function(j,L){if(j!==void 0){var U=ve(j);if(isNaN(U)||U<1)throw new Error('Invalid interval step value "'.concat(j,'" for ').concat(L.type));return U}}(P,k),J=function(j,L){if(L){var U=j[0];j=j.filter(function(W){return W%L==U%L||W===U})}return j}(I,T);return J}).flat(),k))),E=_e(F,k);if(E!==void 0)throw new Error('Value "'.concat(E,'" out of range for ').concat(k.type));return F.length===k.total?[]:F}(h,oe[O])});throw new Error("Invalid cron string format")}(e),B=function(M){return M[3].length>0?"year":M[2].length>0?"month":M[4].length>0?"week":M[1].length>0?"day":M[0].length>0?"hour":"minute"}(x);y(B),i(x[0]),l(x[1]),c(x[2]),b(x[3]),p(x[4])}catch(M){v=!0}}v&&(n.current=e,o(!0),Ve(a,s))}function He(e,o,a,t,n,u,s){if(e==="reboot")return"@reboot";var d=function(i,l){return i.map(function(c,b){var p=oe[b];return Ue(We(c,p),p,l)})}([e!=="minute"&&u?u:[],e!=="minute"&&e!=="hour"&&n?n:[],e!=="year"&&e!=="month"||!a?[]:a,e==="year"&&o?o:[],e!=="year"&&e!=="month"&&e!=="week"||!t?[]:t],s);return d.join(" ")}function Ue(e,o,a,t,n){var u="";if(function(d,i){return d.length===i.max-i.min+1}(e,o)||e.length===0)u="*";else{var s=function(d){if(d.length>2){var i=d[1]-d[0];if(i>1)return i}}(e);u=s&&function(d,i){for(var l=1;l<d.length;l++){var c=d[l-1];if(d[l]-c!==i)return!1}return!0}(e,s)?function(d,i,l){var c=Je(d),b=$e(d),p=d.length===(b-c)/l+1;return!!(c===i.min&&b+l>i.max&&p)}(e,o,s)?"*/".concat(s):"".concat(ne(Je(e),o,a,t,n),"-").concat(ne($e(e),o,a,t,n),"/").concat(s):function(d){var i=[],l=null;return d.forEach(function(c,b,p){c!==p[b+1]-1?l!==null?(i.push([l,c]),l=null):i.push(c):l===null&&(l=c)}),i}(e).map(function(d){return Array.isArray(d)?"".concat(ne(d[0],o,a,t,n),"-").concat(ne(d[1],o,a,t,n)):ne(d,o,a,t,n)}).join(",")}return u}function ne(e,o,a,t,n){var u=e.toString(),s=o.type,d=o.alt,i=o.min,l=t&&(t===!0||t.includes(s)),c=n==="24-hour-clock"&&(s==="hours"||s==="minutes");if(a&&s==="week-days"||a&&s==="months"?u=d[e-i]:e<10&&(l||c)&&(u=u.padStart(2,"0")),s==="hours"&&n==="12-hour-clock"){var b=e>=12?"PM":"AM",p=e%12||12;p<10&&l&&(p=p.toString().padStart(2,"0")),u="".concat(p).concat(b)}return u}function We(e,o){var a=ye(Le(ze(e,o)));if(a.length===0)return a;var t=_e(a,o);if(t!==void 0)throw new Error('Value "'.concat(t,'" out of range for ').concat(o.type));return a}function ze(e,o){return o.type==="week-days"&&(e=e.map(function(a){return a===7?0:a})),e}function _e(e,o){var a=e[0],t=e[e.length-1];return a<o.min?a:t>o.max?t:void 0}function Je(e){return e[0]}function $e(e){return e[e.length-1]}function ce(e){var o=e.value,a=e.grid,t=a===void 0||a,n=e.optionsList,u=e.setValue,s=e.locale,d=e.className,i=e.humanizeLabels,l=e.disabled,c=e.readOnly,b=e.leadingZero,p=e.clockFormat,y=e.period,v=e.unit,m=e.periodicityOnDoubleClick,x=e.mode,B=Ie(e,["value","grid","optionsList","setValue","locale","className","humanizeLabels","disabled","readOnly","leadingZero","clockFormat","period","unit","periodicityOnDoubleClick","mode"]),M=f.useMemo(function(){if(o&&Array.isArray(o))return o.map(function(D){return D.toString()})},[o]),g=f.useMemo(function(){return n?n.map(function(D,P){return{value:(v.min===0?P:P+1).toString(),label:D}}):he([],Array(v.total),!0).map(function(D,P){var T=v.min===0?P:P+1;return{value:T.toString(),label:ne(T,v,i,b,p)}})},[n,b,i,p]),h=JSON.stringify(s),O=f.useCallback(function(D){var P=D.value;if(!o||o[0]!==Number(P))return r.jsx(r.Fragment,{});var T=Ue(We(o,v),v,i,b,p),J=T.match(/^\*\/([0-9]+),?/)||[];return r.jsx("div",{children:J[1]?"".concat(s.everyText||A.everyText," ").concat(J[1]):T})},[o,h,i,b,p]),w=f.useCallback(function(D){var P=Array.isArray(D)?ye(D):[D],T=P;o&&(T=x==="single"?[]:he([],o,!0),P.forEach(function(J){var j=Number(J);T=o.some(function(L){return L===j})?T.filter(function(L){return L!==j}):ye(he(he([],T,!0),[j],!1))})),T.length===v.total?u([]):u(T)},[u,o]),k=f.useCallback(function(D){if(D!==0&&D!==1){for(var P=v.total+v.min,T=[],J=v.min;J<P;J++)J%D==0&&T.push(J);var j=o&&T&&o.length===T.length&&o.every(function(U,W){return U===T[W]}),L=T.length===g.length;u(L||j?[]:T)}else u([])},[o,g,u]),F=f.useRef([]),E=f.useCallback(function(D){if(!c){var P=F.current;P.push({time:new Date().getTime(),value:Number(D)});var T=window.setTimeout(function(){m&&P.length>1&&P[P.length-1].time-P[P.length-2].time<300?P[P.length-1].value===P[P.length-2].value?k(Number(D)):w([P[P.length-2].value,P[P.length-1].value]):w(Number(D)),F.current=[]},300);return function(){window.clearTimeout(T)}}},[F,w,k,c,m]),q=f.useCallback(function(){c||u([])},[u,c]),I=f.useMemo(function(){var D;return Z(((D={"react-js-cron-select":!0,"react-js-cron-custom-select":!0})["".concat(d,"-select")]=!!d,D))},[d]),H=f.useMemo(function(){var D;return Z(((D={"react-js-cron-select-dropdown":!0})["react-js-cron-select-dropdown-".concat(v.type)]=!0,D["react-js-cron-custom-select-dropdown"]=!0,D["react-js-cron-custom-select-dropdown-".concat(v.type)]=!0,D["react-js-cron-custom-select-dropdown-minutes-large"]=v.type==="minutes"&&y!=="hour"&&y!=="day",D["react-js-cron-custom-select-dropdown-minutes-medium"]=v.type==="minutes"&&(y==="day"||y==="hour"),D["react-js-cron-custom-select-dropdown-hours-twelve-hour-clock"]=v.type==="hours"&&p==="12-hour-clock",D["react-js-cron-custom-select-dropdown-grid"]=!!t,D["".concat(d,"-select-dropdown")]=!!d,D["".concat(d,"-select-dropdown-").concat(v.type)]=!!d,D))},[d,t,p,y]);return r.jsx(C.Select,_({mode:x!=="single"||m?"multiple":void 0,allowClear:!c,virtual:!1,open:!c&&void 0,value:M,onClear:q,tagRender:O,className:I,popupClassName:H,options:g,showSearch:!1,showArrow:!c,menuItemSelectedIcon:null,dropdownMatchSelectWidth:!1,onSelect:E,onDeselect:E,disabled:l,dropdownAlign:v.type!=="minutes"&&v.type!=="hours"||y==="day"||y==="hour"?void 0:{points:["tr","br"]},"data-testid":"custom-select-".concat(v.type)},B))}function At(e){var o=e.value,a=e.setValue,t=e.locale,n=e.className,u=e.disabled,s=e.readOnly,d=e.leadingZero,i=e.clockFormat,l=e.period,c=e.periodicityOnDoubleClick,b=e.mode,p=f.useMemo(function(){var y;return Z(((y={"react-js-cron-field":!0,"react-js-cron-hours":!0})["".concat(n,"-field")]=!!n,y["".concat(n,"-hours")]=!!n,y))},[n]);return r.jsxs("div",_({className:p},{children:[t.prefixHours!==""&&r.jsx("span",{children:t.prefixHours||A.prefixHours}),r.jsx(ce,{placeholder:t.emptyHours||A.emptyHours,value:o,unit:oe[1],setValue:a,locale:t,className:n,disabled:u,readOnly:s,leadingZero:d,clockFormat:i,period:l,periodicityOnDoubleClick:c,mode:b})]}))}function Pt(e){var o=e.value,a=e.setValue,t=e.locale,n=e.className,u=e.disabled,s=e.readOnly,d=e.leadingZero,i=e.clockFormat,l=e.period,c=e.periodicityOnDoubleClick,b=e.mode,p=f.useMemo(function(){var y;return Z(((y={"react-js-cron-field":!0,"react-js-cron-minutes":!0})["".concat(n,"-field")]=!!n,y["".concat(n,"-minutes")]=!!n,y))},[n]);return r.jsxs("div",_({className:p},{children:[l==="hour"?t.prefixMinutesForHourPeriod!==""&&r.jsx("span",{children:t.prefixMinutesForHourPeriod||A.prefixMinutesForHourPeriod}):t.prefixMinutes!==""&&r.jsx("span",{children:t.prefixMinutes||A.prefixMinutes}),r.jsx(ce,{placeholder:l==="hour"?t.emptyMinutesForHourPeriod||A.emptyMinutesForHourPeriod:t.emptyMinutes||A.emptyMinutes,value:o,unit:oe[0],setValue:a,locale:t,className:n,disabled:u,readOnly:s,leadingZero:d,clockFormat:i,period:l,periodicityOnDoubleClick:c,mode:b}),l==="hour"&&t.suffixMinutesForHourPeriod!==""&&r.jsx("span",{children:t.suffixMinutesForHourPeriod||A.suffixMinutesForHourPeriod})]}))}function Bt(e){var o=e.value,a=e.setValue,t=e.locale,n=e.className,u=e.weekDays,s=e.disabled,d=e.readOnly,i=e.leadingZero,l=e.period,c=e.periodicityOnDoubleClick,b=e.mode,p=!u||u.length===0,y=f.useMemo(function(){var x;return Z(((x={"react-js-cron-field":!0,"react-js-cron-month-days":!0,"react-js-cron-month-days-placeholder":!p})["".concat(n,"-field")]=!!n,x["".concat(n,"-month-days")]=!!n,x))},[n,p]),v=JSON.stringify(t),m=f.useMemo(function(){return p?t.emptyMonthDays||A.emptyMonthDays:t.emptyMonthDaysShort||A.emptyMonthDaysShort},[p,v]);return!d||o&&o.length>0||(!o||o.length===0)&&(!u||u.length===0)?r.jsxs("div",_({className:y},{children:[t.prefixMonthDays!==""&&r.jsx("span",{children:t.prefixMonthDays||A.prefixMonthDays}),r.jsx(ce,{placeholder:m,value:o,setValue:a,unit:oe[2],locale:t,className:n,disabled:s,readOnly:d,leadingZero:i,period:l,periodicityOnDoubleClick:c,mode:b})]})):null}function Tt(e){var o=e.value,a=e.setValue,t=e.locale,n=e.className,u=e.humanizeLabels,s=e.disabled,d=e.readOnly,i=e.period,l=e.periodicityOnDoubleClick,c=e.mode,b=t.months||A.months,p=f.useMemo(function(){var y;return Z(((y={"react-js-cron-field":!0,"react-js-cron-months":!0})["".concat(n,"-field")]=!!n,y["".concat(n,"-months")]=!!n,y))},[n]);return r.jsxs("div",_({className:p},{children:[t.prefixMonths!==""&&r.jsx("span",{children:t.prefixMonths||A.prefixMonths}),r.jsx(ce,{placeholder:t.emptyMonths||A.emptyMonths,optionsList:b,grid:!1,value:o,unit:_(_({},oe[3]),{alt:t.altMonths||A.altMonths}),setValue:a,locale:t,className:n,humanizeLabels:u,disabled:s,readOnly:d,period:i,periodicityOnDoubleClick:l,mode:c})]}))}function Nt(e){var o=e.value,a=e.setValue,t=e.locale,n=e.className,u=e.disabled,s=e.readOnly,d=e.shortcuts,i=e.allowedPeriods,l=[];i.includes("year")&&l.push({value:"year",label:t.yearOption||A.yearOption}),i.includes("month")&&l.push({value:"month",label:t.monthOption||A.monthOption}),i.includes("week")&&l.push({value:"week",label:t.weekOption||A.weekOption}),i.includes("day")&&l.push({value:"day",label:t.dayOption||A.dayOption}),i.includes("hour")&&l.push({value:"hour",label:t.hourOption||A.hourOption}),i.includes("minute")&&l.push({value:"minute",label:t.minuteOption||A.minuteOption}),i.includes("reboot")&&d&&(d===!0||d.includes("@reboot"))&&l.push({value:"reboot",label:t.rebootOption||A.rebootOption});var c=f.useCallback(function(v){s||a(v)},[a,s]),b=f.useMemo(function(){var v;return Z(((v={"react-js-cron-field":!0,"react-js-cron-period":!0})["".concat(n,"-field")]=!!n,v["".concat(n,"-period")]=!!n,v))},[n]),p=f.useMemo(function(){var v;return Z(((v={"react-js-cron-select":!0,"react-js-cron-select-no-prefix":t.prefixPeriod===""})["".concat(n,"-select")]=!!n,v))},[n,t.prefixPeriod]),y=f.useMemo(function(){var v;return Z(((v={"react-js-cron-select-dropdown":!0,"react-js-cron-select-dropdown-period":!0})["".concat(n,"-select-dropdown")]=!!n,v["".concat(n,"-select-dropdown-period")]=!!n,v))},[n]);return r.jsxs("div",_({className:b},{children:[t.prefixPeriod!==""&&r.jsx("span",{children:t.prefixPeriod||A.prefixPeriod}),r.jsx(C.Select,{defaultValue:o,value:o,onChange:c,options:l,className:p,popupClassName:y,disabled:u,showArrow:!s,open:!s&&void 0,"data-testid":"select-period"},JSON.stringify(t))]}))}function Ft(e){var o=e.value,a=e.setValue,t=e.locale,n=e.className,u=e.humanizeLabels,s=e.monthDays,d=e.disabled,i=e.readOnly,l=e.period,c=e.periodicityOnDoubleClick,b=e.mode,p=t.weekDays||A.weekDays,y=l==="week"||!s||s.length===0,v=f.useMemo(function(){var g;return Z(((g={"react-js-cron-field":!0,"react-js-cron-week-days":!0,"react-js-cron-week-days-placeholder":!y})["".concat(n,"-field")]=!!n,g["".concat(n,"-week-days")]=!!n,g))},[n,y]),m=JSON.stringify(t),x=f.useMemo(function(){return y?t.emptyWeekDays||A.emptyWeekDays:t.emptyWeekDaysShort||A.emptyWeekDaysShort},[y,m]),B=l==="week"||!i||o&&o.length>0||(!o||o.length===0)&&(!s||s.length===0),M=!i||s&&s.length>0||(!s||s.length===0)&&(!o||o.length===0);return B?r.jsxs("div",_({className:v},{children:[t.prefixWeekDays!==""&&(l==="week"||!M)&&r.jsx("span",{children:t.prefixWeekDays||A.prefixWeekDays}),t.prefixWeekDaysForMonthAndYearPeriod!==""&&l!=="week"&&M&&r.jsx("span",{children:t.prefixWeekDaysForMonthAndYearPeriod||A.prefixWeekDaysForMonthAndYearPeriod}),r.jsx(ce,{placeholder:x,optionsList:p,grid:!1,value:o,unit:_(_({},oe[4]),{alt:t.altWeekDays||A.altWeekDays}),setValue:a,locale:t,className:n,humanizeLabels:u,disabled:d,readOnly:i,period:l,periodicityOnDoubleClick:c,mode:b})]})):null}function Et(e){var o=e.clearButton,a=o===void 0||o,t=e.clearButtonProps,n=t===void 0?{}:t,u=e.clearButtonAction,s=u===void 0?"fill-with-every":u,d=e.locale,i=d===void 0?A:d,l=e.value,c=l===void 0?"":l,b=e.setValue,p=e.displayError,y=p===void 0||p,v=e.onError,m=e.className,x=e.defaultPeriod,B=x===void 0?"day":x,M=e.allowEmpty,g=M===void 0?"for-default-value":M,h=e.humanizeLabels,O=h===void 0||h,w=e.humanizeValue,k=w!==void 0&&w,F=e.disabled,E=F!==void 0&&F,q=e.readOnly,I=q!==void 0&&q,H=e.leadingZero,D=H!==void 0&&H,P=e.shortcuts,T=P===void 0?["@yearly","@annually","@monthly","@weekly","@daily","@midnight","@hourly"]:P,J=e.clockFormat,j=e.periodicityOnDoubleClick,L=j===void 0||j,U=e.mode,W=U===void 0?"multiple":U,ue=e.allowedDropdowns,Y=ue===void 0?["period","months","month-days","week-days","hours","minutes"]:ue,ae=e.allowedPeriods,_t=ae===void 0?["year","month","week","day","hour","minute","reboot"]:ae,se=f.useRef(c),Pe=f.useRef(B),Qe=f.useState(),R=Qe[0],ge=Qe[1],Re=f.useState(),de=Re[0],be=Re[1],et=f.useState(),xe=et[0],ke=et[1],tt=f.useState(),pe=tt[0],we=tt[1],ot=f.useState(),Ce=ot[0],Se=ot[1],rt=f.useState(),Oe=rt[0],Me=rt[1],nt=f.useState(!1),Be=nt[0],fe=nt[1],at=f.useState(!1),De=at[0],st=at[1],Jt=function(V){var K=f.useRef(V);return f.useEffect(function(){K.current=V},[V]),K.current}(De),lt=JSON.stringify(i);f.useEffect(function(){qe(c,fe,v,g,se,!0,i,T,Me,Se,be,ke,we,ge)},[]),f.useEffect(function(){c!==se.current&&qe(c,fe,v,g,se,!1,i,T,Me,Se,be,ke,we,ge)},[c,se,lt,g,T]),f.useEffect(function(){if(!(R||Oe||xe||de||pe||Ce)||De||Jt)De&&st(!1);else{var V=R||Pe.current,K=He(V,xe,de,pe,Ce,Oe,k);b(K,{selectedPeriod:V}),se.current=K,v&&v(void 0),fe(!1)}},[R,de,xe,pe,Ce,Oe,k,De]);var it=f.useCallback(function(){be(void 0),ke(void 0),we(void 0),Se(void 0),Me(void 0);var V="",K=R!=="reboot"&&R?R:Pe.current;K!==R&&ge(K),s==="fill-with-every"&&(V=He(K,void 0,void 0,void 0,void 0,void 0)),b(V,{selectedPeriod:K}),se.current=V,st(!0),g==="never"&&s==="empty"?(fe(!0),Ve(v,i)):(v&&v(void 0),fe(!1))},[R,b,v,s]),$t=f.useMemo(function(){var V;return Z(((V={"react-js-cron":!0,"react-js-cron-error":Be&&y,"react-js-cron-disabled":E,"react-js-cron-read-only":I})["".concat(m)]=!!m,V["".concat(m,"-error")]=Be&&y&&!!m,V["".concat(m,"-disabled")]=E&&!!m,V["".concat(m,"-read-only")]=I&&!!m,V))},[m,Be,y,E,I]),Te=n.className,ct=Ie(n,["className"]),ut=f.useMemo(function(){var V;return Z(((V={"react-js-cron-clear-button":!0})["".concat(m,"-clear-button")]=!!m,V["".concat(Te)]=!!Te,V))},[m,Te]),Zt=JSON.stringify(ct),dt=f.useMemo(function(){return a&&!I?r.jsx(C.Button,_({className:ut,danger:!0,type:"primary",disabled:E},ct,{onClick:it},{children:i.clearButtonText||A.clearButtonText})):null},[a,I,lt,ut,E,Zt,it]),z=R||Pe.current;return r.jsxs("div",_({className:$t},{children:[Y.includes("period")&&r.jsx(Nt,{value:z,setValue:ge,locale:i,className:m,disabled:E,readOnly:I,shortcuts:T,allowedPeriods:_t}),z==="reboot"?dt:r.jsxs(r.Fragment,{children:[z==="year"&&Y.includes("months")&&r.jsx(Tt,{value:xe,setValue:ke,locale:i,className:m,humanizeLabels:O,disabled:E,readOnly:I,period:z,periodicityOnDoubleClick:L,mode:W}),(z==="year"||z==="month")&&Y.includes("month-days")&&r.jsx(Bt,{value:de,setValue:be,locale:i,className:m,weekDays:pe,disabled:E,readOnly:I,leadingZero:D,period:z,periodicityOnDoubleClick:L,mode:W}),(z==="year"||z==="month"||z==="week")&&Y.includes("week-days")&&r.jsx(Ft,{value:pe,setValue:we,locale:i,className:m,humanizeLabels:O,monthDays:de,disabled:E,readOnly:I,period:z,periodicityOnDoubleClick:L,mode:W}),r.jsxs("div",{children:[z!=="minute"&&z!=="hour"&&Y.includes("hours")&&r.jsx(At,{value:Ce,setValue:Se,locale:i,className:m,disabled:E,readOnly:I,leadingZero:D,clockFormat:J,period:z,periodicityOnDoubleClick:L,mode:W}),z!=="minute"&&Y.includes("minutes")&&r.jsx(Pt,{value:Oe,setValue:Me,locale:i,period:z,className:m,disabled:E,readOnly:I,leadingZero:D,clockFormat:J,periodicityOnDoubleClick:L,mode:W}),dt]})]})]}))}const It={"zh-CN":{everyText:"每",emptyMonths:"每月",emptyMonthDays:"每日(月)",emptyMonthDaysShort:"每日",emptyWeekDays:"每天(周)",emptyWeekDaysShort:"每天(周)",emptyHours:"每小时",emptyMinutes:"每分钟",emptyMinutesForHourPeriod:"每",yearOption:"年",monthOption:"月",weekOption:"周",dayOption:"天",hourOption:"小时",minuteOption:"分钟",rebootOption:"重启",prefixPeriod:"每",prefixMonths:"的",prefixMonthDays:"的",prefixWeekDays:"的",prefixWeekDaysForMonthAndYearPeriod:"或者",prefixHours:"的",prefixMinutes:":",prefixMinutesForHourPeriod:"的",suffixMinutesForHourPeriod:"分钟",errorInvalidCron:"不符合 cron 规则的表达式",clearButtonText:"清空",weekDays:["周日","周一","周二","周三","周四","周五","周六"],months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],altWeekDays:["周日","周一","周二","周三","周四","周五","周六"],altMonths:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]}},Ze=[{value:"none",text:"No repeat"},{value:6e4,text:"By minute",unitText:"Minutes"},{value:36e5,text:"By hour",unitText:"Hours"},{value:864e5,text:"By day",unitText:"Days"},{value:6048e5,text:"By week",unitText:"Weeks"},{value:"cron",text:"Advanced"}];function Ge(e){return Ze.filter(a=>!isNaN(+a.value)).reverse().find(a=>!(e%a.value))}function jt(e){if(!e)return"none";if(e&&!isNaN(+e)){const o=Ge(e);return o?o.value:"none"}if(typeof e=="string")return"cron"}function Lt({value:e,onChange:o}){const{t:a}=Q(),t=Ge(e);return r.jsx(C.InputNumber,{value:e/t.value,onChange:n=>o(n*t.value),min:1,addonBefore:a("Every"),addonAfter:a(t.unitText),className:"auto-width"})}function Vt({value:e=null,onChange:o}){const{t:a}=Q(),t=jt(e),n=f.useCallback(s=>{if(s==="none"){o(null);return}if(s==="cron"){o("0 * * * * *");return}o(s)},[o]),u=It[localStorage.getItem("TACHYBASE_LOCALE")||"en-US"];return r.jsxs("fieldset",{className:S.css`
1
+ (function(N,C){typeof exports=="object"&&typeof module!="undefined"?C(exports,require("@tachybase/client"),require("react/jsx-runtime"),require("react"),require("@tachybase/schema"),require("@tego/client"),require("@ant-design/icons"),require("antd"),require("react-i18next")):typeof define=="function"&&define.amd?define(["exports","@tachybase/client","react/jsx-runtime","react","@tachybase/schema","@tego/client","@ant-design/icons","antd","react-i18next"],C):(N=typeof globalThis!="undefined"?globalThis:N||self,C(N["@tachybase/module-backup"]={},N["@tachybase/client"],N.jsxRuntime,N.react,N["@tachybase/schema"],N["@tego/client"],N["@ant-design/icons"],N.antd,N["react-i18next"]))})(this,function(N,C,r,f,le,Ae,re,S,X){"use strict";var Gt=Object.defineProperty,Yt=Object.defineProperties;var Kt=Object.getOwnPropertyDescriptors;var pt=Object.getOwnPropertySymbols;var Xt=Object.prototype.hasOwnProperty,Qt=Object.prototype.propertyIsEnumerable;var ft=(N,C,r)=>C in N?Gt(N,C,{enumerable:!0,configurable:!0,writable:!0,value:r}):N[C]=r,$=(N,C)=>{for(var r in C||(C={}))Xt.call(C,r)&&ft(N,r,C[r]);if(pt)for(var r of pt(C))Qt.call(C,r)&&ft(N,r,C[r]);return N},te=(N,C)=>Yt(N,Kt(C));var G=(N,C,r)=>new Promise((f,le)=>{var Ae=X=>{try{S(r.next(X))}catch(ee){le(ee)}},re=X=>{try{S(r.throw(X))}catch(ee){le(ee)}},S=X=>X.done?f(X.value):Promise.resolve(X.value).then(Ae,re);S((r=r.apply(N,C)).next())});var ee=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{},me={exports:{}},mt=me.exports,Ne;function ht(){return Ne||(Ne=1,function(e,o){(function(a,t){t()})(mt,function(){function a(l,c){return typeof c=="undefined"?c={autoBom:!1}:typeof c!="object"&&(console.warn("Deprecated: Expected third argument to be a object"),c={autoBom:!c}),c.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(l.type)?new Blob(["\uFEFF",l],{type:l.type}):l}function t(l,c,b){var p=new XMLHttpRequest;p.open("GET",l),p.responseType="blob",p.onload=function(){i(p.response,c,b)},p.onerror=function(){console.error("could not download file")},p.send()}function n(l){var c=new XMLHttpRequest;c.open("HEAD",l,!1);try{c.send()}catch(b){}return 200<=c.status&&299>=c.status}function u(l){try{l.dispatchEvent(new MouseEvent("click"))}catch(b){var c=document.createEvent("MouseEvents");c.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),l.dispatchEvent(c)}}var s=typeof window=="object"&&window.window===window?window:typeof self=="object"&&self.self===self?self:typeof ee=="object"&&ee.global===ee?ee:void 0,d=s.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),i=s.saveAs||(typeof window!="object"||window!==s?function(){}:"download"in HTMLAnchorElement.prototype&&!d?function(l,c,b){var p=s.URL||s.webkitURL,y=document.createElement("a");c=c||l.name||"download",y.download=c,y.rel="noopener",typeof l=="string"?(y.href=l,y.origin===location.origin?u(y):n(y.href)?t(l,c,b):u(y,y.target="_blank")):(y.href=p.createObjectURL(l),setTimeout(function(){p.revokeObjectURL(y.href)},4e4),setTimeout(function(){u(y)},0))}:"msSaveOrOpenBlob"in navigator?function(l,c,b){if(c=c||l.name||"download",typeof l!="string")navigator.msSaveOrOpenBlob(a(l,b),c);else if(n(l))t(l,c,b);else{var p=document.createElement("a");p.href=l,p.target="_blank",setTimeout(function(){u(p)})}}:function(l,c,b,p){if(p=p||open("","_blank"),p&&(p.document.title=p.document.body.innerText="downloading..."),typeof l=="string")return t(l,c,b);var y=l.type==="application/octet-stream",v=/constructor/i.test(s.HTMLElement)||s.safari,m=/CriOS\/[\d]+/.test(navigator.userAgent);if((m||y&&v||d)&&typeof FileReader!="undefined"){var x=new FileReader;x.onloadend=function(){var g=x.result;g=m?g:g.replace(/^data:[^;]*;/,"data:attachment/file;"),p?p.location.href=g:location=g,p=null},x.readAsDataURL(l)}else{var B=s.URL||s.webkitURL,M=B.createObjectURL(l);p?p.location=M:location.href=M,p=null,setTimeout(function(){B.revokeObjectURL(M)},4e4)}});s.saveAs=i.saveAs=i,e.exports=i})}(me)),me.exports}var yt=ht();const ie="backup";function Q(){return X.useTranslation([ie,"core"],{nsMode:"fallback"})}const vt=e=>C.tval(e,{ns:ie}),gt=({inProgress:e=!1,status:o,progress:a=0,currentStep:t,downloadProgress:n,showDownloadText:u=!0,width:s="180px"})=>{const{t:d}=Q();if(e||o==="in_progress"){const i=a!=null?a:0,l=t||d("Backing up");return r.jsxs("div",{style:{width:s},children:[r.jsx(S.Progress,{percent:i,status:"active",showInfo:!1}),u&&r.jsxs("div",{style:{fontSize:"12px",color:"rgba(0, 0, 0, 0.45)",marginTop:"4px",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:[l," ",i>0?`${i}%`:""]})]})}return o==="error"?r.jsx("div",{style:{width:s},children:r.jsx(S.Progress,{percent:0,status:"exception",showInfo:!1})}):o==="ok"?r.jsx("div",{style:{width:s},children:r.jsx(S.Progress,{percent:100,status:"success",showInfo:!1})}):n!==void 0&&n>=0?r.jsxs("div",{style:{width:s},children:[r.jsx(S.Progress,{percent:n,status:"active",showInfo:!1}),u&&r.jsxs("div",{style:{fontSize:"12px",color:"rgba(0, 0, 0, 0.45)",marginTop:"4px",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:[d("Downloading")," ",n,"%"]})]},`download-${n}`):null};function bt({dataSource:e,onDataSourceUpdate:o,onComplete:a,messageType:t="backup:progress",timeout:n=5*60*1e3,onTimeout:u}){const s=C.useApp(),d=f.useRef(a),i=f.useRef(u),l=f.useRef(e),c=f.useRef(!1),b=f.useRef(new Map),p=f.useRef(new Map);f.useEffect(()=>{d.current=a,i.current=u,l.current=e},[a,u,e]),f.useEffect(()=>{if(!s.ws||!s.ws.enabled)return;const m=le.autorun(()=>{if(s.ws.connected&&!c.current){const x=s.apiClient.auth.getToken();if(x){const B={type:"signIn",payload:{token:x}};s.ws.send(JSON.stringify(B)),c.current=!0}}else s.ws.connected||(c.current=!1)});return()=>{m(),c.current=!1}},[s.ws,s.apiClient]);const y=f.useCallback(m=>{const x=p.current.get(m);x&&clearTimeout(x),b.current.set(m,Date.now());const B=setTimeout(()=>{var g;const M=b.current.get(m);M&&Date.now()-M>=n&&(o(h=>h.map(O=>O.name===m&&(O.inProgress||O.status==="in_progress")?(console.warn(`[BackupProgress] Backup task ${m} timed out after ${n}ms`),te($({},O),{inProgress:!1,status:"error",progress:O.progress||0,currentStep:"Timeout: No progress update received"})):O)),p.current.delete(m),b.current.delete(m),(g=i.current)==null||g.call(i,m))},n);p.current.set(m,B)},[n,o]),v=f.useCallback(m=>{const x=p.current.get(m);x&&(clearTimeout(x),p.current.delete(m)),b.current.delete(m)},[]);f.useEffect(()=>{e.forEach(m=>{if((m.inProgress||m.status==="in_progress")&&m.name){if(m.progress>=100){v(m.name);return}p.current.has(m.name)||y(m.name)}else m.name&&p.current.has(m.name)&&v(m.name)})},[e,y,v]),f.useEffect(()=>{if(!s.ws)return;const m=x=>{var B;try{const M=JSON.parse(x.data);if((M==null?void 0:M.type)===t){if(!M.payload){console.warn("[BackupProgress] Received message without payload:",M);return}const{fileName:g,progress:h}=M.payload;if(!g||!h){console.warn("[BackupProgress] Invalid message format:",M.payload);return}if(h.percent>=100){v(g),(B=d.current)==null||B.call(d,g);return}o(O=>O.map(w=>w.name===g?(y(g),te($({},w),{inProgress:!0,status:"in_progress",progress:h.percent,currentStep:h.currentStep})):w))}}catch(M){}};return s.ws.on("message",m),()=>{s.ws.off("message",m),p.current.forEach(x=>{clearTimeout(x)}),p.current.clear(),b.current.clear()}},[s.ws,t,o,y,v])}function xt(e){const o=C.useAPIClient(),[a,t]=f.useState({}),n=f.useCallback(s=>G(null,null,function*(){const d=s.name;t(i=>te($({},i),{[d]:0})),e!=null&&e.onDownloadStart&&e.onDownloadStart(d);try{const i=yield o.request({url:"backupFiles:download",method:"get",params:{filterByTk:d},responseType:"blob",onDownloadProgress:c=>{if(c.total){const b=Math.round(c.loaded*100/c.total);t(p=>te($({},p),{[d]:b}))}}});t(c=>{const b=$({},c);return delete b[d],b});const l=(i==null?void 0:i.data)||i;e!=null&&e.onDownloadComplete&&e.onDownloadComplete(d,l)}catch(i){if(t(l=>{const c=$({},l);return delete c[d],c}),e!=null&&e.onDownloadError)e.onDownloadError(d,i);else throw i}}),[o,e]),u=f.useCallback(s=>{t(s?d=>{const i=$({},d);return delete i[s],i}:{})},[]);return{downloadProgress:a,handleDownload:n,clearDownloadProgress:u}}const{Dragger:kt}=S.Upload;function wt(e){const o=t=>{var n;(n=e.onChange)==null||n.call(e,t)},a=C.useAPIClient();return te($({},e),{customRequest({action:t,data:n,file:u,filename:s,headers:d,onError:i,onProgress:l,onSuccess:c,withCredentials:b}){const p=new FormData;return n&&Object.keys(n).forEach(y=>{p.append(y,n[y])}),p.append(s,u),a.axios.post(t,p,{withCredentials:b,headers:d,onUploadProgress:({total:y,loaded:v})=>{l({percent:Math.round(v/y*100).toFixed(2)},u)}}).then(({data:y})=>{c(y,u)}).catch(i).finally(()=>{}),{abort(){}}},onChange:o})}const Fe=e=>{const{collectionsData:o}=e,{t:a}=Q(),[t,n]=f.useState(!1),[u,s]=f.useState(o);f.useEffect(()=>{s(o)},[o]);const d=C.useAPIClient(),i=C.useCompile(),l=f.useMemo(()=>d.resource("backupFiles"),[d]),c=()=>G(null,null,function*(){if(e.isBackup){const m=yield l.dumpableCollections();s(m==null?void 0:m.data),n(!0)}n(!0)}),b=()=>{n(!1)},p=()=>{n(!1)},y=[{title:a("Collection"),dataIndex:"collection",key:"collection",render:(m,x)=>{const B=i(x.title);return x.name===B?B:r.jsxs("div",{children:[x.name," ",r.jsxs("span",{style:{color:"rgba(0, 0, 0, 0.3)",fontSize:"0.9em"},children:["(",i(x.title),")"]})]})}},{title:a("Origin"),dataIndex:"origin",key:"origin",width:"50%"}],v=Object.keys(u||{}).map(m=>{var x;return{key:m,label:a(`${m}.title`),children:r.jsxs(r.Fragment,{children:[r.jsx(S.Alert,{style:{marginBottom:16},message:a(`${m}.description`)}),r.jsx(S.Table,{pagination:C.withAutoQuickJumper({pageSize:100,total:(x=u[m])==null?void 0:x.length}),bordered:!0,size:"small",dataSource:u[m],columns:y,scroll:{y:400}})]})}});return r.jsxs(r.Fragment,{children:[r.jsx("a",{onClick:c,children:a("Learn more")}),r.jsx(S.Modal,{title:a("Backup instructions"),width:"80vw",open:t,footer:null,onOk:b,onCancel:p,children:r.jsx(S.Tabs,{defaultActiveKey:"required",items:v})})]})},Ee=({ButtonComponent:e=S.Button,title:o,upload:a=!1,fileData:t})=>{const{t:n}=Q(),[u,s]=f.useState(["required"]),[d,i]=f.useState(!1),[l,c]=f.useState(null),[b,p]=f.useState(!1),y=C.useAPIClient(),v=f.useMemo(()=>y.resource("backupFiles"),[y]),[m,x]=f.useState([]),B=u.length>0&&u.length<m.length,M=m.length===u.length;f.useEffect(()=>{const k=Object.keys((l==null?void 0:l.dumpableCollectionsGroupByGroup)||[]).map(F=>({value:F,label:n(`${F}.title`),disabled:["required","skipped"].includes(F)}));x(k),k.length>0&&s(k.map(F=>F.value))},[l,n]);const g=()=>G(null,null,function*(){var k,F,E;if(i(!0),!a){p(!0);const{data:q}=yield v.get({filterByTk:t.name}),I=Object.keys(((F=(k=q==null?void 0:q.data)==null?void 0:k.meta)==null?void 0:F.dumpableCollectionsGroupByGroup)||[]).map(H=>({value:H,label:n(`${H}.title`),disabled:["required","skipped"].includes(H)}));x(I),c((E=q==null?void 0:q.data)==null?void 0:E.meta),I.length>0&&s(I.map(H=>H.value)),p(!1)}}),h=()=>{v.restore({values:{dataTypes:u,filterByTk:t==null?void 0:t.name,key:l==null?void 0:l.key}}),i(!1)},O=()=>{i(!1),c(null),m.length>0?s(m.map(k=>k.value)):s(["required"])},w=k=>{s(k.target.checked?m.map(F=>F.value):["required"])};return r.jsxs(r.Fragment,{children:[r.jsx(e,{onClick:g,children:o}),r.jsx(S.Modal,{title:n("Restore"),width:800,footer:a&&!l?null:void 0,open:d,onOk:h,onCancel:O,children:r.jsxs(S.Spin,{spinning:b,children:[a&&!l&&r.jsx(St,{setRestoreData:c}),(!a||l)&&[r.jsxs("strong",{style:{fontWeight:600,display:"block",margin:"16px 0 8px"},children:[n("Select the data to be restored")," (",r.jsx(Fe,{collectionsData:l==null?void 0:l.dumpableCollectionsGroupByGroup}),"):"]},"info"),r.jsx("div",{style:{lineHeight:2,marginBottom:8},children:r.jsxs(Ae.FormItem,{children:[r.jsx(C.Checkbox.Group,{options:m,style:{flexDirection:"column"},value:u,onChange:k=>s(k)}),r.jsx(S.Divider,{}),r.jsx(C.Checkbox,{indeterminate:B,onChange:w,checked:M,children:n("Check all")})]})},"dataType")]]})})]})},Ct=({ButtonComponent:e=S.Button,refresh:o})=>{const{t:a}=Q(),[t,n]=f.useState(!1),[u,s]=f.useState(["required"]),d=C.useAPIClient(),[i,l]=f.useState([]),c=["required","user","third-party","custom"],b=u.length>0&&u.length<i.filter(h=>h.value!=="skipped").length,p=i.filter(h=>h.value!=="skipped").length===u.length,y=h=>{s(h.target.checked?i.filter(O=>O.value!=="skipped").map(O=>O.value):["required"])},v=h=>{const O=i.filter(w=>c.includes(w.value)&&w.value!=="skipped").map(w=>w.value);if(h.target.checked){const w=[...new Set([...u.filter(k=>k==="required"),...O])];s(w)}else s(["required"])},m=f.useMemo(()=>{const h=i.filter(k=>c.includes(k.value)&&k.value!=="skipped").map(k=>k.value),O=h.filter(k=>u.includes(k)),w=u.filter(k=>k!=="required"&&!h.includes(k));return h.length>0&&O.length===h.length&&w.length===0},[u,i]),x=f.useMemo(()=>{const h=i.filter(w=>c.includes(w.value)&&w.value!=="skipped").map(w=>w.value),O=h.filter(w=>u.includes(w));return O.length>0&&O.length<h.length},[u,i]),B=()=>G(null,null,function*(){const{data:h}=yield d.resource("backupFiles").dumpableCollections(),O=Object.keys(h||[]).map(k=>({value:k,label:a(`${k}.title`),disabled:["required","skipped"].includes(k)}));l(O);const w=O.filter(k=>c.includes(k.value)&&k.value!=="skipped").map(k=>k.value);s(["required",...w]),n(!0)}),M=h=>G(null,null,function*(){yield d.request({url:"backupFiles:create",method:"post",data:{dataTypes:u,method:h}}),n(!1);const O=i.filter(w=>c.includes(w.value)&&w.value!=="skipped").map(w=>w.value);s(["required",...O]),setTimeout(()=>{o()},500)}),g=()=>{n(!1);const h=i.filter(O=>c.includes(O.value)&&O.value!=="skipped").map(O=>O.value);s(["required",...h])};return r.jsxs(r.Fragment,{children:[r.jsx(e,{icon:r.jsx(re.PlusOutlined,{}),type:"primary",onClick:B,children:a("New backup")}),r.jsxs(S.Modal,{title:a("New backup"),width:800,open:t,onCancel:g,footer:[r.jsxs(S.Row,{gutter:16,justify:"end",align:"middle",children:[r.jsx(S.Col,{children:r.jsx(S.Button,{onClick:g,children:a("Cancel")},"cancel")}),r.jsx(S.Col,{children:r.jsx(S.Dropdown.Button,{type:"primary",onClick:()=>M("priority"),overlay:r.jsxs(S.Menu,{children:[r.jsx(S.Menu.Item,{onClick:()=>M("main"),children:a("Self backup")},"main"),r.jsx(S.Menu.Item,{onClick:()=>M("worker"),children:a("Worker backup")},"worker")]}),children:a("Backup")},"submit")})]})],children:[r.jsxs("strong",{style:{fontWeight:600,display:"block",margin:"16px 0 8px"},children:[a("Select the data to be backed up")," (",r.jsx(Fe,{isBackup:!0}),"):"]}),r.jsxs("div",{style:{lineHeight:2,marginBottom:8},children:[r.jsx(C.Checkbox.Group,{options:i,style:{flexDirection:"column"},onChange:h=>s(h),value:u}),r.jsx(S.Divider,{}),r.jsxs(S.Space,{children:[r.jsx(C.Checkbox,{indeterminate:x,onChange:v,checked:m,children:a("Check common")}),r.jsx(C.Checkbox,{indeterminate:b,onChange:y,checked:p,children:a("Check all")})]})]})]})]})},St=e=>{const{t:o}=Q(),a={multiple:!1,action:"/backupFiles:upload",onChange(t){var u,s,d;t.fileList.length>1&&t.fileList.splice(0,t.fileList.length-1);const{status:n}=t.file;n==="done"?(S.message.success(`${t.file.name} `+o("file uploaded successfully")),e.setRestoreData(te($({},(s=(u=t.file.response)==null?void 0:u.data)==null?void 0:s.meta),{key:(d=t.file.response)==null?void 0:d.data.key}))):n==="error"&&S.message.error(`${t.file.name} `+o("file upload failed"))},onDrop(t){}};return r.jsxs(kt,te($({},wt(a)),{children:[r.jsx("p",{className:"ant-upload-drag-icon",children:r.jsx(re.InboxOutlined,{})}),r.jsxs("p",{className:"ant-upload-text",children:[" ",o("Click or drag file to this area to upload")]})]}))},Ot=()=>{const{t:e}=Q(),o=C.useAPIClient(),a=C.useApp(),[t,n]=f.useState([]),[u,s]=f.useState(!1),{modal:d,notification:i}=S.App.useApp(),[l,c]=f.useState(!1),[b,p]=f.useState(""),y=f.useMemo(()=>o.resource("backupFiles"),[o]),{downloadProgress:v,handleDownload:m}=xt({onDownloadStart:g=>{p(g),c(!0)},onDownloadComplete:(g,h)=>{yt.saveAs(h,g),c(!1),p(""),i.success({key:"downloadBackup",message:r.jsx("span",{children:e("Downloaded success!")}),duration:1})},onDownloadError:(g,h)=>{c(!1),p(""),i.error({key:"downloadBackup",message:r.jsx("span",{children:e("Download failed")}),duration:3})}}),x=f.useCallback((g=!0)=>G(null,null,function*(){g&&s(!0);try{const{data:h}=yield y.list(),O=(h==null?void 0:h.rows)||(h==null?void 0:h.data)||[];n(O)}finally{g&&s(!1)}}),[y]),B=f.useCallback(()=>G(null,null,function*(){yield x()}),[x]);C.useNoticeSub("backup",g=>{(i[g.level]||i.info)({key:"backup",message:g.msg}),B()}),f.useEffect(()=>{x()},[x]),bt({dataSource:t,onDataSourceUpdate:n,onComplete:g=>{x(!1)},onTimeout:g=>{i.error({key:"backup-timeout",message:e("Backup timeout",{ns:"backup"}),description:`${g} ${e("No progress update received for a long time",{ns:"backup"})}`,duration:5}),x(!1)}}),f.useEffect(()=>{if(!t.some(w=>w.inProgress||w.status==="in_progress"))return;let h=null;const O=le.autorun(()=>{var F,E;const w=((F=a.ws)==null?void 0:F.enabled)&&((E=a.ws)==null?void 0:E.connected);h&&(clearInterval(h),h=null),h=setInterval(()=>{x(!1)},w?1e3:500)});return()=>{O(),h&&clearInterval(h)}},[t,x,a.ws]);const M=g=>{d.confirm({title:e("Delete record",{ns:"core"}),content:e("Are you sure you want to delete it?",{ns:"core"}),onOk:()=>G(null,null,function*(){yield y.destroy({filterByTk:g.name}),yield x(),S.message.success(e("Deleted successfully"))})})};return r.jsxs("div",{children:[r.jsxs(S.Card,{bordered:!1,children:[r.jsxs(S.Space,{style:{float:"right",marginBottom:16},children:[r.jsx(S.Button,{onClick:B,icon:r.jsx(re.ReloadOutlined,{}),children:e("Refresh")}),r.jsx(Ee,{upload:!0,title:r.jsxs(r.Fragment,{children:[r.jsx(re.UploadOutlined,{})," ",e("Restore backup from local")]})}),r.jsx(Ct,{refresh:B})]}),r.jsx(S.Table,{dataSource:t,loading:u,columns:[{title:e("Backup file"),dataIndex:"name",width:400,onCell:g=>g.inProgress?{colSpan:1}:{},render:(g,h)=>h.status==="error"?r.jsxs("div",{style:{color:"red"},children:[g,"(",e("Error"),")"]}):r.jsx("div",{children:g})},{title:e("Backup progress"),dataIndex:"progress",width:200,align:"center",render:(g,h)=>r.jsx(gt,{inProgress:h.inProgress,status:h.status,progress:h.progress,currentStep:h.currentStep,downloadProgress:v[h.name],showDownloadText:!1})},{title:e("File size"),dataIndex:"fileSize",width:150,render:(g,h)=>{var k;const O=(k=h.progress)!=null?k:0,w=h.currentStep||e("Backing up");return h.inProgress?r.jsxs("div",{style:{width:"150px",fontSize:"12px",color:"rgba(0, 0, 0, 0.45)",marginTop:"4px",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:[O>0?`${O}%`:""," ",w]}):g}},{title:e("Created at",{ns:"core"}),dataIndex:"createdAt",onCell:g=>g.inProgress?{colSpan:0}:{},render:g=>r.jsx(C.DatePicker.ReadPretty,{value:g,showTime:!0})},{title:e("Actions",{ns:"core"}),dataIndex:"actions",onCell:g=>g.inProgress?{colSpan:0}:{},render:(g,h)=>r.jsxs(S.Space,{split:r.jsx(S.Divider,{type:"vertical"}),children:[h.status!=="error"&&r.jsx(Ee,{ButtonComponent:"a",title:e("Restore"),fileData:h}),h.status!=="error"&&r.jsx("a",{type:"link",onClick:()=>m(h),children:e("Download")}),r.jsx("a",{onClick:()=>M(h),children:e("Delete")})]})}]})]}),r.jsx(S.Modal,{title:e("Downloading"),open:l,closable:!1,maskClosable:!1,footer:null,width:400,children:r.jsxs("div",{style:{padding:"20px 0"},children:[r.jsx("div",{style:{marginBottom:16,fontSize:"14px",color:"rgba(0, 0, 0, 0.65)"},children:b}),r.jsx(S.Progress,{percent:b&&v[b]||0,status:"active",showInfo:!0,format:g=>`${g}%`})]})})]})},Mt={dumpRules:"required",name:"autoBackup",shared:!0,createdAt:!0,updatedAt:!0,createdBy:!0,updatedBy:!0,fields:[{type:"string",name:"title",required:!0,uiSchema:{title:'{{ t("Title") }}',type:"string","x-component":"Input",required:!0}},{type:"boolean",name:"enabled",defaultValue:!1,uiSchema:{title:'{{ t("Enabled") }}',type:"boolean","x-component":"Checkbox",required:!0}},{type:"array",name:"dumpRules",uiSchema:{title:'{{ t("Dump rules") }}',type:"string","x-component":"Input",required:!0}},{type:"string",name:"repeat",required:!0,uiSchema:{title:'{{t("Repeat mode")}}',type:"string","x-component":"RepeatField"}},{type:"integer",name:"maxNumber",uiSchema:{title:'{{ t("Max number") }}',type:"integer","x-component":"Input",required:!0}}]};var _=function(){return _=Object.assign||function(e){for(var o,a=1,t=arguments.length;a<t;a++)for(var n in o=arguments[a])Object.prototype.hasOwnProperty.call(o,n)&&(e[n]=o[n]);return e},_.apply(this,arguments)};function Ie(e,o){var a={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&o.indexOf(t)<0&&(a[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function"){var n=0;for(t=Object.getOwnPropertySymbols(e);n<t.length;n++)o.indexOf(t[n])<0&&Object.prototype.propertyIsEnumerable.call(e,t[n])&&(a[t[n]]=e[t[n]])}return a}function he(e,o,a){if(a||arguments.length===2)for(var t,n=0,u=o.length;n<u;n++)!t&&n in o||(t||(t=Array.prototype.slice.call(o,0,n)),t[n]=o[n]);return e.concat(t||Array.prototype.slice.call(o))}var Dt=[{name:"@yearly",value:"0 0 1 1 *"},{name:"@annually",value:"0 0 1 1 *"},{name:"@monthly",value:"0 0 1 * *"},{name:"@weekly",value:"0 0 * * 0"},{name:"@daily",value:"0 0 * * *"},{name:"@midnight",value:"0 0 * * *"},{name:"@hourly",value:"0 * * * *"}],oe=[{type:"minutes",min:0,max:59,total:60},{type:"hours",min:0,max:23,total:24},{type:"month-days",min:1,max:31,total:31},{type:"months",min:1,max:12,total:12,alt:["JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"]},{type:"week-days",min:0,max:6,total:7,alt:["SUN","MON","TUE","WED","THU","FRI","SAT"]}],A={everyText:"every",emptyMonths:"every month",emptyMonthDays:"every day of the month",emptyMonthDaysShort:"day of the month",emptyWeekDays:"every day of the week",emptyWeekDaysShort:"day of the week",emptyHours:"every hour",emptyMinutes:"every minute",emptyMinutesForHourPeriod:"every",yearOption:"year",monthOption:"month",weekOption:"week",dayOption:"day",hourOption:"hour",minuteOption:"minute",rebootOption:"reboot",prefixPeriod:"Every",prefixMonths:"in",prefixMonthDays:"on",prefixWeekDays:"on",prefixWeekDaysForMonthAndYearPeriod:"and",prefixHours:"at",prefixMinutes:":",prefixMinutesForHourPeriod:"at",suffixMinutesForHourPeriod:"minute(s)",errorInvalidCron:"Invalid cron expression",clearButtonText:"Clear",weekDays:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],altWeekDays:["SUN","MON","TUE","WED","THU","FRI","SAT"],altMonths:["JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"]};function je(e,o){for(var a=[],t=e;t<=o;t++)a.push(t);return a}function ye(e){return e.sort(function(o,a){return o-a}),e}function Le(e){var o=[];return e.forEach(function(a){o.indexOf(a)<0&&o.push(a)}),o}function Z(e){return Object.entries(e).filter(function(o){var a=o[0],t=o[1];return a&&t}).map(function(o){return o[0]}).join(" ")}function Ve(e,o){e&&e({type:"invalid_cron",description:o.errorInvalidCron||A.errorInvalidCron})}function ve(e){var o=parseInt(e,10),a=Number(e);return o===a?a:NaN}function qe(e,o,a,t,n,u,s,d,i,l,c,b,p,y){a&&a(void 0),o(!1);var v=!1;if(!e){if(t==="always"||u&&t==="for-default-value")return;v=!0}if(!v){if(d&&(d===!0||d.includes(e))){if(e==="@reboot")return void y("reboot");var m=Dt.find(function(M){return M.name===e});m&&(e=m.value)}try{var x=function(M){if(typeof M!="string")throw new Error("Invalid cron string");var g=M.replace(/\s+/g," ").trim().split(" ");if(g.length===5)return g.map(function(h,O){return function(w,k){if(w==="*"||w==="*/1")return[];var F=ye(Le(ze(function(q,I,H){if(H){q=q.toUpperCase();for(var D=0;D<H.length;D++)q=q.replace(H[D],"".concat(D+I))}return q}(w,k.min,k.alt).split(",").map(function(q){var I,H=q.split("/");if(H.length>2)throw new Error('Invalid value "'.concat(w,' for "').concat(k.type,'"'));var D=H[0],P=H[1];I=D==="*"?je(k.min,k.max):function(j,L,U){var W=j.split("-");if(W.length===1){var ue=ve(W[0]);if(isNaN(ue))throw new Error('Invalid value "'.concat(L,'" for ').concat(U.type));return[ue]}if(W.length===2){var Y=ve(W[0]),ae=ve(W[1]);if(isNaN(Y)||isNaN(ae))throw new Error('Invalid value "'.concat(L,'" for ').concat(U.type));if(ae<Y)throw new Error('Max range is less than min range in "'.concat(j,'" for ').concat(U.type));return je(Y,ae)}throw new Error('Invalid value "'.concat(j,'" for ').concat(U.type))}(D,w,k);var T=function(j,L){if(j!==void 0){var U=ve(j);if(isNaN(U)||U<1)throw new Error('Invalid interval step value "'.concat(j,'" for ').concat(L.type));return U}}(P,k),J=function(j,L){if(L){var U=j[0];j=j.filter(function(W){return W%L==U%L||W===U})}return j}(I,T);return J}).flat(),k))),E=_e(F,k);if(E!==void 0)throw new Error('Value "'.concat(E,'" out of range for ').concat(k.type));return F.length===k.total?[]:F}(h,oe[O])});throw new Error("Invalid cron string format")}(e),B=function(M){return M[3].length>0?"year":M[2].length>0?"month":M[4].length>0?"week":M[1].length>0?"day":M[0].length>0?"hour":"minute"}(x);y(B),i(x[0]),l(x[1]),c(x[2]),b(x[3]),p(x[4])}catch(M){v=!0}}v&&(n.current=e,o(!0),Ve(a,s))}function He(e,o,a,t,n,u,s){if(e==="reboot")return"@reboot";var d=function(i,l){return i.map(function(c,b){var p=oe[b];return Ue(We(c,p),p,l)})}([e!=="minute"&&u?u:[],e!=="minute"&&e!=="hour"&&n?n:[],e!=="year"&&e!=="month"||!a?[]:a,e==="year"&&o?o:[],e!=="year"&&e!=="month"&&e!=="week"||!t?[]:t],s);return d.join(" ")}function Ue(e,o,a,t,n){var u="";if(function(d,i){return d.length===i.max-i.min+1}(e,o)||e.length===0)u="*";else{var s=function(d){if(d.length>2){var i=d[1]-d[0];if(i>1)return i}}(e);u=s&&function(d,i){for(var l=1;l<d.length;l++){var c=d[l-1];if(d[l]-c!==i)return!1}return!0}(e,s)?function(d,i,l){var c=Je(d),b=$e(d),p=d.length===(b-c)/l+1;return!!(c===i.min&&b+l>i.max&&p)}(e,o,s)?"*/".concat(s):"".concat(ne(Je(e),o,a,t,n),"-").concat(ne($e(e),o,a,t,n),"/").concat(s):function(d){var i=[],l=null;return d.forEach(function(c,b,p){c!==p[b+1]-1?l!==null?(i.push([l,c]),l=null):i.push(c):l===null&&(l=c)}),i}(e).map(function(d){return Array.isArray(d)?"".concat(ne(d[0],o,a,t,n),"-").concat(ne(d[1],o,a,t,n)):ne(d,o,a,t,n)}).join(",")}return u}function ne(e,o,a,t,n){var u=e.toString(),s=o.type,d=o.alt,i=o.min,l=t&&(t===!0||t.includes(s)),c=n==="24-hour-clock"&&(s==="hours"||s==="minutes");if(a&&s==="week-days"||a&&s==="months"?u=d[e-i]:e<10&&(l||c)&&(u=u.padStart(2,"0")),s==="hours"&&n==="12-hour-clock"){var b=e>=12?"PM":"AM",p=e%12||12;p<10&&l&&(p=p.toString().padStart(2,"0")),u="".concat(p).concat(b)}return u}function We(e,o){var a=ye(Le(ze(e,o)));if(a.length===0)return a;var t=_e(a,o);if(t!==void 0)throw new Error('Value "'.concat(t,'" out of range for ').concat(o.type));return a}function ze(e,o){return o.type==="week-days"&&(e=e.map(function(a){return a===7?0:a})),e}function _e(e,o){var a=e[0],t=e[e.length-1];return a<o.min?a:t>o.max?t:void 0}function Je(e){return e[0]}function $e(e){return e[e.length-1]}function ce(e){var o=e.value,a=e.grid,t=a===void 0||a,n=e.optionsList,u=e.setValue,s=e.locale,d=e.className,i=e.humanizeLabels,l=e.disabled,c=e.readOnly,b=e.leadingZero,p=e.clockFormat,y=e.period,v=e.unit,m=e.periodicityOnDoubleClick,x=e.mode,B=Ie(e,["value","grid","optionsList","setValue","locale","className","humanizeLabels","disabled","readOnly","leadingZero","clockFormat","period","unit","periodicityOnDoubleClick","mode"]),M=f.useMemo(function(){if(o&&Array.isArray(o))return o.map(function(D){return D.toString()})},[o]),g=f.useMemo(function(){return n?n.map(function(D,P){return{value:(v.min===0?P:P+1).toString(),label:D}}):he([],Array(v.total),!0).map(function(D,P){var T=v.min===0?P:P+1;return{value:T.toString(),label:ne(T,v,i,b,p)}})},[n,b,i,p]),h=JSON.stringify(s),O=f.useCallback(function(D){var P=D.value;if(!o||o[0]!==Number(P))return r.jsx(r.Fragment,{});var T=Ue(We(o,v),v,i,b,p),J=T.match(/^\*\/([0-9]+),?/)||[];return r.jsx("div",{children:J[1]?"".concat(s.everyText||A.everyText," ").concat(J[1]):T})},[o,h,i,b,p]),w=f.useCallback(function(D){var P=Array.isArray(D)?ye(D):[D],T=P;o&&(T=x==="single"?[]:he([],o,!0),P.forEach(function(J){var j=Number(J);T=o.some(function(L){return L===j})?T.filter(function(L){return L!==j}):ye(he(he([],T,!0),[j],!1))})),T.length===v.total?u([]):u(T)},[u,o]),k=f.useCallback(function(D){if(D!==0&&D!==1){for(var P=v.total+v.min,T=[],J=v.min;J<P;J++)J%D==0&&T.push(J);var j=o&&T&&o.length===T.length&&o.every(function(U,W){return U===T[W]}),L=T.length===g.length;u(L||j?[]:T)}else u([])},[o,g,u]),F=f.useRef([]),E=f.useCallback(function(D){if(!c){var P=F.current;P.push({time:new Date().getTime(),value:Number(D)});var T=window.setTimeout(function(){m&&P.length>1&&P[P.length-1].time-P[P.length-2].time<300?P[P.length-1].value===P[P.length-2].value?k(Number(D)):w([P[P.length-2].value,P[P.length-1].value]):w(Number(D)),F.current=[]},300);return function(){window.clearTimeout(T)}}},[F,w,k,c,m]),q=f.useCallback(function(){c||u([])},[u,c]),I=f.useMemo(function(){var D;return Z(((D={"react-js-cron-select":!0,"react-js-cron-custom-select":!0})["".concat(d,"-select")]=!!d,D))},[d]),H=f.useMemo(function(){var D;return Z(((D={"react-js-cron-select-dropdown":!0})["react-js-cron-select-dropdown-".concat(v.type)]=!0,D["react-js-cron-custom-select-dropdown"]=!0,D["react-js-cron-custom-select-dropdown-".concat(v.type)]=!0,D["react-js-cron-custom-select-dropdown-minutes-large"]=v.type==="minutes"&&y!=="hour"&&y!=="day",D["react-js-cron-custom-select-dropdown-minutes-medium"]=v.type==="minutes"&&(y==="day"||y==="hour"),D["react-js-cron-custom-select-dropdown-hours-twelve-hour-clock"]=v.type==="hours"&&p==="12-hour-clock",D["react-js-cron-custom-select-dropdown-grid"]=!!t,D["".concat(d,"-select-dropdown")]=!!d,D["".concat(d,"-select-dropdown-").concat(v.type)]=!!d,D))},[d,t,p,y]);return r.jsx(S.Select,_({mode:x!=="single"||m?"multiple":void 0,allowClear:!c,virtual:!1,open:!c&&void 0,value:M,onClear:q,tagRender:O,className:I,popupClassName:H,options:g,showSearch:!1,showArrow:!c,menuItemSelectedIcon:null,dropdownMatchSelectWidth:!1,onSelect:E,onDeselect:E,disabled:l,dropdownAlign:v.type!=="minutes"&&v.type!=="hours"||y==="day"||y==="hour"?void 0:{points:["tr","br"]},"data-testid":"custom-select-".concat(v.type)},B))}function At(e){var o=e.value,a=e.setValue,t=e.locale,n=e.className,u=e.disabled,s=e.readOnly,d=e.leadingZero,i=e.clockFormat,l=e.period,c=e.periodicityOnDoubleClick,b=e.mode,p=f.useMemo(function(){var y;return Z(((y={"react-js-cron-field":!0,"react-js-cron-hours":!0})["".concat(n,"-field")]=!!n,y["".concat(n,"-hours")]=!!n,y))},[n]);return r.jsxs("div",_({className:p},{children:[t.prefixHours!==""&&r.jsx("span",{children:t.prefixHours||A.prefixHours}),r.jsx(ce,{placeholder:t.emptyHours||A.emptyHours,value:o,unit:oe[1],setValue:a,locale:t,className:n,disabled:u,readOnly:s,leadingZero:d,clockFormat:i,period:l,periodicityOnDoubleClick:c,mode:b})]}))}function Pt(e){var o=e.value,a=e.setValue,t=e.locale,n=e.className,u=e.disabled,s=e.readOnly,d=e.leadingZero,i=e.clockFormat,l=e.period,c=e.periodicityOnDoubleClick,b=e.mode,p=f.useMemo(function(){var y;return Z(((y={"react-js-cron-field":!0,"react-js-cron-minutes":!0})["".concat(n,"-field")]=!!n,y["".concat(n,"-minutes")]=!!n,y))},[n]);return r.jsxs("div",_({className:p},{children:[l==="hour"?t.prefixMinutesForHourPeriod!==""&&r.jsx("span",{children:t.prefixMinutesForHourPeriod||A.prefixMinutesForHourPeriod}):t.prefixMinutes!==""&&r.jsx("span",{children:t.prefixMinutes||A.prefixMinutes}),r.jsx(ce,{placeholder:l==="hour"?t.emptyMinutesForHourPeriod||A.emptyMinutesForHourPeriod:t.emptyMinutes||A.emptyMinutes,value:o,unit:oe[0],setValue:a,locale:t,className:n,disabled:u,readOnly:s,leadingZero:d,clockFormat:i,period:l,periodicityOnDoubleClick:c,mode:b}),l==="hour"&&t.suffixMinutesForHourPeriod!==""&&r.jsx("span",{children:t.suffixMinutesForHourPeriod||A.suffixMinutesForHourPeriod})]}))}function Bt(e){var o=e.value,a=e.setValue,t=e.locale,n=e.className,u=e.weekDays,s=e.disabled,d=e.readOnly,i=e.leadingZero,l=e.period,c=e.periodicityOnDoubleClick,b=e.mode,p=!u||u.length===0,y=f.useMemo(function(){var x;return Z(((x={"react-js-cron-field":!0,"react-js-cron-month-days":!0,"react-js-cron-month-days-placeholder":!p})["".concat(n,"-field")]=!!n,x["".concat(n,"-month-days")]=!!n,x))},[n,p]),v=JSON.stringify(t),m=f.useMemo(function(){return p?t.emptyMonthDays||A.emptyMonthDays:t.emptyMonthDaysShort||A.emptyMonthDaysShort},[p,v]);return!d||o&&o.length>0||(!o||o.length===0)&&(!u||u.length===0)?r.jsxs("div",_({className:y},{children:[t.prefixMonthDays!==""&&r.jsx("span",{children:t.prefixMonthDays||A.prefixMonthDays}),r.jsx(ce,{placeholder:m,value:o,setValue:a,unit:oe[2],locale:t,className:n,disabled:s,readOnly:d,leadingZero:i,period:l,periodicityOnDoubleClick:c,mode:b})]})):null}function Tt(e){var o=e.value,a=e.setValue,t=e.locale,n=e.className,u=e.humanizeLabels,s=e.disabled,d=e.readOnly,i=e.period,l=e.periodicityOnDoubleClick,c=e.mode,b=t.months||A.months,p=f.useMemo(function(){var y;return Z(((y={"react-js-cron-field":!0,"react-js-cron-months":!0})["".concat(n,"-field")]=!!n,y["".concat(n,"-months")]=!!n,y))},[n]);return r.jsxs("div",_({className:p},{children:[t.prefixMonths!==""&&r.jsx("span",{children:t.prefixMonths||A.prefixMonths}),r.jsx(ce,{placeholder:t.emptyMonths||A.emptyMonths,optionsList:b,grid:!1,value:o,unit:_(_({},oe[3]),{alt:t.altMonths||A.altMonths}),setValue:a,locale:t,className:n,humanizeLabels:u,disabled:s,readOnly:d,period:i,periodicityOnDoubleClick:l,mode:c})]}))}function Nt(e){var o=e.value,a=e.setValue,t=e.locale,n=e.className,u=e.disabled,s=e.readOnly,d=e.shortcuts,i=e.allowedPeriods,l=[];i.includes("year")&&l.push({value:"year",label:t.yearOption||A.yearOption}),i.includes("month")&&l.push({value:"month",label:t.monthOption||A.monthOption}),i.includes("week")&&l.push({value:"week",label:t.weekOption||A.weekOption}),i.includes("day")&&l.push({value:"day",label:t.dayOption||A.dayOption}),i.includes("hour")&&l.push({value:"hour",label:t.hourOption||A.hourOption}),i.includes("minute")&&l.push({value:"minute",label:t.minuteOption||A.minuteOption}),i.includes("reboot")&&d&&(d===!0||d.includes("@reboot"))&&l.push({value:"reboot",label:t.rebootOption||A.rebootOption});var c=f.useCallback(function(v){s||a(v)},[a,s]),b=f.useMemo(function(){var v;return Z(((v={"react-js-cron-field":!0,"react-js-cron-period":!0})["".concat(n,"-field")]=!!n,v["".concat(n,"-period")]=!!n,v))},[n]),p=f.useMemo(function(){var v;return Z(((v={"react-js-cron-select":!0,"react-js-cron-select-no-prefix":t.prefixPeriod===""})["".concat(n,"-select")]=!!n,v))},[n,t.prefixPeriod]),y=f.useMemo(function(){var v;return Z(((v={"react-js-cron-select-dropdown":!0,"react-js-cron-select-dropdown-period":!0})["".concat(n,"-select-dropdown")]=!!n,v["".concat(n,"-select-dropdown-period")]=!!n,v))},[n]);return r.jsxs("div",_({className:b},{children:[t.prefixPeriod!==""&&r.jsx("span",{children:t.prefixPeriod||A.prefixPeriod}),r.jsx(S.Select,{defaultValue:o,value:o,onChange:c,options:l,className:p,popupClassName:y,disabled:u,showArrow:!s,open:!s&&void 0,"data-testid":"select-period"},JSON.stringify(t))]}))}function Ft(e){var o=e.value,a=e.setValue,t=e.locale,n=e.className,u=e.humanizeLabels,s=e.monthDays,d=e.disabled,i=e.readOnly,l=e.period,c=e.periodicityOnDoubleClick,b=e.mode,p=t.weekDays||A.weekDays,y=l==="week"||!s||s.length===0,v=f.useMemo(function(){var g;return Z(((g={"react-js-cron-field":!0,"react-js-cron-week-days":!0,"react-js-cron-week-days-placeholder":!y})["".concat(n,"-field")]=!!n,g["".concat(n,"-week-days")]=!!n,g))},[n,y]),m=JSON.stringify(t),x=f.useMemo(function(){return y?t.emptyWeekDays||A.emptyWeekDays:t.emptyWeekDaysShort||A.emptyWeekDaysShort},[y,m]),B=l==="week"||!i||o&&o.length>0||(!o||o.length===0)&&(!s||s.length===0),M=!i||s&&s.length>0||(!s||s.length===0)&&(!o||o.length===0);return B?r.jsxs("div",_({className:v},{children:[t.prefixWeekDays!==""&&(l==="week"||!M)&&r.jsx("span",{children:t.prefixWeekDays||A.prefixWeekDays}),t.prefixWeekDaysForMonthAndYearPeriod!==""&&l!=="week"&&M&&r.jsx("span",{children:t.prefixWeekDaysForMonthAndYearPeriod||A.prefixWeekDaysForMonthAndYearPeriod}),r.jsx(ce,{placeholder:x,optionsList:p,grid:!1,value:o,unit:_(_({},oe[4]),{alt:t.altWeekDays||A.altWeekDays}),setValue:a,locale:t,className:n,humanizeLabels:u,disabled:d,readOnly:i,period:l,periodicityOnDoubleClick:c,mode:b})]})):null}function Et(e){var o=e.clearButton,a=o===void 0||o,t=e.clearButtonProps,n=t===void 0?{}:t,u=e.clearButtonAction,s=u===void 0?"fill-with-every":u,d=e.locale,i=d===void 0?A:d,l=e.value,c=l===void 0?"":l,b=e.setValue,p=e.displayError,y=p===void 0||p,v=e.onError,m=e.className,x=e.defaultPeriod,B=x===void 0?"day":x,M=e.allowEmpty,g=M===void 0?"for-default-value":M,h=e.humanizeLabels,O=h===void 0||h,w=e.humanizeValue,k=w!==void 0&&w,F=e.disabled,E=F!==void 0&&F,q=e.readOnly,I=q!==void 0&&q,H=e.leadingZero,D=H!==void 0&&H,P=e.shortcuts,T=P===void 0?["@yearly","@annually","@monthly","@weekly","@daily","@midnight","@hourly"]:P,J=e.clockFormat,j=e.periodicityOnDoubleClick,L=j===void 0||j,U=e.mode,W=U===void 0?"multiple":U,ue=e.allowedDropdowns,Y=ue===void 0?["period","months","month-days","week-days","hours","minutes"]:ue,ae=e.allowedPeriods,_t=ae===void 0?["year","month","week","day","hour","minute","reboot"]:ae,se=f.useRef(c),Pe=f.useRef(B),Qe=f.useState(),R=Qe[0],ge=Qe[1],Re=f.useState(),de=Re[0],be=Re[1],et=f.useState(),xe=et[0],ke=et[1],tt=f.useState(),pe=tt[0],we=tt[1],ot=f.useState(),Ce=ot[0],Se=ot[1],rt=f.useState(),Oe=rt[0],Me=rt[1],nt=f.useState(!1),Be=nt[0],fe=nt[1],at=f.useState(!1),De=at[0],st=at[1],Jt=function(V){var K=f.useRef(V);return f.useEffect(function(){K.current=V},[V]),K.current}(De),lt=JSON.stringify(i);f.useEffect(function(){qe(c,fe,v,g,se,!0,i,T,Me,Se,be,ke,we,ge)},[]),f.useEffect(function(){c!==se.current&&qe(c,fe,v,g,se,!1,i,T,Me,Se,be,ke,we,ge)},[c,se,lt,g,T]),f.useEffect(function(){if(!(R||Oe||xe||de||pe||Ce)||De||Jt)De&&st(!1);else{var V=R||Pe.current,K=He(V,xe,de,pe,Ce,Oe,k);b(K,{selectedPeriod:V}),se.current=K,v&&v(void 0),fe(!1)}},[R,de,xe,pe,Ce,Oe,k,De]);var it=f.useCallback(function(){be(void 0),ke(void 0),we(void 0),Se(void 0),Me(void 0);var V="",K=R!=="reboot"&&R?R:Pe.current;K!==R&&ge(K),s==="fill-with-every"&&(V=He(K,void 0,void 0,void 0,void 0,void 0)),b(V,{selectedPeriod:K}),se.current=V,st(!0),g==="never"&&s==="empty"?(fe(!0),Ve(v,i)):(v&&v(void 0),fe(!1))},[R,b,v,s]),$t=f.useMemo(function(){var V;return Z(((V={"react-js-cron":!0,"react-js-cron-error":Be&&y,"react-js-cron-disabled":E,"react-js-cron-read-only":I})["".concat(m)]=!!m,V["".concat(m,"-error")]=Be&&y&&!!m,V["".concat(m,"-disabled")]=E&&!!m,V["".concat(m,"-read-only")]=I&&!!m,V))},[m,Be,y,E,I]),Te=n.className,ct=Ie(n,["className"]),ut=f.useMemo(function(){var V;return Z(((V={"react-js-cron-clear-button":!0})["".concat(m,"-clear-button")]=!!m,V["".concat(Te)]=!!Te,V))},[m,Te]),Zt=JSON.stringify(ct),dt=f.useMemo(function(){return a&&!I?r.jsx(S.Button,_({className:ut,danger:!0,type:"primary",disabled:E},ct,{onClick:it},{children:i.clearButtonText||A.clearButtonText})):null},[a,I,lt,ut,E,Zt,it]),z=R||Pe.current;return r.jsxs("div",_({className:$t},{children:[Y.includes("period")&&r.jsx(Nt,{value:z,setValue:ge,locale:i,className:m,disabled:E,readOnly:I,shortcuts:T,allowedPeriods:_t}),z==="reboot"?dt:r.jsxs(r.Fragment,{children:[z==="year"&&Y.includes("months")&&r.jsx(Tt,{value:xe,setValue:ke,locale:i,className:m,humanizeLabels:O,disabled:E,readOnly:I,period:z,periodicityOnDoubleClick:L,mode:W}),(z==="year"||z==="month")&&Y.includes("month-days")&&r.jsx(Bt,{value:de,setValue:be,locale:i,className:m,weekDays:pe,disabled:E,readOnly:I,leadingZero:D,period:z,periodicityOnDoubleClick:L,mode:W}),(z==="year"||z==="month"||z==="week")&&Y.includes("week-days")&&r.jsx(Ft,{value:pe,setValue:we,locale:i,className:m,humanizeLabels:O,monthDays:de,disabled:E,readOnly:I,period:z,periodicityOnDoubleClick:L,mode:W}),r.jsxs("div",{children:[z!=="minute"&&z!=="hour"&&Y.includes("hours")&&r.jsx(At,{value:Ce,setValue:Se,locale:i,className:m,disabled:E,readOnly:I,leadingZero:D,clockFormat:J,period:z,periodicityOnDoubleClick:L,mode:W}),z!=="minute"&&Y.includes("minutes")&&r.jsx(Pt,{value:Oe,setValue:Me,locale:i,period:z,className:m,disabled:E,readOnly:I,leadingZero:D,clockFormat:J,periodicityOnDoubleClick:L,mode:W}),dt]})]})]}))}const It={"zh-CN":{everyText:"每",emptyMonths:"每月",emptyMonthDays:"每日(月)",emptyMonthDaysShort:"每日",emptyWeekDays:"每天(周)",emptyWeekDaysShort:"每天(周)",emptyHours:"每小时",emptyMinutes:"每分钟",emptyMinutesForHourPeriod:"每",yearOption:"年",monthOption:"月",weekOption:"周",dayOption:"天",hourOption:"小时",minuteOption:"分钟",rebootOption:"重启",prefixPeriod:"每",prefixMonths:"的",prefixMonthDays:"的",prefixWeekDays:"的",prefixWeekDaysForMonthAndYearPeriod:"或者",prefixHours:"的",prefixMinutes:":",prefixMinutesForHourPeriod:"的",suffixMinutesForHourPeriod:"分钟",errorInvalidCron:"不符合 cron 规则的表达式",clearButtonText:"清空",weekDays:["周日","周一","周二","周三","周四","周五","周六"],months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],altWeekDays:["周日","周一","周二","周三","周四","周五","周六"],altMonths:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]}},Ze=[{value:"none",text:"No repeat"},{value:6e4,text:"By minute",unitText:"Minutes"},{value:36e5,text:"By hour",unitText:"Hours"},{value:864e5,text:"By day",unitText:"Days"},{value:6048e5,text:"By week",unitText:"Weeks"},{value:"cron",text:"Advanced"}];function Ge(e){return Ze.filter(a=>!isNaN(+a.value)).reverse().find(a=>!(e%a.value))}function jt(e){if(!e)return"none";if(e&&!isNaN(+e)){const o=Ge(e);return o?o.value:"none"}if(typeof e=="string")return"cron"}function Lt({value:e,onChange:o}){const{t:a}=Q(),t=Ge(e);return r.jsx(S.InputNumber,{value:e/t.value,onChange:n=>o(n*t.value),min:1,addonBefore:a("Every"),addonAfter:a(t.unitText),className:"auto-width"})}function Vt({value:e=null,onChange:o}){const{t:a}=Q(),t=jt(e),n=f.useCallback(s=>{if(s==="none"){o(null);return}if(s==="cron"){o("0 * * * * *");return}o(s)},[o]),u=It[localStorage.getItem("TACHYBASE_LOCALE")||"en-US"];return r.jsxs("fieldset",{className:C.css`
2
2
  display: flex;
3
3
  flex-direction: ${t==="cron"?"column":"row"};
4
4
  align-items: flex-start;
@@ -27,4 +27,4 @@
27
27
  }
28
28
  }
29
29
  }
30
- `,children:[r.jsx(C.Select,{value:t,onChange:n,className:"auto-width",options:Ze.map(s=>({value:s.value,label:a(s.text)}))}),t&&!isNaN(+t)?r.jsx(Lt,{value:e,onChange:o}):null,t==="cron"?r.jsx(Et,{value:e.trim().split(/\s+/).slice(1).join(" "),setValue:s=>o(`0 ${s}`),clearButton:!1,locale:u}):null]})}const Ye={name:{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"autoBackup.name","x-component-props":{}},title:{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"autoBackup.title","x-component-props":{}},enabled:{type:"boolean","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"autoBackup.enabled","x-component-props":{}},repeat:{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"autoBackup.repeat","x-component-props":{}},dumpRules:{title:'{{ t("Dump rules") }}',type:"array","x-component":"Checkbox.Group","x-decorator":"FormItem","x-component-props":{style:{display:"flex",flexDirection:"column"},options:"{{ dumpRuleTypes }}"},"x-reactions":e=>{const o=new Set(e.value||[]);o.add("required"),e.value=Array.from(o)}},maxNumber:{title:'{{ t("Max number") }}',description:'{{ t("Keep only the maximum number and delete the oldest versions with redundant time.") }}',type:"number","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"autoBackup.maxNumber","x-component-props":{}}},qt={type:"void","x-acl-action-props":{skipScopeCheck:!0},"x-acl-action":"autoBackup:create","x-decorator":"FormBlockProvider","x-use-decorator-props":"useCreateFormBlockDecoratorProps","x-decorator-props":{dataSource:"main",collection:"autoBackup"},"x-component":"CardItem",properties:{form:{type:"void","x-component":"FormV2","x-use-component-props":"useCreateFormBlockProps",properties:$({actionBar:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:"var(--tb-spacing)"}},properties:{submit:{title:'{{t("Submit")}}',"x-action":"submit","x-component":"Action","x-use-component-props":"useCreateActionProps","x-component-props":{type:"primary",htmlType:"submit"},type:"void"}}}},Ye)}}},Ht={type:"void","x-action":"create","x-acl-action":"create",title:"{{t('Add new')}}","x-component":"Action","x-decorator":"ACLActionProvider","x-component-props":{openMode:"drawer",type:"primary",component:"CreateRecordAction",icon:"PlusOutlined"},"x-align":"right","x-acl-action-props":{skipScopeCheck:!0},properties:{drawer:{type:"void",title:'{{ t("Add record") }}',"x-component":"Action.Container","x-component-props":{className:"tb-action-popup"},properties:{form:qt}}}},Ut={type:"void",title:'{{ t("Edit") }}',"x-action":"update","x-component":"Action.Link","x-component-props":{openMode:"drawer",icon:"EditOutlined"},"x-decorator":"ACLActionProvider",properties:{drawer:{type:"void",title:'{{ t("Edit record") }}',"x-component":"Action.Container","x-component-props":{className:"tb-action-popup"},properties:{card:{type:"void","x-acl-action-props":{skipScopeCheck:!1},"x-acl-action":"autoBackup:update","x-decorator":"FormBlockProvider","x-use-decorator-props":"useEditFormBlockDecoratorProps","x-decorator-props":{action:"get",dataSource:"main",collection:"autoBackup"},"x-component":"CardItem",properties:{form:{type:"void","x-component":"FormV2","x-use-component-props":"useEditFormBlockProps",properties:$({actionBar:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:"var(--tb-spacing)"}},properties:{submit:{title:'{{ t("Submit") }}',"x-action":"submit","x-component":"Action","x-use-component-props":"useUpdateActionProps","x-component-props":{type:"primary",htmlType:"submit"},"x-action-settings":{triggerWorkflows:[],onSuccess:{manualClose:!1,redirecting:!1,successMessage:'{{t("Updated successfully")}}'},isDeltaChanged:!1},type:"void"}}}},Ye)}}}}}}},Wt={type:"void",properties:{autoBackupTable:{type:"void","x-decorator":"TableBlockProvider","x-acl-action":"autoBackup:list","x-use-decorator-props":"useTableBlockDecoratorProps","x-decorator-props":{collection:"autoBackup",dataSource:"main",action:"list",params:{pageSize:20},rowKey:"id",showIndex:!0,dragSort:!1},"x-component":"CardItem","x-filter-targets":[],properties:{actions:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:"var(--tb-spacing)"}},properties:{refresh:{type:"void",title:'{{ t("Refresh") }}',"x-action":"refresh","x-component":"Action","x-settings":"actionSettings:refresh","x-component-props":{icon:"ReloadOutlined"},"x-use-component-props":"useRefreshActionProps"},create:Ht}},table:{type:"array","x-component":"TableV2","x-use-component-props":"useTableBlockProps","x-component-props":{rowKey:"id",rowSelection:{type:"checkbox"}},properties:{title:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{title:{"x-collection-field":"autoBackup.title","x-component":"CollectionField","x-component-props":{ellipsis:!0},"x-read-pretty":!0,"x-decorator":null,"x-decorator-props":{labelStyle:{display:"none"}}}}},enabled:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{enabled:{"x-collection-field":"autoBackup.enabled","x-component":"CollectionField","x-component-props":{ellipsis:!0},"x-read-pretty":!0,"x-decorator":null,"x-decorator-props":{labelStyle:{display:"none"}}}}},maxNumber:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{maxNumber:{"x-collection-field":"autoBackup.maxNumber","x-component":"CollectionField","x-component-props":{ellipsis:!0},"x-read-pretty":!0,"x-decorator":null,"x-decorator-props":{labelStyle:{display:"none"}}}}},actions:{type:"void",title:'{{ t("Actions") }}',"x-action-column":"actions","x-decorator":"TableV2.Column.ActionBar","x-component":"TableV2.Column","x-component-props":{width:100,fixed:"right"},properties:{actions:{type:"void","x-component":"Space",properties:{editAction:Ut,delete:{type:"void",title:"Delete","x-action":"destroy","x-component":"Action.Link","x-component-props":{confirm:{title:"Delete",content:"Are you sure you want to delete it?"}},"x-decorator":"ACLActionProvider","x-use-component-props":"useDestroyActionProps"},clear:{type:"void",title:vt("Clear current times"),"x-action":"clearLimit","x-component":"Action.Link","x-component-props":{confirm:{title:"Clear",content:"Are you sure you want to clear current times?"}},"x-decorator":"ACLActionProvider","x-use-component-props":()=>{const{refresh:e}=S.useDataBlockRequest(),o=S.useDataBlockResource(),a=S.useRecord();return{onClick(){return G(this,null,function*(){yield o.clearLimitExecuted({id:a.id}),e()})}}}}}}}}}}}}}},zt=()=>{const{t:e}=Q(),{data:o,loading:a,refresh:t}=S.useRequest({url:"backupFiles:dumpableCollections"}),n=f.useMemo(()=>o?Object.keys(o).map(u=>({value:u,label:e(`${u}.title`),disabled:["required","skipped"].includes(u)})):[],[o]);return r.jsx(S.ExtendCollectionsProvider,{collections:[Mt],children:r.jsx(S.SchemaComponent,{schema:Wt,name:"auto-backup-table",components:{RepeatField:Vt},scope:{t:e,dumpRuleTypes:n}})})},Ke=function(e){return r.jsx(S.SchemaComponentOptions,{children:e.children})};Ke.displayName="DuplicatorProvider";class Xe extends S.Plugin{load(){return G(this,null,function*(){this.app.use(Ke),this.app.systemSettingsManager.add("system-services."+ie,{title:this.t("Backup & Restore"),icon:"CloudServerOutlined",sort:-50}),this.app.systemSettingsManager.add("system-services."+ie+".files",{title:this.t("Backup file"),icon:"CloudServerOutlined",Component:Ot,aclSnippet:"pm.backup.restore"}),this.app.systemSettingsManager.add("system-services."+ie+".auto",{title:this.t("Auto backup"),icon:"CloudServerOutlined",Component:zt,aclSnippet:"pm.backup.auto",sort:20})})}}N.PluginBackupRestoreClient=Xe,N.default=Xe,Object.defineProperties(N,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
30
+ `,children:[r.jsx(S.Select,{value:t,onChange:n,className:"auto-width",options:Ze.map(s=>({value:s.value,label:a(s.text)}))}),t&&!isNaN(+t)?r.jsx(Lt,{value:e,onChange:o}):null,t==="cron"?r.jsx(Et,{value:e.trim().split(/\s+/).slice(1).join(" "),setValue:s=>o(`0 ${s}`),clearButton:!1,locale:u}):null]})}const Ye={name:{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"autoBackup.name","x-component-props":{}},title:{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"autoBackup.title","x-component-props":{}},enabled:{type:"boolean","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"autoBackup.enabled","x-component-props":{}},repeat:{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"autoBackup.repeat","x-component-props":{}},dumpRules:{title:'{{ t("Dump rules") }}',type:"array","x-component":"Checkbox.Group","x-decorator":"FormItem","x-component-props":{style:{display:"flex",flexDirection:"column"},options:"{{ dumpRuleTypes }}"},"x-reactions":e=>{const o=new Set(e.value||[]);o.add("required"),e.value=Array.from(o)}},maxNumber:{title:'{{ t("Max number") }}',description:'{{ t("Keep only the maximum number and delete the oldest versions with redundant time.") }}',type:"number","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"autoBackup.maxNumber","x-component-props":{}}},qt={type:"void","x-acl-action-props":{skipScopeCheck:!0},"x-acl-action":"autoBackup:create","x-decorator":"FormBlockProvider","x-use-decorator-props":"useCreateFormBlockDecoratorProps","x-decorator-props":{dataSource:"main",collection:"autoBackup"},"x-component":"CardItem",properties:{form:{type:"void","x-component":"FormV2","x-use-component-props":"useCreateFormBlockProps",properties:$({actionBar:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:"var(--tb-spacing)"}},properties:{submit:{title:'{{t("Submit")}}',"x-action":"submit","x-component":"Action","x-use-component-props":"useCreateActionProps","x-component-props":{type:"primary",htmlType:"submit"},type:"void"}}}},Ye)}}},Ht={type:"void","x-action":"create","x-acl-action":"create",title:"{{t('Add new')}}","x-component":"Action","x-decorator":"ACLActionProvider","x-component-props":{openMode:"drawer",type:"primary",component:"CreateRecordAction",icon:"PlusOutlined"},"x-align":"right","x-acl-action-props":{skipScopeCheck:!0},properties:{drawer:{type:"void",title:'{{ t("Add record") }}',"x-component":"Action.Container","x-component-props":{className:"tb-action-popup"},properties:{form:qt}}}},Ut={type:"void",title:'{{ t("Edit") }}',"x-action":"update","x-component":"Action.Link","x-component-props":{openMode:"drawer",icon:"EditOutlined"},"x-decorator":"ACLActionProvider",properties:{drawer:{type:"void",title:'{{ t("Edit record") }}',"x-component":"Action.Container","x-component-props":{className:"tb-action-popup"},properties:{card:{type:"void","x-acl-action-props":{skipScopeCheck:!1},"x-acl-action":"autoBackup:update","x-decorator":"FormBlockProvider","x-use-decorator-props":"useEditFormBlockDecoratorProps","x-decorator-props":{action:"get",dataSource:"main",collection:"autoBackup"},"x-component":"CardItem",properties:{form:{type:"void","x-component":"FormV2","x-use-component-props":"useEditFormBlockProps",properties:$({actionBar:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:"var(--tb-spacing)"}},properties:{submit:{title:'{{ t("Submit") }}',"x-action":"submit","x-component":"Action","x-use-component-props":"useUpdateActionProps","x-component-props":{type:"primary",htmlType:"submit"},"x-action-settings":{triggerWorkflows:[],onSuccess:{manualClose:!1,redirecting:!1,successMessage:'{{t("Updated successfully")}}'},isDeltaChanged:!1},type:"void"}}}},Ye)}}}}}}},Wt={type:"void",properties:{autoBackupTable:{type:"void","x-decorator":"TableBlockProvider","x-acl-action":"autoBackup:list","x-use-decorator-props":"useTableBlockDecoratorProps","x-decorator-props":{collection:"autoBackup",dataSource:"main",action:"list",params:{pageSize:20},rowKey:"id",showIndex:!0,dragSort:!1},"x-component":"CardItem","x-filter-targets":[],properties:{actions:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:"var(--tb-spacing)"}},properties:{refresh:{type:"void",title:'{{ t("Refresh") }}',"x-action":"refresh","x-component":"Action","x-settings":"actionSettings:refresh","x-component-props":{icon:"ReloadOutlined"},"x-use-component-props":"useRefreshActionProps"},create:Ht}},table:{type:"array","x-component":"TableV2","x-use-component-props":"useTableBlockProps","x-component-props":{rowKey:"id",rowSelection:{type:"checkbox"}},properties:{title:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{title:{"x-collection-field":"autoBackup.title","x-component":"CollectionField","x-component-props":{ellipsis:!0},"x-read-pretty":!0,"x-decorator":null,"x-decorator-props":{labelStyle:{display:"none"}}}}},enabled:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{enabled:{"x-collection-field":"autoBackup.enabled","x-component":"CollectionField","x-component-props":{ellipsis:!0},"x-read-pretty":!0,"x-decorator":null,"x-decorator-props":{labelStyle:{display:"none"}}}}},maxNumber:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{maxNumber:{"x-collection-field":"autoBackup.maxNumber","x-component":"CollectionField","x-component-props":{ellipsis:!0},"x-read-pretty":!0,"x-decorator":null,"x-decorator-props":{labelStyle:{display:"none"}}}}},actions:{type:"void",title:'{{ t("Actions") }}',"x-action-column":"actions","x-decorator":"TableV2.Column.ActionBar","x-component":"TableV2.Column","x-component-props":{width:100,fixed:"right"},properties:{actions:{type:"void","x-component":"Space",properties:{editAction:Ut,delete:{type:"void",title:"Delete","x-action":"destroy","x-component":"Action.Link","x-component-props":{confirm:{title:"Delete",content:"Are you sure you want to delete it?"}},"x-decorator":"ACLActionProvider","x-use-component-props":"useDestroyActionProps"},clear:{type:"void",title:vt("Clear current times"),"x-action":"clearLimit","x-component":"Action.Link","x-component-props":{confirm:{title:"Clear",content:"Are you sure you want to clear current times?"}},"x-decorator":"ACLActionProvider","x-use-component-props":()=>{const{refresh:e}=C.useDataBlockRequest(),o=C.useDataBlockResource(),a=C.useRecord();return{onClick(){return G(this,null,function*(){yield o.clearLimitExecuted({id:a.id}),e()})}}}}}}}}}}}}}},zt=()=>{const{t:e}=Q(),{data:o,loading:a,refresh:t}=C.useRequest({url:"backupFiles:dumpableCollections"}),n=f.useMemo(()=>o?Object.keys(o).map(u=>({value:u,label:e(`${u}.title`),disabled:["required","skipped"].includes(u)})):[],[o]);return r.jsx(C.ExtendCollectionsProvider,{collections:[Mt],children:r.jsx(C.SchemaComponent,{schema:Wt,name:"auto-backup-table",components:{RepeatField:Vt},scope:{t:e,dumpRuleTypes:n}})})},Ke=function(e){return r.jsx(C.SchemaComponentOptions,{children:e.children})};Ke.displayName="DuplicatorProvider";class Xe extends C.Plugin{load(){return G(this,null,function*(){this.app.use(Ke),this.app.systemSettingsManager.add("system-services."+ie,{title:this.t("Backup & Restore"),icon:"CloudServerOutlined",sort:-50}),this.app.systemSettingsManager.add("system-services."+ie+".files",{title:this.t("Backup file"),icon:"CloudServerOutlined",Component:Ot,aclSnippet:"pm.backup.restore"}),this.app.systemSettingsManager.add("system-services."+ie+".auto",{title:this.t("Auto backup"),icon:"CloudServerOutlined",Component:zt,aclSnippet:"pm.backup.auto",sort:20})})}}N.PluginBackupRestoreClient=Xe,N.default=Xe,Object.defineProperties(N,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
@@ -1,6 +1,6 @@
1
1
  module.exports = {
2
2
  "react": "18.3.1",
3
- "@tachybase/client": "1.6.15",
3
+ "@tachybase/client": "1.6.16",
4
4
  "@tego/client": "1.6.10",
5
5
  "@ant-design/icons": "6.1.0",
6
6
  "antd": "5.22.5",
@@ -1 +1 @@
1
- {"name":"@hapi/topo","description":"Topological sorting with grouping support","version":"6.0.2","repository":"git://github.com/hapijs/topo","main":"lib/index.js","types":"lib/index.d.ts","files":["lib"],"keywords":["topological","sort","toposort","topsort"],"eslintConfig":{"extends":["plugin:@hapi/module"]},"dependencies":{"@hapi/hoek":"^11.0.2"},"devDependencies":{"@hapi/code":"^9.0.3","@hapi/eslint-plugin":"*","@hapi/lab":"^25.1.2","@types/node":"^17.0.31","typescript":"~4.6.4"},"scripts":{"test":"lab -a @hapi/code -t 100 -L -Y","test-cov-html":"lab -a @hapi/code -t 100 -L -r html -o coverage.html"},"license":"BSD-3-Clause","_lastModified":"2026-04-09T08:03:06.273Z"}
1
+ {"name":"@hapi/topo","description":"Topological sorting with grouping support","version":"6.0.2","repository":"git://github.com/hapijs/topo","main":"lib/index.js","types":"lib/index.d.ts","files":["lib"],"keywords":["topological","sort","toposort","topsort"],"eslintConfig":{"extends":["plugin:@hapi/module"]},"dependencies":{"@hapi/hoek":"^11.0.2"},"devDependencies":{"@hapi/code":"^9.0.3","@hapi/eslint-plugin":"*","@hapi/lab":"^25.1.2","@types/node":"^17.0.31","typescript":"~4.6.4"},"scripts":{"test":"lab -a @hapi/code -t 100 -L -Y","test-cov-html":"lab -a @hapi/code -t 100 -L -r html -o coverage.html"},"license":"BSD-3-Clause","_lastModified":"2026-04-27T06:01:20.198Z"}
@@ -1 +1 @@
1
- {"name":"archiver","version":"7.0.1","description":"a streaming interface for archive generation","homepage":"https://github.com/archiverjs/node-archiver","author":{"name":"Chris Talkington","url":"http://christalkington.com/"},"repository":{"type":"git","url":"https://github.com/archiverjs/node-archiver.git"},"bugs":{"url":"https://github.com/archiverjs/node-archiver/issues"},"license":"MIT","main":"index.js","files":["index.js","lib"],"engines":{"node":">= 14"},"scripts":{"test":"mocha --reporter dot","bench":"node benchmark/simple/pack-zip.js"},"dependencies":{"archiver-utils":"^5.0.2","async":"^3.2.4","buffer-crc32":"^1.0.0","readable-stream":"^4.0.0","readdir-glob":"^1.1.2","tar-stream":"^3.0.0","zip-stream":"^6.0.1"},"devDependencies":{"archiver-jsdoc-theme":"1.1.3","chai":"4.4.1","jsdoc":"4.0.2","mkdirp":"3.0.1","mocha":"10.3.0","rimraf":"5.0.5","stream-bench":"0.1.2","tar":"6.2.0","yauzl":"3.1.2"},"keywords":["archive","archiver","stream","zip","tar"],"publishConfig":{"registry":"https://registry.npmjs.org/"},"_lastModified":"2026-04-09T08:03:06.158Z"}
1
+ {"name":"archiver","version":"7.0.1","description":"a streaming interface for archive generation","homepage":"https://github.com/archiverjs/node-archiver","author":{"name":"Chris Talkington","url":"http://christalkington.com/"},"repository":{"type":"git","url":"https://github.com/archiverjs/node-archiver.git"},"bugs":{"url":"https://github.com/archiverjs/node-archiver/issues"},"license":"MIT","main":"index.js","files":["index.js","lib"],"engines":{"node":">= 14"},"scripts":{"test":"mocha --reporter dot","bench":"node benchmark/simple/pack-zip.js"},"dependencies":{"archiver-utils":"^5.0.2","async":"^3.2.4","buffer-crc32":"^1.0.0","readable-stream":"^4.0.0","readdir-glob":"^1.1.2","tar-stream":"^3.0.0","zip-stream":"^6.0.1"},"devDependencies":{"archiver-jsdoc-theme":"1.1.3","chai":"4.4.1","jsdoc":"4.0.2","mkdirp":"3.0.1","mocha":"10.3.0","rimraf":"5.0.5","stream-bench":"0.1.2","tar":"6.2.0","yauzl":"3.1.2"},"keywords":["archive","archiver","stream","zip","tar"],"publishConfig":{"registry":"https://registry.npmjs.org/"},"_lastModified":"2026-04-27T06:01:20.101Z"}
@@ -1 +1 @@
1
- {"name":"cron-parser","version":"4.9.0","description":"Node.js library for parsing crontab instructions","main":"lib/parser.js","types":"types/index.d.ts","typesVersions":{"<4.1":{"*":["types/ts3/*"]}},"directories":{"test":"test"},"scripts":{"test:tsd":"tsd","test:unit":"TZ=UTC tap ./test/*.js","test:cover":"TZ=UTC tap --coverage-report=html ./test/*.js","lint":"eslint .","lint:fix":"eslint --fix .","test":"npm run lint && npm run test:unit && npm run test:tsd"},"repository":{"type":"git","url":"https://github.com/harrisiirak/cron-parser.git"},"keywords":["cron","crontab","parser"],"author":"Harri Siirak","contributors":["Nicholas Clawson","Daniel Prentis <daniel@salsitasoft.com>","Renault John Lecoultre","Richard Astbury <richard.astbury@gmail.com>","Meaglin Wasabi <Meaglin.wasabi@gmail.com>","Mike Kusold <hello@mikekusold.com>","Alex Kit <alex.kit@atmajs.com>","Santiago Gimeno <santiago.gimeno@gmail.com>","Daniel <darc.tec@gmail.com>","Christian Steininger <christian.steininger.cs@gmail.com>","Mykola Piskovyi <m.piskovyi@gmail.com>","Brian Vaughn <brian.david.vaughn@gmail.com>","Nicholas Clawson <nickclaw@gmail.com>","Yasuhiroki <yasuhiroki.duck@gmail.com>","Nicholas Clawson <nickclaw@gmail.com>","Brendan Warkentin <faazshift@gmail.com>","Charlie Fish <fishcharlie.code@gmail.com>","Ian Graves <ian+diskimage@iangrav.es>","Andy Thompson <me@andytson.com>","Regev Brody <regevbr@gmail.com>"],"license":"MIT","dependencies":{"luxon":"^3.2.1"},"devDependencies":{"eslint":"^8.27.0","sinon":"^15.0.1","tap":"^16.3.3","tsd":"^0.26.0"},"engines":{"node":">=12.0.0"},"browser":{"fs":false},"tap":{"check-coverage":false},"tsd":{"directory":"test","compilerOptions":{"lib":["es2017","dom"]}},"files":["lib","types","LICENSE","README.md"],"_lastModified":"2026-04-09T08:03:07.501Z"}
1
+ {"name":"cron-parser","version":"4.9.0","description":"Node.js library for parsing crontab instructions","main":"lib/parser.js","types":"types/index.d.ts","typesVersions":{"<4.1":{"*":["types/ts3/*"]}},"directories":{"test":"test"},"scripts":{"test:tsd":"tsd","test:unit":"TZ=UTC tap ./test/*.js","test:cover":"TZ=UTC tap --coverage-report=html ./test/*.js","lint":"eslint .","lint:fix":"eslint --fix .","test":"npm run lint && npm run test:unit && npm run test:tsd"},"repository":{"type":"git","url":"https://github.com/harrisiirak/cron-parser.git"},"keywords":["cron","crontab","parser"],"author":"Harri Siirak","contributors":["Nicholas Clawson","Daniel Prentis <daniel@salsitasoft.com>","Renault John Lecoultre","Richard Astbury <richard.astbury@gmail.com>","Meaglin Wasabi <Meaglin.wasabi@gmail.com>","Mike Kusold <hello@mikekusold.com>","Alex Kit <alex.kit@atmajs.com>","Santiago Gimeno <santiago.gimeno@gmail.com>","Daniel <darc.tec@gmail.com>","Christian Steininger <christian.steininger.cs@gmail.com>","Mykola Piskovyi <m.piskovyi@gmail.com>","Brian Vaughn <brian.david.vaughn@gmail.com>","Nicholas Clawson <nickclaw@gmail.com>","Yasuhiroki <yasuhiroki.duck@gmail.com>","Nicholas Clawson <nickclaw@gmail.com>","Brendan Warkentin <faazshift@gmail.com>","Charlie Fish <fishcharlie.code@gmail.com>","Ian Graves <ian+diskimage@iangrav.es>","Andy Thompson <me@andytson.com>","Regev Brody <regevbr@gmail.com>"],"license":"MIT","dependencies":{"luxon":"^3.2.1"},"devDependencies":{"eslint":"^8.27.0","sinon":"^15.0.1","tap":"^16.3.3","tsd":"^0.26.0"},"engines":{"node":">=12.0.0"},"browser":{"fs":false},"tap":{"check-coverage":false},"tsd":{"directory":"test","compilerOptions":{"lib":["es2017","dom"]}},"files":["lib","types","LICENSE","README.md"],"_lastModified":"2026-04-27T06:01:20.993Z"}
@@ -1 +1 @@
1
- {"name":"semver","version":"7.7.2","description":"The semantic version parser used by npm.","main":"index.js","scripts":{"test":"tap","snap":"tap","lint":"npm run eslint","postlint":"template-oss-check","lintfix":"npm run eslint -- --fix","posttest":"npm run lint","template-oss-apply":"template-oss-apply --force","eslint":"eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""},"devDependencies":{"@npmcli/eslint-config":"^5.0.0","@npmcli/template-oss":"4.24.3","benchmark":"^2.1.4","tap":"^16.0.0"},"license":"ISC","repository":{"type":"git","url":"git+https://github.com/npm/node-semver.git"},"bin":{"semver":"bin/semver.js"},"files":["bin/","lib/","classes/","functions/","internal/","ranges/","index.js","preload.js","range.bnf"],"tap":{"timeout":30,"coverage-map":"map.js","nyc-arg":["--exclude","tap-snapshots/**"]},"engines":{"node":">=10"},"author":"GitHub Inc.","templateOSS":{"//@npmcli/template-oss":"This file is partially managed by @npmcli/template-oss. Edits may be overwritten.","version":"4.24.3","engines":">=10","distPaths":["classes/","functions/","internal/","ranges/","index.js","preload.js","range.bnf"],"allowPaths":["/classes/","/functions/","/internal/","/ranges/","/index.js","/preload.js","/range.bnf","/benchmarks"],"publish":"true"},"_lastModified":"2026-04-09T08:03:06.829Z"}
1
+ {"name":"semver","version":"7.7.2","description":"The semantic version parser used by npm.","main":"index.js","scripts":{"test":"tap","snap":"tap","lint":"npm run eslint","postlint":"template-oss-check","lintfix":"npm run eslint -- --fix","posttest":"npm run lint","template-oss-apply":"template-oss-apply --force","eslint":"eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\""},"devDependencies":{"@npmcli/eslint-config":"^5.0.0","@npmcli/template-oss":"4.24.3","benchmark":"^2.1.4","tap":"^16.0.0"},"license":"ISC","repository":{"type":"git","url":"git+https://github.com/npm/node-semver.git"},"bin":{"semver":"bin/semver.js"},"files":["bin/","lib/","classes/","functions/","internal/","ranges/","index.js","preload.js","range.bnf"],"tap":{"timeout":30,"coverage-map":"map.js","nyc-arg":["--exclude","tap-snapshots/**"]},"engines":{"node":">=10"},"author":"GitHub Inc.","templateOSS":{"//@npmcli/template-oss":"This file is partially managed by @npmcli/template-oss. Edits may be overwritten.","version":"4.24.3","engines":">=10","distPaths":["classes/","functions/","internal/","ranges/","index.js","preload.js","range.bnf"],"allowPaths":["/classes/","/functions/","/internal/","/ranges/","/index.js","/preload.js","/range.bnf","/benchmarks"],"publish":"true"},"_lastModified":"2026-04-27T06:01:20.426Z"}
@@ -1 +1 @@
1
- {"name":"yauzl","version":"3.2.0","description":"yet another unzip library for node","engines":{"node":">=12"},"main":"index.js","scripts":{"test":"node test/test.js"},"repository":{"type":"git","url":"git+https://github.com/thejoshwolfe/yauzl.git"},"keywords":["unzip","zip","stream","archive","file"],"author":"Josh Wolfe <thejoshwolfe@gmail.com>","license":"MIT","bugs":{"url":"https://github.com/thejoshwolfe/yauzl/issues"},"homepage":"https://github.com/thejoshwolfe/yauzl","dependencies":{"buffer-crc32":"~0.2.3","pend":"~1.2.0"},"devDependencies":{"bl":"^6.0.11"},"files":["fd-slicer.js","index.js"],"_lastModified":"2026-04-09T08:03:07.023Z"}
1
+ {"name":"yauzl","version":"3.2.0","description":"yet another unzip library for node","engines":{"node":">=12"},"main":"index.js","scripts":{"test":"node test/test.js"},"repository":{"type":"git","url":"git+https://github.com/thejoshwolfe/yauzl.git"},"keywords":["unzip","zip","stream","archive","file"],"author":"Josh Wolfe <thejoshwolfe@gmail.com>","license":"MIT","bugs":{"url":"https://github.com/thejoshwolfe/yauzl/issues"},"homepage":"https://github.com/thejoshwolfe/yauzl","dependencies":{"buffer-crc32":"~0.2.3","pend":"~1.2.0"},"devDependencies":{"bl":"^6.0.11"},"files":["fd-slicer.js","index.js"],"_lastModified":"2026-04-27T06:01:20.584Z"}
@@ -38,6 +38,65 @@ var import_server = require("@tego/server");
38
38
  var import_dumper = require("../dumper");
39
39
  var import_restorer = require("../restorer");
40
40
  var import_server2 = __toESM(require("../server"));
41
+ function bindDownloadDiagnostics(ctx, options) {
42
+ var _a, _b;
43
+ const logger = ctx.logger || ctx.tego.logger;
44
+ const startedAt = Date.now();
45
+ const requestId = ((_a = ctx.get) == null ? void 0 : _a.call(ctx, "x-request-id")) || ((_b = ctx.state) == null ? void 0 : _b.requestId);
46
+ const state = {
47
+ requestAborted: false
48
+ };
49
+ ctx.req.once("aborted", () => {
50
+ state.requestAborted = true;
51
+ logger == null ? void 0 : logger.warn(`${options.action} request aborted`, {
52
+ requestId,
53
+ appName: ctx.tego.name,
54
+ fileName: options.fileName,
55
+ filePath: options.filePath,
56
+ durationMs: Date.now() - startedAt
57
+ });
58
+ });
59
+ ctx.res.once("close", () => {
60
+ var _a2;
61
+ if (!ctx.res.writableEnded) {
62
+ logger == null ? void 0 : logger.warn(`${options.action} connection closed before stream finished`, {
63
+ requestId,
64
+ appName: ctx.tego.name,
65
+ fileName: options.fileName,
66
+ filePath: options.filePath,
67
+ durationMs: Date.now() - startedAt,
68
+ requestAborted: state.requestAborted,
69
+ responseFinished: ctx.res.writableFinished,
70
+ requestEnded: ctx.req.readableEnded,
71
+ socketDestroyed: (_a2 = ctx.req.socket) == null ? void 0 : _a2.destroyed
72
+ });
73
+ }
74
+ });
75
+ ctx.res.once("finish", () => {
76
+ logger == null ? void 0 : logger.info(`${options.action} completed`, {
77
+ requestId,
78
+ appName: ctx.tego.name,
79
+ fileName: options.fileName,
80
+ durationMs: Date.now() - startedAt
81
+ });
82
+ });
83
+ return (error) => {
84
+ logger == null ? void 0 : logger.error(`${options.action} stream error`, {
85
+ requestId,
86
+ appName: ctx.tego.name,
87
+ fileName: options.fileName,
88
+ filePath: options.filePath,
89
+ error: (error == null ? void 0 : error.stack) || (error == null ? void 0 : error.message) || String(error)
90
+ });
91
+ };
92
+ }
93
+ function setDownloadResponse(ctx, options) {
94
+ ctx.set("X-Accel-Buffering", "no");
95
+ ctx.set("Content-Type", "application/octet-stream");
96
+ ctx.length = options.fileSize;
97
+ ctx.attachment(options.fileName);
98
+ ctx.body = options.stream;
99
+ }
41
100
  var backup_files_default = {
42
101
  name: "backupFiles",
43
102
  middleware: async (ctx, next) => {
@@ -173,13 +232,26 @@ var backup_files_default = {
173
232
  const filePath = dumper.backUpFilePath(filterByTk, ctx.tego.name);
174
233
  const fileState = await import_dumper.Dumper.getFileStatus(filePath);
175
234
  if (fileState.status !== "ok") {
176
- throw new Error(`Backup file ${filterByTk} not found`);
235
+ ctx.throw(404, `Backup file ${filterByTk} not found`);
236
+ return;
237
+ }
238
+ const stats = await import_promises.default.stat(filePath);
239
+ if (!stats.isFile()) {
240
+ ctx.throw(404, `Backup file ${filterByTk} not found`);
241
+ return;
177
242
  }
178
- const stats = import_node_fs.default.statSync(filePath);
179
- const fileSize = stats.size;
180
- ctx.set("Content-Length", fileSize);
181
- ctx.attachment(filePath);
182
- ctx.body = import_node_fs.default.createReadStream(filePath);
243
+ const stream = import_node_fs.default.createReadStream(filePath);
244
+ const logStreamError = bindDownloadDiagnostics(ctx, {
245
+ action: "backupFiles:download",
246
+ fileName: filterByTk,
247
+ filePath
248
+ });
249
+ stream.once("error", logStreamError);
250
+ setDownloadResponse(ctx, {
251
+ fileName: filterByTk,
252
+ fileSize: stats.size,
253
+ stream
254
+ });
183
255
  await next();
184
256
  },
185
257
  async restore(ctx, next) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tachybase/module-backup",
3
3
  "displayName": "App backup & restore",
4
- "version": "1.6.15",
4
+ "version": "1.6.16",
5
5
  "description": "Backup and restore applications for scenarios such as application replication, migration, and upgrades.",
6
6
  "keywords": [
7
7
  "System management"
@@ -43,8 +43,8 @@
43
43
  "semver": "7.7.2",
44
44
  "tar": "^7.4.3",
45
45
  "yauzl": "^3.2.0",
46
- "@tachybase/client": "1.6.15",
47
- "@tachybase/module-worker-thread": "1.6.15"
46
+ "@tachybase/client": "1.6.16",
47
+ "@tachybase/module-worker-thread": "1.6.16"
48
48
  },
49
49
  "description.zh-CN": "备份和还原应用,可用于应用的复制、迁移、升级等场景。",
50
50
  "displayName.zh-CN": "应用的备份与还原",