@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
2 lines • 5.55 kB
JavaScript
import e from"../../../../utils/errors/lucid-error.mjs";import{translate as t}from"../../../i18n/translate.mjs";import n from"../../custom-fields/fields/code/custom-field.mjs";import r from"../../custom-fields/fields/collapsible/custom-field.mjs";import i from"../../custom-fields/fields/color/custom-field.mjs";import a from"../../custom-fields/fields/datetime/custom-field.mjs";import o from"../../custom-fields/fields/json/custom-field.mjs";import s from"../../custom-fields/fields/link/custom-field.mjs";import c from"../../custom-fields/fields/media/custom-field.mjs";import l from"../../custom-fields/fields/number/custom-field.mjs";import u from"../../custom-fields/fields/range/custom-field.mjs";import{isStorageMode as d}from"../../custom-fields/storage/index.mjs";import f from"../../custom-fields/fields/relation/custom-field.mjs";import p from"../../custom-fields/fields/repeater/custom-field.mjs";import m from"../../custom-fields/fields/rich-text/custom-field.mjs";import h from"../../custom-fields/fields/section/custom-field.mjs";import g from"../../custom-fields/fields/select/custom-field.mjs";import _ from"../../custom-fields/fields/tab/custom-field.mjs";import v from"../../custom-fields/fields/text/custom-field.mjs";import y from"../../custom-fields/fields/textarea/custom-field.mjs";import b from"../../custom-fields/fields/user/custom-field.mjs";import x from"../../custom-fields/registered-fields.mjs";import S from"../../custom-fields/fields/checkbox/custom-field.mjs";import C from"../../custom-fields/utils/normalize-field-copy.mjs";const w=e=>e===`section`||e===`collapsible`;var T=class{fields=new Map;repeaterStack=[];containerStack=[];meta={fieldKeys:[],repeaterDepth:{}};activeTabKey=null;cachedFieldTree=null;cachedPersistedFieldTree=null;cachedClientFieldTree=null;invalidateFieldTreeCache(){this.cachedFieldTree=null,this.cachedPersistedFieldTree=null,this.cachedClientFieldTree=null}registerField(e,t){C(t.config),t.type!==`tab`&&(t.tabParent=this.activeTabKey);let n=this.containerStack[this.containerStack.length-1];return n&&n.kind!==`repeater`&&t.type!==`tab`&&(t.structuralParent=n.key),this.fields.set(e,t),this.meta.fieldKeys.push(e),this.invalidateFieldTreeCache(),this}addRepeater(e,t){return this.meta.repeaterDepth[e]=this.repeaterStack.length,this.registerField(e,new p(e,t)),this.repeaterStack.push(e),this.containerStack.push({kind:`repeater`,key:e}),this}addSection(e,t){return this.registerField(e,new h(e,t)),this.containerStack.push({kind:`section`,key:e}),this}addCollapsible(e,t){return this.registerField(e,new r(e,t)),this.containerStack.push({kind:`collapsible`,key:e}),this}addTab(e,t){return this.containerStack=[],this.activeTabKey=e,this.registerField(e,new _(e,t))}addToTab(n){let r=this.fields.get(n);if(!r)return this;if(r.type!==`tab`)throw new e({message:t(`server:core.fields.tab.target.invalid`,{data:{key:n,type:r.type}})});return this.containerStack=[],this.activeTabKey=n,this}addText(e,t){return this.registerField(e,new v(e,t))}addRichText(e,t){return this.registerField(e,new m(e,t))}addMedia(e,t){return this.registerField(e,new c(e,t))}addRelation(e,t){return this.registerField(e,new f(e,t))}addNumber(e,t){return this.registerField(e,new l(e,t))}addRange(e,t){return this.registerField(e,new u(e,t))}addCheckbox(e,t){return this.registerField(e,new S(e,t))}addSelect(e,t){return this.registerField(e,new g(e,t))}addTextarea(e,t){return this.registerField(e,new y(e,t))}addJSON(e,t){return this.registerField(e,new o(e,t))}addCode(e,t){return this.registerField(e,new n(e,t))}addColor(e,t){return this.registerField(e,new i(e,t))}addDateTime(e,t){return this.registerField(e,new a(e,t))}addLink(e,t){return this.registerField(e,new s(e,t))}addUser(e,t){return this.registerField(e,new b(e,t))}endRepeater(){let e=this.repeaterStack.pop();if(!e)return this;for(;this.containerStack.length>0;){let t=this.containerStack.pop();if(t?.kind===`repeater`&&t.key===e)break}let t=Array.from(this.fields.values()),n=t.findIndex(t=>t.type===`repeater`&&t.key===e);if(n===-1)return this;let r=t.slice(n+1),i=!1;for(let t of r)t.type===`tab`||t.treeParent||(t.treeParent=e,i=!0);return i&&this.invalidateFieldTreeCache(),this}endSection(){return this.containerStack[this.containerStack.length-1]?.kind===`section`&&this.containerStack.pop(),this}endCollapsible(){return this.containerStack[this.containerStack.length-1]?.kind===`collapsible`&&this.containerStack.pop(),this}nestFields(e){let t=e!==`persisted`,n=Array.from(this.fields.values()).filter(t=>e===`full`||!d(x[t.type].config.database,`ignore`)||e===`client`&&w(t.type)),r=[],i=new Map,a=new Map,o=new Map;for(let s of n){let n=JSON.parse(JSON.stringify(s.config));if(s.type===`tab`){let e=n;i.set(s.key,e),r.push(e);continue}if(s.type===`repeater`&&a.set(s.key,n),t&&w(s.type)&&o.set(s.key,n),t&&s.structuralParent){let e=o.get(s.structuralParent);if(e){e.fields.push(n);continue}}if(s.treeParent){let e=a.get(s.treeParent);e&&e.fields.push(n);continue}if(e===`full`&&s.tabParent){let e=i.get(s.tabParent);if(e){e.fields.push(n);continue}}r.push(n)}return r}get fieldTree(){return this.cachedFieldTree||=this.nestFields(`full`),this.cachedFieldTree}get persistedFieldTree(){return this.cachedPersistedFieldTree||=this.nestFields(`persisted`),this.cachedPersistedFieldTree}get clientFieldTree(){return this.cachedClientFieldTree||=this.nestFields(`client`),this.cachedClientFieldTree}get flatFields(){let e=[];for(let[t,n]of this.fields)e.push(n.config);return e}};export{T as default};
//# sourceMappingURL=index.mjs.map