From f1f265894ef577c729b2b368dc61eb0342beee19 Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Mon, 10 Jun 2024 16:08:50 +0200 Subject: [PATCH 1/2] fix(settings): Use axios directly for health check to preven URL sanitizing When using Apache with `DirectorySlash` it will respond with 301 and the URL with trailing slash. But when using traefik as the reverse proxy it can not rewrite redirects, this leads to the problem that the Apache response is using HTTP in the redirect but the real server (traefik) is only listening on HTTPS. Signed-off-by: Ferdinand Thiessen --- apps/settings/src/store/apps.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/settings/src/store/apps.js b/apps/settings/src/store/apps.js index ed5a724537111..75871623b43bf 100644 --- a/apps/settings/src/store/apps.js +++ b/apps/settings/src/store/apps.js @@ -5,6 +5,7 @@ import api from './api.js' import Vue from 'vue' +import axios from '@nextcloud/axios' import { generateUrl } from '@nextcloud/router' import { showError, showInfo } from '@nextcloud/dialogs' import { loadState } from '@nextcloud/initial-state' @@ -178,7 +179,7 @@ const actions = { }) // check for server health - return api.get(generateUrl('apps/files/')) + return axios.get(generateUrl('apps/files/')) .then(() => { if (response.data.update_required) { showInfo( From a81768108bcd9785aa96aa97f785a4b9c9413111 Mon Sep 17 00:00:00 2001 From: nextcloud-command Date: Mon, 10 Jun 2024 19:31:02 +0000 Subject: [PATCH 2/2] chore(assets): Recompile assets Signed-off-by: nextcloud-command --- dist/settings-vue-settings-apps-users-management.js | 4 ++-- dist/settings-vue-settings-apps-users-management.js.map | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/settings-vue-settings-apps-users-management.js b/dist/settings-vue-settings-apps-users-management.js index aa7a6bcb05883..3b83f5270a733 100644 --- a/dist/settings-vue-settings-apps-users-management.js +++ b/dist/settings-vue-settings-apps-users-management.js @@ -1,2 +1,2 @@ -(()=>{var e,s,r,i={31755:(e,s,r)=>{"use strict";r.d(s,{P:()=>X});var i=r(85471),o=r(95353),n=r(59097),a=r(87485),d=r(35810),c=r(85168),u=r(63814),p=r(65043),l=r(15916),m=r(56760);r(51257);const h=function(t){return t.replace(/\/$/,"")},g=()=>(0,m.C)(),f=(t,e)=>p.Ay.get(h(t),e),E=(t,e)=>p.Ay.post(h(t),e),A=(t,e)=>p.Ay.put(h(t),e),I=(t,e)=>p.Ay.delete(h(t),{params:e});var b=r(36620),N=r(96763);const y=(0,n.c0)("settings").persist(!0).build(),L={id:"",name:"",usercount:0,disabled:0,canAdd:!0,canRemove:!0},v={users:[],groups:[],orderBy:l.q.UserCount,minPasswordLength:0,usersOffset:0,usersLimit:25,disabledUsersOffset:0,disabledUsersLimit:25,userCount:0,showConfig:{showStoragePath:"true"===y.getItem("account_settings__showStoragePath"),showUserBackend:"true"===y.getItem("account_settings__showUserBackend"),showLastLogin:"true"===y.getItem("account_settings__showLastLogin"),showNewUserForm:"true"===y.getItem("account_settings__showNewUserForm"),showLanguages:"true"===y.getItem("account_settings__showLanguages")}},R={appendUsers(t,e){const s=t.users.map((t=>{let{id:e}=t;return e})),r=Object.values(e).filter((t=>{let{id:e}=t;return!s.includes(e)})),i=t.users.concat(r);t.usersOffset+=t.usersLimit,t.users=i},updateDisabledUsers(t,e){t.disabledUsersOffset+=t.disabledUsersLimit},setPasswordPolicyMinLength(t,e){t.minPasswordLength=""!==e?e:0},initGroups(t,e){let{groups:s,orderBy:r,userCount:i}=e;t.groups=s.map((t=>Object.assign({},L,t))),t.orderBy=r,t.userCount=i},addGroup(t,e){let{gid:s,displayName:r}=e;try{if(void 0!==t.groups.find((t=>t.id===s)))return;const e=Object.assign({},L,{id:s,name:r});t.groups.unshift(e)}catch(t){N.error("Can't create group",t)}},renameGroup(t,e){let{gid:s,displayName:r}=e;const i=t.groups.findIndex((t=>t.id===s));if(i>=0){const e=t.groups[i];e.name=r,t.groups.splice(i,1,e)}},removeGroup(t,e){const s=t.groups.findIndex((t=>t.id===e));s>=0&&t.groups.splice(s,1)},addUserGroup(t,e){let{userid:s,gid:r}=e;const i=t.groups.find((t=>t.id===r)),o=t.users.find((t=>t.id===s));i&&o.enabled&&t.userCount>0&&i.usercount++,o.groups.push(r)},removeUserGroup(t,e){let{userid:s,gid:r}=e;const i=t.groups.find((t=>t.id===r)),o=t.users.find((t=>t.id===s));i&&o.enabled&&t.userCount>0&&i.usercount--;const n=o.groups;n.splice(n.indexOf(r),1)},addUserSubAdmin(t,e){let{userid:s,gid:r}=e;t.users.find((t=>t.id===s)).subadmin.push(r)},removeUserSubAdmin(t,e){let{userid:s,gid:r}=e;const i=t.users.find((t=>t.id===s)).subadmin;i.splice(i.indexOf(r),1)},deleteUser(t,e){const s=t.users.findIndex((t=>t.id===e));this.commit("updateUserCounts",{user:t.users[s],actionType:"remove"}),t.users.splice(s,1)},addUserData(t,e){const s=e.data.ocs.data;t.users.unshift(s),this.commit("updateUserCounts",{user:s,actionType:"create"})},enableDisableUser(t,e){let{userid:s,enabled:r}=e;const i=t.users.find((t=>t.id===s));i.enabled=r,this.commit("updateUserCounts",{user:i,actionType:r?"enable":"disable"})},updateUserCounts(t,e){let{user:s,actionType:r}=e;if(0===t.userCount)return;const i=t.groups.find((t=>"__nc_internal_recent"===t.id)),o=t.groups.find((t=>"disabled"===t.id));switch(r){case"enable":case"disable":o.usercount+=s.enabled?-1:1,i.usercount+=s.enabled?1:-1,t.userCount+=s.enabled?1:-1,s.groups.forEach((e=>{t.groups.find((t=>t.id===e)).disabled+=s.enabled?-1:1}));break;case"create":i.usercount++,t.userCount++,s.groups.forEach((e=>{t.groups.find((t=>t.id===e)).usercount++}));break;case"remove":s.enabled?(i.usercount--,t.userCount--,s.groups.forEach((e=>{const s=t.groups.find((t=>t.id===e));s?s.usercount--:N.warn("User group "+e+" does not exist during user removal")}))):(o.usercount--,s.groups.forEach((e=>{t.groups.find((t=>t.id===e)).disabled--})));break;default:b.A.error(`Unknown action type in updateUserCounts: '${r}'`)}},setUserData(t,e){let{userid:s,key:r,value:i}=e;if("quota"===r){const e=(0,d.lT)(i,!0);t.users.find((t=>t.id===s))[r][r]=null!==e?e:i}else t.users.find((t=>t.id===s))[r]=i},resetUsers(t){t.users=[],t.usersOffset=0,t.disabledUsersOffset=0},setShowConfig(t,e){let{key:s,value:r}=e;y.setItem(`account_settings__${s}`,JSON.stringify(r)),t.showConfig[s]=r},setGroupSorting(e,s){const r=e.orderBy;e.orderBy=s,p.Ay.post((0,u.Jv)("/settings/users/preferences/group.sortBy"),{value:String(s)}).catch((s=>{e.orderBy=r,(0,c.Qg)(t("settings","Could not set group sorting")),b.A.error(s)}))}},w={getUsers:t=>t.users,getGroups:t=>t.groups,getSubadminGroups:t=>t.groups.filter((t=>"admin"!==t.id&&"__nc_internal_recent"!==t.id&&"disabled"!==t.id)),getSortedGroups(t){const e=[...t.groups];return t.orderBy===l.q.UserCount?e.sort(((t,e)=>{const s=t.usercount-t.disabled,r=e.usercount-e.disabled;return st.name.localeCompare(e.name)))},getGroupSorting:t=>t.orderBy,getPasswordPolicyMinLength:t=>t.minPasswordLength,getUsersOffset:t=>t.usersOffset,getUsersLimit:t=>t.usersLimit,getDisabledUsersOffset:t=>t.disabledUsersOffset,getDisabledUsersLimit:t=>t.disabledUsersLimit,getUserCount:t=>t.userCount,getShowConfig:t=>t.showConfig},O=p.Ay.CancelToken;let P=null;const _={state:v,mutations:R,getters:w,actions:{searchUsers(t,e){let{offset:s,limit:r,search:i}=e;return i="string"==typeof i?i:"",f((0,u.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:s,limit:r,search:i})).catch((e=>{p.Ay.isCancel(e)||t.commit("API_FAILURE",e)}))},getUser:(t,e)=>f((0,u.KT)(`cloud/users/${e}`)).catch((e=>{p.Ay.isCancel(e)||t.commit("API_FAILURE",e)})),getUsers(t,e){let{offset:s,limit:r,search:i,group:o}=e;return P&&P.cancel("Operation canceled by another search request."),P=O.source(),i="string"==typeof i?i:"",i=i.replace(/in:[^\s]+/g,"").trim(),o="string"==typeof o?o:"",""!==o?f((0,u.KT)("cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}",{group:encodeURIComponent(o),offset:s,limit:r,search:i}),{cancelToken:P.token}).then((e=>{const s=Object.keys(e.data.ocs.data.users).length;return s>0&&t.commit("appendUsers",e.data.ocs.data.users),s})).catch((e=>{p.Ay.isCancel(e)||t.commit("API_FAILURE",e)})):f((0,u.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:s,limit:r,search:i}),{cancelToken:P.token}).then((e=>{const s=Object.keys(e.data.ocs.data.users).length;return s>0&&t.commit("appendUsers",e.data.ocs.data.users),s})).catch((e=>{p.Ay.isCancel(e)||t.commit("API_FAILURE",e)}))},async getRecentUsers(t,e){let{offset:s,limit:r,search:i}=e;const o=(0,u.KT)("cloud/users/recent?offset={offset}&limit={limit}&search={search}",{offset:s,limit:r,search:i});try{const e=await f(o),s=Object.keys(e.data.ocs.data.users).length;return s>0&&t.commit("appendUsers",e.data.ocs.data.users),s}catch(e){t.commit("API_FAILURE",e)}},async getDisabledUsers(t,e){let{offset:s,limit:r,search:i}=e;const o=(0,u.KT)("cloud/users/disabled?offset={offset}&limit={limit}&search={search}",{offset:s,limit:r,search:i});try{const e=await f(o),s=Object.keys(e.data.ocs.data.users).length;return s>0&&(t.commit("appendUsers",e.data.ocs.data.users),t.commit("updateDisabledUsers",e.data.ocs.data.users)),s}catch(e){t.commit("API_FAILURE",e)}},getGroups(t,e){let{offset:s,limit:r,search:i}=e;i="string"==typeof i?i:"";const o=-1===r?"":`&limit=${r}`;return f((0,u.KT)("cloud/groups?offset={offset}&search={search}",{offset:s,search:i})+o).then((e=>Object.keys(e.data.ocs.data.groups).length>0&&(e.data.ocs.data.groups.forEach((function(e){t.commit("addGroup",{gid:e,displayName:e})})),!0))).catch((e=>t.commit("API_FAILURE",e)))},getUsersFromList(t,e){let{offset:s,limit:r,search:i}=e;return i="string"==typeof i?i:"",f((0,u.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:s,limit:r,search:i})).then((e=>Object.keys(e.data.ocs.data.users).length>0&&(t.commit("appendUsers",e.data.ocs.data.users),!0))).catch((e=>t.commit("API_FAILURE",e)))},getUsersFromGroup(t,e){let{groupid:s,offset:r,limit:i}=e;return f((0,u.KT)("cloud/users/{groupId}/details?offset={offset}&limit={limit}",{groupId:encodeURIComponent(s),offset:r,limit:i})).then((e=>t.commit("getUsersFromList",e.data.ocs.data.users))).catch((e=>t.commit("API_FAILURE",e)))},getPasswordPolicyMinLength:t=>!(!(0,a.F)().password_policy||!(0,a.F)().password_policy.minLength)&&(t.commit("setPasswordPolicyMinLength",(0,a.F)().password_policy.minLength),(0,a.F)().password_policy.minLength),addGroup:(t,e)=>g().then((s=>E((0,u.KT)("cloud/groups"),{groupid:e}).then((s=>(t.commit("addGroup",{gid:e,displayName:e}),{gid:e,displayName:e}))).catch((t=>{throw t})))).catch((s=>{throw t.commit("API_FAILURE",{gid:e,error:s}),s})),renameGroup(t,e){let{groupid:s,displayName:r}=e;return g().then((e=>A((0,u.KT)("cloud/groups/{groupId}",{groupId:encodeURIComponent(s)}),{key:"displayname",value:r}).then((e=>(t.commit("renameGroup",{gid:s,displayName:r}),{groupid:s,displayName:r}))).catch((t=>{throw t})))).catch((e=>{throw t.commit("API_FAILURE",{groupid:s,error:e}),e}))},removeGroup:(t,e)=>g().then((s=>I((0,u.KT)("cloud/groups/{groupId}",{groupId:encodeURIComponent(e)})).then((s=>t.commit("removeGroup",e))).catch((t=>{throw t})))).catch((s=>t.commit("API_FAILURE",{gid:e,error:s}))),addUserGroup(t,e){let{userid:s,gid:r}=e;return g().then((e=>E((0,u.KT)("cloud/users/{userid}/groups",{userid:s}),{groupid:r}).then((e=>t.commit("addUserGroup",{userid:s,gid:r}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:s,error:e})))},removeUserGroup(t,e){let{userid:s,gid:r}=e;return g().then((e=>I((0,u.KT)("cloud/users/{userid}/groups",{userid:s}),{groupid:r}).then((e=>t.commit("removeUserGroup",{userid:s,gid:r}))).catch((t=>{throw t})))).catch((e=>{throw t.commit("API_FAILURE",{userid:s,error:e}),e}))},addUserSubAdmin(t,e){let{userid:s,gid:r}=e;return g().then((e=>E((0,u.KT)("cloud/users/{userid}/subadmins",{userid:s}),{groupid:r}).then((e=>t.commit("addUserSubAdmin",{userid:s,gid:r}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:s,error:e})))},removeUserSubAdmin(t,e){let{userid:s,gid:r}=e;return g().then((e=>I((0,u.KT)("cloud/users/{userid}/subadmins",{userid:s}),{groupid:r}).then((e=>t.commit("removeUserSubAdmin",{userid:s,gid:r}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:s,error:e})))},async wipeUserDevices(t,e){try{return await g(),await E((0,u.KT)("cloud/users/{userid}/wipe",{userid:e}))}catch(s){return t.commit("API_FAILURE",{userid:e,error:s}),Promise.reject(new Error("Failed to wipe user devices"))}},deleteUser:(t,e)=>g().then((s=>I((0,u.KT)("cloud/users/{userid}",{userid:e})).then((s=>t.commit("deleteUser",e))).catch((t=>{throw t})))).catch((s=>t.commit("API_FAILURE",{userid:e,error:s}))),addUser(t,e){let{commit:s,dispatch:r}=t,{userid:i,password:o,displayName:n,email:a,groups:d,subadmin:c,quota:p,language:l,manager:m}=e;return g().then((t=>E((0,u.KT)("cloud/users"),{userid:i,password:o,displayName:n,email:a,groups:d,subadmin:c,quota:p,language:l,manager:m}).then((t=>r("addUserData",i||t.data.ocs.data.id))).catch((t=>{throw t})))).catch((t=>{throw s("API_FAILURE",{userid:i,error:t}),t}))},addUserData:(t,e)=>g().then((s=>f((0,u.KT)("cloud/users/{userid}",{userid:e})).then((e=>t.commit("addUserData",e))).catch((t=>{throw t})))).catch((s=>t.commit("API_FAILURE",{userid:e,error:s}))),enableDisableUser(t,e){let{userid:s,enabled:r=!0}=e;const i=r?"enable":"disable";return g().then((e=>A((0,u.KT)("cloud/users/{userid}/{userStatus}",{userid:s,userStatus:i})).then((e=>t.commit("enableDisableUser",{userid:s,enabled:r}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:s,error:e})))},async setUserData(t,e){let{userid:s,key:r,value:i}=e;const o=["email","displayname","manager"];if(-1!==["email","language","quota","displayname","password","manager"].indexOf(r)&&"string"==typeof i&&(-1===o.indexOf(r)&&i.length>0||-1!==o.indexOf(r)))try{return await g(),await A((0,u.KT)("cloud/users/{userid}",{userid:s}),{key:r,value:i}),t.commit("setUserData",{userid:s,key:r,value:i})}catch(e){t.commit("API_FAILURE",{userid:s,error:e})}return Promise.reject(new Error("Invalid request data"))},sendWelcomeMail:(t,e)=>g().then((t=>E((0,u.KT)("cloud/users/{userid}/welcome",{userid:e})).then((t=>!0)).catch((t=>{throw t})))).catch((s=>t.commit("API_FAILURE",{userid:e,error:s})))}};var U=r(32981),T=r(96763);const C={apps:[],bundles:(0,U.C)("settings","appstoreBundles",[]),categories:[],updateCount:(0,U.C)("settings","appstoreUpdateCount",0),loading:{},gettingCategoriesPromise:null},$={APPS_API_FAILURE(e,s){(0,c.Qg)(t("settings","An error occurred during the request. Unable to proceed.")+"
"+s.error.response.data.data.message,{isHTML:!0}),T.error(e,s)},initCategories(t,e){let{categories:s,updateCount:r}=e;t.categories=s,t.updateCount=r},updateCategories(t,e){t.gettingCategoriesPromise=e},setUpdateCount(t,e){t.updateCount=e},addCategory(t,e){t.categories.push(e)},appendCategories(t,e){t.categories=e},setAllApps(t,e){t.apps=e},setError(t,e){let{appId:s,error:r}=e;Array.isArray(s)||(s=[s]),s.forEach((e=>{t.apps.find((t=>t.id===e)).error=r}))},clearError(t,e){let{appId:s,error:r}=e;t.apps.find((t=>t.id===s)).error=null},enableApp(t,e){let{appId:s,groups:r}=e;const i=t.apps.find((t=>t.id===s));i.active=!0,i.groups=r},setInstallState(t,e){let{appId:s,canInstall:r}=e;const i=t.apps.find((t=>t.id===s));i&&(i.canInstall=!0===r)},disableApp(t,e){const s=t.apps.find((t=>t.id===e));s.active=!1,s.groups=[],s.removable&&(s.canUnInstall=!0)},uninstallApp(t,e){t.apps.find((t=>t.id===e)).active=!1,t.apps.find((t=>t.id===e)).groups=[],t.apps.find((t=>t.id===e)).needsDownload=!0,t.apps.find((t=>t.id===e)).installed=!1,t.apps.find((t=>t.id===e)).canUnInstall=!1,t.apps.find((t=>t.id===e)).canInstall=!0},updateApp(t,e){const s=t.apps.find((t=>t.id===e)),r=s.update;s.update=null,s.version=r,t.updateCount--},resetApps(t){t.apps=[]},reset(t){t.apps=[],t.categories=[],t.updateCount=0},startLoading(t,e){Array.isArray(e)?e.forEach((e=>{i.Ay.set(t.loading,e,!0)})):i.Ay.set(t.loading,e,!0)},stopLoading(t,e){Array.isArray(e)?e.forEach((e=>{i.Ay.set(t.loading,e,!1)})):i.Ay.set(t.loading,e,!1)}},F={enableApp(e,s){let r,{appId:i,groups:o}=s;return r=Array.isArray(i)?i:[i],g().then((s=>(e.commit("startLoading",r),e.commit("startLoading","install"),E((0,u.Jv)("settings/apps/enable"),{appIds:r,groups:o}).then((s=>(e.commit("stopLoading",r),e.commit("stopLoading","install"),r.forEach((t=>{e.commit("enableApp",{appId:t,groups:o})})),f((0,u.Jv)("apps/files/")).then((()=>{s.data.update_required&&((0,c.cf)(t("settings","The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds."),{onClick:()=>window.location.reload(),close:!1}),setTimeout((function(){location.reload()}),5e3))})).catch((()=>{Array.isArray(i)||((0,c.Qg)(t("settings","Error: This app cannot be enabled because it makes the server unstable")),e.commit("setError",{appId:r,error:t("settings","Error: This app cannot be enabled because it makes the server unstable")}),e.dispatch("disableApp",{appId:i}))}))))).catch((t=>{e.commit("stopLoading",r),e.commit("stopLoading","install"),e.commit("setError",{appId:r,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:i,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:i,error:t})))},forceEnableApp(t,e){let s,{appId:r,groups:i}=e;return s=Array.isArray(r)?r:[r],g().then((()=>(t.commit("startLoading",s),t.commit("startLoading","install"),E((0,u.Jv)("settings/apps/force"),{appId:r}).then((e=>{t.commit("setInstallState",{appId:r,canInstall:!0})})).catch((e=>{t.commit("stopLoading",s),t.commit("stopLoading","install"),t.commit("setError",{appId:s,error:e.response.data.data.message}),t.commit("APPS_API_FAILURE",{appId:r,error:e})})).finally((()=>{t.commit("stopLoading",s),t.commit("stopLoading","install")}))))).catch((e=>t.commit("API_FAILURE",{appId:r,error:e})))},disableApp(t,e){let s,{appId:r}=e;return s=Array.isArray(r)?r:[r],g().then((e=>(t.commit("startLoading",s),E((0,u.Jv)("settings/apps/disable"),{appIds:s}).then((e=>(t.commit("stopLoading",s),s.forEach((e=>{t.commit("disableApp",e)})),!0))).catch((e=>{t.commit("stopLoading",s),t.commit("APPS_API_FAILURE",{appId:r,error:e})}))))).catch((e=>t.commit("API_FAILURE",{appId:r,error:e})))},uninstallApp(t,e){let{appId:s}=e;return g().then((e=>(t.commit("startLoading",s),f((0,u.Jv)(`settings/apps/uninstall/${s}`)).then((e=>(t.commit("stopLoading",s),t.commit("uninstallApp",s),!0))).catch((e=>{t.commit("stopLoading",s),t.commit("APPS_API_FAILURE",{appId:s,error:e})}))))).catch((e=>t.commit("API_FAILURE",{appId:s,error:e})))},updateApp(t,e){let{appId:s}=e;return g().then((e=>(t.commit("startLoading",s),t.commit("startLoading","install"),f((0,u.Jv)(`settings/apps/update/${s}`)).then((e=>(t.commit("stopLoading","install"),t.commit("stopLoading",s),t.commit("updateApp",s),!0))).catch((e=>{t.commit("stopLoading",s),t.commit("stopLoading","install"),t.commit("APPS_API_FAILURE",{appId:s,error:e})}))))).catch((e=>t.commit("API_FAILURE",{appId:s,error:e})))},getAllApps:t=>(t.commit("startLoading","list"),f((0,u.Jv)("settings/apps/list")).then((e=>(t.commit("setAllApps",e.data.apps),t.commit("stopLoading","list"),!0))).catch((e=>t.commit("API_FAILURE",e)))),async getCategories(t){let{shouldRefetchCategories:e=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(e||!t.state.gettingCategoriesPromise){t.commit("startLoading","categories");try{const e=f((0,u.Jv)("settings/apps/categories"));t.commit("updateCategories",e);const s=await e;return s.data.length>0?(t.commit("appendCategories",s.data),t.commit("stopLoading","categories"),!0):(t.commit("stopLoading","categories"),!1)}catch(e){t.commit("API_FAILURE",e)}}return t.state.gettingCategoriesPromise}},S={state:C,mutations:$,getters:{loading:t=>function(e){return t.loading[e]},getCategories:t=>t.categories,getAllApps:t=>t.apps,getAppBundles:t=>t.bundles,getUpdateCount:t=>t.updateCount,getCategoryById:t=>e=>t.categories.find((t=>t.id===e))},actions:F},x={serverData:(0,U.C)("settings","usersSettings",{})},D={setServerData(t,e){t.serverData=e}},G={state:x,mutations:D,getters:{getServerData:t=>t.serverData},actions:{}},M={state:{},mutations:{},getters:{},actions:{setAppConfig(t,e){let{app:s,key:r,value:i}=e;return g().then((t=>E((0,u.KT)("apps/provisioning_api/api/v1/config/apps/{app}/{key}",{app:s,key:r}),{value:i}).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{app:s,key:r,value:i,error:e})))}}};var j=r(96763);i.Ay.use(o.Ay);const k={API_FAILURE(e,s){try{const e=s.error.response.data.ocs.meta.message;(0,c.Qg)(t("settings","An error occurred during the request. Unable to proceed.")+"
"+e,{isHTML:!0})}catch(e){(0,c.Qg)(t("settings","An error occurred during the request. Unable to proceed."))}j.error(e,s)}};let B=null;const X=()=>(null===B&&(B=new o.il({modules:{users:_,apps:S,settings:G,oc:M},strict:!1,mutations:k})),B)},15916:(t,e,s)=>{"use strict";var r;s.d(e,{q:()=>r}),function(t){t[t.UserCount=1]="UserCount",t[t.GroupName=2]="GroupName"}(r||(r={}))},36620:(t,e,s)=>{"use strict";s.d(e,{A:()=>r});const r=(0,s(35947).YK)().setApp("settings").detectUser().build()},18539:(t,e,s)=>{"use strict";var r=s(85471),i=s(80284),o=s(58723),n=s(53334),a=s(22378);const d=(0,r.pM)({__name:"SettingsApp",setup:t=>({__sfc:!0,NcContent:a.A})}),c=(0,s(14486).A)(d,(function(){var t=this,e=t._self._c;return e(t._self._setupProxy.NcContent,{attrs:{"app-name":"settings"}},[e("router-view",{attrs:{name:"navigation"}}),t._v(" "),e("router-view"),t._v(" "),e("router-view",{attrs:{name:"sidebar"}})],1)}),[],!1,null,null,null).exports;var u=s(40173),p=s(63814);const l=[{name:"users",path:"/:index(index.php/)?settings/users",components:{default:()=>Promise.all([s.e(4208),s.e(7265),s.e(3239)]).then(s.bind(s,70094)),navigation:()=>Promise.all([s.e(4208),s.e(7265),s.e(3239)]).then(s.bind(s,39603))},props:!0,children:[{path:":selectedGroup",name:"group"}]},{path:"/:index(index.php/)?settings/apps",name:"apps",redirect:{name:"apps-category",params:{category:(0,s(32981).C)("settings","appstoreEnabled",!0)?"discover":"installed"}},components:{default:()=>Promise.all([s.e(4208),s.e(7265),s.e(4529)]).then(s.bind(s,54989)),navigation:()=>Promise.all([s.e(4208),s.e(7265),s.e(4529)]).then(s.bind(s,1615)),sidebar:()=>Promise.all([s.e(4208),s.e(7265),s.e(4529)]).then(s.bind(s,43469))},children:[{path:":category",name:"apps-category",children:[{path:":id",name:"apps-details"}]}]}];r.Ay.use(u.Ay);const m=new u.Ay({mode:"history",base:(0,p.Jv)(""),linkActiveClass:"active",routes:l});var h=s(31755),g=s(21777),f=s(65899);r.Ay.use(i.Ay,{defaultHtml:!1});const E=(0,h.P)();(0,o.O)(E,m),s.nc=(0,g.aV)(),r.Ay.prototype.t=n.Tl,r.Ay.prototype.n=n.zw,r.Ay.use(f.R2);const A=(0,f.Ey)();new r.Ay({router:m,store:E,pinia:A,render:t=>t(c),el:"#content"})},58723:(t,e)=>{function s(t,e){var r={name:t.name,path:t.path,hash:t.hash,query:t.query,params:t.params,fullPath:t.fullPath,meta:t.meta};return e&&(r.from=s(e)),Object.freeze(r)}e.O=function(t,e,r){var i=(r||{}).moduleName||"route";t.registerModule(i,{namespaced:!0,state:s(e.currentRoute),mutations:{ROUTE_CHANGED:function(e,r){t.state[i]=s(r.to,r.from)}}});var o,n=!1,a=t.watch((function(t){return t[i]}),(function(t){var s=t.fullPath;s!==o&&(null!=o&&(n=!0,e.push(t)),o=s)}),{sync:!0}),d=e.afterEach((function(e,s){n?n=!1:(o=e.fullPath,t.commit(i+"/ROUTE_CHANGED",{to:e,from:s}))}));return function(){null!=d&&d(),null!=a&&a(),t.unregisterModule(i)}}},35810:(t,e,s)=>{"use strict";s.d(e,{Al:()=>F,H4:()=>C,Q$:()=>$,R3:()=>y,VL:()=>N,lJ:()=>U,lT:()=>G,pt:()=>L,ur:()=>j,v7:()=>D});var r=s(35947),i=s(21777),o=s(43627),n=s(71225),a=s(63814),d=s(36117),c=s(44719),u=s(82680),p=(s(87485),s(53334)),l=s(380),m=s(65606),h=s(96763);const g=(0,r.YK)().setApp("@nextcloud/files").detectUser().build();var f=(t=>(t[t.NONE=0]="NONE",t[t.CREATE=4]="CREATE",t[t.READ=1]="READ",t[t.UPDATE=2]="UPDATE",t[t.DELETE=8]="DELETE",t[t.SHARE=16]="SHARE",t[t.ALL=31]="ALL",t))(f||{});const E=["d:getcontentlength","d:getcontenttype","d:getetag","d:getlastmodified","d:creationdate","d:displayname","d:quota-available-bytes","d:resourcetype","nc:has-preview","nc:is-encrypted","nc:mount-type","oc:comments-unread","oc:favorite","oc:fileid","oc:owner-display-name","oc:owner-id","oc:permissions","oc:size"],A={d:"DAV:",nc:"http://nextcloud.org/ns",oc:"http://owncloud.org/ns",ocs:"http://open-collaboration-services.org/ns"},I=function(){return void 0===window._nc_dav_properties&&(window._nc_dav_properties=[...E]),window._nc_dav_properties.map((t=>`<${t} />`)).join(" ")},b=function(){return void 0===window._nc_dav_namespaces&&(window._nc_dav_namespaces={...A}),Object.keys(window._nc_dav_namespaces).map((t=>`xmlns:${t}="${window._nc_dav_namespaces?.[t]}"`)).join(" ")},N=function(){return`\n\t\t\n\t\t\t\n\t\t\t\t${I()}\n\t\t\t\n\t\t`},y=function(t){return`\n\n\t\n\t\t\n\t\t\t\n\t\t\t\t${I()}\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t/files/${(0,i.HW)()?.uid}/\n\t\t\t\tinfinity\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\thttpd/unix-directory\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t0\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t${t}\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t100\n\t\t\t0\n\t\t\n\t\n`};var L=(t=>(t.Folder="folder",t.File="file",t))(L||{});const v=function(t,e){return null!==t.match(e)},R=(t,e)=>{if(t.id&&"number"!=typeof t.id)throw new Error("Invalid id type of value");if(!t.source)throw new Error("Missing mandatory source");try{new URL(t.source)}catch(t){throw new Error("Invalid source format, source must be a valid URL")}if(!t.source.startsWith("http"))throw new Error("Invalid source format, only http(s) is supported");if(t.displayname&&"string"!=typeof t.displayname)throw new Error("Invalid displayname type");if(t.mtime&&!(t.mtime instanceof Date))throw new Error("Invalid mtime type");if(t.crtime&&!(t.crtime instanceof Date))throw new Error("Invalid crtime type");if(!t.mime||"string"!=typeof t.mime||!t.mime.match(/^[-\w.]+\/[-+\w.]+$/gi))throw new Error("Missing or invalid mandatory mime");if("size"in t&&"number"!=typeof t.size&&void 0!==t.size)throw new Error("Invalid size type");if("permissions"in t&&void 0!==t.permissions&&!("number"==typeof t.permissions&&t.permissions>=f.NONE&&t.permissions<=f.ALL))throw new Error("Invalid permissions");if(t.owner&&null!==t.owner&&"string"!=typeof t.owner)throw new Error("Invalid owner type");if(t.attributes&&"object"!=typeof t.attributes)throw new Error("Invalid attributes type");if(t.root&&"string"!=typeof t.root)throw new Error("Invalid root type");if(t.root&&!t.root.startsWith("/"))throw new Error("Root must start with a leading slash");if(t.root&&!t.source.includes(t.root))throw new Error("Root must be part of the source");if(t.root&&v(t.source,e)){const s=t.source.match(e)[0];if(!t.source.includes((0,o.join)(s,t.root)))throw new Error("The root must be relative to the service. e.g /files/emma")}if(t.status&&!Object.values(w).includes(t.status))throw new Error("Status must be a valid NodeStatus")};var w=(t=>(t.NEW="new",t.FAILED="failed",t.LOADING="loading",t.LOCKED="locked",t))(w||{});class O{_data;_attributes;_knownDavService=/(remote|public)\.php\/(web)?dav/i;readonlyAttributes=Object.entries(Object.getOwnPropertyDescriptors(O.prototype)).filter((t=>"function"==typeof t[1].get&&"__proto__"!==t[0])).map((t=>t[0]));handler={set:(t,e,s)=>!this.readonlyAttributes.includes(e)&&Reflect.set(t,e,s),deleteProperty:(t,e)=>!this.readonlyAttributes.includes(e)&&Reflect.deleteProperty(t,e),get:(t,e,s)=>this.readonlyAttributes.includes(e)?(g.warn(`Accessing "Node.attributes.${e}" is deprecated, access it directly on the Node instance.`),Reflect.get(this,e)):Reflect.get(t,e,s)};constructor(t,e){R(t,e||this._knownDavService),this._data={displayname:t.attributes?.displayname,...t,attributes:{}},this._attributes=new Proxy(this._data.attributes,this.handler),this.update(t.attributes??{}),e&&(this._knownDavService=e)}get source(){return this._data.source.replace(/\/$/i,"")}get encodedSource(){const{origin:t}=new URL(this.source);return t+(0,n.O0)(this.source.slice(t.length))}get basename(){return(0,o.basename)(this.source)}get displayname(){return this._data.displayname||this.basename}set displayname(t){this._data.displayname=t}get extension(){return(0,o.extname)(this.source)}get dirname(){if(this.root){let t=this.source;this.isDavRessource&&(t=t.split(this._knownDavService).pop());const e=t.indexOf(this.root),s=this.root.replace(/\/$/,"");return(0,o.dirname)(t.slice(e+s.length)||"/")}const t=new URL(this.source);return(0,o.dirname)(t.pathname)}get mime(){return this._data.mime}get mtime(){return this._data.mtime}set mtime(t){this._data.mtime=t}get crtime(){return this._data.crtime}get size(){return this._data.size}set size(t){this.updateMtime(),this._data.size=t}get attributes(){return this._attributes}get permissions(){return null!==this.owner||this.isDavRessource?void 0!==this._data.permissions?this._data.permissions:f.NONE:f.READ}set permissions(t){this.updateMtime(),this._data.permissions=t}get owner(){return this.isDavRessource?this._data.owner:null}get isDavRessource(){return v(this.source,this._knownDavService)}get root(){return this._data.root?this._data.root.replace(/^(.+)\/$/,"$1"):this.isDavRessource&&(0,o.dirname)(this.source).split(this._knownDavService).pop()||null}get path(){if(this.root){let t=this.source;this.isDavRessource&&(t=t.split(this._knownDavService).pop());const e=t.indexOf(this.root),s=this.root.replace(/\/$/,"");return t.slice(e+s.length)||"/"}return(this.dirname+"/"+this.basename).replace(/\/\//g,"/")}get fileid(){return this._data?.id}get status(){return this._data?.status}set status(t){this._data.status=t}move(t){R({...this._data,source:t},this._knownDavService);const e=this.basename;this._data.source=t,this.displayname===e&&this.basename!==e&&(this.displayname=this.basename),this.updateMtime()}rename(t){if(t.includes("/"))throw new Error("Invalid basename");this.move((0,o.dirname)(this.source)+"/"+t)}updateMtime(){this._data.mtime&&(this._data.mtime=new Date)}update(t){for(const[e,s]of Object.entries(t))try{void 0===s?delete this.attributes[e]:this.attributes[e]=s}catch(t){if(t instanceof TypeError)continue;throw t}}}class P extends O{get type(){return L.File}}class _ extends O{constructor(t){super({...t,mime:"httpd/unix-directory"})}get type(){return L.Folder}get extension(){return null}get mime(){return"httpd/unix-directory"}}const U=(0,u.f)()?`/files/${(0,u.G)()}`:`/files/${(0,i.HW)()?.uid}`,T=function(){const t=(0,a.dC)("dav");return(0,u.f)()?t.replace("remote.php","public.php"):t}(),C=function(t=T,e={}){const s=(0,c.UU)(t,{headers:e});function r(t){s.setHeaders({...e,"X-Requested-With":"XMLHttpRequest",requesttoken:t??""})}return(0,i.zo)(r),r((0,i.do)()),(0,c.Gu)().patch("fetch",((t,e)=>{const s=e.headers;return s?.method&&(e.method=s.method,delete s.method),fetch(t,e)})),s},$=(t,e="/",s=U)=>{const r=new AbortController;return new d.CancelablePromise((async(i,o,n)=>{n((()=>r.abort()));try{i((await t.getDirectoryContents(`${s}${e}`,{signal:r.signal,details:!0,data:`\n\t\t\n\t\t\t\n\t\t\t\t${I()}\n\t\t\t\n\t\t\t\n\t\t\t\t1\n\t\t\t\n\t\t`,headers:{method:"REPORT"},includeSelf:!0})).data.filter((t=>t.filename!==e)).map((t=>F(t,s))))}catch(t){o(t)}}))},F=function(t,e=U,s=T){let r=(0,i.HW)()?.uid;if((0,u.f)())r=r??"anonymous";else if(!r)throw new Error("No user id found");const o=t.props,n=function(t=""){let e=f.NONE;return t?((t.includes("C")||t.includes("K"))&&(e|=f.CREATE),t.includes("G")&&(e|=f.READ),(t.includes("W")||t.includes("N")||t.includes("V"))&&(e|=f.UPDATE),t.includes("D")&&(e|=f.DELETE),t.includes("R")&&(e|=f.SHARE),e):e}(o?.permissions),a=String(o?.["owner-id"]||r),d=o.fileid||0,c={id:d,source:`${s}${t.filename}`,mtime:new Date(Date.parse(t.lastmod)),mime:t.mime||"application/octet-stream",displayname:void 0!==o.displayname?String(o.displayname):void 0,size:o?.size||Number.parseInt(o.getcontentlength||"0"),status:d<0?w.FAILED:void 0,permissions:n,owner:a,root:e,attributes:{...t,...o,hasPreview:o?.["has-preview"]}};return delete c.attributes?.props,"file"===t.type?new P(c):new _(c)};Error;const S=["B","KB","MB","GB","TB","PB"],x=["B","KiB","MiB","GiB","TiB","PiB"];function D(t,e=!1,s=!1,r=!1){s=s&&!r,"string"==typeof t&&(t=Number(t));let i=t>0?Math.floor(Math.log(t)/Math.log(r?1e3:1024)):0;i=Math.min((s?x.length:S.length)-1,i);const o=s?x[i]:S[i];let n=(t/Math.pow(r?1e3:1024,i)).toFixed(1);return!0===e&&0===i?("0.0"!==n?"< 1 ":"0 ")+(s?x[1]:S[1]):(n=i<2?parseFloat(n).toFixed(0):parseFloat(n).toLocaleString((0,p.lO)()),n+" "+o)}function G(t,e=!1){try{t=`${t}`.toLocaleLowerCase().replaceAll(/\s+/g,"").replaceAll(",",".")}catch(t){return null}const s=t.match(/^([0-9]*(\.[0-9]*)?)([kmgtp]?)(i?)b?$/);if(null===s||"."===s[1]||""===s[1])return null;const r=`${s[1]}`,i="i"===s[4]||e?1024:1e3;return Math.round(Number.parseFloat(r)*i**{"":0,k:1,m:2,g:3,t:4,p:5,e:6}[s[3]])}function M(t){return t instanceof Date?t.toISOString():String(t)}function j(t,e={}){const s={sortingMode:"basename",sortingOrder:"asc",...e};return function(t,e,s){s=s??[];const r=(e=e??[t=>t]).map(((t,e)=>"asc"===(s[e]??"asc")?1:-1)),i=Intl.Collator([(0,p.Z0)(),(0,p.lO)()],{numeric:!0,usage:"sort"});return[...t].sort(((t,s)=>{for(const[o,n]of e.entries()){const e=i.compare(M(n(t)),M(n(s)));if(0!==e)return e*r[o]}return 0}))}(t,[...s.sortFavoritesFirst?[t=>1!==t.attributes?.favorite]:[],...s.sortFoldersFirst?[t=>"folder"!==t.type]:[],..."basename"!==s.sortingMode?[t=>t[s.sortingMode]]:[],t=>{return(e=t.attributes?.displayname||t.basename).lastIndexOf(".")>0?e.slice(0,e.lastIndexOf(".")):e;var e},t=>t.basename],[...s.sortFavoritesFirst?["asc"]:[],...s.sortFoldersFirst?["asc"]:[],..."mtime"===s.sortingMode?["asc"===s.sortingOrder?"desc":"asc"]:[],..."mtime"!==s.sortingMode&&"basename"!==s.sortingMode?[s.sortingOrder]:[],s.sortingOrder,s.sortingOrder])}var k={};!function(t){const e=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",s="["+e+"]["+e+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*",r=new RegExp("^"+s+"$");t.isExist=function(t){return void 0!==t},t.isEmptyObject=function(t){return 0===Object.keys(t).length},t.merge=function(t,e,s){if(e){const r=Object.keys(e),i=r.length;for(let o=0;o!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(t,e,s){return t}};B.buildOptions=function(t){return Object.assign({},X,t)},B.defaultOptions=X,!Number.parseInt&&window.parseInt&&(Number.parseInt=window.parseInt),!Number.parseFloat&&window.parseFloat&&(Number.parseFloat=window.parseFloat),new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");var V={};function K(t,e,s){let r;const i={};for(let o=0;o0&&(i[e.textNodeName]=r):void 0!==r&&(i[e.textNodeName]=r),i}function q(t){const e=Object.keys(t);for(let t=0;t`,o=!1;continue}if(d===e.commentPropName){i+=r+`\x3c!--${a[d][0][e.textNodeName]}--\x3e`,o=!0;continue}if("?"===d[0]){const t=Z(a[":@"],e),s="?xml"===d?"":r;let n=a[d][0][e.textNodeName];n=0!==n.length?" "+n:"",i+=s+`<${d}${n}${t}?>`,o=!0;continue}let u=r;""!==u&&(u+=e.indentBy);const p=r+`<${d}${Z(a[":@"],e)}`,l=Q(a[d],e,c,u);-1!==e.unpairedTags.indexOf(d)?e.suppressUnpairedNode?i+=p+">":i+=p+"/>":l&&0!==l.length||!e.suppressEmptyNode?l&&l.endsWith(">")?i+=p+`>${l}${r}`:(i+=p+">",l&&""!==r&&(l.includes("/>")||l.includes("`):i+=p+"/>",o=!0}return i}function Y(t){const e=Object.keys(t);for(let s=0;s0&&e.processEntities)for(let s=0;s0&&(s="\n"),Q(t,e,"",s)},rt={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&"},{regex:new RegExp(">","g"),val:">"},{regex:new RegExp("<","g"),val:"<"},{regex:new RegExp("'","g"),val:"'"},{regex:new RegExp('"',"g"),val:"""}],processEntities:!0,stopNodes:[],oneListGroup:!1};function it(t){this.options=Object.assign({},rt,t),this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=at),this.processTextOrObjNode=ot,this.options.format?(this.indentate=nt,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function ot(t,e,s){const r=this.j2x(t,s+1);return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,r.attrStr,s):this.buildObjectNode(r.val,e,r.attrStr,s)}function nt(t){return this.options.indentBy.repeat(t)}function at(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}it.prototype.build=function(t){return this.options.preserveOrder?st(t,this.options):(Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&(t={[this.options.arrayNodeName]:t}),this.j2x(t,0).val)},it.prototype.j2x=function(t,e){let s="",r="";for(let i in t)if(Object.prototype.hasOwnProperty.call(t,i))if(void 0===t[i])this.isAttribute(i)&&(r+="");else if(null===t[i])this.isAttribute(i)?r+="":"?"===i[0]?r+=this.indentate(e)+"<"+i+"?"+this.tagEndChar:r+=this.indentate(e)+"<"+i+"/"+this.tagEndChar;else if(t[i]instanceof Date)r+=this.buildTextValNode(t[i],i,"",e);else if("object"!=typeof t[i]){const o=this.isAttribute(i);if(o)s+=this.buildAttrPairStr(o,""+t[i]);else if(i===this.options.textNodeName){let e=this.options.tagValueProcessor(i,""+t[i]);r+=this.replaceEntitiesValue(e)}else r+=this.buildTextValNode(t[i],i,"",e)}else if(Array.isArray(t[i])){const s=t[i].length;let o="",n="";for(let a=0;a"+t+i}},it.prototype.closeTag=function(t){let e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":`>`+this.newLine;if(!1!==this.options.commentPropName&&e===this.options.commentPropName)return this.indentate(r)+`\x3c!--${t}--\x3e`+this.newLine;if("?"===e[0])return this.indentate(r)+"<"+e+s+"?"+this.tagEndChar;{let i=this.options.tagValueProcessor(e,t);return i=this.replaceEntitiesValue(i),""===i?this.indentate(r)+"<"+e+s+this.closeTag(e)+this.tagEndChar:this.indentate(r)+"<"+e+s+">"+i+"0&&this.options.processEntities)for(let e=0;eh.error("SEMVER",...t):()=>{},ct={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:16,MAX_SAFE_BUILD_LENGTH:250,MAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER||9007199254740991,RELEASE_TYPES:["major","premajor","minor","preminor","patch","prepatch","prerelease"],SEMVER_SPEC_VERSION:"2.0.0",FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2},ut={exports:{}};!function(t,e){const{MAX_SAFE_COMPONENT_LENGTH:s,MAX_SAFE_BUILD_LENGTH:r,MAX_LENGTH:i}=ct,o=dt,n=(e=t.exports={}).re=[],a=e.safeRe=[],d=e.src=[],c=e.t={};let u=0;const p="[a-zA-Z0-9-]",l=[["\\s",1],["\\d",i],[p,r]],m=(t,e,s)=>{const r=(t=>{for(const[e,s]of l)t=t.split(`${e}*`).join(`${e}{0,${s}}`).split(`${e}+`).join(`${e}{1,${s}}`);return t})(e),i=u++;o(t,i,e),c[t]=i,d[i]=e,n[i]=new RegExp(e,s?"g":void 0),a[i]=new RegExp(r,s?"g":void 0)};m("NUMERICIDENTIFIER","0|[1-9]\\d*"),m("NUMERICIDENTIFIERLOOSE","\\d+"),m("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${p}*`),m("MAINVERSION",`(${d[c.NUMERICIDENTIFIER]})\\.(${d[c.NUMERICIDENTIFIER]})\\.(${d[c.NUMERICIDENTIFIER]})`),m("MAINVERSIONLOOSE",`(${d[c.NUMERICIDENTIFIERLOOSE]})\\.(${d[c.NUMERICIDENTIFIERLOOSE]})\\.(${d[c.NUMERICIDENTIFIERLOOSE]})`),m("PRERELEASEIDENTIFIER",`(?:${d[c.NUMERICIDENTIFIER]}|${d[c.NONNUMERICIDENTIFIER]})`),m("PRERELEASEIDENTIFIERLOOSE",`(?:${d[c.NUMERICIDENTIFIERLOOSE]}|${d[c.NONNUMERICIDENTIFIER]})`),m("PRERELEASE",`(?:-(${d[c.PRERELEASEIDENTIFIER]}(?:\\.${d[c.PRERELEASEIDENTIFIER]})*))`),m("PRERELEASELOOSE",`(?:-?(${d[c.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${d[c.PRERELEASEIDENTIFIERLOOSE]})*))`),m("BUILDIDENTIFIER",`${p}+`),m("BUILD",`(?:\\+(${d[c.BUILDIDENTIFIER]}(?:\\.${d[c.BUILDIDENTIFIER]})*))`),m("FULLPLAIN",`v?${d[c.MAINVERSION]}${d[c.PRERELEASE]}?${d[c.BUILD]}?`),m("FULL",`^${d[c.FULLPLAIN]}$`),m("LOOSEPLAIN",`[v=\\s]*${d[c.MAINVERSIONLOOSE]}${d[c.PRERELEASELOOSE]}?${d[c.BUILD]}?`),m("LOOSE",`^${d[c.LOOSEPLAIN]}$`),m("GTLT","((?:<|>)?=?)"),m("XRANGEIDENTIFIERLOOSE",`${d[c.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),m("XRANGEIDENTIFIER",`${d[c.NUMERICIDENTIFIER]}|x|X|\\*`),m("XRANGEPLAIN",`[v=\\s]*(${d[c.XRANGEIDENTIFIER]})(?:\\.(${d[c.XRANGEIDENTIFIER]})(?:\\.(${d[c.XRANGEIDENTIFIER]})(?:${d[c.PRERELEASE]})?${d[c.BUILD]}?)?)?`),m("XRANGEPLAINLOOSE",`[v=\\s]*(${d[c.XRANGEIDENTIFIERLOOSE]})(?:\\.(${d[c.XRANGEIDENTIFIERLOOSE]})(?:\\.(${d[c.XRANGEIDENTIFIERLOOSE]})(?:${d[c.PRERELEASELOOSE]})?${d[c.BUILD]}?)?)?`),m("XRANGE",`^${d[c.GTLT]}\\s*${d[c.XRANGEPLAIN]}$`),m("XRANGELOOSE",`^${d[c.GTLT]}\\s*${d[c.XRANGEPLAINLOOSE]}$`),m("COERCEPLAIN",`(^|[^\\d])(\\d{1,${s}})(?:\\.(\\d{1,${s}}))?(?:\\.(\\d{1,${s}}))?`),m("COERCE",`${d[c.COERCEPLAIN]}(?:$|[^\\d])`),m("COERCEFULL",d[c.COERCEPLAIN]+`(?:${d[c.PRERELEASE]})?(?:${d[c.BUILD]})?(?:$|[^\\d])`),m("COERCERTL",d[c.COERCE],!0),m("COERCERTLFULL",d[c.COERCEFULL],!0),m("LONETILDE","(?:~>?)"),m("TILDETRIM",`(\\s*)${d[c.LONETILDE]}\\s+`,!0),e.tildeTrimReplace="$1~",m("TILDE",`^${d[c.LONETILDE]}${d[c.XRANGEPLAIN]}$`),m("TILDELOOSE",`^${d[c.LONETILDE]}${d[c.XRANGEPLAINLOOSE]}$`),m("LONECARET","(?:\\^)"),m("CARETTRIM",`(\\s*)${d[c.LONECARET]}\\s+`,!0),e.caretTrimReplace="$1^",m("CARET",`^${d[c.LONECARET]}${d[c.XRANGEPLAIN]}$`),m("CARETLOOSE",`^${d[c.LONECARET]}${d[c.XRANGEPLAINLOOSE]}$`),m("COMPARATORLOOSE",`^${d[c.GTLT]}\\s*(${d[c.LOOSEPLAIN]})$|^$`),m("COMPARATOR",`^${d[c.GTLT]}\\s*(${d[c.FULLPLAIN]})$|^$`),m("COMPARATORTRIM",`(\\s*)${d[c.GTLT]}\\s*(${d[c.LOOSEPLAIN]}|${d[c.XRANGEPLAIN]})`,!0),e.comparatorTrimReplace="$1$2$3",m("HYPHENRANGE",`^\\s*(${d[c.XRANGEPLAIN]})\\s+-\\s+(${d[c.XRANGEPLAIN]})\\s*$`),m("HYPHENRANGELOOSE",`^\\s*(${d[c.XRANGEPLAINLOOSE]})\\s+-\\s+(${d[c.XRANGEPLAINLOOSE]})\\s*$`),m("STAR","(<|>)?=?\\s*\\*"),m("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),m("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")}(ut,ut.exports);var pt=ut.exports;Object.freeze({loose:!0}),Object.freeze({});const lt=/^[0-9]+$/,mt=(t,e)=>{const s=lt.test(t),r=lt.test(e);return s&&r&&(t=+t,e=+e),t===e?0:s&&!r?-1:r&&!s?1:tmt(e,t)};const{MAX_LENGTH:gt,MAX_SAFE_INTEGER:ft}=ct,{safeRe:Et,t:At}=pt,{compareIdentifiers:It}=ht;l.m}},o={};function n(t){var e=o[t];if(void 0!==e)return e.exports;var s=o[t]={id:t,loaded:!1,exports:{}};return i[t].call(s.exports,s,s.exports,n),s.loaded=!0,s.exports}n.m=i,e=[],n.O=(t,s,r,i)=>{if(!s){var o=1/0;for(u=0;u=i)&&Object.keys(n.O).every((t=>n.O[t](s[d])))?s.splice(d--,1):(a=!1,i0&&e[u-1][2]>i;u--)e[u]=e[u-1];e[u]=[s,r,i]},n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var s in e)n.o(e,s)&&!n.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},n.f={},n.e=t=>Promise.all(Object.keys(n.f).reduce(((e,s)=>(n.f[s](t,e),e)),[])),n.u=t=>(({3239:"settings-users",4529:"settings-apps-view"}[t]||t)+"-"+t+".js?v="+{1521:"220bf24c534d0cf00eb6",3239:"2f2de15c0dd418857aac",4529:"c318619b71913b3ce3fd",5085:"4f10478b69e38cddada5",7265:"715398afd1ab50836642",8737:"6fee9973f6f3e1ab1b5a",9291:"3812924d520899b5c9f4",9551:"ad50a950026c0cfc30e2"}[t]),n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),s={},r="nextcloud:",n.l=(t,e,i,o)=>{if(s[t])s[t].push(e);else{var a,d;if(void 0!==i)for(var c=document.getElementsByTagName("script"),u=0;u{a.onerror=a.onload=null,clearTimeout(m);var i=s[t];if(delete s[t],a.parentNode&&a.parentNode.removeChild(a),i&&i.forEach((t=>t(r))),e)return e(r)},m=setTimeout(l.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=l.bind(null,a.onerror),a.onload=l.bind(null,a.onload),d&&document.head.appendChild(a)}},n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),n.j=2689,(()=>{var t;n.g.importScripts&&(t=n.g.location+"");var e=n.g.document;if(!t&&e&&(e.currentScript&&"SCRIPT"===e.currentScript.tagName.toUpperCase()&&(t=e.currentScript.src),!t)){var s=e.getElementsByTagName("script");if(s.length)for(var r=s.length-1;r>-1&&(!t||!/^http(s?):/.test(t));)t=s[r--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=t})(),(()=>{n.b=document.baseURI||self.location.href;var t={2689:0};n.f.j=(e,s)=>{var r=n.o(t,e)?t[e]:void 0;if(0!==r)if(r)s.push(r[2]);else{var i=new Promise(((s,i)=>r=t[e]=[s,i]));s.push(r[2]=i);var o=n.p+n.u(e),a=new Error;n.l(o,(s=>{if(n.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var i=s&&("load"===s.type?"missing":s.type),o=s&&s.target&&s.target.src;a.message="Loading chunk "+e+" failed.\n("+i+": "+o+")",a.name="ChunkLoadError",a.type=i,a.request=o,r[1](a)}}),"chunk-"+e,e)}},n.O.j=e=>0===t[e];var e=(e,s)=>{var r,i,o=s[0],a=s[1],d=s[2],c=0;if(o.some((e=>0!==t[e]))){for(r in a)n.o(a,r)&&(n.m[r]=a[r]);if(d)var u=d(n)}for(e&&e(s);cn(18539)));a=n.O(a)})(); -//# sourceMappingURL=settings-vue-settings-apps-users-management.js.map?v=87a36f9c9dfd7b26efbb \ No newline at end of file +(()=>{var e,s,r,i={31755:(e,s,r)=>{"use strict";r.d(s,{P:()=>X});var i=r(85471),o=r(95353),n=r(59097),a=r(87485),d=r(35810),c=r(85168),u=r(63814),p=r(65043),l=r(15916),m=r(56760);r(51257);const h=function(t){return t.replace(/\/$/,"")},g=()=>(0,m.C)(),f=(t,e)=>p.Ay.get(h(t),e),E=(t,e)=>p.Ay.post(h(t),e),A=(t,e)=>p.Ay.put(h(t),e),I=(t,e)=>p.Ay.delete(h(t),{params:e});var b=r(36620),N=r(96763);const y=(0,n.c0)("settings").persist(!0).build(),L={id:"",name:"",usercount:0,disabled:0,canAdd:!0,canRemove:!0},v={users:[],groups:[],orderBy:l.q.UserCount,minPasswordLength:0,usersOffset:0,usersLimit:25,disabledUsersOffset:0,disabledUsersLimit:25,userCount:0,showConfig:{showStoragePath:"true"===y.getItem("account_settings__showStoragePath"),showUserBackend:"true"===y.getItem("account_settings__showUserBackend"),showLastLogin:"true"===y.getItem("account_settings__showLastLogin"),showNewUserForm:"true"===y.getItem("account_settings__showNewUserForm"),showLanguages:"true"===y.getItem("account_settings__showLanguages")}},R={appendUsers(t,e){const s=t.users.map((t=>{let{id:e}=t;return e})),r=Object.values(e).filter((t=>{let{id:e}=t;return!s.includes(e)})),i=t.users.concat(r);t.usersOffset+=t.usersLimit,t.users=i},updateDisabledUsers(t,e){t.disabledUsersOffset+=t.disabledUsersLimit},setPasswordPolicyMinLength(t,e){t.minPasswordLength=""!==e?e:0},initGroups(t,e){let{groups:s,orderBy:r,userCount:i}=e;t.groups=s.map((t=>Object.assign({},L,t))),t.orderBy=r,t.userCount=i},addGroup(t,e){let{gid:s,displayName:r}=e;try{if(void 0!==t.groups.find((t=>t.id===s)))return;const e=Object.assign({},L,{id:s,name:r});t.groups.unshift(e)}catch(t){N.error("Can't create group",t)}},renameGroup(t,e){let{gid:s,displayName:r}=e;const i=t.groups.findIndex((t=>t.id===s));if(i>=0){const e=t.groups[i];e.name=r,t.groups.splice(i,1,e)}},removeGroup(t,e){const s=t.groups.findIndex((t=>t.id===e));s>=0&&t.groups.splice(s,1)},addUserGroup(t,e){let{userid:s,gid:r}=e;const i=t.groups.find((t=>t.id===r)),o=t.users.find((t=>t.id===s));i&&o.enabled&&t.userCount>0&&i.usercount++,o.groups.push(r)},removeUserGroup(t,e){let{userid:s,gid:r}=e;const i=t.groups.find((t=>t.id===r)),o=t.users.find((t=>t.id===s));i&&o.enabled&&t.userCount>0&&i.usercount--;const n=o.groups;n.splice(n.indexOf(r),1)},addUserSubAdmin(t,e){let{userid:s,gid:r}=e;t.users.find((t=>t.id===s)).subadmin.push(r)},removeUserSubAdmin(t,e){let{userid:s,gid:r}=e;const i=t.users.find((t=>t.id===s)).subadmin;i.splice(i.indexOf(r),1)},deleteUser(t,e){const s=t.users.findIndex((t=>t.id===e));this.commit("updateUserCounts",{user:t.users[s],actionType:"remove"}),t.users.splice(s,1)},addUserData(t,e){const s=e.data.ocs.data;t.users.unshift(s),this.commit("updateUserCounts",{user:s,actionType:"create"})},enableDisableUser(t,e){let{userid:s,enabled:r}=e;const i=t.users.find((t=>t.id===s));i.enabled=r,this.commit("updateUserCounts",{user:i,actionType:r?"enable":"disable"})},updateUserCounts(t,e){let{user:s,actionType:r}=e;if(0===t.userCount)return;const i=t.groups.find((t=>"__nc_internal_recent"===t.id)),o=t.groups.find((t=>"disabled"===t.id));switch(r){case"enable":case"disable":o.usercount+=s.enabled?-1:1,i.usercount+=s.enabled?1:-1,t.userCount+=s.enabled?1:-1,s.groups.forEach((e=>{t.groups.find((t=>t.id===e)).disabled+=s.enabled?-1:1}));break;case"create":i.usercount++,t.userCount++,s.groups.forEach((e=>{t.groups.find((t=>t.id===e)).usercount++}));break;case"remove":s.enabled?(i.usercount--,t.userCount--,s.groups.forEach((e=>{const s=t.groups.find((t=>t.id===e));s?s.usercount--:N.warn("User group "+e+" does not exist during user removal")}))):(o.usercount--,s.groups.forEach((e=>{t.groups.find((t=>t.id===e)).disabled--})));break;default:b.A.error(`Unknown action type in updateUserCounts: '${r}'`)}},setUserData(t,e){let{userid:s,key:r,value:i}=e;if("quota"===r){const e=(0,d.lT)(i,!0);t.users.find((t=>t.id===s))[r][r]=null!==e?e:i}else t.users.find((t=>t.id===s))[r]=i},resetUsers(t){t.users=[],t.usersOffset=0,t.disabledUsersOffset=0},setShowConfig(t,e){let{key:s,value:r}=e;y.setItem(`account_settings__${s}`,JSON.stringify(r)),t.showConfig[s]=r},setGroupSorting(e,s){const r=e.orderBy;e.orderBy=s,p.Ay.post((0,u.Jv)("/settings/users/preferences/group.sortBy"),{value:String(s)}).catch((s=>{e.orderBy=r,(0,c.Qg)(t("settings","Could not set group sorting")),b.A.error(s)}))}},w={getUsers:t=>t.users,getGroups:t=>t.groups,getSubadminGroups:t=>t.groups.filter((t=>"admin"!==t.id&&"__nc_internal_recent"!==t.id&&"disabled"!==t.id)),getSortedGroups(t){const e=[...t.groups];return t.orderBy===l.q.UserCount?e.sort(((t,e)=>{const s=t.usercount-t.disabled,r=e.usercount-e.disabled;return st.name.localeCompare(e.name)))},getGroupSorting:t=>t.orderBy,getPasswordPolicyMinLength:t=>t.minPasswordLength,getUsersOffset:t=>t.usersOffset,getUsersLimit:t=>t.usersLimit,getDisabledUsersOffset:t=>t.disabledUsersOffset,getDisabledUsersLimit:t=>t.disabledUsersLimit,getUserCount:t=>t.userCount,getShowConfig:t=>t.showConfig},O=p.Ay.CancelToken;let P=null;const _={state:v,mutations:R,getters:w,actions:{searchUsers(t,e){let{offset:s,limit:r,search:i}=e;return i="string"==typeof i?i:"",f((0,u.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:s,limit:r,search:i})).catch((e=>{p.Ay.isCancel(e)||t.commit("API_FAILURE",e)}))},getUser:(t,e)=>f((0,u.KT)(`cloud/users/${e}`)).catch((e=>{p.Ay.isCancel(e)||t.commit("API_FAILURE",e)})),getUsers(t,e){let{offset:s,limit:r,search:i,group:o}=e;return P&&P.cancel("Operation canceled by another search request."),P=O.source(),i="string"==typeof i?i:"",i=i.replace(/in:[^\s]+/g,"").trim(),o="string"==typeof o?o:"",""!==o?f((0,u.KT)("cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}",{group:encodeURIComponent(o),offset:s,limit:r,search:i}),{cancelToken:P.token}).then((e=>{const s=Object.keys(e.data.ocs.data.users).length;return s>0&&t.commit("appendUsers",e.data.ocs.data.users),s})).catch((e=>{p.Ay.isCancel(e)||t.commit("API_FAILURE",e)})):f((0,u.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:s,limit:r,search:i}),{cancelToken:P.token}).then((e=>{const s=Object.keys(e.data.ocs.data.users).length;return s>0&&t.commit("appendUsers",e.data.ocs.data.users),s})).catch((e=>{p.Ay.isCancel(e)||t.commit("API_FAILURE",e)}))},async getRecentUsers(t,e){let{offset:s,limit:r,search:i}=e;const o=(0,u.KT)("cloud/users/recent?offset={offset}&limit={limit}&search={search}",{offset:s,limit:r,search:i});try{const e=await f(o),s=Object.keys(e.data.ocs.data.users).length;return s>0&&t.commit("appendUsers",e.data.ocs.data.users),s}catch(e){t.commit("API_FAILURE",e)}},async getDisabledUsers(t,e){let{offset:s,limit:r,search:i}=e;const o=(0,u.KT)("cloud/users/disabled?offset={offset}&limit={limit}&search={search}",{offset:s,limit:r,search:i});try{const e=await f(o),s=Object.keys(e.data.ocs.data.users).length;return s>0&&(t.commit("appendUsers",e.data.ocs.data.users),t.commit("updateDisabledUsers",e.data.ocs.data.users)),s}catch(e){t.commit("API_FAILURE",e)}},getGroups(t,e){let{offset:s,limit:r,search:i}=e;i="string"==typeof i?i:"";const o=-1===r?"":`&limit=${r}`;return f((0,u.KT)("cloud/groups?offset={offset}&search={search}",{offset:s,search:i})+o).then((e=>Object.keys(e.data.ocs.data.groups).length>0&&(e.data.ocs.data.groups.forEach((function(e){t.commit("addGroup",{gid:e,displayName:e})})),!0))).catch((e=>t.commit("API_FAILURE",e)))},getUsersFromList(t,e){let{offset:s,limit:r,search:i}=e;return i="string"==typeof i?i:"",f((0,u.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:s,limit:r,search:i})).then((e=>Object.keys(e.data.ocs.data.users).length>0&&(t.commit("appendUsers",e.data.ocs.data.users),!0))).catch((e=>t.commit("API_FAILURE",e)))},getUsersFromGroup(t,e){let{groupid:s,offset:r,limit:i}=e;return f((0,u.KT)("cloud/users/{groupId}/details?offset={offset}&limit={limit}",{groupId:encodeURIComponent(s),offset:r,limit:i})).then((e=>t.commit("getUsersFromList",e.data.ocs.data.users))).catch((e=>t.commit("API_FAILURE",e)))},getPasswordPolicyMinLength:t=>!(!(0,a.F)().password_policy||!(0,a.F)().password_policy.minLength)&&(t.commit("setPasswordPolicyMinLength",(0,a.F)().password_policy.minLength),(0,a.F)().password_policy.minLength),addGroup:(t,e)=>g().then((s=>E((0,u.KT)("cloud/groups"),{groupid:e}).then((s=>(t.commit("addGroup",{gid:e,displayName:e}),{gid:e,displayName:e}))).catch((t=>{throw t})))).catch((s=>{throw t.commit("API_FAILURE",{gid:e,error:s}),s})),renameGroup(t,e){let{groupid:s,displayName:r}=e;return g().then((e=>A((0,u.KT)("cloud/groups/{groupId}",{groupId:encodeURIComponent(s)}),{key:"displayname",value:r}).then((e=>(t.commit("renameGroup",{gid:s,displayName:r}),{groupid:s,displayName:r}))).catch((t=>{throw t})))).catch((e=>{throw t.commit("API_FAILURE",{groupid:s,error:e}),e}))},removeGroup:(t,e)=>g().then((s=>I((0,u.KT)("cloud/groups/{groupId}",{groupId:encodeURIComponent(e)})).then((s=>t.commit("removeGroup",e))).catch((t=>{throw t})))).catch((s=>t.commit("API_FAILURE",{gid:e,error:s}))),addUserGroup(t,e){let{userid:s,gid:r}=e;return g().then((e=>E((0,u.KT)("cloud/users/{userid}/groups",{userid:s}),{groupid:r}).then((e=>t.commit("addUserGroup",{userid:s,gid:r}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:s,error:e})))},removeUserGroup(t,e){let{userid:s,gid:r}=e;return g().then((e=>I((0,u.KT)("cloud/users/{userid}/groups",{userid:s}),{groupid:r}).then((e=>t.commit("removeUserGroup",{userid:s,gid:r}))).catch((t=>{throw t})))).catch((e=>{throw t.commit("API_FAILURE",{userid:s,error:e}),e}))},addUserSubAdmin(t,e){let{userid:s,gid:r}=e;return g().then((e=>E((0,u.KT)("cloud/users/{userid}/subadmins",{userid:s}),{groupid:r}).then((e=>t.commit("addUserSubAdmin",{userid:s,gid:r}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:s,error:e})))},removeUserSubAdmin(t,e){let{userid:s,gid:r}=e;return g().then((e=>I((0,u.KT)("cloud/users/{userid}/subadmins",{userid:s}),{groupid:r}).then((e=>t.commit("removeUserSubAdmin",{userid:s,gid:r}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:s,error:e})))},async wipeUserDevices(t,e){try{return await g(),await E((0,u.KT)("cloud/users/{userid}/wipe",{userid:e}))}catch(s){return t.commit("API_FAILURE",{userid:e,error:s}),Promise.reject(new Error("Failed to wipe user devices"))}},deleteUser:(t,e)=>g().then((s=>I((0,u.KT)("cloud/users/{userid}",{userid:e})).then((s=>t.commit("deleteUser",e))).catch((t=>{throw t})))).catch((s=>t.commit("API_FAILURE",{userid:e,error:s}))),addUser(t,e){let{commit:s,dispatch:r}=t,{userid:i,password:o,displayName:n,email:a,groups:d,subadmin:c,quota:p,language:l,manager:m}=e;return g().then((t=>E((0,u.KT)("cloud/users"),{userid:i,password:o,displayName:n,email:a,groups:d,subadmin:c,quota:p,language:l,manager:m}).then((t=>r("addUserData",i||t.data.ocs.data.id))).catch((t=>{throw t})))).catch((t=>{throw s("API_FAILURE",{userid:i,error:t}),t}))},addUserData:(t,e)=>g().then((s=>f((0,u.KT)("cloud/users/{userid}",{userid:e})).then((e=>t.commit("addUserData",e))).catch((t=>{throw t})))).catch((s=>t.commit("API_FAILURE",{userid:e,error:s}))),enableDisableUser(t,e){let{userid:s,enabled:r=!0}=e;const i=r?"enable":"disable";return g().then((e=>A((0,u.KT)("cloud/users/{userid}/{userStatus}",{userid:s,userStatus:i})).then((e=>t.commit("enableDisableUser",{userid:s,enabled:r}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:s,error:e})))},async setUserData(t,e){let{userid:s,key:r,value:i}=e;const o=["email","displayname","manager"];if(-1!==["email","language","quota","displayname","password","manager"].indexOf(r)&&"string"==typeof i&&(-1===o.indexOf(r)&&i.length>0||-1!==o.indexOf(r)))try{return await g(),await A((0,u.KT)("cloud/users/{userid}",{userid:s}),{key:r,value:i}),t.commit("setUserData",{userid:s,key:r,value:i})}catch(e){t.commit("API_FAILURE",{userid:s,error:e})}return Promise.reject(new Error("Invalid request data"))},sendWelcomeMail:(t,e)=>g().then((t=>E((0,u.KT)("cloud/users/{userid}/welcome",{userid:e})).then((t=>!0)).catch((t=>{throw t})))).catch((s=>t.commit("API_FAILURE",{userid:e,error:s})))}};var U=r(32981),T=r(96763);const C={apps:[],bundles:(0,U.C)("settings","appstoreBundles",[]),categories:[],updateCount:(0,U.C)("settings","appstoreUpdateCount",0),loading:{},gettingCategoriesPromise:null},$={APPS_API_FAILURE(e,s){(0,c.Qg)(t("settings","An error occurred during the request. Unable to proceed.")+"
"+s.error.response.data.data.message,{isHTML:!0}),T.error(e,s)},initCategories(t,e){let{categories:s,updateCount:r}=e;t.categories=s,t.updateCount=r},updateCategories(t,e){t.gettingCategoriesPromise=e},setUpdateCount(t,e){t.updateCount=e},addCategory(t,e){t.categories.push(e)},appendCategories(t,e){t.categories=e},setAllApps(t,e){t.apps=e},setError(t,e){let{appId:s,error:r}=e;Array.isArray(s)||(s=[s]),s.forEach((e=>{t.apps.find((t=>t.id===e)).error=r}))},clearError(t,e){let{appId:s,error:r}=e;t.apps.find((t=>t.id===s)).error=null},enableApp(t,e){let{appId:s,groups:r}=e;const i=t.apps.find((t=>t.id===s));i.active=!0,i.groups=r},setInstallState(t,e){let{appId:s,canInstall:r}=e;const i=t.apps.find((t=>t.id===s));i&&(i.canInstall=!0===r)},disableApp(t,e){const s=t.apps.find((t=>t.id===e));s.active=!1,s.groups=[],s.removable&&(s.canUnInstall=!0)},uninstallApp(t,e){t.apps.find((t=>t.id===e)).active=!1,t.apps.find((t=>t.id===e)).groups=[],t.apps.find((t=>t.id===e)).needsDownload=!0,t.apps.find((t=>t.id===e)).installed=!1,t.apps.find((t=>t.id===e)).canUnInstall=!1,t.apps.find((t=>t.id===e)).canInstall=!0},updateApp(t,e){const s=t.apps.find((t=>t.id===e)),r=s.update;s.update=null,s.version=r,t.updateCount--},resetApps(t){t.apps=[]},reset(t){t.apps=[],t.categories=[],t.updateCount=0},startLoading(t,e){Array.isArray(e)?e.forEach((e=>{i.Ay.set(t.loading,e,!0)})):i.Ay.set(t.loading,e,!0)},stopLoading(t,e){Array.isArray(e)?e.forEach((e=>{i.Ay.set(t.loading,e,!1)})):i.Ay.set(t.loading,e,!1)}},F={enableApp(e,s){let r,{appId:i,groups:o}=s;return r=Array.isArray(i)?i:[i],g().then((s=>(e.commit("startLoading",r),e.commit("startLoading","install"),E((0,u.Jv)("settings/apps/enable"),{appIds:r,groups:o}).then((s=>(e.commit("stopLoading",r),e.commit("stopLoading","install"),r.forEach((t=>{e.commit("enableApp",{appId:t,groups:o})})),p.Ay.get((0,u.Jv)("apps/files/")).then((()=>{s.data.update_required&&((0,c.cf)(t("settings","The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds."),{onClick:()=>window.location.reload(),close:!1}),setTimeout((function(){location.reload()}),5e3))})).catch((()=>{Array.isArray(i)||((0,c.Qg)(t("settings","Error: This app cannot be enabled because it makes the server unstable")),e.commit("setError",{appId:r,error:t("settings","Error: This app cannot be enabled because it makes the server unstable")}),e.dispatch("disableApp",{appId:i}))}))))).catch((t=>{e.commit("stopLoading",r),e.commit("stopLoading","install"),e.commit("setError",{appId:r,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:i,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:i,error:t})))},forceEnableApp(t,e){let s,{appId:r,groups:i}=e;return s=Array.isArray(r)?r:[r],g().then((()=>(t.commit("startLoading",s),t.commit("startLoading","install"),E((0,u.Jv)("settings/apps/force"),{appId:r}).then((e=>{t.commit("setInstallState",{appId:r,canInstall:!0})})).catch((e=>{t.commit("stopLoading",s),t.commit("stopLoading","install"),t.commit("setError",{appId:s,error:e.response.data.data.message}),t.commit("APPS_API_FAILURE",{appId:r,error:e})})).finally((()=>{t.commit("stopLoading",s),t.commit("stopLoading","install")}))))).catch((e=>t.commit("API_FAILURE",{appId:r,error:e})))},disableApp(t,e){let s,{appId:r}=e;return s=Array.isArray(r)?r:[r],g().then((e=>(t.commit("startLoading",s),E((0,u.Jv)("settings/apps/disable"),{appIds:s}).then((e=>(t.commit("stopLoading",s),s.forEach((e=>{t.commit("disableApp",e)})),!0))).catch((e=>{t.commit("stopLoading",s),t.commit("APPS_API_FAILURE",{appId:r,error:e})}))))).catch((e=>t.commit("API_FAILURE",{appId:r,error:e})))},uninstallApp(t,e){let{appId:s}=e;return g().then((e=>(t.commit("startLoading",s),f((0,u.Jv)(`settings/apps/uninstall/${s}`)).then((e=>(t.commit("stopLoading",s),t.commit("uninstallApp",s),!0))).catch((e=>{t.commit("stopLoading",s),t.commit("APPS_API_FAILURE",{appId:s,error:e})}))))).catch((e=>t.commit("API_FAILURE",{appId:s,error:e})))},updateApp(t,e){let{appId:s}=e;return g().then((e=>(t.commit("startLoading",s),t.commit("startLoading","install"),f((0,u.Jv)(`settings/apps/update/${s}`)).then((e=>(t.commit("stopLoading","install"),t.commit("stopLoading",s),t.commit("updateApp",s),!0))).catch((e=>{t.commit("stopLoading",s),t.commit("stopLoading","install"),t.commit("APPS_API_FAILURE",{appId:s,error:e})}))))).catch((e=>t.commit("API_FAILURE",{appId:s,error:e})))},getAllApps:t=>(t.commit("startLoading","list"),f((0,u.Jv)("settings/apps/list")).then((e=>(t.commit("setAllApps",e.data.apps),t.commit("stopLoading","list"),!0))).catch((e=>t.commit("API_FAILURE",e)))),async getCategories(t){let{shouldRefetchCategories:e=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(e||!t.state.gettingCategoriesPromise){t.commit("startLoading","categories");try{const e=f((0,u.Jv)("settings/apps/categories"));t.commit("updateCategories",e);const s=await e;return s.data.length>0?(t.commit("appendCategories",s.data),t.commit("stopLoading","categories"),!0):(t.commit("stopLoading","categories"),!1)}catch(e){t.commit("API_FAILURE",e)}}return t.state.gettingCategoriesPromise}},S={state:C,mutations:$,getters:{loading:t=>function(e){return t.loading[e]},getCategories:t=>t.categories,getAllApps:t=>t.apps,getAppBundles:t=>t.bundles,getUpdateCount:t=>t.updateCount,getCategoryById:t=>e=>t.categories.find((t=>t.id===e))},actions:F},x={serverData:(0,U.C)("settings","usersSettings",{})},D={setServerData(t,e){t.serverData=e}},G={state:x,mutations:D,getters:{getServerData:t=>t.serverData},actions:{}},M={state:{},mutations:{},getters:{},actions:{setAppConfig(t,e){let{app:s,key:r,value:i}=e;return g().then((t=>E((0,u.KT)("apps/provisioning_api/api/v1/config/apps/{app}/{key}",{app:s,key:r}),{value:i}).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{app:s,key:r,value:i,error:e})))}}};var j=r(96763);i.Ay.use(o.Ay);const k={API_FAILURE(e,s){try{const e=s.error.response.data.ocs.meta.message;(0,c.Qg)(t("settings","An error occurred during the request. Unable to proceed.")+"
"+e,{isHTML:!0})}catch(e){(0,c.Qg)(t("settings","An error occurred during the request. Unable to proceed."))}j.error(e,s)}};let B=null;const X=()=>(null===B&&(B=new o.il({modules:{users:_,apps:S,settings:G,oc:M},strict:!1,mutations:k})),B)},15916:(t,e,s)=>{"use strict";var r;s.d(e,{q:()=>r}),function(t){t[t.UserCount=1]="UserCount",t[t.GroupName=2]="GroupName"}(r||(r={}))},36620:(t,e,s)=>{"use strict";s.d(e,{A:()=>r});const r=(0,s(35947).YK)().setApp("settings").detectUser().build()},18539:(t,e,s)=>{"use strict";var r=s(85471),i=s(80284),o=s(58723),n=s(53334),a=s(22378);const d=(0,r.pM)({__name:"SettingsApp",setup:t=>({__sfc:!0,NcContent:a.A})}),c=(0,s(14486).A)(d,(function(){var t=this,e=t._self._c;return e(t._self._setupProxy.NcContent,{attrs:{"app-name":"settings"}},[e("router-view",{attrs:{name:"navigation"}}),t._v(" "),e("router-view"),t._v(" "),e("router-view",{attrs:{name:"sidebar"}})],1)}),[],!1,null,null,null).exports;var u=s(40173),p=s(63814);const l=[{name:"users",path:"/:index(index.php/)?settings/users",components:{default:()=>Promise.all([s.e(4208),s.e(7265),s.e(3239)]).then(s.bind(s,70094)),navigation:()=>Promise.all([s.e(4208),s.e(7265),s.e(3239)]).then(s.bind(s,39603))},props:!0,children:[{path:":selectedGroup",name:"group"}]},{path:"/:index(index.php/)?settings/apps",name:"apps",redirect:{name:"apps-category",params:{category:(0,s(32981).C)("settings","appstoreEnabled",!0)?"discover":"installed"}},components:{default:()=>Promise.all([s.e(4208),s.e(7265),s.e(4529)]).then(s.bind(s,54989)),navigation:()=>Promise.all([s.e(4208),s.e(7265),s.e(4529)]).then(s.bind(s,1615)),sidebar:()=>Promise.all([s.e(4208),s.e(7265),s.e(4529)]).then(s.bind(s,43469))},children:[{path:":category",name:"apps-category",children:[{path:":id",name:"apps-details"}]}]}];r.Ay.use(u.Ay);const m=new u.Ay({mode:"history",base:(0,p.Jv)(""),linkActiveClass:"active",routes:l});var h=s(31755),g=s(21777),f=s(65899);r.Ay.use(i.Ay,{defaultHtml:!1});const E=(0,h.P)();(0,o.O)(E,m),s.nc=(0,g.aV)(),r.Ay.prototype.t=n.Tl,r.Ay.prototype.n=n.zw,r.Ay.use(f.R2);const A=(0,f.Ey)();new r.Ay({router:m,store:E,pinia:A,render:t=>t(c),el:"#content"})},58723:(t,e)=>{function s(t,e){var r={name:t.name,path:t.path,hash:t.hash,query:t.query,params:t.params,fullPath:t.fullPath,meta:t.meta};return e&&(r.from=s(e)),Object.freeze(r)}e.O=function(t,e,r){var i=(r||{}).moduleName||"route";t.registerModule(i,{namespaced:!0,state:s(e.currentRoute),mutations:{ROUTE_CHANGED:function(e,r){t.state[i]=s(r.to,r.from)}}});var o,n=!1,a=t.watch((function(t){return t[i]}),(function(t){var s=t.fullPath;s!==o&&(null!=o&&(n=!0,e.push(t)),o=s)}),{sync:!0}),d=e.afterEach((function(e,s){n?n=!1:(o=e.fullPath,t.commit(i+"/ROUTE_CHANGED",{to:e,from:s}))}));return function(){null!=d&&d(),null!=a&&a(),t.unregisterModule(i)}}},35810:(t,e,s)=>{"use strict";s.d(e,{Al:()=>F,H4:()=>C,Q$:()=>$,R3:()=>y,VL:()=>N,lJ:()=>U,lT:()=>G,pt:()=>L,ur:()=>j,v7:()=>D});var r=s(35947),i=s(21777),o=s(43627),n=s(71225),a=s(63814),d=s(36117),c=s(44719),u=s(82680),p=(s(87485),s(53334)),l=s(380),m=s(65606),h=s(96763);const g=(0,r.YK)().setApp("@nextcloud/files").detectUser().build();var f=(t=>(t[t.NONE=0]="NONE",t[t.CREATE=4]="CREATE",t[t.READ=1]="READ",t[t.UPDATE=2]="UPDATE",t[t.DELETE=8]="DELETE",t[t.SHARE=16]="SHARE",t[t.ALL=31]="ALL",t))(f||{});const E=["d:getcontentlength","d:getcontenttype","d:getetag","d:getlastmodified","d:creationdate","d:displayname","d:quota-available-bytes","d:resourcetype","nc:has-preview","nc:is-encrypted","nc:mount-type","oc:comments-unread","oc:favorite","oc:fileid","oc:owner-display-name","oc:owner-id","oc:permissions","oc:size"],A={d:"DAV:",nc:"http://nextcloud.org/ns",oc:"http://owncloud.org/ns",ocs:"http://open-collaboration-services.org/ns"},I=function(){return void 0===window._nc_dav_properties&&(window._nc_dav_properties=[...E]),window._nc_dav_properties.map((t=>`<${t} />`)).join(" ")},b=function(){return void 0===window._nc_dav_namespaces&&(window._nc_dav_namespaces={...A}),Object.keys(window._nc_dav_namespaces).map((t=>`xmlns:${t}="${window._nc_dav_namespaces?.[t]}"`)).join(" ")},N=function(){return`\n\t\t\n\t\t\t\n\t\t\t\t${I()}\n\t\t\t\n\t\t`},y=function(t){return`\n\n\t\n\t\t\n\t\t\t\n\t\t\t\t${I()}\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t/files/${(0,i.HW)()?.uid}/\n\t\t\t\tinfinity\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\thttpd/unix-directory\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t0\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t${t}\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t100\n\t\t\t0\n\t\t\n\t\n`};var L=(t=>(t.Folder="folder",t.File="file",t))(L||{});const v=function(t,e){return null!==t.match(e)},R=(t,e)=>{if(t.id&&"number"!=typeof t.id)throw new Error("Invalid id type of value");if(!t.source)throw new Error("Missing mandatory source");try{new URL(t.source)}catch(t){throw new Error("Invalid source format, source must be a valid URL")}if(!t.source.startsWith("http"))throw new Error("Invalid source format, only http(s) is supported");if(t.displayname&&"string"!=typeof t.displayname)throw new Error("Invalid displayname type");if(t.mtime&&!(t.mtime instanceof Date))throw new Error("Invalid mtime type");if(t.crtime&&!(t.crtime instanceof Date))throw new Error("Invalid crtime type");if(!t.mime||"string"!=typeof t.mime||!t.mime.match(/^[-\w.]+\/[-+\w.]+$/gi))throw new Error("Missing or invalid mandatory mime");if("size"in t&&"number"!=typeof t.size&&void 0!==t.size)throw new Error("Invalid size type");if("permissions"in t&&void 0!==t.permissions&&!("number"==typeof t.permissions&&t.permissions>=f.NONE&&t.permissions<=f.ALL))throw new Error("Invalid permissions");if(t.owner&&null!==t.owner&&"string"!=typeof t.owner)throw new Error("Invalid owner type");if(t.attributes&&"object"!=typeof t.attributes)throw new Error("Invalid attributes type");if(t.root&&"string"!=typeof t.root)throw new Error("Invalid root type");if(t.root&&!t.root.startsWith("/"))throw new Error("Root must start with a leading slash");if(t.root&&!t.source.includes(t.root))throw new Error("Root must be part of the source");if(t.root&&v(t.source,e)){const s=t.source.match(e)[0];if(!t.source.includes((0,o.join)(s,t.root)))throw new Error("The root must be relative to the service. e.g /files/emma")}if(t.status&&!Object.values(w).includes(t.status))throw new Error("Status must be a valid NodeStatus")};var w=(t=>(t.NEW="new",t.FAILED="failed",t.LOADING="loading",t.LOCKED="locked",t))(w||{});class O{_data;_attributes;_knownDavService=/(remote|public)\.php\/(web)?dav/i;readonlyAttributes=Object.entries(Object.getOwnPropertyDescriptors(O.prototype)).filter((t=>"function"==typeof t[1].get&&"__proto__"!==t[0])).map((t=>t[0]));handler={set:(t,e,s)=>!this.readonlyAttributes.includes(e)&&Reflect.set(t,e,s),deleteProperty:(t,e)=>!this.readonlyAttributes.includes(e)&&Reflect.deleteProperty(t,e),get:(t,e,s)=>this.readonlyAttributes.includes(e)?(g.warn(`Accessing "Node.attributes.${e}" is deprecated, access it directly on the Node instance.`),Reflect.get(this,e)):Reflect.get(t,e,s)};constructor(t,e){R(t,e||this._knownDavService),this._data={displayname:t.attributes?.displayname,...t,attributes:{}},this._attributes=new Proxy(this._data.attributes,this.handler),this.update(t.attributes??{}),e&&(this._knownDavService=e)}get source(){return this._data.source.replace(/\/$/i,"")}get encodedSource(){const{origin:t}=new URL(this.source);return t+(0,n.O0)(this.source.slice(t.length))}get basename(){return(0,o.basename)(this.source)}get displayname(){return this._data.displayname||this.basename}set displayname(t){this._data.displayname=t}get extension(){return(0,o.extname)(this.source)}get dirname(){if(this.root){let t=this.source;this.isDavRessource&&(t=t.split(this._knownDavService).pop());const e=t.indexOf(this.root),s=this.root.replace(/\/$/,"");return(0,o.dirname)(t.slice(e+s.length)||"/")}const t=new URL(this.source);return(0,o.dirname)(t.pathname)}get mime(){return this._data.mime}get mtime(){return this._data.mtime}set mtime(t){this._data.mtime=t}get crtime(){return this._data.crtime}get size(){return this._data.size}set size(t){this.updateMtime(),this._data.size=t}get attributes(){return this._attributes}get permissions(){return null!==this.owner||this.isDavRessource?void 0!==this._data.permissions?this._data.permissions:f.NONE:f.READ}set permissions(t){this.updateMtime(),this._data.permissions=t}get owner(){return this.isDavRessource?this._data.owner:null}get isDavRessource(){return v(this.source,this._knownDavService)}get root(){return this._data.root?this._data.root.replace(/^(.+)\/$/,"$1"):this.isDavRessource&&(0,o.dirname)(this.source).split(this._knownDavService).pop()||null}get path(){if(this.root){let t=this.source;this.isDavRessource&&(t=t.split(this._knownDavService).pop());const e=t.indexOf(this.root),s=this.root.replace(/\/$/,"");return t.slice(e+s.length)||"/"}return(this.dirname+"/"+this.basename).replace(/\/\//g,"/")}get fileid(){return this._data?.id}get status(){return this._data?.status}set status(t){this._data.status=t}move(t){R({...this._data,source:t},this._knownDavService);const e=this.basename;this._data.source=t,this.displayname===e&&this.basename!==e&&(this.displayname=this.basename),this.updateMtime()}rename(t){if(t.includes("/"))throw new Error("Invalid basename");this.move((0,o.dirname)(this.source)+"/"+t)}updateMtime(){this._data.mtime&&(this._data.mtime=new Date)}update(t){for(const[e,s]of Object.entries(t))try{void 0===s?delete this.attributes[e]:this.attributes[e]=s}catch(t){if(t instanceof TypeError)continue;throw t}}}class P extends O{get type(){return L.File}}class _ extends O{constructor(t){super({...t,mime:"httpd/unix-directory"})}get type(){return L.Folder}get extension(){return null}get mime(){return"httpd/unix-directory"}}const U=(0,u.f)()?`/files/${(0,u.G)()}`:`/files/${(0,i.HW)()?.uid}`,T=function(){const t=(0,a.dC)("dav");return(0,u.f)()?t.replace("remote.php","public.php"):t}(),C=function(t=T,e={}){const s=(0,c.UU)(t,{headers:e});function r(t){s.setHeaders({...e,"X-Requested-With":"XMLHttpRequest",requesttoken:t??""})}return(0,i.zo)(r),r((0,i.do)()),(0,c.Gu)().patch("fetch",((t,e)=>{const s=e.headers;return s?.method&&(e.method=s.method,delete s.method),fetch(t,e)})),s},$=(t,e="/",s=U)=>{const r=new AbortController;return new d.CancelablePromise((async(i,o,n)=>{n((()=>r.abort()));try{i((await t.getDirectoryContents(`${s}${e}`,{signal:r.signal,details:!0,data:`\n\t\t\n\t\t\t\n\t\t\t\t${I()}\n\t\t\t\n\t\t\t\n\t\t\t\t1\n\t\t\t\n\t\t`,headers:{method:"REPORT"},includeSelf:!0})).data.filter((t=>t.filename!==e)).map((t=>F(t,s))))}catch(t){o(t)}}))},F=function(t,e=U,s=T){let r=(0,i.HW)()?.uid;if((0,u.f)())r=r??"anonymous";else if(!r)throw new Error("No user id found");const o=t.props,n=function(t=""){let e=f.NONE;return t?((t.includes("C")||t.includes("K"))&&(e|=f.CREATE),t.includes("G")&&(e|=f.READ),(t.includes("W")||t.includes("N")||t.includes("V"))&&(e|=f.UPDATE),t.includes("D")&&(e|=f.DELETE),t.includes("R")&&(e|=f.SHARE),e):e}(o?.permissions),a=String(o?.["owner-id"]||r),d=o.fileid||0,c={id:d,source:`${s}${t.filename}`,mtime:new Date(Date.parse(t.lastmod)),mime:t.mime||"application/octet-stream",displayname:void 0!==o.displayname?String(o.displayname):void 0,size:o?.size||Number.parseInt(o.getcontentlength||"0"),status:d<0?w.FAILED:void 0,permissions:n,owner:a,root:e,attributes:{...t,...o,hasPreview:o?.["has-preview"]}};return delete c.attributes?.props,"file"===t.type?new P(c):new _(c)};Error;const S=["B","KB","MB","GB","TB","PB"],x=["B","KiB","MiB","GiB","TiB","PiB"];function D(t,e=!1,s=!1,r=!1){s=s&&!r,"string"==typeof t&&(t=Number(t));let i=t>0?Math.floor(Math.log(t)/Math.log(r?1e3:1024)):0;i=Math.min((s?x.length:S.length)-1,i);const o=s?x[i]:S[i];let n=(t/Math.pow(r?1e3:1024,i)).toFixed(1);return!0===e&&0===i?("0.0"!==n?"< 1 ":"0 ")+(s?x[1]:S[1]):(n=i<2?parseFloat(n).toFixed(0):parseFloat(n).toLocaleString((0,p.lO)()),n+" "+o)}function G(t,e=!1){try{t=`${t}`.toLocaleLowerCase().replaceAll(/\s+/g,"").replaceAll(",",".")}catch(t){return null}const s=t.match(/^([0-9]*(\.[0-9]*)?)([kmgtp]?)(i?)b?$/);if(null===s||"."===s[1]||""===s[1])return null;const r=`${s[1]}`,i="i"===s[4]||e?1024:1e3;return Math.round(Number.parseFloat(r)*i**{"":0,k:1,m:2,g:3,t:4,p:5,e:6}[s[3]])}function M(t){return t instanceof Date?t.toISOString():String(t)}function j(t,e={}){const s={sortingMode:"basename",sortingOrder:"asc",...e};return function(t,e,s){s=s??[];const r=(e=e??[t=>t]).map(((t,e)=>"asc"===(s[e]??"asc")?1:-1)),i=Intl.Collator([(0,p.Z0)(),(0,p.lO)()],{numeric:!0,usage:"sort"});return[...t].sort(((t,s)=>{for(const[o,n]of e.entries()){const e=i.compare(M(n(t)),M(n(s)));if(0!==e)return e*r[o]}return 0}))}(t,[...s.sortFavoritesFirst?[t=>1!==t.attributes?.favorite]:[],...s.sortFoldersFirst?[t=>"folder"!==t.type]:[],..."basename"!==s.sortingMode?[t=>t[s.sortingMode]]:[],t=>{return(e=t.attributes?.displayname||t.basename).lastIndexOf(".")>0?e.slice(0,e.lastIndexOf(".")):e;var e},t=>t.basename],[...s.sortFavoritesFirst?["asc"]:[],...s.sortFoldersFirst?["asc"]:[],..."mtime"===s.sortingMode?["asc"===s.sortingOrder?"desc":"asc"]:[],..."mtime"!==s.sortingMode&&"basename"!==s.sortingMode?[s.sortingOrder]:[],s.sortingOrder,s.sortingOrder])}var k={};!function(t){const e=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",s="["+e+"]["+e+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*",r=new RegExp("^"+s+"$");t.isExist=function(t){return void 0!==t},t.isEmptyObject=function(t){return 0===Object.keys(t).length},t.merge=function(t,e,s){if(e){const r=Object.keys(e),i=r.length;for(let o=0;o!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(t,e,s){return t}};B.buildOptions=function(t){return Object.assign({},X,t)},B.defaultOptions=X,!Number.parseInt&&window.parseInt&&(Number.parseInt=window.parseInt),!Number.parseFloat&&window.parseFloat&&(Number.parseFloat=window.parseFloat),new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");var V={};function K(t,e,s){let r;const i={};for(let o=0;o0&&(i[e.textNodeName]=r):void 0!==r&&(i[e.textNodeName]=r),i}function q(t){const e=Object.keys(t);for(let t=0;t`,o=!1;continue}if(d===e.commentPropName){i+=r+`\x3c!--${a[d][0][e.textNodeName]}--\x3e`,o=!0;continue}if("?"===d[0]){const t=Z(a[":@"],e),s="?xml"===d?"":r;let n=a[d][0][e.textNodeName];n=0!==n.length?" "+n:"",i+=s+`<${d}${n}${t}?>`,o=!0;continue}let u=r;""!==u&&(u+=e.indentBy);const p=r+`<${d}${Z(a[":@"],e)}`,l=Q(a[d],e,c,u);-1!==e.unpairedTags.indexOf(d)?e.suppressUnpairedNode?i+=p+">":i+=p+"/>":l&&0!==l.length||!e.suppressEmptyNode?l&&l.endsWith(">")?i+=p+`>${l}${r}`:(i+=p+">",l&&""!==r&&(l.includes("/>")||l.includes("`):i+=p+"/>",o=!0}return i}function Y(t){const e=Object.keys(t);for(let s=0;s0&&e.processEntities)for(let s=0;s0&&(s="\n"),Q(t,e,"",s)},rt={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&"},{regex:new RegExp(">","g"),val:">"},{regex:new RegExp("<","g"),val:"<"},{regex:new RegExp("'","g"),val:"'"},{regex:new RegExp('"',"g"),val:"""}],processEntities:!0,stopNodes:[],oneListGroup:!1};function it(t){this.options=Object.assign({},rt,t),this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=at),this.processTextOrObjNode=ot,this.options.format?(this.indentate=nt,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function ot(t,e,s){const r=this.j2x(t,s+1);return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,r.attrStr,s):this.buildObjectNode(r.val,e,r.attrStr,s)}function nt(t){return this.options.indentBy.repeat(t)}function at(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}it.prototype.build=function(t){return this.options.preserveOrder?st(t,this.options):(Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&(t={[this.options.arrayNodeName]:t}),this.j2x(t,0).val)},it.prototype.j2x=function(t,e){let s="",r="";for(let i in t)if(Object.prototype.hasOwnProperty.call(t,i))if(void 0===t[i])this.isAttribute(i)&&(r+="");else if(null===t[i])this.isAttribute(i)?r+="":"?"===i[0]?r+=this.indentate(e)+"<"+i+"?"+this.tagEndChar:r+=this.indentate(e)+"<"+i+"/"+this.tagEndChar;else if(t[i]instanceof Date)r+=this.buildTextValNode(t[i],i,"",e);else if("object"!=typeof t[i]){const o=this.isAttribute(i);if(o)s+=this.buildAttrPairStr(o,""+t[i]);else if(i===this.options.textNodeName){let e=this.options.tagValueProcessor(i,""+t[i]);r+=this.replaceEntitiesValue(e)}else r+=this.buildTextValNode(t[i],i,"",e)}else if(Array.isArray(t[i])){const s=t[i].length;let o="",n="";for(let a=0;a"+t+i}},it.prototype.closeTag=function(t){let e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":`>`+this.newLine;if(!1!==this.options.commentPropName&&e===this.options.commentPropName)return this.indentate(r)+`\x3c!--${t}--\x3e`+this.newLine;if("?"===e[0])return this.indentate(r)+"<"+e+s+"?"+this.tagEndChar;{let i=this.options.tagValueProcessor(e,t);return i=this.replaceEntitiesValue(i),""===i?this.indentate(r)+"<"+e+s+this.closeTag(e)+this.tagEndChar:this.indentate(r)+"<"+e+s+">"+i+"0&&this.options.processEntities)for(let e=0;eh.error("SEMVER",...t):()=>{},ct={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:16,MAX_SAFE_BUILD_LENGTH:250,MAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER||9007199254740991,RELEASE_TYPES:["major","premajor","minor","preminor","patch","prepatch","prerelease"],SEMVER_SPEC_VERSION:"2.0.0",FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2},ut={exports:{}};!function(t,e){const{MAX_SAFE_COMPONENT_LENGTH:s,MAX_SAFE_BUILD_LENGTH:r,MAX_LENGTH:i}=ct,o=dt,n=(e=t.exports={}).re=[],a=e.safeRe=[],d=e.src=[],c=e.t={};let u=0;const p="[a-zA-Z0-9-]",l=[["\\s",1],["\\d",i],[p,r]],m=(t,e,s)=>{const r=(t=>{for(const[e,s]of l)t=t.split(`${e}*`).join(`${e}{0,${s}}`).split(`${e}+`).join(`${e}{1,${s}}`);return t})(e),i=u++;o(t,i,e),c[t]=i,d[i]=e,n[i]=new RegExp(e,s?"g":void 0),a[i]=new RegExp(r,s?"g":void 0)};m("NUMERICIDENTIFIER","0|[1-9]\\d*"),m("NUMERICIDENTIFIERLOOSE","\\d+"),m("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${p}*`),m("MAINVERSION",`(${d[c.NUMERICIDENTIFIER]})\\.(${d[c.NUMERICIDENTIFIER]})\\.(${d[c.NUMERICIDENTIFIER]})`),m("MAINVERSIONLOOSE",`(${d[c.NUMERICIDENTIFIERLOOSE]})\\.(${d[c.NUMERICIDENTIFIERLOOSE]})\\.(${d[c.NUMERICIDENTIFIERLOOSE]})`),m("PRERELEASEIDENTIFIER",`(?:${d[c.NUMERICIDENTIFIER]}|${d[c.NONNUMERICIDENTIFIER]})`),m("PRERELEASEIDENTIFIERLOOSE",`(?:${d[c.NUMERICIDENTIFIERLOOSE]}|${d[c.NONNUMERICIDENTIFIER]})`),m("PRERELEASE",`(?:-(${d[c.PRERELEASEIDENTIFIER]}(?:\\.${d[c.PRERELEASEIDENTIFIER]})*))`),m("PRERELEASELOOSE",`(?:-?(${d[c.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${d[c.PRERELEASEIDENTIFIERLOOSE]})*))`),m("BUILDIDENTIFIER",`${p}+`),m("BUILD",`(?:\\+(${d[c.BUILDIDENTIFIER]}(?:\\.${d[c.BUILDIDENTIFIER]})*))`),m("FULLPLAIN",`v?${d[c.MAINVERSION]}${d[c.PRERELEASE]}?${d[c.BUILD]}?`),m("FULL",`^${d[c.FULLPLAIN]}$`),m("LOOSEPLAIN",`[v=\\s]*${d[c.MAINVERSIONLOOSE]}${d[c.PRERELEASELOOSE]}?${d[c.BUILD]}?`),m("LOOSE",`^${d[c.LOOSEPLAIN]}$`),m("GTLT","((?:<|>)?=?)"),m("XRANGEIDENTIFIERLOOSE",`${d[c.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),m("XRANGEIDENTIFIER",`${d[c.NUMERICIDENTIFIER]}|x|X|\\*`),m("XRANGEPLAIN",`[v=\\s]*(${d[c.XRANGEIDENTIFIER]})(?:\\.(${d[c.XRANGEIDENTIFIER]})(?:\\.(${d[c.XRANGEIDENTIFIER]})(?:${d[c.PRERELEASE]})?${d[c.BUILD]}?)?)?`),m("XRANGEPLAINLOOSE",`[v=\\s]*(${d[c.XRANGEIDENTIFIERLOOSE]})(?:\\.(${d[c.XRANGEIDENTIFIERLOOSE]})(?:\\.(${d[c.XRANGEIDENTIFIERLOOSE]})(?:${d[c.PRERELEASELOOSE]})?${d[c.BUILD]}?)?)?`),m("XRANGE",`^${d[c.GTLT]}\\s*${d[c.XRANGEPLAIN]}$`),m("XRANGELOOSE",`^${d[c.GTLT]}\\s*${d[c.XRANGEPLAINLOOSE]}$`),m("COERCEPLAIN",`(^|[^\\d])(\\d{1,${s}})(?:\\.(\\d{1,${s}}))?(?:\\.(\\d{1,${s}}))?`),m("COERCE",`${d[c.COERCEPLAIN]}(?:$|[^\\d])`),m("COERCEFULL",d[c.COERCEPLAIN]+`(?:${d[c.PRERELEASE]})?(?:${d[c.BUILD]})?(?:$|[^\\d])`),m("COERCERTL",d[c.COERCE],!0),m("COERCERTLFULL",d[c.COERCEFULL],!0),m("LONETILDE","(?:~>?)"),m("TILDETRIM",`(\\s*)${d[c.LONETILDE]}\\s+`,!0),e.tildeTrimReplace="$1~",m("TILDE",`^${d[c.LONETILDE]}${d[c.XRANGEPLAIN]}$`),m("TILDELOOSE",`^${d[c.LONETILDE]}${d[c.XRANGEPLAINLOOSE]}$`),m("LONECARET","(?:\\^)"),m("CARETTRIM",`(\\s*)${d[c.LONECARET]}\\s+`,!0),e.caretTrimReplace="$1^",m("CARET",`^${d[c.LONECARET]}${d[c.XRANGEPLAIN]}$`),m("CARETLOOSE",`^${d[c.LONECARET]}${d[c.XRANGEPLAINLOOSE]}$`),m("COMPARATORLOOSE",`^${d[c.GTLT]}\\s*(${d[c.LOOSEPLAIN]})$|^$`),m("COMPARATOR",`^${d[c.GTLT]}\\s*(${d[c.FULLPLAIN]})$|^$`),m("COMPARATORTRIM",`(\\s*)${d[c.GTLT]}\\s*(${d[c.LOOSEPLAIN]}|${d[c.XRANGEPLAIN]})`,!0),e.comparatorTrimReplace="$1$2$3",m("HYPHENRANGE",`^\\s*(${d[c.XRANGEPLAIN]})\\s+-\\s+(${d[c.XRANGEPLAIN]})\\s*$`),m("HYPHENRANGELOOSE",`^\\s*(${d[c.XRANGEPLAINLOOSE]})\\s+-\\s+(${d[c.XRANGEPLAINLOOSE]})\\s*$`),m("STAR","(<|>)?=?\\s*\\*"),m("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),m("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")}(ut,ut.exports);var pt=ut.exports;Object.freeze({loose:!0}),Object.freeze({});const lt=/^[0-9]+$/,mt=(t,e)=>{const s=lt.test(t),r=lt.test(e);return s&&r&&(t=+t,e=+e),t===e?0:s&&!r?-1:r&&!s?1:tmt(e,t)};const{MAX_LENGTH:gt,MAX_SAFE_INTEGER:ft}=ct,{safeRe:Et,t:At}=pt,{compareIdentifiers:It}=ht;l.m}},o={};function n(t){var e=o[t];if(void 0!==e)return e.exports;var s=o[t]={id:t,loaded:!1,exports:{}};return i[t].call(s.exports,s,s.exports,n),s.loaded=!0,s.exports}n.m=i,e=[],n.O=(t,s,r,i)=>{if(!s){var o=1/0;for(u=0;u=i)&&Object.keys(n.O).every((t=>n.O[t](s[d])))?s.splice(d--,1):(a=!1,i0&&e[u-1][2]>i;u--)e[u]=e[u-1];e[u]=[s,r,i]},n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var s in e)n.o(e,s)&&!n.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},n.f={},n.e=t=>Promise.all(Object.keys(n.f).reduce(((e,s)=>(n.f[s](t,e),e)),[])),n.u=t=>(({3239:"settings-users",4529:"settings-apps-view"}[t]||t)+"-"+t+".js?v="+{1521:"220bf24c534d0cf00eb6",3239:"2f2de15c0dd418857aac",4529:"c318619b71913b3ce3fd",5085:"4f10478b69e38cddada5",7265:"715398afd1ab50836642",8737:"6fee9973f6f3e1ab1b5a",9291:"3812924d520899b5c9f4",9551:"ad50a950026c0cfc30e2"}[t]),n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),s={},r="nextcloud:",n.l=(t,e,i,o)=>{if(s[t])s[t].push(e);else{var a,d;if(void 0!==i)for(var c=document.getElementsByTagName("script"),u=0;u{a.onerror=a.onload=null,clearTimeout(m);var i=s[t];if(delete s[t],a.parentNode&&a.parentNode.removeChild(a),i&&i.forEach((t=>t(r))),e)return e(r)},m=setTimeout(l.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=l.bind(null,a.onerror),a.onload=l.bind(null,a.onload),d&&document.head.appendChild(a)}},n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),n.j=2689,(()=>{var t;n.g.importScripts&&(t=n.g.location+"");var e=n.g.document;if(!t&&e&&(e.currentScript&&"SCRIPT"===e.currentScript.tagName.toUpperCase()&&(t=e.currentScript.src),!t)){var s=e.getElementsByTagName("script");if(s.length)for(var r=s.length-1;r>-1&&(!t||!/^http(s?):/.test(t));)t=s[r--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=t})(),(()=>{n.b=document.baseURI||self.location.href;var t={2689:0};n.f.j=(e,s)=>{var r=n.o(t,e)?t[e]:void 0;if(0!==r)if(r)s.push(r[2]);else{var i=new Promise(((s,i)=>r=t[e]=[s,i]));s.push(r[2]=i);var o=n.p+n.u(e),a=new Error;n.l(o,(s=>{if(n.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var i=s&&("load"===s.type?"missing":s.type),o=s&&s.target&&s.target.src;a.message="Loading chunk "+e+" failed.\n("+i+": "+o+")",a.name="ChunkLoadError",a.type=i,a.request=o,r[1](a)}}),"chunk-"+e,e)}},n.O.j=e=>0===t[e];var e=(e,s)=>{var r,i,o=s[0],a=s[1],d=s[2],c=0;if(o.some((e=>0!==t[e]))){for(r in a)n.o(a,r)&&(n.m[r]=a[r]);if(d)var u=d(n)}for(e&&e(s);cn(18539)));a=n.O(a)})(); +//# sourceMappingURL=settings-vue-settings-apps-users-management.js.map?v=12bec3097cedfd37d1aa \ No newline at end of file diff --git a/dist/settings-vue-settings-apps-users-management.js.map b/dist/settings-vue-settings-apps-users-management.js.map index f7369221237e3..8b50696815b19 100644 --- a/dist/settings-vue-settings-apps-users-management.js.map +++ b/dist/settings-vue-settings-apps-users-management.js.map @@ -1 +1 @@ -{"version":3,"file":"settings-vue-settings-apps-users-management.js?v=87a36f9c9dfd7b26efbb","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/settings/src/store/api.js","webpack:///nextcloud/apps/settings/src/store/users.js","webpack:///nextcloud/apps/settings/src/store/apps.js","webpack:///nextcloud/apps/settings/src/store/users-settings.js","webpack:///nextcloud/apps/settings/src/store/oc.js","webpack:///nextcloud/apps/settings/src/store/index.js","webpack:///nextcloud/apps/settings/src/constants/GroupManagement.ts","webpack:///nextcloud/apps/settings/src/logger.ts","webpack:///nextcloud/apps/settings/src/views/SettingsApp.vue","webpack:///nextcloud/apps/settings/src/views/SettingsApp.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/views/SettingsApp.vue?3a67","webpack:///nextcloud/apps/settings/src/router/routes.ts","webpack:///nextcloud/apps/settings/src/router/index.ts","webpack:///nextcloud/apps/settings/src/main-apps-users-management.ts","webpack:///nextcloud/node_modules/vuex-router-sync/index.js","webpack:///nextcloud/node_modules/@nextcloud/files/dist/index.mjs","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport axios from '@nextcloud/axios'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\n\nconst sanitize = function(url) {\n\treturn url.replace(/\\/$/, '') // Remove last url slash\n}\n\nexport default {\n\n\t/**\n\t * This Promise is used to chain a request that require an admin password confirmation\n\t * Since chaining Promise have a very precise behavior concerning catch and then,\n\t * you'll need to be careful when using it.\n\t * e.g\n\t * // store\n\t * action(context) {\n\t * return api.requireAdmin().then((response) => {\n\t * return api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {API failure});\n\t * }).catch((error) => {requireAdmin failure});\n\t * }\n\t * // vue\n\t * this.$store.dispatch('action').then(() => {always executed})\n\t *\n\t * Since Promise.then().catch().then() will always execute the last then\n\t * this.$store.dispatch('action').then will always be executed\n\t *\n\t * If you want requireAdmin failure to also catch the API request failure\n\t * you will need to throw a new error in the api.get.catch()\n\t *\n\t * e.g\n\t * api.requireAdmin().then((response) => {\n\t * api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {throw error;});\n\t * }).catch((error) => {requireAdmin OR API failure});\n\t *\n\t * @return {Promise}\n\t */\n\trequireAdmin() {\n\t\treturn confirmPassword()\n\t},\n\tget(url, options) {\n\t\treturn axios.get(sanitize(url), options)\n\t},\n\tpost(url, data) {\n\t\treturn axios.post(sanitize(url), data)\n\t},\n\tpatch(url, data) {\n\t\treturn axios.patch(sanitize(url), data)\n\t},\n\tput(url, data) {\n\t\treturn axios.put(sanitize(url), data)\n\t},\n\tdelete(url, data) {\n\t\treturn axios.delete(sanitize(url), { params: data })\n\t},\n}\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getBuilder } from '@nextcloud/browser-storage'\nimport { getCapabilities } from '@nextcloud/capabilities'\nimport { parseFileSize } from '@nextcloud/files'\nimport { showError } from '@nextcloud/dialogs'\nimport { generateOcsUrl, generateUrl } from '@nextcloud/router'\nimport axios from '@nextcloud/axios'\n\nimport { GroupSorting } from '../constants/GroupManagement.ts'\nimport api from './api.js'\nimport logger from '../logger.ts'\n\nconst localStorage = getBuilder('settings').persist(true).build()\n\nconst defaults = {\n\tgroup: {\n\t\tid: '',\n\t\tname: '',\n\t\tusercount: 0,\n\t\tdisabled: 0,\n\t\tcanAdd: true,\n\t\tcanRemove: true,\n\t},\n}\n\nconst state = {\n\tusers: [],\n\tgroups: [],\n\torderBy: GroupSorting.UserCount,\n\tminPasswordLength: 0,\n\tusersOffset: 0,\n\tusersLimit: 25,\n\tdisabledUsersOffset: 0,\n\tdisabledUsersLimit: 25,\n\tuserCount: 0,\n\tshowConfig: {\n\t\tshowStoragePath: localStorage.getItem('account_settings__showStoragePath') === 'true',\n\t\tshowUserBackend: localStorage.getItem('account_settings__showUserBackend') === 'true',\n\t\tshowLastLogin: localStorage.getItem('account_settings__showLastLogin') === 'true',\n\t\tshowNewUserForm: localStorage.getItem('account_settings__showNewUserForm') === 'true',\n\t\tshowLanguages: localStorage.getItem('account_settings__showLanguages') === 'true',\n\t},\n}\n\nconst mutations = {\n\tappendUsers(state, usersObj) {\n\t\tconst existingUsers = state.users.map(({ id }) => id)\n\t\tconst newUsers = Object.values(usersObj)\n\t\t\t.filter(({ id }) => !existingUsers.includes(id))\n\n\t\tconst users = state.users.concat(newUsers)\n\t\tstate.usersOffset += state.usersLimit\n\t\tstate.users = users\n\t},\n\tupdateDisabledUsers(state, _usersObj) {\n\t\tstate.disabledUsersOffset += state.disabledUsersLimit\n\t},\n\tsetPasswordPolicyMinLength(state, length) {\n\t\tstate.minPasswordLength = length !== '' ? length : 0\n\t},\n\tinitGroups(state, { groups, orderBy, userCount }) {\n\t\tstate.groups = groups.map(group => Object.assign({}, defaults.group, group))\n\t\tstate.orderBy = orderBy\n\t\tstate.userCount = userCount\n\t},\n\taddGroup(state, { gid, displayName }) {\n\t\ttry {\n\t\t\tif (typeof state.groups.find((group) => group.id === gid) !== 'undefined') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// extend group to default values\n\t\t\tconst group = Object.assign({}, defaults.group, {\n\t\t\t\tid: gid,\n\t\t\t\tname: displayName,\n\t\t\t})\n\t\t\tstate.groups.unshift(group)\n\t\t} catch (e) {\n\t\t\tconsole.error('Can\\'t create group', e)\n\t\t}\n\t},\n\trenameGroup(state, { gid, displayName }) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tconst updatedGroup = state.groups[groupIndex]\n\t\t\tupdatedGroup.name = displayName\n\t\t\tstate.groups.splice(groupIndex, 1, updatedGroup)\n\t\t}\n\t},\n\tremoveGroup(state, gid) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tstate.groups.splice(groupIndex, 1)\n\t\t}\n\t},\n\taddUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// increase count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount++\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.push(gid)\n\t},\n\tremoveUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// lower count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount--\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t},\n\taddUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.push(gid)\n\t},\n\tremoveUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t},\n\tdeleteUser(state, userid) {\n\t\tconst userIndex = state.users.findIndex(user => user.id === userid)\n\t\tthis.commit('updateUserCounts', { user: state.users[userIndex], actionType: 'remove' })\n\t\tstate.users.splice(userIndex, 1)\n\t},\n\taddUserData(state, response) {\n\t\tconst user = response.data.ocs.data\n\t\tstate.users.unshift(user)\n\t\tthis.commit('updateUserCounts', { user, actionType: 'create' })\n\t},\n\tenableDisableUser(state, { userid, enabled }) {\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\tuser.enabled = enabled\n\t\tthis.commit('updateUserCounts', { user, actionType: enabled ? 'enable' : 'disable' })\n\t},\n\t// update active/disabled counts, groups counts\n\tupdateUserCounts(state, { user, actionType }) {\n\t\t// 0 is a special value\n\t\tif (state.userCount === 0) {\n\t\t\treturn\n\t\t}\n\n\t\tconst recentGroup = state.groups.find(group => group.id === '__nc_internal_recent')\n\t\tconst disabledGroup = state.groups.find(group => group.id === 'disabled')\n\t\tswitch (actionType) {\n\t\tcase 'enable':\n\t\tcase 'disable':\n\t\t\tdisabledGroup.usercount += user.enabled ? -1 : 1 // update Disabled Users count\n\t\t\trecentGroup.usercount += user.enabled ? 1 : -1\n\t\t\tstate.userCount += user.enabled ? 1 : -1 // update Active Users count\n\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\tgroup.disabled += user.enabled ? -1 : 1 // update group disabled count\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'create':\n\t\t\trecentGroup.usercount++\n\t\t\tstate.userCount++ // increment Active Users count\n\n\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\tstate.groups\n\t\t\t\t\t.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t .usercount++ // increment group total count\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'remove':\n\t\t\tif (user.enabled) {\n\t\t\t\trecentGroup.usercount--\n\t\t\t\tstate.userCount-- // decrement Active Users count\n\t\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t\tif (!group) {\n\t\t\t\t\t\tconsole.warn('User group ' + userGroup + ' does not exist during user removal')\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tgroup.usercount-- // decrement group total count\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tdisabledGroup.usercount-- // decrement Disabled Users count\n\t\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t\tgroup.disabled-- // decrement group disabled count\n\t\t\t\t})\n\t\t\t}\n\t\t\tbreak\n\t\tdefault:\n\t\t\tlogger.error(`Unknown action type in updateUserCounts: '${actionType}'`)\n\t\t\t// not throwing error to interrupt execution as this is not fatal\n\t\t}\n\t},\n\tsetUserData(state, { userid, key, value }) {\n\t\tif (key === 'quota') {\n\t\t\tconst humanValue = parseFileSize(value, true)\n\t\t\tstate.users.find(user => user.id === userid)[key][key] = humanValue !== null ? humanValue : value\n\t\t} else {\n\t\t\tstate.users.find(user => user.id === userid)[key] = value\n\t\t}\n\t},\n\n\t/**\n\t * Reset users list\n\t *\n\t * @param {object} state the store state\n\t */\n\tresetUsers(state) {\n\t\tstate.users = []\n\t\tstate.usersOffset = 0\n\t\tstate.disabledUsersOffset = 0\n\t},\n\n\tsetShowConfig(state, { key, value }) {\n\t\tlocalStorage.setItem(`account_settings__${key}`, JSON.stringify(value))\n\t\tstate.showConfig[key] = value\n\t},\n\n\tsetGroupSorting(state, sorting) {\n\t\tconst oldValue = state.orderBy\n\t\tstate.orderBy = sorting\n\n\t\t// Persist the value on the server\n\t\taxios.post(\n\t\t\tgenerateUrl('/settings/users/preferences/group.sortBy'),\n\t\t\t{\n\t\t\t\tvalue: String(sorting),\n\t\t\t},\n\t\t).catch((error) => {\n\t\t\tstate.orderBy = oldValue\n\t\t\tshowError(t('settings', 'Could not set group sorting'))\n\t\t\tlogger.error(error)\n\t\t})\n\t},\n}\n\nconst getters = {\n\tgetUsers(state) {\n\t\treturn state.users\n\t},\n\tgetGroups(state) {\n\t\treturn state.groups\n\t},\n\tgetSubadminGroups(state) {\n\t\t// Can't be subadmin of admin, recent, or disabled\n\t\treturn state.groups.filter(group => group.id !== 'admin' && group.id !== '__nc_internal_recent' && group.id !== 'disabled')\n\t},\n\tgetSortedGroups(state) {\n\t\tconst groups = [...state.groups]\n\t\tif (state.orderBy === GroupSorting.UserCount) {\n\t\t\treturn groups.sort((a, b) => {\n\t\t\t\tconst numA = a.usercount - a.disabled\n\t\t\t\tconst numB = b.usercount - b.disabled\n\t\t\t\treturn (numA < numB) ? 1 : (numB < numA ? -1 : a.name.localeCompare(b.name))\n\t\t\t})\n\t\t} else {\n\t\t\treturn groups.sort((a, b) => a.name.localeCompare(b.name))\n\t\t}\n\t},\n\tgetGroupSorting(state) {\n\t\treturn state.orderBy\n\t},\n\tgetPasswordPolicyMinLength(state) {\n\t\treturn state.minPasswordLength\n\t},\n\tgetUsersOffset(state) {\n\t\treturn state.usersOffset\n\t},\n\tgetUsersLimit(state) {\n\t\treturn state.usersLimit\n\t},\n\tgetDisabledUsersOffset(state) {\n\t\treturn state.disabledUsersOffset\n\t},\n\tgetDisabledUsersLimit(state) {\n\t\treturn state.disabledUsersLimit\n\t},\n\tgetUserCount(state) {\n\t\treturn state.userCount\n\t},\n\tgetShowConfig(state) {\n\t\treturn state.showConfig\n\t},\n}\n\nconst CancelToken = axios.CancelToken\nlet searchRequestCancelSource = null\n\nconst actions = {\n\n\t/**\n\t * search users\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @return {Promise}\n\t */\n\tsearchUsers(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search })).catch((error) => {\n\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t})\n\t},\n\n\t/**\n\t * Get user details\n\t *\n\t * @param {object} context store context\n\t * @param {string} userId user id\n\t * @return {Promise}\n\t */\n\tgetUser(context, userId) {\n\t\treturn api.get(generateOcsUrl(`cloud/users/${userId}`)).catch((error) => {\n\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t})\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @param {string} options.group Get users from group\n\t * @return {Promise}\n\t */\n\tgetUsers(context, { offset, limit, search, group }) {\n\t\tif (searchRequestCancelSource) {\n\t\t\tsearchRequestCancelSource.cancel('Operation canceled by another search request.')\n\t\t}\n\t\tsearchRequestCancelSource = CancelToken.source()\n\t\tsearch = typeof search === 'string' ? search : ''\n\n\t\t/**\n\t\t * Adding filters in the search bar such as in:files, in:users, etc.\n\t\t * collides with this particular search, so we need to remove them\n\t\t * here and leave only the original search query\n\t\t */\n\t\tsearch = search.replace(/in:[^\\s]+/g, '').trim()\n\n\t\tgroup = typeof group === 'string' ? group : ''\n\t\tif (group !== '') {\n\t\t\treturn api.get(generateOcsUrl('cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}', { group: encodeURIComponent(group), offset, limit, search }), {\n\t\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\t}\n\t\t\t\t\treturn usersCount\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }), {\n\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t})\n\t\t\t.then((response) => {\n\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t}\n\t\t\t\treturn usersCount\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t}\n\t\t\t})\n\t},\n\n\t/**\n\t * Get recent users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search query\n\t * @return {Promise}\n\t */\n\tasync getRecentUsers(context, { offset, limit, search }) {\n\t\tconst url = generateOcsUrl('cloud/users/recent?offset={offset}&limit={limit}&search={search}', { offset, limit, search })\n\t\ttry {\n\t\t\tconst response = await api.get(url)\n\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\tif (usersCount > 0) {\n\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t}\n\t\t\treturn usersCount\n\t\t} catch (error) {\n\t\t\tcontext.commit('API_FAILURE', error)\n\t\t}\n\t},\n\n\t/**\n\t * Get disabled users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param options.search\n\t * @return {Promise}\n\t */\n\tasync getDisabledUsers(context, { offset, limit, search }) {\n\t\tconst url = generateOcsUrl('cloud/users/disabled?offset={offset}&limit={limit}&search={search}', { offset, limit, search })\n\t\ttry {\n\t\t\tconst response = await api.get(url)\n\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\tif (usersCount > 0) {\n\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\tcontext.commit('updateDisabledUsers', response.data.ocs.data.users)\n\t\t\t}\n\t\t\treturn usersCount\n\t\t} catch (error) {\n\t\t\tcontext.commit('API_FAILURE', error)\n\t\t}\n\t},\n\n\tgetGroups(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tconst limitParam = limit === -1 ? '' : `&limit=${limit}`\n\t\treturn api.get(generateOcsUrl('cloud/groups?offset={offset}&search={search}', { offset, search }) + limitParam)\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.groups).length > 0) {\n\t\t\t\t\tresponse.data.ocs.data.groups.forEach(function(group) {\n\t\t\t\t\t\tcontext.commit('addGroup', { gid: group, displayName: group })\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search -\n\t * @return {Promise}\n\t */\n\tgetUsersFromList(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }))\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.users).length > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details from a groupid\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.groupid -\n\t * @return {Promise}\n\t */\n\tgetUsersFromGroup(context, { groupid, offset, limit }) {\n\t\treturn api.get(generateOcsUrl('cloud/users/{groupId}/details?offset={offset}&limit={limit}', { groupId: encodeURIComponent(groupid), offset, limit }))\n\t\t\t.then((response) => context.commit('getUsersFromList', response.data.ocs.data.users))\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetPasswordPolicyMinLength(context) {\n\t\tif (getCapabilities().password_policy && getCapabilities().password_policy.minLength) {\n\t\t\tcontext.commit('setPasswordPolicyMinLength', getCapabilities().password_policy.minLength)\n\t\t\treturn getCapabilities().password_policy.minLength\n\t\t}\n\t\treturn false\n\t},\n\n\t/**\n\t * Add group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\taddGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/groups'), { groupid: gid })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('addGroup', { gid, displayName: gid })\n\t\t\t\t\treturn { gid, displayName: gid }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { gid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from adding the user to a group that doesn't exists\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Rename group\n\t *\n\t * @param {object} context store context\n\t * @param {string} groupid Group id\n\t * @param {string} displayName Group display name\n\t * @return {Promise}\n\t */\n\trenameGroup(context, { groupid, displayName }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(groupid) }), { key: 'displayname', value: displayName })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('renameGroup', { gid: groupid, displayName })\n\t\t\t\t\treturn { groupid, displayName }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { groupid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from renaming the group\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Remove group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\tremoveGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(gid) }))\n\t\t\t\t.then((response) => context.commit('removeGroup', gid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { gid, error }))\n\t},\n\n\t/**\n\t * Add user to group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\t// let's throw one more time to prevent\n\t\t\t// the view from removing the user row on failure\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Add user to group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Mark all user devices for remote wipe\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tasync wipeUserDevices(context, userid) {\n\t\ttry {\n\t\t\tawait api.requireAdmin()\n\t\t\treturn await api.post(generateOcsUrl('cloud/users/{userid}/wipe', { userid }))\n\t\t} catch (error) {\n\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\treturn Promise.reject(new Error('Failed to wipe user devices'))\n\t\t}\n\t},\n\n\t/**\n\t * Delete a user\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tdeleteUser(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('deleteUser', userid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Add a user\n\t *\n\t * @param {object} context store context\n\t * @param {Function} context.commit -\n\t * @param {Function} context.dispatch -\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.password User password\n\t * @param {string} options.displayName User display name\n\t * @param {string} options.email User email\n\t * @param {string} options.groups User groups\n\t * @param {string} options.subadmin User subadmin groups\n\t * @param {string} options.quota User email\n\t * @param {string} options.language User language\n\t * @param {string} options.manager User manager\n\t * @return {Promise}\n\t */\n\taddUser({ commit, dispatch }, { userid, password, displayName, email, groups, subadmin, quota, language, manager }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users'), { userid, password, displayName, email, groups, subadmin, quota, language, manager })\n\t\t\t\t.then((response) => dispatch('addUserData', userid || response.data.ocs.data.id))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcommit('API_FAILURE', { userid, error })\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Get user data and commit addition\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\taddUserData(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.get(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('addUserData', response))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Enable or disable user\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {boolean} options.enabled User enablement status\n\t * @return {Promise}\n\t */\n\tenableDisableUser(context, { userid, enabled = true }) {\n\t\tconst userStatus = enabled ? 'enable' : 'disable'\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}/{userStatus}', { userid, userStatus }))\n\t\t\t\t.then((response) => context.commit('enableDisableUser', { userid, enabled }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Edit user data\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.key User field to edit\n\t * @param {string} options.value Value of the change\n\t * @return {Promise}\n\t */\n\tasync setUserData(context, { userid, key, value }) {\n\t\tconst allowedEmpty = ['email', 'displayname', 'manager']\n\t\tif (['email', 'language', 'quota', 'displayname', 'password', 'manager'].indexOf(key) !== -1) {\n\t\t\t// We allow empty email or displayname\n\t\t\tif (typeof value === 'string'\n\t\t\t\t&& (\n\t\t\t\t\t(allowedEmpty.indexOf(key) === -1 && value.length > 0)\n\t\t\t\t\t|| allowedEmpty.indexOf(key) !== -1\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\ttry {\n\t\t\t\t\tawait api.requireAdmin()\n\t\t\t\t\tawait api.put(generateOcsUrl('cloud/users/{userid}', { userid }), { key, value })\n\t\t\t\t\treturn context.commit('setUserData', { userid, key, value })\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn Promise.reject(new Error('Invalid request data'))\n\t},\n\n\t/**\n\t * Send welcome mail\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tsendWelcomeMail(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/welcome', { userid }))\n\t\t\t\t.then(response => true)\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport api from './api.js'\nimport Vue from 'vue'\nimport { generateUrl } from '@nextcloud/router'\nimport { showError, showInfo } from '@nextcloud/dialogs'\nimport { loadState } from '@nextcloud/initial-state'\n\nconst state = {\n\tapps: [],\n\tbundles: loadState('settings', 'appstoreBundles', []),\n\tcategories: [],\n\tupdateCount: loadState('settings', 'appstoreUpdateCount', 0),\n\tloading: {},\n\tgettingCategoriesPromise: null,\n}\n\nconst mutations = {\n\n\tAPPS_API_FAILURE(state, error) {\n\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.') + '
' + error.error.response.data.data.message, { isHTML: true })\n\t\tconsole.error(state, error)\n\t},\n\n\tinitCategories(state, { categories, updateCount }) {\n\t\tstate.categories = categories\n\t\tstate.updateCount = updateCount\n\t},\n\n\tupdateCategories(state, categoriesPromise) {\n\t\tstate.gettingCategoriesPromise = categoriesPromise\n\t},\n\n\tsetUpdateCount(state, updateCount) {\n\t\tstate.updateCount = updateCount\n\t},\n\n\taddCategory(state, category) {\n\t\tstate.categories.push(category)\n\t},\n\n\tappendCategories(state, categoriesArray) {\n\t\t// convert obj to array\n\t\tstate.categories = categoriesArray\n\t},\n\n\tsetAllApps(state, apps) {\n\t\tstate.apps = apps\n\t},\n\n\tsetError(state, { appId, error }) {\n\t\tif (!Array.isArray(appId)) {\n\t\t\tappId = [appId]\n\t\t}\n\t\tappId.forEach((_id) => {\n\t\t\tconst app = state.apps.find(app => app.id === _id)\n\t\t\tapp.error = error\n\t\t})\n\t},\n\n\tclearError(state, { appId, error }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.error = null\n\t},\n\n\tenableApp(state, { appId, groups }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = true\n\t\tapp.groups = groups\n\t},\n\n\tsetInstallState(state, { appId, canInstall }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tif (app) {\n\t\t\tapp.canInstall = canInstall === true\n\t\t}\n\t},\n\n\tdisableApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = false\n\t\tapp.groups = []\n\t\tif (app.removable) {\n\t\t\tapp.canUnInstall = true\n\t\t}\n\t},\n\n\tuninstallApp(state, appId) {\n\t\tstate.apps.find(app => app.id === appId).active = false\n\t\tstate.apps.find(app => app.id === appId).groups = []\n\t\tstate.apps.find(app => app.id === appId).needsDownload = true\n\t\tstate.apps.find(app => app.id === appId).installed = false\n\t\tstate.apps.find(app => app.id === appId).canUnInstall = false\n\t\tstate.apps.find(app => app.id === appId).canInstall = true\n\t},\n\n\tupdateApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tconst version = app.update\n\t\tapp.update = null\n\t\tapp.version = version\n\t\tstate.updateCount--\n\n\t},\n\n\tresetApps(state) {\n\t\tstate.apps = []\n\t},\n\treset(state) {\n\t\tstate.apps = []\n\t\tstate.categories = []\n\t\tstate.updateCount = 0\n\t},\n\tstartLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, true)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, true)\n\t\t}\n\t},\n\tstopLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, false)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, false)\n\t\t}\n\t},\n}\n\nconst getters = {\n\tloading(state) {\n\t\treturn function(id) {\n\t\t\treturn state.loading[id]\n\t\t}\n\t},\n\tgetCategories(state) {\n\t\treturn state.categories\n\t},\n\tgetAllApps(state) {\n\t\treturn state.apps\n\t},\n\tgetAppBundles(state) {\n\t\treturn state.bundles\n\t},\n\tgetUpdateCount(state) {\n\t\treturn state.updateCount\n\t},\n\tgetCategoryById: (state) => (selectedCategoryId) => {\n\t\treturn state.categories.find((category) => category.id === selectedCategoryId)\n\t},\n}\n\nconst actions = {\n\n\tenableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/enable'), { appIds: apps, groups })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('enableApp', { appId: _appId, groups })\n\t\t\t\t\t})\n\n\t\t\t\t\t// check for server health\n\t\t\t\t\treturn api.get(generateUrl('apps/files/'))\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tif (response.data.update_required) {\n\t\t\t\t\t\t\t\tshowInfo(\n\t\t\t\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t\t\t\t'settings',\n\t\t\t\t\t\t\t\t\t\t'The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds.',\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tonClick: () => window.location.reload(),\n\t\t\t\t\t\t\t\t\t\tclose: false,\n\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tlocation.reload()\n\t\t\t\t\t\t\t\t}, 5000)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\tif (!Array.isArray(appId)) {\n\t\t\t\t\t\t\t\tshowError(t('settings', 'Error: This app cannot be enabled because it makes the server unstable'))\n\t\t\t\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\t\t\t\terror: t('settings', 'Error: This app cannot be enabled because it makes the server unstable'),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\tcontext.dispatch('disableApp', { appId })\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tforceEnableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then(() => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/force'), { appId })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('setInstallState', { appId, canInstall: true })\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tdisableApp(context, { appId }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\treturn api.post(generateUrl('settings/apps/disable'), { appIds: apps })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('disableApp', _appId)\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tuninstallApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\treturn api.get(generateUrl(`settings/apps/uninstall/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('uninstallApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tupdateApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.get(generateUrl(`settings/apps/update/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('updateApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tgetAllApps(context) {\n\t\tcontext.commit('startLoading', 'list')\n\t\treturn api.get(generateUrl('settings/apps/list'))\n\t\t\t.then((response) => {\n\t\t\t\tcontext.commit('setAllApps', response.data.apps)\n\t\t\t\tcontext.commit('stopLoading', 'list')\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tasync getCategories(context, { shouldRefetchCategories = false } = {}) {\n\t\tif (shouldRefetchCategories || !context.state.gettingCategoriesPromise) {\n\t\t\tcontext.commit('startLoading', 'categories')\n\t\t\ttry {\n\t\t\t\tconst categoriesPromise = api.get(generateUrl('settings/apps/categories'))\n\t\t\t\tcontext.commit('updateCategories', categoriesPromise)\n\t\t\t\tconst categoriesPromiseResponse = await categoriesPromise\n\t\t\t\tif (categoriesPromiseResponse.data.length > 0) {\n\t\t\t\t\tcontext.commit('appendCategories', categoriesPromiseResponse.data)\n\t\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\treturn false\n\t\t\t} catch (error) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t}\n\t\treturn context.state.gettingCategoriesPromise\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\nconst state = {\n\tserverData: loadState('settings', 'usersSettings', {}),\n}\nconst mutations = {\n\tsetServerData(state, data) {\n\t\tstate.serverData = data\n\t},\n}\nconst getters = {\n\tgetServerData(state) {\n\t\treturn state.serverData\n\t},\n}\nconst actions = {}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport api from './api.js'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst state = {}\nconst mutations = {}\nconst getters = {}\nconst actions = {\n\t/**\n\t * Set application config in database\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.app Application name\n\t * @param {boolean} options.key Config key\n\t * @param {boolean} options.value Value to set\n\t * @return {Promise}\n\t */\n\tsetAppConfig(context, { app, key, value }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('apps/provisioning_api/api/v1/config/apps/{app}/{key}', { app, key }), { value })\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { app, key, value, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport users from './users.js'\nimport apps from './apps.js'\nimport settings from './users-settings.js'\nimport oc from './oc.js'\nimport { showError } from '@nextcloud/dialogs'\n\nVue.use(Vuex)\n\nconst debug = process.env.NODE_ENV !== 'production'\n\nconst mutations = {\n\tAPI_FAILURE(state, error) {\n\t\ttry {\n\t\t\tconst message = error.error.response.data.ocs.meta.message\n\t\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.') + '
' + message, { isHTML: true })\n\t\t} catch (e) {\n\t\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.'))\n\t\t}\n\t\tconsole.error(state, error)\n\t},\n}\n\nlet store = null\n\nexport const useStore = () => {\n\tif (store === null) {\n\t\tstore = new Store({\n\t\t\tmodules: {\n\t\t\t\tusers,\n\t\t\t\tapps,\n\t\t\t\tsettings,\n\t\t\t\toc,\n\t\t\t},\n\t\t\tstrict: debug,\n\t\t\tmutations,\n\t\t})\n\t}\n\treturn store\n}\n","/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * https://github.com/nextcloud/server/blob/208e38e84e1a07a49699aa90dc5b7272d24489f0/lib/private/Group/MetaData.php#L34\n */\nexport var GroupSorting;\n(function (GroupSorting) {\n GroupSorting[GroupSorting[\"UserCount\"] = 1] = \"UserCount\";\n GroupSorting[GroupSorting[\"GroupName\"] = 2] = \"GroupName\";\n})(GroupSorting || (GroupSorting = {}));\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { getLoggerBuilder } from '@nextcloud/logger';\nexport default getLoggerBuilder()\n .setApp('settings')\n .detectUser()\n .build();\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(_setup.NcContent,{attrs:{\"app-name\":\"settings\"}},[_c('router-view',{attrs:{\"name\":\"navigation\"}}),_vm._v(\" \"),_c('router-view'),_vm._v(\" \"),_c('router-view',{attrs:{\"name\":\"sidebar\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"","import { render, staticRenderFns } from \"./SettingsApp.vue?vue&type=template&id=02c6e0e9\"\nimport script from \"./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { loadState } from '@nextcloud/initial-state';\nconst appstoreEnabled = loadState('settings', 'appstoreEnabled', true);\n// Dynamic loading\nconst AppStore = () => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStore.vue');\nconst AppStoreNavigation = () => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStoreNavigation.vue');\nconst AppStoreSidebar = () => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStoreSidebar.vue');\nconst UserManagement = () => import(/* webpackChunkName: 'settings-users' */ '../views/UserManagement.vue');\nconst UserManagementNavigation = () => import(/* webpackChunkName: 'settings-users' */ '../views/UserManagementNavigation.vue');\nconst routes = [\n {\n name: 'users',\n path: '/:index(index.php/)?settings/users',\n components: {\n default: UserManagement,\n navigation: UserManagementNavigation,\n },\n props: true,\n children: [\n {\n path: ':selectedGroup',\n name: 'group',\n },\n ],\n },\n {\n path: '/:index(index.php/)?settings/apps',\n name: 'apps',\n redirect: {\n name: 'apps-category',\n params: {\n category: appstoreEnabled ? 'discover' : 'installed',\n },\n },\n components: {\n default: AppStore,\n navigation: AppStoreNavigation,\n sidebar: AppStoreSidebar,\n },\n children: [\n {\n path: ':category',\n name: 'apps-category',\n children: [\n {\n path: ':id',\n name: 'apps-details',\n },\n ],\n },\n ],\n },\n];\nexport default routes;\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport Vue from 'vue';\nimport Router from 'vue-router';\nimport { generateUrl } from '@nextcloud/router';\nimport routes from './routes.ts';\nVue.use(Router);\nconst router = new Router({\n mode: 'history',\n // if index.php is in the url AND we got this far, then it's working:\n // let's keep using index.php in the url\n base: generateUrl(''),\n linkActiveClass: 'active',\n routes,\n});\nexport default router;\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport Vue from 'vue';\nimport VTooltip from 'v-tooltip';\nimport { sync } from 'vuex-router-sync';\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n';\nimport SettingsApp from './views/SettingsApp.vue';\nimport router from './router/index.ts';\nimport { useStore } from './store/index.js';\nimport { getCSPNonce } from '@nextcloud/auth';\nimport { PiniaVuePlugin, createPinia } from 'pinia';\nVue.use(VTooltip, { defaultHtml: false });\nconst store = useStore();\nsync(store, router);\n// CSP config for webpack dynamic chunk loading\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = getCSPNonce();\n// bind to window\nVue.prototype.t = t;\nVue.prototype.n = n;\nVue.use(PiniaVuePlugin);\nconst pinia = createPinia();\nexport default new Vue({\n router,\n store,\n pinia,\n render: h => h(SettingsApp),\n el: '#content',\n});\n","exports.sync = function (store, router, options) {\n var moduleName = (options || {}).moduleName || 'route'\n\n store.registerModule(moduleName, {\n namespaced: true,\n state: cloneRoute(router.currentRoute),\n mutations: {\n 'ROUTE_CHANGED': function ROUTE_CHANGED (state, transition) {\n store.state[moduleName] = cloneRoute(transition.to, transition.from)\n }\n }\n })\n\n var isTimeTraveling = false\n var currentPath\n\n // sync router on store change\n var storeUnwatch = store.watch(\n function (state) { return state[moduleName]; },\n function (route) {\n var fullPath = route.fullPath;\n if (fullPath === currentPath) {\n return\n }\n if (currentPath != null) {\n isTimeTraveling = true\n router.push(route)\n }\n currentPath = fullPath\n },\n { sync: true }\n )\n\n // sync store on router navigation\n var afterEachUnHook = router.afterEach(function (to, from) {\n if (isTimeTraveling) {\n isTimeTraveling = false\n return\n }\n currentPath = to.fullPath\n store.commit(moduleName + '/ROUTE_CHANGED', { to: to, from: from })\n })\n\n return function unsync () {\n // On unsync, remove router hook\n if (afterEachUnHook != null) {\n afterEachUnHook()\n }\n\n // On unsync, remove store watch\n if (storeUnwatch != null) {\n storeUnwatch()\n }\n\n // On unsync, unregister Module with store\n store.unregisterModule(moduleName)\n }\n}\n\nfunction cloneRoute (to, from) {\n var clone = {\n name: to.name,\n path: to.path,\n hash: to.hash,\n query: to.query,\n params: to.params,\n fullPath: to.fullPath,\n meta: to.meta\n }\n if (from) {\n clone.from = cloneRoute(from)\n }\n return Object.freeze(clone)\n}\n\n","import { getLoggerBuilder } from \"@nextcloud/logger\";\nimport { getCurrentUser, onRequestTokenUpdate, getRequestToken } from \"@nextcloud/auth\";\nimport { join, basename, extname, dirname } from \"path\";\nimport { encodePath } from \"@nextcloud/paths\";\nimport { generateRemoteUrl } from \"@nextcloud/router\";\nimport { CancelablePromise } from \"cancelable-promise\";\nimport { createClient, getPatcher } from \"webdav\";\nimport { isPublicShare, getSharingToken } from \"@nextcloud/sharing/public\";\nimport { getCapabilities } from \"@nextcloud/capabilities\";\nimport { getCanonicalLocale, getLanguage } from \"@nextcloud/l10n\";\nimport { TypedEventTarget } from \"typescript-event-target\";\nconst logger = getLoggerBuilder().setApp(\"@nextcloud/files\").detectUser().build();\nvar NewMenuEntryCategory = /* @__PURE__ */ ((NewMenuEntryCategory2) => {\n NewMenuEntryCategory2[NewMenuEntryCategory2[\"UploadFromDevice\"] = 0] = \"UploadFromDevice\";\n NewMenuEntryCategory2[NewMenuEntryCategory2[\"CreateNew\"] = 1] = \"CreateNew\";\n NewMenuEntryCategory2[NewMenuEntryCategory2[\"Other\"] = 2] = \"Other\";\n return NewMenuEntryCategory2;\n})(NewMenuEntryCategory || {});\nclass NewFileMenu {\n _entries = [];\n registerEntry(entry) {\n this.validateEntry(entry);\n entry.category = entry.category ?? 1;\n this._entries.push(entry);\n }\n unregisterEntry(entry) {\n const entryIndex = typeof entry === \"string\" ? this.getEntryIndex(entry) : this.getEntryIndex(entry.id);\n if (entryIndex === -1) {\n logger.warn(\"Entry not found, nothing removed\", { entry, entries: this.getEntries() });\n return;\n }\n this._entries.splice(entryIndex, 1);\n }\n /**\n * Get the list of registered entries\n *\n * @param {Folder} context the creation context. Usually the current folder\n */\n getEntries(context) {\n if (context) {\n return this._entries.filter((entry) => typeof entry.enabled === \"function\" ? entry.enabled(context) : true);\n }\n return this._entries;\n }\n getEntryIndex(id) {\n return this._entries.findIndex((entry) => entry.id === id);\n }\n validateEntry(entry) {\n if (!entry.id || !entry.displayName || !(entry.iconSvgInline || entry.iconClass) || !entry.handler) {\n throw new Error(\"Invalid entry\");\n }\n if (typeof entry.id !== \"string\" || typeof entry.displayName !== \"string\") {\n throw new Error(\"Invalid id or displayName property\");\n }\n if (entry.iconClass && typeof entry.iconClass !== \"string\" || entry.iconSvgInline && typeof entry.iconSvgInline !== \"string\") {\n throw new Error(\"Invalid icon provided\");\n }\n if (entry.enabled !== void 0 && typeof entry.enabled !== \"function\") {\n throw new Error(\"Invalid enabled property\");\n }\n if (typeof entry.handler !== \"function\") {\n throw new Error(\"Invalid handler property\");\n }\n if (\"order\" in entry && typeof entry.order !== \"number\") {\n throw new Error(\"Invalid order property\");\n }\n if (this.getEntryIndex(entry.id) !== -1) {\n throw new Error(\"Duplicate entry\");\n }\n }\n}\nconst getNewFileMenu = function() {\n if (typeof window._nc_newfilemenu === \"undefined\") {\n window._nc_newfilemenu = new NewFileMenu();\n logger.debug(\"NewFileMenu initialized\");\n }\n return window._nc_newfilemenu;\n};\nvar DefaultType = /* @__PURE__ */ ((DefaultType2) => {\n DefaultType2[\"DEFAULT\"] = \"default\";\n DefaultType2[\"HIDDEN\"] = \"hidden\";\n return DefaultType2;\n})(DefaultType || {});\nclass FileAction {\n _action;\n constructor(action) {\n this.validateAction(action);\n this._action = action;\n }\n get id() {\n return this._action.id;\n }\n get displayName() {\n return this._action.displayName;\n }\n get title() {\n return this._action.title;\n }\n get iconSvgInline() {\n return this._action.iconSvgInline;\n }\n get enabled() {\n return this._action.enabled;\n }\n get exec() {\n return this._action.exec;\n }\n get execBatch() {\n return this._action.execBatch;\n }\n get order() {\n return this._action.order;\n }\n get parent() {\n return this._action.parent;\n }\n get default() {\n return this._action.default;\n }\n get inline() {\n return this._action.inline;\n }\n get renderInline() {\n return this._action.renderInline;\n }\n validateAction(action) {\n if (!action.id || typeof action.id !== \"string\") {\n throw new Error(\"Invalid id\");\n }\n if (!action.displayName || typeof action.displayName !== \"function\") {\n throw new Error(\"Invalid displayName function\");\n }\n if (\"title\" in action && typeof action.title !== \"function\") {\n throw new Error(\"Invalid title function\");\n }\n if (!action.iconSvgInline || typeof action.iconSvgInline !== \"function\") {\n throw new Error(\"Invalid iconSvgInline function\");\n }\n if (!action.exec || typeof action.exec !== \"function\") {\n throw new Error(\"Invalid exec function\");\n }\n if (\"enabled\" in action && typeof action.enabled !== \"function\") {\n throw new Error(\"Invalid enabled function\");\n }\n if (\"execBatch\" in action && typeof action.execBatch !== \"function\") {\n throw new Error(\"Invalid execBatch function\");\n }\n if (\"order\" in action && typeof action.order !== \"number\") {\n throw new Error(\"Invalid order\");\n }\n if (\"parent\" in action && typeof action.parent !== \"string\") {\n throw new Error(\"Invalid parent\");\n }\n if (action.default && !Object.values(DefaultType).includes(action.default)) {\n throw new Error(\"Invalid default\");\n }\n if (\"inline\" in action && typeof action.inline !== \"function\") {\n throw new Error(\"Invalid inline function\");\n }\n if (\"renderInline\" in action && typeof action.renderInline !== \"function\") {\n throw new Error(\"Invalid renderInline function\");\n }\n }\n}\nconst registerFileAction = function(action) {\n if (typeof window._nc_fileactions === \"undefined\") {\n window._nc_fileactions = [];\n logger.debug(\"FileActions initialized\");\n }\n if (window._nc_fileactions.find((search) => search.id === action.id)) {\n logger.error(`FileAction ${action.id} already registered`, { action });\n return;\n }\n window._nc_fileactions.push(action);\n};\nconst getFileActions = function() {\n if (typeof window._nc_fileactions === \"undefined\") {\n window._nc_fileactions = [];\n logger.debug(\"FileActions initialized\");\n }\n return window._nc_fileactions;\n};\nclass Header {\n _header;\n constructor(header) {\n this.validateHeader(header);\n this._header = header;\n }\n get id() {\n return this._header.id;\n }\n get order() {\n return this._header.order;\n }\n get enabled() {\n return this._header.enabled;\n }\n get render() {\n return this._header.render;\n }\n get updated() {\n return this._header.updated;\n }\n validateHeader(header) {\n if (!header.id || !header.render || !header.updated) {\n throw new Error(\"Invalid header: id, render and updated are required\");\n }\n if (typeof header.id !== \"string\") {\n throw new Error(\"Invalid id property\");\n }\n if (header.enabled !== void 0 && typeof header.enabled !== \"function\") {\n throw new Error(\"Invalid enabled property\");\n }\n if (header.render && typeof header.render !== \"function\") {\n throw new Error(\"Invalid render property\");\n }\n if (header.updated && typeof header.updated !== \"function\") {\n throw new Error(\"Invalid updated property\");\n }\n }\n}\nconst registerFileListHeaders = function(header) {\n if (typeof window._nc_filelistheader === \"undefined\") {\n window._nc_filelistheader = [];\n logger.debug(\"FileListHeaders initialized\");\n }\n if (window._nc_filelistheader.find((search) => search.id === header.id)) {\n logger.error(`Header ${header.id} already registered`, { header });\n return;\n }\n window._nc_filelistheader.push(header);\n};\nconst getFileListHeaders = function() {\n if (typeof window._nc_filelistheader === \"undefined\") {\n window._nc_filelistheader = [];\n logger.debug(\"FileListHeaders initialized\");\n }\n return window._nc_filelistheader;\n};\nvar Permission = /* @__PURE__ */ ((Permission2) => {\n Permission2[Permission2[\"NONE\"] = 0] = \"NONE\";\n Permission2[Permission2[\"CREATE\"] = 4] = \"CREATE\";\n Permission2[Permission2[\"READ\"] = 1] = \"READ\";\n Permission2[Permission2[\"UPDATE\"] = 2] = \"UPDATE\";\n Permission2[Permission2[\"DELETE\"] = 8] = \"DELETE\";\n Permission2[Permission2[\"SHARE\"] = 16] = \"SHARE\";\n Permission2[Permission2[\"ALL\"] = 31] = \"ALL\";\n return Permission2;\n})(Permission || {});\nconst defaultDavProperties = [\n \"d:getcontentlength\",\n \"d:getcontenttype\",\n \"d:getetag\",\n \"d:getlastmodified\",\n \"d:creationdate\",\n \"d:displayname\",\n \"d:quota-available-bytes\",\n \"d:resourcetype\",\n \"nc:has-preview\",\n \"nc:is-encrypted\",\n \"nc:mount-type\",\n \"oc:comments-unread\",\n \"oc:favorite\",\n \"oc:fileid\",\n \"oc:owner-display-name\",\n \"oc:owner-id\",\n \"oc:permissions\",\n \"oc:size\"\n];\nconst defaultDavNamespaces = {\n d: \"DAV:\",\n nc: \"http://nextcloud.org/ns\",\n oc: \"http://owncloud.org/ns\",\n ocs: \"http://open-collaboration-services.org/ns\"\n};\nconst registerDavProperty = function(prop, namespace = { nc: \"http://nextcloud.org/ns\" }) {\n if (typeof window._nc_dav_properties === \"undefined\") {\n window._nc_dav_properties = [...defaultDavProperties];\n window._nc_dav_namespaces = { ...defaultDavNamespaces };\n }\n const namespaces = { ...window._nc_dav_namespaces, ...namespace };\n if (window._nc_dav_properties.find((search) => search === prop)) {\n logger.warn(`${prop} already registered`, { prop });\n return false;\n }\n if (prop.startsWith(\"<\") || prop.split(\":\").length !== 2) {\n logger.error(`${prop} is not valid. See example: 'oc:fileid'`, { prop });\n return false;\n }\n const ns = prop.split(\":\")[0];\n if (!namespaces[ns]) {\n logger.error(`${prop} namespace unknown`, { prop, namespaces });\n return false;\n }\n window._nc_dav_properties.push(prop);\n window._nc_dav_namespaces = namespaces;\n return true;\n};\nconst getDavProperties = function() {\n if (typeof window._nc_dav_properties === \"undefined\") {\n window._nc_dav_properties = [...defaultDavProperties];\n }\n return window._nc_dav_properties.map((prop) => `<${prop} />`).join(\" \");\n};\nconst getDavNameSpaces = function() {\n if (typeof window._nc_dav_namespaces === \"undefined\") {\n window._nc_dav_namespaces = { ...defaultDavNamespaces };\n }\n return Object.keys(window._nc_dav_namespaces).map((ns) => `xmlns:${ns}=\"${window._nc_dav_namespaces?.[ns]}\"`).join(\" \");\n};\nconst davGetDefaultPropfind = function() {\n return `\n\t\t\n\t\t\t\n\t\t\t\t${getDavProperties()}\n\t\t\t\n\t\t`;\n};\nconst davGetFavoritesReport = function() {\n return `\n\t\t\n\t\t\t\n\t\t\t\t${getDavProperties()}\n\t\t\t\n\t\t\t\n\t\t\t\t1\n\t\t\t\n\t\t`;\n};\nconst davGetRecentSearch = function(lastModified) {\n return `\n\n\t\n\t\t\n\t\t\t\n\t\t\t\t${getDavProperties()}\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t/files/${getCurrentUser()?.uid}/\n\t\t\t\tinfinity\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\thttpd/unix-directory\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t0\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t${lastModified}\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t100\n\t\t\t0\n\t\t\n\t\n`;\n};\nconst davParsePermissions = function(permString = \"\") {\n let permissions = Permission.NONE;\n if (!permString) {\n return permissions;\n }\n if (permString.includes(\"C\") || permString.includes(\"K\")) {\n permissions |= Permission.CREATE;\n }\n if (permString.includes(\"G\")) {\n permissions |= Permission.READ;\n }\n if (permString.includes(\"W\") || permString.includes(\"N\") || permString.includes(\"V\")) {\n permissions |= Permission.UPDATE;\n }\n if (permString.includes(\"D\")) {\n permissions |= Permission.DELETE;\n }\n if (permString.includes(\"R\")) {\n permissions |= Permission.SHARE;\n }\n return permissions;\n};\nvar FileType = /* @__PURE__ */ ((FileType2) => {\n FileType2[\"Folder\"] = \"folder\";\n FileType2[\"File\"] = \"file\";\n return FileType2;\n})(FileType || {});\nconst isDavRessource = function(source, davService) {\n return source.match(davService) !== null;\n};\nconst validateData = (data, davService) => {\n if (data.id && typeof data.id !== \"number\") {\n throw new Error(\"Invalid id type of value\");\n }\n if (!data.source) {\n throw new Error(\"Missing mandatory source\");\n }\n try {\n new URL(data.source);\n } catch (e) {\n throw new Error(\"Invalid source format, source must be a valid URL\");\n }\n if (!data.source.startsWith(\"http\")) {\n throw new Error(\"Invalid source format, only http(s) is supported\");\n }\n if (data.displayname && typeof data.displayname !== \"string\") {\n throw new Error(\"Invalid displayname type\");\n }\n if (data.mtime && !(data.mtime instanceof Date)) {\n throw new Error(\"Invalid mtime type\");\n }\n if (data.crtime && !(data.crtime instanceof Date)) {\n throw new Error(\"Invalid crtime type\");\n }\n if (!data.mime || typeof data.mime !== \"string\" || !data.mime.match(/^[-\\w.]+\\/[-+\\w.]+$/gi)) {\n throw new Error(\"Missing or invalid mandatory mime\");\n }\n if (\"size\" in data && typeof data.size !== \"number\" && data.size !== void 0) {\n throw new Error(\"Invalid size type\");\n }\n if (\"permissions\" in data && data.permissions !== void 0 && !(typeof data.permissions === \"number\" && data.permissions >= Permission.NONE && data.permissions <= Permission.ALL)) {\n throw new Error(\"Invalid permissions\");\n }\n if (data.owner && data.owner !== null && typeof data.owner !== \"string\") {\n throw new Error(\"Invalid owner type\");\n }\n if (data.attributes && typeof data.attributes !== \"object\") {\n throw new Error(\"Invalid attributes type\");\n }\n if (data.root && typeof data.root !== \"string\") {\n throw new Error(\"Invalid root type\");\n }\n if (data.root && !data.root.startsWith(\"/\")) {\n throw new Error(\"Root must start with a leading slash\");\n }\n if (data.root && !data.source.includes(data.root)) {\n throw new Error(\"Root must be part of the source\");\n }\n if (data.root && isDavRessource(data.source, davService)) {\n const service = data.source.match(davService)[0];\n if (!data.source.includes(join(service, data.root))) {\n throw new Error(\"The root must be relative to the service. e.g /files/emma\");\n }\n }\n if (data.status && !Object.values(NodeStatus).includes(data.status)) {\n throw new Error(\"Status must be a valid NodeStatus\");\n }\n};\nvar NodeStatus = /* @__PURE__ */ ((NodeStatus2) => {\n NodeStatus2[\"NEW\"] = \"new\";\n NodeStatus2[\"FAILED\"] = \"failed\";\n NodeStatus2[\"LOADING\"] = \"loading\";\n NodeStatus2[\"LOCKED\"] = \"locked\";\n return NodeStatus2;\n})(NodeStatus || {});\nclass Node {\n _data;\n _attributes;\n _knownDavService = /(remote|public)\\.php\\/(web)?dav/i;\n readonlyAttributes = Object.entries(Object.getOwnPropertyDescriptors(Node.prototype)).filter((e) => typeof e[1].get === \"function\" && e[0] !== \"__proto__\").map((e) => e[0]);\n handler = {\n set: (target, prop, value) => {\n if (this.readonlyAttributes.includes(prop)) {\n return false;\n }\n return Reflect.set(target, prop, value);\n },\n deleteProperty: (target, prop) => {\n if (this.readonlyAttributes.includes(prop)) {\n return false;\n }\n return Reflect.deleteProperty(target, prop);\n },\n // TODO: This is deprecated and only needed for files v3\n get: (target, prop, receiver) => {\n if (this.readonlyAttributes.includes(prop)) {\n logger.warn(`Accessing \"Node.attributes.${prop}\" is deprecated, access it directly on the Node instance.`);\n return Reflect.get(this, prop);\n }\n return Reflect.get(target, prop, receiver);\n }\n };\n constructor(data, davService) {\n validateData(data, davService || this._knownDavService);\n this._data = {\n // TODO: Remove with next major release, this is just for compatibility\n displayname: data.attributes?.displayname,\n ...data,\n attributes: {}\n };\n this._attributes = new Proxy(this._data.attributes, this.handler);\n this.update(data.attributes ?? {});\n if (davService) {\n this._knownDavService = davService;\n }\n }\n /**\n * Get the source url to this object\n * There is no setter as the source is not meant to be changed manually.\n * You can use the rename or move method to change the source.\n */\n get source() {\n return this._data.source.replace(/\\/$/i, \"\");\n }\n /**\n * Get the encoded source url to this object for requests purposes\n */\n get encodedSource() {\n const { origin } = new URL(this.source);\n return origin + encodePath(this.source.slice(origin.length));\n }\n /**\n * Get this object name\n * There is no setter as the source is not meant to be changed manually.\n * You can use the rename or move method to change the source.\n */\n get basename() {\n return basename(this.source);\n }\n /**\n * The nodes displayname\n * By default the display name and the `basename` are identical,\n * but it is possible to have a different name. This happens\n * on the files app for example for shared folders.\n */\n get displayname() {\n return this._data.displayname || this.basename;\n }\n /**\n * Set the displayname\n */\n set displayname(displayname) {\n this._data.displayname = displayname;\n }\n /**\n * Get this object's extension\n * There is no setter as the source is not meant to be changed manually.\n * You can use the rename or move method to change the source.\n */\n get extension() {\n return extname(this.source);\n }\n /**\n * Get the directory path leading to this object\n * Will use the relative path to root if available\n *\n * There is no setter as the source is not meant to be changed manually.\n * You can use the rename or move method to change the source.\n */\n get dirname() {\n if (this.root) {\n let source = this.source;\n if (this.isDavRessource) {\n source = source.split(this._knownDavService).pop();\n }\n const firstMatch = source.indexOf(this.root);\n const root = this.root.replace(/\\/$/, \"\");\n return dirname(source.slice(firstMatch + root.length) || \"/\");\n }\n const url = new URL(this.source);\n return dirname(url.pathname);\n }\n /**\n * Get the file mime\n * There is no setter as the mime is not meant to be changed\n */\n get mime() {\n return this._data.mime;\n }\n /**\n * Get the file modification time\n */\n get mtime() {\n return this._data.mtime;\n }\n /**\n * Set the file modification time\n */\n set mtime(mtime) {\n this._data.mtime = mtime;\n }\n /**\n * Get the file creation time\n * There is no setter as the creation time is not meant to be changed\n */\n get crtime() {\n return this._data.crtime;\n }\n /**\n * Get the file size\n */\n get size() {\n return this._data.size;\n }\n /**\n * Set the file size\n */\n set size(size) {\n this.updateMtime();\n this._data.size = size;\n }\n /**\n * Get the file attribute\n * This contains all additional attributes not provided by the Node class\n */\n get attributes() {\n return this._attributes;\n }\n /**\n * Get the file permissions\n */\n get permissions() {\n if (this.owner === null && !this.isDavRessource) {\n return Permission.READ;\n }\n return this._data.permissions !== void 0 ? this._data.permissions : Permission.NONE;\n }\n /**\n * Set the file permissions\n */\n set permissions(permissions) {\n this.updateMtime();\n this._data.permissions = permissions;\n }\n /**\n * Get the file owner\n * There is no setter as the owner is not meant to be changed\n */\n get owner() {\n if (!this.isDavRessource) {\n return null;\n }\n return this._data.owner;\n }\n /**\n * Is this a dav-related ressource ?\n */\n get isDavRessource() {\n return isDavRessource(this.source, this._knownDavService);\n }\n /**\n * Get the dav root of this object\n * There is no setter as the root is not meant to be changed\n */\n get root() {\n if (this._data.root) {\n return this._data.root.replace(/^(.+)\\/$/, \"$1\");\n }\n if (this.isDavRessource) {\n const root = dirname(this.source);\n return root.split(this._knownDavService).pop() || null;\n }\n return null;\n }\n /**\n * Get the absolute path of this object relative to the root\n */\n get path() {\n if (this.root) {\n let source = this.source;\n if (this.isDavRessource) {\n source = source.split(this._knownDavService).pop();\n }\n const firstMatch = source.indexOf(this.root);\n const root = this.root.replace(/\\/$/, \"\");\n return source.slice(firstMatch + root.length) || \"/\";\n }\n return (this.dirname + \"/\" + this.basename).replace(/\\/\\//g, \"/\");\n }\n /**\n * Get the node id if defined.\n * There is no setter as the fileid is not meant to be changed\n */\n get fileid() {\n return this._data?.id;\n }\n /**\n * Get the node status.\n */\n get status() {\n return this._data?.status;\n }\n /**\n * Set the node status.\n */\n set status(status) {\n this._data.status = status;\n }\n /**\n * Move the node to a new destination\n *\n * @param {string} destination the new source.\n * e.g. https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg\n */\n move(destination) {\n validateData({ ...this._data, source: destination }, this._knownDavService);\n const oldBasename = this.basename;\n this._data.source = destination;\n if (this.displayname === oldBasename && this.basename !== oldBasename) {\n this.displayname = this.basename;\n }\n this.updateMtime();\n }\n /**\n * Rename the node\n * This aliases the move method for easier usage\n *\n * @param basename The new name of the node\n */\n rename(basename2) {\n if (basename2.includes(\"/\")) {\n throw new Error(\"Invalid basename\");\n }\n this.move(dirname(this.source) + \"/\" + basename2);\n }\n /**\n * Update the mtime if exists\n */\n updateMtime() {\n if (this._data.mtime) {\n this._data.mtime = /* @__PURE__ */ new Date();\n }\n }\n /**\n * Update the attributes of the node\n * Warning, updating attributes will NOT automatically update the mtime.\n *\n * @param attributes The new attributes to update on the Node attributes\n */\n update(attributes) {\n for (const [name, value] of Object.entries(attributes)) {\n try {\n if (value === void 0) {\n delete this.attributes[name];\n } else {\n this.attributes[name] = value;\n }\n } catch (e) {\n if (e instanceof TypeError) {\n continue;\n }\n throw e;\n }\n }\n }\n}\nclass File extends Node {\n get type() {\n return FileType.File;\n }\n}\nclass Folder extends Node {\n constructor(data) {\n super({\n ...data,\n mime: \"httpd/unix-directory\"\n });\n }\n get type() {\n return FileType.Folder;\n }\n get extension() {\n return null;\n }\n get mime() {\n return \"httpd/unix-directory\";\n }\n}\nfunction davGetRootPath() {\n if (isPublicShare()) {\n return `/files/${getSharingToken()}`;\n }\n return `/files/${getCurrentUser()?.uid}`;\n}\nconst davRootPath = davGetRootPath();\nfunction davGetRemoteURL() {\n const url = generateRemoteUrl(\"dav\");\n if (isPublicShare()) {\n return url.replace(\"remote.php\", \"public.php\");\n }\n return url;\n}\nconst davRemoteURL = davGetRemoteURL();\nconst davGetClient = function(remoteURL = davRemoteURL, headers = {}) {\n const client = createClient(remoteURL, { headers });\n function setHeaders(token) {\n client.setHeaders({\n ...headers,\n // Add this so the server knows it is an request from the browser\n \"X-Requested-With\": \"XMLHttpRequest\",\n // Inject user auth\n requesttoken: token ?? \"\"\n });\n }\n onRequestTokenUpdate(setHeaders);\n setHeaders(getRequestToken());\n const patcher = getPatcher();\n patcher.patch(\"fetch\", (url, options) => {\n const headers2 = options.headers;\n if (headers2?.method) {\n options.method = headers2.method;\n delete headers2.method;\n }\n return fetch(url, options);\n });\n return client;\n};\nconst getFavoriteNodes = (davClient, path = \"/\", davRoot = davRootPath) => {\n const controller = new AbortController();\n return new CancelablePromise(async (resolve, reject, onCancel) => {\n onCancel(() => controller.abort());\n try {\n const contentsResponse = await davClient.getDirectoryContents(`${davRoot}${path}`, {\n signal: controller.signal,\n details: true,\n data: davGetFavoritesReport(),\n headers: {\n // see davGetClient for patched webdav client\n method: \"REPORT\"\n },\n includeSelf: true\n });\n const nodes = contentsResponse.data.filter((node) => node.filename !== path).map((result) => davResultToNode(result, davRoot));\n resolve(nodes);\n } catch (error) {\n reject(error);\n }\n });\n};\nconst davResultToNode = function(node, filesRoot = davRootPath, remoteURL = davRemoteURL) {\n let userId = getCurrentUser()?.uid;\n if (isPublicShare()) {\n userId = userId ?? \"anonymous\";\n } else if (!userId) {\n throw new Error(\"No user id found\");\n }\n const props = node.props;\n const permissions = davParsePermissions(props?.permissions);\n const owner = String(props?.[\"owner-id\"] || userId);\n const id = props.fileid || 0;\n const nodeData = {\n id,\n source: `${remoteURL}${node.filename}`,\n mtime: new Date(Date.parse(node.lastmod)),\n mime: node.mime || \"application/octet-stream\",\n // Manually cast to work around for https://github.com/perry-mitchell/webdav-client/pull/380\n displayname: props.displayname !== void 0 ? String(props.displayname) : void 0,\n size: props?.size || Number.parseInt(props.getcontentlength || \"0\"),\n // The fileid is set to -1 for failed requests\n status: id < 0 ? NodeStatus.FAILED : void 0,\n permissions,\n owner,\n root: filesRoot,\n attributes: {\n ...node,\n ...props,\n hasPreview: props?.[\"has-preview\"]\n }\n };\n delete nodeData.attributes?.props;\n return node.type === \"file\" ? new File(nodeData) : new Folder(nodeData);\n};\nvar InvalidFilenameErrorReason = /* @__PURE__ */ ((InvalidFilenameErrorReason2) => {\n InvalidFilenameErrorReason2[\"ReservedName\"] = \"reserved name\";\n InvalidFilenameErrorReason2[\"Character\"] = \"character\";\n InvalidFilenameErrorReason2[\"Extension\"] = \"extension\";\n return InvalidFilenameErrorReason2;\n})(InvalidFilenameErrorReason || {});\nclass InvalidFilenameError extends Error {\n constructor(options) {\n super(`Invalid ${options.reason} '${options.segment}' in filename '${options.filename}'`, { cause: options });\n }\n /**\n * The filename that was validated\n */\n get filename() {\n return this.cause.filename;\n }\n /**\n * Reason why the validation failed\n */\n get reason() {\n return this.cause.reason;\n }\n /**\n * Part of the filename that caused this error\n */\n get segment() {\n return this.cause.segment;\n }\n}\nfunction validateFilename(filename) {\n const capabilities = getCapabilities().files;\n const forbiddenCharacters = capabilities.forbidden_filename_characters ?? window._oc_config?.forbidden_filenames_characters ?? [\"/\", \"\\\\\"];\n for (const character of forbiddenCharacters) {\n if (filename.includes(character)) {\n throw new InvalidFilenameError({ segment: character, reason: \"character\", filename });\n }\n }\n filename = filename.toLocaleLowerCase();\n const forbiddenFilenames = capabilities.forbidden_filenames ?? [\".htaccess\"];\n if (forbiddenFilenames.includes(filename)) {\n throw new InvalidFilenameError({\n filename,\n segment: filename,\n reason: \"reserved name\"\n /* ReservedName */\n });\n }\n const endOfBasename = filename.indexOf(\".\", 1);\n const basename2 = filename.substring(0, endOfBasename === -1 ? void 0 : endOfBasename);\n const forbiddenFilenameBasenames = capabilities.forbidden_filename_basenames ?? [];\n if (forbiddenFilenameBasenames.includes(basename2)) {\n throw new InvalidFilenameError({\n filename,\n segment: basename2,\n reason: \"reserved name\"\n /* ReservedName */\n });\n }\n const forbiddenFilenameExtensions = capabilities.forbidden_filename_extensions ?? [\".part\", \".filepart\"];\n for (const extension of forbiddenFilenameExtensions) {\n if (filename.length > extension.length && filename.endsWith(extension)) {\n throw new InvalidFilenameError({ segment: extension, reason: \"extension\", filename });\n }\n }\n}\nfunction isFilenameValid(filename) {\n try {\n validateFilename(filename);\n return true;\n } catch (error) {\n if (error instanceof InvalidFilenameError) {\n return false;\n }\n throw error;\n }\n}\nfunction getUniqueName(name, otherNames, options) {\n const opts = {\n suffix: (n) => `(${n})`,\n ignoreFileExtension: false,\n ...options\n };\n let newName = name;\n let i = 1;\n while (otherNames.includes(newName)) {\n const ext = opts.ignoreFileExtension ? \"\" : extname(name);\n const base = basename(name, ext);\n newName = `${base} ${opts.suffix(i++)}${ext}`;\n }\n return newName;\n}\nconst humanList = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"];\nconst humanListBinary = [\"B\", \"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\"];\nfunction formatFileSize(size, skipSmallSizes = false, binaryPrefixes = false, base1000 = false) {\n binaryPrefixes = binaryPrefixes && !base1000;\n if (typeof size === \"string\") {\n size = Number(size);\n }\n let order = size > 0 ? Math.floor(Math.log(size) / Math.log(base1000 ? 1e3 : 1024)) : 0;\n order = Math.min((binaryPrefixes ? humanListBinary.length : humanList.length) - 1, order);\n const readableFormat = binaryPrefixes ? humanListBinary[order] : humanList[order];\n let relativeSize = (size / Math.pow(base1000 ? 1e3 : 1024, order)).toFixed(1);\n if (skipSmallSizes === true && order === 0) {\n return (relativeSize !== \"0.0\" ? \"< 1 \" : \"0 \") + (binaryPrefixes ? humanListBinary[1] : humanList[1]);\n }\n if (order < 2) {\n relativeSize = parseFloat(relativeSize).toFixed(0);\n } else {\n relativeSize = parseFloat(relativeSize).toLocaleString(getCanonicalLocale());\n }\n return relativeSize + \" \" + readableFormat;\n}\nfunction parseFileSize(value, forceBinary = false) {\n try {\n value = `${value}`.toLocaleLowerCase().replaceAll(/\\s+/g, \"\").replaceAll(\",\", \".\");\n } catch (e) {\n return null;\n }\n const match = value.match(/^([0-9]*(\\.[0-9]*)?)([kmgtp]?)(i?)b?$/);\n if (match === null || match[1] === \".\" || match[1] === \"\") {\n return null;\n }\n const bytesArray = {\n \"\": 0,\n k: 1,\n m: 2,\n g: 3,\n t: 4,\n p: 5,\n e: 6\n };\n const decimalString = `${match[1]}`;\n const base = match[4] === \"i\" || forceBinary ? 1024 : 1e3;\n return Math.round(Number.parseFloat(decimalString) * base ** bytesArray[match[3]]);\n}\nfunction stringify(value) {\n if (value instanceof Date) {\n return value.toISOString();\n }\n return String(value);\n}\nfunction orderBy(collection, identifiers2, orders) {\n identifiers2 = identifiers2 ?? [(value) => value];\n orders = orders ?? [];\n const sorting = identifiers2.map((_, index) => (orders[index] ?? \"asc\") === \"asc\" ? 1 : -1);\n const collator = Intl.Collator(\n [getLanguage(), getCanonicalLocale()],\n {\n // handle 10 as ten and not as one-zero\n numeric: true,\n usage: \"sort\"\n }\n );\n return [...collection].sort((a, b) => {\n for (const [index, identifier] of identifiers2.entries()) {\n const value = collator.compare(stringify(identifier(a)), stringify(identifier(b)));\n if (value !== 0) {\n return value * sorting[index];\n }\n }\n return 0;\n });\n}\nvar FilesSortingMode = /* @__PURE__ */ ((FilesSortingMode2) => {\n FilesSortingMode2[\"Name\"] = \"basename\";\n FilesSortingMode2[\"Modified\"] = \"mtime\";\n FilesSortingMode2[\"Size\"] = \"size\";\n return FilesSortingMode2;\n})(FilesSortingMode || {});\nfunction sortNodes(nodes, options = {}) {\n const sortingOptions = {\n // Default to sort by name\n sortingMode: \"basename\",\n // Default to sort ascending\n sortingOrder: \"asc\",\n ...options\n };\n const basename2 = (name) => name.lastIndexOf(\".\") > 0 ? name.slice(0, name.lastIndexOf(\".\")) : name;\n const identifiers2 = [\n // 1: Sort favorites first if enabled\n ...sortingOptions.sortFavoritesFirst ? [(v) => v.attributes?.favorite !== 1] : [],\n // 2: Sort folders first if sorting by name\n ...sortingOptions.sortFoldersFirst ? [(v) => v.type !== \"folder\"] : [],\n // 3: Use sorting mode if NOT basename (to be able to use display name too)\n ...sortingOptions.sortingMode !== \"basename\" ? [(v) => v[sortingOptions.sortingMode]] : [],\n // 4: Use display name if available, fallback to name\n (v) => basename2(v.attributes?.displayname || v.basename),\n // 5: Finally, use basename if all previous sorting methods failed\n (v) => v.basename\n ];\n const orders = [\n // (for 1): always sort favorites before normal files\n ...sortingOptions.sortFavoritesFirst ? [\"asc\"] : [],\n // (for 2): always sort folders before files\n ...sortingOptions.sortFoldersFirst ? [\"asc\"] : [],\n // (for 3): Reverse if sorting by mtime as mtime higher means edited more recent -> lower\n ...sortingOptions.sortingMode === \"mtime\" ? [sortingOptions.sortingOrder === \"asc\" ? \"desc\" : \"asc\"] : [],\n // (also for 3 so make sure not to conflict with 2 and 3)\n ...sortingOptions.sortingMode !== \"mtime\" && sortingOptions.sortingMode !== \"basename\" ? [sortingOptions.sortingOrder] : [],\n // for 4: use configured sorting direction\n sortingOptions.sortingOrder,\n // for 5: use configured sorting direction\n sortingOptions.sortingOrder\n ];\n return orderBy(nodes, identifiers2, orders);\n}\nclass Navigation extends TypedEventTarget {\n _views = [];\n _currentView = null;\n /**\n * Register a new view on the navigation\n * @param view The view to register\n * @throws `Error` is thrown if a view with the same id is already registered\n */\n register(view) {\n if (this._views.find((search) => search.id === view.id)) {\n throw new Error(`View id ${view.id} is already registered`);\n }\n this._views.push(view);\n this.dispatchTypedEvent(\"update\", new CustomEvent(\"update\"));\n }\n /**\n * Remove a registered view\n * @param id The id of the view to remove\n */\n remove(id) {\n const index = this._views.findIndex((view) => view.id === id);\n if (index !== -1) {\n this._views.splice(index, 1);\n this.dispatchTypedEvent(\"update\", new CustomEvent(\"update\"));\n }\n }\n /**\n * Set the currently active view\n * @fires UpdateActiveViewEvent\n * @param view New active view\n */\n setActive(view) {\n this._currentView = view;\n const event = new CustomEvent(\"updateActive\", { detail: view });\n this.dispatchTypedEvent(\"updateActive\", event);\n }\n /**\n * The currently active files view\n */\n get active() {\n return this._currentView;\n }\n /**\n * All registered views\n */\n get views() {\n return this._views;\n }\n}\nconst getNavigation = function() {\n if (typeof window._nc_navigation === \"undefined\") {\n window._nc_navigation = new Navigation();\n logger.debug(\"Navigation service initialized\");\n }\n return window._nc_navigation;\n};\nclass Column {\n _column;\n constructor(column) {\n isValidColumn(column);\n this._column = column;\n }\n get id() {\n return this._column.id;\n }\n get title() {\n return this._column.title;\n }\n get render() {\n return this._column.render;\n }\n get sort() {\n return this._column.sort;\n }\n get summary() {\n return this._column.summary;\n }\n}\nconst isValidColumn = function(column) {\n if (!column.id || typeof column.id !== \"string\") {\n throw new Error(\"A column id is required\");\n }\n if (!column.title || typeof column.title !== \"string\") {\n throw new Error(\"A column title is required\");\n }\n if (!column.render || typeof column.render !== \"function\") {\n throw new Error(\"A render function is required\");\n }\n if (column.sort && typeof column.sort !== \"function\") {\n throw new Error(\"Column sortFunction must be a function\");\n }\n if (column.summary && typeof column.summary !== \"function\") {\n throw new Error(\"Column summary must be a function\");\n }\n return true;\n};\nfunction getDefaultExportFromCjs(x) {\n return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, \"default\") ? x[\"default\"] : x;\n}\nvar validator$2 = {};\nvar util$3 = {};\n(function(exports) {\n const nameStartChar = \":A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n const nameChar = nameStartChar + \"\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\n const nameRegexp = \"[\" + nameStartChar + \"][\" + nameChar + \"]*\";\n const regexName = new RegExp(\"^\" + nameRegexp + \"$\");\n const getAllMatches = function(string, regex) {\n const matches = [];\n let match = regex.exec(string);\n while (match) {\n const allmatches = [];\n allmatches.startIndex = regex.lastIndex - match[0].length;\n const len = match.length;\n for (let index = 0; index < len; index++) {\n allmatches.push(match[index]);\n }\n matches.push(allmatches);\n match = regex.exec(string);\n }\n return matches;\n };\n const isName = function(string) {\n const match = regexName.exec(string);\n return !(match === null || typeof match === \"undefined\");\n };\n exports.isExist = function(v) {\n return typeof v !== \"undefined\";\n };\n exports.isEmptyObject = function(obj) {\n return Object.keys(obj).length === 0;\n };\n exports.merge = function(target, a, arrayMode) {\n if (a) {\n const keys = Object.keys(a);\n const len = keys.length;\n for (let i = 0; i < len; i++) {\n if (arrayMode === \"strict\") {\n target[keys[i]] = [a[keys[i]]];\n } else {\n target[keys[i]] = a[keys[i]];\n }\n }\n }\n };\n exports.getValue = function(v) {\n if (exports.isExist(v)) {\n return v;\n } else {\n return \"\";\n }\n };\n exports.isName = isName;\n exports.getAllMatches = getAllMatches;\n exports.nameRegexp = nameRegexp;\n})(util$3);\nconst util$2 = util$3;\nconst defaultOptions$2 = {\n allowBooleanAttributes: false,\n //A tag can have attributes without any value\n unpairedTags: []\n};\nvalidator$2.validate = function(xmlData, options) {\n options = Object.assign({}, defaultOptions$2, options);\n const tags = [];\n let tagFound = false;\n let reachedRoot = false;\n if (xmlData[0] === \"\\uFEFF\") {\n xmlData = xmlData.substr(1);\n }\n for (let i = 0; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\" && xmlData[i + 1] === \"?\") {\n i += 2;\n i = readPI(xmlData, i);\n if (i.err) return i;\n } else if (xmlData[i] === \"<\") {\n let tagStartPos = i;\n i++;\n if (xmlData[i] === \"!\") {\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n let closingTag = false;\n if (xmlData[i] === \"/\") {\n closingTag = true;\n i++;\n }\n let tagName = \"\";\n for (; i < xmlData.length && xmlData[i] !== \">\" && xmlData[i] !== \" \" && xmlData[i] !== \"\t\" && xmlData[i] !== \"\\n\" && xmlData[i] !== \"\\r\"; i++) {\n tagName += xmlData[i];\n }\n tagName = tagName.trim();\n if (tagName[tagName.length - 1] === \"/\") {\n tagName = tagName.substring(0, tagName.length - 1);\n i--;\n }\n if (!validateTagName(tagName)) {\n let msg;\n if (tagName.trim().length === 0) {\n msg = \"Invalid space after '<'.\";\n } else {\n msg = \"Tag '\" + tagName + \"' is an invalid name.\";\n }\n return getErrorObject(\"InvalidTag\", msg, getLineNumberForPosition(xmlData, i));\n }\n const result = readAttributeStr(xmlData, i);\n if (result === false) {\n return getErrorObject(\"InvalidAttr\", \"Attributes for '\" + tagName + \"' have open quote.\", getLineNumberForPosition(xmlData, i));\n }\n let attrStr = result.value;\n i = result.index;\n if (attrStr[attrStr.length - 1] === \"/\") {\n const attrStrStart = i - attrStr.length;\n attrStr = attrStr.substring(0, attrStr.length - 1);\n const isValid = validateAttributeString(attrStr, options);\n if (isValid === true) {\n tagFound = true;\n } else {\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, attrStrStart + isValid.err.line));\n }\n } else if (closingTag) {\n if (!result.tagClosed) {\n return getErrorObject(\"InvalidTag\", \"Closing tag '\" + tagName + \"' doesn't have proper closing.\", getLineNumberForPosition(xmlData, i));\n } else if (attrStr.trim().length > 0) {\n return getErrorObject(\"InvalidTag\", \"Closing tag '\" + tagName + \"' can't have attributes or invalid starting.\", getLineNumberForPosition(xmlData, tagStartPos));\n } else if (tags.length === 0) {\n return getErrorObject(\"InvalidTag\", \"Closing tag '\" + tagName + \"' has not been opened.\", getLineNumberForPosition(xmlData, tagStartPos));\n } else {\n const otg = tags.pop();\n if (tagName !== otg.tagName) {\n let openPos = getLineNumberForPosition(xmlData, otg.tagStartPos);\n return getErrorObject(\n \"InvalidTag\",\n \"Expected closing tag '\" + otg.tagName + \"' (opened in line \" + openPos.line + \", col \" + openPos.col + \") instead of closing tag '\" + tagName + \"'.\",\n getLineNumberForPosition(xmlData, tagStartPos)\n );\n }\n if (tags.length == 0) {\n reachedRoot = true;\n }\n }\n } else {\n const isValid = validateAttributeString(attrStr, options);\n if (isValid !== true) {\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n }\n if (reachedRoot === true) {\n return getErrorObject(\"InvalidXml\", \"Multiple possible root nodes found.\", getLineNumberForPosition(xmlData, i));\n } else if (options.unpairedTags.indexOf(tagName) !== -1) ;\n else {\n tags.push({ tagName, tagStartPos });\n }\n tagFound = true;\n }\n for (i++; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\") {\n if (xmlData[i + 1] === \"!\") {\n i++;\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else if (xmlData[i + 1] === \"?\") {\n i = readPI(xmlData, ++i);\n if (i.err) return i;\n } else {\n break;\n }\n } else if (xmlData[i] === \"&\") {\n const afterAmp = validateAmpersand(xmlData, i);\n if (afterAmp == -1)\n return getErrorObject(\"InvalidChar\", \"char '&' is not expected.\", getLineNumberForPosition(xmlData, i));\n i = afterAmp;\n } else {\n if (reachedRoot === true && !isWhiteSpace(xmlData[i])) {\n return getErrorObject(\"InvalidXml\", \"Extra text at the end\", getLineNumberForPosition(xmlData, i));\n }\n }\n }\n if (xmlData[i] === \"<\") {\n i--;\n }\n }\n } else {\n if (isWhiteSpace(xmlData[i])) {\n continue;\n }\n return getErrorObject(\"InvalidChar\", \"char '\" + xmlData[i] + \"' is not expected.\", getLineNumberForPosition(xmlData, i));\n }\n }\n if (!tagFound) {\n return getErrorObject(\"InvalidXml\", \"Start tag expected.\", 1);\n } else if (tags.length == 1) {\n return getErrorObject(\"InvalidTag\", \"Unclosed tag '\" + tags[0].tagName + \"'.\", getLineNumberForPosition(xmlData, tags[0].tagStartPos));\n } else if (tags.length > 0) {\n return getErrorObject(\"InvalidXml\", \"Invalid '\" + JSON.stringify(tags.map((t2) => t2.tagName), null, 4).replace(/\\r?\\n/g, \"\") + \"' found.\", { line: 1, col: 1 });\n }\n return true;\n};\nfunction isWhiteSpace(char) {\n return char === \" \" || char === \"\t\" || char === \"\\n\" || char === \"\\r\";\n}\nfunction readPI(xmlData, i) {\n const start = i;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] == \"?\" || xmlData[i] == \" \") {\n const tagname = xmlData.substr(start, i - start);\n if (i > 5 && tagname === \"xml\") {\n return getErrorObject(\"InvalidXml\", \"XML declaration allowed only at the start of the document.\", getLineNumberForPosition(xmlData, i));\n } else if (xmlData[i] == \"?\" && xmlData[i + 1] == \">\") {\n i++;\n break;\n } else {\n continue;\n }\n }\n }\n return i;\n}\nfunction readCommentAndCDATA(xmlData, i) {\n if (xmlData.length > i + 5 && xmlData[i + 1] === \"-\" && xmlData[i + 2] === \"-\") {\n for (i += 3; i < xmlData.length; i++) {\n if (xmlData[i] === \"-\" && xmlData[i + 1] === \"-\" && xmlData[i + 2] === \">\") {\n i += 2;\n break;\n }\n }\n } else if (xmlData.length > i + 8 && xmlData[i + 1] === \"D\" && xmlData[i + 2] === \"O\" && xmlData[i + 3] === \"C\" && xmlData[i + 4] === \"T\" && xmlData[i + 5] === \"Y\" && xmlData[i + 6] === \"P\" && xmlData[i + 7] === \"E\") {\n let angleBracketsCount = 1;\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\") {\n angleBracketsCount++;\n } else if (xmlData[i] === \">\") {\n angleBracketsCount--;\n if (angleBracketsCount === 0) {\n break;\n }\n }\n }\n } else if (xmlData.length > i + 9 && xmlData[i + 1] === \"[\" && xmlData[i + 2] === \"C\" && xmlData[i + 3] === \"D\" && xmlData[i + 4] === \"A\" && xmlData[i + 5] === \"T\" && xmlData[i + 6] === \"A\" && xmlData[i + 7] === \"[\") {\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === \"]\" && xmlData[i + 1] === \"]\" && xmlData[i + 2] === \">\") {\n i += 2;\n break;\n }\n }\n }\n return i;\n}\nconst doubleQuote = '\"';\nconst singleQuote = \"'\";\nfunction readAttributeStr(xmlData, i) {\n let attrStr = \"\";\n let startChar = \"\";\n let tagClosed = false;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n if (startChar === \"\") {\n startChar = xmlData[i];\n } else if (startChar !== xmlData[i]) ;\n else {\n startChar = \"\";\n }\n } else if (xmlData[i] === \">\") {\n if (startChar === \"\") {\n tagClosed = true;\n break;\n }\n }\n attrStr += xmlData[i];\n }\n if (startChar !== \"\") {\n return false;\n }\n return {\n value: attrStr,\n index: i,\n tagClosed\n };\n}\nconst validAttrStrRegxp = new RegExp(`(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*(['\"])(([\\\\s\\\\S])*?)\\\\5)?`, \"g\");\nfunction validateAttributeString(attrStr, options) {\n const matches = util$2.getAllMatches(attrStr, validAttrStrRegxp);\n const attrNames = {};\n for (let i = 0; i < matches.length; i++) {\n if (matches[i][1].length === 0) {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + matches[i][2] + \"' has no space in starting.\", getPositionFromMatch(matches[i]));\n } else if (matches[i][3] !== void 0 && matches[i][4] === void 0) {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + matches[i][2] + \"' is without value.\", getPositionFromMatch(matches[i]));\n } else if (matches[i][3] === void 0 && !options.allowBooleanAttributes) {\n return getErrorObject(\"InvalidAttr\", \"boolean attribute '\" + matches[i][2] + \"' is not allowed.\", getPositionFromMatch(matches[i]));\n }\n const attrName = matches[i][2];\n if (!validateAttrName(attrName)) {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + attrName + \"' is an invalid name.\", getPositionFromMatch(matches[i]));\n }\n if (!attrNames.hasOwnProperty(attrName)) {\n attrNames[attrName] = 1;\n } else {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + attrName + \"' is repeated.\", getPositionFromMatch(matches[i]));\n }\n }\n return true;\n}\nfunction validateNumberAmpersand(xmlData, i) {\n let re2 = /\\d/;\n if (xmlData[i] === \"x\") {\n i++;\n re2 = /[\\da-fA-F]/;\n }\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === \";\")\n return i;\n if (!xmlData[i].match(re2))\n break;\n }\n return -1;\n}\nfunction validateAmpersand(xmlData, i) {\n i++;\n if (xmlData[i] === \";\")\n return -1;\n if (xmlData[i] === \"#\") {\n i++;\n return validateNumberAmpersand(xmlData, i);\n }\n let count = 0;\n for (; i < xmlData.length; i++, count++) {\n if (xmlData[i].match(/\\w/) && count < 20)\n continue;\n if (xmlData[i] === \";\")\n break;\n return -1;\n }\n return i;\n}\nfunction getErrorObject(code, message, lineNumber) {\n return {\n err: {\n code,\n msg: message,\n line: lineNumber.line || lineNumber,\n col: lineNumber.col\n }\n };\n}\nfunction validateAttrName(attrName) {\n return util$2.isName(attrName);\n}\nfunction validateTagName(tagname) {\n return util$2.isName(tagname);\n}\nfunction getLineNumberForPosition(xmlData, index) {\n const lines = xmlData.substring(0, index).split(/\\r?\\n/);\n return {\n line: lines.length,\n // column number is last line's length + 1, because column numbering starts at 1:\n col: lines[lines.length - 1].length + 1\n };\n}\nfunction getPositionFromMatch(match) {\n return match.startIndex + match[1].length;\n}\nvar OptionsBuilder = {};\nconst defaultOptions$1 = {\n preserveOrder: false,\n attributeNamePrefix: \"@_\",\n attributesGroupName: false,\n textNodeName: \"#text\",\n ignoreAttributes: true,\n removeNSPrefix: false,\n // remove NS from tag name or attribute name if true\n allowBooleanAttributes: false,\n //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseTagValue: true,\n parseAttributeValue: false,\n trimValues: true,\n //Trim string values of tag and attributes\n cdataPropName: false,\n numberParseOptions: {\n hex: true,\n leadingZeros: true,\n eNotation: true\n },\n tagValueProcessor: function(tagName, val2) {\n return val2;\n },\n attributeValueProcessor: function(attrName, val2) {\n return val2;\n },\n stopNodes: [],\n //nested tags will not be parsed even for errors\n alwaysCreateTextNode: false,\n isArray: () => false,\n commentPropName: false,\n unpairedTags: [],\n processEntities: true,\n htmlEntities: false,\n ignoreDeclaration: false,\n ignorePiTags: false,\n transformTagName: false,\n transformAttributeName: false,\n updateTag: function(tagName, jPath, attrs) {\n return tagName;\n }\n // skipEmptyListItem: false\n};\nconst buildOptions$1 = function(options) {\n return Object.assign({}, defaultOptions$1, options);\n};\nOptionsBuilder.buildOptions = buildOptions$1;\nOptionsBuilder.defaultOptions = defaultOptions$1;\nclass XmlNode {\n constructor(tagname) {\n this.tagname = tagname;\n this.child = [];\n this[\":@\"] = {};\n }\n add(key, val2) {\n if (key === \"__proto__\") key = \"#__proto__\";\n this.child.push({ [key]: val2 });\n }\n addChild(node) {\n if (node.tagname === \"__proto__\") node.tagname = \"#__proto__\";\n if (node[\":@\"] && Object.keys(node[\":@\"]).length > 0) {\n this.child.push({ [node.tagname]: node.child, [\":@\"]: node[\":@\"] });\n } else {\n this.child.push({ [node.tagname]: node.child });\n }\n }\n}\nvar xmlNode$1 = XmlNode;\nconst util$1 = util$3;\nfunction readDocType$1(xmlData, i) {\n const entities = {};\n if (xmlData[i + 3] === \"O\" && xmlData[i + 4] === \"C\" && xmlData[i + 5] === \"T\" && xmlData[i + 6] === \"Y\" && xmlData[i + 7] === \"P\" && xmlData[i + 8] === \"E\") {\n i = i + 9;\n let angleBracketsCount = 1;\n let hasBody = false, comment = false;\n let exp = \"\";\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\" && !comment) {\n if (hasBody && isEntity(xmlData, i)) {\n i += 7;\n [entityName, val, i] = readEntityExp(xmlData, i + 1);\n if (val.indexOf(\"&\") === -1)\n entities[validateEntityName(entityName)] = {\n regx: RegExp(`&${entityName};`, \"g\"),\n val\n };\n } else if (hasBody && isElement(xmlData, i)) i += 8;\n else if (hasBody && isAttlist(xmlData, i)) i += 8;\n else if (hasBody && isNotation(xmlData, i)) i += 9;\n else if (isComment) comment = true;\n else throw new Error(\"Invalid DOCTYPE\");\n angleBracketsCount++;\n exp = \"\";\n } else if (xmlData[i] === \">\") {\n if (comment) {\n if (xmlData[i - 1] === \"-\" && xmlData[i - 2] === \"-\") {\n comment = false;\n angleBracketsCount--;\n }\n } else {\n angleBracketsCount--;\n }\n if (angleBracketsCount === 0) {\n break;\n }\n } else if (xmlData[i] === \"[\") {\n hasBody = true;\n } else {\n exp += xmlData[i];\n }\n }\n if (angleBracketsCount !== 0) {\n throw new Error(`Unclosed DOCTYPE`);\n }\n } else {\n throw new Error(`Invalid Tag instead of DOCTYPE`);\n }\n return { entities, i };\n}\nfunction readEntityExp(xmlData, i) {\n let entityName2 = \"\";\n for (; i < xmlData.length && (xmlData[i] !== \"'\" && xmlData[i] !== '\"'); i++) {\n entityName2 += xmlData[i];\n }\n entityName2 = entityName2.trim();\n if (entityName2.indexOf(\" \") !== -1) throw new Error(\"External entites are not supported\");\n const startChar = xmlData[i++];\n let val2 = \"\";\n for (; i < xmlData.length && xmlData[i] !== startChar; i++) {\n val2 += xmlData[i];\n }\n return [entityName2, val2, i];\n}\nfunction isComment(xmlData, i) {\n if (xmlData[i + 1] === \"!\" && xmlData[i + 2] === \"-\" && xmlData[i + 3] === \"-\") return true;\n return false;\n}\nfunction isEntity(xmlData, i) {\n if (xmlData[i + 1] === \"!\" && xmlData[i + 2] === \"E\" && xmlData[i + 3] === \"N\" && xmlData[i + 4] === \"T\" && xmlData[i + 5] === \"I\" && xmlData[i + 6] === \"T\" && xmlData[i + 7] === \"Y\") return true;\n return false;\n}\nfunction isElement(xmlData, i) {\n if (xmlData[i + 1] === \"!\" && xmlData[i + 2] === \"E\" && xmlData[i + 3] === \"L\" && xmlData[i + 4] === \"E\" && xmlData[i + 5] === \"M\" && xmlData[i + 6] === \"E\" && xmlData[i + 7] === \"N\" && xmlData[i + 8] === \"T\") return true;\n return false;\n}\nfunction isAttlist(xmlData, i) {\n if (xmlData[i + 1] === \"!\" && xmlData[i + 2] === \"A\" && xmlData[i + 3] === \"T\" && xmlData[i + 4] === \"T\" && xmlData[i + 5] === \"L\" && xmlData[i + 6] === \"I\" && xmlData[i + 7] === \"S\" && xmlData[i + 8] === \"T\") return true;\n return false;\n}\nfunction isNotation(xmlData, i) {\n if (xmlData[i + 1] === \"!\" && xmlData[i + 2] === \"N\" && xmlData[i + 3] === \"O\" && xmlData[i + 4] === \"T\" && xmlData[i + 5] === \"A\" && xmlData[i + 6] === \"T\" && xmlData[i + 7] === \"I\" && xmlData[i + 8] === \"O\" && xmlData[i + 9] === \"N\") return true;\n return false;\n}\nfunction validateEntityName(name) {\n if (util$1.isName(name))\n return name;\n else\n throw new Error(`Invalid entity name ${name}`);\n}\nvar DocTypeReader = readDocType$1;\nconst hexRegex = /^[-+]?0x[a-fA-F0-9]+$/;\nconst numRegex = /^([\\-\\+])?(0*)(\\.[0-9]+([eE]\\-?[0-9]+)?|[0-9]+(\\.[0-9]+([eE]\\-?[0-9]+)?)?)$/;\nif (!Number.parseInt && window.parseInt) {\n Number.parseInt = window.parseInt;\n}\nif (!Number.parseFloat && window.parseFloat) {\n Number.parseFloat = window.parseFloat;\n}\nconst consider = {\n hex: true,\n leadingZeros: true,\n decimalPoint: \".\",\n eNotation: true\n //skipLike: /regex/\n};\nfunction toNumber$1(str, options = {}) {\n options = Object.assign({}, consider, options);\n if (!str || typeof str !== \"string\") return str;\n let trimmedStr = str.trim();\n if (options.skipLike !== void 0 && options.skipLike.test(trimmedStr)) return str;\n else if (options.hex && hexRegex.test(trimmedStr)) {\n return Number.parseInt(trimmedStr, 16);\n } else {\n const match = numRegex.exec(trimmedStr);\n if (match) {\n const sign = match[1];\n const leadingZeros = match[2];\n let numTrimmedByZeros = trimZeros(match[3]);\n const eNotation = match[4] || match[6];\n if (!options.leadingZeros && leadingZeros.length > 0 && sign && trimmedStr[2] !== \".\") return str;\n else if (!options.leadingZeros && leadingZeros.length > 0 && !sign && trimmedStr[1] !== \".\") return str;\n else {\n const num = Number(trimmedStr);\n const numStr = \"\" + num;\n if (numStr.search(/[eE]/) !== -1) {\n if (options.eNotation) return num;\n else return str;\n } else if (eNotation) {\n if (options.eNotation) return num;\n else return str;\n } else if (trimmedStr.indexOf(\".\") !== -1) {\n if (numStr === \"0\" && numTrimmedByZeros === \"\") return num;\n else if (numStr === numTrimmedByZeros) return num;\n else if (sign && numStr === \"-\" + numTrimmedByZeros) return num;\n else return str;\n }\n if (leadingZeros) {\n if (numTrimmedByZeros === numStr) return num;\n else if (sign + numTrimmedByZeros === numStr) return num;\n else return str;\n }\n if (trimmedStr === numStr) return num;\n else if (trimmedStr === sign + numStr) return num;\n return str;\n }\n } else {\n return str;\n }\n }\n}\nfunction trimZeros(numStr) {\n if (numStr && numStr.indexOf(\".\") !== -1) {\n numStr = numStr.replace(/0+$/, \"\");\n if (numStr === \".\") numStr = \"0\";\n else if (numStr[0] === \".\") numStr = \"0\" + numStr;\n else if (numStr[numStr.length - 1] === \".\") numStr = numStr.substr(0, numStr.length - 1);\n return numStr;\n }\n return numStr;\n}\nvar strnum = toNumber$1;\nconst util = util$3;\nconst xmlNode = xmlNode$1;\nconst readDocType = DocTypeReader;\nconst toNumber = strnum;\nlet OrderedObjParser$1 = class OrderedObjParser {\n constructor(options) {\n this.options = options;\n this.currentNode = null;\n this.tagsNodeStack = [];\n this.docTypeEntities = {};\n this.lastEntities = {\n \"apos\": { regex: /&(apos|#39|#x27);/g, val: \"'\" },\n \"gt\": { regex: /&(gt|#62|#x3E);/g, val: \">\" },\n \"lt\": { regex: /&(lt|#60|#x3C);/g, val: \"<\" },\n \"quot\": { regex: /&(quot|#34|#x22);/g, val: '\"' }\n };\n this.ampEntity = { regex: /&(amp|#38|#x26);/g, val: \"&\" };\n this.htmlEntities = {\n \"space\": { regex: /&(nbsp|#160);/g, val: \" \" },\n // \"lt\" : { regex: /&(lt|#60);/g, val: \"<\" },\n // \"gt\" : { regex: /&(gt|#62);/g, val: \">\" },\n // \"amp\" : { regex: /&(amp|#38);/g, val: \"&\" },\n // \"quot\" : { regex: /&(quot|#34);/g, val: \"\\\"\" },\n // \"apos\" : { regex: /&(apos|#39);/g, val: \"'\" },\n \"cent\": { regex: /&(cent|#162);/g, val: \"¢\" },\n \"pound\": { regex: /&(pound|#163);/g, val: \"£\" },\n \"yen\": { regex: /&(yen|#165);/g, val: \"¥\" },\n \"euro\": { regex: /&(euro|#8364);/g, val: \"€\" },\n \"copyright\": { regex: /&(copy|#169);/g, val: \"©\" },\n \"reg\": { regex: /&(reg|#174);/g, val: \"®\" },\n \"inr\": { regex: /&(inr|#8377);/g, val: \"₹\" },\n \"num_dec\": { regex: /&#([0-9]{1,7});/g, val: (_, str) => String.fromCharCode(Number.parseInt(str, 10)) },\n \"num_hex\": { regex: /&#x([0-9a-fA-F]{1,6});/g, val: (_, str) => String.fromCharCode(Number.parseInt(str, 16)) }\n };\n this.addExternalEntities = addExternalEntities;\n this.parseXml = parseXml;\n this.parseTextData = parseTextData;\n this.resolveNameSpace = resolveNameSpace;\n this.buildAttributesMap = buildAttributesMap;\n this.isItStopNode = isItStopNode;\n this.replaceEntitiesValue = replaceEntitiesValue$1;\n this.readStopNodeData = readStopNodeData;\n this.saveTextToParentTag = saveTextToParentTag;\n this.addChild = addChild;\n }\n};\nfunction addExternalEntities(externalEntities) {\n const entKeys = Object.keys(externalEntities);\n for (let i = 0; i < entKeys.length; i++) {\n const ent = entKeys[i];\n this.lastEntities[ent] = {\n regex: new RegExp(\"&\" + ent + \";\", \"g\"),\n val: externalEntities[ent]\n };\n }\n}\nfunction parseTextData(val2, tagName, jPath, dontTrim, hasAttributes, isLeafNode, escapeEntities) {\n if (val2 !== void 0) {\n if (this.options.trimValues && !dontTrim) {\n val2 = val2.trim();\n }\n if (val2.length > 0) {\n if (!escapeEntities) val2 = this.replaceEntitiesValue(val2);\n const newval = this.options.tagValueProcessor(tagName, val2, jPath, hasAttributes, isLeafNode);\n if (newval === null || newval === void 0) {\n return val2;\n } else if (typeof newval !== typeof val2 || newval !== val2) {\n return newval;\n } else if (this.options.trimValues) {\n return parseValue(val2, this.options.parseTagValue, this.options.numberParseOptions);\n } else {\n const trimmedVal = val2.trim();\n if (trimmedVal === val2) {\n return parseValue(val2, this.options.parseTagValue, this.options.numberParseOptions);\n } else {\n return val2;\n }\n }\n }\n }\n}\nfunction resolveNameSpace(tagname) {\n if (this.options.removeNSPrefix) {\n const tags = tagname.split(\":\");\n const prefix = tagname.charAt(0) === \"/\" ? \"/\" : \"\";\n if (tags[0] === \"xmlns\") {\n return \"\";\n }\n if (tags.length === 2) {\n tagname = prefix + tags[1];\n }\n }\n return tagname;\n}\nconst attrsRegx = new RegExp(`([^\\\\s=]+)\\\\s*(=\\\\s*(['\"])([\\\\s\\\\S]*?)\\\\3)?`, \"gm\");\nfunction buildAttributesMap(attrStr, jPath, tagName) {\n if (!this.options.ignoreAttributes && typeof attrStr === \"string\") {\n const matches = util.getAllMatches(attrStr, attrsRegx);\n const len = matches.length;\n const attrs = {};\n for (let i = 0; i < len; i++) {\n const attrName = this.resolveNameSpace(matches[i][1]);\n let oldVal = matches[i][4];\n let aName = this.options.attributeNamePrefix + attrName;\n if (attrName.length) {\n if (this.options.transformAttributeName) {\n aName = this.options.transformAttributeName(aName);\n }\n if (aName === \"__proto__\") aName = \"#__proto__\";\n if (oldVal !== void 0) {\n if (this.options.trimValues) {\n oldVal = oldVal.trim();\n }\n oldVal = this.replaceEntitiesValue(oldVal);\n const newVal = this.options.attributeValueProcessor(attrName, oldVal, jPath);\n if (newVal === null || newVal === void 0) {\n attrs[aName] = oldVal;\n } else if (typeof newVal !== typeof oldVal || newVal !== oldVal) {\n attrs[aName] = newVal;\n } else {\n attrs[aName] = parseValue(\n oldVal,\n this.options.parseAttributeValue,\n this.options.numberParseOptions\n );\n }\n } else if (this.options.allowBooleanAttributes) {\n attrs[aName] = true;\n }\n }\n }\n if (!Object.keys(attrs).length) {\n return;\n }\n if (this.options.attributesGroupName) {\n const attrCollection = {};\n attrCollection[this.options.attributesGroupName] = attrs;\n return attrCollection;\n }\n return attrs;\n }\n}\nconst parseXml = function(xmlData) {\n xmlData = xmlData.replace(/\\r\\n?/g, \"\\n\");\n const xmlObj = new xmlNode(\"!xml\");\n let currentNode = xmlObj;\n let textData = \"\";\n let jPath = \"\";\n for (let i = 0; i < xmlData.length; i++) {\n const ch = xmlData[i];\n if (ch === \"<\") {\n if (xmlData[i + 1] === \"/\") {\n const closeIndex = findClosingIndex(xmlData, \">\", i, \"Closing Tag is not closed.\");\n let tagName = xmlData.substring(i + 2, closeIndex).trim();\n if (this.options.removeNSPrefix) {\n const colonIndex = tagName.indexOf(\":\");\n if (colonIndex !== -1) {\n tagName = tagName.substr(colonIndex + 1);\n }\n }\n if (this.options.transformTagName) {\n tagName = this.options.transformTagName(tagName);\n }\n if (currentNode) {\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n }\n const lastTagName = jPath.substring(jPath.lastIndexOf(\".\") + 1);\n if (tagName && this.options.unpairedTags.indexOf(tagName) !== -1) {\n throw new Error(`Unpaired tag can not be used as closing tag: `);\n }\n let propIndex = 0;\n if (lastTagName && this.options.unpairedTags.indexOf(lastTagName) !== -1) {\n propIndex = jPath.lastIndexOf(\".\", jPath.lastIndexOf(\".\") - 1);\n this.tagsNodeStack.pop();\n } else {\n propIndex = jPath.lastIndexOf(\".\");\n }\n jPath = jPath.substring(0, propIndex);\n currentNode = this.tagsNodeStack.pop();\n textData = \"\";\n i = closeIndex;\n } else if (xmlData[i + 1] === \"?\") {\n let tagData = readTagExp(xmlData, i, false, \"?>\");\n if (!tagData) throw new Error(\"Pi Tag is not closed.\");\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n if (this.options.ignoreDeclaration && tagData.tagName === \"?xml\" || this.options.ignorePiTags) ;\n else {\n const childNode = new xmlNode(tagData.tagName);\n childNode.add(this.options.textNodeName, \"\");\n if (tagData.tagName !== tagData.tagExp && tagData.attrExpPresent) {\n childNode[\":@\"] = this.buildAttributesMap(tagData.tagExp, jPath, tagData.tagName);\n }\n this.addChild(currentNode, childNode, jPath);\n }\n i = tagData.closeIndex + 1;\n } else if (xmlData.substr(i + 1, 3) === \"!--\") {\n const endIndex = findClosingIndex(xmlData, \"-->\", i + 4, \"Comment is not closed.\");\n if (this.options.commentPropName) {\n const comment = xmlData.substring(i + 4, endIndex - 2);\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n currentNode.add(this.options.commentPropName, [{ [this.options.textNodeName]: comment }]);\n }\n i = endIndex;\n } else if (xmlData.substr(i + 1, 2) === \"!D\") {\n const result = readDocType(xmlData, i);\n this.docTypeEntities = result.entities;\n i = result.i;\n } else if (xmlData.substr(i + 1, 2) === \"![\") {\n const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"CDATA is not closed.\") - 2;\n const tagExp = xmlData.substring(i + 9, closeIndex);\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n let val2 = this.parseTextData(tagExp, currentNode.tagname, jPath, true, false, true, true);\n if (val2 == void 0) val2 = \"\";\n if (this.options.cdataPropName) {\n currentNode.add(this.options.cdataPropName, [{ [this.options.textNodeName]: tagExp }]);\n } else {\n currentNode.add(this.options.textNodeName, val2);\n }\n i = closeIndex + 2;\n } else {\n let result = readTagExp(xmlData, i, this.options.removeNSPrefix);\n let tagName = result.tagName;\n const rawTagName = result.rawTagName;\n let tagExp = result.tagExp;\n let attrExpPresent = result.attrExpPresent;\n let closeIndex = result.closeIndex;\n if (this.options.transformTagName) {\n tagName = this.options.transformTagName(tagName);\n }\n if (currentNode && textData) {\n if (currentNode.tagname !== \"!xml\") {\n textData = this.saveTextToParentTag(textData, currentNode, jPath, false);\n }\n }\n const lastTag = currentNode;\n if (lastTag && this.options.unpairedTags.indexOf(lastTag.tagname) !== -1) {\n currentNode = this.tagsNodeStack.pop();\n jPath = jPath.substring(0, jPath.lastIndexOf(\".\"));\n }\n if (tagName !== xmlObj.tagname) {\n jPath += jPath ? \".\" + tagName : tagName;\n }\n if (this.isItStopNode(this.options.stopNodes, jPath, tagName)) {\n let tagContent = \"\";\n if (tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1) {\n if (tagName[tagName.length - 1] === \"/\") {\n tagName = tagName.substr(0, tagName.length - 1);\n jPath = jPath.substr(0, jPath.length - 1);\n tagExp = tagName;\n } else {\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n i = result.closeIndex;\n } else if (this.options.unpairedTags.indexOf(tagName) !== -1) {\n i = result.closeIndex;\n } else {\n const result2 = this.readStopNodeData(xmlData, rawTagName, closeIndex + 1);\n if (!result2) throw new Error(`Unexpected end of ${rawTagName}`);\n i = result2.i;\n tagContent = result2.tagContent;\n }\n const childNode = new xmlNode(tagName);\n if (tagName !== tagExp && attrExpPresent) {\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n if (tagContent) {\n tagContent = this.parseTextData(tagContent, tagName, jPath, true, attrExpPresent, true, true);\n }\n jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n childNode.add(this.options.textNodeName, tagContent);\n this.addChild(currentNode, childNode, jPath);\n } else {\n if (tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1) {\n if (tagName[tagName.length - 1] === \"/\") {\n tagName = tagName.substr(0, tagName.length - 1);\n jPath = jPath.substr(0, jPath.length - 1);\n tagExp = tagName;\n } else {\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n if (this.options.transformTagName) {\n tagName = this.options.transformTagName(tagName);\n }\n const childNode = new xmlNode(tagName);\n if (tagName !== tagExp && attrExpPresent) {\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n this.addChild(currentNode, childNode, jPath);\n jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n } else {\n const childNode = new xmlNode(tagName);\n this.tagsNodeStack.push(currentNode);\n if (tagName !== tagExp && attrExpPresent) {\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n this.addChild(currentNode, childNode, jPath);\n currentNode = childNode;\n }\n textData = \"\";\n i = closeIndex;\n }\n }\n } else {\n textData += xmlData[i];\n }\n }\n return xmlObj.child;\n};\nfunction addChild(currentNode, childNode, jPath) {\n const result = this.options.updateTag(childNode.tagname, jPath, childNode[\":@\"]);\n if (result === false) ;\n else if (typeof result === \"string\") {\n childNode.tagname = result;\n currentNode.addChild(childNode);\n } else {\n currentNode.addChild(childNode);\n }\n}\nconst replaceEntitiesValue$1 = function(val2) {\n if (this.options.processEntities) {\n for (let entityName2 in this.docTypeEntities) {\n const entity = this.docTypeEntities[entityName2];\n val2 = val2.replace(entity.regx, entity.val);\n }\n for (let entityName2 in this.lastEntities) {\n const entity = this.lastEntities[entityName2];\n val2 = val2.replace(entity.regex, entity.val);\n }\n if (this.options.htmlEntities) {\n for (let entityName2 in this.htmlEntities) {\n const entity = this.htmlEntities[entityName2];\n val2 = val2.replace(entity.regex, entity.val);\n }\n }\n val2 = val2.replace(this.ampEntity.regex, this.ampEntity.val);\n }\n return val2;\n};\nfunction saveTextToParentTag(textData, currentNode, jPath, isLeafNode) {\n if (textData) {\n if (isLeafNode === void 0) isLeafNode = Object.keys(currentNode.child).length === 0;\n textData = this.parseTextData(\n textData,\n currentNode.tagname,\n jPath,\n false,\n currentNode[\":@\"] ? Object.keys(currentNode[\":@\"]).length !== 0 : false,\n isLeafNode\n );\n if (textData !== void 0 && textData !== \"\")\n currentNode.add(this.options.textNodeName, textData);\n textData = \"\";\n }\n return textData;\n}\nfunction isItStopNode(stopNodes, jPath, currentTagName) {\n const allNodesExp = \"*.\" + currentTagName;\n for (const stopNodePath in stopNodes) {\n const stopNodeExp = stopNodes[stopNodePath];\n if (allNodesExp === stopNodeExp || jPath === stopNodeExp) return true;\n }\n return false;\n}\nfunction tagExpWithClosingIndex(xmlData, i, closingChar = \">\") {\n let attrBoundary;\n let tagExp = \"\";\n for (let index = i; index < xmlData.length; index++) {\n let ch = xmlData[index];\n if (attrBoundary) {\n if (ch === attrBoundary) attrBoundary = \"\";\n } else if (ch === '\"' || ch === \"'\") {\n attrBoundary = ch;\n } else if (ch === closingChar[0]) {\n if (closingChar[1]) {\n if (xmlData[index + 1] === closingChar[1]) {\n return {\n data: tagExp,\n index\n };\n }\n } else {\n return {\n data: tagExp,\n index\n };\n }\n } else if (ch === \"\t\") {\n ch = \" \";\n }\n tagExp += ch;\n }\n}\nfunction findClosingIndex(xmlData, str, i, errMsg) {\n const closingIndex = xmlData.indexOf(str, i);\n if (closingIndex === -1) {\n throw new Error(errMsg);\n } else {\n return closingIndex + str.length - 1;\n }\n}\nfunction readTagExp(xmlData, i, removeNSPrefix, closingChar = \">\") {\n const result = tagExpWithClosingIndex(xmlData, i + 1, closingChar);\n if (!result) return;\n let tagExp = result.data;\n const closeIndex = result.index;\n const separatorIndex = tagExp.search(/\\s/);\n let tagName = tagExp;\n let attrExpPresent = true;\n if (separatorIndex !== -1) {\n tagName = tagExp.substring(0, separatorIndex);\n tagExp = tagExp.substring(separatorIndex + 1).trimStart();\n }\n const rawTagName = tagName;\n if (removeNSPrefix) {\n const colonIndex = tagName.indexOf(\":\");\n if (colonIndex !== -1) {\n tagName = tagName.substr(colonIndex + 1);\n attrExpPresent = tagName !== result.data.substr(colonIndex + 1);\n }\n }\n return {\n tagName,\n tagExp,\n closeIndex,\n attrExpPresent,\n rawTagName\n };\n}\nfunction readStopNodeData(xmlData, tagName, i) {\n const startIndex = i;\n let openTagCount = 1;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\") {\n if (xmlData[i + 1] === \"/\") {\n const closeIndex = findClosingIndex(xmlData, \">\", i, `${tagName} is not closed`);\n let closeTagName = xmlData.substring(i + 2, closeIndex).trim();\n if (closeTagName === tagName) {\n openTagCount--;\n if (openTagCount === 0) {\n return {\n tagContent: xmlData.substring(startIndex, i),\n i: closeIndex\n };\n }\n }\n i = closeIndex;\n } else if (xmlData[i + 1] === \"?\") {\n const closeIndex = findClosingIndex(xmlData, \"?>\", i + 1, \"StopNode is not closed.\");\n i = closeIndex;\n } else if (xmlData.substr(i + 1, 3) === \"!--\") {\n const closeIndex = findClosingIndex(xmlData, \"-->\", i + 3, \"StopNode is not closed.\");\n i = closeIndex;\n } else if (xmlData.substr(i + 1, 2) === \"![\") {\n const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"StopNode is not closed.\") - 2;\n i = closeIndex;\n } else {\n const tagData = readTagExp(xmlData, i, \">\");\n if (tagData) {\n const openTagName = tagData && tagData.tagName;\n if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length - 1] !== \"/\") {\n openTagCount++;\n }\n i = tagData.closeIndex;\n }\n }\n }\n }\n}\nfunction parseValue(val2, shouldParse, options) {\n if (shouldParse && typeof val2 === \"string\") {\n const newval = val2.trim();\n if (newval === \"true\") return true;\n else if (newval === \"false\") return false;\n else return toNumber(val2, options);\n } else {\n if (util.isExist(val2)) {\n return val2;\n } else {\n return \"\";\n }\n }\n}\nvar OrderedObjParser_1 = OrderedObjParser$1;\nvar node2json = {};\nfunction prettify$1(node, options) {\n return compress(node, options);\n}\nfunction compress(arr, options, jPath) {\n let text;\n const compressedObj = {};\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const property = propName$1(tagObj);\n let newJpath = \"\";\n if (jPath === void 0) newJpath = property;\n else newJpath = jPath + \".\" + property;\n if (property === options.textNodeName) {\n if (text === void 0) text = tagObj[property];\n else text += \"\" + tagObj[property];\n } else if (property === void 0) {\n continue;\n } else if (tagObj[property]) {\n let val2 = compress(tagObj[property], options, newJpath);\n const isLeaf = isLeafTag(val2, options);\n if (tagObj[\":@\"]) {\n assignAttributes(val2, tagObj[\":@\"], newJpath, options);\n } else if (Object.keys(val2).length === 1 && val2[options.textNodeName] !== void 0 && !options.alwaysCreateTextNode) {\n val2 = val2[options.textNodeName];\n } else if (Object.keys(val2).length === 0) {\n if (options.alwaysCreateTextNode) val2[options.textNodeName] = \"\";\n else val2 = \"\";\n }\n if (compressedObj[property] !== void 0 && compressedObj.hasOwnProperty(property)) {\n if (!Array.isArray(compressedObj[property])) {\n compressedObj[property] = [compressedObj[property]];\n }\n compressedObj[property].push(val2);\n } else {\n if (options.isArray(property, newJpath, isLeaf)) {\n compressedObj[property] = [val2];\n } else {\n compressedObj[property] = val2;\n }\n }\n }\n }\n if (typeof text === \"string\") {\n if (text.length > 0) compressedObj[options.textNodeName] = text;\n } else if (text !== void 0) compressedObj[options.textNodeName] = text;\n return compressedObj;\n}\nfunction propName$1(obj) {\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (key !== \":@\") return key;\n }\n}\nfunction assignAttributes(obj, attrMap, jpath, options) {\n if (attrMap) {\n const keys = Object.keys(attrMap);\n const len = keys.length;\n for (let i = 0; i < len; i++) {\n const atrrName = keys[i];\n if (options.isArray(atrrName, jpath + \".\" + atrrName, true, true)) {\n obj[atrrName] = [attrMap[atrrName]];\n } else {\n obj[atrrName] = attrMap[atrrName];\n }\n }\n }\n}\nfunction isLeafTag(obj, options) {\n const { textNodeName } = options;\n const propCount = Object.keys(obj).length;\n if (propCount === 0) {\n return true;\n }\n if (propCount === 1 && (obj[textNodeName] || typeof obj[textNodeName] === \"boolean\" || obj[textNodeName] === 0)) {\n return true;\n }\n return false;\n}\nnode2json.prettify = prettify$1;\nconst { buildOptions } = OptionsBuilder;\nconst OrderedObjParser2 = OrderedObjParser_1;\nconst { prettify } = node2json;\nconst validator$1 = validator$2;\nlet XMLParser$1 = class XMLParser {\n constructor(options) {\n this.externalEntities = {};\n this.options = buildOptions(options);\n }\n /**\n * Parse XML dats to JS object \n * @param {string|Buffer} xmlData \n * @param {boolean|Object} validationOption \n */\n parse(xmlData, validationOption) {\n if (typeof xmlData === \"string\") ;\n else if (xmlData.toString) {\n xmlData = xmlData.toString();\n } else {\n throw new Error(\"XML data is accepted in String or Bytes[] form.\");\n }\n if (validationOption) {\n if (validationOption === true) validationOption = {};\n const result = validator$1.validate(xmlData, validationOption);\n if (result !== true) {\n throw Error(`${result.err.msg}:${result.err.line}:${result.err.col}`);\n }\n }\n const orderedObjParser = new OrderedObjParser2(this.options);\n orderedObjParser.addExternalEntities(this.externalEntities);\n const orderedResult = orderedObjParser.parseXml(xmlData);\n if (this.options.preserveOrder || orderedResult === void 0) return orderedResult;\n else return prettify(orderedResult, this.options);\n }\n /**\n * Add Entity which is not by default supported by this library\n * @param {string} key \n * @param {string} value \n */\n addEntity(key, value) {\n if (value.indexOf(\"&\") !== -1) {\n throw new Error(\"Entity value can't have '&'\");\n } else if (key.indexOf(\"&\") !== -1 || key.indexOf(\";\") !== -1) {\n throw new Error(\"An entity must be set without '&' and ';'. Eg. use '#xD' for ' '\");\n } else if (value === \"&\") {\n throw new Error(\"An entity with value '&' is not permitted\");\n } else {\n this.externalEntities[key] = value;\n }\n }\n};\nvar XMLParser_1 = XMLParser$1;\nconst EOL = \"\\n\";\nfunction toXml(jArray, options) {\n let indentation = \"\";\n if (options.format && options.indentBy.length > 0) {\n indentation = EOL;\n }\n return arrToStr(jArray, options, \"\", indentation);\n}\nfunction arrToStr(arr, options, jPath, indentation) {\n let xmlStr = \"\";\n let isPreviousElementTag = false;\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const tagName = propName(tagObj);\n if (tagName === void 0) continue;\n let newJPath = \"\";\n if (jPath.length === 0) newJPath = tagName;\n else newJPath = `${jPath}.${tagName}`;\n if (tagName === options.textNodeName) {\n let tagText = tagObj[tagName];\n if (!isStopNode(newJPath, options)) {\n tagText = options.tagValueProcessor(tagName, tagText);\n tagText = replaceEntitiesValue(tagText, options);\n }\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += tagText;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.cdataPropName) {\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += ``;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.commentPropName) {\n xmlStr += indentation + ``;\n isPreviousElementTag = true;\n continue;\n } else if (tagName[0] === \"?\") {\n const attStr2 = attr_to_str(tagObj[\":@\"], options);\n const tempInd = tagName === \"?xml\" ? \"\" : indentation;\n let piTextNodeName = tagObj[tagName][0][options.textNodeName];\n piTextNodeName = piTextNodeName.length !== 0 ? \" \" + piTextNodeName : \"\";\n xmlStr += tempInd + `<${tagName}${piTextNodeName}${attStr2}?>`;\n isPreviousElementTag = true;\n continue;\n }\n let newIdentation = indentation;\n if (newIdentation !== \"\") {\n newIdentation += options.indentBy;\n }\n const attStr = attr_to_str(tagObj[\":@\"], options);\n const tagStart = indentation + `<${tagName}${attStr}`;\n const tagValue = arrToStr(tagObj[tagName], options, newJPath, newIdentation);\n if (options.unpairedTags.indexOf(tagName) !== -1) {\n if (options.suppressUnpairedNode) xmlStr += tagStart + \">\";\n else xmlStr += tagStart + \"/>\";\n } else if ((!tagValue || tagValue.length === 0) && options.suppressEmptyNode) {\n xmlStr += tagStart + \"/>\";\n } else if (tagValue && tagValue.endsWith(\">\")) {\n xmlStr += tagStart + `>${tagValue}${indentation}`;\n } else {\n xmlStr += tagStart + \">\";\n if (tagValue && indentation !== \"\" && (tagValue.includes(\"/>\") || tagValue.includes(\"`;\n }\n isPreviousElementTag = true;\n }\n return xmlStr;\n}\nfunction propName(obj) {\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (!obj.hasOwnProperty(key)) continue;\n if (key !== \":@\") return key;\n }\n}\nfunction attr_to_str(attrMap, options) {\n let attrStr = \"\";\n if (attrMap && !options.ignoreAttributes) {\n for (let attr in attrMap) {\n if (!attrMap.hasOwnProperty(attr)) continue;\n let attrVal = options.attributeValueProcessor(attr, attrMap[attr]);\n attrVal = replaceEntitiesValue(attrVal, options);\n if (attrVal === true && options.suppressBooleanAttributes) {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}`;\n } else {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}=\"${attrVal}\"`;\n }\n }\n }\n return attrStr;\n}\nfunction isStopNode(jPath, options) {\n jPath = jPath.substr(0, jPath.length - options.textNodeName.length - 1);\n let tagName = jPath.substr(jPath.lastIndexOf(\".\") + 1);\n for (let index in options.stopNodes) {\n if (options.stopNodes[index] === jPath || options.stopNodes[index] === \"*.\" + tagName) return true;\n }\n return false;\n}\nfunction replaceEntitiesValue(textValue, options) {\n if (textValue && textValue.length > 0 && options.processEntities) {\n for (let i = 0; i < options.entities.length; i++) {\n const entity = options.entities[i];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n}\nvar orderedJs2Xml = toXml;\nconst buildFromOrderedJs = orderedJs2Xml;\nconst defaultOptions = {\n attributeNamePrefix: \"@_\",\n attributesGroupName: false,\n textNodeName: \"#text\",\n ignoreAttributes: true,\n cdataPropName: false,\n format: false,\n indentBy: \" \",\n suppressEmptyNode: false,\n suppressUnpairedNode: true,\n suppressBooleanAttributes: true,\n tagValueProcessor: function(key, a) {\n return a;\n },\n attributeValueProcessor: function(attrName, a) {\n return a;\n },\n preserveOrder: false,\n commentPropName: false,\n unpairedTags: [],\n entities: [\n { regex: new RegExp(\"&\", \"g\"), val: \"&\" },\n //it must be on top\n { regex: new RegExp(\">\", \"g\"), val: \">\" },\n { regex: new RegExp(\"<\", \"g\"), val: \"<\" },\n { regex: new RegExp(\"'\", \"g\"), val: \"'\" },\n { regex: new RegExp('\"', \"g\"), val: \""\" }\n ],\n processEntities: true,\n stopNodes: [],\n // transformTagName: false,\n // transformAttributeName: false,\n oneListGroup: false\n};\nfunction Builder(options) {\n this.options = Object.assign({}, defaultOptions, options);\n if (this.options.ignoreAttributes || this.options.attributesGroupName) {\n this.isAttribute = function() {\n return false;\n };\n } else {\n this.attrPrefixLen = this.options.attributeNamePrefix.length;\n this.isAttribute = isAttribute;\n }\n this.processTextOrObjNode = processTextOrObjNode;\n if (this.options.format) {\n this.indentate = indentate;\n this.tagEndChar = \">\\n\";\n this.newLine = \"\\n\";\n } else {\n this.indentate = function() {\n return \"\";\n };\n this.tagEndChar = \">\";\n this.newLine = \"\";\n }\n}\nBuilder.prototype.build = function(jObj) {\n if (this.options.preserveOrder) {\n return buildFromOrderedJs(jObj, this.options);\n } else {\n if (Array.isArray(jObj) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1) {\n jObj = {\n [this.options.arrayNodeName]: jObj\n };\n }\n return this.j2x(jObj, 0).val;\n }\n};\nBuilder.prototype.j2x = function(jObj, level) {\n let attrStr = \"\";\n let val2 = \"\";\n for (let key in jObj) {\n if (!Object.prototype.hasOwnProperty.call(jObj, key)) continue;\n if (typeof jObj[key] === \"undefined\") {\n if (this.isAttribute(key)) {\n val2 += \"\";\n }\n } else if (jObj[key] === null) {\n if (this.isAttribute(key)) {\n val2 += \"\";\n } else if (key[0] === \"?\") {\n val2 += this.indentate(level) + \"<\" + key + \"?\" + this.tagEndChar;\n } else {\n val2 += this.indentate(level) + \"<\" + key + \"/\" + this.tagEndChar;\n }\n } else if (jObj[key] instanceof Date) {\n val2 += this.buildTextValNode(jObj[key], key, \"\", level);\n } else if (typeof jObj[key] !== \"object\") {\n const attr = this.isAttribute(key);\n if (attr) {\n attrStr += this.buildAttrPairStr(attr, \"\" + jObj[key]);\n } else {\n if (key === this.options.textNodeName) {\n let newval = this.options.tagValueProcessor(key, \"\" + jObj[key]);\n val2 += this.replaceEntitiesValue(newval);\n } else {\n val2 += this.buildTextValNode(jObj[key], key, \"\", level);\n }\n }\n } else if (Array.isArray(jObj[key])) {\n const arrLen = jObj[key].length;\n let listTagVal = \"\";\n let listTagAttr = \"\";\n for (let j = 0; j < arrLen; j++) {\n const item = jObj[key][j];\n if (typeof item === \"undefined\") ;\n else if (item === null) {\n if (key[0] === \"?\") val2 += this.indentate(level) + \"<\" + key + \"?\" + this.tagEndChar;\n else val2 += this.indentate(level) + \"<\" + key + \"/\" + this.tagEndChar;\n } else if (typeof item === \"object\") {\n if (this.options.oneListGroup) {\n const result = this.j2x(item, level + 1);\n listTagVal += result.val;\n if (this.options.attributesGroupName && item.hasOwnProperty(this.options.attributesGroupName)) {\n listTagAttr += result.attrStr;\n }\n } else {\n listTagVal += this.processTextOrObjNode(item, key, level);\n }\n } else {\n if (this.options.oneListGroup) {\n let textValue = this.options.tagValueProcessor(key, item);\n textValue = this.replaceEntitiesValue(textValue);\n listTagVal += textValue;\n } else {\n listTagVal += this.buildTextValNode(item, key, \"\", level);\n }\n }\n }\n if (this.options.oneListGroup) {\n listTagVal = this.buildObjectNode(listTagVal, key, listTagAttr, level);\n }\n val2 += listTagVal;\n } else {\n if (this.options.attributesGroupName && key === this.options.attributesGroupName) {\n const Ks = Object.keys(jObj[key]);\n const L = Ks.length;\n for (let j = 0; j < L; j++) {\n attrStr += this.buildAttrPairStr(Ks[j], \"\" + jObj[key][Ks[j]]);\n }\n } else {\n val2 += this.processTextOrObjNode(jObj[key], key, level);\n }\n }\n }\n return { attrStr, val: val2 };\n};\nBuilder.prototype.buildAttrPairStr = function(attrName, val2) {\n val2 = this.options.attributeValueProcessor(attrName, \"\" + val2);\n val2 = this.replaceEntitiesValue(val2);\n if (this.options.suppressBooleanAttributes && val2 === \"true\") {\n return \" \" + attrName;\n } else return \" \" + attrName + '=\"' + val2 + '\"';\n};\nfunction processTextOrObjNode(object, key, level) {\n const result = this.j2x(object, level + 1);\n if (object[this.options.textNodeName] !== void 0 && Object.keys(object).length === 1) {\n return this.buildTextValNode(object[this.options.textNodeName], key, result.attrStr, level);\n } else {\n return this.buildObjectNode(result.val, key, result.attrStr, level);\n }\n}\nBuilder.prototype.buildObjectNode = function(val2, key, attrStr, level) {\n if (val2 === \"\") {\n if (key[0] === \"?\") return this.indentate(level) + \"<\" + key + attrStr + \"?\" + this.tagEndChar;\n else {\n return this.indentate(level) + \"<\" + key + attrStr + this.closeTag(key) + this.tagEndChar;\n }\n } else {\n let tagEndExp = \"\" + val2 + tagEndExp;\n } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {\n return this.indentate(level) + `` + this.newLine;\n } else {\n return this.indentate(level) + \"<\" + key + attrStr + piClosingChar + this.tagEndChar + val2 + this.indentate(level) + tagEndExp;\n }\n }\n};\nBuilder.prototype.closeTag = function(key) {\n let closeTag = \"\";\n if (this.options.unpairedTags.indexOf(key) !== -1) {\n if (!this.options.suppressUnpairedNode) closeTag = \"/\";\n } else if (this.options.suppressEmptyNode) {\n closeTag = \"/\";\n } else {\n closeTag = `>` + this.newLine;\n } else if (this.options.commentPropName !== false && key === this.options.commentPropName) {\n return this.indentate(level) + `` + this.newLine;\n } else if (key[0] === \"?\") {\n return this.indentate(level) + \"<\" + key + attrStr + \"?\" + this.tagEndChar;\n } else {\n let textValue = this.options.tagValueProcessor(key, val2);\n textValue = this.replaceEntitiesValue(textValue);\n if (textValue === \"\") {\n return this.indentate(level) + \"<\" + key + attrStr + this.closeTag(key) + this.tagEndChar;\n } else {\n return this.indentate(level) + \"<\" + key + attrStr + \">\" + textValue + \" 0 && this.options.processEntities) {\n for (let i = 0; i < this.options.entities.length; i++) {\n const entity = this.options.entities[i];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n};\nfunction indentate(level) {\n return this.options.indentBy.repeat(level);\n}\nfunction isAttribute(name) {\n if (name.startsWith(this.options.attributeNamePrefix) && name !== this.options.textNodeName) {\n return name.substr(this.attrPrefixLen);\n } else {\n return false;\n }\n}\nvar json2xml = Builder;\nconst validator = validator$2;\nconst XMLParser2 = XMLParser_1;\nconst XMLBuilder = json2xml;\nvar fxp = {\n XMLParser: XMLParser2,\n XMLValidator: validator,\n XMLBuilder\n};\nfunction isSvg(string) {\n if (typeof string !== \"string\") {\n throw new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n }\n string = string.trim();\n if (string.length === 0) {\n return false;\n }\n if (fxp.XMLValidator.validate(string) !== true) {\n return false;\n }\n let jsonObject;\n const parser = new fxp.XMLParser();\n try {\n jsonObject = parser.parse(string);\n } catch {\n return false;\n }\n if (!jsonObject) {\n return false;\n }\n if (!Object.keys(jsonObject).some((x) => x.toLowerCase() === \"svg\")) {\n return false;\n }\n return true;\n}\nclass View {\n _view;\n constructor(view) {\n isValidView(view);\n this._view = view;\n }\n get id() {\n return this._view.id;\n }\n get name() {\n return this._view.name;\n }\n get caption() {\n return this._view.caption;\n }\n get emptyTitle() {\n return this._view.emptyTitle;\n }\n get emptyCaption() {\n return this._view.emptyCaption;\n }\n get getContents() {\n return this._view.getContents;\n }\n get icon() {\n return this._view.icon;\n }\n set icon(icon) {\n this._view.icon = icon;\n }\n get order() {\n return this._view.order;\n }\n set order(order) {\n this._view.order = order;\n }\n get params() {\n return this._view.params;\n }\n set params(params) {\n this._view.params = params;\n }\n get columns() {\n return this._view.columns;\n }\n get emptyView() {\n return this._view.emptyView;\n }\n get parent() {\n return this._view.parent;\n }\n get sticky() {\n return this._view.sticky;\n }\n get expanded() {\n return this._view.expanded;\n }\n set expanded(expanded) {\n this._view.expanded = expanded;\n }\n get defaultSortKey() {\n return this._view.defaultSortKey;\n }\n get loadChildViews() {\n return this._view.loadChildViews;\n }\n}\nconst isValidView = function(view) {\n if (!view.id || typeof view.id !== \"string\") {\n throw new Error(\"View id is required and must be a string\");\n }\n if (!view.name || typeof view.name !== \"string\") {\n throw new Error(\"View name is required and must be a string\");\n }\n if (view.columns && view.columns.length > 0 && (!view.caption || typeof view.caption !== \"string\")) {\n throw new Error(\"View caption is required for top-level views and must be a string\");\n }\n if (!view.getContents || typeof view.getContents !== \"function\") {\n throw new Error(\"View getContents is required and must be a function\");\n }\n if (!view.icon || typeof view.icon !== \"string\" || !isSvg(view.icon)) {\n throw new Error(\"View icon is required and must be a valid svg string\");\n }\n if (\"order\" in view && typeof view.order !== \"number\") {\n throw new Error(\"View order must be a number\");\n }\n if (view.columns) {\n view.columns.forEach((column) => {\n if (!(column instanceof Column)) {\n throw new Error(\"View columns must be an array of Column. Invalid column found\");\n }\n });\n }\n if (view.emptyView && typeof view.emptyView !== \"function\") {\n throw new Error(\"View emptyView must be a function\");\n }\n if (view.parent && typeof view.parent !== \"string\") {\n throw new Error(\"View parent must be a string\");\n }\n if (\"sticky\" in view && typeof view.sticky !== \"boolean\") {\n throw new Error(\"View sticky must be a boolean\");\n }\n if (\"expanded\" in view && typeof view.expanded !== \"boolean\") {\n throw new Error(\"View expanded must be a boolean\");\n }\n if (view.defaultSortKey && typeof view.defaultSortKey !== \"string\") {\n throw new Error(\"View defaultSortKey must be a string\");\n }\n if (view.loadChildViews && typeof view.loadChildViews !== \"function\") {\n throw new Error(\"View loadChildViews must be a function\");\n }\n return true;\n};\nconst debug$1 = typeof process === \"object\" && process.env && process.env.NODE_DEBUG && /\\bsemver\\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error(\"SEMVER\", ...args) : () => {\n};\nvar debug_1 = debug$1;\nconst SEMVER_SPEC_VERSION = \"2.0.0\";\nconst MAX_LENGTH$1 = 256;\nconst MAX_SAFE_INTEGER$1 = Number.MAX_SAFE_INTEGER || /* istanbul ignore next */\n9007199254740991;\nconst MAX_SAFE_COMPONENT_LENGTH = 16;\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH$1 - 6;\nconst RELEASE_TYPES = [\n \"major\",\n \"premajor\",\n \"minor\",\n \"preminor\",\n \"patch\",\n \"prepatch\",\n \"prerelease\"\n];\nvar constants = {\n MAX_LENGTH: MAX_LENGTH$1,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER: MAX_SAFE_INTEGER$1,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 1,\n FLAG_LOOSE: 2\n};\nvar re$1 = { exports: {} };\n(function(module, exports) {\n const {\n MAX_SAFE_COMPONENT_LENGTH: MAX_SAFE_COMPONENT_LENGTH2,\n MAX_SAFE_BUILD_LENGTH: MAX_SAFE_BUILD_LENGTH2,\n MAX_LENGTH: MAX_LENGTH2\n } = constants;\n const debug2 = debug_1;\n exports = module.exports = {};\n const re2 = exports.re = [];\n const safeRe = exports.safeRe = [];\n const src = exports.src = [];\n const t2 = exports.t = {};\n let R = 0;\n const LETTERDASHNUMBER = \"[a-zA-Z0-9-]\";\n const safeRegexReplacements = [\n [\"\\\\s\", 1],\n [\"\\\\d\", MAX_LENGTH2],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH2]\n ];\n const makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`);\n }\n return value;\n };\n const createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value);\n const index = R++;\n debug2(name, index, value);\n t2[name] = index;\n src[index] = value;\n re2[index] = new RegExp(value, isGlobal ? \"g\" : void 0);\n safeRe[index] = new RegExp(safe, isGlobal ? \"g\" : void 0);\n };\n createToken(\"NUMERICIDENTIFIER\", \"0|[1-9]\\\\d*\");\n createToken(\"NUMERICIDENTIFIERLOOSE\", \"\\\\d+\");\n createToken(\"NONNUMERICIDENTIFIER\", `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`);\n createToken(\"MAINVERSION\", `(${src[t2.NUMERICIDENTIFIER]})\\\\.(${src[t2.NUMERICIDENTIFIER]})\\\\.(${src[t2.NUMERICIDENTIFIER]})`);\n createToken(\"MAINVERSIONLOOSE\", `(${src[t2.NUMERICIDENTIFIERLOOSE]})\\\\.(${src[t2.NUMERICIDENTIFIERLOOSE]})\\\\.(${src[t2.NUMERICIDENTIFIERLOOSE]})`);\n createToken(\"PRERELEASEIDENTIFIER\", `(?:${src[t2.NUMERICIDENTIFIER]}|${src[t2.NONNUMERICIDENTIFIER]})`);\n createToken(\"PRERELEASEIDENTIFIERLOOSE\", `(?:${src[t2.NUMERICIDENTIFIERLOOSE]}|${src[t2.NONNUMERICIDENTIFIER]})`);\n createToken(\"PRERELEASE\", `(?:-(${src[t2.PRERELEASEIDENTIFIER]}(?:\\\\.${src[t2.PRERELEASEIDENTIFIER]})*))`);\n createToken(\"PRERELEASELOOSE\", `(?:-?(${src[t2.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${src[t2.PRERELEASEIDENTIFIERLOOSE]})*))`);\n createToken(\"BUILDIDENTIFIER\", `${LETTERDASHNUMBER}+`);\n createToken(\"BUILD\", `(?:\\\\+(${src[t2.BUILDIDENTIFIER]}(?:\\\\.${src[t2.BUILDIDENTIFIER]})*))`);\n createToken(\"FULLPLAIN\", `v?${src[t2.MAINVERSION]}${src[t2.PRERELEASE]}?${src[t2.BUILD]}?`);\n createToken(\"FULL\", `^${src[t2.FULLPLAIN]}$`);\n createToken(\"LOOSEPLAIN\", `[v=\\\\s]*${src[t2.MAINVERSIONLOOSE]}${src[t2.PRERELEASELOOSE]}?${src[t2.BUILD]}?`);\n createToken(\"LOOSE\", `^${src[t2.LOOSEPLAIN]}$`);\n createToken(\"GTLT\", \"((?:<|>)?=?)\");\n createToken(\"XRANGEIDENTIFIERLOOSE\", `${src[t2.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`);\n createToken(\"XRANGEIDENTIFIER\", `${src[t2.NUMERICIDENTIFIER]}|x|X|\\\\*`);\n createToken(\"XRANGEPLAIN\", `[v=\\\\s]*(${src[t2.XRANGEIDENTIFIER]})(?:\\\\.(${src[t2.XRANGEIDENTIFIER]})(?:\\\\.(${src[t2.XRANGEIDENTIFIER]})(?:${src[t2.PRERELEASE]})?${src[t2.BUILD]}?)?)?`);\n createToken(\"XRANGEPLAINLOOSE\", `[v=\\\\s]*(${src[t2.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${src[t2.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${src[t2.XRANGEIDENTIFIERLOOSE]})(?:${src[t2.PRERELEASELOOSE]})?${src[t2.BUILD]}?)?)?`);\n createToken(\"XRANGE\", `^${src[t2.GTLT]}\\\\s*${src[t2.XRANGEPLAIN]}$`);\n createToken(\"XRANGELOOSE\", `^${src[t2.GTLT]}\\\\s*${src[t2.XRANGEPLAINLOOSE]}$`);\n createToken(\"COERCEPLAIN\", `${\"(^|[^\\\\d])(\\\\d{1,\"}${MAX_SAFE_COMPONENT_LENGTH2}})(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH2}}))?(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH2}}))?`);\n createToken(\"COERCE\", `${src[t2.COERCEPLAIN]}(?:$|[^\\\\d])`);\n createToken(\"COERCEFULL\", src[t2.COERCEPLAIN] + `(?:${src[t2.PRERELEASE]})?(?:${src[t2.BUILD]})?(?:$|[^\\\\d])`);\n createToken(\"COERCERTL\", src[t2.COERCE], true);\n createToken(\"COERCERTLFULL\", src[t2.COERCEFULL], true);\n createToken(\"LONETILDE\", \"(?:~>?)\");\n createToken(\"TILDETRIM\", `(\\\\s*)${src[t2.LONETILDE]}\\\\s+`, true);\n exports.tildeTrimReplace = \"$1~\";\n createToken(\"TILDE\", `^${src[t2.LONETILDE]}${src[t2.XRANGEPLAIN]}$`);\n createToken(\"TILDELOOSE\", `^${src[t2.LONETILDE]}${src[t2.XRANGEPLAINLOOSE]}$`);\n createToken(\"LONECARET\", \"(?:\\\\^)\");\n createToken(\"CARETTRIM\", `(\\\\s*)${src[t2.LONECARET]}\\\\s+`, true);\n exports.caretTrimReplace = \"$1^\";\n createToken(\"CARET\", `^${src[t2.LONECARET]}${src[t2.XRANGEPLAIN]}$`);\n createToken(\"CARETLOOSE\", `^${src[t2.LONECARET]}${src[t2.XRANGEPLAINLOOSE]}$`);\n createToken(\"COMPARATORLOOSE\", `^${src[t2.GTLT]}\\\\s*(${src[t2.LOOSEPLAIN]})$|^$`);\n createToken(\"COMPARATOR\", `^${src[t2.GTLT]}\\\\s*(${src[t2.FULLPLAIN]})$|^$`);\n createToken(\"COMPARATORTRIM\", `(\\\\s*)${src[t2.GTLT]}\\\\s*(${src[t2.LOOSEPLAIN]}|${src[t2.XRANGEPLAIN]})`, true);\n exports.comparatorTrimReplace = \"$1$2$3\";\n createToken(\"HYPHENRANGE\", `^\\\\s*(${src[t2.XRANGEPLAIN]})\\\\s+-\\\\s+(${src[t2.XRANGEPLAIN]})\\\\s*$`);\n createToken(\"HYPHENRANGELOOSE\", `^\\\\s*(${src[t2.XRANGEPLAINLOOSE]})\\\\s+-\\\\s+(${src[t2.XRANGEPLAINLOOSE]})\\\\s*$`);\n createToken(\"STAR\", \"(<|>)?=?\\\\s*\\\\*\");\n createToken(\"GTE0\", \"^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$\");\n createToken(\"GTE0PRE\", \"^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$\");\n})(re$1, re$1.exports);\nvar reExports = re$1.exports;\nconst looseOption = Object.freeze({ loose: true });\nconst emptyOpts = Object.freeze({});\nconst parseOptions$1 = (options) => {\n if (!options) {\n return emptyOpts;\n }\n if (typeof options !== \"object\") {\n return looseOption;\n }\n return options;\n};\nvar parseOptions_1 = parseOptions$1;\nconst numeric = /^[0-9]+$/;\nconst compareIdentifiers$1 = (a, b) => {\n const anum = numeric.test(a);\n const bnum = numeric.test(b);\n if (anum && bnum) {\n a = +a;\n b = +b;\n }\n return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1;\n};\nconst rcompareIdentifiers = (a, b) => compareIdentifiers$1(b, a);\nvar identifiers = {\n compareIdentifiers: compareIdentifiers$1,\n rcompareIdentifiers\n};\nconst debug = debug_1;\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = constants;\nconst { safeRe: re, t } = reExports;\nconst parseOptions = parseOptions_1;\nconst { compareIdentifiers } = identifiers;\nlet SemVer$2 = class SemVer {\n constructor(version, options) {\n options = parseOptions(options);\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) {\n return version;\n } else {\n version = version.version;\n }\n } else if (typeof version !== \"string\") {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`);\n }\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n );\n }\n debug(\"SemVer\", version, options);\n this.options = options;\n this.loose = !!options.loose;\n this.includePrerelease = !!options.includePrerelease;\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]);\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`);\n }\n this.raw = version;\n this.major = +m[1];\n this.minor = +m[2];\n this.patch = +m[3];\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError(\"Invalid major version\");\n }\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError(\"Invalid minor version\");\n }\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError(\"Invalid patch version\");\n }\n if (!m[4]) {\n this.prerelease = [];\n } else {\n this.prerelease = m[4].split(\".\").map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id;\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num;\n }\n }\n return id;\n });\n }\n this.build = m[5] ? m[5].split(\".\") : [];\n this.format();\n }\n format() {\n this.version = `${this.major}.${this.minor}.${this.patch}`;\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join(\".\")}`;\n }\n return this.version;\n }\n toString() {\n return this.version;\n }\n compare(other) {\n debug(\"SemVer.compare\", this.version, this.options, other);\n if (!(other instanceof SemVer)) {\n if (typeof other === \"string\" && other === this.version) {\n return 0;\n }\n other = new SemVer(other, this.options);\n }\n if (other.version === this.version) {\n return 0;\n }\n return this.compareMain(other) || this.comparePre(other);\n }\n compareMain(other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options);\n }\n return compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch);\n }\n comparePre(other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options);\n }\n if (this.prerelease.length && !other.prerelease.length) {\n return -1;\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1;\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0;\n }\n let i = 0;\n do {\n const a = this.prerelease[i];\n const b = other.prerelease[i];\n debug(\"prerelease compare\", i, a, b);\n if (a === void 0 && b === void 0) {\n return 0;\n } else if (b === void 0) {\n return 1;\n } else if (a === void 0) {\n return -1;\n } else if (a === b) {\n continue;\n } else {\n return compareIdentifiers(a, b);\n }\n } while (++i);\n }\n compareBuild(other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options);\n }\n let i = 0;\n do {\n const a = this.build[i];\n const b = other.build[i];\n debug(\"build compare\", i, a, b);\n if (a === void 0 && b === void 0) {\n return 0;\n } else if (b === void 0) {\n return 1;\n } else if (a === void 0) {\n return -1;\n } else if (a === b) {\n continue;\n } else {\n return compareIdentifiers(a, b);\n }\n } while (++i);\n }\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc(release, identifier, identifierBase) {\n switch (release) {\n case \"premajor\":\n this.prerelease.length = 0;\n this.patch = 0;\n this.minor = 0;\n this.major++;\n this.inc(\"pre\", identifier, identifierBase);\n break;\n case \"preminor\":\n this.prerelease.length = 0;\n this.patch = 0;\n this.minor++;\n this.inc(\"pre\", identifier, identifierBase);\n break;\n case \"prepatch\":\n this.prerelease.length = 0;\n this.inc(\"patch\", identifier, identifierBase);\n this.inc(\"pre\", identifier, identifierBase);\n break;\n case \"prerelease\":\n if (this.prerelease.length === 0) {\n this.inc(\"patch\", identifier, identifierBase);\n }\n this.inc(\"pre\", identifier, identifierBase);\n break;\n case \"major\":\n if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) {\n this.major++;\n }\n this.minor = 0;\n this.patch = 0;\n this.prerelease = [];\n break;\n case \"minor\":\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++;\n }\n this.patch = 0;\n this.prerelease = [];\n break;\n case \"patch\":\n if (this.prerelease.length === 0) {\n this.patch++;\n }\n this.prerelease = [];\n break;\n case \"pre\": {\n const base = Number(identifierBase) ? 1 : 0;\n if (!identifier && identifierBase === false) {\n throw new Error(\"invalid increment argument: identifier is empty\");\n }\n if (this.prerelease.length === 0) {\n this.prerelease = [base];\n } else {\n let i = this.prerelease.length;\n while (--i >= 0) {\n if (typeof this.prerelease[i] === \"number\") {\n this.prerelease[i]++;\n i = -2;\n }\n }\n if (i === -1) {\n if (identifier === this.prerelease.join(\".\") && identifierBase === false) {\n throw new Error(\"invalid increment argument: identifier already exists\");\n }\n this.prerelease.push(base);\n }\n }\n if (identifier) {\n let prerelease = [identifier, base];\n if (identifierBase === false) {\n prerelease = [identifier];\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease;\n }\n } else {\n this.prerelease = prerelease;\n }\n }\n break;\n }\n default:\n throw new Error(`invalid increment argument: ${release}`);\n }\n this.raw = this.format();\n if (this.build.length) {\n this.raw += `+${this.build.join(\".\")}`;\n }\n return this;\n }\n};\nvar semver = SemVer$2;\nconst SemVer$1 = semver;\nconst parse$1 = (version, options, throwErrors = false) => {\n if (version instanceof SemVer$1) {\n return version;\n }\n try {\n return new SemVer$1(version, options);\n } catch (er) {\n if (!throwErrors) {\n return null;\n }\n throw er;\n }\n};\nvar parse_1 = parse$1;\nconst parse = parse_1;\nconst valid = (version, options) => {\n const v = parse(version, options);\n return v ? v.version : null;\n};\nvar valid_1 = valid;\nconst valid$1 = /* @__PURE__ */ getDefaultExportFromCjs(valid_1);\nconst SemVer2 = semver;\nconst major = (a, loose) => new SemVer2(a, loose).major;\nvar major_1 = major;\nconst major$1 = /* @__PURE__ */ getDefaultExportFromCjs(major_1);\nclass ProxyBus {\n bus;\n constructor(bus2) {\n if (typeof bus2.getVersion !== \"function\" || !valid$1(bus2.getVersion())) {\n console.warn(\"Proxying an event bus with an unknown or invalid version\");\n } else if (major$1(bus2.getVersion()) !== major$1(this.getVersion())) {\n console.warn(\n \"Proxying an event bus of version \" + bus2.getVersion() + \" with \" + this.getVersion()\n );\n }\n this.bus = bus2;\n }\n getVersion() {\n return \"3.3.1\";\n }\n subscribe(name, handler) {\n this.bus.subscribe(name, handler);\n }\n unsubscribe(name, handler) {\n this.bus.unsubscribe(name, handler);\n }\n emit(name, event) {\n this.bus.emit(name, event);\n }\n}\nclass SimpleBus {\n handlers = /* @__PURE__ */ new Map();\n getVersion() {\n return \"3.3.1\";\n }\n subscribe(name, handler) {\n this.handlers.set(\n name,\n (this.handlers.get(name) || []).concat(\n handler\n )\n );\n }\n unsubscribe(name, handler) {\n this.handlers.set(\n name,\n (this.handlers.get(name) || []).filter((h) => h !== handler)\n );\n }\n emit(name, event) {\n (this.handlers.get(name) || []).forEach((h) => {\n try {\n h(event);\n } catch (e) {\n console.error(\"could not invoke event listener\", e);\n }\n });\n }\n}\nlet bus = null;\nfunction getBus() {\n if (bus !== null) {\n return bus;\n }\n if (typeof window === \"undefined\") {\n return new Proxy({}, {\n get: () => {\n return () => console.error(\n \"Window not available, EventBus can not be established!\"\n );\n }\n });\n }\n if (window.OC?._eventBus && typeof window._nc_event_bus === \"undefined\") {\n console.warn(\n \"found old event bus instance at OC._eventBus. Update your version!\"\n );\n window._nc_event_bus = window.OC._eventBus;\n }\n if (typeof window?._nc_event_bus !== \"undefined\") {\n bus = new ProxyBus(window._nc_event_bus);\n } else {\n bus = window._nc_event_bus = new SimpleBus();\n }\n return bus;\n}\nfunction emit(name, event) {\n getBus().emit(name, event);\n}\n/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nclass FileListFilter extends TypedEventTarget {\n id;\n order;\n constructor(id, order = 100) {\n super();\n this.id = id;\n this.order = order;\n }\n filter(nodes) {\n throw new Error(\"Not implemented\");\n }\n updateChips(chips) {\n this.dispatchTypedEvent(\"update:chips\", new CustomEvent(\"update:chips\", { detail: chips }));\n }\n filterUpdated() {\n this.dispatchTypedEvent(\"update:filter\", new CustomEvent(\"update:filter\"));\n }\n}\nfunction registerFileListFilter(filter) {\n if (!window._nc_filelist_filters) {\n window._nc_filelist_filters = /* @__PURE__ */ new Map();\n }\n if (window._nc_filelist_filters.has(filter.id)) {\n throw new Error(`File list filter \"${filter.id}\" already registered`);\n }\n window._nc_filelist_filters.set(filter.id, filter);\n emit(\"files:filter:added\", filter);\n}\nfunction unregisterFileListFilter(filterId) {\n if (window._nc_filelist_filters && window._nc_filelist_filters.has(filterId)) {\n window._nc_filelist_filters.delete(filterId);\n emit(\"files:filter:removed\", filterId);\n }\n}\nfunction getFileListFilters() {\n if (!window._nc_filelist_filters) {\n return [];\n }\n return [...window._nc_filelist_filters.values()];\n}\nconst addNewFileMenuEntry = function(entry) {\n const newFileMenu = getNewFileMenu();\n return newFileMenu.registerEntry(entry);\n};\nconst removeNewFileMenuEntry = function(entry) {\n const newFileMenu = getNewFileMenu();\n return newFileMenu.unregisterEntry(entry);\n};\nconst getNewFileMenuEntries = function(context) {\n const newFileMenu = getNewFileMenu();\n return newFileMenu.getEntries(context).sort((a, b) => {\n if (a.order !== void 0 && b.order !== void 0 && a.order !== b.order) {\n return a.order - b.order;\n }\n return a.displayName.localeCompare(b.displayName, void 0, { numeric: true, sensitivity: \"base\" });\n });\n};\nexport {\n Column,\n DefaultType,\n File,\n FileAction,\n FileListFilter,\n FileType,\n FilesSortingMode,\n Folder,\n Header,\n InvalidFilenameError,\n InvalidFilenameErrorReason,\n Navigation,\n NewMenuEntryCategory,\n Node,\n NodeStatus,\n Permission,\n View,\n addNewFileMenuEntry,\n davGetClient,\n davGetDefaultPropfind,\n davGetFavoritesReport,\n davGetRecentSearch,\n davGetRemoteURL,\n davGetRootPath,\n davParsePermissions,\n davRemoteURL,\n davResultToNode,\n davRootPath,\n defaultDavNamespaces,\n defaultDavProperties,\n formatFileSize,\n getDavNameSpaces,\n getDavProperties,\n getFavoriteNodes,\n getFileActions,\n getFileListFilters,\n getFileListHeaders,\n getNavigation,\n getNewFileMenuEntries,\n getUniqueName,\n isFilenameValid,\n orderBy,\n parseFileSize,\n registerDavProperty,\n registerFileAction,\n registerFileListFilter,\n registerFileListHeaders,\n removeNewFileMenuEntry,\n sortNodes,\n unregisterFileListFilter,\n validateFilename\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + ({\"3239\":\"settings-users\",\"4529\":\"settings-apps-view\"}[chunkId] || chunkId) + \"-\" + chunkId + \".js?v=\" + {\"1521\":\"220bf24c534d0cf00eb6\",\"3239\":\"2f2de15c0dd418857aac\",\"4529\":\"c318619b71913b3ce3fd\",\"5085\":\"4f10478b69e38cddada5\",\"7265\":\"715398afd1ab50836642\",\"8737\":\"6fee9973f6f3e1ab1b5a\",\"9291\":\"3812924d520899b5c9f4\",\"9551\":\"ad50a950026c0cfc30e2\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2689;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2689: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4208], () => (__webpack_require__(18539)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","sanitize","url","replace","requireAdmin","confirmPassword","get","options","axios","post","data","put","delete","params","localStorage","getBuilder","persist","build","defaults","id","name","usercount","disabled","canAdd","canRemove","state","users","groups","orderBy","GroupSorting","UserCount","minPasswordLength","usersOffset","usersLimit","disabledUsersOffset","disabledUsersLimit","userCount","showConfig","showStoragePath","getItem","showUserBackend","showLastLogin","showNewUserForm","showLanguages","mutations","appendUsers","usersObj","existingUsers","map","_ref","newUsers","Object","values","filter","_ref2","includes","concat","updateDisabledUsers","_usersObj","setPasswordPolicyMinLength","length","initGroups","_ref3","group","assign","addGroup","_ref4","gid","displayName","find","unshift","e","console","error","renameGroup","_ref5","groupIndex","findIndex","groupSearch","updatedGroup","splice","removeGroup","addUserGroup","_ref6","userid","user","enabled","push","removeUserGroup","_ref7","indexOf","addUserSubAdmin","_ref8","subadmin","removeUserSubAdmin","_ref9","deleteUser","userIndex","this","commit","actionType","addUserData","response","ocs","enableDisableUser","_ref10","updateUserCounts","_ref11","recentGroup","disabledGroup","forEach","userGroup","warn","logger","setUserData","_ref12","key","value","humanValue","parseFileSize","resetUsers","setShowConfig","_ref13","setItem","JSON","stringify","setGroupSorting","sorting","oldValue","generateUrl","String","catch","showError","t","getters","getUsers","getGroups","getSubadminGroups","getSortedGroups","sort","a","b","numA","numB","localeCompare","getGroupSorting","getPasswordPolicyMinLength","getUsersOffset","getUsersLimit","getDisabledUsersOffset","getDisabledUsersLimit","getUserCount","getShowConfig","CancelToken","searchRequestCancelSource","actions","searchUsers","context","_ref14","offset","limit","search","api","generateOcsUrl","getUser","userId","_ref15","cancel","source","trim","encodeURIComponent","cancelToken","token","then","usersCount","keys","getRecentUsers","_ref16","getDisabledUsers","_ref17","_ref18","limitParam","getUsersFromList","_ref19","getUsersFromGroup","_ref20","groupid","groupId","getCapabilities","password_policy","minLength","_ref21","_ref22","_ref23","_ref24","_ref25","wipeUserDevices","Promise","reject","Error","addUser","_ref26","_ref27","dispatch","password","email","quota","language","manager","_ref28","userStatus","_ref29","allowedEmpty","sendWelcomeMail","apps","bundles","loadState","categories","updateCount","loading","gettingCategoriesPromise","APPS_API_FAILURE","message","isHTML","initCategories","updateCategories","categoriesPromise","setUpdateCount","addCategory","category","appendCategories","categoriesArray","setAllApps","setError","appId","Array","isArray","_id","app","clearError","enableApp","active","setInstallState","canInstall","disableApp","removable","canUnInstall","uninstallApp","needsDownload","installed","updateApp","version","update","resetApps","reset","startLoading","Vue","stopLoading","appIds","_appId","update_required","showInfo","onClick","window","location","reload","close","setTimeout","forceEnableApp","finally","getAllApps","getCategories","shouldRefetchCategories","arguments","undefined","categoriesPromiseResponse","getAppBundles","getUpdateCount","getCategoryById","selectedCategoryId","serverData","setServerData","getServerData","setAppConfig","use","Vuex","API_FAILURE","meta","store","useStore","Store","modules","settings","oc","strict","process","getLoggerBuilder","setApp","detectUser","_defineComponent","__name","setup","__props","__sfc","NcContent","_vm","_c","_self","_setupProxy","attrs","_v","path","components","default","UserManagement","navigation","UserManagementNavigation","props","children","redirect","AppStore","AppStoreNavigation","sidebar","AppStoreSidebar","Router","mode","base","linkActiveClass","routes","VTooltip","defaultHtml","sync","router","__webpack_nonce__","getCSPNonce","prototype","n","PiniaVuePlugin","pinia","createPinia","render","h","SettingsApp","el","cloneRoute","to","from","clone","hash","query","fullPath","freeze","exports","moduleName","registerModule","namespaced","currentRoute","transition","currentPath","isTimeTraveling","storeUnwatch","watch","route","afterEachUnHook","afterEach","unregisterModule","Permission","Permission2","defaultDavProperties","defaultDavNamespaces","d","nc","getDavProperties","_nc_dav_properties","prop","join","getDavNameSpaces","_nc_dav_namespaces","ns","davGetDefaultPropfind","davGetRecentSearch","lastModified","uid","FileType","FileType2","isDavRessource","davService","match","validateData","URL","startsWith","displayname","mtime","Date","crtime","mime","size","permissions","NONE","ALL","owner","attributes","root","service","status","NodeStatus","NodeStatus2","Node","_data","_attributes","_knownDavService","readonlyAttributes","entries","getOwnPropertyDescriptors","handler","set","target","Reflect","deleteProperty","receiver","constructor","Proxy","encodedSource","origin","slice","basename","extension","extname","dirname","split","pop","firstMatch","pathname","updateMtime","READ","fileid","move","destination","oldBasename","rename","basename2","TypeError","File","type","Folder","super","davRootPath","davRemoteURL","davGetRemoteURL","davGetClient","remoteURL","headers","client","setHeaders","requesttoken","patch","headers2","method","fetch","getFavoriteNodes","davClient","davRoot","controller","AbortController","CancelablePromise","async","resolve","onCancel","abort","getDirectoryContents","signal","details","includeSelf","node","filename","result","davResultToNode","filesRoot","permString","CREATE","UPDATE","DELETE","SHARE","davParsePermissions","nodeData","parse","lastmod","Number","parseInt","getcontentlength","FAILED","hasPreview","humanList","humanListBinary","formatFileSize","skipSmallSizes","binaryPrefixes","base1000","order","Math","floor","log","min","readableFormat","relativeSize","pow","toFixed","parseFloat","toLocaleString","forceBinary","toLocaleLowerCase","replaceAll","decimalString","round","k","m","g","p","toISOString","sortNodes","nodes","sortingOptions","sortingMode","sortingOrder","collection","identifiers2","orders","_","index","collator","Intl","Collator","numeric","usage","identifier","compare","sortFavoritesFirst","v","favorite","sortFoldersFirst","lastIndexOf","util$3","nameStartChar","nameRegexp","regexName","RegExp","isExist","isEmptyObject","obj","merge","arrayMode","len","i","getValue","isName","string","exec","getAllMatches","regex","matches","allmatches","startIndex","lastIndex","OptionsBuilder","defaultOptions$1","preserveOrder","attributeNamePrefix","attributesGroupName","textNodeName","ignoreAttributes","removeNSPrefix","allowBooleanAttributes","parseTagValue","parseAttributeValue","trimValues","cdataPropName","numberParseOptions","hex","leadingZeros","eNotation","tagValueProcessor","tagName","val2","attributeValueProcessor","attrName","stopNodes","alwaysCreateTextNode","commentPropName","unpairedTags","processEntities","htmlEntities","ignoreDeclaration","ignorePiTags","transformTagName","transformAttributeName","updateTag","jPath","buildOptions","defaultOptions","node2json","compress","arr","text","compressedObj","tagObj","property","propName$1","newJpath","isLeaf","isLeafTag","assignAttributes","hasOwnProperty","attrMap","jpath","atrrName","propCount","prettify","arrToStr","indentation","xmlStr","isPreviousElementTag","propName","newJPath","tagText","isStopNode","replaceEntitiesValue","attStr2","attr_to_str","tempInd","piTextNodeName","newIdentation","indentBy","tagStart","tagValue","suppressUnpairedNode","suppressEmptyNode","endsWith","attrStr","attr","attrVal","suppressBooleanAttributes","substr","textValue","entities","entity","val","buildFromOrderedJs","jArray","format","oneListGroup","Builder","isAttribute","attrPrefixLen","processTextOrObjNode","indentate","tagEndChar","newLine","object","level","j2x","buildTextValNode","buildObjectNode","repeat","jObj","arrayNodeName","call","buildAttrPairStr","newval","arrLen","listTagVal","listTagAttr","j","item","Ks","L","closeTag","tagEndExp","piClosingChar","debug_1","env","NODE_DEBUG","test","args","constants","MAX_LENGTH","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","MAX_LENGTH$1","MAX_SAFE_INTEGER","RELEASE_TYPES","SEMVER_SPEC_VERSION","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","re$1","module","MAX_SAFE_COMPONENT_LENGTH2","MAX_SAFE_BUILD_LENGTH2","MAX_LENGTH2","debug2","re2","re","safeRe","src","t2","R","LETTERDASHNUMBER","safeRegexReplacements","createToken","isGlobal","safe","max","makeSafeRegex","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","BUILDIDENTIFIER","MAINVERSION","PRERELEASE","BUILD","FULLPLAIN","MAINVERSIONLOOSE","PRERELEASELOOSE","LOOSEPLAIN","XRANGEIDENTIFIER","XRANGEIDENTIFIERLOOSE","GTLT","XRANGEPLAIN","XRANGEPLAINLOOSE","COERCEPLAIN","COERCE","COERCEFULL","LONETILDE","tildeTrimReplace","LONECARET","caretTrimReplace","comparatorTrimReplace","reExports","loose","compareIdentifiers$1","anum","bnum","identifiers","compareIdentifiers","rcompareIdentifiers","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","r","getter","__esModule","definition","o","defineProperty","enumerable","f","chunkId","all","reduce","promises","u","globalThis","Function","l","done","script","needAttach","scripts","document","getElementsByTagName","s","getAttribute","createElement","charset","timeout","setAttribute","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","bind","head","appendChild","Symbol","toStringTag","nmd","paths","scriptUrl","importScripts","currentScript","toUpperCase","baseURI","self","href","installedChunks","installedChunkData","promise","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"settings-vue-settings-apps-users-management.js?v=12bec3097cedfd37d1aa","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/settings/src/store/api.js","webpack:///nextcloud/apps/settings/src/store/users.js","webpack:///nextcloud/apps/settings/src/store/apps.js","webpack:///nextcloud/apps/settings/src/store/users-settings.js","webpack:///nextcloud/apps/settings/src/store/oc.js","webpack:///nextcloud/apps/settings/src/store/index.js","webpack:///nextcloud/apps/settings/src/constants/GroupManagement.ts","webpack:///nextcloud/apps/settings/src/logger.ts","webpack:///nextcloud/apps/settings/src/views/SettingsApp.vue","webpack:///nextcloud/apps/settings/src/views/SettingsApp.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/views/SettingsApp.vue?3a67","webpack:///nextcloud/apps/settings/src/router/routes.ts","webpack:///nextcloud/apps/settings/src/router/index.ts","webpack:///nextcloud/apps/settings/src/main-apps-users-management.ts","webpack:///nextcloud/node_modules/vuex-router-sync/index.js","webpack:///nextcloud/node_modules/@nextcloud/files/dist/index.mjs","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport axios from '@nextcloud/axios'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\n\nconst sanitize = function(url) {\n\treturn url.replace(/\\/$/, '') // Remove last url slash\n}\n\nexport default {\n\n\t/**\n\t * This Promise is used to chain a request that require an admin password confirmation\n\t * Since chaining Promise have a very precise behavior concerning catch and then,\n\t * you'll need to be careful when using it.\n\t * e.g\n\t * // store\n\t * action(context) {\n\t * return api.requireAdmin().then((response) => {\n\t * return api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {API failure});\n\t * }).catch((error) => {requireAdmin failure});\n\t * }\n\t * // vue\n\t * this.$store.dispatch('action').then(() => {always executed})\n\t *\n\t * Since Promise.then().catch().then() will always execute the last then\n\t * this.$store.dispatch('action').then will always be executed\n\t *\n\t * If you want requireAdmin failure to also catch the API request failure\n\t * you will need to throw a new error in the api.get.catch()\n\t *\n\t * e.g\n\t * api.requireAdmin().then((response) => {\n\t * api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {throw error;});\n\t * }).catch((error) => {requireAdmin OR API failure});\n\t *\n\t * @return {Promise}\n\t */\n\trequireAdmin() {\n\t\treturn confirmPassword()\n\t},\n\tget(url, options) {\n\t\treturn axios.get(sanitize(url), options)\n\t},\n\tpost(url, data) {\n\t\treturn axios.post(sanitize(url), data)\n\t},\n\tpatch(url, data) {\n\t\treturn axios.patch(sanitize(url), data)\n\t},\n\tput(url, data) {\n\t\treturn axios.put(sanitize(url), data)\n\t},\n\tdelete(url, data) {\n\t\treturn axios.delete(sanitize(url), { params: data })\n\t},\n}\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getBuilder } from '@nextcloud/browser-storage'\nimport { getCapabilities } from '@nextcloud/capabilities'\nimport { parseFileSize } from '@nextcloud/files'\nimport { showError } from '@nextcloud/dialogs'\nimport { generateOcsUrl, generateUrl } from '@nextcloud/router'\nimport axios from '@nextcloud/axios'\n\nimport { GroupSorting } from '../constants/GroupManagement.ts'\nimport api from './api.js'\nimport logger from '../logger.ts'\n\nconst localStorage = getBuilder('settings').persist(true).build()\n\nconst defaults = {\n\tgroup: {\n\t\tid: '',\n\t\tname: '',\n\t\tusercount: 0,\n\t\tdisabled: 0,\n\t\tcanAdd: true,\n\t\tcanRemove: true,\n\t},\n}\n\nconst state = {\n\tusers: [],\n\tgroups: [],\n\torderBy: GroupSorting.UserCount,\n\tminPasswordLength: 0,\n\tusersOffset: 0,\n\tusersLimit: 25,\n\tdisabledUsersOffset: 0,\n\tdisabledUsersLimit: 25,\n\tuserCount: 0,\n\tshowConfig: {\n\t\tshowStoragePath: localStorage.getItem('account_settings__showStoragePath') === 'true',\n\t\tshowUserBackend: localStorage.getItem('account_settings__showUserBackend') === 'true',\n\t\tshowLastLogin: localStorage.getItem('account_settings__showLastLogin') === 'true',\n\t\tshowNewUserForm: localStorage.getItem('account_settings__showNewUserForm') === 'true',\n\t\tshowLanguages: localStorage.getItem('account_settings__showLanguages') === 'true',\n\t},\n}\n\nconst mutations = {\n\tappendUsers(state, usersObj) {\n\t\tconst existingUsers = state.users.map(({ id }) => id)\n\t\tconst newUsers = Object.values(usersObj)\n\t\t\t.filter(({ id }) => !existingUsers.includes(id))\n\n\t\tconst users = state.users.concat(newUsers)\n\t\tstate.usersOffset += state.usersLimit\n\t\tstate.users = users\n\t},\n\tupdateDisabledUsers(state, _usersObj) {\n\t\tstate.disabledUsersOffset += state.disabledUsersLimit\n\t},\n\tsetPasswordPolicyMinLength(state, length) {\n\t\tstate.minPasswordLength = length !== '' ? length : 0\n\t},\n\tinitGroups(state, { groups, orderBy, userCount }) {\n\t\tstate.groups = groups.map(group => Object.assign({}, defaults.group, group))\n\t\tstate.orderBy = orderBy\n\t\tstate.userCount = userCount\n\t},\n\taddGroup(state, { gid, displayName }) {\n\t\ttry {\n\t\t\tif (typeof state.groups.find((group) => group.id === gid) !== 'undefined') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// extend group to default values\n\t\t\tconst group = Object.assign({}, defaults.group, {\n\t\t\t\tid: gid,\n\t\t\t\tname: displayName,\n\t\t\t})\n\t\t\tstate.groups.unshift(group)\n\t\t} catch (e) {\n\t\t\tconsole.error('Can\\'t create group', e)\n\t\t}\n\t},\n\trenameGroup(state, { gid, displayName }) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tconst updatedGroup = state.groups[groupIndex]\n\t\t\tupdatedGroup.name = displayName\n\t\t\tstate.groups.splice(groupIndex, 1, updatedGroup)\n\t\t}\n\t},\n\tremoveGroup(state, gid) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tstate.groups.splice(groupIndex, 1)\n\t\t}\n\t},\n\taddUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// increase count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount++\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.push(gid)\n\t},\n\tremoveUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// lower count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount--\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t},\n\taddUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.push(gid)\n\t},\n\tremoveUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t},\n\tdeleteUser(state, userid) {\n\t\tconst userIndex = state.users.findIndex(user => user.id === userid)\n\t\tthis.commit('updateUserCounts', { user: state.users[userIndex], actionType: 'remove' })\n\t\tstate.users.splice(userIndex, 1)\n\t},\n\taddUserData(state, response) {\n\t\tconst user = response.data.ocs.data\n\t\tstate.users.unshift(user)\n\t\tthis.commit('updateUserCounts', { user, actionType: 'create' })\n\t},\n\tenableDisableUser(state, { userid, enabled }) {\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\tuser.enabled = enabled\n\t\tthis.commit('updateUserCounts', { user, actionType: enabled ? 'enable' : 'disable' })\n\t},\n\t// update active/disabled counts, groups counts\n\tupdateUserCounts(state, { user, actionType }) {\n\t\t// 0 is a special value\n\t\tif (state.userCount === 0) {\n\t\t\treturn\n\t\t}\n\n\t\tconst recentGroup = state.groups.find(group => group.id === '__nc_internal_recent')\n\t\tconst disabledGroup = state.groups.find(group => group.id === 'disabled')\n\t\tswitch (actionType) {\n\t\tcase 'enable':\n\t\tcase 'disable':\n\t\t\tdisabledGroup.usercount += user.enabled ? -1 : 1 // update Disabled Users count\n\t\t\trecentGroup.usercount += user.enabled ? 1 : -1\n\t\t\tstate.userCount += user.enabled ? 1 : -1 // update Active Users count\n\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\tgroup.disabled += user.enabled ? -1 : 1 // update group disabled count\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'create':\n\t\t\trecentGroup.usercount++\n\t\t\tstate.userCount++ // increment Active Users count\n\n\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\tstate.groups\n\t\t\t\t\t.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t .usercount++ // increment group total count\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'remove':\n\t\t\tif (user.enabled) {\n\t\t\t\trecentGroup.usercount--\n\t\t\t\tstate.userCount-- // decrement Active Users count\n\t\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t\tif (!group) {\n\t\t\t\t\t\tconsole.warn('User group ' + userGroup + ' does not exist during user removal')\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tgroup.usercount-- // decrement group total count\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tdisabledGroup.usercount-- // decrement Disabled Users count\n\t\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t\tgroup.disabled-- // decrement group disabled count\n\t\t\t\t})\n\t\t\t}\n\t\t\tbreak\n\t\tdefault:\n\t\t\tlogger.error(`Unknown action type in updateUserCounts: '${actionType}'`)\n\t\t\t// not throwing error to interrupt execution as this is not fatal\n\t\t}\n\t},\n\tsetUserData(state, { userid, key, value }) {\n\t\tif (key === 'quota') {\n\t\t\tconst humanValue = parseFileSize(value, true)\n\t\t\tstate.users.find(user => user.id === userid)[key][key] = humanValue !== null ? humanValue : value\n\t\t} else {\n\t\t\tstate.users.find(user => user.id === userid)[key] = value\n\t\t}\n\t},\n\n\t/**\n\t * Reset users list\n\t *\n\t * @param {object} state the store state\n\t */\n\tresetUsers(state) {\n\t\tstate.users = []\n\t\tstate.usersOffset = 0\n\t\tstate.disabledUsersOffset = 0\n\t},\n\n\tsetShowConfig(state, { key, value }) {\n\t\tlocalStorage.setItem(`account_settings__${key}`, JSON.stringify(value))\n\t\tstate.showConfig[key] = value\n\t},\n\n\tsetGroupSorting(state, sorting) {\n\t\tconst oldValue = state.orderBy\n\t\tstate.orderBy = sorting\n\n\t\t// Persist the value on the server\n\t\taxios.post(\n\t\t\tgenerateUrl('/settings/users/preferences/group.sortBy'),\n\t\t\t{\n\t\t\t\tvalue: String(sorting),\n\t\t\t},\n\t\t).catch((error) => {\n\t\t\tstate.orderBy = oldValue\n\t\t\tshowError(t('settings', 'Could not set group sorting'))\n\t\t\tlogger.error(error)\n\t\t})\n\t},\n}\n\nconst getters = {\n\tgetUsers(state) {\n\t\treturn state.users\n\t},\n\tgetGroups(state) {\n\t\treturn state.groups\n\t},\n\tgetSubadminGroups(state) {\n\t\t// Can't be subadmin of admin, recent, or disabled\n\t\treturn state.groups.filter(group => group.id !== 'admin' && group.id !== '__nc_internal_recent' && group.id !== 'disabled')\n\t},\n\tgetSortedGroups(state) {\n\t\tconst groups = [...state.groups]\n\t\tif (state.orderBy === GroupSorting.UserCount) {\n\t\t\treturn groups.sort((a, b) => {\n\t\t\t\tconst numA = a.usercount - a.disabled\n\t\t\t\tconst numB = b.usercount - b.disabled\n\t\t\t\treturn (numA < numB) ? 1 : (numB < numA ? -1 : a.name.localeCompare(b.name))\n\t\t\t})\n\t\t} else {\n\t\t\treturn groups.sort((a, b) => a.name.localeCompare(b.name))\n\t\t}\n\t},\n\tgetGroupSorting(state) {\n\t\treturn state.orderBy\n\t},\n\tgetPasswordPolicyMinLength(state) {\n\t\treturn state.minPasswordLength\n\t},\n\tgetUsersOffset(state) {\n\t\treturn state.usersOffset\n\t},\n\tgetUsersLimit(state) {\n\t\treturn state.usersLimit\n\t},\n\tgetDisabledUsersOffset(state) {\n\t\treturn state.disabledUsersOffset\n\t},\n\tgetDisabledUsersLimit(state) {\n\t\treturn state.disabledUsersLimit\n\t},\n\tgetUserCount(state) {\n\t\treturn state.userCount\n\t},\n\tgetShowConfig(state) {\n\t\treturn state.showConfig\n\t},\n}\n\nconst CancelToken = axios.CancelToken\nlet searchRequestCancelSource = null\n\nconst actions = {\n\n\t/**\n\t * search users\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @return {Promise}\n\t */\n\tsearchUsers(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search })).catch((error) => {\n\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t})\n\t},\n\n\t/**\n\t * Get user details\n\t *\n\t * @param {object} context store context\n\t * @param {string} userId user id\n\t * @return {Promise}\n\t */\n\tgetUser(context, userId) {\n\t\treturn api.get(generateOcsUrl(`cloud/users/${userId}`)).catch((error) => {\n\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t})\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @param {string} options.group Get users from group\n\t * @return {Promise}\n\t */\n\tgetUsers(context, { offset, limit, search, group }) {\n\t\tif (searchRequestCancelSource) {\n\t\t\tsearchRequestCancelSource.cancel('Operation canceled by another search request.')\n\t\t}\n\t\tsearchRequestCancelSource = CancelToken.source()\n\t\tsearch = typeof search === 'string' ? search : ''\n\n\t\t/**\n\t\t * Adding filters in the search bar such as in:files, in:users, etc.\n\t\t * collides with this particular search, so we need to remove them\n\t\t * here and leave only the original search query\n\t\t */\n\t\tsearch = search.replace(/in:[^\\s]+/g, '').trim()\n\n\t\tgroup = typeof group === 'string' ? group : ''\n\t\tif (group !== '') {\n\t\t\treturn api.get(generateOcsUrl('cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}', { group: encodeURIComponent(group), offset, limit, search }), {\n\t\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\t}\n\t\t\t\t\treturn usersCount\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }), {\n\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t})\n\t\t\t.then((response) => {\n\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t}\n\t\t\t\treturn usersCount\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t}\n\t\t\t})\n\t},\n\n\t/**\n\t * Get recent users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search query\n\t * @return {Promise}\n\t */\n\tasync getRecentUsers(context, { offset, limit, search }) {\n\t\tconst url = generateOcsUrl('cloud/users/recent?offset={offset}&limit={limit}&search={search}', { offset, limit, search })\n\t\ttry {\n\t\t\tconst response = await api.get(url)\n\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\tif (usersCount > 0) {\n\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t}\n\t\t\treturn usersCount\n\t\t} catch (error) {\n\t\t\tcontext.commit('API_FAILURE', error)\n\t\t}\n\t},\n\n\t/**\n\t * Get disabled users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param options.search\n\t * @return {Promise}\n\t */\n\tasync getDisabledUsers(context, { offset, limit, search }) {\n\t\tconst url = generateOcsUrl('cloud/users/disabled?offset={offset}&limit={limit}&search={search}', { offset, limit, search })\n\t\ttry {\n\t\t\tconst response = await api.get(url)\n\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\tif (usersCount > 0) {\n\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\tcontext.commit('updateDisabledUsers', response.data.ocs.data.users)\n\t\t\t}\n\t\t\treturn usersCount\n\t\t} catch (error) {\n\t\t\tcontext.commit('API_FAILURE', error)\n\t\t}\n\t},\n\n\tgetGroups(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tconst limitParam = limit === -1 ? '' : `&limit=${limit}`\n\t\treturn api.get(generateOcsUrl('cloud/groups?offset={offset}&search={search}', { offset, search }) + limitParam)\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.groups).length > 0) {\n\t\t\t\t\tresponse.data.ocs.data.groups.forEach(function(group) {\n\t\t\t\t\t\tcontext.commit('addGroup', { gid: group, displayName: group })\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search -\n\t * @return {Promise}\n\t */\n\tgetUsersFromList(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }))\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.users).length > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details from a groupid\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.groupid -\n\t * @return {Promise}\n\t */\n\tgetUsersFromGroup(context, { groupid, offset, limit }) {\n\t\treturn api.get(generateOcsUrl('cloud/users/{groupId}/details?offset={offset}&limit={limit}', { groupId: encodeURIComponent(groupid), offset, limit }))\n\t\t\t.then((response) => context.commit('getUsersFromList', response.data.ocs.data.users))\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetPasswordPolicyMinLength(context) {\n\t\tif (getCapabilities().password_policy && getCapabilities().password_policy.minLength) {\n\t\t\tcontext.commit('setPasswordPolicyMinLength', getCapabilities().password_policy.minLength)\n\t\t\treturn getCapabilities().password_policy.minLength\n\t\t}\n\t\treturn false\n\t},\n\n\t/**\n\t * Add group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\taddGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/groups'), { groupid: gid })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('addGroup', { gid, displayName: gid })\n\t\t\t\t\treturn { gid, displayName: gid }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { gid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from adding the user to a group that doesn't exists\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Rename group\n\t *\n\t * @param {object} context store context\n\t * @param {string} groupid Group id\n\t * @param {string} displayName Group display name\n\t * @return {Promise}\n\t */\n\trenameGroup(context, { groupid, displayName }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(groupid) }), { key: 'displayname', value: displayName })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('renameGroup', { gid: groupid, displayName })\n\t\t\t\t\treturn { groupid, displayName }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { groupid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from renaming the group\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Remove group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\tremoveGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(gid) }))\n\t\t\t\t.then((response) => context.commit('removeGroup', gid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { gid, error }))\n\t},\n\n\t/**\n\t * Add user to group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\t// let's throw one more time to prevent\n\t\t\t// the view from removing the user row on failure\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Add user to group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Mark all user devices for remote wipe\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tasync wipeUserDevices(context, userid) {\n\t\ttry {\n\t\t\tawait api.requireAdmin()\n\t\t\treturn await api.post(generateOcsUrl('cloud/users/{userid}/wipe', { userid }))\n\t\t} catch (error) {\n\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\treturn Promise.reject(new Error('Failed to wipe user devices'))\n\t\t}\n\t},\n\n\t/**\n\t * Delete a user\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tdeleteUser(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('deleteUser', userid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Add a user\n\t *\n\t * @param {object} context store context\n\t * @param {Function} context.commit -\n\t * @param {Function} context.dispatch -\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.password User password\n\t * @param {string} options.displayName User display name\n\t * @param {string} options.email User email\n\t * @param {string} options.groups User groups\n\t * @param {string} options.subadmin User subadmin groups\n\t * @param {string} options.quota User email\n\t * @param {string} options.language User language\n\t * @param {string} options.manager User manager\n\t * @return {Promise}\n\t */\n\taddUser({ commit, dispatch }, { userid, password, displayName, email, groups, subadmin, quota, language, manager }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users'), { userid, password, displayName, email, groups, subadmin, quota, language, manager })\n\t\t\t\t.then((response) => dispatch('addUserData', userid || response.data.ocs.data.id))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcommit('API_FAILURE', { userid, error })\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Get user data and commit addition\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\taddUserData(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.get(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('addUserData', response))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Enable or disable user\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {boolean} options.enabled User enablement status\n\t * @return {Promise}\n\t */\n\tenableDisableUser(context, { userid, enabled = true }) {\n\t\tconst userStatus = enabled ? 'enable' : 'disable'\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}/{userStatus}', { userid, userStatus }))\n\t\t\t\t.then((response) => context.commit('enableDisableUser', { userid, enabled }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Edit user data\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.key User field to edit\n\t * @param {string} options.value Value of the change\n\t * @return {Promise}\n\t */\n\tasync setUserData(context, { userid, key, value }) {\n\t\tconst allowedEmpty = ['email', 'displayname', 'manager']\n\t\tif (['email', 'language', 'quota', 'displayname', 'password', 'manager'].indexOf(key) !== -1) {\n\t\t\t// We allow empty email or displayname\n\t\t\tif (typeof value === 'string'\n\t\t\t\t&& (\n\t\t\t\t\t(allowedEmpty.indexOf(key) === -1 && value.length > 0)\n\t\t\t\t\t|| allowedEmpty.indexOf(key) !== -1\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\ttry {\n\t\t\t\t\tawait api.requireAdmin()\n\t\t\t\t\tawait api.put(generateOcsUrl('cloud/users/{userid}', { userid }), { key, value })\n\t\t\t\t\treturn context.commit('setUserData', { userid, key, value })\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn Promise.reject(new Error('Invalid request data'))\n\t},\n\n\t/**\n\t * Send welcome mail\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tsendWelcomeMail(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/welcome', { userid }))\n\t\t\t\t.then(response => true)\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport api from './api.js'\nimport Vue from 'vue'\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\nimport { showError, showInfo } from '@nextcloud/dialogs'\nimport { loadState } from '@nextcloud/initial-state'\n\nconst state = {\n\tapps: [],\n\tbundles: loadState('settings', 'appstoreBundles', []),\n\tcategories: [],\n\tupdateCount: loadState('settings', 'appstoreUpdateCount', 0),\n\tloading: {},\n\tgettingCategoriesPromise: null,\n}\n\nconst mutations = {\n\n\tAPPS_API_FAILURE(state, error) {\n\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.') + '
' + error.error.response.data.data.message, { isHTML: true })\n\t\tconsole.error(state, error)\n\t},\n\n\tinitCategories(state, { categories, updateCount }) {\n\t\tstate.categories = categories\n\t\tstate.updateCount = updateCount\n\t},\n\n\tupdateCategories(state, categoriesPromise) {\n\t\tstate.gettingCategoriesPromise = categoriesPromise\n\t},\n\n\tsetUpdateCount(state, updateCount) {\n\t\tstate.updateCount = updateCount\n\t},\n\n\taddCategory(state, category) {\n\t\tstate.categories.push(category)\n\t},\n\n\tappendCategories(state, categoriesArray) {\n\t\t// convert obj to array\n\t\tstate.categories = categoriesArray\n\t},\n\n\tsetAllApps(state, apps) {\n\t\tstate.apps = apps\n\t},\n\n\tsetError(state, { appId, error }) {\n\t\tif (!Array.isArray(appId)) {\n\t\t\tappId = [appId]\n\t\t}\n\t\tappId.forEach((_id) => {\n\t\t\tconst app = state.apps.find(app => app.id === _id)\n\t\t\tapp.error = error\n\t\t})\n\t},\n\n\tclearError(state, { appId, error }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.error = null\n\t},\n\n\tenableApp(state, { appId, groups }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = true\n\t\tapp.groups = groups\n\t},\n\n\tsetInstallState(state, { appId, canInstall }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tif (app) {\n\t\t\tapp.canInstall = canInstall === true\n\t\t}\n\t},\n\n\tdisableApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = false\n\t\tapp.groups = []\n\t\tif (app.removable) {\n\t\t\tapp.canUnInstall = true\n\t\t}\n\t},\n\n\tuninstallApp(state, appId) {\n\t\tstate.apps.find(app => app.id === appId).active = false\n\t\tstate.apps.find(app => app.id === appId).groups = []\n\t\tstate.apps.find(app => app.id === appId).needsDownload = true\n\t\tstate.apps.find(app => app.id === appId).installed = false\n\t\tstate.apps.find(app => app.id === appId).canUnInstall = false\n\t\tstate.apps.find(app => app.id === appId).canInstall = true\n\t},\n\n\tupdateApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tconst version = app.update\n\t\tapp.update = null\n\t\tapp.version = version\n\t\tstate.updateCount--\n\n\t},\n\n\tresetApps(state) {\n\t\tstate.apps = []\n\t},\n\treset(state) {\n\t\tstate.apps = []\n\t\tstate.categories = []\n\t\tstate.updateCount = 0\n\t},\n\tstartLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, true)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, true)\n\t\t}\n\t},\n\tstopLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, false)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, false)\n\t\t}\n\t},\n}\n\nconst getters = {\n\tloading(state) {\n\t\treturn function(id) {\n\t\t\treturn state.loading[id]\n\t\t}\n\t},\n\tgetCategories(state) {\n\t\treturn state.categories\n\t},\n\tgetAllApps(state) {\n\t\treturn state.apps\n\t},\n\tgetAppBundles(state) {\n\t\treturn state.bundles\n\t},\n\tgetUpdateCount(state) {\n\t\treturn state.updateCount\n\t},\n\tgetCategoryById: (state) => (selectedCategoryId) => {\n\t\treturn state.categories.find((category) => category.id === selectedCategoryId)\n\t},\n}\n\nconst actions = {\n\n\tenableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/enable'), { appIds: apps, groups })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('enableApp', { appId: _appId, groups })\n\t\t\t\t\t})\n\n\t\t\t\t\t// check for server health\n\t\t\t\t\treturn axios.get(generateUrl('apps/files/'))\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tif (response.data.update_required) {\n\t\t\t\t\t\t\t\tshowInfo(\n\t\t\t\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t\t\t\t'settings',\n\t\t\t\t\t\t\t\t\t\t'The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds.',\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tonClick: () => window.location.reload(),\n\t\t\t\t\t\t\t\t\t\tclose: false,\n\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tlocation.reload()\n\t\t\t\t\t\t\t\t}, 5000)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\tif (!Array.isArray(appId)) {\n\t\t\t\t\t\t\t\tshowError(t('settings', 'Error: This app cannot be enabled because it makes the server unstable'))\n\t\t\t\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\t\t\t\terror: t('settings', 'Error: This app cannot be enabled because it makes the server unstable'),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\tcontext.dispatch('disableApp', { appId })\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tforceEnableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then(() => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/force'), { appId })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('setInstallState', { appId, canInstall: true })\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tdisableApp(context, { appId }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\treturn api.post(generateUrl('settings/apps/disable'), { appIds: apps })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('disableApp', _appId)\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tuninstallApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\treturn api.get(generateUrl(`settings/apps/uninstall/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('uninstallApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tupdateApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.get(generateUrl(`settings/apps/update/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('updateApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tgetAllApps(context) {\n\t\tcontext.commit('startLoading', 'list')\n\t\treturn api.get(generateUrl('settings/apps/list'))\n\t\t\t.then((response) => {\n\t\t\t\tcontext.commit('setAllApps', response.data.apps)\n\t\t\t\tcontext.commit('stopLoading', 'list')\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tasync getCategories(context, { shouldRefetchCategories = false } = {}) {\n\t\tif (shouldRefetchCategories || !context.state.gettingCategoriesPromise) {\n\t\t\tcontext.commit('startLoading', 'categories')\n\t\t\ttry {\n\t\t\t\tconst categoriesPromise = api.get(generateUrl('settings/apps/categories'))\n\t\t\t\tcontext.commit('updateCategories', categoriesPromise)\n\t\t\t\tconst categoriesPromiseResponse = await categoriesPromise\n\t\t\t\tif (categoriesPromiseResponse.data.length > 0) {\n\t\t\t\t\tcontext.commit('appendCategories', categoriesPromiseResponse.data)\n\t\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\treturn false\n\t\t\t} catch (error) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t}\n\t\treturn context.state.gettingCategoriesPromise\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\nconst state = {\n\tserverData: loadState('settings', 'usersSettings', {}),\n}\nconst mutations = {\n\tsetServerData(state, data) {\n\t\tstate.serverData = data\n\t},\n}\nconst getters = {\n\tgetServerData(state) {\n\t\treturn state.serverData\n\t},\n}\nconst actions = {}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport api from './api.js'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst state = {}\nconst mutations = {}\nconst getters = {}\nconst actions = {\n\t/**\n\t * Set application config in database\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.app Application name\n\t * @param {boolean} options.key Config key\n\t * @param {boolean} options.value Value to set\n\t * @return {Promise}\n\t */\n\tsetAppConfig(context, { app, key, value }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('apps/provisioning_api/api/v1/config/apps/{app}/{key}', { app, key }), { value })\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { app, key, value, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport users from './users.js'\nimport apps from './apps.js'\nimport settings from './users-settings.js'\nimport oc from './oc.js'\nimport { showError } from '@nextcloud/dialogs'\n\nVue.use(Vuex)\n\nconst debug = process.env.NODE_ENV !== 'production'\n\nconst mutations = {\n\tAPI_FAILURE(state, error) {\n\t\ttry {\n\t\t\tconst message = error.error.response.data.ocs.meta.message\n\t\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.') + '
' + message, { isHTML: true })\n\t\t} catch (e) {\n\t\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.'))\n\t\t}\n\t\tconsole.error(state, error)\n\t},\n}\n\nlet store = null\n\nexport const useStore = () => {\n\tif (store === null) {\n\t\tstore = new Store({\n\t\t\tmodules: {\n\t\t\t\tusers,\n\t\t\t\tapps,\n\t\t\t\tsettings,\n\t\t\t\toc,\n\t\t\t},\n\t\t\tstrict: debug,\n\t\t\tmutations,\n\t\t})\n\t}\n\treturn store\n}\n","/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n/**\n * https://github.com/nextcloud/server/blob/208e38e84e1a07a49699aa90dc5b7272d24489f0/lib/private/Group/MetaData.php#L34\n */\nexport var GroupSorting;\n(function (GroupSorting) {\n GroupSorting[GroupSorting[\"UserCount\"] = 1] = \"UserCount\";\n GroupSorting[GroupSorting[\"GroupName\"] = 2] = \"GroupName\";\n})(GroupSorting || (GroupSorting = {}));\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { getLoggerBuilder } from '@nextcloud/logger';\nexport default getLoggerBuilder()\n .setApp('settings')\n .detectUser()\n .build();\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(_setup.NcContent,{attrs:{\"app-name\":\"settings\"}},[_c('router-view',{attrs:{\"name\":\"navigation\"}}),_vm._v(\" \"),_c('router-view'),_vm._v(\" \"),_c('router-view',{attrs:{\"name\":\"sidebar\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"","import { render, staticRenderFns } from \"./SettingsApp.vue?vue&type=template&id=02c6e0e9\"\nimport script from \"./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { loadState } from '@nextcloud/initial-state';\nconst appstoreEnabled = loadState('settings', 'appstoreEnabled', true);\n// Dynamic loading\nconst AppStore = () => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStore.vue');\nconst AppStoreNavigation = () => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStoreNavigation.vue');\nconst AppStoreSidebar = () => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStoreSidebar.vue');\nconst UserManagement = () => import(/* webpackChunkName: 'settings-users' */ '../views/UserManagement.vue');\nconst UserManagementNavigation = () => import(/* webpackChunkName: 'settings-users' */ '../views/UserManagementNavigation.vue');\nconst routes = [\n {\n name: 'users',\n path: '/:index(index.php/)?settings/users',\n components: {\n default: UserManagement,\n navigation: UserManagementNavigation,\n },\n props: true,\n children: [\n {\n path: ':selectedGroup',\n name: 'group',\n },\n ],\n },\n {\n path: '/:index(index.php/)?settings/apps',\n name: 'apps',\n redirect: {\n name: 'apps-category',\n params: {\n category: appstoreEnabled ? 'discover' : 'installed',\n },\n },\n components: {\n default: AppStore,\n navigation: AppStoreNavigation,\n sidebar: AppStoreSidebar,\n },\n children: [\n {\n path: ':category',\n name: 'apps-category',\n children: [\n {\n path: ':id',\n name: 'apps-details',\n },\n ],\n },\n ],\n },\n];\nexport default routes;\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport Vue from 'vue';\nimport Router from 'vue-router';\nimport { generateUrl } from '@nextcloud/router';\nimport routes from './routes.ts';\nVue.use(Router);\nconst router = new Router({\n mode: 'history',\n // if index.php is in the url AND we got this far, then it's working:\n // let's keep using index.php in the url\n base: generateUrl(''),\n linkActiveClass: 'active',\n routes,\n});\nexport default router;\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport Vue from 'vue';\nimport VTooltip from 'v-tooltip';\nimport { sync } from 'vuex-router-sync';\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n';\nimport SettingsApp from './views/SettingsApp.vue';\nimport router from './router/index.ts';\nimport { useStore } from './store/index.js';\nimport { getCSPNonce } from '@nextcloud/auth';\nimport { PiniaVuePlugin, createPinia } from 'pinia';\nVue.use(VTooltip, { defaultHtml: false });\nconst store = useStore();\nsync(store, router);\n// CSP config for webpack dynamic chunk loading\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = getCSPNonce();\n// bind to window\nVue.prototype.t = t;\nVue.prototype.n = n;\nVue.use(PiniaVuePlugin);\nconst pinia = createPinia();\nexport default new Vue({\n router,\n store,\n pinia,\n render: h => h(SettingsApp),\n el: '#content',\n});\n","exports.sync = function (store, router, options) {\n var moduleName = (options || {}).moduleName || 'route'\n\n store.registerModule(moduleName, {\n namespaced: true,\n state: cloneRoute(router.currentRoute),\n mutations: {\n 'ROUTE_CHANGED': function ROUTE_CHANGED (state, transition) {\n store.state[moduleName] = cloneRoute(transition.to, transition.from)\n }\n }\n })\n\n var isTimeTraveling = false\n var currentPath\n\n // sync router on store change\n var storeUnwatch = store.watch(\n function (state) { return state[moduleName]; },\n function (route) {\n var fullPath = route.fullPath;\n if (fullPath === currentPath) {\n return\n }\n if (currentPath != null) {\n isTimeTraveling = true\n router.push(route)\n }\n currentPath = fullPath\n },\n { sync: true }\n )\n\n // sync store on router navigation\n var afterEachUnHook = router.afterEach(function (to, from) {\n if (isTimeTraveling) {\n isTimeTraveling = false\n return\n }\n currentPath = to.fullPath\n store.commit(moduleName + '/ROUTE_CHANGED', { to: to, from: from })\n })\n\n return function unsync () {\n // On unsync, remove router hook\n if (afterEachUnHook != null) {\n afterEachUnHook()\n }\n\n // On unsync, remove store watch\n if (storeUnwatch != null) {\n storeUnwatch()\n }\n\n // On unsync, unregister Module with store\n store.unregisterModule(moduleName)\n }\n}\n\nfunction cloneRoute (to, from) {\n var clone = {\n name: to.name,\n path: to.path,\n hash: to.hash,\n query: to.query,\n params: to.params,\n fullPath: to.fullPath,\n meta: to.meta\n }\n if (from) {\n clone.from = cloneRoute(from)\n }\n return Object.freeze(clone)\n}\n\n","import { getLoggerBuilder } from \"@nextcloud/logger\";\nimport { getCurrentUser, onRequestTokenUpdate, getRequestToken } from \"@nextcloud/auth\";\nimport { join, basename, extname, dirname } from \"path\";\nimport { encodePath } from \"@nextcloud/paths\";\nimport { generateRemoteUrl } from \"@nextcloud/router\";\nimport { CancelablePromise } from \"cancelable-promise\";\nimport { createClient, getPatcher } from \"webdav\";\nimport { isPublicShare, getSharingToken } from \"@nextcloud/sharing/public\";\nimport { getCapabilities } from \"@nextcloud/capabilities\";\nimport { getCanonicalLocale, getLanguage } from \"@nextcloud/l10n\";\nimport { TypedEventTarget } from \"typescript-event-target\";\nconst logger = getLoggerBuilder().setApp(\"@nextcloud/files\").detectUser().build();\nvar NewMenuEntryCategory = /* @__PURE__ */ ((NewMenuEntryCategory2) => {\n NewMenuEntryCategory2[NewMenuEntryCategory2[\"UploadFromDevice\"] = 0] = \"UploadFromDevice\";\n NewMenuEntryCategory2[NewMenuEntryCategory2[\"CreateNew\"] = 1] = \"CreateNew\";\n NewMenuEntryCategory2[NewMenuEntryCategory2[\"Other\"] = 2] = \"Other\";\n return NewMenuEntryCategory2;\n})(NewMenuEntryCategory || {});\nclass NewFileMenu {\n _entries = [];\n registerEntry(entry) {\n this.validateEntry(entry);\n entry.category = entry.category ?? 1;\n this._entries.push(entry);\n }\n unregisterEntry(entry) {\n const entryIndex = typeof entry === \"string\" ? this.getEntryIndex(entry) : this.getEntryIndex(entry.id);\n if (entryIndex === -1) {\n logger.warn(\"Entry not found, nothing removed\", { entry, entries: this.getEntries() });\n return;\n }\n this._entries.splice(entryIndex, 1);\n }\n /**\n * Get the list of registered entries\n *\n * @param {Folder} context the creation context. Usually the current folder\n */\n getEntries(context) {\n if (context) {\n return this._entries.filter((entry) => typeof entry.enabled === \"function\" ? entry.enabled(context) : true);\n }\n return this._entries;\n }\n getEntryIndex(id) {\n return this._entries.findIndex((entry) => entry.id === id);\n }\n validateEntry(entry) {\n if (!entry.id || !entry.displayName || !(entry.iconSvgInline || entry.iconClass) || !entry.handler) {\n throw new Error(\"Invalid entry\");\n }\n if (typeof entry.id !== \"string\" || typeof entry.displayName !== \"string\") {\n throw new Error(\"Invalid id or displayName property\");\n }\n if (entry.iconClass && typeof entry.iconClass !== \"string\" || entry.iconSvgInline && typeof entry.iconSvgInline !== \"string\") {\n throw new Error(\"Invalid icon provided\");\n }\n if (entry.enabled !== void 0 && typeof entry.enabled !== \"function\") {\n throw new Error(\"Invalid enabled property\");\n }\n if (typeof entry.handler !== \"function\") {\n throw new Error(\"Invalid handler property\");\n }\n if (\"order\" in entry && typeof entry.order !== \"number\") {\n throw new Error(\"Invalid order property\");\n }\n if (this.getEntryIndex(entry.id) !== -1) {\n throw new Error(\"Duplicate entry\");\n }\n }\n}\nconst getNewFileMenu = function() {\n if (typeof window._nc_newfilemenu === \"undefined\") {\n window._nc_newfilemenu = new NewFileMenu();\n logger.debug(\"NewFileMenu initialized\");\n }\n return window._nc_newfilemenu;\n};\nvar DefaultType = /* @__PURE__ */ ((DefaultType2) => {\n DefaultType2[\"DEFAULT\"] = \"default\";\n DefaultType2[\"HIDDEN\"] = \"hidden\";\n return DefaultType2;\n})(DefaultType || {});\nclass FileAction {\n _action;\n constructor(action) {\n this.validateAction(action);\n this._action = action;\n }\n get id() {\n return this._action.id;\n }\n get displayName() {\n return this._action.displayName;\n }\n get title() {\n return this._action.title;\n }\n get iconSvgInline() {\n return this._action.iconSvgInline;\n }\n get enabled() {\n return this._action.enabled;\n }\n get exec() {\n return this._action.exec;\n }\n get execBatch() {\n return this._action.execBatch;\n }\n get order() {\n return this._action.order;\n }\n get parent() {\n return this._action.parent;\n }\n get default() {\n return this._action.default;\n }\n get inline() {\n return this._action.inline;\n }\n get renderInline() {\n return this._action.renderInline;\n }\n validateAction(action) {\n if (!action.id || typeof action.id !== \"string\") {\n throw new Error(\"Invalid id\");\n }\n if (!action.displayName || typeof action.displayName !== \"function\") {\n throw new Error(\"Invalid displayName function\");\n }\n if (\"title\" in action && typeof action.title !== \"function\") {\n throw new Error(\"Invalid title function\");\n }\n if (!action.iconSvgInline || typeof action.iconSvgInline !== \"function\") {\n throw new Error(\"Invalid iconSvgInline function\");\n }\n if (!action.exec || typeof action.exec !== \"function\") {\n throw new Error(\"Invalid exec function\");\n }\n if (\"enabled\" in action && typeof action.enabled !== \"function\") {\n throw new Error(\"Invalid enabled function\");\n }\n if (\"execBatch\" in action && typeof action.execBatch !== \"function\") {\n throw new Error(\"Invalid execBatch function\");\n }\n if (\"order\" in action && typeof action.order !== \"number\") {\n throw new Error(\"Invalid order\");\n }\n if (\"parent\" in action && typeof action.parent !== \"string\") {\n throw new Error(\"Invalid parent\");\n }\n if (action.default && !Object.values(DefaultType).includes(action.default)) {\n throw new Error(\"Invalid default\");\n }\n if (\"inline\" in action && typeof action.inline !== \"function\") {\n throw new Error(\"Invalid inline function\");\n }\n if (\"renderInline\" in action && typeof action.renderInline !== \"function\") {\n throw new Error(\"Invalid renderInline function\");\n }\n }\n}\nconst registerFileAction = function(action) {\n if (typeof window._nc_fileactions === \"undefined\") {\n window._nc_fileactions = [];\n logger.debug(\"FileActions initialized\");\n }\n if (window._nc_fileactions.find((search) => search.id === action.id)) {\n logger.error(`FileAction ${action.id} already registered`, { action });\n return;\n }\n window._nc_fileactions.push(action);\n};\nconst getFileActions = function() {\n if (typeof window._nc_fileactions === \"undefined\") {\n window._nc_fileactions = [];\n logger.debug(\"FileActions initialized\");\n }\n return window._nc_fileactions;\n};\nclass Header {\n _header;\n constructor(header) {\n this.validateHeader(header);\n this._header = header;\n }\n get id() {\n return this._header.id;\n }\n get order() {\n return this._header.order;\n }\n get enabled() {\n return this._header.enabled;\n }\n get render() {\n return this._header.render;\n }\n get updated() {\n return this._header.updated;\n }\n validateHeader(header) {\n if (!header.id || !header.render || !header.updated) {\n throw new Error(\"Invalid header: id, render and updated are required\");\n }\n if (typeof header.id !== \"string\") {\n throw new Error(\"Invalid id property\");\n }\n if (header.enabled !== void 0 && typeof header.enabled !== \"function\") {\n throw new Error(\"Invalid enabled property\");\n }\n if (header.render && typeof header.render !== \"function\") {\n throw new Error(\"Invalid render property\");\n }\n if (header.updated && typeof header.updated !== \"function\") {\n throw new Error(\"Invalid updated property\");\n }\n }\n}\nconst registerFileListHeaders = function(header) {\n if (typeof window._nc_filelistheader === \"undefined\") {\n window._nc_filelistheader = [];\n logger.debug(\"FileListHeaders initialized\");\n }\n if (window._nc_filelistheader.find((search) => search.id === header.id)) {\n logger.error(`Header ${header.id} already registered`, { header });\n return;\n }\n window._nc_filelistheader.push(header);\n};\nconst getFileListHeaders = function() {\n if (typeof window._nc_filelistheader === \"undefined\") {\n window._nc_filelistheader = [];\n logger.debug(\"FileListHeaders initialized\");\n }\n return window._nc_filelistheader;\n};\nvar Permission = /* @__PURE__ */ ((Permission2) => {\n Permission2[Permission2[\"NONE\"] = 0] = \"NONE\";\n Permission2[Permission2[\"CREATE\"] = 4] = \"CREATE\";\n Permission2[Permission2[\"READ\"] = 1] = \"READ\";\n Permission2[Permission2[\"UPDATE\"] = 2] = \"UPDATE\";\n Permission2[Permission2[\"DELETE\"] = 8] = \"DELETE\";\n Permission2[Permission2[\"SHARE\"] = 16] = \"SHARE\";\n Permission2[Permission2[\"ALL\"] = 31] = \"ALL\";\n return Permission2;\n})(Permission || {});\nconst defaultDavProperties = [\n \"d:getcontentlength\",\n \"d:getcontenttype\",\n \"d:getetag\",\n \"d:getlastmodified\",\n \"d:creationdate\",\n \"d:displayname\",\n \"d:quota-available-bytes\",\n \"d:resourcetype\",\n \"nc:has-preview\",\n \"nc:is-encrypted\",\n \"nc:mount-type\",\n \"oc:comments-unread\",\n \"oc:favorite\",\n \"oc:fileid\",\n \"oc:owner-display-name\",\n \"oc:owner-id\",\n \"oc:permissions\",\n \"oc:size\"\n];\nconst defaultDavNamespaces = {\n d: \"DAV:\",\n nc: \"http://nextcloud.org/ns\",\n oc: \"http://owncloud.org/ns\",\n ocs: \"http://open-collaboration-services.org/ns\"\n};\nconst registerDavProperty = function(prop, namespace = { nc: \"http://nextcloud.org/ns\" }) {\n if (typeof window._nc_dav_properties === \"undefined\") {\n window._nc_dav_properties = [...defaultDavProperties];\n window._nc_dav_namespaces = { ...defaultDavNamespaces };\n }\n const namespaces = { ...window._nc_dav_namespaces, ...namespace };\n if (window._nc_dav_properties.find((search) => search === prop)) {\n logger.warn(`${prop} already registered`, { prop });\n return false;\n }\n if (prop.startsWith(\"<\") || prop.split(\":\").length !== 2) {\n logger.error(`${prop} is not valid. See example: 'oc:fileid'`, { prop });\n return false;\n }\n const ns = prop.split(\":\")[0];\n if (!namespaces[ns]) {\n logger.error(`${prop} namespace unknown`, { prop, namespaces });\n return false;\n }\n window._nc_dav_properties.push(prop);\n window._nc_dav_namespaces = namespaces;\n return true;\n};\nconst getDavProperties = function() {\n if (typeof window._nc_dav_properties === \"undefined\") {\n window._nc_dav_properties = [...defaultDavProperties];\n }\n return window._nc_dav_properties.map((prop) => `<${prop} />`).join(\" \");\n};\nconst getDavNameSpaces = function() {\n if (typeof window._nc_dav_namespaces === \"undefined\") {\n window._nc_dav_namespaces = { ...defaultDavNamespaces };\n }\n return Object.keys(window._nc_dav_namespaces).map((ns) => `xmlns:${ns}=\"${window._nc_dav_namespaces?.[ns]}\"`).join(\" \");\n};\nconst davGetDefaultPropfind = function() {\n return `\n\t\t\n\t\t\t\n\t\t\t\t${getDavProperties()}\n\t\t\t\n\t\t`;\n};\nconst davGetFavoritesReport = function() {\n return `\n\t\t\n\t\t\t\n\t\t\t\t${getDavProperties()}\n\t\t\t\n\t\t\t\n\t\t\t\t1\n\t\t\t\n\t\t`;\n};\nconst davGetRecentSearch = function(lastModified) {\n return `\n\n\t\n\t\t\n\t\t\t\n\t\t\t\t${getDavProperties()}\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t/files/${getCurrentUser()?.uid}/\n\t\t\t\tinfinity\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\thttpd/unix-directory\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t0\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t${lastModified}\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t100\n\t\t\t0\n\t\t\n\t\n`;\n};\nconst davParsePermissions = function(permString = \"\") {\n let permissions = Permission.NONE;\n if (!permString) {\n return permissions;\n }\n if (permString.includes(\"C\") || permString.includes(\"K\")) {\n permissions |= Permission.CREATE;\n }\n if (permString.includes(\"G\")) {\n permissions |= Permission.READ;\n }\n if (permString.includes(\"W\") || permString.includes(\"N\") || permString.includes(\"V\")) {\n permissions |= Permission.UPDATE;\n }\n if (permString.includes(\"D\")) {\n permissions |= Permission.DELETE;\n }\n if (permString.includes(\"R\")) {\n permissions |= Permission.SHARE;\n }\n return permissions;\n};\nvar FileType = /* @__PURE__ */ ((FileType2) => {\n FileType2[\"Folder\"] = \"folder\";\n FileType2[\"File\"] = \"file\";\n return FileType2;\n})(FileType || {});\nconst isDavRessource = function(source, davService) {\n return source.match(davService) !== null;\n};\nconst validateData = (data, davService) => {\n if (data.id && typeof data.id !== \"number\") {\n throw new Error(\"Invalid id type of value\");\n }\n if (!data.source) {\n throw new Error(\"Missing mandatory source\");\n }\n try {\n new URL(data.source);\n } catch (e) {\n throw new Error(\"Invalid source format, source must be a valid URL\");\n }\n if (!data.source.startsWith(\"http\")) {\n throw new Error(\"Invalid source format, only http(s) is supported\");\n }\n if (data.displayname && typeof data.displayname !== \"string\") {\n throw new Error(\"Invalid displayname type\");\n }\n if (data.mtime && !(data.mtime instanceof Date)) {\n throw new Error(\"Invalid mtime type\");\n }\n if (data.crtime && !(data.crtime instanceof Date)) {\n throw new Error(\"Invalid crtime type\");\n }\n if (!data.mime || typeof data.mime !== \"string\" || !data.mime.match(/^[-\\w.]+\\/[-+\\w.]+$/gi)) {\n throw new Error(\"Missing or invalid mandatory mime\");\n }\n if (\"size\" in data && typeof data.size !== \"number\" && data.size !== void 0) {\n throw new Error(\"Invalid size type\");\n }\n if (\"permissions\" in data && data.permissions !== void 0 && !(typeof data.permissions === \"number\" && data.permissions >= Permission.NONE && data.permissions <= Permission.ALL)) {\n throw new Error(\"Invalid permissions\");\n }\n if (data.owner && data.owner !== null && typeof data.owner !== \"string\") {\n throw new Error(\"Invalid owner type\");\n }\n if (data.attributes && typeof data.attributes !== \"object\") {\n throw new Error(\"Invalid attributes type\");\n }\n if (data.root && typeof data.root !== \"string\") {\n throw new Error(\"Invalid root type\");\n }\n if (data.root && !data.root.startsWith(\"/\")) {\n throw new Error(\"Root must start with a leading slash\");\n }\n if (data.root && !data.source.includes(data.root)) {\n throw new Error(\"Root must be part of the source\");\n }\n if (data.root && isDavRessource(data.source, davService)) {\n const service = data.source.match(davService)[0];\n if (!data.source.includes(join(service, data.root))) {\n throw new Error(\"The root must be relative to the service. e.g /files/emma\");\n }\n }\n if (data.status && !Object.values(NodeStatus).includes(data.status)) {\n throw new Error(\"Status must be a valid NodeStatus\");\n }\n};\nvar NodeStatus = /* @__PURE__ */ ((NodeStatus2) => {\n NodeStatus2[\"NEW\"] = \"new\";\n NodeStatus2[\"FAILED\"] = \"failed\";\n NodeStatus2[\"LOADING\"] = \"loading\";\n NodeStatus2[\"LOCKED\"] = \"locked\";\n return NodeStatus2;\n})(NodeStatus || {});\nclass Node {\n _data;\n _attributes;\n _knownDavService = /(remote|public)\\.php\\/(web)?dav/i;\n readonlyAttributes = Object.entries(Object.getOwnPropertyDescriptors(Node.prototype)).filter((e) => typeof e[1].get === \"function\" && e[0] !== \"__proto__\").map((e) => e[0]);\n handler = {\n set: (target, prop, value) => {\n if (this.readonlyAttributes.includes(prop)) {\n return false;\n }\n return Reflect.set(target, prop, value);\n },\n deleteProperty: (target, prop) => {\n if (this.readonlyAttributes.includes(prop)) {\n return false;\n }\n return Reflect.deleteProperty(target, prop);\n },\n // TODO: This is deprecated and only needed for files v3\n get: (target, prop, receiver) => {\n if (this.readonlyAttributes.includes(prop)) {\n logger.warn(`Accessing \"Node.attributes.${prop}\" is deprecated, access it directly on the Node instance.`);\n return Reflect.get(this, prop);\n }\n return Reflect.get(target, prop, receiver);\n }\n };\n constructor(data, davService) {\n validateData(data, davService || this._knownDavService);\n this._data = {\n // TODO: Remove with next major release, this is just for compatibility\n displayname: data.attributes?.displayname,\n ...data,\n attributes: {}\n };\n this._attributes = new Proxy(this._data.attributes, this.handler);\n this.update(data.attributes ?? {});\n if (davService) {\n this._knownDavService = davService;\n }\n }\n /**\n * Get the source url to this object\n * There is no setter as the source is not meant to be changed manually.\n * You can use the rename or move method to change the source.\n */\n get source() {\n return this._data.source.replace(/\\/$/i, \"\");\n }\n /**\n * Get the encoded source url to this object for requests purposes\n */\n get encodedSource() {\n const { origin } = new URL(this.source);\n return origin + encodePath(this.source.slice(origin.length));\n }\n /**\n * Get this object name\n * There is no setter as the source is not meant to be changed manually.\n * You can use the rename or move method to change the source.\n */\n get basename() {\n return basename(this.source);\n }\n /**\n * The nodes displayname\n * By default the display name and the `basename` are identical,\n * but it is possible to have a different name. This happens\n * on the files app for example for shared folders.\n */\n get displayname() {\n return this._data.displayname || this.basename;\n }\n /**\n * Set the displayname\n */\n set displayname(displayname) {\n this._data.displayname = displayname;\n }\n /**\n * Get this object's extension\n * There is no setter as the source is not meant to be changed manually.\n * You can use the rename or move method to change the source.\n */\n get extension() {\n return extname(this.source);\n }\n /**\n * Get the directory path leading to this object\n * Will use the relative path to root if available\n *\n * There is no setter as the source is not meant to be changed manually.\n * You can use the rename or move method to change the source.\n */\n get dirname() {\n if (this.root) {\n let source = this.source;\n if (this.isDavRessource) {\n source = source.split(this._knownDavService).pop();\n }\n const firstMatch = source.indexOf(this.root);\n const root = this.root.replace(/\\/$/, \"\");\n return dirname(source.slice(firstMatch + root.length) || \"/\");\n }\n const url = new URL(this.source);\n return dirname(url.pathname);\n }\n /**\n * Get the file mime\n * There is no setter as the mime is not meant to be changed\n */\n get mime() {\n return this._data.mime;\n }\n /**\n * Get the file modification time\n */\n get mtime() {\n return this._data.mtime;\n }\n /**\n * Set the file modification time\n */\n set mtime(mtime) {\n this._data.mtime = mtime;\n }\n /**\n * Get the file creation time\n * There is no setter as the creation time is not meant to be changed\n */\n get crtime() {\n return this._data.crtime;\n }\n /**\n * Get the file size\n */\n get size() {\n return this._data.size;\n }\n /**\n * Set the file size\n */\n set size(size) {\n this.updateMtime();\n this._data.size = size;\n }\n /**\n * Get the file attribute\n * This contains all additional attributes not provided by the Node class\n */\n get attributes() {\n return this._attributes;\n }\n /**\n * Get the file permissions\n */\n get permissions() {\n if (this.owner === null && !this.isDavRessource) {\n return Permission.READ;\n }\n return this._data.permissions !== void 0 ? this._data.permissions : Permission.NONE;\n }\n /**\n * Set the file permissions\n */\n set permissions(permissions) {\n this.updateMtime();\n this._data.permissions = permissions;\n }\n /**\n * Get the file owner\n * There is no setter as the owner is not meant to be changed\n */\n get owner() {\n if (!this.isDavRessource) {\n return null;\n }\n return this._data.owner;\n }\n /**\n * Is this a dav-related ressource ?\n */\n get isDavRessource() {\n return isDavRessource(this.source, this._knownDavService);\n }\n /**\n * Get the dav root of this object\n * There is no setter as the root is not meant to be changed\n */\n get root() {\n if (this._data.root) {\n return this._data.root.replace(/^(.+)\\/$/, \"$1\");\n }\n if (this.isDavRessource) {\n const root = dirname(this.source);\n return root.split(this._knownDavService).pop() || null;\n }\n return null;\n }\n /**\n * Get the absolute path of this object relative to the root\n */\n get path() {\n if (this.root) {\n let source = this.source;\n if (this.isDavRessource) {\n source = source.split(this._knownDavService).pop();\n }\n const firstMatch = source.indexOf(this.root);\n const root = this.root.replace(/\\/$/, \"\");\n return source.slice(firstMatch + root.length) || \"/\";\n }\n return (this.dirname + \"/\" + this.basename).replace(/\\/\\//g, \"/\");\n }\n /**\n * Get the node id if defined.\n * There is no setter as the fileid is not meant to be changed\n */\n get fileid() {\n return this._data?.id;\n }\n /**\n * Get the node status.\n */\n get status() {\n return this._data?.status;\n }\n /**\n * Set the node status.\n */\n set status(status) {\n this._data.status = status;\n }\n /**\n * Move the node to a new destination\n *\n * @param {string} destination the new source.\n * e.g. https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg\n */\n move(destination) {\n validateData({ ...this._data, source: destination }, this._knownDavService);\n const oldBasename = this.basename;\n this._data.source = destination;\n if (this.displayname === oldBasename && this.basename !== oldBasename) {\n this.displayname = this.basename;\n }\n this.updateMtime();\n }\n /**\n * Rename the node\n * This aliases the move method for easier usage\n *\n * @param basename The new name of the node\n */\n rename(basename2) {\n if (basename2.includes(\"/\")) {\n throw new Error(\"Invalid basename\");\n }\n this.move(dirname(this.source) + \"/\" + basename2);\n }\n /**\n * Update the mtime if exists\n */\n updateMtime() {\n if (this._data.mtime) {\n this._data.mtime = /* @__PURE__ */ new Date();\n }\n }\n /**\n * Update the attributes of the node\n * Warning, updating attributes will NOT automatically update the mtime.\n *\n * @param attributes The new attributes to update on the Node attributes\n */\n update(attributes) {\n for (const [name, value] of Object.entries(attributes)) {\n try {\n if (value === void 0) {\n delete this.attributes[name];\n } else {\n this.attributes[name] = value;\n }\n } catch (e) {\n if (e instanceof TypeError) {\n continue;\n }\n throw e;\n }\n }\n }\n}\nclass File extends Node {\n get type() {\n return FileType.File;\n }\n}\nclass Folder extends Node {\n constructor(data) {\n super({\n ...data,\n mime: \"httpd/unix-directory\"\n });\n }\n get type() {\n return FileType.Folder;\n }\n get extension() {\n return null;\n }\n get mime() {\n return \"httpd/unix-directory\";\n }\n}\nfunction davGetRootPath() {\n if (isPublicShare()) {\n return `/files/${getSharingToken()}`;\n }\n return `/files/${getCurrentUser()?.uid}`;\n}\nconst davRootPath = davGetRootPath();\nfunction davGetRemoteURL() {\n const url = generateRemoteUrl(\"dav\");\n if (isPublicShare()) {\n return url.replace(\"remote.php\", \"public.php\");\n }\n return url;\n}\nconst davRemoteURL = davGetRemoteURL();\nconst davGetClient = function(remoteURL = davRemoteURL, headers = {}) {\n const client = createClient(remoteURL, { headers });\n function setHeaders(token) {\n client.setHeaders({\n ...headers,\n // Add this so the server knows it is an request from the browser\n \"X-Requested-With\": \"XMLHttpRequest\",\n // Inject user auth\n requesttoken: token ?? \"\"\n });\n }\n onRequestTokenUpdate(setHeaders);\n setHeaders(getRequestToken());\n const patcher = getPatcher();\n patcher.patch(\"fetch\", (url, options) => {\n const headers2 = options.headers;\n if (headers2?.method) {\n options.method = headers2.method;\n delete headers2.method;\n }\n return fetch(url, options);\n });\n return client;\n};\nconst getFavoriteNodes = (davClient, path = \"/\", davRoot = davRootPath) => {\n const controller = new AbortController();\n return new CancelablePromise(async (resolve, reject, onCancel) => {\n onCancel(() => controller.abort());\n try {\n const contentsResponse = await davClient.getDirectoryContents(`${davRoot}${path}`, {\n signal: controller.signal,\n details: true,\n data: davGetFavoritesReport(),\n headers: {\n // see davGetClient for patched webdav client\n method: \"REPORT\"\n },\n includeSelf: true\n });\n const nodes = contentsResponse.data.filter((node) => node.filename !== path).map((result) => davResultToNode(result, davRoot));\n resolve(nodes);\n } catch (error) {\n reject(error);\n }\n });\n};\nconst davResultToNode = function(node, filesRoot = davRootPath, remoteURL = davRemoteURL) {\n let userId = getCurrentUser()?.uid;\n if (isPublicShare()) {\n userId = userId ?? \"anonymous\";\n } else if (!userId) {\n throw new Error(\"No user id found\");\n }\n const props = node.props;\n const permissions = davParsePermissions(props?.permissions);\n const owner = String(props?.[\"owner-id\"] || userId);\n const id = props.fileid || 0;\n const nodeData = {\n id,\n source: `${remoteURL}${node.filename}`,\n mtime: new Date(Date.parse(node.lastmod)),\n mime: node.mime || \"application/octet-stream\",\n // Manually cast to work around for https://github.com/perry-mitchell/webdav-client/pull/380\n displayname: props.displayname !== void 0 ? String(props.displayname) : void 0,\n size: props?.size || Number.parseInt(props.getcontentlength || \"0\"),\n // The fileid is set to -1 for failed requests\n status: id < 0 ? NodeStatus.FAILED : void 0,\n permissions,\n owner,\n root: filesRoot,\n attributes: {\n ...node,\n ...props,\n hasPreview: props?.[\"has-preview\"]\n }\n };\n delete nodeData.attributes?.props;\n return node.type === \"file\" ? new File(nodeData) : new Folder(nodeData);\n};\nvar InvalidFilenameErrorReason = /* @__PURE__ */ ((InvalidFilenameErrorReason2) => {\n InvalidFilenameErrorReason2[\"ReservedName\"] = \"reserved name\";\n InvalidFilenameErrorReason2[\"Character\"] = \"character\";\n InvalidFilenameErrorReason2[\"Extension\"] = \"extension\";\n return InvalidFilenameErrorReason2;\n})(InvalidFilenameErrorReason || {});\nclass InvalidFilenameError extends Error {\n constructor(options) {\n super(`Invalid ${options.reason} '${options.segment}' in filename '${options.filename}'`, { cause: options });\n }\n /**\n * The filename that was validated\n */\n get filename() {\n return this.cause.filename;\n }\n /**\n * Reason why the validation failed\n */\n get reason() {\n return this.cause.reason;\n }\n /**\n * Part of the filename that caused this error\n */\n get segment() {\n return this.cause.segment;\n }\n}\nfunction validateFilename(filename) {\n const capabilities = getCapabilities().files;\n const forbiddenCharacters = capabilities.forbidden_filename_characters ?? window._oc_config?.forbidden_filenames_characters ?? [\"/\", \"\\\\\"];\n for (const character of forbiddenCharacters) {\n if (filename.includes(character)) {\n throw new InvalidFilenameError({ segment: character, reason: \"character\", filename });\n }\n }\n filename = filename.toLocaleLowerCase();\n const forbiddenFilenames = capabilities.forbidden_filenames ?? [\".htaccess\"];\n if (forbiddenFilenames.includes(filename)) {\n throw new InvalidFilenameError({\n filename,\n segment: filename,\n reason: \"reserved name\"\n /* ReservedName */\n });\n }\n const endOfBasename = filename.indexOf(\".\", 1);\n const basename2 = filename.substring(0, endOfBasename === -1 ? void 0 : endOfBasename);\n const forbiddenFilenameBasenames = capabilities.forbidden_filename_basenames ?? [];\n if (forbiddenFilenameBasenames.includes(basename2)) {\n throw new InvalidFilenameError({\n filename,\n segment: basename2,\n reason: \"reserved name\"\n /* ReservedName */\n });\n }\n const forbiddenFilenameExtensions = capabilities.forbidden_filename_extensions ?? [\".part\", \".filepart\"];\n for (const extension of forbiddenFilenameExtensions) {\n if (filename.length > extension.length && filename.endsWith(extension)) {\n throw new InvalidFilenameError({ segment: extension, reason: \"extension\", filename });\n }\n }\n}\nfunction isFilenameValid(filename) {\n try {\n validateFilename(filename);\n return true;\n } catch (error) {\n if (error instanceof InvalidFilenameError) {\n return false;\n }\n throw error;\n }\n}\nfunction getUniqueName(name, otherNames, options) {\n const opts = {\n suffix: (n) => `(${n})`,\n ignoreFileExtension: false,\n ...options\n };\n let newName = name;\n let i = 1;\n while (otherNames.includes(newName)) {\n const ext = opts.ignoreFileExtension ? \"\" : extname(name);\n const base = basename(name, ext);\n newName = `${base} ${opts.suffix(i++)}${ext}`;\n }\n return newName;\n}\nconst humanList = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"];\nconst humanListBinary = [\"B\", \"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\"];\nfunction formatFileSize(size, skipSmallSizes = false, binaryPrefixes = false, base1000 = false) {\n binaryPrefixes = binaryPrefixes && !base1000;\n if (typeof size === \"string\") {\n size = Number(size);\n }\n let order = size > 0 ? Math.floor(Math.log(size) / Math.log(base1000 ? 1e3 : 1024)) : 0;\n order = Math.min((binaryPrefixes ? humanListBinary.length : humanList.length) - 1, order);\n const readableFormat = binaryPrefixes ? humanListBinary[order] : humanList[order];\n let relativeSize = (size / Math.pow(base1000 ? 1e3 : 1024, order)).toFixed(1);\n if (skipSmallSizes === true && order === 0) {\n return (relativeSize !== \"0.0\" ? \"< 1 \" : \"0 \") + (binaryPrefixes ? humanListBinary[1] : humanList[1]);\n }\n if (order < 2) {\n relativeSize = parseFloat(relativeSize).toFixed(0);\n } else {\n relativeSize = parseFloat(relativeSize).toLocaleString(getCanonicalLocale());\n }\n return relativeSize + \" \" + readableFormat;\n}\nfunction parseFileSize(value, forceBinary = false) {\n try {\n value = `${value}`.toLocaleLowerCase().replaceAll(/\\s+/g, \"\").replaceAll(\",\", \".\");\n } catch (e) {\n return null;\n }\n const match = value.match(/^([0-9]*(\\.[0-9]*)?)([kmgtp]?)(i?)b?$/);\n if (match === null || match[1] === \".\" || match[1] === \"\") {\n return null;\n }\n const bytesArray = {\n \"\": 0,\n k: 1,\n m: 2,\n g: 3,\n t: 4,\n p: 5,\n e: 6\n };\n const decimalString = `${match[1]}`;\n const base = match[4] === \"i\" || forceBinary ? 1024 : 1e3;\n return Math.round(Number.parseFloat(decimalString) * base ** bytesArray[match[3]]);\n}\nfunction stringify(value) {\n if (value instanceof Date) {\n return value.toISOString();\n }\n return String(value);\n}\nfunction orderBy(collection, identifiers2, orders) {\n identifiers2 = identifiers2 ?? [(value) => value];\n orders = orders ?? [];\n const sorting = identifiers2.map((_, index) => (orders[index] ?? \"asc\") === \"asc\" ? 1 : -1);\n const collator = Intl.Collator(\n [getLanguage(), getCanonicalLocale()],\n {\n // handle 10 as ten and not as one-zero\n numeric: true,\n usage: \"sort\"\n }\n );\n return [...collection].sort((a, b) => {\n for (const [index, identifier] of identifiers2.entries()) {\n const value = collator.compare(stringify(identifier(a)), stringify(identifier(b)));\n if (value !== 0) {\n return value * sorting[index];\n }\n }\n return 0;\n });\n}\nvar FilesSortingMode = /* @__PURE__ */ ((FilesSortingMode2) => {\n FilesSortingMode2[\"Name\"] = \"basename\";\n FilesSortingMode2[\"Modified\"] = \"mtime\";\n FilesSortingMode2[\"Size\"] = \"size\";\n return FilesSortingMode2;\n})(FilesSortingMode || {});\nfunction sortNodes(nodes, options = {}) {\n const sortingOptions = {\n // Default to sort by name\n sortingMode: \"basename\",\n // Default to sort ascending\n sortingOrder: \"asc\",\n ...options\n };\n const basename2 = (name) => name.lastIndexOf(\".\") > 0 ? name.slice(0, name.lastIndexOf(\".\")) : name;\n const identifiers2 = [\n // 1: Sort favorites first if enabled\n ...sortingOptions.sortFavoritesFirst ? [(v) => v.attributes?.favorite !== 1] : [],\n // 2: Sort folders first if sorting by name\n ...sortingOptions.sortFoldersFirst ? [(v) => v.type !== \"folder\"] : [],\n // 3: Use sorting mode if NOT basename (to be able to use display name too)\n ...sortingOptions.sortingMode !== \"basename\" ? [(v) => v[sortingOptions.sortingMode]] : [],\n // 4: Use display name if available, fallback to name\n (v) => basename2(v.attributes?.displayname || v.basename),\n // 5: Finally, use basename if all previous sorting methods failed\n (v) => v.basename\n ];\n const orders = [\n // (for 1): always sort favorites before normal files\n ...sortingOptions.sortFavoritesFirst ? [\"asc\"] : [],\n // (for 2): always sort folders before files\n ...sortingOptions.sortFoldersFirst ? [\"asc\"] : [],\n // (for 3): Reverse if sorting by mtime as mtime higher means edited more recent -> lower\n ...sortingOptions.sortingMode === \"mtime\" ? [sortingOptions.sortingOrder === \"asc\" ? \"desc\" : \"asc\"] : [],\n // (also for 3 so make sure not to conflict with 2 and 3)\n ...sortingOptions.sortingMode !== \"mtime\" && sortingOptions.sortingMode !== \"basename\" ? [sortingOptions.sortingOrder] : [],\n // for 4: use configured sorting direction\n sortingOptions.sortingOrder,\n // for 5: use configured sorting direction\n sortingOptions.sortingOrder\n ];\n return orderBy(nodes, identifiers2, orders);\n}\nclass Navigation extends TypedEventTarget {\n _views = [];\n _currentView = null;\n /**\n * Register a new view on the navigation\n * @param view The view to register\n * @throws `Error` is thrown if a view with the same id is already registered\n */\n register(view) {\n if (this._views.find((search) => search.id === view.id)) {\n throw new Error(`View id ${view.id} is already registered`);\n }\n this._views.push(view);\n this.dispatchTypedEvent(\"update\", new CustomEvent(\"update\"));\n }\n /**\n * Remove a registered view\n * @param id The id of the view to remove\n */\n remove(id) {\n const index = this._views.findIndex((view) => view.id === id);\n if (index !== -1) {\n this._views.splice(index, 1);\n this.dispatchTypedEvent(\"update\", new CustomEvent(\"update\"));\n }\n }\n /**\n * Set the currently active view\n * @fires UpdateActiveViewEvent\n * @param view New active view\n */\n setActive(view) {\n this._currentView = view;\n const event = new CustomEvent(\"updateActive\", { detail: view });\n this.dispatchTypedEvent(\"updateActive\", event);\n }\n /**\n * The currently active files view\n */\n get active() {\n return this._currentView;\n }\n /**\n * All registered views\n */\n get views() {\n return this._views;\n }\n}\nconst getNavigation = function() {\n if (typeof window._nc_navigation === \"undefined\") {\n window._nc_navigation = new Navigation();\n logger.debug(\"Navigation service initialized\");\n }\n return window._nc_navigation;\n};\nclass Column {\n _column;\n constructor(column) {\n isValidColumn(column);\n this._column = column;\n }\n get id() {\n return this._column.id;\n }\n get title() {\n return this._column.title;\n }\n get render() {\n return this._column.render;\n }\n get sort() {\n return this._column.sort;\n }\n get summary() {\n return this._column.summary;\n }\n}\nconst isValidColumn = function(column) {\n if (!column.id || typeof column.id !== \"string\") {\n throw new Error(\"A column id is required\");\n }\n if (!column.title || typeof column.title !== \"string\") {\n throw new Error(\"A column title is required\");\n }\n if (!column.render || typeof column.render !== \"function\") {\n throw new Error(\"A render function is required\");\n }\n if (column.sort && typeof column.sort !== \"function\") {\n throw new Error(\"Column sortFunction must be a function\");\n }\n if (column.summary && typeof column.summary !== \"function\") {\n throw new Error(\"Column summary must be a function\");\n }\n return true;\n};\nfunction getDefaultExportFromCjs(x) {\n return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, \"default\") ? x[\"default\"] : x;\n}\nvar validator$2 = {};\nvar util$3 = {};\n(function(exports) {\n const nameStartChar = \":A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n const nameChar = nameStartChar + \"\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\n const nameRegexp = \"[\" + nameStartChar + \"][\" + nameChar + \"]*\";\n const regexName = new RegExp(\"^\" + nameRegexp + \"$\");\n const getAllMatches = function(string, regex) {\n const matches = [];\n let match = regex.exec(string);\n while (match) {\n const allmatches = [];\n allmatches.startIndex = regex.lastIndex - match[0].length;\n const len = match.length;\n for (let index = 0; index < len; index++) {\n allmatches.push(match[index]);\n }\n matches.push(allmatches);\n match = regex.exec(string);\n }\n return matches;\n };\n const isName = function(string) {\n const match = regexName.exec(string);\n return !(match === null || typeof match === \"undefined\");\n };\n exports.isExist = function(v) {\n return typeof v !== \"undefined\";\n };\n exports.isEmptyObject = function(obj) {\n return Object.keys(obj).length === 0;\n };\n exports.merge = function(target, a, arrayMode) {\n if (a) {\n const keys = Object.keys(a);\n const len = keys.length;\n for (let i = 0; i < len; i++) {\n if (arrayMode === \"strict\") {\n target[keys[i]] = [a[keys[i]]];\n } else {\n target[keys[i]] = a[keys[i]];\n }\n }\n }\n };\n exports.getValue = function(v) {\n if (exports.isExist(v)) {\n return v;\n } else {\n return \"\";\n }\n };\n exports.isName = isName;\n exports.getAllMatches = getAllMatches;\n exports.nameRegexp = nameRegexp;\n})(util$3);\nconst util$2 = util$3;\nconst defaultOptions$2 = {\n allowBooleanAttributes: false,\n //A tag can have attributes without any value\n unpairedTags: []\n};\nvalidator$2.validate = function(xmlData, options) {\n options = Object.assign({}, defaultOptions$2, options);\n const tags = [];\n let tagFound = false;\n let reachedRoot = false;\n if (xmlData[0] === \"\\uFEFF\") {\n xmlData = xmlData.substr(1);\n }\n for (let i = 0; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\" && xmlData[i + 1] === \"?\") {\n i += 2;\n i = readPI(xmlData, i);\n if (i.err) return i;\n } else if (xmlData[i] === \"<\") {\n let tagStartPos = i;\n i++;\n if (xmlData[i] === \"!\") {\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n let closingTag = false;\n if (xmlData[i] === \"/\") {\n closingTag = true;\n i++;\n }\n let tagName = \"\";\n for (; i < xmlData.length && xmlData[i] !== \">\" && xmlData[i] !== \" \" && xmlData[i] !== \"\t\" && xmlData[i] !== \"\\n\" && xmlData[i] !== \"\\r\"; i++) {\n tagName += xmlData[i];\n }\n tagName = tagName.trim();\n if (tagName[tagName.length - 1] === \"/\") {\n tagName = tagName.substring(0, tagName.length - 1);\n i--;\n }\n if (!validateTagName(tagName)) {\n let msg;\n if (tagName.trim().length === 0) {\n msg = \"Invalid space after '<'.\";\n } else {\n msg = \"Tag '\" + tagName + \"' is an invalid name.\";\n }\n return getErrorObject(\"InvalidTag\", msg, getLineNumberForPosition(xmlData, i));\n }\n const result = readAttributeStr(xmlData, i);\n if (result === false) {\n return getErrorObject(\"InvalidAttr\", \"Attributes for '\" + tagName + \"' have open quote.\", getLineNumberForPosition(xmlData, i));\n }\n let attrStr = result.value;\n i = result.index;\n if (attrStr[attrStr.length - 1] === \"/\") {\n const attrStrStart = i - attrStr.length;\n attrStr = attrStr.substring(0, attrStr.length - 1);\n const isValid = validateAttributeString(attrStr, options);\n if (isValid === true) {\n tagFound = true;\n } else {\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, attrStrStart + isValid.err.line));\n }\n } else if (closingTag) {\n if (!result.tagClosed) {\n return getErrorObject(\"InvalidTag\", \"Closing tag '\" + tagName + \"' doesn't have proper closing.\", getLineNumberForPosition(xmlData, i));\n } else if (attrStr.trim().length > 0) {\n return getErrorObject(\"InvalidTag\", \"Closing tag '\" + tagName + \"' can't have attributes or invalid starting.\", getLineNumberForPosition(xmlData, tagStartPos));\n } else if (tags.length === 0) {\n return getErrorObject(\"InvalidTag\", \"Closing tag '\" + tagName + \"' has not been opened.\", getLineNumberForPosition(xmlData, tagStartPos));\n } else {\n const otg = tags.pop();\n if (tagName !== otg.tagName) {\n let openPos = getLineNumberForPosition(xmlData, otg.tagStartPos);\n return getErrorObject(\n \"InvalidTag\",\n \"Expected closing tag '\" + otg.tagName + \"' (opened in line \" + openPos.line + \", col \" + openPos.col + \") instead of closing tag '\" + tagName + \"'.\",\n getLineNumberForPosition(xmlData, tagStartPos)\n );\n }\n if (tags.length == 0) {\n reachedRoot = true;\n }\n }\n } else {\n const isValid = validateAttributeString(attrStr, options);\n if (isValid !== true) {\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n }\n if (reachedRoot === true) {\n return getErrorObject(\"InvalidXml\", \"Multiple possible root nodes found.\", getLineNumberForPosition(xmlData, i));\n } else if (options.unpairedTags.indexOf(tagName) !== -1) ;\n else {\n tags.push({ tagName, tagStartPos });\n }\n tagFound = true;\n }\n for (i++; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\") {\n if (xmlData[i + 1] === \"!\") {\n i++;\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else if (xmlData[i + 1] === \"?\") {\n i = readPI(xmlData, ++i);\n if (i.err) return i;\n } else {\n break;\n }\n } else if (xmlData[i] === \"&\") {\n const afterAmp = validateAmpersand(xmlData, i);\n if (afterAmp == -1)\n return getErrorObject(\"InvalidChar\", \"char '&' is not expected.\", getLineNumberForPosition(xmlData, i));\n i = afterAmp;\n } else {\n if (reachedRoot === true && !isWhiteSpace(xmlData[i])) {\n return getErrorObject(\"InvalidXml\", \"Extra text at the end\", getLineNumberForPosition(xmlData, i));\n }\n }\n }\n if (xmlData[i] === \"<\") {\n i--;\n }\n }\n } else {\n if (isWhiteSpace(xmlData[i])) {\n continue;\n }\n return getErrorObject(\"InvalidChar\", \"char '\" + xmlData[i] + \"' is not expected.\", getLineNumberForPosition(xmlData, i));\n }\n }\n if (!tagFound) {\n return getErrorObject(\"InvalidXml\", \"Start tag expected.\", 1);\n } else if (tags.length == 1) {\n return getErrorObject(\"InvalidTag\", \"Unclosed tag '\" + tags[0].tagName + \"'.\", getLineNumberForPosition(xmlData, tags[0].tagStartPos));\n } else if (tags.length > 0) {\n return getErrorObject(\"InvalidXml\", \"Invalid '\" + JSON.stringify(tags.map((t2) => t2.tagName), null, 4).replace(/\\r?\\n/g, \"\") + \"' found.\", { line: 1, col: 1 });\n }\n return true;\n};\nfunction isWhiteSpace(char) {\n return char === \" \" || char === \"\t\" || char === \"\\n\" || char === \"\\r\";\n}\nfunction readPI(xmlData, i) {\n const start = i;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] == \"?\" || xmlData[i] == \" \") {\n const tagname = xmlData.substr(start, i - start);\n if (i > 5 && tagname === \"xml\") {\n return getErrorObject(\"InvalidXml\", \"XML declaration allowed only at the start of the document.\", getLineNumberForPosition(xmlData, i));\n } else if (xmlData[i] == \"?\" && xmlData[i + 1] == \">\") {\n i++;\n break;\n } else {\n continue;\n }\n }\n }\n return i;\n}\nfunction readCommentAndCDATA(xmlData, i) {\n if (xmlData.length > i + 5 && xmlData[i + 1] === \"-\" && xmlData[i + 2] === \"-\") {\n for (i += 3; i < xmlData.length; i++) {\n if (xmlData[i] === \"-\" && xmlData[i + 1] === \"-\" && xmlData[i + 2] === \">\") {\n i += 2;\n break;\n }\n }\n } else if (xmlData.length > i + 8 && xmlData[i + 1] === \"D\" && xmlData[i + 2] === \"O\" && xmlData[i + 3] === \"C\" && xmlData[i + 4] === \"T\" && xmlData[i + 5] === \"Y\" && xmlData[i + 6] === \"P\" && xmlData[i + 7] === \"E\") {\n let angleBracketsCount = 1;\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\") {\n angleBracketsCount++;\n } else if (xmlData[i] === \">\") {\n angleBracketsCount--;\n if (angleBracketsCount === 0) {\n break;\n }\n }\n }\n } else if (xmlData.length > i + 9 && xmlData[i + 1] === \"[\" && xmlData[i + 2] === \"C\" && xmlData[i + 3] === \"D\" && xmlData[i + 4] === \"A\" && xmlData[i + 5] === \"T\" && xmlData[i + 6] === \"A\" && xmlData[i + 7] === \"[\") {\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === \"]\" && xmlData[i + 1] === \"]\" && xmlData[i + 2] === \">\") {\n i += 2;\n break;\n }\n }\n }\n return i;\n}\nconst doubleQuote = '\"';\nconst singleQuote = \"'\";\nfunction readAttributeStr(xmlData, i) {\n let attrStr = \"\";\n let startChar = \"\";\n let tagClosed = false;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n if (startChar === \"\") {\n startChar = xmlData[i];\n } else if (startChar !== xmlData[i]) ;\n else {\n startChar = \"\";\n }\n } else if (xmlData[i] === \">\") {\n if (startChar === \"\") {\n tagClosed = true;\n break;\n }\n }\n attrStr += xmlData[i];\n }\n if (startChar !== \"\") {\n return false;\n }\n return {\n value: attrStr,\n index: i,\n tagClosed\n };\n}\nconst validAttrStrRegxp = new RegExp(`(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*(['\"])(([\\\\s\\\\S])*?)\\\\5)?`, \"g\");\nfunction validateAttributeString(attrStr, options) {\n const matches = util$2.getAllMatches(attrStr, validAttrStrRegxp);\n const attrNames = {};\n for (let i = 0; i < matches.length; i++) {\n if (matches[i][1].length === 0) {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + matches[i][2] + \"' has no space in starting.\", getPositionFromMatch(matches[i]));\n } else if (matches[i][3] !== void 0 && matches[i][4] === void 0) {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + matches[i][2] + \"' is without value.\", getPositionFromMatch(matches[i]));\n } else if (matches[i][3] === void 0 && !options.allowBooleanAttributes) {\n return getErrorObject(\"InvalidAttr\", \"boolean attribute '\" + matches[i][2] + \"' is not allowed.\", getPositionFromMatch(matches[i]));\n }\n const attrName = matches[i][2];\n if (!validateAttrName(attrName)) {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + attrName + \"' is an invalid name.\", getPositionFromMatch(matches[i]));\n }\n if (!attrNames.hasOwnProperty(attrName)) {\n attrNames[attrName] = 1;\n } else {\n return getErrorObject(\"InvalidAttr\", \"Attribute '\" + attrName + \"' is repeated.\", getPositionFromMatch(matches[i]));\n }\n }\n return true;\n}\nfunction validateNumberAmpersand(xmlData, i) {\n let re2 = /\\d/;\n if (xmlData[i] === \"x\") {\n i++;\n re2 = /[\\da-fA-F]/;\n }\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === \";\")\n return i;\n if (!xmlData[i].match(re2))\n break;\n }\n return -1;\n}\nfunction validateAmpersand(xmlData, i) {\n i++;\n if (xmlData[i] === \";\")\n return -1;\n if (xmlData[i] === \"#\") {\n i++;\n return validateNumberAmpersand(xmlData, i);\n }\n let count = 0;\n for (; i < xmlData.length; i++, count++) {\n if (xmlData[i].match(/\\w/) && count < 20)\n continue;\n if (xmlData[i] === \";\")\n break;\n return -1;\n }\n return i;\n}\nfunction getErrorObject(code, message, lineNumber) {\n return {\n err: {\n code,\n msg: message,\n line: lineNumber.line || lineNumber,\n col: lineNumber.col\n }\n };\n}\nfunction validateAttrName(attrName) {\n return util$2.isName(attrName);\n}\nfunction validateTagName(tagname) {\n return util$2.isName(tagname);\n}\nfunction getLineNumberForPosition(xmlData, index) {\n const lines = xmlData.substring(0, index).split(/\\r?\\n/);\n return {\n line: lines.length,\n // column number is last line's length + 1, because column numbering starts at 1:\n col: lines[lines.length - 1].length + 1\n };\n}\nfunction getPositionFromMatch(match) {\n return match.startIndex + match[1].length;\n}\nvar OptionsBuilder = {};\nconst defaultOptions$1 = {\n preserveOrder: false,\n attributeNamePrefix: \"@_\",\n attributesGroupName: false,\n textNodeName: \"#text\",\n ignoreAttributes: true,\n removeNSPrefix: false,\n // remove NS from tag name or attribute name if true\n allowBooleanAttributes: false,\n //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseTagValue: true,\n parseAttributeValue: false,\n trimValues: true,\n //Trim string values of tag and attributes\n cdataPropName: false,\n numberParseOptions: {\n hex: true,\n leadingZeros: true,\n eNotation: true\n },\n tagValueProcessor: function(tagName, val2) {\n return val2;\n },\n attributeValueProcessor: function(attrName, val2) {\n return val2;\n },\n stopNodes: [],\n //nested tags will not be parsed even for errors\n alwaysCreateTextNode: false,\n isArray: () => false,\n commentPropName: false,\n unpairedTags: [],\n processEntities: true,\n htmlEntities: false,\n ignoreDeclaration: false,\n ignorePiTags: false,\n transformTagName: false,\n transformAttributeName: false,\n updateTag: function(tagName, jPath, attrs) {\n return tagName;\n }\n // skipEmptyListItem: false\n};\nconst buildOptions$1 = function(options) {\n return Object.assign({}, defaultOptions$1, options);\n};\nOptionsBuilder.buildOptions = buildOptions$1;\nOptionsBuilder.defaultOptions = defaultOptions$1;\nclass XmlNode {\n constructor(tagname) {\n this.tagname = tagname;\n this.child = [];\n this[\":@\"] = {};\n }\n add(key, val2) {\n if (key === \"__proto__\") key = \"#__proto__\";\n this.child.push({ [key]: val2 });\n }\n addChild(node) {\n if (node.tagname === \"__proto__\") node.tagname = \"#__proto__\";\n if (node[\":@\"] && Object.keys(node[\":@\"]).length > 0) {\n this.child.push({ [node.tagname]: node.child, [\":@\"]: node[\":@\"] });\n } else {\n this.child.push({ [node.tagname]: node.child });\n }\n }\n}\nvar xmlNode$1 = XmlNode;\nconst util$1 = util$3;\nfunction readDocType$1(xmlData, i) {\n const entities = {};\n if (xmlData[i + 3] === \"O\" && xmlData[i + 4] === \"C\" && xmlData[i + 5] === \"T\" && xmlData[i + 6] === \"Y\" && xmlData[i + 7] === \"P\" && xmlData[i + 8] === \"E\") {\n i = i + 9;\n let angleBracketsCount = 1;\n let hasBody = false, comment = false;\n let exp = \"\";\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\" && !comment) {\n if (hasBody && isEntity(xmlData, i)) {\n i += 7;\n [entityName, val, i] = readEntityExp(xmlData, i + 1);\n if (val.indexOf(\"&\") === -1)\n entities[validateEntityName(entityName)] = {\n regx: RegExp(`&${entityName};`, \"g\"),\n val\n };\n } else if (hasBody && isElement(xmlData, i)) i += 8;\n else if (hasBody && isAttlist(xmlData, i)) i += 8;\n else if (hasBody && isNotation(xmlData, i)) i += 9;\n else if (isComment) comment = true;\n else throw new Error(\"Invalid DOCTYPE\");\n angleBracketsCount++;\n exp = \"\";\n } else if (xmlData[i] === \">\") {\n if (comment) {\n if (xmlData[i - 1] === \"-\" && xmlData[i - 2] === \"-\") {\n comment = false;\n angleBracketsCount--;\n }\n } else {\n angleBracketsCount--;\n }\n if (angleBracketsCount === 0) {\n break;\n }\n } else if (xmlData[i] === \"[\") {\n hasBody = true;\n } else {\n exp += xmlData[i];\n }\n }\n if (angleBracketsCount !== 0) {\n throw new Error(`Unclosed DOCTYPE`);\n }\n } else {\n throw new Error(`Invalid Tag instead of DOCTYPE`);\n }\n return { entities, i };\n}\nfunction readEntityExp(xmlData, i) {\n let entityName2 = \"\";\n for (; i < xmlData.length && (xmlData[i] !== \"'\" && xmlData[i] !== '\"'); i++) {\n entityName2 += xmlData[i];\n }\n entityName2 = entityName2.trim();\n if (entityName2.indexOf(\" \") !== -1) throw new Error(\"External entites are not supported\");\n const startChar = xmlData[i++];\n let val2 = \"\";\n for (; i < xmlData.length && xmlData[i] !== startChar; i++) {\n val2 += xmlData[i];\n }\n return [entityName2, val2, i];\n}\nfunction isComment(xmlData, i) {\n if (xmlData[i + 1] === \"!\" && xmlData[i + 2] === \"-\" && xmlData[i + 3] === \"-\") return true;\n return false;\n}\nfunction isEntity(xmlData, i) {\n if (xmlData[i + 1] === \"!\" && xmlData[i + 2] === \"E\" && xmlData[i + 3] === \"N\" && xmlData[i + 4] === \"T\" && xmlData[i + 5] === \"I\" && xmlData[i + 6] === \"T\" && xmlData[i + 7] === \"Y\") return true;\n return false;\n}\nfunction isElement(xmlData, i) {\n if (xmlData[i + 1] === \"!\" && xmlData[i + 2] === \"E\" && xmlData[i + 3] === \"L\" && xmlData[i + 4] === \"E\" && xmlData[i + 5] === \"M\" && xmlData[i + 6] === \"E\" && xmlData[i + 7] === \"N\" && xmlData[i + 8] === \"T\") return true;\n return false;\n}\nfunction isAttlist(xmlData, i) {\n if (xmlData[i + 1] === \"!\" && xmlData[i + 2] === \"A\" && xmlData[i + 3] === \"T\" && xmlData[i + 4] === \"T\" && xmlData[i + 5] === \"L\" && xmlData[i + 6] === \"I\" && xmlData[i + 7] === \"S\" && xmlData[i + 8] === \"T\") return true;\n return false;\n}\nfunction isNotation(xmlData, i) {\n if (xmlData[i + 1] === \"!\" && xmlData[i + 2] === \"N\" && xmlData[i + 3] === \"O\" && xmlData[i + 4] === \"T\" && xmlData[i + 5] === \"A\" && xmlData[i + 6] === \"T\" && xmlData[i + 7] === \"I\" && xmlData[i + 8] === \"O\" && xmlData[i + 9] === \"N\") return true;\n return false;\n}\nfunction validateEntityName(name) {\n if (util$1.isName(name))\n return name;\n else\n throw new Error(`Invalid entity name ${name}`);\n}\nvar DocTypeReader = readDocType$1;\nconst hexRegex = /^[-+]?0x[a-fA-F0-9]+$/;\nconst numRegex = /^([\\-\\+])?(0*)(\\.[0-9]+([eE]\\-?[0-9]+)?|[0-9]+(\\.[0-9]+([eE]\\-?[0-9]+)?)?)$/;\nif (!Number.parseInt && window.parseInt) {\n Number.parseInt = window.parseInt;\n}\nif (!Number.parseFloat && window.parseFloat) {\n Number.parseFloat = window.parseFloat;\n}\nconst consider = {\n hex: true,\n leadingZeros: true,\n decimalPoint: \".\",\n eNotation: true\n //skipLike: /regex/\n};\nfunction toNumber$1(str, options = {}) {\n options = Object.assign({}, consider, options);\n if (!str || typeof str !== \"string\") return str;\n let trimmedStr = str.trim();\n if (options.skipLike !== void 0 && options.skipLike.test(trimmedStr)) return str;\n else if (options.hex && hexRegex.test(trimmedStr)) {\n return Number.parseInt(trimmedStr, 16);\n } else {\n const match = numRegex.exec(trimmedStr);\n if (match) {\n const sign = match[1];\n const leadingZeros = match[2];\n let numTrimmedByZeros = trimZeros(match[3]);\n const eNotation = match[4] || match[6];\n if (!options.leadingZeros && leadingZeros.length > 0 && sign && trimmedStr[2] !== \".\") return str;\n else if (!options.leadingZeros && leadingZeros.length > 0 && !sign && trimmedStr[1] !== \".\") return str;\n else {\n const num = Number(trimmedStr);\n const numStr = \"\" + num;\n if (numStr.search(/[eE]/) !== -1) {\n if (options.eNotation) return num;\n else return str;\n } else if (eNotation) {\n if (options.eNotation) return num;\n else return str;\n } else if (trimmedStr.indexOf(\".\") !== -1) {\n if (numStr === \"0\" && numTrimmedByZeros === \"\") return num;\n else if (numStr === numTrimmedByZeros) return num;\n else if (sign && numStr === \"-\" + numTrimmedByZeros) return num;\n else return str;\n }\n if (leadingZeros) {\n if (numTrimmedByZeros === numStr) return num;\n else if (sign + numTrimmedByZeros === numStr) return num;\n else return str;\n }\n if (trimmedStr === numStr) return num;\n else if (trimmedStr === sign + numStr) return num;\n return str;\n }\n } else {\n return str;\n }\n }\n}\nfunction trimZeros(numStr) {\n if (numStr && numStr.indexOf(\".\") !== -1) {\n numStr = numStr.replace(/0+$/, \"\");\n if (numStr === \".\") numStr = \"0\";\n else if (numStr[0] === \".\") numStr = \"0\" + numStr;\n else if (numStr[numStr.length - 1] === \".\") numStr = numStr.substr(0, numStr.length - 1);\n return numStr;\n }\n return numStr;\n}\nvar strnum = toNumber$1;\nconst util = util$3;\nconst xmlNode = xmlNode$1;\nconst readDocType = DocTypeReader;\nconst toNumber = strnum;\nlet OrderedObjParser$1 = class OrderedObjParser {\n constructor(options) {\n this.options = options;\n this.currentNode = null;\n this.tagsNodeStack = [];\n this.docTypeEntities = {};\n this.lastEntities = {\n \"apos\": { regex: /&(apos|#39|#x27);/g, val: \"'\" },\n \"gt\": { regex: /&(gt|#62|#x3E);/g, val: \">\" },\n \"lt\": { regex: /&(lt|#60|#x3C);/g, val: \"<\" },\n \"quot\": { regex: /&(quot|#34|#x22);/g, val: '\"' }\n };\n this.ampEntity = { regex: /&(amp|#38|#x26);/g, val: \"&\" };\n this.htmlEntities = {\n \"space\": { regex: /&(nbsp|#160);/g, val: \" \" },\n // \"lt\" : { regex: /&(lt|#60);/g, val: \"<\" },\n // \"gt\" : { regex: /&(gt|#62);/g, val: \">\" },\n // \"amp\" : { regex: /&(amp|#38);/g, val: \"&\" },\n // \"quot\" : { regex: /&(quot|#34);/g, val: \"\\\"\" },\n // \"apos\" : { regex: /&(apos|#39);/g, val: \"'\" },\n \"cent\": { regex: /&(cent|#162);/g, val: \"¢\" },\n \"pound\": { regex: /&(pound|#163);/g, val: \"£\" },\n \"yen\": { regex: /&(yen|#165);/g, val: \"¥\" },\n \"euro\": { regex: /&(euro|#8364);/g, val: \"€\" },\n \"copyright\": { regex: /&(copy|#169);/g, val: \"©\" },\n \"reg\": { regex: /&(reg|#174);/g, val: \"®\" },\n \"inr\": { regex: /&(inr|#8377);/g, val: \"₹\" },\n \"num_dec\": { regex: /&#([0-9]{1,7});/g, val: (_, str) => String.fromCharCode(Number.parseInt(str, 10)) },\n \"num_hex\": { regex: /&#x([0-9a-fA-F]{1,6});/g, val: (_, str) => String.fromCharCode(Number.parseInt(str, 16)) }\n };\n this.addExternalEntities = addExternalEntities;\n this.parseXml = parseXml;\n this.parseTextData = parseTextData;\n this.resolveNameSpace = resolveNameSpace;\n this.buildAttributesMap = buildAttributesMap;\n this.isItStopNode = isItStopNode;\n this.replaceEntitiesValue = replaceEntitiesValue$1;\n this.readStopNodeData = readStopNodeData;\n this.saveTextToParentTag = saveTextToParentTag;\n this.addChild = addChild;\n }\n};\nfunction addExternalEntities(externalEntities) {\n const entKeys = Object.keys(externalEntities);\n for (let i = 0; i < entKeys.length; i++) {\n const ent = entKeys[i];\n this.lastEntities[ent] = {\n regex: new RegExp(\"&\" + ent + \";\", \"g\"),\n val: externalEntities[ent]\n };\n }\n}\nfunction parseTextData(val2, tagName, jPath, dontTrim, hasAttributes, isLeafNode, escapeEntities) {\n if (val2 !== void 0) {\n if (this.options.trimValues && !dontTrim) {\n val2 = val2.trim();\n }\n if (val2.length > 0) {\n if (!escapeEntities) val2 = this.replaceEntitiesValue(val2);\n const newval = this.options.tagValueProcessor(tagName, val2, jPath, hasAttributes, isLeafNode);\n if (newval === null || newval === void 0) {\n return val2;\n } else if (typeof newval !== typeof val2 || newval !== val2) {\n return newval;\n } else if (this.options.trimValues) {\n return parseValue(val2, this.options.parseTagValue, this.options.numberParseOptions);\n } else {\n const trimmedVal = val2.trim();\n if (trimmedVal === val2) {\n return parseValue(val2, this.options.parseTagValue, this.options.numberParseOptions);\n } else {\n return val2;\n }\n }\n }\n }\n}\nfunction resolveNameSpace(tagname) {\n if (this.options.removeNSPrefix) {\n const tags = tagname.split(\":\");\n const prefix = tagname.charAt(0) === \"/\" ? \"/\" : \"\";\n if (tags[0] === \"xmlns\") {\n return \"\";\n }\n if (tags.length === 2) {\n tagname = prefix + tags[1];\n }\n }\n return tagname;\n}\nconst attrsRegx = new RegExp(`([^\\\\s=]+)\\\\s*(=\\\\s*(['\"])([\\\\s\\\\S]*?)\\\\3)?`, \"gm\");\nfunction buildAttributesMap(attrStr, jPath, tagName) {\n if (!this.options.ignoreAttributes && typeof attrStr === \"string\") {\n const matches = util.getAllMatches(attrStr, attrsRegx);\n const len = matches.length;\n const attrs = {};\n for (let i = 0; i < len; i++) {\n const attrName = this.resolveNameSpace(matches[i][1]);\n let oldVal = matches[i][4];\n let aName = this.options.attributeNamePrefix + attrName;\n if (attrName.length) {\n if (this.options.transformAttributeName) {\n aName = this.options.transformAttributeName(aName);\n }\n if (aName === \"__proto__\") aName = \"#__proto__\";\n if (oldVal !== void 0) {\n if (this.options.trimValues) {\n oldVal = oldVal.trim();\n }\n oldVal = this.replaceEntitiesValue(oldVal);\n const newVal = this.options.attributeValueProcessor(attrName, oldVal, jPath);\n if (newVal === null || newVal === void 0) {\n attrs[aName] = oldVal;\n } else if (typeof newVal !== typeof oldVal || newVal !== oldVal) {\n attrs[aName] = newVal;\n } else {\n attrs[aName] = parseValue(\n oldVal,\n this.options.parseAttributeValue,\n this.options.numberParseOptions\n );\n }\n } else if (this.options.allowBooleanAttributes) {\n attrs[aName] = true;\n }\n }\n }\n if (!Object.keys(attrs).length) {\n return;\n }\n if (this.options.attributesGroupName) {\n const attrCollection = {};\n attrCollection[this.options.attributesGroupName] = attrs;\n return attrCollection;\n }\n return attrs;\n }\n}\nconst parseXml = function(xmlData) {\n xmlData = xmlData.replace(/\\r\\n?/g, \"\\n\");\n const xmlObj = new xmlNode(\"!xml\");\n let currentNode = xmlObj;\n let textData = \"\";\n let jPath = \"\";\n for (let i = 0; i < xmlData.length; i++) {\n const ch = xmlData[i];\n if (ch === \"<\") {\n if (xmlData[i + 1] === \"/\") {\n const closeIndex = findClosingIndex(xmlData, \">\", i, \"Closing Tag is not closed.\");\n let tagName = xmlData.substring(i + 2, closeIndex).trim();\n if (this.options.removeNSPrefix) {\n const colonIndex = tagName.indexOf(\":\");\n if (colonIndex !== -1) {\n tagName = tagName.substr(colonIndex + 1);\n }\n }\n if (this.options.transformTagName) {\n tagName = this.options.transformTagName(tagName);\n }\n if (currentNode) {\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n }\n const lastTagName = jPath.substring(jPath.lastIndexOf(\".\") + 1);\n if (tagName && this.options.unpairedTags.indexOf(tagName) !== -1) {\n throw new Error(`Unpaired tag can not be used as closing tag: `);\n }\n let propIndex = 0;\n if (lastTagName && this.options.unpairedTags.indexOf(lastTagName) !== -1) {\n propIndex = jPath.lastIndexOf(\".\", jPath.lastIndexOf(\".\") - 1);\n this.tagsNodeStack.pop();\n } else {\n propIndex = jPath.lastIndexOf(\".\");\n }\n jPath = jPath.substring(0, propIndex);\n currentNode = this.tagsNodeStack.pop();\n textData = \"\";\n i = closeIndex;\n } else if (xmlData[i + 1] === \"?\") {\n let tagData = readTagExp(xmlData, i, false, \"?>\");\n if (!tagData) throw new Error(\"Pi Tag is not closed.\");\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n if (this.options.ignoreDeclaration && tagData.tagName === \"?xml\" || this.options.ignorePiTags) ;\n else {\n const childNode = new xmlNode(tagData.tagName);\n childNode.add(this.options.textNodeName, \"\");\n if (tagData.tagName !== tagData.tagExp && tagData.attrExpPresent) {\n childNode[\":@\"] = this.buildAttributesMap(tagData.tagExp, jPath, tagData.tagName);\n }\n this.addChild(currentNode, childNode, jPath);\n }\n i = tagData.closeIndex + 1;\n } else if (xmlData.substr(i + 1, 3) === \"!--\") {\n const endIndex = findClosingIndex(xmlData, \"-->\", i + 4, \"Comment is not closed.\");\n if (this.options.commentPropName) {\n const comment = xmlData.substring(i + 4, endIndex - 2);\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n currentNode.add(this.options.commentPropName, [{ [this.options.textNodeName]: comment }]);\n }\n i = endIndex;\n } else if (xmlData.substr(i + 1, 2) === \"!D\") {\n const result = readDocType(xmlData, i);\n this.docTypeEntities = result.entities;\n i = result.i;\n } else if (xmlData.substr(i + 1, 2) === \"![\") {\n const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"CDATA is not closed.\") - 2;\n const tagExp = xmlData.substring(i + 9, closeIndex);\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n let val2 = this.parseTextData(tagExp, currentNode.tagname, jPath, true, false, true, true);\n if (val2 == void 0) val2 = \"\";\n if (this.options.cdataPropName) {\n currentNode.add(this.options.cdataPropName, [{ [this.options.textNodeName]: tagExp }]);\n } else {\n currentNode.add(this.options.textNodeName, val2);\n }\n i = closeIndex + 2;\n } else {\n let result = readTagExp(xmlData, i, this.options.removeNSPrefix);\n let tagName = result.tagName;\n const rawTagName = result.rawTagName;\n let tagExp = result.tagExp;\n let attrExpPresent = result.attrExpPresent;\n let closeIndex = result.closeIndex;\n if (this.options.transformTagName) {\n tagName = this.options.transformTagName(tagName);\n }\n if (currentNode && textData) {\n if (currentNode.tagname !== \"!xml\") {\n textData = this.saveTextToParentTag(textData, currentNode, jPath, false);\n }\n }\n const lastTag = currentNode;\n if (lastTag && this.options.unpairedTags.indexOf(lastTag.tagname) !== -1) {\n currentNode = this.tagsNodeStack.pop();\n jPath = jPath.substring(0, jPath.lastIndexOf(\".\"));\n }\n if (tagName !== xmlObj.tagname) {\n jPath += jPath ? \".\" + tagName : tagName;\n }\n if (this.isItStopNode(this.options.stopNodes, jPath, tagName)) {\n let tagContent = \"\";\n if (tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1) {\n if (tagName[tagName.length - 1] === \"/\") {\n tagName = tagName.substr(0, tagName.length - 1);\n jPath = jPath.substr(0, jPath.length - 1);\n tagExp = tagName;\n } else {\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n i = result.closeIndex;\n } else if (this.options.unpairedTags.indexOf(tagName) !== -1) {\n i = result.closeIndex;\n } else {\n const result2 = this.readStopNodeData(xmlData, rawTagName, closeIndex + 1);\n if (!result2) throw new Error(`Unexpected end of ${rawTagName}`);\n i = result2.i;\n tagContent = result2.tagContent;\n }\n const childNode = new xmlNode(tagName);\n if (tagName !== tagExp && attrExpPresent) {\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n if (tagContent) {\n tagContent = this.parseTextData(tagContent, tagName, jPath, true, attrExpPresent, true, true);\n }\n jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n childNode.add(this.options.textNodeName, tagContent);\n this.addChild(currentNode, childNode, jPath);\n } else {\n if (tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1) {\n if (tagName[tagName.length - 1] === \"/\") {\n tagName = tagName.substr(0, tagName.length - 1);\n jPath = jPath.substr(0, jPath.length - 1);\n tagExp = tagName;\n } else {\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n if (this.options.transformTagName) {\n tagName = this.options.transformTagName(tagName);\n }\n const childNode = new xmlNode(tagName);\n if (tagName !== tagExp && attrExpPresent) {\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n this.addChild(currentNode, childNode, jPath);\n jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n } else {\n const childNode = new xmlNode(tagName);\n this.tagsNodeStack.push(currentNode);\n if (tagName !== tagExp && attrExpPresent) {\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n this.addChild(currentNode, childNode, jPath);\n currentNode = childNode;\n }\n textData = \"\";\n i = closeIndex;\n }\n }\n } else {\n textData += xmlData[i];\n }\n }\n return xmlObj.child;\n};\nfunction addChild(currentNode, childNode, jPath) {\n const result = this.options.updateTag(childNode.tagname, jPath, childNode[\":@\"]);\n if (result === false) ;\n else if (typeof result === \"string\") {\n childNode.tagname = result;\n currentNode.addChild(childNode);\n } else {\n currentNode.addChild(childNode);\n }\n}\nconst replaceEntitiesValue$1 = function(val2) {\n if (this.options.processEntities) {\n for (let entityName2 in this.docTypeEntities) {\n const entity = this.docTypeEntities[entityName2];\n val2 = val2.replace(entity.regx, entity.val);\n }\n for (let entityName2 in this.lastEntities) {\n const entity = this.lastEntities[entityName2];\n val2 = val2.replace(entity.regex, entity.val);\n }\n if (this.options.htmlEntities) {\n for (let entityName2 in this.htmlEntities) {\n const entity = this.htmlEntities[entityName2];\n val2 = val2.replace(entity.regex, entity.val);\n }\n }\n val2 = val2.replace(this.ampEntity.regex, this.ampEntity.val);\n }\n return val2;\n};\nfunction saveTextToParentTag(textData, currentNode, jPath, isLeafNode) {\n if (textData) {\n if (isLeafNode === void 0) isLeafNode = Object.keys(currentNode.child).length === 0;\n textData = this.parseTextData(\n textData,\n currentNode.tagname,\n jPath,\n false,\n currentNode[\":@\"] ? Object.keys(currentNode[\":@\"]).length !== 0 : false,\n isLeafNode\n );\n if (textData !== void 0 && textData !== \"\")\n currentNode.add(this.options.textNodeName, textData);\n textData = \"\";\n }\n return textData;\n}\nfunction isItStopNode(stopNodes, jPath, currentTagName) {\n const allNodesExp = \"*.\" + currentTagName;\n for (const stopNodePath in stopNodes) {\n const stopNodeExp = stopNodes[stopNodePath];\n if (allNodesExp === stopNodeExp || jPath === stopNodeExp) return true;\n }\n return false;\n}\nfunction tagExpWithClosingIndex(xmlData, i, closingChar = \">\") {\n let attrBoundary;\n let tagExp = \"\";\n for (let index = i; index < xmlData.length; index++) {\n let ch = xmlData[index];\n if (attrBoundary) {\n if (ch === attrBoundary) attrBoundary = \"\";\n } else if (ch === '\"' || ch === \"'\") {\n attrBoundary = ch;\n } else if (ch === closingChar[0]) {\n if (closingChar[1]) {\n if (xmlData[index + 1] === closingChar[1]) {\n return {\n data: tagExp,\n index\n };\n }\n } else {\n return {\n data: tagExp,\n index\n };\n }\n } else if (ch === \"\t\") {\n ch = \" \";\n }\n tagExp += ch;\n }\n}\nfunction findClosingIndex(xmlData, str, i, errMsg) {\n const closingIndex = xmlData.indexOf(str, i);\n if (closingIndex === -1) {\n throw new Error(errMsg);\n } else {\n return closingIndex + str.length - 1;\n }\n}\nfunction readTagExp(xmlData, i, removeNSPrefix, closingChar = \">\") {\n const result = tagExpWithClosingIndex(xmlData, i + 1, closingChar);\n if (!result) return;\n let tagExp = result.data;\n const closeIndex = result.index;\n const separatorIndex = tagExp.search(/\\s/);\n let tagName = tagExp;\n let attrExpPresent = true;\n if (separatorIndex !== -1) {\n tagName = tagExp.substring(0, separatorIndex);\n tagExp = tagExp.substring(separatorIndex + 1).trimStart();\n }\n const rawTagName = tagName;\n if (removeNSPrefix) {\n const colonIndex = tagName.indexOf(\":\");\n if (colonIndex !== -1) {\n tagName = tagName.substr(colonIndex + 1);\n attrExpPresent = tagName !== result.data.substr(colonIndex + 1);\n }\n }\n return {\n tagName,\n tagExp,\n closeIndex,\n attrExpPresent,\n rawTagName\n };\n}\nfunction readStopNodeData(xmlData, tagName, i) {\n const startIndex = i;\n let openTagCount = 1;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\") {\n if (xmlData[i + 1] === \"/\") {\n const closeIndex = findClosingIndex(xmlData, \">\", i, `${tagName} is not closed`);\n let closeTagName = xmlData.substring(i + 2, closeIndex).trim();\n if (closeTagName === tagName) {\n openTagCount--;\n if (openTagCount === 0) {\n return {\n tagContent: xmlData.substring(startIndex, i),\n i: closeIndex\n };\n }\n }\n i = closeIndex;\n } else if (xmlData[i + 1] === \"?\") {\n const closeIndex = findClosingIndex(xmlData, \"?>\", i + 1, \"StopNode is not closed.\");\n i = closeIndex;\n } else if (xmlData.substr(i + 1, 3) === \"!--\") {\n const closeIndex = findClosingIndex(xmlData, \"-->\", i + 3, \"StopNode is not closed.\");\n i = closeIndex;\n } else if (xmlData.substr(i + 1, 2) === \"![\") {\n const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"StopNode is not closed.\") - 2;\n i = closeIndex;\n } else {\n const tagData = readTagExp(xmlData, i, \">\");\n if (tagData) {\n const openTagName = tagData && tagData.tagName;\n if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length - 1] !== \"/\") {\n openTagCount++;\n }\n i = tagData.closeIndex;\n }\n }\n }\n }\n}\nfunction parseValue(val2, shouldParse, options) {\n if (shouldParse && typeof val2 === \"string\") {\n const newval = val2.trim();\n if (newval === \"true\") return true;\n else if (newval === \"false\") return false;\n else return toNumber(val2, options);\n } else {\n if (util.isExist(val2)) {\n return val2;\n } else {\n return \"\";\n }\n }\n}\nvar OrderedObjParser_1 = OrderedObjParser$1;\nvar node2json = {};\nfunction prettify$1(node, options) {\n return compress(node, options);\n}\nfunction compress(arr, options, jPath) {\n let text;\n const compressedObj = {};\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const property = propName$1(tagObj);\n let newJpath = \"\";\n if (jPath === void 0) newJpath = property;\n else newJpath = jPath + \".\" + property;\n if (property === options.textNodeName) {\n if (text === void 0) text = tagObj[property];\n else text += \"\" + tagObj[property];\n } else if (property === void 0) {\n continue;\n } else if (tagObj[property]) {\n let val2 = compress(tagObj[property], options, newJpath);\n const isLeaf = isLeafTag(val2, options);\n if (tagObj[\":@\"]) {\n assignAttributes(val2, tagObj[\":@\"], newJpath, options);\n } else if (Object.keys(val2).length === 1 && val2[options.textNodeName] !== void 0 && !options.alwaysCreateTextNode) {\n val2 = val2[options.textNodeName];\n } else if (Object.keys(val2).length === 0) {\n if (options.alwaysCreateTextNode) val2[options.textNodeName] = \"\";\n else val2 = \"\";\n }\n if (compressedObj[property] !== void 0 && compressedObj.hasOwnProperty(property)) {\n if (!Array.isArray(compressedObj[property])) {\n compressedObj[property] = [compressedObj[property]];\n }\n compressedObj[property].push(val2);\n } else {\n if (options.isArray(property, newJpath, isLeaf)) {\n compressedObj[property] = [val2];\n } else {\n compressedObj[property] = val2;\n }\n }\n }\n }\n if (typeof text === \"string\") {\n if (text.length > 0) compressedObj[options.textNodeName] = text;\n } else if (text !== void 0) compressedObj[options.textNodeName] = text;\n return compressedObj;\n}\nfunction propName$1(obj) {\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (key !== \":@\") return key;\n }\n}\nfunction assignAttributes(obj, attrMap, jpath, options) {\n if (attrMap) {\n const keys = Object.keys(attrMap);\n const len = keys.length;\n for (let i = 0; i < len; i++) {\n const atrrName = keys[i];\n if (options.isArray(atrrName, jpath + \".\" + atrrName, true, true)) {\n obj[atrrName] = [attrMap[atrrName]];\n } else {\n obj[atrrName] = attrMap[atrrName];\n }\n }\n }\n}\nfunction isLeafTag(obj, options) {\n const { textNodeName } = options;\n const propCount = Object.keys(obj).length;\n if (propCount === 0) {\n return true;\n }\n if (propCount === 1 && (obj[textNodeName] || typeof obj[textNodeName] === \"boolean\" || obj[textNodeName] === 0)) {\n return true;\n }\n return false;\n}\nnode2json.prettify = prettify$1;\nconst { buildOptions } = OptionsBuilder;\nconst OrderedObjParser2 = OrderedObjParser_1;\nconst { prettify } = node2json;\nconst validator$1 = validator$2;\nlet XMLParser$1 = class XMLParser {\n constructor(options) {\n this.externalEntities = {};\n this.options = buildOptions(options);\n }\n /**\n * Parse XML dats to JS object \n * @param {string|Buffer} xmlData \n * @param {boolean|Object} validationOption \n */\n parse(xmlData, validationOption) {\n if (typeof xmlData === \"string\") ;\n else if (xmlData.toString) {\n xmlData = xmlData.toString();\n } else {\n throw new Error(\"XML data is accepted in String or Bytes[] form.\");\n }\n if (validationOption) {\n if (validationOption === true) validationOption = {};\n const result = validator$1.validate(xmlData, validationOption);\n if (result !== true) {\n throw Error(`${result.err.msg}:${result.err.line}:${result.err.col}`);\n }\n }\n const orderedObjParser = new OrderedObjParser2(this.options);\n orderedObjParser.addExternalEntities(this.externalEntities);\n const orderedResult = orderedObjParser.parseXml(xmlData);\n if (this.options.preserveOrder || orderedResult === void 0) return orderedResult;\n else return prettify(orderedResult, this.options);\n }\n /**\n * Add Entity which is not by default supported by this library\n * @param {string} key \n * @param {string} value \n */\n addEntity(key, value) {\n if (value.indexOf(\"&\") !== -1) {\n throw new Error(\"Entity value can't have '&'\");\n } else if (key.indexOf(\"&\") !== -1 || key.indexOf(\";\") !== -1) {\n throw new Error(\"An entity must be set without '&' and ';'. Eg. use '#xD' for ' '\");\n } else if (value === \"&\") {\n throw new Error(\"An entity with value '&' is not permitted\");\n } else {\n this.externalEntities[key] = value;\n }\n }\n};\nvar XMLParser_1 = XMLParser$1;\nconst EOL = \"\\n\";\nfunction toXml(jArray, options) {\n let indentation = \"\";\n if (options.format && options.indentBy.length > 0) {\n indentation = EOL;\n }\n return arrToStr(jArray, options, \"\", indentation);\n}\nfunction arrToStr(arr, options, jPath, indentation) {\n let xmlStr = \"\";\n let isPreviousElementTag = false;\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const tagName = propName(tagObj);\n if (tagName === void 0) continue;\n let newJPath = \"\";\n if (jPath.length === 0) newJPath = tagName;\n else newJPath = `${jPath}.${tagName}`;\n if (tagName === options.textNodeName) {\n let tagText = tagObj[tagName];\n if (!isStopNode(newJPath, options)) {\n tagText = options.tagValueProcessor(tagName, tagText);\n tagText = replaceEntitiesValue(tagText, options);\n }\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += tagText;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.cdataPropName) {\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += ``;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.commentPropName) {\n xmlStr += indentation + ``;\n isPreviousElementTag = true;\n continue;\n } else if (tagName[0] === \"?\") {\n const attStr2 = attr_to_str(tagObj[\":@\"], options);\n const tempInd = tagName === \"?xml\" ? \"\" : indentation;\n let piTextNodeName = tagObj[tagName][0][options.textNodeName];\n piTextNodeName = piTextNodeName.length !== 0 ? \" \" + piTextNodeName : \"\";\n xmlStr += tempInd + `<${tagName}${piTextNodeName}${attStr2}?>`;\n isPreviousElementTag = true;\n continue;\n }\n let newIdentation = indentation;\n if (newIdentation !== \"\") {\n newIdentation += options.indentBy;\n }\n const attStr = attr_to_str(tagObj[\":@\"], options);\n const tagStart = indentation + `<${tagName}${attStr}`;\n const tagValue = arrToStr(tagObj[tagName], options, newJPath, newIdentation);\n if (options.unpairedTags.indexOf(tagName) !== -1) {\n if (options.suppressUnpairedNode) xmlStr += tagStart + \">\";\n else xmlStr += tagStart + \"/>\";\n } else if ((!tagValue || tagValue.length === 0) && options.suppressEmptyNode) {\n xmlStr += tagStart + \"/>\";\n } else if (tagValue && tagValue.endsWith(\">\")) {\n xmlStr += tagStart + `>${tagValue}${indentation}`;\n } else {\n xmlStr += tagStart + \">\";\n if (tagValue && indentation !== \"\" && (tagValue.includes(\"/>\") || tagValue.includes(\"`;\n }\n isPreviousElementTag = true;\n }\n return xmlStr;\n}\nfunction propName(obj) {\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (!obj.hasOwnProperty(key)) continue;\n if (key !== \":@\") return key;\n }\n}\nfunction attr_to_str(attrMap, options) {\n let attrStr = \"\";\n if (attrMap && !options.ignoreAttributes) {\n for (let attr in attrMap) {\n if (!attrMap.hasOwnProperty(attr)) continue;\n let attrVal = options.attributeValueProcessor(attr, attrMap[attr]);\n attrVal = replaceEntitiesValue(attrVal, options);\n if (attrVal === true && options.suppressBooleanAttributes) {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}`;\n } else {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}=\"${attrVal}\"`;\n }\n }\n }\n return attrStr;\n}\nfunction isStopNode(jPath, options) {\n jPath = jPath.substr(0, jPath.length - options.textNodeName.length - 1);\n let tagName = jPath.substr(jPath.lastIndexOf(\".\") + 1);\n for (let index in options.stopNodes) {\n if (options.stopNodes[index] === jPath || options.stopNodes[index] === \"*.\" + tagName) return true;\n }\n return false;\n}\nfunction replaceEntitiesValue(textValue, options) {\n if (textValue && textValue.length > 0 && options.processEntities) {\n for (let i = 0; i < options.entities.length; i++) {\n const entity = options.entities[i];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n}\nvar orderedJs2Xml = toXml;\nconst buildFromOrderedJs = orderedJs2Xml;\nconst defaultOptions = {\n attributeNamePrefix: \"@_\",\n attributesGroupName: false,\n textNodeName: \"#text\",\n ignoreAttributes: true,\n cdataPropName: false,\n format: false,\n indentBy: \" \",\n suppressEmptyNode: false,\n suppressUnpairedNode: true,\n suppressBooleanAttributes: true,\n tagValueProcessor: function(key, a) {\n return a;\n },\n attributeValueProcessor: function(attrName, a) {\n return a;\n },\n preserveOrder: false,\n commentPropName: false,\n unpairedTags: [],\n entities: [\n { regex: new RegExp(\"&\", \"g\"), val: \"&\" },\n //it must be on top\n { regex: new RegExp(\">\", \"g\"), val: \">\" },\n { regex: new RegExp(\"<\", \"g\"), val: \"<\" },\n { regex: new RegExp(\"'\", \"g\"), val: \"'\" },\n { regex: new RegExp('\"', \"g\"), val: \""\" }\n ],\n processEntities: true,\n stopNodes: [],\n // transformTagName: false,\n // transformAttributeName: false,\n oneListGroup: false\n};\nfunction Builder(options) {\n this.options = Object.assign({}, defaultOptions, options);\n if (this.options.ignoreAttributes || this.options.attributesGroupName) {\n this.isAttribute = function() {\n return false;\n };\n } else {\n this.attrPrefixLen = this.options.attributeNamePrefix.length;\n this.isAttribute = isAttribute;\n }\n this.processTextOrObjNode = processTextOrObjNode;\n if (this.options.format) {\n this.indentate = indentate;\n this.tagEndChar = \">\\n\";\n this.newLine = \"\\n\";\n } else {\n this.indentate = function() {\n return \"\";\n };\n this.tagEndChar = \">\";\n this.newLine = \"\";\n }\n}\nBuilder.prototype.build = function(jObj) {\n if (this.options.preserveOrder) {\n return buildFromOrderedJs(jObj, this.options);\n } else {\n if (Array.isArray(jObj) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1) {\n jObj = {\n [this.options.arrayNodeName]: jObj\n };\n }\n return this.j2x(jObj, 0).val;\n }\n};\nBuilder.prototype.j2x = function(jObj, level) {\n let attrStr = \"\";\n let val2 = \"\";\n for (let key in jObj) {\n if (!Object.prototype.hasOwnProperty.call(jObj, key)) continue;\n if (typeof jObj[key] === \"undefined\") {\n if (this.isAttribute(key)) {\n val2 += \"\";\n }\n } else if (jObj[key] === null) {\n if (this.isAttribute(key)) {\n val2 += \"\";\n } else if (key[0] === \"?\") {\n val2 += this.indentate(level) + \"<\" + key + \"?\" + this.tagEndChar;\n } else {\n val2 += this.indentate(level) + \"<\" + key + \"/\" + this.tagEndChar;\n }\n } else if (jObj[key] instanceof Date) {\n val2 += this.buildTextValNode(jObj[key], key, \"\", level);\n } else if (typeof jObj[key] !== \"object\") {\n const attr = this.isAttribute(key);\n if (attr) {\n attrStr += this.buildAttrPairStr(attr, \"\" + jObj[key]);\n } else {\n if (key === this.options.textNodeName) {\n let newval = this.options.tagValueProcessor(key, \"\" + jObj[key]);\n val2 += this.replaceEntitiesValue(newval);\n } else {\n val2 += this.buildTextValNode(jObj[key], key, \"\", level);\n }\n }\n } else if (Array.isArray(jObj[key])) {\n const arrLen = jObj[key].length;\n let listTagVal = \"\";\n let listTagAttr = \"\";\n for (let j = 0; j < arrLen; j++) {\n const item = jObj[key][j];\n if (typeof item === \"undefined\") ;\n else if (item === null) {\n if (key[0] === \"?\") val2 += this.indentate(level) + \"<\" + key + \"?\" + this.tagEndChar;\n else val2 += this.indentate(level) + \"<\" + key + \"/\" + this.tagEndChar;\n } else if (typeof item === \"object\") {\n if (this.options.oneListGroup) {\n const result = this.j2x(item, level + 1);\n listTagVal += result.val;\n if (this.options.attributesGroupName && item.hasOwnProperty(this.options.attributesGroupName)) {\n listTagAttr += result.attrStr;\n }\n } else {\n listTagVal += this.processTextOrObjNode(item, key, level);\n }\n } else {\n if (this.options.oneListGroup) {\n let textValue = this.options.tagValueProcessor(key, item);\n textValue = this.replaceEntitiesValue(textValue);\n listTagVal += textValue;\n } else {\n listTagVal += this.buildTextValNode(item, key, \"\", level);\n }\n }\n }\n if (this.options.oneListGroup) {\n listTagVal = this.buildObjectNode(listTagVal, key, listTagAttr, level);\n }\n val2 += listTagVal;\n } else {\n if (this.options.attributesGroupName && key === this.options.attributesGroupName) {\n const Ks = Object.keys(jObj[key]);\n const L = Ks.length;\n for (let j = 0; j < L; j++) {\n attrStr += this.buildAttrPairStr(Ks[j], \"\" + jObj[key][Ks[j]]);\n }\n } else {\n val2 += this.processTextOrObjNode(jObj[key], key, level);\n }\n }\n }\n return { attrStr, val: val2 };\n};\nBuilder.prototype.buildAttrPairStr = function(attrName, val2) {\n val2 = this.options.attributeValueProcessor(attrName, \"\" + val2);\n val2 = this.replaceEntitiesValue(val2);\n if (this.options.suppressBooleanAttributes && val2 === \"true\") {\n return \" \" + attrName;\n } else return \" \" + attrName + '=\"' + val2 + '\"';\n};\nfunction processTextOrObjNode(object, key, level) {\n const result = this.j2x(object, level + 1);\n if (object[this.options.textNodeName] !== void 0 && Object.keys(object).length === 1) {\n return this.buildTextValNode(object[this.options.textNodeName], key, result.attrStr, level);\n } else {\n return this.buildObjectNode(result.val, key, result.attrStr, level);\n }\n}\nBuilder.prototype.buildObjectNode = function(val2, key, attrStr, level) {\n if (val2 === \"\") {\n if (key[0] === \"?\") return this.indentate(level) + \"<\" + key + attrStr + \"?\" + this.tagEndChar;\n else {\n return this.indentate(level) + \"<\" + key + attrStr + this.closeTag(key) + this.tagEndChar;\n }\n } else {\n let tagEndExp = \"\" + val2 + tagEndExp;\n } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {\n return this.indentate(level) + `` + this.newLine;\n } else {\n return this.indentate(level) + \"<\" + key + attrStr + piClosingChar + this.tagEndChar + val2 + this.indentate(level) + tagEndExp;\n }\n }\n};\nBuilder.prototype.closeTag = function(key) {\n let closeTag = \"\";\n if (this.options.unpairedTags.indexOf(key) !== -1) {\n if (!this.options.suppressUnpairedNode) closeTag = \"/\";\n } else if (this.options.suppressEmptyNode) {\n closeTag = \"/\";\n } else {\n closeTag = `>` + this.newLine;\n } else if (this.options.commentPropName !== false && key === this.options.commentPropName) {\n return this.indentate(level) + `` + this.newLine;\n } else if (key[0] === \"?\") {\n return this.indentate(level) + \"<\" + key + attrStr + \"?\" + this.tagEndChar;\n } else {\n let textValue = this.options.tagValueProcessor(key, val2);\n textValue = this.replaceEntitiesValue(textValue);\n if (textValue === \"\") {\n return this.indentate(level) + \"<\" + key + attrStr + this.closeTag(key) + this.tagEndChar;\n } else {\n return this.indentate(level) + \"<\" + key + attrStr + \">\" + textValue + \" 0 && this.options.processEntities) {\n for (let i = 0; i < this.options.entities.length; i++) {\n const entity = this.options.entities[i];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n};\nfunction indentate(level) {\n return this.options.indentBy.repeat(level);\n}\nfunction isAttribute(name) {\n if (name.startsWith(this.options.attributeNamePrefix) && name !== this.options.textNodeName) {\n return name.substr(this.attrPrefixLen);\n } else {\n return false;\n }\n}\nvar json2xml = Builder;\nconst validator = validator$2;\nconst XMLParser2 = XMLParser_1;\nconst XMLBuilder = json2xml;\nvar fxp = {\n XMLParser: XMLParser2,\n XMLValidator: validator,\n XMLBuilder\n};\nfunction isSvg(string) {\n if (typeof string !== \"string\") {\n throw new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n }\n string = string.trim();\n if (string.length === 0) {\n return false;\n }\n if (fxp.XMLValidator.validate(string) !== true) {\n return false;\n }\n let jsonObject;\n const parser = new fxp.XMLParser();\n try {\n jsonObject = parser.parse(string);\n } catch {\n return false;\n }\n if (!jsonObject) {\n return false;\n }\n if (!Object.keys(jsonObject).some((x) => x.toLowerCase() === \"svg\")) {\n return false;\n }\n return true;\n}\nclass View {\n _view;\n constructor(view) {\n isValidView(view);\n this._view = view;\n }\n get id() {\n return this._view.id;\n }\n get name() {\n return this._view.name;\n }\n get caption() {\n return this._view.caption;\n }\n get emptyTitle() {\n return this._view.emptyTitle;\n }\n get emptyCaption() {\n return this._view.emptyCaption;\n }\n get getContents() {\n return this._view.getContents;\n }\n get icon() {\n return this._view.icon;\n }\n set icon(icon) {\n this._view.icon = icon;\n }\n get order() {\n return this._view.order;\n }\n set order(order) {\n this._view.order = order;\n }\n get params() {\n return this._view.params;\n }\n set params(params) {\n this._view.params = params;\n }\n get columns() {\n return this._view.columns;\n }\n get emptyView() {\n return this._view.emptyView;\n }\n get parent() {\n return this._view.parent;\n }\n get sticky() {\n return this._view.sticky;\n }\n get expanded() {\n return this._view.expanded;\n }\n set expanded(expanded) {\n this._view.expanded = expanded;\n }\n get defaultSortKey() {\n return this._view.defaultSortKey;\n }\n get loadChildViews() {\n return this._view.loadChildViews;\n }\n}\nconst isValidView = function(view) {\n if (!view.id || typeof view.id !== \"string\") {\n throw new Error(\"View id is required and must be a string\");\n }\n if (!view.name || typeof view.name !== \"string\") {\n throw new Error(\"View name is required and must be a string\");\n }\n if (view.columns && view.columns.length > 0 && (!view.caption || typeof view.caption !== \"string\")) {\n throw new Error(\"View caption is required for top-level views and must be a string\");\n }\n if (!view.getContents || typeof view.getContents !== \"function\") {\n throw new Error(\"View getContents is required and must be a function\");\n }\n if (!view.icon || typeof view.icon !== \"string\" || !isSvg(view.icon)) {\n throw new Error(\"View icon is required and must be a valid svg string\");\n }\n if (\"order\" in view && typeof view.order !== \"number\") {\n throw new Error(\"View order must be a number\");\n }\n if (view.columns) {\n view.columns.forEach((column) => {\n if (!(column instanceof Column)) {\n throw new Error(\"View columns must be an array of Column. Invalid column found\");\n }\n });\n }\n if (view.emptyView && typeof view.emptyView !== \"function\") {\n throw new Error(\"View emptyView must be a function\");\n }\n if (view.parent && typeof view.parent !== \"string\") {\n throw new Error(\"View parent must be a string\");\n }\n if (\"sticky\" in view && typeof view.sticky !== \"boolean\") {\n throw new Error(\"View sticky must be a boolean\");\n }\n if (\"expanded\" in view && typeof view.expanded !== \"boolean\") {\n throw new Error(\"View expanded must be a boolean\");\n }\n if (view.defaultSortKey && typeof view.defaultSortKey !== \"string\") {\n throw new Error(\"View defaultSortKey must be a string\");\n }\n if (view.loadChildViews && typeof view.loadChildViews !== \"function\") {\n throw new Error(\"View loadChildViews must be a function\");\n }\n return true;\n};\nconst debug$1 = typeof process === \"object\" && process.env && process.env.NODE_DEBUG && /\\bsemver\\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error(\"SEMVER\", ...args) : () => {\n};\nvar debug_1 = debug$1;\nconst SEMVER_SPEC_VERSION = \"2.0.0\";\nconst MAX_LENGTH$1 = 256;\nconst MAX_SAFE_INTEGER$1 = Number.MAX_SAFE_INTEGER || /* istanbul ignore next */\n9007199254740991;\nconst MAX_SAFE_COMPONENT_LENGTH = 16;\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH$1 - 6;\nconst RELEASE_TYPES = [\n \"major\",\n \"premajor\",\n \"minor\",\n \"preminor\",\n \"patch\",\n \"prepatch\",\n \"prerelease\"\n];\nvar constants = {\n MAX_LENGTH: MAX_LENGTH$1,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER: MAX_SAFE_INTEGER$1,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 1,\n FLAG_LOOSE: 2\n};\nvar re$1 = { exports: {} };\n(function(module, exports) {\n const {\n MAX_SAFE_COMPONENT_LENGTH: MAX_SAFE_COMPONENT_LENGTH2,\n MAX_SAFE_BUILD_LENGTH: MAX_SAFE_BUILD_LENGTH2,\n MAX_LENGTH: MAX_LENGTH2\n } = constants;\n const debug2 = debug_1;\n exports = module.exports = {};\n const re2 = exports.re = [];\n const safeRe = exports.safeRe = [];\n const src = exports.src = [];\n const t2 = exports.t = {};\n let R = 0;\n const LETTERDASHNUMBER = \"[a-zA-Z0-9-]\";\n const safeRegexReplacements = [\n [\"\\\\s\", 1],\n [\"\\\\d\", MAX_LENGTH2],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH2]\n ];\n const makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`);\n }\n return value;\n };\n const createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value);\n const index = R++;\n debug2(name, index, value);\n t2[name] = index;\n src[index] = value;\n re2[index] = new RegExp(value, isGlobal ? \"g\" : void 0);\n safeRe[index] = new RegExp(safe, isGlobal ? \"g\" : void 0);\n };\n createToken(\"NUMERICIDENTIFIER\", \"0|[1-9]\\\\d*\");\n createToken(\"NUMERICIDENTIFIERLOOSE\", \"\\\\d+\");\n createToken(\"NONNUMERICIDENTIFIER\", `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`);\n createToken(\"MAINVERSION\", `(${src[t2.NUMERICIDENTIFIER]})\\\\.(${src[t2.NUMERICIDENTIFIER]})\\\\.(${src[t2.NUMERICIDENTIFIER]})`);\n createToken(\"MAINVERSIONLOOSE\", `(${src[t2.NUMERICIDENTIFIERLOOSE]})\\\\.(${src[t2.NUMERICIDENTIFIERLOOSE]})\\\\.(${src[t2.NUMERICIDENTIFIERLOOSE]})`);\n createToken(\"PRERELEASEIDENTIFIER\", `(?:${src[t2.NUMERICIDENTIFIER]}|${src[t2.NONNUMERICIDENTIFIER]})`);\n createToken(\"PRERELEASEIDENTIFIERLOOSE\", `(?:${src[t2.NUMERICIDENTIFIERLOOSE]}|${src[t2.NONNUMERICIDENTIFIER]})`);\n createToken(\"PRERELEASE\", `(?:-(${src[t2.PRERELEASEIDENTIFIER]}(?:\\\\.${src[t2.PRERELEASEIDENTIFIER]})*))`);\n createToken(\"PRERELEASELOOSE\", `(?:-?(${src[t2.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${src[t2.PRERELEASEIDENTIFIERLOOSE]})*))`);\n createToken(\"BUILDIDENTIFIER\", `${LETTERDASHNUMBER}+`);\n createToken(\"BUILD\", `(?:\\\\+(${src[t2.BUILDIDENTIFIER]}(?:\\\\.${src[t2.BUILDIDENTIFIER]})*))`);\n createToken(\"FULLPLAIN\", `v?${src[t2.MAINVERSION]}${src[t2.PRERELEASE]}?${src[t2.BUILD]}?`);\n createToken(\"FULL\", `^${src[t2.FULLPLAIN]}$`);\n createToken(\"LOOSEPLAIN\", `[v=\\\\s]*${src[t2.MAINVERSIONLOOSE]}${src[t2.PRERELEASELOOSE]}?${src[t2.BUILD]}?`);\n createToken(\"LOOSE\", `^${src[t2.LOOSEPLAIN]}$`);\n createToken(\"GTLT\", \"((?:<|>)?=?)\");\n createToken(\"XRANGEIDENTIFIERLOOSE\", `${src[t2.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`);\n createToken(\"XRANGEIDENTIFIER\", `${src[t2.NUMERICIDENTIFIER]}|x|X|\\\\*`);\n createToken(\"XRANGEPLAIN\", `[v=\\\\s]*(${src[t2.XRANGEIDENTIFIER]})(?:\\\\.(${src[t2.XRANGEIDENTIFIER]})(?:\\\\.(${src[t2.XRANGEIDENTIFIER]})(?:${src[t2.PRERELEASE]})?${src[t2.BUILD]}?)?)?`);\n createToken(\"XRANGEPLAINLOOSE\", `[v=\\\\s]*(${src[t2.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${src[t2.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${src[t2.XRANGEIDENTIFIERLOOSE]})(?:${src[t2.PRERELEASELOOSE]})?${src[t2.BUILD]}?)?)?`);\n createToken(\"XRANGE\", `^${src[t2.GTLT]}\\\\s*${src[t2.XRANGEPLAIN]}$`);\n createToken(\"XRANGELOOSE\", `^${src[t2.GTLT]}\\\\s*${src[t2.XRANGEPLAINLOOSE]}$`);\n createToken(\"COERCEPLAIN\", `${\"(^|[^\\\\d])(\\\\d{1,\"}${MAX_SAFE_COMPONENT_LENGTH2}})(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH2}}))?(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH2}}))?`);\n createToken(\"COERCE\", `${src[t2.COERCEPLAIN]}(?:$|[^\\\\d])`);\n createToken(\"COERCEFULL\", src[t2.COERCEPLAIN] + `(?:${src[t2.PRERELEASE]})?(?:${src[t2.BUILD]})?(?:$|[^\\\\d])`);\n createToken(\"COERCERTL\", src[t2.COERCE], true);\n createToken(\"COERCERTLFULL\", src[t2.COERCEFULL], true);\n createToken(\"LONETILDE\", \"(?:~>?)\");\n createToken(\"TILDETRIM\", `(\\\\s*)${src[t2.LONETILDE]}\\\\s+`, true);\n exports.tildeTrimReplace = \"$1~\";\n createToken(\"TILDE\", `^${src[t2.LONETILDE]}${src[t2.XRANGEPLAIN]}$`);\n createToken(\"TILDELOOSE\", `^${src[t2.LONETILDE]}${src[t2.XRANGEPLAINLOOSE]}$`);\n createToken(\"LONECARET\", \"(?:\\\\^)\");\n createToken(\"CARETTRIM\", `(\\\\s*)${src[t2.LONECARET]}\\\\s+`, true);\n exports.caretTrimReplace = \"$1^\";\n createToken(\"CARET\", `^${src[t2.LONECARET]}${src[t2.XRANGEPLAIN]}$`);\n createToken(\"CARETLOOSE\", `^${src[t2.LONECARET]}${src[t2.XRANGEPLAINLOOSE]}$`);\n createToken(\"COMPARATORLOOSE\", `^${src[t2.GTLT]}\\\\s*(${src[t2.LOOSEPLAIN]})$|^$`);\n createToken(\"COMPARATOR\", `^${src[t2.GTLT]}\\\\s*(${src[t2.FULLPLAIN]})$|^$`);\n createToken(\"COMPARATORTRIM\", `(\\\\s*)${src[t2.GTLT]}\\\\s*(${src[t2.LOOSEPLAIN]}|${src[t2.XRANGEPLAIN]})`, true);\n exports.comparatorTrimReplace = \"$1$2$3\";\n createToken(\"HYPHENRANGE\", `^\\\\s*(${src[t2.XRANGEPLAIN]})\\\\s+-\\\\s+(${src[t2.XRANGEPLAIN]})\\\\s*$`);\n createToken(\"HYPHENRANGELOOSE\", `^\\\\s*(${src[t2.XRANGEPLAINLOOSE]})\\\\s+-\\\\s+(${src[t2.XRANGEPLAINLOOSE]})\\\\s*$`);\n createToken(\"STAR\", \"(<|>)?=?\\\\s*\\\\*\");\n createToken(\"GTE0\", \"^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$\");\n createToken(\"GTE0PRE\", \"^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$\");\n})(re$1, re$1.exports);\nvar reExports = re$1.exports;\nconst looseOption = Object.freeze({ loose: true });\nconst emptyOpts = Object.freeze({});\nconst parseOptions$1 = (options) => {\n if (!options) {\n return emptyOpts;\n }\n if (typeof options !== \"object\") {\n return looseOption;\n }\n return options;\n};\nvar parseOptions_1 = parseOptions$1;\nconst numeric = /^[0-9]+$/;\nconst compareIdentifiers$1 = (a, b) => {\n const anum = numeric.test(a);\n const bnum = numeric.test(b);\n if (anum && bnum) {\n a = +a;\n b = +b;\n }\n return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1;\n};\nconst rcompareIdentifiers = (a, b) => compareIdentifiers$1(b, a);\nvar identifiers = {\n compareIdentifiers: compareIdentifiers$1,\n rcompareIdentifiers\n};\nconst debug = debug_1;\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = constants;\nconst { safeRe: re, t } = reExports;\nconst parseOptions = parseOptions_1;\nconst { compareIdentifiers } = identifiers;\nlet SemVer$2 = class SemVer {\n constructor(version, options) {\n options = parseOptions(options);\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) {\n return version;\n } else {\n version = version.version;\n }\n } else if (typeof version !== \"string\") {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`);\n }\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n );\n }\n debug(\"SemVer\", version, options);\n this.options = options;\n this.loose = !!options.loose;\n this.includePrerelease = !!options.includePrerelease;\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]);\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`);\n }\n this.raw = version;\n this.major = +m[1];\n this.minor = +m[2];\n this.patch = +m[3];\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError(\"Invalid major version\");\n }\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError(\"Invalid minor version\");\n }\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError(\"Invalid patch version\");\n }\n if (!m[4]) {\n this.prerelease = [];\n } else {\n this.prerelease = m[4].split(\".\").map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id;\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num;\n }\n }\n return id;\n });\n }\n this.build = m[5] ? m[5].split(\".\") : [];\n this.format();\n }\n format() {\n this.version = `${this.major}.${this.minor}.${this.patch}`;\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join(\".\")}`;\n }\n return this.version;\n }\n toString() {\n return this.version;\n }\n compare(other) {\n debug(\"SemVer.compare\", this.version, this.options, other);\n if (!(other instanceof SemVer)) {\n if (typeof other === \"string\" && other === this.version) {\n return 0;\n }\n other = new SemVer(other, this.options);\n }\n if (other.version === this.version) {\n return 0;\n }\n return this.compareMain(other) || this.comparePre(other);\n }\n compareMain(other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options);\n }\n return compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch);\n }\n comparePre(other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options);\n }\n if (this.prerelease.length && !other.prerelease.length) {\n return -1;\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1;\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0;\n }\n let i = 0;\n do {\n const a = this.prerelease[i];\n const b = other.prerelease[i];\n debug(\"prerelease compare\", i, a, b);\n if (a === void 0 && b === void 0) {\n return 0;\n } else if (b === void 0) {\n return 1;\n } else if (a === void 0) {\n return -1;\n } else if (a === b) {\n continue;\n } else {\n return compareIdentifiers(a, b);\n }\n } while (++i);\n }\n compareBuild(other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options);\n }\n let i = 0;\n do {\n const a = this.build[i];\n const b = other.build[i];\n debug(\"build compare\", i, a, b);\n if (a === void 0 && b === void 0) {\n return 0;\n } else if (b === void 0) {\n return 1;\n } else if (a === void 0) {\n return -1;\n } else if (a === b) {\n continue;\n } else {\n return compareIdentifiers(a, b);\n }\n } while (++i);\n }\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc(release, identifier, identifierBase) {\n switch (release) {\n case \"premajor\":\n this.prerelease.length = 0;\n this.patch = 0;\n this.minor = 0;\n this.major++;\n this.inc(\"pre\", identifier, identifierBase);\n break;\n case \"preminor\":\n this.prerelease.length = 0;\n this.patch = 0;\n this.minor++;\n this.inc(\"pre\", identifier, identifierBase);\n break;\n case \"prepatch\":\n this.prerelease.length = 0;\n this.inc(\"patch\", identifier, identifierBase);\n this.inc(\"pre\", identifier, identifierBase);\n break;\n case \"prerelease\":\n if (this.prerelease.length === 0) {\n this.inc(\"patch\", identifier, identifierBase);\n }\n this.inc(\"pre\", identifier, identifierBase);\n break;\n case \"major\":\n if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) {\n this.major++;\n }\n this.minor = 0;\n this.patch = 0;\n this.prerelease = [];\n break;\n case \"minor\":\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++;\n }\n this.patch = 0;\n this.prerelease = [];\n break;\n case \"patch\":\n if (this.prerelease.length === 0) {\n this.patch++;\n }\n this.prerelease = [];\n break;\n case \"pre\": {\n const base = Number(identifierBase) ? 1 : 0;\n if (!identifier && identifierBase === false) {\n throw new Error(\"invalid increment argument: identifier is empty\");\n }\n if (this.prerelease.length === 0) {\n this.prerelease = [base];\n } else {\n let i = this.prerelease.length;\n while (--i >= 0) {\n if (typeof this.prerelease[i] === \"number\") {\n this.prerelease[i]++;\n i = -2;\n }\n }\n if (i === -1) {\n if (identifier === this.prerelease.join(\".\") && identifierBase === false) {\n throw new Error(\"invalid increment argument: identifier already exists\");\n }\n this.prerelease.push(base);\n }\n }\n if (identifier) {\n let prerelease = [identifier, base];\n if (identifierBase === false) {\n prerelease = [identifier];\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease;\n }\n } else {\n this.prerelease = prerelease;\n }\n }\n break;\n }\n default:\n throw new Error(`invalid increment argument: ${release}`);\n }\n this.raw = this.format();\n if (this.build.length) {\n this.raw += `+${this.build.join(\".\")}`;\n }\n return this;\n }\n};\nvar semver = SemVer$2;\nconst SemVer$1 = semver;\nconst parse$1 = (version, options, throwErrors = false) => {\n if (version instanceof SemVer$1) {\n return version;\n }\n try {\n return new SemVer$1(version, options);\n } catch (er) {\n if (!throwErrors) {\n return null;\n }\n throw er;\n }\n};\nvar parse_1 = parse$1;\nconst parse = parse_1;\nconst valid = (version, options) => {\n const v = parse(version, options);\n return v ? v.version : null;\n};\nvar valid_1 = valid;\nconst valid$1 = /* @__PURE__ */ getDefaultExportFromCjs(valid_1);\nconst SemVer2 = semver;\nconst major = (a, loose) => new SemVer2(a, loose).major;\nvar major_1 = major;\nconst major$1 = /* @__PURE__ */ getDefaultExportFromCjs(major_1);\nclass ProxyBus {\n bus;\n constructor(bus2) {\n if (typeof bus2.getVersion !== \"function\" || !valid$1(bus2.getVersion())) {\n console.warn(\"Proxying an event bus with an unknown or invalid version\");\n } else if (major$1(bus2.getVersion()) !== major$1(this.getVersion())) {\n console.warn(\n \"Proxying an event bus of version \" + bus2.getVersion() + \" with \" + this.getVersion()\n );\n }\n this.bus = bus2;\n }\n getVersion() {\n return \"3.3.1\";\n }\n subscribe(name, handler) {\n this.bus.subscribe(name, handler);\n }\n unsubscribe(name, handler) {\n this.bus.unsubscribe(name, handler);\n }\n emit(name, event) {\n this.bus.emit(name, event);\n }\n}\nclass SimpleBus {\n handlers = /* @__PURE__ */ new Map();\n getVersion() {\n return \"3.3.1\";\n }\n subscribe(name, handler) {\n this.handlers.set(\n name,\n (this.handlers.get(name) || []).concat(\n handler\n )\n );\n }\n unsubscribe(name, handler) {\n this.handlers.set(\n name,\n (this.handlers.get(name) || []).filter((h) => h !== handler)\n );\n }\n emit(name, event) {\n (this.handlers.get(name) || []).forEach((h) => {\n try {\n h(event);\n } catch (e) {\n console.error(\"could not invoke event listener\", e);\n }\n });\n }\n}\nlet bus = null;\nfunction getBus() {\n if (bus !== null) {\n return bus;\n }\n if (typeof window === \"undefined\") {\n return new Proxy({}, {\n get: () => {\n return () => console.error(\n \"Window not available, EventBus can not be established!\"\n );\n }\n });\n }\n if (window.OC?._eventBus && typeof window._nc_event_bus === \"undefined\") {\n console.warn(\n \"found old event bus instance at OC._eventBus. Update your version!\"\n );\n window._nc_event_bus = window.OC._eventBus;\n }\n if (typeof window?._nc_event_bus !== \"undefined\") {\n bus = new ProxyBus(window._nc_event_bus);\n } else {\n bus = window._nc_event_bus = new SimpleBus();\n }\n return bus;\n}\nfunction emit(name, event) {\n getBus().emit(name, event);\n}\n/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nclass FileListFilter extends TypedEventTarget {\n id;\n order;\n constructor(id, order = 100) {\n super();\n this.id = id;\n this.order = order;\n }\n filter(nodes) {\n throw new Error(\"Not implemented\");\n }\n updateChips(chips) {\n this.dispatchTypedEvent(\"update:chips\", new CustomEvent(\"update:chips\", { detail: chips }));\n }\n filterUpdated() {\n this.dispatchTypedEvent(\"update:filter\", new CustomEvent(\"update:filter\"));\n }\n}\nfunction registerFileListFilter(filter) {\n if (!window._nc_filelist_filters) {\n window._nc_filelist_filters = /* @__PURE__ */ new Map();\n }\n if (window._nc_filelist_filters.has(filter.id)) {\n throw new Error(`File list filter \"${filter.id}\" already registered`);\n }\n window._nc_filelist_filters.set(filter.id, filter);\n emit(\"files:filter:added\", filter);\n}\nfunction unregisterFileListFilter(filterId) {\n if (window._nc_filelist_filters && window._nc_filelist_filters.has(filterId)) {\n window._nc_filelist_filters.delete(filterId);\n emit(\"files:filter:removed\", filterId);\n }\n}\nfunction getFileListFilters() {\n if (!window._nc_filelist_filters) {\n return [];\n }\n return [...window._nc_filelist_filters.values()];\n}\nconst addNewFileMenuEntry = function(entry) {\n const newFileMenu = getNewFileMenu();\n return newFileMenu.registerEntry(entry);\n};\nconst removeNewFileMenuEntry = function(entry) {\n const newFileMenu = getNewFileMenu();\n return newFileMenu.unregisterEntry(entry);\n};\nconst getNewFileMenuEntries = function(context) {\n const newFileMenu = getNewFileMenu();\n return newFileMenu.getEntries(context).sort((a, b) => {\n if (a.order !== void 0 && b.order !== void 0 && a.order !== b.order) {\n return a.order - b.order;\n }\n return a.displayName.localeCompare(b.displayName, void 0, { numeric: true, sensitivity: \"base\" });\n });\n};\nexport {\n Column,\n DefaultType,\n File,\n FileAction,\n FileListFilter,\n FileType,\n FilesSortingMode,\n Folder,\n Header,\n InvalidFilenameError,\n InvalidFilenameErrorReason,\n Navigation,\n NewMenuEntryCategory,\n Node,\n NodeStatus,\n Permission,\n View,\n addNewFileMenuEntry,\n davGetClient,\n davGetDefaultPropfind,\n davGetFavoritesReport,\n davGetRecentSearch,\n davGetRemoteURL,\n davGetRootPath,\n davParsePermissions,\n davRemoteURL,\n davResultToNode,\n davRootPath,\n defaultDavNamespaces,\n defaultDavProperties,\n formatFileSize,\n getDavNameSpaces,\n getDavProperties,\n getFavoriteNodes,\n getFileActions,\n getFileListFilters,\n getFileListHeaders,\n getNavigation,\n getNewFileMenuEntries,\n getUniqueName,\n isFilenameValid,\n orderBy,\n parseFileSize,\n registerDavProperty,\n registerFileAction,\n registerFileListFilter,\n registerFileListHeaders,\n removeNewFileMenuEntry,\n sortNodes,\n unregisterFileListFilter,\n validateFilename\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + ({\"3239\":\"settings-users\",\"4529\":\"settings-apps-view\"}[chunkId] || chunkId) + \"-\" + chunkId + \".js?v=\" + {\"1521\":\"220bf24c534d0cf00eb6\",\"3239\":\"2f2de15c0dd418857aac\",\"4529\":\"c318619b71913b3ce3fd\",\"5085\":\"4f10478b69e38cddada5\",\"7265\":\"715398afd1ab50836642\",\"8737\":\"6fee9973f6f3e1ab1b5a\",\"9291\":\"3812924d520899b5c9f4\",\"9551\":\"ad50a950026c0cfc30e2\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2689;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2689: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4208], () => (__webpack_require__(18539)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","sanitize","url","replace","requireAdmin","confirmPassword","get","options","axios","post","data","put","delete","params","localStorage","getBuilder","persist","build","defaults","id","name","usercount","disabled","canAdd","canRemove","state","users","groups","orderBy","GroupSorting","UserCount","minPasswordLength","usersOffset","usersLimit","disabledUsersOffset","disabledUsersLimit","userCount","showConfig","showStoragePath","getItem","showUserBackend","showLastLogin","showNewUserForm","showLanguages","mutations","appendUsers","usersObj","existingUsers","map","_ref","newUsers","Object","values","filter","_ref2","includes","concat","updateDisabledUsers","_usersObj","setPasswordPolicyMinLength","length","initGroups","_ref3","group","assign","addGroup","_ref4","gid","displayName","find","unshift","e","console","error","renameGroup","_ref5","groupIndex","findIndex","groupSearch","updatedGroup","splice","removeGroup","addUserGroup","_ref6","userid","user","enabled","push","removeUserGroup","_ref7","indexOf","addUserSubAdmin","_ref8","subadmin","removeUserSubAdmin","_ref9","deleteUser","userIndex","this","commit","actionType","addUserData","response","ocs","enableDisableUser","_ref10","updateUserCounts","_ref11","recentGroup","disabledGroup","forEach","userGroup","warn","logger","setUserData","_ref12","key","value","humanValue","parseFileSize","resetUsers","setShowConfig","_ref13","setItem","JSON","stringify","setGroupSorting","sorting","oldValue","generateUrl","String","catch","showError","t","getters","getUsers","getGroups","getSubadminGroups","getSortedGroups","sort","a","b","numA","numB","localeCompare","getGroupSorting","getPasswordPolicyMinLength","getUsersOffset","getUsersLimit","getDisabledUsersOffset","getDisabledUsersLimit","getUserCount","getShowConfig","CancelToken","searchRequestCancelSource","actions","searchUsers","context","_ref14","offset","limit","search","api","generateOcsUrl","getUser","userId","_ref15","cancel","source","trim","encodeURIComponent","cancelToken","token","then","usersCount","keys","getRecentUsers","_ref16","getDisabledUsers","_ref17","_ref18","limitParam","getUsersFromList","_ref19","getUsersFromGroup","_ref20","groupid","groupId","getCapabilities","password_policy","minLength","_ref21","_ref22","_ref23","_ref24","_ref25","wipeUserDevices","Promise","reject","Error","addUser","_ref26","_ref27","dispatch","password","email","quota","language","manager","_ref28","userStatus","_ref29","allowedEmpty","sendWelcomeMail","apps","bundles","loadState","categories","updateCount","loading","gettingCategoriesPromise","APPS_API_FAILURE","message","isHTML","initCategories","updateCategories","categoriesPromise","setUpdateCount","addCategory","category","appendCategories","categoriesArray","setAllApps","setError","appId","Array","isArray","_id","app","clearError","enableApp","active","setInstallState","canInstall","disableApp","removable","canUnInstall","uninstallApp","needsDownload","installed","updateApp","version","update","resetApps","reset","startLoading","Vue","stopLoading","appIds","_appId","update_required","showInfo","onClick","window","location","reload","close","setTimeout","forceEnableApp","finally","getAllApps","getCategories","shouldRefetchCategories","arguments","undefined","categoriesPromiseResponse","getAppBundles","getUpdateCount","getCategoryById","selectedCategoryId","serverData","setServerData","getServerData","setAppConfig","use","Vuex","API_FAILURE","meta","store","useStore","Store","modules","settings","oc","strict","process","getLoggerBuilder","setApp","detectUser","_defineComponent","__name","setup","__props","__sfc","NcContent","_vm","_c","_self","_setupProxy","attrs","_v","path","components","default","UserManagement","navigation","UserManagementNavigation","props","children","redirect","AppStore","AppStoreNavigation","sidebar","AppStoreSidebar","Router","mode","base","linkActiveClass","routes","VTooltip","defaultHtml","sync","router","__webpack_nonce__","getCSPNonce","prototype","n","PiniaVuePlugin","pinia","createPinia","render","h","SettingsApp","el","cloneRoute","to","from","clone","hash","query","fullPath","freeze","exports","moduleName","registerModule","namespaced","currentRoute","transition","currentPath","isTimeTraveling","storeUnwatch","watch","route","afterEachUnHook","afterEach","unregisterModule","Permission","Permission2","defaultDavProperties","defaultDavNamespaces","d","nc","getDavProperties","_nc_dav_properties","prop","join","getDavNameSpaces","_nc_dav_namespaces","ns","davGetDefaultPropfind","davGetRecentSearch","lastModified","uid","FileType","FileType2","isDavRessource","davService","match","validateData","URL","startsWith","displayname","mtime","Date","crtime","mime","size","permissions","NONE","ALL","owner","attributes","root","service","status","NodeStatus","NodeStatus2","Node","_data","_attributes","_knownDavService","readonlyAttributes","entries","getOwnPropertyDescriptors","handler","set","target","Reflect","deleteProperty","receiver","constructor","Proxy","encodedSource","origin","slice","basename","extension","extname","dirname","split","pop","firstMatch","pathname","updateMtime","READ","fileid","move","destination","oldBasename","rename","basename2","TypeError","File","type","Folder","super","davRootPath","davRemoteURL","davGetRemoteURL","davGetClient","remoteURL","headers","client","setHeaders","requesttoken","patch","headers2","method","fetch","getFavoriteNodes","davClient","davRoot","controller","AbortController","CancelablePromise","async","resolve","onCancel","abort","getDirectoryContents","signal","details","includeSelf","node","filename","result","davResultToNode","filesRoot","permString","CREATE","UPDATE","DELETE","SHARE","davParsePermissions","nodeData","parse","lastmod","Number","parseInt","getcontentlength","FAILED","hasPreview","humanList","humanListBinary","formatFileSize","skipSmallSizes","binaryPrefixes","base1000","order","Math","floor","log","min","readableFormat","relativeSize","pow","toFixed","parseFloat","toLocaleString","forceBinary","toLocaleLowerCase","replaceAll","decimalString","round","k","m","g","p","toISOString","sortNodes","nodes","sortingOptions","sortingMode","sortingOrder","collection","identifiers2","orders","_","index","collator","Intl","Collator","numeric","usage","identifier","compare","sortFavoritesFirst","v","favorite","sortFoldersFirst","lastIndexOf","util$3","nameStartChar","nameRegexp","regexName","RegExp","isExist","isEmptyObject","obj","merge","arrayMode","len","i","getValue","isName","string","exec","getAllMatches","regex","matches","allmatches","startIndex","lastIndex","OptionsBuilder","defaultOptions$1","preserveOrder","attributeNamePrefix","attributesGroupName","textNodeName","ignoreAttributes","removeNSPrefix","allowBooleanAttributes","parseTagValue","parseAttributeValue","trimValues","cdataPropName","numberParseOptions","hex","leadingZeros","eNotation","tagValueProcessor","tagName","val2","attributeValueProcessor","attrName","stopNodes","alwaysCreateTextNode","commentPropName","unpairedTags","processEntities","htmlEntities","ignoreDeclaration","ignorePiTags","transformTagName","transformAttributeName","updateTag","jPath","buildOptions","defaultOptions","node2json","compress","arr","text","compressedObj","tagObj","property","propName$1","newJpath","isLeaf","isLeafTag","assignAttributes","hasOwnProperty","attrMap","jpath","atrrName","propCount","prettify","arrToStr","indentation","xmlStr","isPreviousElementTag","propName","newJPath","tagText","isStopNode","replaceEntitiesValue","attStr2","attr_to_str","tempInd","piTextNodeName","newIdentation","indentBy","tagStart","tagValue","suppressUnpairedNode","suppressEmptyNode","endsWith","attrStr","attr","attrVal","suppressBooleanAttributes","substr","textValue","entities","entity","val","buildFromOrderedJs","jArray","format","oneListGroup","Builder","isAttribute","attrPrefixLen","processTextOrObjNode","indentate","tagEndChar","newLine","object","level","j2x","buildTextValNode","buildObjectNode","repeat","jObj","arrayNodeName","call","buildAttrPairStr","newval","arrLen","listTagVal","listTagAttr","j","item","Ks","L","closeTag","tagEndExp","piClosingChar","debug_1","env","NODE_DEBUG","test","args","constants","MAX_LENGTH","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","MAX_LENGTH$1","MAX_SAFE_INTEGER","RELEASE_TYPES","SEMVER_SPEC_VERSION","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","re$1","module","MAX_SAFE_COMPONENT_LENGTH2","MAX_SAFE_BUILD_LENGTH2","MAX_LENGTH2","debug2","re2","re","safeRe","src","t2","R","LETTERDASHNUMBER","safeRegexReplacements","createToken","isGlobal","safe","max","makeSafeRegex","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","BUILDIDENTIFIER","MAINVERSION","PRERELEASE","BUILD","FULLPLAIN","MAINVERSIONLOOSE","PRERELEASELOOSE","LOOSEPLAIN","XRANGEIDENTIFIER","XRANGEIDENTIFIERLOOSE","GTLT","XRANGEPLAIN","XRANGEPLAINLOOSE","COERCEPLAIN","COERCE","COERCEFULL","LONETILDE","tildeTrimReplace","LONECARET","caretTrimReplace","comparatorTrimReplace","reExports","loose","compareIdentifiers$1","anum","bnum","identifiers","compareIdentifiers","rcompareIdentifiers","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","r","getter","__esModule","definition","o","defineProperty","enumerable","f","chunkId","all","reduce","promises","u","globalThis","Function","l","done","script","needAttach","scripts","document","getElementsByTagName","s","getAttribute","createElement","charset","timeout","setAttribute","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","bind","head","appendChild","Symbol","toStringTag","nmd","paths","scriptUrl","importScripts","currentScript","toUpperCase","baseURI","self","href","installedChunks","installedChunkData","promise","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file