@ws-ui/store 0.1.11 → 0.1.13

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.
Files changed (85) hide show
  1. package/README.md +0 -0
  2. package/dist/hooks/index.d.ts +0 -0
  3. package/dist/hooks/store.d.ts +0 -0
  4. package/dist/index.cjs.js +1 -1
  5. package/dist/index.cjs.js.map +1 -1
  6. package/dist/index.d.ts +0 -0
  7. package/dist/index.es.js +2 -2
  8. package/dist/index.es.js.map +1 -1
  9. package/dist/modules/catalog/index.d.ts +0 -0
  10. package/dist/modules/catalog/reducer.d.ts +0 -0
  11. package/dist/modules/catalog/thunks.d.ts +0 -0
  12. package/dist/modules/catalog/types.d.ts +0 -0
  13. package/dist/modules/debugger/index.d.ts +0 -0
  14. package/dist/modules/debugger/reducer.d.ts +0 -0
  15. package/dist/modules/debugger/thunks.d.ts +0 -0
  16. package/dist/modules/debugger/types.d.ts +0 -0
  17. package/dist/modules/debugger/utils.d.ts +0 -0
  18. package/dist/modules/explorer/index.d.ts +0 -0
  19. package/dist/modules/explorer/reducer.d.ts +0 -0
  20. package/dist/modules/explorer/thunks.d.ts +0 -0
  21. package/dist/modules/explorer/types.d.ts +0 -0
  22. package/dist/modules/explorer/utils.d.ts +0 -0
  23. package/dist/modules/index.d.ts +0 -0
  24. package/dist/modules/modals/index.d.ts +0 -0
  25. package/dist/modules/modals/reducer.d.ts +0 -0
  26. package/dist/modules/modals/thunks.d.ts +0 -0
  27. package/dist/modules/modals/types.d.ts +0 -0
  28. package/dist/modules/model/helpers.d.ts +0 -0
  29. package/dist/modules/model/index.d.ts +0 -0
  30. package/dist/modules/model/reducer.d.ts +0 -0
  31. package/dist/modules/model/selectors.d.ts +0 -0
  32. package/dist/modules/model/subjects.d.ts +0 -0
  33. package/dist/modules/model/thunks.d.ts +0 -0
  34. package/dist/modules/model/types.d.ts +0 -0
  35. package/dist/modules/roles/__tests__/adapter.test.d.ts +0 -0
  36. package/dist/modules/roles/adapter.d.ts +0 -0
  37. package/dist/modules/roles/index.d.ts +0 -0
  38. package/dist/modules/roles/reducer.d.ts +0 -0
  39. package/dist/modules/roles/thunks.d.ts +0 -0
  40. package/dist/modules/roles/types.d.ts +0 -0
  41. package/dist/modules/root/index.d.ts +0 -0
  42. package/dist/modules/root/reducer.d.ts +0 -0
  43. package/dist/modules/root/thunks.d.ts +0 -0
  44. package/dist/modules/root/types.d.ts +0 -0
  45. package/dist/modules/settings/index.d.ts +0 -0
  46. package/dist/modules/settings/reducer.d.ts +0 -0
  47. package/dist/modules/settings/thunks.d.ts +0 -0
  48. package/dist/modules/settings/types.d.ts +0 -0
  49. package/dist/modules/settings/utils.d.ts +0 -0
  50. package/dist/modules/shared-css/index.d.ts +0 -0
  51. package/dist/modules/shared-css/reducer.d.ts +0 -0
  52. package/dist/modules/shared-css/thunks.d.ts +0 -0
  53. package/dist/modules/shared-css/types.d.ts +0 -0
  54. package/dist/modules/shared-datasources/index.d.ts +0 -0
  55. package/dist/modules/shared-datasources/reducer.d.ts +0 -0
  56. package/dist/modules/shared-datasources/thunks.d.ts +0 -0
  57. package/dist/modules/shared-datasources/types.d.ts +0 -0
  58. package/dist/modules/tabs/index.d.ts +0 -0
  59. package/dist/modules/tabs/reducer.d.ts +0 -0
  60. package/dist/modules/tabs/selectors.d.ts +0 -0
  61. package/dist/modules/tabs/types.d.ts +0 -0
  62. package/dist/modules/webforms/datasources.adapter.d.ts +0 -0
  63. package/dist/modules/webforms/index.d.ts +0 -0
  64. package/dist/modules/webforms/private.d.ts +0 -0
  65. package/dist/modules/webforms/reducer.d.ts +0 -0
  66. package/dist/modules/webforms/thunks.d.ts +0 -0
  67. package/dist/modules/webforms/types.d.ts +0 -0
  68. package/dist/provider.d.ts +0 -0
  69. package/dist/selectors/catalog.d.ts +0 -0
  70. package/dist/selectors/common.d.ts +0 -0
  71. package/dist/selectors/components.d.ts +0 -0
  72. package/dist/selectors/datasources.d.ts +0 -0
  73. package/dist/selectors/debugger.d.ts +0 -0
  74. package/dist/selectors/explorer.d.ts +0 -0
  75. package/dist/selectors/index.d.ts +0 -0
  76. package/dist/selectors/modals.d.ts +0 -0
  77. package/dist/selectors/roles.d.ts +0 -0
  78. package/dist/selectors/settings.d.ts +0 -0
  79. package/dist/selectors/states.d.ts +0 -0
  80. package/dist/selectors/styles.d.ts +0 -0
  81. package/dist/selectors/tabs.d.ts +0 -0
  82. package/dist/selectors/webforms.d.ts +0 -0
  83. package/dist/store.d.ts +0 -0
  84. package/dist/utils.d.ts +0 -0
  85. package/package.json +3 -3
package/README.md CHANGED
File without changes
File without changes
File without changes
package/dist/index.cjs.js CHANGED
@@ -96,7 +96,7 @@ The error may be correlated with this previous error:
96
96
  `:`Class extends Entity
97
97
  `};case"model":return{name:"DataStore",content:i?`extends DataStoreImplementation
98
98
  `:`Class extends DataStoreImplementation
99
- `}}};e.type==="dataclass"&&!e.toCreate?p=[{...h("dataclass")},{...h("collection")},{...h("entity")}]:e.type==="dataclass"&&e.toCreate?p=[{...h(e.toCreate)}]:p=[{...h("model")}],p=p.filter(_=>!d.find(({name:E,ext:T})=>E===_.name&&T===(i?"4qs":"4dm"))),await Promise.all(p.map(async({name:_,content:E})=>{await n(Gn({type:b.FileFolderType.CLASS,path:s,fileName:_,parentNode:c,content:E,qodly:a.settings.server.qodly}))})),await n(_r(s))}),_r=Q("explorer/fetchFolderContent",async(e,{rejectWithValue:n})=>{try{return(await b.getNodeInfo({verb:b.DesignerRequestVerb.GET_INFO,path:e})).map(a=>{const s=`${e}/${a.name}`,{editor:i,supportedEditors:c}=pr(`${s}${a.ext?`.${a.ext.toLowerCase()}`:""}`);return{name:a.name,size:a.size,type:a.type,date:`${a.date}`,flags:{},error:null,path:s,ext:a.ext,config:a.type==="folder"?{}:{editor:i,supportedEditors:c}}})}catch{return n("Failed loading file content please Reload")}},{getPendingMeta:()=>{}}),Aa=Q("explorer/fetchFolderContentWithoutExpanding",async(e,{rejectWithValue:n})=>{try{return(await b.getNodeInfo({verb:b.DesignerRequestVerb.GET_INFO,path:e})).map(a=>{const s=`${e}/${a.name}`,{editor:i,supportedEditors:c}=pr(`${s}${a.ext?`.${a.ext.toLowerCase()}`:""}`);return{name:a.name,size:a.size,type:a.type,date:`${a.date}`,flags:{},error:null,path:s,ext:a.ext,config:a.type==="folder"?{}:{editor:i,supportedEditors:c}}})}catch{return n("Failed loading file content please Reload")}},{getPendingMeta:()=>{}});function UP(e){const n=e.split(".");return n.pop(),{name:n.join("."),ext:e.split(".")[e.split(".").length-1]}}const HP=Q("explorer/uploadFile",async e=>{const n=e.type.includes("image/")?"$rawPict=true":"$binary=true";try{const t=await fetch(`/rest/$upload?${n}`,{method:"POST",headers:{"Content-Type":e.type},body:e});return{status:t.status,data:await t.json()}}catch{return{status:500,data:null}}}),GP=Q("explorer/uploadFile",async({file:e,path:n,parentNode:t},{dispatch:a})=>{const{editor:s,supportedEditors:i}=pr(n),{name:c,ext:l}=UP(e.name);a(Wg({parent:t,child:{name:c,path:`${n}/${e.name}?t=${Date.now()}`,type:e.type,error:null,flags:{loading:!0},config:{editor:s,supportedEditors:i},ext:l}}));try{const d=await fetch(`/rest/$upload?$sharedFolder=true&$filename=${e.name}&$path=${n}`,{method:"POST",headers:{"Content-Type":e.type},body:e});return d.status>=300?(a(sc({parent:t,child:{name:c,path:`${n}/${e.name}`,type:e.type,error:{message:"error uploading file"},flags:{},config:{editor:s,supportedEditors:i},ext:l}})),d.status!==413&&b.toastSubject.next({message:"error uploading file",kind:"danger"})):await a(_r(t.path)),{status:d.status,fileName:e.name}}catch{return a(sc({parent:t,child:{name:c,path:`${n}/${e.name}`,type:e.type,error:{message:"error uploading file"},flags:{},config:{editor:s,supportedEditors:i},ext:l}})),b.toastSubject.next({message:"error uploading file",kind:"danger"}),{status:500,fileName:e.name}}}),Gn=Q("explorer/createNewFile",async({fileName:e,type:n,path:t,parentNode:a,content:s},{dispatch:i,rejectWithValue:c,getState:l})=>{const{server:{qodly:d},project:p}=l().settings;try{const h=await b.setFileContent({name:Hg(e,n,d),content:s||Ug(n,p),path:t,asText:[b.FileFolderType.CLASS,b.FileFolderType.METHOD].includes(n)});return a.error&&(a.flags.expanded?await i(_r(a.path)):await i(Aa(a.path))),{qodly:d,file:h,parentNode:a}}catch{return c("failed to create folder")}});function qg(e,n){const{qodly:t=!0,withExtension:a=!0}=n||{},s=b.getFileExtentionFromType(e.type,t);let i="";switch(e.type){case b.FileFolderType.WEBFORM:i=`${b.FolderRootPath.WEBFORMS}/${e.name}`;break;case b.FileFolderType.METHOD:i=`${b.FolderRootPath.METHODS}/${e.name}`;break;case b.FileFolderType.CLASS:i=`${b.FolderRootPath.CLASSES}/${e.name}`;break;default:return""}return`${i}${a?`.${s}`:""}`}const qP=Q("explorer/createNewFileAndOpen",async(e,{dispatch:n,getState:t})=>{const a=await n(Gn(e)).unwrap(),{qodly:s}=t().settings.server;if(a){const{file:i}=a,c=qg(i,{withExtension:!1,qodly:s}),{editor:l}=pr(c);await n(Pa({file:{name:e.fileName,type:i.type,path:c,editor:l,date:new Date().toISOString()}}))}}),Jo=Q("explorer/createNewNode",async({fileName:e,path:n,parentNode:t},{rejectWithValue:a})=>{try{return{file:await b.createFolder({verb:b.DesignerRequestVerb.CREATE_FOLDER,path:`${n}/${e}`,recursive:!0}),parentNode:t}}catch{return b.toastSubject.next({message:"failed to create folder",kind:"danger"}),a("failed to create folder")}}),js=async(e,n={})=>{try{const t=e.path.split(".").at(-1),a=await b.getNodeInfo({verb:b.DesignerRequestVerb.GET_INFO,path:e.path,content:!0,as:vh(t)?"json":"text"}),s={editor:e.editor},i=b.getTypeFromExtension(e.path);i===b.FileFolderType.METHOD&&(s.attributes=b.parseAttributes(a.content),a.content=b.addAttributesToContent(a.content,{}));const{content:c,date:l,ext:d}=a;return n.confirmed===void 0&&(n.confirmed=!0),{date:l,view:{panel:{isOpen:!1,type:"",current:""}},flags:{enabled:["WebForm","MForm"].includes(d),confirmed:n.confirmed},extra:s,name:e.name,path:e.path,type:i,initialContent:c,content:c}}catch(t){const{data:a}=t;if(a.__ERROR.find(s=>s.errCode===b.ERROR_CODES.FILE_NOT_FOUND))switch(e.path){case b.ROLES_TAB_PATH:{const s={permissions:{allowed:[]},privileges:[],roles:[]};return{date:new Date().toISOString(),flags:{},extra:{editor:{key:"editors:roles"}},name:"Roles & Privileges",path:e.path,type:b.FileFolderType.ROLES,initialContent:s,content:s}}case b.SETTINGS_TAB_PATH:{const s={};return{date:new Date().toISOString(),flags:{},extra:{editor:{key:"editors:settings"}},name:"Settings",path:e.path,type:b.FileFolderType.SETTINGS,initialContent:s,content:s}}}throw t}},Pa=Q("explorer/openFile",async({file:e,inactive:n,isNew:t,flags:a={}},{getState:s,dispatch:i})=>{const{root:{tabs:c},roles:l,debugger:{sessions:d}}=s(),p=c.find(({path:_})=>e.path===_);if(p){const _={...p,extra:{...p==null?void 0:p.extra,editor:e.editor},flags:{...p==null?void 0:p.flags,...a}};return i(Pt(_)),_}if(e.path.startsWith("Debugger")){const _=d.find(E=>`Debugger/${E.threadId}`===e.path);if(_){const{source:{content:E},source:T}=_.currentStackFrame,x={name:e.name,type:b.FileFolderType.DEBUGGER,date:new Date().toISOString(),path:e.path,content:E,view:{panel:{isOpen:!1,type:"",current:""}},initialContent:E,flags:{confirmed:!0},extra:{source:T,editor:e.editor}};return i(Pt(x)),x}}let h=null;try{h=await js(e,a)}catch(_){const{data:E}=_;if(E.__ERROR.find(T=>[b.ERROR_CODES.JSON_MALFORMED,b.ERROR_CODES.JSON_MALFORMED_AT_LINE].includes(T.errCode))){const{confirmed:T}=await i(ar({title:"Corrupt file",type:b.ModalType.CONFIRM,color:b.ModalColor.WARNING,message:"Open in code editor ?"})).unwrap();if(T){const x=await b.getNodeInfo({verb:b.DesignerRequestVerb.GET_INFO,path:e.path,content:!0,as:"text"}),{content:D,date:P,ext:j}=x;h={date:P,view:{panel:{isOpen:!1,type:"",current:""}},flags:{enabled:["WebForm","MForm"].includes(j),confirmed:!0},extra:{editor:b.EDITOR.Code},name:e.name,path:e.path,type:b.getTypeFromExtension(e.path),initialContent:D,content:D}}}}return h&&(e.path===b.ROLES_TAB_PATH&&!l.flags.touched?i(Wc({content:h.content,date:h.date})):e.path===b.SETTINGS_TAB_PATH&&i(ks({path:"project",value:h.content})),i((n?_v:Pt)({...h,isNew:t})),h)}),Gc=Q("explorer/openFileAtLine",async({file:e},{getState:n,dispatch:t})=>{const{tabs:a}=n().root,s=a.find(({path:c})=>e.path===c);if(s){const c={...s,extra:{...s==null?void 0:s.extra,editor:e.editor}};return t(Pt(c)),c}const i=await js(e);return t(Pt(i)),i}),Yg=Q("explorer/injectContentAtLine",async(e,{getState:n,dispatch:t,rejectWithValue:a})=>{const s=n();e.path.split("/").pop();const c=lt(s.explorer,e.path);if(!c)return a(`Error while trying to inject content in file ${e.path}`);const l=await js({name:c.name,date:c.date||new Date().toISOString(),path:`${c.path}.${c.ext}`,type:b.FileFolderType.CLASS,editor:c.config.editor});return await t(Pt(l)),{...e,path:`${c.path}.${c.ext}`}}),zg=Q("explorer/openFileAtSelection",async({file:e},{getState:n,dispatch:t})=>{const{tabs:a}=n().root,s=a.find(({path:c})=>e.path===c);if(s){const c={...s,extra:{...s==null?void 0:s.extra,editor:e.editor}};return t(Pt(c)),c}const i=await js(e);return t(Pt(i)),i}),uc=Q("explorer/deleteFile",async e=>{const{name:n,type:t,path:a,flags:s}=e;if(s.error)return{deleted:!0,node:e};const i=a.split("/");return i.pop(),{deleted:await b.dropFile({root:b.FolderRootType.ROOT,type:Gg(t),verb:b.DesignerRequestVerb.DROP,name:n,path:i.join("/")}),node:e}}),YP=Q("explorer/deleteFolder",async e=>{const{path:n,flags:t}=e;if(t.error)return{deleted:!0,node:e};const{deleted:a}=await b.removeItem({force:!0,path:n,verb:b.DesignerRequestVerb.REMOVE_ITEM});return{deleted:a,node:e}}),zP=Q("explorer/removeFileNode",async(e,{getState:n,dispatch:t})=>{const a=`${e.path}.${e.ext}`;if(await b.removeItem({verb:b.DesignerRequestVerb.REMOVE_ITEM,path:a,force:!0}),e.path==="Classes/DataStore"&&setTimeout(()=>{t(wn())},Ss),e.ext){const{tabs:s}=n().root,i=s.findIndex(c=>c.path===a);i>=0&&t(Zc(i))}return{deleted:!0,node:e}}),qn=Q("explorer/renameFile",async({file:e,newname:n})=>{if(e.type!=="folder"){const a=e.path.split("/");a.pop();const s=`${a.join("/")}/${e.name}.${e.ext}`,i=`${a.join("/")}/${n}.${e.ext}`;return await b.moveItem({verb:b.DesignerRequestVerb.MOVE_ITEM,path:s,newpath:i}),{old:{...e,path:s},new:{...e,name:n,path:i}}}const t=e.path.split("/");return t.pop(),await b.moveItem({verb:b.DesignerRequestVerb.MOVE_ITEM,path:`${t.join("/")}/${e.name}`,newpath:`${t.join("/")}/${n}`}),{old:e,new:{...e,name:n,path:`${t.join("/")}/${n}`}}}),Da=Q("explorer/relocateNode",async({draggedNode:e,newLocation:n},{rejectWithValue:t})=>{try{await b.moveItem({verb:b.DesignerRequestVerb.MOVE_ITEM,path:`${e.path}.${e.ext}`,newpath:`${n.path}/${e.name}.${e.ext}`})}catch{return t("can't move item")}}),Xo=Q("explorer/duplicateNode",async({node:e,duplicateName:n},{rejectWithValue:t,fulfillWithValue:a,getState:s})=>{const i=e.path.split("/");i.pop();try{const{tabs:c}=s().root,l=c.find(({path:y})=>y===`${e.path}${e.ext?`.${e.ext}`:""}`),d=["4dm","4qm","4qs"].includes(e.ext),{content:p}=l||await b.getNodeInfo({verb:b.DesignerRequestVerb.GET_INFO,path:`${e.path}.${e.ext}`,content:!0,as:d?"text":"json"}),h=await b.setFileContent({name:`${n}.${e.ext}`,content:p,path:i.join("/"),asText:d});return a({node:{...h,path:i.join("/")}})}catch{return t("failed to duplicate file")}}),VP=Q("explorer/executeMethod",async({methodName:e,params:n=[],resultingDataSource:t={},namespace:a=""},{rejectWithValue:s})=>{var i,c;try{const d=await window.Method4D.buildMethod({methodName:e,parameters:n,resultingDataSource:t},{namespace:a},null).callServerSide({id:"",serverSideRef:""},"onclick",{});return d!=null&&d.__NOTIFICATION?b.toastSubject.next({message:`${((i=d.__NOTIFICATION)==null?void 0:i.message)||""}`,kind:`${((c=d.__NOTIFICATION)==null?void 0:c.type)||"info"}`}):b.toastSubject.next({message:"Method executed Successfully",kind:"message"}),d}catch(l){return b.toastSubject.next({message:l.message||`Error executing the method "**${e}**"`,kind:"danger",markdown:!0}),s("can't execute method")}}),KP=Q("files/fetchFiles",async()=>b.getFolders(b.FolderRootType.WEBFORMS,b.FolderRootType.METHODS,b.FolderRootType.CLASSES)),qc=Q("tabs/renameDatasource",async(e,{dispatch:n,getState:t})=>{var E,T;const a=!!e.datasourceNamespace,{confirmed:s}=await n(ar({message:"Are you sure you want to rename the datasource?",title:"Rename Datasource",type:b.ModalType.CONFIRM,color:b.ModalColor.WARNING,views:{toggles:{},tips:a?[{type:"warning",message:"The datasource property of components bound with this datasource will also be updated on opened web forms only"},{type:"warning",message:"The origin of some other datasources might be also renamed (if this datasource is the origin of other datasources)"}]:[{type:"warning",message:"The datasource property of components bound with this datasource will also be updated"},{type:"warning",message:"The origin of some other datasources might be also renamed (if this datasource is the origin of other datasources)"}]}})).unwrap();if(!s)return null;const{autoUpdateReferences:i,datasourceId:c,datasourceNamespace:l,value:d,path:p}=e,h=t();let y=[];if(a){const x=h.sharedDatasources.sources[l]||[];y.push(...x)}else if(p){const x=h.root.tabs.find(b.by("path",p));if(y=(T=(E=x==null?void 0:x.content)==null?void 0:E.metadata)==null?void 0:T.datasources,!y)return null}const _=new RegExp(`^${c}\\b`,"");if(y=y.map(x=>{const D=(b.isObjectDatasource(x)||!b.isSimpleDatasource(x))&&x.from&&_.test(x.from),P=x.events?x.events.map(j=>{var M,k,O,z;switch(j==null?void 0:j.type){case"method":{const H=j;return H.params?{...H,params:H.params.map(Y=>{var te;return{...Y,datasource:(te=Y.datasource)==null?void 0:te.replace(new RegExp(`^${c}`,""),d)}}),returns:(M=H.returns)!=null&&M.datasource?{...H.returns,datasource:(k=H.returns.datasource)==null?void 0:k.replace(new RegExp(`^${c}`,""),d)}:H.returns}:H}case"simple-action":{const H=j;return H.datasource?{...H,datasource:{...H.datasource,name:(O=H.datasource.name)==null?void 0:O.replace(new RegExp(`^${c}`,""),d),from:(z=H.datasource.from)==null?void 0:z.replace(new RegExp(`^${c}`,""),d)}}:H}default:return j}}):x.events;return x.id===c?{...x,id:d,events:P}:D&&x.from?{...x,from:x.from.replace(new RegExp(`^${c}`,""),d),events:P}:{...x,events:P}}),i){const x=a?`${l}:${c}`:`${c}`,D=a?`${l}:${d}`:`${d}`;b.datasourcesSubject.next({path:p??"",action:b.DatasourcesActions.RENAME,old_reference:x,new_reference:D,is_shared:a})}return{path:p,namespace:l,datasources:y}}),Yc=Q("tabs/edit-datasource",(e,{getState:n})=>{var i,c;const t=n();let a=[];if(e.namespace)a=t.sharedDatasources.sources[e.namespace];else{const l=t.root.tabs.find(b.by("path",e.path));l&&(a=((c=(i=l.content)==null?void 0:i.metadata)==null?void 0:c.datasources)||[])}return a.map(l=>l.id===e.datasourceId?Object.assign({},l,{[e.propertyKey]:e.value}):l)}),Vg=Q("tabs/fetchChanges",async(e,{getState:n})=>{const a=ta(n()).filter(s=>[b.FileFolderType.METHOD,b.FileFolderType.CLASS].includes(s.type));return b.getFilesInfo(...a.map(s=>{const[i]=s.path.split("/").filter(Boolean);return{name:s.name,type:s.type,root:i,path:"."}}))}),JP=Q("files/saveAll",async(e,{getState:n,dispatch:t})=>{const a=Ac(n());for(const s of a)t(Yn({tab:s}))}),zc=Q("files/tryCloseTab",async(e,{getState:n,dispatch:t})=>{const{tabs:a}=n().root,s=a.findIndex(c=>c.path===e);if(s===-1)return!1;const i=a[s];if(i!=null&&i.flags.touched){const{confirmed:c}=await t(ar({title:ws(i),message:"Your unsaved changes will be lost. Proceed anyway?",type:b.ModalType.CONFIRM,color:b.ModalColor.WARNING,icon:"FdWarningDanger"})).unwrap();if(!c)return!1}return t(Zc(s)),i.path===b.ROLES_TAB_PATH&&i.flags.touched&&(async()=>{const l=await b.getNodeInfo({verb:b.DesignerRequestVerb.GET_INFO,path:b.ROLES_TAB_PATH,content:!0,as:"json"});t(Wc({content:l.content,date:l.date}))})(),!0}),XP=Q("files/tryCloseOtherTabs",async(e,{getState:n,dispatch:t})=>{const{tabs:a}=n().root;if(a.some(i=>i.path!==e&&i.flags.touched===!0)){const{confirmed:i}=await t(ar({title:"Closing other tabs",message:"Your changes will be lost if you do not save them. Close anyway?",type:b.ModalType.CONFIRM,color:b.ModalColor.WARNING,icon:"FdWarningDanger"})).unwrap();if(!i)return}t(mv(e))}),ZP=Q("files/tryCloseAllTabs",async(e,{getState:n,dispatch:t})=>{const{tabs:a}=n().root;if(a.some(i=>i.flags.touched===!0)){const{confirmed:i}=await t(ar({title:"Closing all tabs",message:"Your changes will be lost if you do not save them. Close anyway?",type:b.ModalType.CONFIRM,color:b.ModalColor.WARNING,icon:"FdWarningDanger"})).unwrap();if(!i)return}t(gv())}),QP=Q("files/tryCloseRightTabs",async(e,{getState:n,dispatch:t})=>{const{tabs:a}=n().root;let s=!1;for(let i=a.length-1;i>e;i-=1)if(a[i].flags.touched){s=!0;break}if(s){const{confirmed:i}=await t(ar({title:"Closing right tabs",message:"Your changes will be lost if you do not save them. Close anyway?",type:b.ModalType.CONFIRM,color:b.ModalColor.WARNING,icon:"FdWarningDanger"})).unwrap();if(!i)return}t(vv(e))}),eD=Q("files/tryCloseLeftTabs",async(e,{getState:n,dispatch:t})=>{const{tabs:a}=n().root;let s=!1;for(let i=0;i<e;i+=1)if(a[i].flags.touched){s=!0;break}if(s){const{confirmed:i}=await t(ar({title:"Closing left tabs",message:"Your changes will be lost if you do not save them. Close anyway?",type:b.ModalType.CONFIRM,color:b.ModalColor.WARNING,icon:"FdWarningDanger"})).unwrap();if(!i)return}t(yv(e))}),cc=Q("files/reloadTab",async(e,{dispatch:n})=>{if(e.flags.touched){const{confirmed:s}=await n(ar({title:ws(e),message:"Changes made to the file will be lost. Continue?",type:b.ModalType.CONFIRM,color:b.ModalColor.WARNING,icon:"FdWarningDanger"})).unwrap();if(!s)return}const t=jh(e.path),a=await b.getNodeInfo({verb:b.DesignerRequestVerb.GET_INFO,path:e.path,content:!0,as:t});if(e.path===b.ROLES_TAB_PATH){const{roles:s,privileges:i}=Ls(a.content);n(Uc({roles:s,privileges:i}))}else if(e.path===b.SETTINGS_TAB_PATH){const{content:s}=a;n(ks({path:"project",value:s}))}else{const{content:s}=a;e.type===b.FileFolderType.WEBFORM?b.webformSubject.next({path:e.path,action:b.WebformActions.RELOAD,payload:s.components}):e.type===b.FileFolderType.MODEL&&Yh.next({action:"reload",payload:s})}return a}),Yn=Q("files/saveTab",async({tab:e},{dispatch:n,getState:t})=>{const{path:a,content:s}=e;if(e.type===b.FileFolderType.DEBUGGER)return{...e,errors:[]};a.split("/").pop();const c=await b.getFilesInfo({path:a});if(c.files[0]){const h=new Date(e.date),y=new Date(c.files[0].date);if(h.getTime()<y.getTime()){const{confirmed:_}=await n(ar({title:ws(e),message:"New content has been found on the server. Are you sure you want to continue?",type:b.ModalType.CONFIRM,icon:"FdSave"})).unwrap();if(!_)return n(hv({path:a,flags:{old:!0}})),null}}const l=await b.saveContent({verb:b.DesignerRequestVerb.SAVE_CONTENT,content:tD(e,t()),path:a});(e.type===b.FileFolderType.CLASS||e.type===b.FileFolderType.MODEL)&&setTimeout(()=>{n(wn())},Ss);const d=(l.modelErrors||[]).map(h=>h.message),p=(l.permissionsErrors||[]).map(h=>h.message);return{...e,content:s,date:l.date,initialContent:s,errors:d.length>0||p.length>0?[{title:"Model errors",messages:d},{title:"Permissions errors",messages:p}]:[]}}),tD=(e,n)=>{switch(!0){case e.path==="settings.json":case e.path===b.SETTINGS_TAB_PATH:return n.settings.project;case e.type===b.FileFolderType.ROLES:return{...e.content,...Ns(n.roles)};case e.type===b.FileFolderType.MODEL:return e.content||{toJSON:!0,dataClasses:[],extraProperties:{}};default:return e.content}},Mp=async e=>{if(e.type===b.FileFolderType.DATA_EXPLORER)return{name:"Data Explorer",path:e.path,flags:{},view:{panel:{isOpen:!1,type:"",current:""}},type:e.type,date:new Date().toISOString()};const n=e.path.split("/").filter(Boolean)[0],t=await b.getFile({root:n,type:e.type,verb:b.DesignerRequestVerb.GET,name:e.name}),a={};t.type===b.FileFolderType.METHOD&&(a.attributes=b.parseAttributes(t.content));const{date:s,name:i,type:c,content:l}=t;return{date:s,flags:{enabled:e.type===b.FileFolderType.WEBFORM},extra:a,view:{panel:{isOpen:!1,type:"",current:""}},name:i,path:e.path,type:c,initialContent:l,content:c===b.FileFolderType.MODEL?gh(l):l}},Kg=Q("files/tryInjectMethod",async({type:e,dataclass:n},{getState:t,dispatch:a})=>{const{root:{tabs:s},settings:{server:{qodly:i}}}=t(),c=b.getFileExtentionFromType("class",i);let l="",d="",p=null;if(!n)l="DataStore",d=`Classes/DataStore.${c}`;else switch(e){case"dataclass":l=n,d=`Classes/${n}.${c}`;break;case"collection":l=`${n}Selection`,d=`Classes/${n}Selection.${c}`;break;case"entity":l=`${n}Entity`,d=`Classes/${n}Entity.${c}`;break;default:return p}const h=s.find(b.by("path",d));if(h)return a(Pt(h)),h;try{p=await Mp({name:l,date:new Date().toISOString(),path:`class/${l}.${c}`,type:b.FileFolderType.CLASS})}catch{n?await a(ic({type:"dataclass",className:n,collectionName:`${n}Selection`,toCreate:e})):await a(ic({type:"model"}))}return p=await Mp({name:l,date:new Date().toISOString(),path:`class/${l}.${c}`,type:b.FileFolderType.CLASS}),p.path=d,a(Pt(p)),p}),rD=Q("roles/open",async(e,{dispatch:n,getState:t})=>{const{tabs:a}=t().root,s=a.find(i=>i.path===b.ROLES_TAB_PATH);if(s)return n(Pt(s)),s;n(vs())});function Lp(e,n){const{line:t,offset:a,type:s="saved"}=n;e.breakpoints[s].locations.push({line:t}),He.isNumber(a)&&(e.breakpoints[s].offset=a)}function Np(e,n,t,a){e.breakpoints[t].locations=n,He.isNumber(a)&&(e.breakpoints[t].offset=a)}function kp({filePath:e,fileType:n,methodName:t,className:a,ext:s,source:i}){return{filePath:e,fileType:n,methodName:t,className:a,ext:s,source:i,breakpoints:{draft:{locations:[],offset:0},saved:{locations:[],offset:0}}}}function jp(e,n,t){let a=!1;const s=e.map(i=>i[t]!==n[t]?i:(a=!0,{...i,...n}));return a?s:[...s,n]}function Yo(e){return e.map(({label:n})=>({label:n}))}const Jg=nr({name:"debugger",initialState:()=>{var n,t;const{debugger:e={meta:{state:Ir.DETACHED},list:[],sessions:[],expressions:[]}}=Kn();return{meta:{...e.meta,state:((n=e.meta)==null?void 0:n.state)===Ir.ATTACHED?(t=e.meta)==null?void 0:t.state:Ir.DETACHED},list:e.list||[],sessions:e.sessions||[],expressions:e.expressions||[]}},reducers:{addBreakpointDecoration(e,n){const{filePath:t,fileType:a,methodName:s,className:i,ext:c,source:l,breakpoint:d}=n.payload,p=Sn(e.list,t,s,i);if(p)Lp(p,d);else{if(a===b.FileFolderType.CLASS&&d.offset===void 0)throw new Error(`Cannot add a breakpoint on a function without offset. Try editing the ${i} class.`);const h=kp({filePath:t,fileType:a,methodName:s,className:i,ext:c,source:l});Lp(h,d),e.list.push(h)}},removeBreakpointDecoration(e,n){const{filePath:t,methodName:a,line:s,offset:i=0,type:c="saved"}=n.payload;if(t.startsWith("Classes/")){const l=e.list.filter(d=>d.filePath===t);if(l.length>0){const d=s+i;l.forEach(p=>{const h=p.breakpoints[c].offset||0;p.breakpoints[c].locations=p.breakpoints[c].locations.filter(y=>y.line+h!==d),c==="saved"&&(p.breakpoints.draft.locations=p.breakpoints.draft.locations.filter(y=>y.line+h!==d))})}}else{const l=Sn(e.list,t,a);l&&(l.breakpoints[c].locations=l.breakpoints[c].locations.filter(d=>d.line!==s),c==="saved"&&(l.breakpoints.draft.locations=l.breakpoints.draft.locations.filter(d=>d.line!==s)))}},setBreakpointsDecoration(e,n){const{filePath:t,fileType:a,methodName:s,className:i,ext:c,source:l,breakpoints:d,offset:p,type:h="saved",clearDraft:y}=n.payload,_=Sn(e.list,t,s);if(_)Np(_,d,h,p),y&&h!=="draft"&&(_.breakpoints.draft.locations=[]);else{const E=kp({filePath:t,fileType:a,methodName:s,className:i,ext:c,source:l});Np(E,d,h,p),e.list.push(E)}},clearBreakpoints(e,n){const{filePath:t,type:a="saved"}=n.payload;e.list=e.list.map(s=>({...s,breakpoints:s.filePath===t?{draft:!a||a==="draft"||a==="any"?{locations:[],offset:0}:s.breakpoints.draft,saved:!a||a==="saved"||a==="any"?{locations:[],offset:0}:s.breakpoints.saved}:s.breakpoints}))},clearBreakpointsExcept(e,n){const{exceptedFilePath:t,type:a="saved"}=n.payload;e.list=e.list.map(s=>({...s,breakpoints:s.filePath!==t?{draft:!a||a==="draft"||a==="any"?{locations:[],offset:0}:s.breakpoints.draft,saved:!a||a==="saved"||a==="any"?{locations:[],offset:0}:s.breakpoints.saved}:s.breakpoints}))},clearAllBreakpoints(e){e.list=e.list.map(n=>({...n,breakpoints:{draft:{locations:[],offset:0},saved:{locations:[],offset:0}}}))},setActiveLine(e,n){const{threadId:t,line:a,highlight:s}=n.payload,i=ot(e.sessions,t);i&&(i.activeLine=a,s&&(i.highlightedLines={start:a,end:a}))},addExpression(e,n){const{threadId:t,label:a,save:s}=n.payload,i=ot(e.sessions,t);i&&i.stopped&&(i.expressions=[...i.expressions||[],{label:a}],s&&(e.expressions=Yo(i.expressions)))},removeExpression(e,n){const{threadId:t,index:a,save:s}=n.payload,i=ot(e.sessions,t);i&&(i.expressions=i.expressions.filter((c,l)=>l!==a),s&&(e.expressions=Yo(i.expressions)))},removeAllExpressions(e,n){const{threadId:t,save:a}=n.payload,s=ot(e.sessions,t);s&&(s.expressions=[],a&&(e.expressions=[]))},renameExpression(e,n){const{threadId:t,index:a,replacement:s,save:i}=n.payload,c=ot(e.sessions,t);c&&c.expressions[a]&&(c.expressions[a].label=s,i&&(e.expressions=Yo(c.expressions)))},setExpression(e,n){const{threadId:t,expression:a}=n.payload,s=ot(e.sessions,t);if(s){const i=a.index>=0?a.index:s.expressions.length>0?s.expressions.length-1:0,c=s.expressions[i];c?(c.result=a.result,c.nakedResult=a.nakedResult,c.variablesReference=a.variablesReference||0,c.presentationHint=a.presentationHint):s.expressions.push(a)}},updateExpressionAt(e,n){const{threadId:t,index:a,value:s}=n.payload,i=ot(e.sessions,t);if(i){const c=i.expressions[a];c&&(c.result=`"${s}"`,c.nakedResult=s)}},saveExpressions(e,n){const{expressions:t}=n.payload;e.expressions=Yo(t)},addSession(e,n){const{threadId:t,channelId:a,stackFrames:s,exceptions:i=[]}=n.payload,c=ot(e.sessions,t),l=s[0],{expressions:d=[]}=e;if(c)c.expressions=d;else{const p=Tc(t);e.sessions.push({tabPath:p,threadId:t,channelId:a,stackFrames:s,currentStackFrame:l,exceptions:i,expressions:d,variables:{callchain:[],expressions:[]},highlightedLines:null,activeLine:null,stopped:!0})}},updateSession(e,n){const{threadId:t,changes:a}=n.payload;e.sessions=e.sessions.map(s=>s.threadId===t?{...s,...a}:s)},removeSession(e,n){const{threadId:t}=n.payload;e.sessions=e.sessions.filter(a=>a.threadId!==t)},removeSessionByIndex(e,n){const t=n.payload;e.sessions.splice(t,1)},setSessions(e,n){const t=n.payload;e.sessions=t},setCallChainVariables(e,n){const{threadId:t,frameId:a,variables:s}=n.payload;e.sessions=e.sessions.map(i=>{var c;return i.threadId===t?{...i,variables:{...i.variables,callchain:jp((c=i.variables)==null?void 0:c.callchain,{frameId:a,items:s},"frameId")}}:i})},setExpressionVariables(e,n){const{threadId:t,variablesReference:a,variables:s}=n.payload;e.sessions=e.sessions.map(i=>{var c;return i.threadId===t?{...i,variables:{...i.variables,expressions:jp((c=i.variables)==null?void 0:c.expressions,{variablesReference:a,items:s},"variablesReference")}}:i})},setSourceContent(e,n){const{threadId:t,content:a}=n.payload,s=ot(e.sessions,t);s&&(s.currentStackFrame.source={...s.currentStackFrame.source,content:a})},setDebuggerMeta(e,n){if(n.payload.state===Ir.ERROR){e.meta.error={...e.meta.error,time:Date.now()};const{override:t,error:a={code:null,reason:"",type:ss.SOCKET_ERROR}}=n.payload;if((t||e.meta.state!==Ir.ERROR)&&(e.meta.error={...e.meta.error,...a}),(a==null?void 0:a.type)===ss.SOCKET_CLOSURE&&!(a!=null&&a.reason)&&e.meta.state===Ir.DETACHED)return}e.meta.state=n.payload.state}},extraReducers:e=>{e.addCase(Zg.fulfilled,n=>{n.sessions=[]})}}),{addBreakpointDecoration:nD,removeBreakpointDecoration:aD,setBreakpointsDecoration:oD,clearBreakpoints:sD,clearBreakpointsExcept:iD,clearAllBreakpoints:uD,setActiveLine:cD,addExpression:lD,renameExpression:fD,removeExpression:dD,removeAllExpressions:pD,setExpression:hD,updateExpressionAt:gD,saveExpressions:vD,addSession:mD,updateSession:yD,removeSession:bD,removeSessionByIndex:_D,setSessions:Xg,setCallChainVariables:ED,setExpressionVariables:SD,setSourceContent:wD,setDebuggerMeta:TD}=Jg.actions,Zg=Q("files/wipeDebuggerSessions",async(e,{getState:n,dispatch:t})=>{const{sessions:a}=n().debugger;for(const{threadId:s}of a){const i=Tc(s);t(zc(i))}}),Qg=Q("files/removeDebuggerSessionsNotIn",async(e,{getState:n,dispatch:t})=>{const{threadIds:a}=e,{sessions:s}=n().debugger,i=[],c=s.filter(l=>{const d=a.includes(l.threadId);return d||i.push(l.threadId),d});return t(Xg(c)),{staleThreadIds:i}}),Vc=Q("models/fetch",async()=>{try{return(await b.http(b.API_PREFIX,{method:"POST",body:JSON.stringify({verb:b.DesignerRequestVerb.GET_INFO,path:b.MODEL_TAB_PATH,as:"json",content:!0}),headers:new Headers({"Content-Type":"application/json"})})).content}catch(e){return e.message}}),ms=Q("models/save",async(e,{getState:n,dispatch:t,rejectWithValue:a})=>{const{tabs:s}=n().root,i=s.find(c=>c.path===b.MODEL_TAB_PATH);if(!i)return a("Error while saving the model");try{const c=await b.http(b.API_PREFIX,{method:"POST",body:JSON.stringify({verb:"save",path:i.path,content:i.content}),headers:new Headers({"Content-Type":"application/json"})});return setTimeout(()=>{t(wn())},Ss),{...c,path:i.path,content:e.content||{toJSON:!0,dataClasses:[],extraProperties:{}}}}catch{return a("Error while saving the model")}}),CD=Q("models/open",async(e,{dispatch:n,getState:t})=>{const{tabs:a}=t().root,s=a.find(i=>i.path==="models/main");if(s)return n(Pt(s)),s;n(Vc())}),xD=Q("model/rename-dataclass",async(e,{getState:n,dispatch:t})=>{var y,_;const{dataclassId:a,selectionId:s,name:i}=e;let c=n();const l=c.explorer.find(E=>E.path===b.FolderRootPath.CLASSES);if(!l)throw new Error("Classes folder was not found!");await t(_r(l.path)),c=n();const d={class:{found:!1,newNameTaken:!1,file:null,filename_update:i},entity:{found:!1,newNameTaken:!1,file:null,filename_update:`${i}Entity`},selection:{found:!1,newNameTaken:!1,file:null,filename_update:`${i}Selection`}};(_=(y=c.explorer.find(E=>E.path===b.FolderRootPath.CLASSES))==null?void 0:y.children)==null||_.forEach(E=>{E.name===d.class.filename_update&&(d.class.newNameTaken=!0),E.name===d.entity.filename_update&&(d.entity.newNameTaken=!0),E.name===d.selection.filename_update&&(d.selection.newNameTaken=!0),E.name===a?(d.class.found=!0,d.class.file=E):E.name===`${a}Entity`?(d.entity.found=!0,d.entity.file=E):E.name===s&&(d.selection.found=!0,d.selection.file=E)});const p=Object.entries(d).reduce((E,T)=>{const[x,D]=T;return D.found?D.newNameTaken?[...E,{type:"error",message:`Cannot rename ${x} file to ${D.filename_update} because it already exists. The existing file will be used instead!`}]:E:[...E,{type:"warning",message:`${a} ${x} file was not found`}]},[]);p.length>0&&t(ar({message:"The following errors were encountered during dataclass rename:",views:{tips:p}}));const h=Object.values(d).filter(E=>E.found&&E.file&&!E.newNameTaken);await Promise.all(h.map(async E=>await t(qn({file:E.file,newname:E.filename_update})))),h.length>0&&t(_r("Classes"))}),Na={DATACLASS_DELETE:"dataclass.delete",DATACLASS_DRAGGABLE:"dataclass.draggable"},RD={model:{dataClasses:{},collections:{},extraProperties:{}},draft:{dataClasses:{},collections:{},extraProperties:{}},flags:{[Na.DATACLASS_DELETE]:!0,[Na.DATACLASS_DRAGGABLE]:!0}},ev=nr({name:"Models",initialState:RD,reducers:{setModelFlag(e,n){e.flags={...e.flags,...n.payload}}},extraReducers(e){e.addCase(Vc.fulfilled,(n,t)=>{var c;const a={},s={},i=t.payload.extraProperties||{};(c=t.payload.dataClasses)==null||c.forEach(l=>{a[l.name]=l,s[l.collectionName]=l}),n.draft.dataClasses=a,n.draft.collections=s,n.draft.extraProperties=i,n.model.dataClasses=a,n.model.collections=s,n.model.extraProperties=i}),e.addCase(ms.pending,()=>{}).addCase(ms.fulfilled,(n,t)=>{const a={},s={},i=t.payload.content.extraProperties||{};t.payload.content.dataClasses.forEach(c=>{a[c.name]=c,s[c.collectionName]=c}),n.draft.dataClasses=a,n.draft.collections=s,n.draft.extraProperties=i,n.model.dataClasses=a,n.model.collections=s,n.model.extraProperties=i})}}),{setModelFlag:OD}=ev.actions;var tv=(e=>(e.UUID="uuid",e.STRING="string",e.TEXT="text",e.DATE="date",e.TIME="duration",e.BOOLEAN="bool",e.BYTE="byte",e.INTEGER="word",e.LONG="long",e.LONG64="long64",e.FLOAT="number",e.BLOB="blob",e.IMAGE="image",e.OBJECT="object",e))(tv||{}),Bs=(e=>(e.STORAGE="storage",e.RELATEDENTITY="relatedEntity",e.RELATEDENTITIES="relatedEntities",e.CALCULATED="calculated",e.COMPOSITION="composition",e.ALIAS="alias",e))(Bs||{});const AD=e=>["string","uuid","number","long"].includes(e.type),PD=[{label:"Storage",value:"storage"},{label:"Calculated",value:"calculated"}],DD=[{title:"UUID",kind:"storage",value:"uuid",calculatedType:"uuid",calculatedKind:"storage"},{title:"Long",kind:"storage",value:"long",calculatedType:"long",calculatedKind:"storage"}],ID=[{title:"String",kind:"storage",value:"string",calculatedType:"string",calculatedKind:"storage"},{title:"Text",kind:"storage",value:"text",calculatedType:"text",calculatedKind:"storage"},{title:"UUID",kind:"storage",value:"uuid",calculatedType:"uuid",calculatedKind:"storage"},{title:"Date",kind:"storage",value:"date",calculatedType:"date",calculatedKind:"storage"},{title:"Duration",kind:"storage",value:"duration",calculatedType:"duration",calculatedKind:"storage"},{title:"Bool",kind:"storage",value:"bool",calculatedType:"bool",calculatedKind:"storage"},{title:"Byte",kind:"storage",value:"byte",calculatedType:"byte",calculatedKind:"storage"},{title:"Word",kind:"storage",value:"word",calculatedType:"word",calculatedKind:"storage"},{title:"Number",kind:"storage",value:"number",calculatedType:"number",calculatedKind:"storage"},{title:"Long",kind:"storage",value:"long",calculatedType:"long",calculatedKind:"storage"},{title:"Object",kind:"storage",value:"object",calculatedType:"object",calculatedKind:"storage"},{title:"Image",kind:"storage",value:"image",calculatedType:"image",calculatedKind:"storage"},{title:"Blob",kind:"storage",value:"blob",calculatedType:"blob",calculatedKind:"storage"}],FD=[{label:"Expose as REST",value:"public"},{label:"Do not expose as REST",value:"publicOnServer"}],$D=[{label:"Expose as REST",value:"public"},{label:"Do not expose as REST",value:"publicOnServer"}],MD=[{label:"None",value:"none"},{label:"B-tree",value:"btree"},{label:"Cluster",value:"cluster"},{label:"Automatic",value:"auto"}],LD=(e,n)=>({toJSON:!0,extraProperties:n,dataClasses:e.map(t=>{var a;return{...t.data,extraProperties:{position:{x:t.position.x,y:t.position.y},panelColor:(a=t.data.extraProperties)==null?void 0:a.panelColor}}})});function ND(e,n,t){const a=e;let s=0;for(;t[`${a}${s||""}`];)s++;return`${a}${s||""}`}const rv=e=>e.kind===Bs.RELATEDENTITY,nv=e=>e.kind===Bs.RELATEDENTITIES,kD=e=>nv(e)||rv(e),jD=()=>kr(e=>e.model.draft.dataClasses),BD=()=>kr(e=>e.model.draft.collections),WD=e=>kr(n=>n.model.draft.dataClasses[e]),UD=(e,n)=>kr(t=>t.model.draft.dataClasses[e].attributes.find(b.by("name",n))),HD=()=>kr(e=>e.model.draft.extraProperties),GD=()=>{const e=kr(s=>s.model.flags),n=s=>s in e?e[s]:void 0,t=n(Na.DATACLASS_DELETE),a=n(Na.DATACLASS_DRAGGABLE);return{deleteDataclass:t,draggableDataclass:a,flags:e}},qD=ev.reducer;function Mu(e,n){const t=e.tabs.find(({path:a})=>a===b.SETTINGS_TAB_PATH);t&&(t.flags.touched=n)}const av={SIDEBAR_SECTION_RESIZABLE:"sidebar.section.resizable"},ov={[av.SIDEBAR_SECTION_RESIZABLE]:!0},sv=nr({name:"webforms",initialState:()=>{const{webforms:e}=Kn();return{...e,templates:{data:[],selectedGroup:""},datasources:{...Sc.webforms.datasources,...e==null?void 0:e.datasources},flags:ov}},reducers:{toggleInspector:(e,n)=>{const{type:t}=n.payload;e.inspector[t].active=!e.inspector[t].active,e.inspector[t].active||(e.inspector[t].data=void 0)},inspect:(e,n)=>{const{type:t,data:a}=n.payload;e.inspector[t].active&&(e.inspector[t].data=a)},addComponent:(e,n)=>{e.components.push(n.payload)},editComponent:(e,n)=>{const{id:t,changes:a}=n.payload;e.components=e.components.map(s=>s.id===t?{...s,...a}:s)},removeComponent:(e,n)=>{const{payload:t}=n,a=e.components.findIndex(s=>s.id===t);a!==-1&&e.components.splice(a,1)},setSelectedGroup:(e,n)=>{e.templates.selectedGroup=n.payload.selectedGroup},setTemplatesData:(e,n)=>{e.templates.data=n.payload},setTemplateData:(e,n)=>{const{group:t,components:a}=n.payload,s=e.templates.data.find(i=>i.group===t);s&&(s.components=a)},setDatasourcesTheme:(e,n)=>{e.datasources.theme=n.payload},setWebformsFlag(e,n){e.flags={...e.flags,...n.payload}}},extraReducers(e){e.addCase(dv.fulfilled,(n,t)=>{n.components=t.payload})}}),{toggleInspector:YD,inspect:zD,addComponent:iv,editComponent:uv,removeComponent:cv,setSelectedGroup:VD,setTemplatesData:lv,setTemplateData:fv,setDatasourcesTheme:KD,setWebformsFlag:JD}=sv.actions,XD=sv.reducer,Kc=He.curry((e,n)=>{var s,i;const t={...n.sharedDatasources.sources},a=(i=((s=n.root.tabs.find(b.by("path",e)))==null?void 0:s.content).metadata)==null?void 0:i.datasources;return a&&(t[e]=a),He.cloneDeep(t)}),ZD=Q("webforms/fetchTemplates",async(e,{dispatch:n,getState:t})=>{const{data:a}=t().webforms.templates,s=t().settings.session["studio.tipsBaseUrl"]||"";if(!He.isEmpty(a))return a;try{const c=await(await fetch(`${s}/build/index.json?t=${Date.now()}`)).json();return n(lv(c)),c}catch{return[]}}),QD=Q("webforms/fetchTemplate",async({name:e},{dispatch:n,getState:t})=>{const{data:a}=t().webforms.templates,s=a.find(i=>i.group===e);if(s&&!He.isEmpty(s.components))return s.components;try{const c=await(await fetch(`${s==null?void 0:s.link}?t=${Date.now()}`)).json();return n(fv({group:e,components:c})),c}catch{return[]}}),dv=Q("webforms/fetchCraftedComponents",async(e,{rejectWithValue:n})=>{try{return(await b.getNodeInfo({path:"WebForms/crafted_components.json",verb:b.DesignerRequestVerb.GET_INFO,content:!0,as:"json"})).content}catch{return n("Error while loading the crafted components")}}),eI=Q("webforms/addCraftedComponent",async(e,{dispatch:n,rejectWithValue:t,getState:a})=>{try{n(iv(e));const{webforms:{components:s}}=a();b.setCraftedComponents(s)}catch{return t("Error while adding the crafted component")}}),tI=Q("webforms/editCraftedComponent",async(e,{dispatch:n,rejectWithValue:t,getState:a})=>{try{n(uv(e));const{webforms:{components:s}}=a();b.setCraftedComponents(s)}catch{return t("Error while editing the crafted component")}}),rI=Q("webforms/removeCraftedComponent",async(e,{dispatch:n,rejectWithValue:t,getState:a})=>{try{n(cv(e));const{webforms:{components:s}}=a();b.setCraftedComponents(s)}catch{return t("Error while removing the crafted component")}}),Jc=Q("datasources/add-datasource",async(e,{getState:n,rejectWithValue:t})=>{var a,s;try{const i=n(),c=e.datasource,l=!!c.namespace,d=[];if(l){const p={...i.sharedDatasources.sources,[c.namespace]:[...i.sharedDatasources.sources[c.namespace],c]};d.push(...p[c.namespace]),await b.setSharedSources(p)}else(((s=(a=i.root.tabs.find(b.by("path",e.path)).content)==null?void 0:a.metadata)==null?void 0:s.datasources)||[]).push(c);return{list:d,path:e.path,namespace:e.datasource.namespace}}catch{console.error("Error while adding the datasource",e.datasource.id),t("Error while adding the datasource")}}),Xc=Q("datasources/edit-datasource",async(e,{getState:n,rejectWithValue:t})=>{try{const{namespace:a,path:s}=e,i=n(),c=!!e.namespace,l=Kc(s,i);let d=He.defaultTo(l[a||s],[]);return d=d.map(p=>p.id===e.id?{...p,[e.property]:e.value}:p),c&&await b.setSharedSources({...i.sharedDatasources.sources,[e.namespace]:d}),{list:d,path:e.path,namespace:e.namespace}}catch{t(`Error while editing datasource ${e.id}`)}}),nI=e=>e.type===zn.fulfilled.type,zn=Q("datasources/rename-datasource",async(e,{getState:n,rejectWithValue:t})=>{try{const a=n(),s=!!e.namespace,i=e.namespace||e.path,c=Kc(e.path,a),l=He.defaultTo(c[i],[]),d=new RegExp(`^${e.id}\\b`,"");if(l.forEach(p=>{var y;const h=(b.isObjectDatasource(p)||!b.isSimpleDatasource(p))&&p.from&&d.test(p.from);e.updateRefs&&((y=p.events)==null||y.forEach(_=>{var E,T,x,D,P;switch(_.type){case"method":{const j=_;j.params.forEach(M=>{M.datasource&&Object.assign(M,{datasource:M.datasource.replace(new RegExp(`^${e.id}`,""),e.new_name)})}),j.returns&&Object.assign(j.returns,{datasource:(T=(E=j.returns)==null?void 0:E.datasource)==null?void 0:T.replace(new RegExp(`^${e.id}`,""),e.new_name)});return}case"simple-action":{const j=_;j.datasource&&Object.assign(j.datasource,{name:(x=j.datasource.name)==null?void 0:x.replace(new RegExp(`^${e.id}`,""),e.new_name),from:(D=j.datasource.from)==null?void 0:D.replace(new RegExp(`^${e.id}`,""),e.new_name),target:(P=j.datasource.target)==null?void 0:P.replace(new RegExp(`^${e.id}`,""),e.new_name)});return}default:return}})),p.id===e.id?p.id=e.new_name:h&&p.from&&(p.from=p.from.replace(new RegExp(`^${e.id}`,""),e.new_name))}),e.updateRefs){const p=b.getDatasourceId({id:e.id,namespace:e.namespace}),h=b.getDatasourceId({id:e.new_name,namespace:e.namespace});b.datasourcesSubject.next({path:e.path??"",action:b.DatasourcesActions.RENAME,old_reference:p,new_reference:h,is_shared:s})}return s&&await b.setSharedSources({...a.sharedDatasources.sources,[e.namespace]:l}),{list:l,path:e.path,namespace:e.namespace}}catch{return t(`Error while renaming datasource ${e.namespace}:${e.id}`)}}),Ia=Q("datasources/delete-datasource",async(e,{getState:n,rejectWithValue:t})=>{try{const a=n(),s=!!e.namespace,i=e.namespace||e.path,l=Kc(e.path,a)[i].filter(b.outById(e.id));return s&&await b.setSharedSources({...a.sharedDatasources.sources,[e.namespace]:l}),{list:l,path:e.path,namespace:e.namespace}}catch{return t(`Error while removing datasource ${e.id}`)}}),ka=nr({name:"root",initialState:()=>{const e=Kn();return{filesLoading:!1,tabs:e.tabs||[],activeTab:e.activeTab,recent:e.recent||[]}},reducers:{setPanelState(e,n){const{path:t,...a}=n.payload;e.tabs.forEach(s=>{s.path===t&&(s.view||(s.view={panel:{isOpen:!1,type:"",current:""}}),Object.assign(s.view.panel,a))})},openSettingsTab(e){const n={date:new Date().toISOString(),flags:{confirmed:!0},view:{panel:{isOpen:!1,type:"",current:""}},extra:{editor:{key:"editors:settings"}},name:"Settings",path:b.SETTINGS_TAB_PATH,type:b.FileFolderType.SETTINGS,initialContent:{},content:{}};let t=e.tabs.find(a=>a.path===n.path);if(t||(e.tabs.push(n),t=e.tabs[e.tabs.length-1]),e.activeTab!==n.path){const a=e.tabs.reduce((s,i)=>(i==null?void 0:i.weight)>((s==null?void 0:s.weight)||0)?i:s,null);e.activeTab=n.path,t.weight=((a==null?void 0:a.weight)||0)+1}},addDataSource(e,n){var i;const{payload:{path:t,datasourceDef:a}}=n,s=e.tabs.find(c=>c.path===t);s&&(s.content.metadata.datasources=s.content.metadata.datasources||[],(i=s.content.metadata.datasources)!=null&&i.find(l=>l.id===a.id)||(s.content.metadata.datasources=[...s.content.metadata.datasources,{...a,events:[]}],s.flags={...s.flags,touched:!0,confirmed:!0}))},addWebformState(e,n){var i;const{payload:{path:t,stateDef:a}}=n,s=e.tabs.find(c=>c.path===t);s&&(s.content.metadata.states=s.content.metadata.states||[Fc],(i=s.content.metadata.states)!=null&&i.find(l=>l.id===a.id)||(s.content.metadata.states=[...s.content.metadata.states,a],s.flags={...s.flags,touched:!0,confirmed:!0}))},removeWebformState(e,n){const{path:t,id:a}=n.payload;e.tabs=e.tabs.map(s=>s.path===t?{...s,flags:{...s.flags,touched:!0,confirmed:!0},content:mh(s.content,a)}:s)},editWebformState(e,n){const{path:t,state:a}=n.payload;e.tabs=e.tabs.map(s=>s.path===t?{...s,flags:{...s.flags,touched:!0,confirmed:!0},content:{...s.content,metadata:{...s.content.metadata,states:s.content.metadata.states.map(i=>i.id===a.id?a:i)}}}:s)},removeDataSource(e,n){const{path:t,datasourceID:a}=n.payload;e.tabs=e.tabs.map(s=>s.path===t?{...s,flags:{...s.flags,touched:!0,confirmed:!0},content:{...s.content,metadata:{...s.content.metadata,datasources:s.content.metadata.datasources.filter(i=>i.id!==a)}}}:s)},setDataSources(e,n){const{payload:{path:t,datasourceArr:a}}=n;e.tabs=e.tabs.map(s=>{var i;return s.path===t?{...s,flags:{...s.flags,touched:!0,confirmed:!0},content:{...s.content,metadata:{...(i=s.content)==null?void 0:i.metadata,datasources:a}}}:s})},setTabs(e,n){e.tabs=n.payload},closeTab(e,n){const t=n.payload;e.tabs.splice(t,1);const a=e.tabs.reduce((s,i)=>(i==null?void 0:i.weight)>((s==null?void 0:s.weight)||0)?i:s,null);e.activeTab=(a==null?void 0:a.path)||""},closeOthers(e,n){e.tabs=e.tabs.filter(t=>t.path===n.payload),e.activeTab=n.payload},closeAllTabs(e){e.tabs=[],e.activeTab=""},closeRightTabs(e,n){e.tabs.splice(n.payload+1),e.activeTab=e.tabs[n.payload].path},closeLeftTabs(e,n){e.tabs.splice(0,n.payload)},closeSavedTabs(e){e.tabs=e.tabs.filter(({flags:{touched:t}})=>t);const n=e.tabs.reduce((t,a)=>(a==null?void 0:a.weight)>((t==null?void 0:t.weight)||0)?a:t,null);e.activeTab=(n==null?void 0:n.path)||""},confirmTab(e,n){const t=e.tabs.find(({path:a})=>a===n.payload);t&&(t.flags.confirmed||ka.caseReducers.setTabFlags(e,{type:n.type,payload:{path:n.payload,flags:{confirmed:!0}}}))},selectTab(e,n){const t=e.tabs.find(({path:s})=>s===n.payload);if(!t||e.activeTab===n.payload)return;const a=e.tabs.reduce((s,i)=>(i==null?void 0:i.weight)>((s==null?void 0:s.weight)||0)?i:s,null);t.weight=a?(a.weight||0)+1:1,e.activeTab=n.payload},openTabUnselected(e,n){const t=n.payload;let a=e.tabs.find(({path:i})=>t.path===i);a||(e.tabs.push(t),a=e.tabs[e.tabs.length-1]);const s=e.tabs.reduce((i,c)=>(c==null?void 0:c.weight)>((i==null?void 0:i.weight)||0)?c:i,null);a.weight=s?(s.weight||0)+1:1,a.extra={...a.extra,...t.extra}},selectTabByReference(e,n){const t=[b.FileFolderType.DEBUGGER],{isNew:a,...s}=n.payload;let i=s,c=e.tabs.find(({path:l})=>i.path===l);if((t.includes(i.type)||c!=null&&c.flags.confirmed)&&(i={...i,flags:{...i.flags,confirmed:!0}}),!c){const l=e.tabs.findIndex(({flags:{confirmed:d}})=>d===!1);l!==-1&&!t.includes(i.type)&&!a?e.activeTab===e.tabs[l].path?(e.tabs[l]=i,c=e.tabs[l]):(e.tabs.push(i),c=e.tabs[e.tabs.length-1],e.tabs.splice(l,1)):(e.tabs.push(i),c=e.tabs[e.tabs.length-1])}if(e.activeTab!==i.path){const l=e.tabs.reduce((d,p)=>(p==null?void 0:p.weight)>((d==null?void 0:d.weight)||0)?p:d,null);e.activeTab=i.path,c.weight=((l==null?void 0:l.weight)||0)+1}c.extra={...c.extra,...i.extra},c.flags={...c.flags||{},...i.flags||{}}},setContent(e,n){const{path:t,content:a,contentPath:s}=n.payload;e.tabs=e.tabs.map(i=>{if(i.path!==t)return i;let c=!1,l=i.flags.confirmed;if(typeof a=="string")c=i.initialContent!==a,l=!l&&c?!0:l;else{const d=JSON.stringify(He.get(i.initialContent,s||"",i.initialContent)),p=JSON.stringify(He.get(a,s||"",a));c=d!==p,l=!l&&c?!0:l}return a&&typeof a=="object"&&(s?He.set(i.content,s,a):i.content=a),typeof a=="string"&&(i.content=a),{...i,flags:{...i.flags,touched:c,confirmed:l}}})},setTabFlags(e,n){const{path:t,flags:a}=n.payload;e.tabs=e.tabs.map(s=>s.path===t?{...s,flags:{...s.flags,...a}}:s)},setTabsFlags(e,n){const{tabs:t,flags:a}=n.payload;e.tabs=e.tabs.map(s=>t.includes(s.path)?{...s,flags:{...s.flags,...a}}:s)},setTabExtra(e,n){const{path:t,extra:a,flags:s}=n.payload;e.tabs=e.tabs.map(i=>i.path===t?{...i,extra:{...i.extra,...a},flags:s?{...i.flags,...s}:i.flags}:i)},addWebFormStyles(e,n){const{path:t,styles:a=[]}=n.payload,s=e.tabs.find(i=>i.path===t);if(s){const i=s.content.metadata.styles.map(({name:l})=>l),c=a.filter(({name:l})=>!i.includes(l));s.content.metadata.styles=[...s.content.metadata.styles,...c].map(({scope:l,...d})=>({...d}))}},changeTabEditor(e,n){return e.tabs=e.tabs.map(t=>t.path===n.payload.path?n.payload:t),e}},extraReducers:e=>{e.addCase(ac,(n,t)=>{if(t.payload.settingsKey==="studio.enablePreview"&&t.payload.value===!1){const a=n.tabs.find(({flags:{confirmed:s}})=>s===!1);a&&ka.caseReducers.setTabFlags(n,{type:"",payload:{path:a.path,flags:{confirmed:!0}}})}}),e.addCase(Yg.fulfilled,(n,t)=>{if(!t.payload)return;const{content:a,line:s,path:i}=t.payload,c=n.tabs.find(l=>l.path===i);if(c&&typeof c.content=="string"){const l=c.content.trim().split(`
99
+ `}}};e.type==="dataclass"&&!e.toCreate?p=[{...h("dataclass")},{...h("collection")},{...h("entity")}]:e.type==="dataclass"&&e.toCreate?p=[{...h(e.toCreate)}]:p=[{...h("model")}],p=p.filter(_=>!d.find(({name:E,ext:T})=>E===_.name&&T===(i?"4qs":"4dm"))),await Promise.all(p.map(async({name:_,content:E})=>{await n(Gn({type:b.FileFolderType.CLASS,path:s,fileName:_,parentNode:c,content:E,qodly:a.settings.server.qodly}))})),await n(_r(s))}),_r=Q("explorer/fetchFolderContent",async(e,{rejectWithValue:n})=>{try{return(await b.getNodeInfo({verb:b.DesignerRequestVerb.GET_INFO,path:e})).map(a=>{const s=`${e}/${a.name}`,{editor:i,supportedEditors:c}=pr(`${s}${a.ext?`.${a.ext.toLowerCase()}`:""}`);return{name:a.name,size:a.size,type:a.type,date:`${a.date}`,flags:{},error:null,path:s,ext:a.ext,config:a.type==="folder"?{}:{editor:i,supportedEditors:c}}})}catch{return n("Failed loading file content please Reload")}},{getPendingMeta:()=>{}}),Aa=Q("explorer/fetchFolderContentWithoutExpanding",async(e,{rejectWithValue:n})=>{try{return(await b.getNodeInfo({verb:b.DesignerRequestVerb.GET_INFO,path:e})).map(a=>{const s=`${e}/${a.name}`,{editor:i,supportedEditors:c}=pr(`${s}${a.ext?`.${a.ext.toLowerCase()}`:""}`);return{name:a.name,size:a.size,type:a.type,date:`${a.date}`,flags:{},error:null,path:s,ext:a.ext,config:a.type==="folder"?{}:{editor:i,supportedEditors:c}}})}catch{return n("Failed loading file content please Reload")}},{getPendingMeta:()=>{}});function UP(e){const n=e.split(".");return n.pop(),{name:n.join("."),ext:e.split(".")[e.split(".").length-1]}}const HP=Q("explorer/uploadFile",async e=>{const n=e.type.includes("image/")?"$rawPict=true":"$binary=true";try{const t=await fetch(`/rest/$upload?${n}`,{method:"POST",headers:{"Content-Type":e.type},body:e});return{status:t.status,data:await t.json()}}catch{return{status:500,data:null}}}),GP=Q("explorer/uploadFile",async({file:e,path:n,parentNode:t},{dispatch:a})=>{const{editor:s,supportedEditors:i}=pr(n),{name:c,ext:l}=UP(e.name);a(Wg({parent:t,child:{name:c,path:`${n}/${e.name}?t=${Date.now()}`,type:e.type,error:null,flags:{loading:!0},config:{editor:s,supportedEditors:i},ext:l}}));try{const d=await fetch(`/rest/$upload?$sharedFolder=true&$filename=${e.name}&$path=${n}`,{method:"POST",headers:{"Content-Type":e.type},body:e});return d.status>=300?(a(sc({parent:t,child:{name:c,path:`${n}/${e.name}`,type:e.type,error:{message:"error uploading file"},flags:{},config:{editor:s,supportedEditors:i},ext:l}})),d.status!==413&&b.toastSubject.next({message:"error uploading file",kind:"danger"})):await a(_r(t.path)),{status:d.status,fileName:e.name}}catch{return a(sc({parent:t,child:{name:c,path:`${n}/${e.name}`,type:e.type,error:{message:"error uploading file"},flags:{},config:{editor:s,supportedEditors:i},ext:l}})),b.toastSubject.next({message:"error uploading file",kind:"danger"}),{status:500,fileName:e.name}}}),Gn=Q("explorer/createNewFile",async({fileName:e,type:n,path:t,parentNode:a,content:s},{dispatch:i,rejectWithValue:c,getState:l})=>{const{server:{qodly:d},project:p}=l().settings;try{const h=await b.setFileContent({name:Hg(e,n,d),content:s||Ug(n,p),path:t,asText:[b.FileFolderType.CLASS,b.FileFolderType.METHOD].includes(n)});return a.error&&(a.flags.expanded?await i(_r(a.path)):await i(Aa(a.path))),{qodly:d,file:h,parentNode:a}}catch{return c("failed to create folder")}});function qg(e,n){const{qodly:t=!0,withExtension:a=!0}=n||{},s=b.getFileExtentionFromType(e.type,t);let i="";switch(e.type){case b.FileFolderType.WEBFORM:i=`${b.FolderRootPath.WEBFORMS}/${e.name}`;break;case b.FileFolderType.METHOD:i=`${b.FolderRootPath.METHODS}/${e.name}`;break;case b.FileFolderType.CLASS:i=`${b.FolderRootPath.CLASSES}/${e.name}`;break;default:return""}return`${i}${a?`.${s}`:""}`}const qP=Q("explorer/createNewFileAndOpen",async(e,{dispatch:n,getState:t})=>{const a=await n(Gn(e)).unwrap(),{qodly:s}=t().settings.server;if(a){const{file:i}=a,c=qg(i,{withExtension:!1,qodly:s}),{editor:l}=pr(c);await n(Pa({file:{name:e.fileName,type:i.type,path:c,editor:l,date:new Date().toISOString()}}))}}),Jo=Q("explorer/createNewNode",async({fileName:e,path:n,parentNode:t},{rejectWithValue:a})=>{try{return{file:await b.createFolder({verb:b.DesignerRequestVerb.CREATE_FOLDER,path:`${n}/${e}`,recursive:!0}),parentNode:t}}catch{return b.toastSubject.next({message:"failed to create folder",kind:"danger"}),a("failed to create folder")}}),js=async(e,n={})=>{try{const t=e.path.split(".").at(-1),a=await b.getNodeInfo({verb:b.DesignerRequestVerb.GET_INFO,path:e.path,content:!0,as:vh(t)?"json":"text"}),s={editor:e.editor},i=b.getTypeFromExtension(e.path);i===b.FileFolderType.METHOD&&(s.attributes=b.parseAttributes(a.content),a.content=b.addAttributesToContent(a.content,{}));const{content:c,date:l,ext:d}=a;return n.confirmed===void 0&&(n.confirmed=!0),{date:l,view:{panel:{isOpen:!1,type:"",current:""}},flags:{enabled:["WebForm","MForm"].includes(d),confirmed:n.confirmed},extra:s,name:e.name,path:e.path,type:i,initialContent:c,content:c}}catch(t){const{data:a}=t;if(a.__ERROR.find(s=>s.errCode===b.ERROR_CODES.FILE_NOT_FOUND))switch(e.path){case b.ROLES_TAB_PATH:{const s={permissions:{allowed:[]},privileges:[],roles:[]};return{date:new Date().toISOString(),flags:{},extra:{editor:{key:"editors:roles"}},name:"Roles & Privileges",path:e.path,type:b.FileFolderType.ROLES,initialContent:s,content:s}}case b.SETTINGS_TAB_PATH:{const s={};return{date:new Date().toISOString(),flags:{},extra:{editor:{key:"editors:settings"}},name:"Settings",path:e.path,type:b.FileFolderType.SETTINGS,initialContent:s,content:s}}}throw t}},Pa=Q("explorer/openFile",async({file:e,inactive:n,isNew:t,flags:a={}},{getState:s,dispatch:i})=>{const{root:{tabs:c},roles:l,debugger:{sessions:d}}=s(),p=c.find(({path:_})=>e.path===_);if(p){const _={...p,extra:{...p==null?void 0:p.extra,editor:e.editor},flags:{...p==null?void 0:p.flags,...a}};return i(Pt(_)),_}if(e.path.startsWith("Debugger")){const _=d.find(E=>`Debugger/${E.threadId}`===e.path);if(_){const{source:{content:E},source:T}=_.currentStackFrame,x={name:e.name,type:b.FileFolderType.DEBUGGER,date:new Date().toISOString(),path:e.path,content:E,view:{panel:{isOpen:!1,type:"",current:""}},initialContent:E,flags:{confirmed:!0},extra:{source:T,editor:e.editor}};return i(Pt(x)),x}}let h=null;try{h=await js(e,a)}catch(_){const{data:E}=_;if(E.__ERROR.find(T=>[b.ERROR_CODES.JSON_MALFORMED,b.ERROR_CODES.JSON_MALFORMED_AT_LINE].includes(T.errCode))){const{confirmed:T}=await i(ar({title:"Corrupt file",type:b.ModalType.CONFIRM,color:b.ModalColor.WARNING,message:"Open in code editor ?"})).unwrap();if(T){const x=await b.getNodeInfo({verb:b.DesignerRequestVerb.GET_INFO,path:e.path,content:!0,as:"text"}),{content:D,date:P,ext:j}=x;h={date:P,view:{panel:{isOpen:!1,type:"",current:""}},flags:{enabled:["WebForm","MForm"].includes(j),confirmed:!0},extra:{editor:b.EDITOR.Code},name:e.name,path:e.path,type:b.getTypeFromExtension(e.path),initialContent:D,content:D}}}}return h&&(e.path===b.ROLES_TAB_PATH&&!l.flags.touched?i(Wc({content:h.content,date:h.date})):e.path===b.SETTINGS_TAB_PATH&&i(ks({path:"project",value:h.content})),i((n?_v:Pt)({...h,isNew:t})),h)}),Gc=Q("explorer/openFileAtLine",async({file:e},{getState:n,dispatch:t})=>{const{tabs:a}=n().root,s=a.find(({path:c})=>e.path===c);if(s){const c={...s,extra:{...s==null?void 0:s.extra,editor:e.editor}};return t(Pt(c)),c}const i=await js(e);return t(Pt(i)),i}),Yg=Q("explorer/injectContentAtLine",async(e,{getState:n,dispatch:t,rejectWithValue:a})=>{const s=n();e.path.split("/").pop();const c=lt(s.explorer,e.path);if(!c)return a(`Error while trying to inject content in file ${e.path}`);const l=await js({name:c.name,date:c.date||new Date().toISOString(),path:`${c.path}.${c.ext}`,type:b.FileFolderType.CLASS,editor:c.config.editor});return await t(Pt(l)),{...e,path:`${c.path}.${c.ext}`}}),zg=Q("explorer/openFileAtSelection",async({file:e},{getState:n,dispatch:t})=>{const{tabs:a}=n().root,s=a.find(({path:c})=>e.path===c);if(s){const c={...s,extra:{...s==null?void 0:s.extra,editor:e.editor}};return t(Pt(c)),c}const i=await js(e);return t(Pt(i)),i}),uc=Q("explorer/deleteFile",async e=>{const{name:n,type:t,path:a,flags:s}=e;if(s.error)return{deleted:!0,node:e};const i=a.split("/");return i.pop(),{deleted:await b.dropFile({root:b.FolderRootType.ROOT,type:Gg(t),verb:b.DesignerRequestVerb.DROP,name:n,path:i.join("/")}),node:e}}),YP=Q("explorer/deleteFolder",async e=>{const{path:n,flags:t}=e;if(t.error)return{deleted:!0,node:e};const{deleted:a}=await b.removeItem({force:!0,path:n,verb:b.DesignerRequestVerb.REMOVE_ITEM}).catch(console.error)||{deleted:!1};return{deleted:a,node:e}}),zP=Q("explorer/removeFileNode",async(e,{getState:n,dispatch:t})=>{const a=`${e.path}.${e.ext}`;if(await b.removeItem({verb:b.DesignerRequestVerb.REMOVE_ITEM,path:a,force:!0}).catch(console.error),e.path==="Classes/DataStore"&&setTimeout(()=>{t(wn())},Ss),e.ext){const{tabs:s}=n().root,i=s.findIndex(c=>c.path===a);i>=0&&t(Zc(i))}return{deleted:!0,node:e}}),qn=Q("explorer/renameFile",async({file:e,newname:n})=>{if(e.type!=="folder"){const a=e.path.split("/");a.pop();const s=`${a.join("/")}/${e.name}.${e.ext}`,i=`${a.join("/")}/${n}.${e.ext}`;return await b.moveItem({verb:b.DesignerRequestVerb.MOVE_ITEM,path:s,newpath:i}),{old:{...e,path:s},new:{...e,name:n,path:i}}}const t=e.path.split("/");return t.pop(),await b.moveItem({verb:b.DesignerRequestVerb.MOVE_ITEM,path:`${t.join("/")}/${e.name}`,newpath:`${t.join("/")}/${n}`}),{old:e,new:{...e,name:n,path:`${t.join("/")}/${n}`}}}),Da=Q("explorer/relocateNode",async({draggedNode:e,newLocation:n},{rejectWithValue:t})=>{try{await b.moveItem({verb:b.DesignerRequestVerb.MOVE_ITEM,path:`${e.path}.${e.ext}`,newpath:`${n.path}/${e.name}.${e.ext}`})}catch{return t("can't move item")}}),Xo=Q("explorer/duplicateNode",async({node:e,duplicateName:n},{rejectWithValue:t,fulfillWithValue:a,getState:s})=>{const i=e.path.split("/");i.pop();try{const{tabs:c}=s().root,l=c.find(({path:y})=>y===`${e.path}${e.ext?`.${e.ext}`:""}`),d=["4dm","4qm","4qs"].includes(e.ext),{content:p}=l||await b.getNodeInfo({verb:b.DesignerRequestVerb.GET_INFO,path:`${e.path}.${e.ext}`,content:!0,as:d?"text":"json"}),h=await b.setFileContent({name:`${n}.${e.ext}`,content:p,path:i.join("/"),asText:d});return a({node:{...h,path:i.join("/")}})}catch{return t("failed to duplicate file")}}),VP=Q("explorer/executeMethod",async({methodName:e,params:n=[],resultingDataSource:t={},namespace:a=""},{rejectWithValue:s})=>{var i,c;try{const d=await window.Method4D.buildMethod({methodName:e,parameters:n,resultingDataSource:t},{namespace:a},null).callServerSide({id:"",serverSideRef:""},"onclick",{});return d!=null&&d.__NOTIFICATION?b.toastSubject.next({message:`${((i=d.__NOTIFICATION)==null?void 0:i.message)||""}`,kind:`${((c=d.__NOTIFICATION)==null?void 0:c.type)||"info"}`}):b.toastSubject.next({message:"Method executed Successfully",kind:"message"}),d}catch(l){return b.toastSubject.next({message:l.message||`Error executing the method "**${e}**"`,kind:"danger",markdown:!0}),s("can't execute method")}}),KP=Q("files/fetchFiles",async()=>b.getFolders(b.FolderRootType.WEBFORMS,b.FolderRootType.METHODS,b.FolderRootType.CLASSES)),qc=Q("tabs/renameDatasource",async(e,{dispatch:n,getState:t})=>{var E,T;const a=!!e.datasourceNamespace,{confirmed:s}=await n(ar({message:"Are you sure you want to rename the datasource?",title:"Rename Datasource",type:b.ModalType.CONFIRM,color:b.ModalColor.WARNING,views:{toggles:{},tips:a?[{type:"warning",message:"The datasource property of components bound with this datasource will also be updated on opened web forms only"},{type:"warning",message:"The origin of some other datasources might be also renamed (if this datasource is the origin of other datasources)"}]:[{type:"warning",message:"The datasource property of components bound with this datasource will also be updated"},{type:"warning",message:"The origin of some other datasources might be also renamed (if this datasource is the origin of other datasources)"}]}})).unwrap();if(!s)return null;const{autoUpdateReferences:i,datasourceId:c,datasourceNamespace:l,value:d,path:p}=e,h=t();let y=[];if(a){const x=h.sharedDatasources.sources[l]||[];y.push(...x)}else if(p){const x=h.root.tabs.find(b.by("path",p));if(y=(T=(E=x==null?void 0:x.content)==null?void 0:E.metadata)==null?void 0:T.datasources,!y)return null}const _=new RegExp(`^${c}\\b`,"");if(y=y.map(x=>{const D=(b.isObjectDatasource(x)||!b.isSimpleDatasource(x))&&x.from&&_.test(x.from),P=x.events?x.events.map(j=>{var M,k,O,z;switch(j==null?void 0:j.type){case"method":{const H=j;return H.params?{...H,params:H.params.map(Y=>{var te;return{...Y,datasource:(te=Y.datasource)==null?void 0:te.replace(new RegExp(`^${c}`,""),d)}}),returns:(M=H.returns)!=null&&M.datasource?{...H.returns,datasource:(k=H.returns.datasource)==null?void 0:k.replace(new RegExp(`^${c}`,""),d)}:H.returns}:H}case"simple-action":{const H=j;return H.datasource?{...H,datasource:{...H.datasource,name:(O=H.datasource.name)==null?void 0:O.replace(new RegExp(`^${c}`,""),d),from:(z=H.datasource.from)==null?void 0:z.replace(new RegExp(`^${c}`,""),d)}}:H}default:return j}}):x.events;return x.id===c?{...x,id:d,events:P}:D&&x.from?{...x,from:x.from.replace(new RegExp(`^${c}`,""),d),events:P}:{...x,events:P}}),i){const x=a?`${l}:${c}`:`${c}`,D=a?`${l}:${d}`:`${d}`;b.datasourcesSubject.next({path:p??"",action:b.DatasourcesActions.RENAME,old_reference:x,new_reference:D,is_shared:a})}return{path:p,namespace:l,datasources:y}}),Yc=Q("tabs/edit-datasource",(e,{getState:n})=>{var i,c;const t=n();let a=[];if(e.namespace)a=t.sharedDatasources.sources[e.namespace];else{const l=t.root.tabs.find(b.by("path",e.path));l&&(a=((c=(i=l.content)==null?void 0:i.metadata)==null?void 0:c.datasources)||[])}return a.map(l=>l.id===e.datasourceId?Object.assign({},l,{[e.propertyKey]:e.value}):l)}),Vg=Q("tabs/fetchChanges",async(e,{getState:n})=>{const a=ta(n()).filter(s=>[b.FileFolderType.METHOD,b.FileFolderType.CLASS].includes(s.type));return b.getFilesInfo(...a.map(s=>{const[i]=s.path.split("/").filter(Boolean);return{name:s.name,type:s.type,root:i,path:"."}}))}),JP=Q("files/saveAll",async(e,{getState:n,dispatch:t})=>{const a=Ac(n());for(const s of a)t(Yn({tab:s}))}),zc=Q("files/tryCloseTab",async(e,{getState:n,dispatch:t})=>{const{tabs:a}=n().root,s=a.findIndex(c=>c.path===e);if(s===-1)return!1;const i=a[s];if(i!=null&&i.flags.touched){const{confirmed:c}=await t(ar({title:ws(i),message:"Your unsaved changes will be lost. Proceed anyway?",type:b.ModalType.CONFIRM,color:b.ModalColor.WARNING,icon:"FdWarningDanger"})).unwrap();if(!c)return!1}return t(Zc(s)),i.path===b.ROLES_TAB_PATH&&i.flags.touched&&(async()=>{const l=await b.getNodeInfo({verb:b.DesignerRequestVerb.GET_INFO,path:b.ROLES_TAB_PATH,content:!0,as:"json"});t(Wc({content:l.content,date:l.date}))})(),!0}),XP=Q("files/tryCloseOtherTabs",async(e,{getState:n,dispatch:t})=>{const{tabs:a}=n().root;if(a.some(i=>i.path!==e&&i.flags.touched===!0)){const{confirmed:i}=await t(ar({title:"Closing other tabs",message:"Your changes will be lost if you do not save them. Close anyway?",type:b.ModalType.CONFIRM,color:b.ModalColor.WARNING,icon:"FdWarningDanger"})).unwrap();if(!i)return}t(mv(e))}),ZP=Q("files/tryCloseAllTabs",async(e,{getState:n,dispatch:t})=>{const{tabs:a}=n().root;if(a.some(i=>i.flags.touched===!0)){const{confirmed:i}=await t(ar({title:"Closing all tabs",message:"Your changes will be lost if you do not save them. Close anyway?",type:b.ModalType.CONFIRM,color:b.ModalColor.WARNING,icon:"FdWarningDanger"})).unwrap();if(!i)return}t(gv())}),QP=Q("files/tryCloseRightTabs",async(e,{getState:n,dispatch:t})=>{const{tabs:a}=n().root;let s=!1;for(let i=a.length-1;i>e;i-=1)if(a[i].flags.touched){s=!0;break}if(s){const{confirmed:i}=await t(ar({title:"Closing right tabs",message:"Your changes will be lost if you do not save them. Close anyway?",type:b.ModalType.CONFIRM,color:b.ModalColor.WARNING,icon:"FdWarningDanger"})).unwrap();if(!i)return}t(vv(e))}),eD=Q("files/tryCloseLeftTabs",async(e,{getState:n,dispatch:t})=>{const{tabs:a}=n().root;let s=!1;for(let i=0;i<e;i+=1)if(a[i].flags.touched){s=!0;break}if(s){const{confirmed:i}=await t(ar({title:"Closing left tabs",message:"Your changes will be lost if you do not save them. Close anyway?",type:b.ModalType.CONFIRM,color:b.ModalColor.WARNING,icon:"FdWarningDanger"})).unwrap();if(!i)return}t(yv(e))}),cc=Q("files/reloadTab",async(e,{dispatch:n})=>{if(e.flags.touched){const{confirmed:s}=await n(ar({title:ws(e),message:"Changes made to the file will be lost. Continue?",type:b.ModalType.CONFIRM,color:b.ModalColor.WARNING,icon:"FdWarningDanger"})).unwrap();if(!s)return}const t=jh(e.path),a=await b.getNodeInfo({verb:b.DesignerRequestVerb.GET_INFO,path:e.path,content:!0,as:t});if(e.path===b.ROLES_TAB_PATH){const{roles:s,privileges:i}=Ls(a.content);n(Uc({roles:s,privileges:i}))}else if(e.path===b.SETTINGS_TAB_PATH){const{content:s}=a;n(ks({path:"project",value:s}))}else{const{content:s}=a;e.type===b.FileFolderType.WEBFORM?b.webformSubject.next({path:e.path,action:b.WebformActions.RELOAD,payload:s.components}):e.type===b.FileFolderType.MODEL&&Yh.next({action:"reload",payload:s})}return a}),Yn=Q("files/saveTab",async({tab:e},{dispatch:n,getState:t})=>{const{path:a,content:s}=e;if(e.type===b.FileFolderType.DEBUGGER)return{...e,errors:[]};a.split("/").pop();const c=await b.getFilesInfo({path:a});if(c.files[0]){const h=new Date(e.date),y=new Date(c.files[0].date);if(h.getTime()<y.getTime()){const{confirmed:_}=await n(ar({title:ws(e),message:"New content has been found on the server. Are you sure you want to continue?",type:b.ModalType.CONFIRM,icon:"FdSave"})).unwrap();if(!_)return n(hv({path:a,flags:{old:!0}})),null}}const l=await b.saveContent({verb:b.DesignerRequestVerb.SAVE_CONTENT,content:tD(e,t()),path:a});(e.type===b.FileFolderType.CLASS||e.type===b.FileFolderType.MODEL)&&setTimeout(()=>{n(wn())},Ss);const d=(l.modelErrors||[]).map(h=>h.message),p=(l.permissionsErrors||[]).map(h=>h.message);return{...e,content:s,date:l.date,initialContent:s,errors:d.length>0||p.length>0?[{title:"Model errors",messages:d},{title:"Permissions errors",messages:p}]:[]}}),tD=(e,n)=>{switch(!0){case e.path==="settings.json":case e.path===b.SETTINGS_TAB_PATH:return n.settings.project;case e.type===b.FileFolderType.ROLES:return{...e.content,...Ns(n.roles)};case e.type===b.FileFolderType.MODEL:return e.content||{toJSON:!0,dataClasses:[],extraProperties:{}};default:return e.content}},Mp=async e=>{if(e.type===b.FileFolderType.DATA_EXPLORER)return{name:"Data Explorer",path:e.path,flags:{},view:{panel:{isOpen:!1,type:"",current:""}},type:e.type,date:new Date().toISOString()};const n=e.path.split("/").filter(Boolean)[0],t=await b.getFile({root:n,type:e.type,verb:b.DesignerRequestVerb.GET,name:e.name}),a={};t.type===b.FileFolderType.METHOD&&(a.attributes=b.parseAttributes(t.content));const{date:s,name:i,type:c,content:l}=t;return{date:s,flags:{enabled:e.type===b.FileFolderType.WEBFORM},extra:a,view:{panel:{isOpen:!1,type:"",current:""}},name:i,path:e.path,type:c,initialContent:l,content:c===b.FileFolderType.MODEL?gh(l):l}},Kg=Q("files/tryInjectMethod",async({type:e,dataclass:n},{getState:t,dispatch:a})=>{const{root:{tabs:s},settings:{server:{qodly:i}}}=t(),c=b.getFileExtentionFromType("class",i);let l="",d="",p=null;if(!n)l="DataStore",d=`Classes/DataStore.${c}`;else switch(e){case"dataclass":l=n,d=`Classes/${n}.${c}`;break;case"collection":l=`${n}Selection`,d=`Classes/${n}Selection.${c}`;break;case"entity":l=`${n}Entity`,d=`Classes/${n}Entity.${c}`;break;default:return p}const h=s.find(b.by("path",d));if(h)return a(Pt(h)),h;try{p=await Mp({name:l,date:new Date().toISOString(),path:`class/${l}.${c}`,type:b.FileFolderType.CLASS})}catch{n?await a(ic({type:"dataclass",className:n,collectionName:`${n}Selection`,toCreate:e})):await a(ic({type:"model"}))}return p=await Mp({name:l,date:new Date().toISOString(),path:`class/${l}.${c}`,type:b.FileFolderType.CLASS}),p.path=d,a(Pt(p)),p}),rD=Q("roles/open",async(e,{dispatch:n,getState:t})=>{const{tabs:a}=t().root,s=a.find(i=>i.path===b.ROLES_TAB_PATH);if(s)return n(Pt(s)),s;n(vs())});function Lp(e,n){const{line:t,offset:a,type:s="saved"}=n;e.breakpoints[s].locations.push({line:t}),He.isNumber(a)&&(e.breakpoints[s].offset=a)}function Np(e,n,t,a){e.breakpoints[t].locations=n,He.isNumber(a)&&(e.breakpoints[t].offset=a)}function kp({filePath:e,fileType:n,methodName:t,className:a,ext:s,source:i}){return{filePath:e,fileType:n,methodName:t,className:a,ext:s,source:i,breakpoints:{draft:{locations:[],offset:0},saved:{locations:[],offset:0}}}}function jp(e,n,t){let a=!1;const s=e.map(i=>i[t]!==n[t]?i:(a=!0,{...i,...n}));return a?s:[...s,n]}function Yo(e){return e.map(({label:n})=>({label:n}))}const Jg=nr({name:"debugger",initialState:()=>{var n,t;const{debugger:e={meta:{state:Ir.DETACHED},list:[],sessions:[],expressions:[]}}=Kn();return{meta:{...e.meta,state:((n=e.meta)==null?void 0:n.state)===Ir.ATTACHED?(t=e.meta)==null?void 0:t.state:Ir.DETACHED},list:e.list||[],sessions:e.sessions||[],expressions:e.expressions||[]}},reducers:{addBreakpointDecoration(e,n){const{filePath:t,fileType:a,methodName:s,className:i,ext:c,source:l,breakpoint:d}=n.payload,p=Sn(e.list,t,s,i);if(p)Lp(p,d);else{if(a===b.FileFolderType.CLASS&&d.offset===void 0)throw new Error(`Cannot add a breakpoint on a function without offset. Try editing the ${i} class.`);const h=kp({filePath:t,fileType:a,methodName:s,className:i,ext:c,source:l});Lp(h,d),e.list.push(h)}},removeBreakpointDecoration(e,n){const{filePath:t,methodName:a,line:s,offset:i=0,type:c="saved"}=n.payload;if(t.startsWith("Classes/")){const l=e.list.filter(d=>d.filePath===t);if(l.length>0){const d=s+i;l.forEach(p=>{const h=p.breakpoints[c].offset||0;p.breakpoints[c].locations=p.breakpoints[c].locations.filter(y=>y.line+h!==d),c==="saved"&&(p.breakpoints.draft.locations=p.breakpoints.draft.locations.filter(y=>y.line+h!==d))})}}else{const l=Sn(e.list,t,a);l&&(l.breakpoints[c].locations=l.breakpoints[c].locations.filter(d=>d.line!==s),c==="saved"&&(l.breakpoints.draft.locations=l.breakpoints.draft.locations.filter(d=>d.line!==s)))}},setBreakpointsDecoration(e,n){const{filePath:t,fileType:a,methodName:s,className:i,ext:c,source:l,breakpoints:d,offset:p,type:h="saved",clearDraft:y}=n.payload,_=Sn(e.list,t,s);if(_)Np(_,d,h,p),y&&h!=="draft"&&(_.breakpoints.draft.locations=[]);else{const E=kp({filePath:t,fileType:a,methodName:s,className:i,ext:c,source:l});Np(E,d,h,p),e.list.push(E)}},clearBreakpoints(e,n){const{filePath:t,type:a="saved"}=n.payload;e.list=e.list.map(s=>({...s,breakpoints:s.filePath===t?{draft:!a||a==="draft"||a==="any"?{locations:[],offset:0}:s.breakpoints.draft,saved:!a||a==="saved"||a==="any"?{locations:[],offset:0}:s.breakpoints.saved}:s.breakpoints}))},clearBreakpointsExcept(e,n){const{exceptedFilePath:t,type:a="saved"}=n.payload;e.list=e.list.map(s=>({...s,breakpoints:s.filePath!==t?{draft:!a||a==="draft"||a==="any"?{locations:[],offset:0}:s.breakpoints.draft,saved:!a||a==="saved"||a==="any"?{locations:[],offset:0}:s.breakpoints.saved}:s.breakpoints}))},clearAllBreakpoints(e){e.list=e.list.map(n=>({...n,breakpoints:{draft:{locations:[],offset:0},saved:{locations:[],offset:0}}}))},setActiveLine(e,n){const{threadId:t,line:a,highlight:s}=n.payload,i=ot(e.sessions,t);i&&(i.activeLine=a,s&&(i.highlightedLines={start:a,end:a}))},addExpression(e,n){const{threadId:t,label:a,save:s}=n.payload,i=ot(e.sessions,t);i&&i.stopped&&(i.expressions=[...i.expressions||[],{label:a}],s&&(e.expressions=Yo(i.expressions)))},removeExpression(e,n){const{threadId:t,index:a,save:s}=n.payload,i=ot(e.sessions,t);i&&(i.expressions=i.expressions.filter((c,l)=>l!==a),s&&(e.expressions=Yo(i.expressions)))},removeAllExpressions(e,n){const{threadId:t,save:a}=n.payload,s=ot(e.sessions,t);s&&(s.expressions=[],a&&(e.expressions=[]))},renameExpression(e,n){const{threadId:t,index:a,replacement:s,save:i}=n.payload,c=ot(e.sessions,t);c&&c.expressions[a]&&(c.expressions[a].label=s,i&&(e.expressions=Yo(c.expressions)))},setExpression(e,n){const{threadId:t,expression:a}=n.payload,s=ot(e.sessions,t);if(s){const i=a.index>=0?a.index:s.expressions.length>0?s.expressions.length-1:0,c=s.expressions[i];c?(c.result=a.result,c.nakedResult=a.nakedResult,c.variablesReference=a.variablesReference||0,c.presentationHint=a.presentationHint):s.expressions.push(a)}},updateExpressionAt(e,n){const{threadId:t,index:a,value:s}=n.payload,i=ot(e.sessions,t);if(i){const c=i.expressions[a];c&&(c.result=`"${s}"`,c.nakedResult=s)}},saveExpressions(e,n){const{expressions:t}=n.payload;e.expressions=Yo(t)},addSession(e,n){const{threadId:t,channelId:a,stackFrames:s,exceptions:i=[]}=n.payload,c=ot(e.sessions,t),l=s[0],{expressions:d=[]}=e;if(c)c.expressions=d;else{const p=Tc(t);e.sessions.push({tabPath:p,threadId:t,channelId:a,stackFrames:s,currentStackFrame:l,exceptions:i,expressions:d,variables:{callchain:[],expressions:[]},highlightedLines:null,activeLine:null,stopped:!0})}},updateSession(e,n){const{threadId:t,changes:a}=n.payload;e.sessions=e.sessions.map(s=>s.threadId===t?{...s,...a}:s)},removeSession(e,n){const{threadId:t}=n.payload;e.sessions=e.sessions.filter(a=>a.threadId!==t)},removeSessionByIndex(e,n){const t=n.payload;e.sessions.splice(t,1)},setSessions(e,n){const t=n.payload;e.sessions=t},setCallChainVariables(e,n){const{threadId:t,frameId:a,variables:s}=n.payload;e.sessions=e.sessions.map(i=>{var c;return i.threadId===t?{...i,variables:{...i.variables,callchain:jp((c=i.variables)==null?void 0:c.callchain,{frameId:a,items:s},"frameId")}}:i})},setExpressionVariables(e,n){const{threadId:t,variablesReference:a,variables:s}=n.payload;e.sessions=e.sessions.map(i=>{var c;return i.threadId===t?{...i,variables:{...i.variables,expressions:jp((c=i.variables)==null?void 0:c.expressions,{variablesReference:a,items:s},"variablesReference")}}:i})},setSourceContent(e,n){const{threadId:t,content:a}=n.payload,s=ot(e.sessions,t);s&&(s.currentStackFrame.source={...s.currentStackFrame.source,content:a})},setDebuggerMeta(e,n){if(n.payload.state===Ir.ERROR){e.meta.error={...e.meta.error,time:Date.now()};const{override:t,error:a={code:null,reason:"",type:ss.SOCKET_ERROR}}=n.payload;if((t||e.meta.state!==Ir.ERROR)&&(e.meta.error={...e.meta.error,...a}),(a==null?void 0:a.type)===ss.SOCKET_CLOSURE&&!(a!=null&&a.reason)&&e.meta.state===Ir.DETACHED)return}e.meta.state=n.payload.state}},extraReducers:e=>{e.addCase(Zg.fulfilled,n=>{n.sessions=[]})}}),{addBreakpointDecoration:nD,removeBreakpointDecoration:aD,setBreakpointsDecoration:oD,clearBreakpoints:sD,clearBreakpointsExcept:iD,clearAllBreakpoints:uD,setActiveLine:cD,addExpression:lD,renameExpression:fD,removeExpression:dD,removeAllExpressions:pD,setExpression:hD,updateExpressionAt:gD,saveExpressions:vD,addSession:mD,updateSession:yD,removeSession:bD,removeSessionByIndex:_D,setSessions:Xg,setCallChainVariables:ED,setExpressionVariables:SD,setSourceContent:wD,setDebuggerMeta:TD}=Jg.actions,Zg=Q("files/wipeDebuggerSessions",async(e,{getState:n,dispatch:t})=>{const{sessions:a}=n().debugger;for(const{threadId:s}of a){const i=Tc(s);t(zc(i))}}),Qg=Q("files/removeDebuggerSessionsNotIn",async(e,{getState:n,dispatch:t})=>{const{threadIds:a}=e,{sessions:s}=n().debugger,i=[],c=s.filter(l=>{const d=a.includes(l.threadId);return d||i.push(l.threadId),d});return t(Xg(c)),{staleThreadIds:i}}),Vc=Q("models/fetch",async()=>{try{return(await b.http(b.API_PREFIX,{method:"POST",body:JSON.stringify({verb:b.DesignerRequestVerb.GET_INFO,path:b.MODEL_TAB_PATH,as:"json",content:!0}),headers:new Headers({"Content-Type":"application/json"})})).content}catch(e){return e.message}}),ms=Q("models/save",async(e,{getState:n,dispatch:t,rejectWithValue:a})=>{const{tabs:s}=n().root,i=s.find(c=>c.path===b.MODEL_TAB_PATH);if(!i)return a("Error while saving the model");try{const c=await b.http(b.API_PREFIX,{method:"POST",body:JSON.stringify({verb:"save",path:i.path,content:i.content}),headers:new Headers({"Content-Type":"application/json"})});return setTimeout(()=>{t(wn())},Ss),{...c,path:i.path,content:e.content||{toJSON:!0,dataClasses:[],extraProperties:{}}}}catch{return a("Error while saving the model")}}),CD=Q("models/open",async(e,{dispatch:n,getState:t})=>{const{tabs:a}=t().root,s=a.find(i=>i.path==="models/main");if(s)return n(Pt(s)),s;n(Vc())}),xD=Q("model/rename-dataclass",async(e,{getState:n,dispatch:t})=>{var y,_;const{dataclassId:a,selectionId:s,name:i}=e;let c=n();const l=c.explorer.find(E=>E.path===b.FolderRootPath.CLASSES);if(!l)throw new Error("Classes folder was not found!");await t(_r(l.path)),c=n();const d={class:{found:!1,newNameTaken:!1,file:null,filename_update:i},entity:{found:!1,newNameTaken:!1,file:null,filename_update:`${i}Entity`},selection:{found:!1,newNameTaken:!1,file:null,filename_update:`${i}Selection`}};(_=(y=c.explorer.find(E=>E.path===b.FolderRootPath.CLASSES))==null?void 0:y.children)==null||_.forEach(E=>{E.name===d.class.filename_update&&(d.class.newNameTaken=!0),E.name===d.entity.filename_update&&(d.entity.newNameTaken=!0),E.name===d.selection.filename_update&&(d.selection.newNameTaken=!0),E.name===a?(d.class.found=!0,d.class.file=E):E.name===`${a}Entity`?(d.entity.found=!0,d.entity.file=E):E.name===s&&(d.selection.found=!0,d.selection.file=E)});const p=Object.entries(d).reduce((E,T)=>{const[x,D]=T;return D.found?D.newNameTaken?[...E,{type:"error",message:`Cannot rename ${x} file to ${D.filename_update} because it already exists. The existing file will be used instead!`}]:E:[...E,{type:"warning",message:`${a} ${x} file was not found`}]},[]);p.length>0&&t(ar({message:"The following errors were encountered during dataclass rename:",views:{tips:p}}));const h=Object.values(d).filter(E=>E.found&&E.file&&!E.newNameTaken);await Promise.all(h.map(async E=>await t(qn({file:E.file,newname:E.filename_update})))),h.length>0&&t(_r("Classes"))}),Na={DATACLASS_DELETE:"dataclass.delete",DATACLASS_DRAGGABLE:"dataclass.draggable"},RD={model:{dataClasses:{},collections:{},extraProperties:{}},draft:{dataClasses:{},collections:{},extraProperties:{}},flags:{[Na.DATACLASS_DELETE]:!0,[Na.DATACLASS_DRAGGABLE]:!0}},ev=nr({name:"Models",initialState:RD,reducers:{setModelFlag(e,n){e.flags={...e.flags,...n.payload}}},extraReducers(e){e.addCase(Vc.fulfilled,(n,t)=>{var c;const a={},s={},i=t.payload.extraProperties||{};(c=t.payload.dataClasses)==null||c.forEach(l=>{a[l.name]=l,s[l.collectionName]=l}),n.draft.dataClasses=a,n.draft.collections=s,n.draft.extraProperties=i,n.model.dataClasses=a,n.model.collections=s,n.model.extraProperties=i}),e.addCase(ms.pending,()=>{}).addCase(ms.fulfilled,(n,t)=>{const a={},s={},i=t.payload.content.extraProperties||{};t.payload.content.dataClasses.forEach(c=>{a[c.name]=c,s[c.collectionName]=c}),n.draft.dataClasses=a,n.draft.collections=s,n.draft.extraProperties=i,n.model.dataClasses=a,n.model.collections=s,n.model.extraProperties=i})}}),{setModelFlag:OD}=ev.actions;var tv=(e=>(e.UUID="uuid",e.STRING="string",e.TEXT="text",e.DATE="date",e.TIME="duration",e.BOOLEAN="bool",e.BYTE="byte",e.INTEGER="word",e.LONG="long",e.LONG64="long64",e.FLOAT="number",e.BLOB="blob",e.IMAGE="image",e.OBJECT="object",e))(tv||{}),Bs=(e=>(e.STORAGE="storage",e.RELATEDENTITY="relatedEntity",e.RELATEDENTITIES="relatedEntities",e.CALCULATED="calculated",e.COMPOSITION="composition",e.ALIAS="alias",e))(Bs||{});const AD=e=>["string","uuid","number","long"].includes(e.type),PD=[{label:"Storage",value:"storage"},{label:"Calculated",value:"calculated"}],DD=[{title:"UUID",kind:"storage",value:"uuid",calculatedType:"uuid",calculatedKind:"storage"},{title:"Long",kind:"storage",value:"long",calculatedType:"long",calculatedKind:"storage"}],ID=[{title:"String",kind:"storage",value:"string",calculatedType:"string",calculatedKind:"storage"},{title:"Text",kind:"storage",value:"text",calculatedType:"text",calculatedKind:"storage"},{title:"UUID",kind:"storage",value:"uuid",calculatedType:"uuid",calculatedKind:"storage"},{title:"Date",kind:"storage",value:"date",calculatedType:"date",calculatedKind:"storage"},{title:"Duration",kind:"storage",value:"duration",calculatedType:"duration",calculatedKind:"storage"},{title:"Bool",kind:"storage",value:"bool",calculatedType:"bool",calculatedKind:"storage"},{title:"Byte",kind:"storage",value:"byte",calculatedType:"byte",calculatedKind:"storage"},{title:"Word",kind:"storage",value:"word",calculatedType:"word",calculatedKind:"storage"},{title:"Number",kind:"storage",value:"number",calculatedType:"number",calculatedKind:"storage"},{title:"Long",kind:"storage",value:"long",calculatedType:"long",calculatedKind:"storage"},{title:"Object",kind:"storage",value:"object",calculatedType:"object",calculatedKind:"storage"},{title:"Image",kind:"storage",value:"image",calculatedType:"image",calculatedKind:"storage"},{title:"Blob",kind:"storage",value:"blob",calculatedType:"blob",calculatedKind:"storage"}],FD=[{label:"Expose as REST",value:"public"},{label:"Do not expose as REST",value:"publicOnServer"}],$D=[{label:"Expose as REST",value:"public"},{label:"Do not expose as REST",value:"publicOnServer"}],MD=[{label:"None",value:"none"},{label:"B-tree",value:"btree"},{label:"Cluster",value:"cluster"},{label:"Automatic",value:"auto"}],LD=(e,n)=>({toJSON:!0,extraProperties:n,dataClasses:e.map(t=>{var a;return{...t.data,extraProperties:{position:{x:t.position.x,y:t.position.y},panelColor:(a=t.data.extraProperties)==null?void 0:a.panelColor}}})});function ND(e,n,t){const a=e;let s=0;for(;t[`${a}${s||""}`];)s++;return`${a}${s||""}`}const rv=e=>e.kind===Bs.RELATEDENTITY,nv=e=>e.kind===Bs.RELATEDENTITIES,kD=e=>nv(e)||rv(e),jD=()=>kr(e=>e.model.draft.dataClasses),BD=()=>kr(e=>e.model.draft.collections),WD=e=>kr(n=>n.model.draft.dataClasses[e]),UD=(e,n)=>kr(t=>t.model.draft.dataClasses[e].attributes.find(b.by("name",n))),HD=()=>kr(e=>e.model.draft.extraProperties),GD=()=>{const e=kr(s=>s.model.flags),n=s=>s in e?e[s]:void 0,t=n(Na.DATACLASS_DELETE),a=n(Na.DATACLASS_DRAGGABLE);return{deleteDataclass:t,draggableDataclass:a,flags:e}},qD=ev.reducer;function Mu(e,n){const t=e.tabs.find(({path:a})=>a===b.SETTINGS_TAB_PATH);t&&(t.flags.touched=n)}const av={SIDEBAR_SECTION_RESIZABLE:"sidebar.section.resizable"},ov={[av.SIDEBAR_SECTION_RESIZABLE]:!0},sv=nr({name:"webforms",initialState:()=>{const{webforms:e}=Kn();return{...e,templates:{data:[],selectedGroup:""},datasources:{...Sc.webforms.datasources,...e==null?void 0:e.datasources},flags:ov}},reducers:{toggleInspector:(e,n)=>{const{type:t}=n.payload;e.inspector[t].active=!e.inspector[t].active,e.inspector[t].active||(e.inspector[t].data=void 0)},inspect:(e,n)=>{const{type:t,data:a}=n.payload;e.inspector[t].active&&(e.inspector[t].data=a)},addComponent:(e,n)=>{e.components.push(n.payload)},editComponent:(e,n)=>{const{id:t,changes:a}=n.payload;e.components=e.components.map(s=>s.id===t?{...s,...a}:s)},removeComponent:(e,n)=>{const{payload:t}=n,a=e.components.findIndex(s=>s.id===t);a!==-1&&e.components.splice(a,1)},setSelectedGroup:(e,n)=>{e.templates.selectedGroup=n.payload.selectedGroup},setTemplatesData:(e,n)=>{e.templates.data=n.payload},setTemplateData:(e,n)=>{const{group:t,components:a}=n.payload,s=e.templates.data.find(i=>i.group===t);s&&(s.components=a)},setDatasourcesTheme:(e,n)=>{e.datasources.theme=n.payload},setWebformsFlag(e,n){e.flags={...e.flags,...n.payload}}},extraReducers(e){e.addCase(dv.fulfilled,(n,t)=>{n.components=t.payload})}}),{toggleInspector:YD,inspect:zD,addComponent:iv,editComponent:uv,removeComponent:cv,setSelectedGroup:VD,setTemplatesData:lv,setTemplateData:fv,setDatasourcesTheme:KD,setWebformsFlag:JD}=sv.actions,XD=sv.reducer,Kc=He.curry((e,n)=>{var s,i;const t={...n.sharedDatasources.sources},a=(i=((s=n.root.tabs.find(b.by("path",e)))==null?void 0:s.content).metadata)==null?void 0:i.datasources;return a&&(t[e]=a),He.cloneDeep(t)}),ZD=Q("webforms/fetchTemplates",async(e,{dispatch:n,getState:t})=>{const{data:a}=t().webforms.templates,s=t().settings.session["studio.tipsBaseUrl"]||"";if(!He.isEmpty(a))return a;try{const c=await(await fetch(`${s}/build/index.json?t=${Date.now()}`)).json();return n(lv(c)),c}catch{return[]}}),QD=Q("webforms/fetchTemplate",async({name:e},{dispatch:n,getState:t})=>{const{data:a}=t().webforms.templates,s=a.find(i=>i.group===e);if(s&&!He.isEmpty(s.components))return s.components;try{const c=await(await fetch(`${s==null?void 0:s.link}?t=${Date.now()}`)).json();return n(fv({group:e,components:c})),c}catch{return[]}}),dv=Q("webforms/fetchCraftedComponents",async(e,{rejectWithValue:n})=>{try{return(await b.getNodeInfo({path:"WebForms/crafted_components.json",verb:b.DesignerRequestVerb.GET_INFO,content:!0,as:"json"})).content}catch{return n("Error while loading the crafted components")}}),eI=Q("webforms/addCraftedComponent",async(e,{dispatch:n,rejectWithValue:t,getState:a})=>{try{n(iv(e));const{webforms:{components:s}}=a();b.setCraftedComponents(s)}catch{return t("Error while adding the crafted component")}}),tI=Q("webforms/editCraftedComponent",async(e,{dispatch:n,rejectWithValue:t,getState:a})=>{try{n(uv(e));const{webforms:{components:s}}=a();b.setCraftedComponents(s)}catch{return t("Error while editing the crafted component")}}),rI=Q("webforms/removeCraftedComponent",async(e,{dispatch:n,rejectWithValue:t,getState:a})=>{try{n(cv(e));const{webforms:{components:s}}=a();b.setCraftedComponents(s)}catch{return t("Error while removing the crafted component")}}),Jc=Q("datasources/add-datasource",async(e,{getState:n,rejectWithValue:t})=>{var a,s;try{const i=n(),c=e.datasource,l=!!c.namespace,d=[];if(l){const p={...i.sharedDatasources.sources,[c.namespace]:[...i.sharedDatasources.sources[c.namespace],c]};d.push(...p[c.namespace]),await b.setSharedSources(p)}else(((s=(a=i.root.tabs.find(b.by("path",e.path)).content)==null?void 0:a.metadata)==null?void 0:s.datasources)||[]).push(c);return{list:d,path:e.path,namespace:e.datasource.namespace}}catch{console.error("Error while adding the datasource",e.datasource.id),t("Error while adding the datasource")}}),Xc=Q("datasources/edit-datasource",async(e,{getState:n,rejectWithValue:t})=>{try{const{namespace:a,path:s}=e,i=n(),c=!!e.namespace,l=Kc(s,i);let d=He.defaultTo(l[a||s],[]);return d=d.map(p=>p.id===e.id?{...p,[e.property]:e.value}:p),c&&await b.setSharedSources({...i.sharedDatasources.sources,[e.namespace]:d}),{list:d,path:e.path,namespace:e.namespace}}catch{t(`Error while editing datasource ${e.id}`)}}),nI=e=>e.type===zn.fulfilled.type,zn=Q("datasources/rename-datasource",async(e,{getState:n,rejectWithValue:t})=>{try{const a=n(),s=!!e.namespace,i=e.namespace||e.path,c=Kc(e.path,a),l=He.defaultTo(c[i],[]),d=new RegExp(`^${e.id}\\b`,"");if(l.forEach(p=>{var y;const h=(b.isObjectDatasource(p)||!b.isSimpleDatasource(p))&&p.from&&d.test(p.from);e.updateRefs&&((y=p.events)==null||y.forEach(_=>{var E,T,x,D,P;switch(_.type){case"method":{const j=_;j.params.forEach(M=>{M.datasource&&Object.assign(M,{datasource:M.datasource.replace(new RegExp(`^${e.id}`,""),e.new_name)})}),j.returns&&Object.assign(j.returns,{datasource:(T=(E=j.returns)==null?void 0:E.datasource)==null?void 0:T.replace(new RegExp(`^${e.id}`,""),e.new_name)});return}case"simple-action":{const j=_;j.datasource&&Object.assign(j.datasource,{name:(x=j.datasource.name)==null?void 0:x.replace(new RegExp(`^${e.id}`,""),e.new_name),from:(D=j.datasource.from)==null?void 0:D.replace(new RegExp(`^${e.id}`,""),e.new_name),target:(P=j.datasource.target)==null?void 0:P.replace(new RegExp(`^${e.id}`,""),e.new_name)});return}default:return}})),p.id===e.id?p.id=e.new_name:h&&p.from&&(p.from=p.from.replace(new RegExp(`^${e.id}`,""),e.new_name))}),e.updateRefs){const p=b.getDatasourceId({id:e.id,namespace:e.namespace}),h=b.getDatasourceId({id:e.new_name,namespace:e.namespace});b.datasourcesSubject.next({path:e.path??"",action:b.DatasourcesActions.RENAME,old_reference:p,new_reference:h,is_shared:s})}return s&&await b.setSharedSources({...a.sharedDatasources.sources,[e.namespace]:l}),{list:l,path:e.path,namespace:e.namespace}}catch{return t(`Error while renaming datasource ${e.namespace}:${e.id}`)}}),Ia=Q("datasources/delete-datasource",async(e,{getState:n,rejectWithValue:t})=>{try{const a=n(),s=!!e.namespace,i=e.namespace||e.path,l=Kc(e.path,a)[i].filter(b.outById(e.id));return s&&await b.setSharedSources({...a.sharedDatasources.sources,[e.namespace]:l}),{list:l,path:e.path,namespace:e.namespace}}catch{return t(`Error while removing datasource ${e.id}`)}}),ka=nr({name:"root",initialState:()=>{const e=Kn();return{filesLoading:!1,tabs:e.tabs||[],activeTab:e.activeTab,recent:e.recent||[]}},reducers:{setPanelState(e,n){const{path:t,...a}=n.payload;e.tabs.forEach(s=>{s.path===t&&(s.view||(s.view={panel:{isOpen:!1,type:"",current:""}}),Object.assign(s.view.panel,a))})},openSettingsTab(e){const n={date:new Date().toISOString(),flags:{confirmed:!0},view:{panel:{isOpen:!1,type:"",current:""}},extra:{editor:{key:"editors:settings"}},name:"Settings",path:b.SETTINGS_TAB_PATH,type:b.FileFolderType.SETTINGS,initialContent:{},content:{}};let t=e.tabs.find(a=>a.path===n.path);if(t||(e.tabs.push(n),t=e.tabs[e.tabs.length-1]),e.activeTab!==n.path){const a=e.tabs.reduce((s,i)=>(i==null?void 0:i.weight)>((s==null?void 0:s.weight)||0)?i:s,null);e.activeTab=n.path,t.weight=((a==null?void 0:a.weight)||0)+1}},addDataSource(e,n){var i;const{payload:{path:t,datasourceDef:a}}=n,s=e.tabs.find(c=>c.path===t);s&&(s.content.metadata.datasources=s.content.metadata.datasources||[],(i=s.content.metadata.datasources)!=null&&i.find(l=>l.id===a.id)||(s.content.metadata.datasources=[...s.content.metadata.datasources,{...a,events:[]}],s.flags={...s.flags,touched:!0,confirmed:!0}))},addWebformState(e,n){var i;const{payload:{path:t,stateDef:a}}=n,s=e.tabs.find(c=>c.path===t);s&&(s.content.metadata.states=s.content.metadata.states||[Fc],(i=s.content.metadata.states)!=null&&i.find(l=>l.id===a.id)||(s.content.metadata.states=[...s.content.metadata.states,a],s.flags={...s.flags,touched:!0,confirmed:!0}))},removeWebformState(e,n){const{path:t,id:a}=n.payload;e.tabs=e.tabs.map(s=>s.path===t?{...s,flags:{...s.flags,touched:!0,confirmed:!0},content:mh(s.content,a)}:s)},editWebformState(e,n){const{path:t,state:a}=n.payload;e.tabs=e.tabs.map(s=>s.path===t?{...s,flags:{...s.flags,touched:!0,confirmed:!0},content:{...s.content,metadata:{...s.content.metadata,states:s.content.metadata.states.map(i=>i.id===a.id?a:i)}}}:s)},removeDataSource(e,n){const{path:t,datasourceID:a}=n.payload;e.tabs=e.tabs.map(s=>s.path===t?{...s,flags:{...s.flags,touched:!0,confirmed:!0},content:{...s.content,metadata:{...s.content.metadata,datasources:s.content.metadata.datasources.filter(i=>i.id!==a)}}}:s)},setDataSources(e,n){const{payload:{path:t,datasourceArr:a}}=n;e.tabs=e.tabs.map(s=>{var i;return s.path===t?{...s,flags:{...s.flags,touched:!0,confirmed:!0},content:{...s.content,metadata:{...(i=s.content)==null?void 0:i.metadata,datasources:a}}}:s})},setTabs(e,n){e.tabs=n.payload},closeTab(e,n){const t=n.payload;e.tabs.splice(t,1);const a=e.tabs.reduce((s,i)=>(i==null?void 0:i.weight)>((s==null?void 0:s.weight)||0)?i:s,null);e.activeTab=(a==null?void 0:a.path)||""},closeOthers(e,n){e.tabs=e.tabs.filter(t=>t.path===n.payload),e.activeTab=n.payload},closeAllTabs(e){e.tabs=[],e.activeTab=""},closeRightTabs(e,n){e.tabs.splice(n.payload+1),e.activeTab=e.tabs[n.payload].path},closeLeftTabs(e,n){e.tabs.splice(0,n.payload)},closeSavedTabs(e){e.tabs=e.tabs.filter(({flags:{touched:t}})=>t);const n=e.tabs.reduce((t,a)=>(a==null?void 0:a.weight)>((t==null?void 0:t.weight)||0)?a:t,null);e.activeTab=(n==null?void 0:n.path)||""},confirmTab(e,n){const t=e.tabs.find(({path:a})=>a===n.payload);t&&(t.flags.confirmed||ka.caseReducers.setTabFlags(e,{type:n.type,payload:{path:n.payload,flags:{confirmed:!0}}}))},selectTab(e,n){const t=e.tabs.find(({path:s})=>s===n.payload);if(!t||e.activeTab===n.payload)return;const a=e.tabs.reduce((s,i)=>(i==null?void 0:i.weight)>((s==null?void 0:s.weight)||0)?i:s,null);t.weight=a?(a.weight||0)+1:1,e.activeTab=n.payload},openTabUnselected(e,n){const t=n.payload;let a=e.tabs.find(({path:i})=>t.path===i);a||(e.tabs.push(t),a=e.tabs[e.tabs.length-1]);const s=e.tabs.reduce((i,c)=>(c==null?void 0:c.weight)>((i==null?void 0:i.weight)||0)?c:i,null);a.weight=s?(s.weight||0)+1:1,a.extra={...a.extra,...t.extra}},selectTabByReference(e,n){const t=[b.FileFolderType.DEBUGGER],{isNew:a,...s}=n.payload;let i=s,c=e.tabs.find(({path:l})=>i.path===l);if((t.includes(i.type)||c!=null&&c.flags.confirmed)&&(i={...i,flags:{...i.flags,confirmed:!0}}),!c){const l=e.tabs.findIndex(({flags:{confirmed:d}})=>d===!1);l!==-1&&!t.includes(i.type)&&!a?e.activeTab===e.tabs[l].path?(e.tabs[l]=i,c=e.tabs[l]):(e.tabs.push(i),c=e.tabs[e.tabs.length-1],e.tabs.splice(l,1)):(e.tabs.push(i),c=e.tabs[e.tabs.length-1])}if(e.activeTab!==i.path){const l=e.tabs.reduce((d,p)=>(p==null?void 0:p.weight)>((d==null?void 0:d.weight)||0)?p:d,null);e.activeTab=i.path,c.weight=((l==null?void 0:l.weight)||0)+1}c.extra={...c.extra,...i.extra},c.flags={...c.flags||{},...i.flags||{}}},setContent(e,n){const{path:t,content:a,contentPath:s}=n.payload;e.tabs=e.tabs.map(i=>{if(i.path!==t)return i;let c=!1,l=i.flags.confirmed;if(typeof a=="string")c=i.initialContent!==a,l=!l&&c?!0:l;else{const d=JSON.stringify(He.get(i.initialContent,s||"",i.initialContent)),p=JSON.stringify(He.get(a,s||"",a));c=d!==p,l=!l&&c?!0:l}return a&&typeof a=="object"&&(s?He.set(i.content,s,a):i.content=a),typeof a=="string"&&(i.content=a),{...i,flags:{...i.flags,touched:c,confirmed:l}}})},setTabFlags(e,n){const{path:t,flags:a}=n.payload;e.tabs=e.tabs.map(s=>s.path===t?{...s,flags:{...s.flags,...a}}:s)},setTabsFlags(e,n){const{tabs:t,flags:a}=n.payload;e.tabs=e.tabs.map(s=>t.includes(s.path)?{...s,flags:{...s.flags,...a}}:s)},setTabExtra(e,n){const{path:t,extra:a,flags:s}=n.payload;e.tabs=e.tabs.map(i=>i.path===t?{...i,extra:{...i.extra,...a},flags:s?{...i.flags,...s}:i.flags}:i)},addWebFormStyles(e,n){const{path:t,styles:a=[]}=n.payload,s=e.tabs.find(i=>i.path===t);if(s){const i=s.content.metadata.styles.map(({name:l})=>l),c=a.filter(({name:l})=>!i.includes(l));s.content.metadata.styles=[...s.content.metadata.styles,...c].map(({scope:l,...d})=>({...d}))}},changeTabEditor(e,n){return e.tabs=e.tabs.map(t=>t.path===n.payload.path?n.payload:t),e}},extraReducers:e=>{e.addCase(ac,(n,t)=>{if(t.payload.settingsKey==="studio.enablePreview"&&t.payload.value===!1){const a=n.tabs.find(({flags:{confirmed:s}})=>s===!1);a&&ka.caseReducers.setTabFlags(n,{type:"",payload:{path:a.path,flags:{confirmed:!0}}})}}),e.addCase(Yg.fulfilled,(n,t)=>{if(!t.payload)return;const{content:a,line:s,path:i}=t.payload,c=n.tabs.find(l=>l.path===i);if(c&&typeof c.content=="string"){const l=c.content.trim().split(`
100
100
  `);l.splice(s,0,a),c.content=l.join(`
101
101
  `)}}),e.addCase(Yn.pending,(n,t)=>{const{tab:a}=t.meta.arg;switch(a.type){case b.FileFolderType.CLASS:case b.FileFolderType.METHOD:b.lspSubject.next({action:b.LspActions.WILL_SAVE,payload:{filePath:a.path}});break}}),e.addCase(Yn.fulfilled,(n,t)=>{if(!t.payload)return;const a=n.tabs.find(({path:s})=>{var i;return s===((i=t.payload)==null?void 0:i.path)});if(a){switch(a.content=t.payload.content,a.date=t.payload.date,a.initialContent=t.payload.initialContent,a.flags.touched=!1,a.flags.confirmed=!0,a.flags.old=!1,a.type){case b.FileFolderType.CLASS:case b.FileFolderType.METHOD:b.lspSubject.next({action:b.LspActions.DID_SAVE,payload:{filePath:a.path,content:a.content}});break}t.payload.errors.length>0&&b.toastSubject.next({kind:"error",message:t.payload.errors})}}),e.addCase(Yn.rejected,(n,t)=>{b.toastSubject.next({kind:"danger",message:"Cannot save file"})}),e.addCase(Vg.fulfilled,(n,t)=>{const a=[...t.payload.files];n.tabs=n.tabs.map(s=>{if([b.FileFolderType.CLASS,b.FileFolderType.METHOD].includes(s.type)){const i=a.find(c=>c.name===s.name&&c.type===s.type);if(i){const c=new Date(s.date),l=new Date(i.date);if(c.getTime()!==l.getTime())return{...s,flags:{...s.flags,old:!0}}}}return s})}),e.addCase(cc.pending,(n,t)=>{n.tabs=n.tabs.map(a=>a.path===t.meta.arg.path?{...a,flags:{...a.flags,loading:!0}}:a)}),e.addCase(cc.fulfilled,(n,t)=>{const a=t.payload;if(a){const s=t.meta.arg;n.tabs=n.tabs.map(i=>{if(i.name===s.name&&i.type===s.type){const c=i.extra||{};return i.type===b.FileFolderType.METHOD?(c.attributes=b.parseAttributes(a.content),a.content=b.addAttributesToContent(a.content,{})):i.type===b.FileFolderType.SETTINGS&&(a.content={}),{...i,initialContent:a.content,content:a.content,date:a.date,flags:{enabled:i.flags.enabled,confirmed:i.flags.confirmed},extra:c}}return i})}}),e.addCase(Gc.fulfilled,(n,t)=>{if(!t.payload)return;const{line:a,offset:s}=t.meta.arg,i=n.tabs.find(({path:c})=>{var l;return c===((l=t.payload)==null?void 0:l.path)});i&&(i.extra={...i.extra,initialLineInfo:{line:a,offset:s,lastModification:Date.now()}})}),e.addCase(zg.fulfilled,(n,t)=>{if(!t.payload)return;const{selection:a}=t.meta.arg,s=n.tabs.find(({path:i})=>{var c;return i===((c=t.payload)==null?void 0:c.path)});s&&(s.extra={...s.extra,initialSelectionInfo:{selection:a,lastModification:Date.now()}})}),e.addCase(qn.fulfilled,(n,t)=>{t.payload.new!==t.payload.old&&(n.tabs=[...n.tabs].map(a=>a.path===t.payload.old.path?{...a,path:t.payload.new.path,name:t.payload.new.name}:a),n.activeTab===t.payload.old.path&&(n.activeTab=t.payload.new.path))}),e.addCase(uc.pending,(n,t)=>{const a=t.meta.arg,s=`${a.path}${a.ext?`.${a.ext}`:""}`;switch(a.ext){case"4dm":case"4qs":b.lspSubject.next({action:b.LspActions.WILL_DELETE,payload:{filePath:s}});break}}),e.addCase(uc.fulfilled,(n,t)=>{const{deleted:a,node:s}=t.payload;if(!a)return;const i=`${s.path}${s.ext?`.${s.ext}`:""}`;switch(s.ext){case"4dm":case"4qs":b.lspSubject.next({action:b.LspActions.DID_DELETE,payload:{filePath:i}});break}if(n.tabs=n.tabs.filter(c=>c.path!==i),n.recent=n.recent.filter(({path:c})=>i!==c),n.tabs.length){n.activeTab=n.tabs[n.tabs.length-1].path;return}n.activeTab=""}),e.addCase(Da.fulfilled,(n,t)=>{const{draggedNode:a,newLocation:s}=t.meta.arg;if(n.tabs.find(i=>i.path===`${a.path}${a.ext?`.${a.ext}`:""}`))return n.tabs=n.tabs.map(i=>i.path===`${a.path}${a.ext?`.${a.ext}`:""}`?{...i,path:`${s.path}/${a.name}.${a.ext}`}:i),n.recent=n.recent.map(i=>i.path===`${a.path}${a.ext?`.${a.ext}`:""}`?{...i,path:`${s.path}/${a.name}.${a.ext}`}:i),n.activeTab=`${s.path}/${a.name}.${a.ext}`,n}),e.addCase(ms.fulfilled,(n,t)=>{const a=n.tabs.find(s=>s.path===t.payload.path);a&&(a.flags.touched=!1,a.flags.confirmed=!0,a.date=t.payload.date,a.content=t.payload.content,a.initialContent=t.payload.content)}),e.addCase(Kg.fulfilled,(n,t)=>{var i;if(!((i=t.payload)!=null&&i.path))return;const a=n.tabs.find(b.by("path",t.payload.path));if(!a)return;a.content=a.content+`
102
102
  exposed Function ${t.meta.arg.name}()