UNPKG

@lucidcms/core

Version:

The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.

2 lines 2.34 kB
import e from"../../libs/repositories/role-permissions.mjs";import t from"../../libs/repositories/role-translations.mjs";import n from"../../libs/repositories/roles.mjs";import{invalidateAuthCache as r}from"../auth/helpers/auth-cache.mjs";import{getValidPermissions as i,isCorePermission as a}from"../../libs/permission/registry.mjs";import{getTranslationValue as o,normalizeTranslationArray as s,prepareRoleTranslations as c}from"../roles/helpers/role-translations.mjs";import l from"../../libs/formatters/index.mjs";const u=async u=>{let d=new n(u.db.client,u.config.db),f=new e(u.db.client,u.config.db),p=new t(u.db.client,u.config.db),m=await d.selectMultiple({select:[`id`,`key`,`locked`],validation:{enabled:!0}});if(m.error)return m;let h=[],g=h.map(e=>e.key),_=m.data.filter(e=>l.formatBoolean(e.locked)&&e.key!==null&&!g.includes(e.key)).map(e=>e.id);if(_.length>0){let e=await d.deleteMultiple({where:[{key:`id`,operator:`in`,value:_}],returning:[`id`]});if(e.error)return e}for(let e of h){let t=u.config.i18n.defaultLocale,n=s(e.name,u.config,u.translate),r=s(e.description,u.config,u.translate),i=o(n,t)??n[0]?.value??``,l=o(r,t)??r[0]?.value??null,h=m.data.find(t=>t.key===e.key)?.id,g=h===void 0?await d.createSingle({data:{key:e.key,locked:!0},returning:[`id`],validation:{enabled:!0}}):await d.updateSingle({data:{locked:!0,updated_at:new Date().toISOString()},where:[{key:`id`,operator:`=`,value:h}],returning:[`id`],validation:{enabled:!0}});if(g.error)return g;let _=g.data.id,v=await p.deleteMultiple({where:[{key:`role_id`,operator:`=`,value:_}],returning:[`id`]});if(v.error)return v;let y=c({name:n,description:r,roleId:_});if(y.every(e=>e.locale_code!==t)&&y.push({role_id:_,locale_code:t,name:i,description:l}),y.length>0){let e=await p.upsertMultiple({data:y,returning:[`id`],validation:{enabled:!0}});if(e.error)return e}let b=await f.deleteMultiple({where:[{key:`role_id`,operator:`=`,value:_}],returning:[`id`]});if(b.error)return b;if(e.permissions.length>0){let t=await f.createMultiple({data:e.permissions.map(e=>({role_id:_,permission:e,core:a(e)}))});if(t.error)return t}}let v=i(u.config),y=await f.deleteMultiple({where:[{key:`permission`,operator:`not in`,value:v}],returning:[`id`]});return y.error?y:(await r(u),{error:void 0,data:void 0})};export{u as default}; //# sourceMappingURL=sync-roles.mjs.map