@baseplate-dev/project-builder-web
Version:
Web interface for constructing project builder JSON
3 lines (2 loc) • 19 kB
JavaScript
import{i as w}from"./_virtual___federation_fn_import-DOo8C-zl.js";import{g as v,a as K,e as ee}from"./isEqual-C420KeG-.js";function B(e){return e==null||typeof e!="object"&&typeof e!="function"}function te(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function g(e,t,n,r=new Map,i=void 0){const f=i?.(e,t,n,r);if(f!=null)return f;if(B(e))return e;if(r.has(e))return r.get(e);if(Array.isArray(e)){const s=new Array(e.length);r.set(e,s);for(let o=0;o<e.length;o++)s[o]=g(e[o],o,n,r,i);return Object.hasOwn(e,"index")&&(s.index=e.index),Object.hasOwn(e,"input")&&(s.input=e.input),s}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp){const s=new RegExp(e.source,e.flags);return s.lastIndex=e.lastIndex,s}if(e instanceof Map){const s=new Map;r.set(e,s);for(const[o,d]of e)s.set(o,g(d,o,n,r,i));return s}if(e instanceof Set){const s=new Set;r.set(e,s);for(const o of e)s.add(g(o,void 0,n,r,i));return s}if(typeof Buffer<"u"&&Buffer.isBuffer(e))return e.subarray();if(te(e)){const s=new(Object.getPrototypeOf(e)).constructor(e.length);r.set(e,s);for(let o=0;o<e.length;o++)s[o]=g(e[o],o,n,r,i);return s}if(e instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&e instanceof SharedArrayBuffer)return e.slice(0);if(e instanceof DataView){const s=new DataView(e.buffer.slice(0),e.byteOffset,e.byteLength);return r.set(e,s),b(s,e,n,r,i),s}if(typeof File<"u"&&e instanceof File){const s=new File([e],e.name,{type:e.type});return r.set(e,s),b(s,e,n,r,i),s}if(e instanceof Blob){const s=new Blob([e],{type:e.type});return r.set(e,s),b(s,e,n,r,i),s}if(e instanceof Error){const s=new e.constructor;return r.set(e,s),s.message=e.message,s.name=e.name,s.stack=e.stack,s.cause=e.cause,b(s,e,n,r,i),s}if(typeof e=="object"&&e!==null){const s=Object.create(Object.getPrototypeOf(e));return r.set(e,s),b(s,e,n,r,i),s}return e}function b(e,t,n=e,r,i){const f=[...Object.keys(t),...v(t)];for(let s=0;s<f.length;s++){const o=f[s],d=Object.getOwnPropertyDescriptor(e,o);(d==null||d.writable)&&(e[o]=g(t[o],o,n,r,i))}}function $(e){return g(e,void 0,e,new Map,void 0)}function _(e,t){const n={},r=Object.keys(e);for(let i=0;i<r.length;i++){const f=r[i],s=e[f];n[f]=t(s,f,e)}return n}function R(e,t){const n=Object.keys(t);for(let r=0;r<n.length;r++){const i=n[r],f=t[i],s=e[i];Array.isArray(f)?Array.isArray(s)?e[i]=R(s,f):e[i]=R([],f):K(f)?K(s)?e[i]=R(s,f):e[i]=R({},f):(s===void 0||f!==void 0)&&(e[i]=f)}return e}function P(e,t){const n={...e};for(let r=0;r<t.length;r++){const i=t[r];delete n[i]}return n}function ne(e,t){return R($(e),t)}function re(e,t){const{initializer:n}=t;return{type:"plugin-spec",name:e,initializer:n}}let I;function it(e,t){const n=I;I=e;try{return t()}finally{I=n}}function ie(){return I}const{createFieldMap:se}=await w("@baseplate-dev/utils");function oe(e){return se(e,{getDynamicSource:()=>ie()?.pluginKey})}function st(e,t,n){return re(e,{initializer:()=>{const r=oe(t);return{init:r,use:()=>{const i=r.getValues();return n?.use?n.use(i):i}}}})}function fe(e){switch(typeof e){case"number":case"symbol":return!1;case"string":return e.includes(".")||e.includes("[")||e.includes("]")}}function ae(e){return Object.is(e,-0)?"-0":e.toString()}function L(e){const t=[],n=e.length;if(n===0)return t;let r=0,i="",f="",s=!1;for(e.charCodeAt(0)===46&&(t.push(""),r++);r<n;){const o=e[r];f?o==="\\"&&r+1<n?(r++,i+=e[r]):o===f?f="":i+=o:s?o==='"'||o==="'"?f=o:o==="]"?(s=!1,t.push(i),i=""):i+=o:o==="["?(s=!0,i&&(t.push(i),i="")):o==="."?i&&(t.push(i),i=""):i+=o,r++}return i&&t.push(i),t}function M(e,t,n){if(e==null)return n;switch(typeof t){case"string":{const r=e[t];return r===void 0?fe(t)?M(e,L(t),n):n:r}case"number":case"symbol":{typeof t=="number"&&(t=ae(t));const r=e[t];return r===void 0?n:r}default:{if(Array.isArray(t))return de(e,t,n);Object.is(t?.valueOf(),-0)?t="-0":t=String(t);const r=e[t];return r===void 0?n:r}}}function de(e,t,n){if(t.length===0)return n;let r=e;for(let i=0;i<t.length;i++){if(r==null)return n;r=r[t[i]]}return r===void 0?n:r}function ce(e){return e!==null&&(typeof e=="object"||typeof e=="function")}function h(e,t){if(t===e)return!0;switch(typeof t){case"object":{if(t==null)return!0;const n=Object.keys(t);if(e==null)return n.length===0;if(Array.isArray(t))return z(e,t);if(t instanceof Map)return ue(e,t);if(t instanceof Set)return le(e,t);for(let r=0;r<n.length;r++){const i=n[r];if(!B(e)&&!(i in e)||t[i]===void 0&&e[i]!==void 0||t[i]===null&&e[i]!==null||!h(e[i],t[i]))return!1}return!0}case"function":return Object.keys(t).length>0?h(e,{...t}):!1;default:return ce(e)?!t:ee(e,t)}}function ue(e,t){if(t.size===0)return!0;if(!(e instanceof Map))return!1;for(const[n,r]of t.entries())if(!h(e.get(n),r))return!1;return!0}function z(e,t){if(t.length===0)return!0;if(!Array.isArray(e))return!1;const n=new Set;for(let r=0;r<t.length;r++){const i=t[r],f=e.findIndex((s,o)=>h(s,i)&&!n.has(o));if(f===-1)return!1;n.add(f)}return!0}function le(e,t){return t.size===0?!0:e instanceof Set?z([...e],[...t]):!1}const pe=/^(?:0|[1-9]\d*)$/;function me(e,t=Number.MAX_SAFE_INTEGER){switch(typeof e){case"number":return Number.isInteger(e)&&e>=0&&e<t;case"symbol":return!1;case"string":return pe.test(e)}}function ye(e,t,n){const r=Array.isArray(t)?t:typeof t=="string"?L(t):[t];let i=e;for(let s=0;s<r.length-1;s++){const o=r[s],d=r[s+1];i[o]==null&&(i[o]=me(d)?[]:{}),i=i[o]}const f=r[r.length-1];return i[f]=n,e}class G{value;reference;constructor(t,n){this.value=t,this.reference=n}toString(){return this.value??""}}const E=Symbol("refAnnotationsMarker");function ge(e,t){return{entityType:t,id:Symbol(e)}}function k(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,ge(t,n)]))}function D(e){return e instanceof G?e.value:Array.isArray(e)?e.map(D):typeof e=="object"&&e!==null?Object.fromEntries(Object.entries(e).map(([t,n])=>[t,D(n)])):e}const{z:he}=await w("zod");function we({transformReferences:e}){function t(f,s,o){if(f==null)return f;if(typeof f!="object")return s.addIssue({code:"invalid_type",expected:"object",message:"Entity must be an object",input:f}),f;if(e){const d=E in f?f[E]:{entities:[],references:[],slots:[]};return{...f,[E]:o(d)}}return f}function n(f){return he.string().transform(s=>e&&s?new G(s,{path:[],type:f.type,onDelete:f.onDelete,parentSlot:f.parentSlot,provides:f.provides}):s)}function r(f,s){return f.transform((o,d)=>{if(o==null)return o;if(e){if(typeof o!="object")return d.addIssue({code:"invalid_type",expected:"object",message:"Entity must be an object",input:o}),o;const a=s.idPath??["id"],c=M(o,a);if(typeof c!="string"||!c||!s.type.isId(c))return d.addIssue({code:"custom",message:`Unable to find string id field '${s.idPath?.join(".")??"id"}' in entity ${s.type.name}`,input:o}),o;const u=s.getNameResolver?s.getNameResolver(D(o)):!("name"in o)||typeof o.name!="string"?(d.addIssue({code:"custom",message:`Unable to find string name field in entity ${s.type.name}`,input:o}),"invalid"):o.name,l={id:c,idPath:a,path:[],type:s.type,nameResolver:u,parentSlot:s.parentSlot,provides:s.provides};return t(o,d,x=>({...x,entities:[...x.entities,l]}))}return o})}function i(f,s){const o=k(f);return s(o).transform((d,a)=>t(d,a,c=>({...c,slots:[...c.slots,...Object.values(o).map(u=>({path:[],slot:u}))]})))}return{withRef:n,withEnt:r,refContext:i}}function be(e){return e==null?!0:Array.isArray(e)?e.length===0:typeof e=="object"&&Object.getPrototypeOf(e)===Object.prototype?Object.values(e).every(t=>t===void 0):typeof e=="string"?e==="":!1}function Re(e){const t=e.defaultMode??"populate";return{withDefault:function(r,i){switch(t){case"populate":return r.prefault(i).optional();case"strip":return r.transform(f=>{if(f!==i&&!be(f))return f}).optional();case"preserve":return r.transform(f=>f).optional()}}}}function ot(e){return{...e,...we(e),...Re(e)}}function U(e){return t=>e(t)}function ft(e,t){const n=(r,i)=>t(r,i);return n.slotDefinition=e,n}function at(e){return t=>{const n=k(e.slotDefinition);return e(t,n)}}const{randomKey:Me}=await w("@baseplate-dev/utils");class Ie{prefix;name;parentType;constructor(t,n,r){this.name=t,this.parentType=r,this.prefix=n??t.split("/").pop()??t}generateNewId(){return`${this.prefix}:${Me()}`}idFromKey(t){if(t)return`${this.prefix}:${t}`}keyFromId(t){return t.split(":")[1]}isId(t){return t.startsWith(`${this.prefix}:`)}}function p(e,t){const{parentType:n,prefix:r}=t??{};return new Ie(e,r,n)}const{CASE_VALIDATORS:Ae}=await w("@baseplate-dev/utils"),{z:A}=await w("zod"),F=p("feature"),W=Ae.KEBAB_CASE,Fe=U(e=>e.withEnt(A.object({id:A.string(),name:A.string().min(1).refine(t=>t.split("/").every(n=>W.safeParse(n).success),{message:"Feature name must be lowercase and contain only letters, numbers, and dashes"}),parentRef:e.withRef({type:F,onDelete:"DELETE_PARENT"}).optional()}),{type:F})),dt=U(e=>A.array(Fe(e)).default([])),y=p("model"),Ee=p("model-scalar-field",{parentType:y}),Se=p("model-local-relation",{parentType:y}),Oe=p("model-foreign-relation",{parentType:y}),De=p("model-unique-constraint",{parentType:y}),ct=p("model-transformer",{parentType:y}),je=p("model-enum"),ut=p("model-enum-value",{parentType:je});function Ne(e){return e.features.filter(t=>!t.parentRef)}function Q(e,t){return e.features.find(n=>n.id===t)}function j(e,t){const n=Q(e,t);if(!n)throw new Error(`Could not find feature with ID ${t}`);return n}function xe(e,t){return e.features.filter(n=>n.parentRef===t)}function V(e){return e.name.split("/").pop()??""}function Ke(e,t){const n=j(e,t);return V(n)}function Pe(e,t){return j(e,t).name}function qe(e){return e.split("/").every(n=>W.safeParse(n).success)}function Be(e,t){if(F.isId(t))return t;const n=t.split("/");let r="",i;for(const f of n){const s=e.features.find(d=>d.name===f&&d.parentRef===i),o=[r,f].filter(Boolean).join("/");if(s)i=s.id;else{const d={id:F.generateNewId(),name:o,parentRef:i};e.features.push(d),i=d.id}r=o}if(!i)throw new Error("Failed to create feature");return i}function H(e,t){return e.features.find(n=>n.name===t)}function $e(e,t){return H(e,t)?.id??t}const lt={getRootFeatures:Ne,getFeatureById:Q,getFeatureByIdOrThrow:j,getFeatureChildren:xe,getFeatureName:V,getFeatureNameById:Ke,getFeaturePathById:Pe,validateFeatureName:qe,ensureFeatureByNameRecursively:Be,getFeatureByName:H,getFeatureIdByNameOrDefault:$e},{PASCAL_CASE_REGEX:_e}=await w("@baseplate-dev/utils");function X(e,t){return e.models.find(n=>n.id===t)}function Le(e,t){const n=X(e,t);if(!n)throw new Error(`Could not find model with ID ${t}`);return n}function J(e,t){return e.models.find(n=>n.name===t)}function ze(e,t){const n=J(e,t);if(!n)throw new Error(`Could not find model with name ${t}`);return n}function Y(e,t){const n=e.model.fields.find(r=>r.id===t);if(!n)throw new Error(`Could not find field with ID ${t}`);return n}function Ge(e,t){return e.models.flatMap(n=>n.model.relations?.filter(r=>r.modelRef===t).map(r=>({model:n,relation:r}))??[])}function ke(e,t){return e.models.filter(n=>n.featureRef===t)}function Ue(e){return e.model.primaryKeyFieldRefs}function We(e){return!!e.service.create.enabled||!!e.service.update.enabled||!!e.service.delete.enabled||e.service.transformers.length>0}function Qe(e){return _e.test(e)}function Ve(e,t){return e.models.find(n=>n.name===t)?.id??t}function He(e){return e.model.primaryKeyFieldRefs.map(n=>Y(e,n))}const m={byId:X,byIdOrThrow:Le,byName:J,byNameOrThrow:ze,getScalarFieldById:Y,getRelationsToModel:Ge,getModelsForFeature:ke,getModelIdFields:Ue,hasService:We,validateModelName:Qe,getModelIdByNameOrDefault:Ve,getPrimaryKeyFields:He};class N{name;constructor(t){this.name=t}}class S extends N{getKey;options;constructor(t,n,r={}){super(t),this.getKey=n,this.options=r}diff(t,n){const r=t??[],i=n??[];if(!Array.isArray(r)||!Array.isArray(i))throw new TypeError("Current and desired must be arrays");const f=[],{allowRemove:s,ignoreFields:o=["id"]}=this.options,d=new Map(r.map(c=>[this.getKey(c),c])),a=new Map(i.map(c=>[this.getKey(c),c]));for(const[c,u]of a){const l=d.get(c);if(!l){f.push({type:"add",key:c,item:u});continue}h(P(l,o),P(u,o))||f.push({type:"update",key:c,item:u})}if(s)for(const[c,u]of d)a.has(c)||f.push({type:"remove",key:c,item:u});return f}apply(t,n){const r=n,i=t??[];if(!Array.isArray(i))throw new TypeError("Current must be array");const f=[...i];for(const{type:s,key:o,item:d}of r){const a=f.findIndex(c=>this.getKey(c)===o);switch(s){case"add":{f.push(d);break}case"update":{if(a===-1)throw new Error(`Cannot apply patch. Item with key "${o}" not found.`);f[a]=ne(f[a],d);break}case"remove":{a!==-1&&f.splice(a,1);break}}}return f}getActionVerb(t){return t?"created":"added or updated"}}class q extends N{diff(t,n){return n===void 0?[]:h(t,n)?[]:[{type:"update",key:"*",item:n}]}apply(t,n){return n.length===0?t:n[0].item}getActionVerb(t){return t?"set":"replaced"}}class O extends N{getKey;constructor(t,n){super(t),this.getKey=n}diff(t,n){const r=t??[],i=n??[];if(!Array.isArray(r)||!Array.isArray(i))throw new TypeError("Current and desired must be arrays");const f=[],s=new Set(this.getKey?r.map(this.getKey):r);for(const o of i){const d=this.getKey?this.getKey(o):String(o);s.has(d)||f.push({type:"add",key:d,item:o})}return f}apply(t,n){const r=t??[];if(!Array.isArray(r))throw new TypeError("Current must be array");const i=[...r];for(const{type:f,item:s}of n)f==="add"&&i.push(s);return i}getActionVerb(t){return t?"created":"added"}}function pt(e){return e}function Xe(e,t,n){const r=_(n,(i,f)=>i?i.diff(M(e,f),M(t,f)):[]);if(!Object.values(r).every(i=>i.length===0))return r}function Je(e,t,n){const r=$(e);for(const[i,f]of Object.entries(t)){if(!f)continue;const s=n[i],o=M(r,i);ye(r,i,s.apply(o,f))}return r}function Ye(e){return e.fields.map(n=>n.fieldRef).sort().join("|")}const Z={"model.fields":new S("fields",e=>e.name),"model.relations":new S("relations",e=>e.name),"model.uniqueConstraints":new S("unique constraints",e=>Ye(e)),"model.primaryKeyFieldRefs":new q("primary key fields"),"graphql.objectType.enabled":new q("GraphQL object type enabled"),"graphql.objectType.fields":new O("GraphQL object type fields"),"graphql.objectType.localRelations":new O("GraphQL object type local relations"),"graphql.objectType.foreignRelations":new O("GraphQL object type foreign relations")};function T(e,t,n){const r=new Map(n.map(a=>[a.id,a.name])),i=new Map([...e.model.fields.map(a=>[a.id,a.name]),...n.flatMap(a=>a.model.fields.map(c=>[c.id,c.name]))]),f=new Map([...(e.model.relations??[]).map(a=>[a.id,a.name]),...n.flatMap(a=>(a.model.relations??[]).map(c=>[c.id,c.name])),...(e.model.relations??[]).map(a=>[a.foreignId,a.foreignRelationName]),...n.flatMap(a=>(a.model.relations??[]).map(c=>[c.foreignId,c.foreignRelationName]))]),s=a=>r.get(a)??t.nameFromId(a),o=a=>i.get(a)??t.nameFromId(a),d=a=>f.get(a)??t.nameFromId(a);return{...e,model:{...e.model,relations:e.model.relations?.map(a=>({...a,modelRef:s(a.modelRef),references:a.references.map(c=>({...c,localRef:o(c.localRef),foreignRef:o(c.foreignRef)}))})),uniqueConstraints:e.model.uniqueConstraints?.map(a=>({...a,fields:a.fields.map(c=>({...c,fieldRef:o(c.fieldRef)}))})),primaryKeyFieldRefs:e.model.primaryKeyFieldRefs.map(o)},graphql:{...e.graphql,objectType:{...e.graphql?.objectType,fields:e.graphql?.objectType?.fields?.map(o)??[],localRelations:e.graphql?.objectType?.localRelations?.map(d)??[],foreignRelations:e.graphql?.objectType?.foreignRelations?.map(d)??[]}}}}function Ze(e){return{...e,model:{...e.model,fields:e.model.fields.map(t=>({...t,id:t.id??Ee.generateNewId()})),relations:e.model.relations?.map(t=>({...t,id:t.id??Se.generateNewId(),foreignId:t.foreignId??Oe.generateNewId()})),uniqueConstraints:e.model.uniqueConstraints?.map(t=>({...t,id:t.id??De.generateNewId()}))}}}function Te(e,t,n,r){const i=Ze(e),f=o=>{const d=i.model.fields.find(a=>a.name===o);if(!d)throw new Error(`Field ${o} not found`);return d.id},s=o=>{const d=i.model.relations?.find(a=>a.name===o);if(!d)throw new Error(`Relation ${o} not found`);return d.id};return{...i,model:{...i.model,relations:i.model.relations?.map(o=>({...o,modelRef:r(o.modelRef),references:o.references.map(d=>({...d,localRef:f(d.localRef),foreignRef:t(o.modelRef,d.foreignRef)}))})),uniqueConstraints:i.model.uniqueConstraints?.map(o=>({...o,fields:o.fields.map(d=>({...d,fieldRef:f(d.fieldRef)}))})),primaryKeyFieldRefs:i.model.primaryKeyFieldRefs.map(o=>f(o))},graphql:{...i.graphql,objectType:{...i.graphql?.objectType,fields:i.graphql?.objectType?.fields?.map(o=>f(o))??[],localRelations:i.graphql?.objectType?.localRelations?.map(o=>s(o))??[],foreignRelations:i.graphql?.objectType?.foreignRelations?.map(o=>n(o))??[]}}}}function C(e,t,n){return{id:n,name:e,featureRef:t,model:{fields:[],primaryKeyFieldRefs:[]}}}function Ce(e,t,n,{siblingModels:r=[]}={}){const i=e??C(t.name,t.featureRef,y.generateNewId()),f=T(i,n,r),s=Xe(f,t,Z);if(s)return{isNewModel:!e,id:i.id,name:i.name,featureRef:i.featureRef,changes:s}}function mt(e){return Object.values(e).some(t=>t?.changes)}function ve(e,t,n,{siblingModels:r=[]}={}){return _(t,(i,f)=>Ce(e[f]&&y.isId(e[f])?m.byIdOrThrow(n.definition,e[f]):m.byName(n.definition,e[f]??""),i,n,{siblingModels:r}))}function et(e,t,n,r=[]){const i=T(e,n,r),f=Je(i,t,Z);return{...e,...Te(f,(s,o)=>{const d=r.find(u=>u.id===s||u.name===s);if(d){const u=d.model.fields.find(l=>l.name===o);if(!u)throw new Error(`Field ${o} not found in sibling model ${s}`);return u.id}const a=m.byName(n.definition,s)??m.byIdOrThrow(n.definition,s),c=a.model.fields.find(u=>u.name===o);if(!c)throw new Error(`Field ${o} not found in model ${a.name}`);return c.id},s=>{let o;for(const c of r){const u=c.model.relations?.find(l=>l.foreignRelationName===s);if(u){o=u.foreignId;break}}if(o)return o;const a=m.getRelationsToModel(n.definition,e.id).find(c=>c.relation.foreignRelationName===s&&c.relation.modelRef===e.id);if(!a)throw new Error(`Relation ${s} not found in model ${e.name}`);return a.relation.foreignId},s=>{const o=r.find(a=>a.id===s||a.name===s);return o?o.id:(m.byName(n.definition,s)??m.byIdOrThrow(n.definition,s)).id})}}function tt(e,t,n,r,{siblingModels:i=[]}={}){const f=et(t,n.changes,r,i);if(n.isNewModel)e.models.push(f);else{const s=e.models.findIndex(o=>o.id===n.id);if(s===-1)throw new Error(`Model ${n.id} not found`);e.models[s]=f}return f.id}function yt(e,t,n,r,{siblingModels:i=[]}={}){const f=ve(t,n,r,{siblingModels:i}),s=[],o={};for(const[d,a]of Object.entries(f))if(a){const c=a.isNewModel?C(a.name,a.featureRef,a.id):m.byIdOrThrow(r.definition,a.id);tt(e,c,a,r,{siblingModels:s});const u=e.models.find(l=>l.id===a.id);u&&s.push(u),o[d]=c.id}else o[d]=n[d].name;return o}export{k as A,Ie as B,at as C,G as D,W as E,lt as F,Fe as G,Z as H,Ce as I,mt as J,ve as K,et as L,m as M,tt as N,yt as O,S as P,q as Q,E as R,O as S,pt as T,Xe as U,Je as V,p as a,ot as b,st as c,ft as d,ye as e,U as f,M as g,Oe as h,Se as i,Ee as j,y as k,ct as l,_ as m,ut as n,je as o,F as p,De as q,it as r,D as s,dt as t,P as u,$ as v,ie as w,re as x,oe as y,ge as z};
//# sourceMappingURL=model-merger-6YmB-G6C.js.map