UNPKG

@baseplate-dev/project-builder-web

Version:

Web interface for constructing project builder JSON

3 lines (2 loc) 17.7 kB
import{i as w}from"./_virtual___federation_fn_import-C4el_tlG.js";import{g as Y,a as S,e as Z}from"./isEqual-C420KeG-.js";function q(e){return e==null||typeof e!="object"&&typeof e!="function"}function T(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function h(e,t,n,r=new Map,s=void 0){const o=s?.(e,t,n,r);if(o!=null)return o;if(q(e))return e;if(r.has(e))return r.get(e);if(Array.isArray(e)){const i=new Array(e.length);r.set(e,i);for(let f=0;f<e.length;f++)i[f]=h(e[f],f,n,r,s);return Object.hasOwn(e,"index")&&(i.index=e.index),Object.hasOwn(e,"input")&&(i.input=e.input),i}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp){const i=new RegExp(e.source,e.flags);return i.lastIndex=e.lastIndex,i}if(e instanceof Map){const i=new Map;r.set(e,i);for(const[f,d]of e)i.set(f,h(d,f,n,r,s));return i}if(e instanceof Set){const i=new Set;r.set(e,i);for(const f of e)i.add(h(f,void 0,n,r,s));return i}if(typeof Buffer<"u"&&Buffer.isBuffer(e))return e.subarray();if(T(e)){const i=new(Object.getPrototypeOf(e)).constructor(e.length);r.set(e,i);for(let f=0;f<e.length;f++)i[f]=h(e[f],f,n,r,s);return i}if(e instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&e instanceof SharedArrayBuffer)return e.slice(0);if(e instanceof DataView){const i=new DataView(e.buffer.slice(0),e.byteOffset,e.byteLength);return r.set(e,i),b(i,e,n,r,s),i}if(typeof File<"u"&&e instanceof File){const i=new File([e],e.name,{type:e.type});return r.set(e,i),b(i,e,n,r,s),i}if(e instanceof Blob){const i=new Blob([e],{type:e.type});return r.set(e,i),b(i,e,n,r,s),i}if(e instanceof Error){const i=new e.constructor;return r.set(e,i),i.message=e.message,i.name=e.name,i.stack=e.stack,i.cause=e.cause,b(i,e,n,r,s),i}if(typeof e=="object"&&e!==null){const i=Object.create(Object.getPrototypeOf(e));return r.set(e,i),b(i,e,n,r,s),i}return e}function b(e,t,n=e,r,s){const o=[...Object.keys(t),...Y(t)];for(let i=0;i<o.length;i++){const f=o[i],d=Object.getOwnPropertyDescriptor(e,f);(d==null||d.writable)&&(e[f]=h(t[f],f,n,r,s))}}function B(e){return h(e,void 0,e,new Map,void 0)}function K(e,t){const n={},r=Object.keys(e);for(let s=0;s<r.length;s++){const o=r[s],i=e[o];n[o]=t(i,o,e)}return n}function R(e,t){const n=Object.keys(t);for(let r=0;r<n.length;r++){const s=n[r],o=t[s],i=e[s];Array.isArray(o)?Array.isArray(i)?e[s]=R(i,o):e[s]=R([],o):S(o)?S(i)?e[s]=R(i,o):e[s]=R({},o):(i===void 0||o!==void 0)&&(e[s]=o)}return e}function N(e,t){const n={...e};for(let r=0;r<t.length;r++){const s=t[r];delete n[s]}return n}function C(e,t){return R(B(e),t)}function Te(e,t){return{spec:e,implementation:t}}function Ce(e,t){const{platforms:n,defaultInitializer:r}=t??{};return{type:"plugin-spec",name:e,platforms:n&&(Array.isArray(n)?n:[n]),isOptional:!1,optional(){return{...this,isOptional:!0}},defaultInitializer:r}}const{randomKey:v}=await w("@baseplate-dev/utils");class ee{prefix;name;parentType;constructor(t,n,r){this.name=t,this.parentType=r,this.prefix=n??t.split("/").pop()??t}generateNewId(){return`${this.prefix}:${v()}`}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 ee(e,r,n)}class te{value;reference;constructor(t,n){this.value=t,this.reference=n}toString(){return this.value??""}}const m=Symbol("refAnnotationsMarker"),{z:ne}=await w("zod");function re({transformReferences:e}){function t(s){return ne.string().transform(o=>e&&o?new te(o,s):o)}function n(s,o){if(!("id"in s.shape))throw new Error(`Entity must have an id field. Entity type: ${o.type.name}. Schema keys: ${Object.keys(s.shape).join(", ")}`);return s.transform(i=>{if(!("id"in i)||!o.type.isId(i.id))throw new Error(`Invalid id for entity ${o.type.name}. Id: ${i.id}`);if(e){const f=m in i?i[m]:void 0;return{...i,[m]:{entities:[...f?.entities??[],o],references:f?.references??[],contextPaths:f?.contextPaths??[]}}}return i})}function r(s,o){return s.transform(i=>{if(!i)return i;if(typeof i!="object")throw new TypeError(`refBuilder requires an object, but got ${typeof i}`);const f=m in i?i[m]:void 0,d=f?.entities??[],a=f?.references??[],c=f?.contextPaths??[];return o?.({addReference:l=>{a.push(l)},addEntity:l=>{d.push(l)},addPathToContext:(l,X,J)=>{c.push({path:l,type:X,context:J})}},i),e?{...i,[m]:{entities:d,references:a,contextPaths:c}}:i})}return{withRef:t,withEnt:n,withRefBuilder:r}}const{z:ie}=await w("zod");function se(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 fe(e){const t=e.defaultMode??"populate";return{withDefault:function(r,s){const o=r.optional();switch(t){case"populate":return ie.preprocess(i=>i===void 0?s:i,o);case"strip":return o.transform(i=>{if(!se(i))return i});case"preserve":return o.transform(i=>i)}}}}function ve(e){return{...e,...re(e),...fe(e)}}function P(e){return t=>e(t)}function oe(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 $(e){const t=[],n=e.length;if(n===0)return t;let r=0,s="",o="",i=!1;for(e.charCodeAt(0)===46&&(t.push(""),r++);r<n;){const f=e[r];o?f==="\\"&&r+1<n?(r++,s+=e[r]):f===o?o="":s+=f:i?f==='"'||f==="'"?o=f:f==="]"?(i=!1,t.push(s),s=""):s+=f:f==="["?(i=!0,s&&(t.push(s),s="")):f==="."?s&&(t.push(s),s=""):s+=f,r++}return s&&t.push(s),t}function A(e,t,n){if(e==null)return n;switch(typeof t){case"string":{const r=e[t];return r===void 0?oe(t)?A(e,$(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 s=0;s<t.length;s++){if(r==null)return n;r=r[t[s]]}return r===void 0?n:r}function ce(e){return e!==null&&(typeof e=="object"||typeof e=="function")}function g(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 s=n[r];if(!q(e)&&!(s in e)||t[s]===void 0&&e[s]!==void 0||t[s]===null&&e[s]!==null||!g(e[s],t[s]))return!1}return!0}case"function":return Object.keys(t).length>0?g(e,{...t}):!1;default:return ce(e)?!t:Z(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(!g(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 s=t[r],o=e.findIndex((i,f)=>g(i,s)&&!n.has(f));if(o===-1)return!1;n.add(o)}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 ye(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 me(e,t,n){const r=Array.isArray(t)?t:typeof t=="string"?$(t):[t];let s=e;for(let i=0;i<r.length-1;i++){const f=r[i],d=r[i+1];s[f]==null&&(s[f]=ye(d)?[]:{}),s=s[f]}const o=r[r.length-1];return s[o]=n,e}const{CASE_VALIDATORS:he}=await w("@baseplate-dev/utils"),{z:M}=await w("zod"),E=p("feature"),L=he.KEBAB_CASE,ge=P(e=>e.withEnt(M.object({id:M.string(),name:M.string().min(1).refine(t=>t.split("/").every(n=>L.safeParse(n).success),{message:"Feature name must be lowercase and contain only letters, numbers, and dashes"}),parentRef:e.withRef({type:E,onDelete:"DELETE_PARENT"}).optional()}),{type:E})),et=P(e=>M.array(ge(e)).default([])),y=p("model"),we=p("model-scalar-field",{parentType:y}),be=p("model-local-relation",{parentType:y}),Re=p("model-foreign-relation",{parentType:y}),Ie=p("model-unique-constraint",{parentType:y}),tt=p("model-transformer",{parentType:y}),Me=p("model-enum"),nt=p("model-enum-value",{parentType:Me});function Ae(e){return e.features.filter(t=>!t.parentRef)}function _(e,t){return e.features.find(n=>n.id===t)}function D(e,t){const n=_(e,t);if(!n)throw new Error(`Could not find feature with ID ${t}`);return n}function Ee(e,t){return e.features.filter(n=>n.parentRef===t)}function k(e){return e.name.split("/").pop()??""}function Fe(e,t){const n=D(e,t);return k(n)}function Oe(e,t){return D(e,t).name}function De(e){return e.split("/").every(n=>L.safeParse(n).success)}function xe(e,t){if(E.isId(t))return t;const n=t.split("/");let r="",s;for(const o of n){const i=e.features.find(d=>d.name===o&&d.parentRef===s),f=[r,o].filter(Boolean).join("/");if(i)s=i.id;else{const d={id:E.generateNewId(),name:f,parentRef:s};e.features.push(d),s=d.id}r=f}if(!s)throw new Error("Failed to create feature");return s}function G(e,t){return e.features.find(n=>n.name===t)}function Se(e,t){return G(e,t)?.id??t}const rt={getRootFeatures:Ae,getFeatureById:_,getFeatureByIdOrThrow:D,getFeatureChildren:Ee,getFeatureName:k,getFeatureNameById:Fe,getFeaturePathById:Oe,validateFeatureName:De,ensureFeatureByNameRecursively:xe,getFeatureByName:G,getFeatureIdByNameOrDefault:Se},{PASCAL_CASE_REGEX:Ne}=await w("@baseplate-dev/utils");function W(e,t){return e.models.find(n=>n.id===t)}function je(e,t){const n=W(e,t);if(!n)throw new Error(`Could not find model with ID ${t}`);return n}function U(e,t){return e.models.find(n=>n.name===t)}function qe(e,t){const n=U(e,t);if(!n)throw new Error(`Could not find model with name ${t}`);return n}function Be(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 Ke(e,t){return e.models.flatMap(n=>n.model.relations?.filter(r=>r.modelRef===t).map(r=>({model:n,relation:r}))??[])}function Pe(e,t){return e.models.filter(n=>n.featureRef===t)}function $e(e){return e.model.primaryKeyFieldRefs}function ze(e){return!!e.service.create.enabled||!!e.service.update.enabled||!!e.service.delete.enabled||e.service.transformers.length>0}function Le(e){return Ne.test(e)}function _e(e,t){return e.models.find(n=>n.name===t)?.id??t}const I={byId:W,byIdOrThrow:je,byName:U,byNameOrThrow:qe,getScalarFieldById:Be,getRelationsToModel:Ke,getModelsForFeature:Pe,getModelIdFields:$e,hasService:ze,validateModelName:Le,getModelIdByNameOrDefault:_e};class x{name;constructor(t){this.name=t}}class F extends x{getKey;options;constructor(t,n,r={}){super(t),this.getKey=n,this.options=r}diff(t,n){const r=t??[],s=n??[];if(!Array.isArray(r)||!Array.isArray(s))throw new TypeError("Current and desired must be arrays");const o=[],{allowRemove:i,ignoreFields:f=["id"]}=this.options,d=new Map(r.map(c=>[this.getKey(c),c])),a=new Map(s.map(c=>[this.getKey(c),c]));for(const[c,u]of a){const l=d.get(c);if(!l){o.push({type:"add",key:c,item:u});continue}g(N(l,f),N(u,f))||o.push({type:"update",key:c,item:u})}if(i)for(const[c,u]of d)a.has(c)||o.push({type:"remove",key:c,item:u});return o}apply(t,n){const r=n,s=t??[];if(!Array.isArray(s))throw new TypeError("Current must be array");const o=[...s];for(const{type:i,key:f,item:d}of r){const a=o.findIndex(c=>this.getKey(c)===f);switch(i){case"add":{o.push(d);break}case"update":{if(a===-1)throw new Error(`Cannot apply patch. Item with key "${f}" not found.`);o[a]=C(o[a],d);break}case"remove":{a!==-1&&o.splice(a,1);break}}}return o}getActionVerb(t){return t?"created":"added or updated"}}class j extends x{diff(t,n){return n===void 0?[]:g(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 x{getKey;constructor(t,n){super(t),this.getKey=n}diff(t,n){const r=t??[],s=n??[];if(!Array.isArray(r)||!Array.isArray(s))throw new TypeError("Current and desired must be arrays");const o=[],i=new Set(this.getKey?r.map(this.getKey):r);for(const f of s){const d=this.getKey?this.getKey(f):String(f);i.has(d)||o.push({type:"add",key:d,item:f})}return o}apply(t,n){const r=t??[];if(!Array.isArray(r))throw new TypeError("Current must be array");const s=[...r];for(const{type:o,item:i}of n)o==="add"&&s.push(i);return s}getActionVerb(t){return t?"created":"added"}}function it(e){return e}function ke(e,t,n){const r=K(n,(s,o)=>s?s.diff(A(e,o),A(t,o)):[]);if(!Object.values(r).every(s=>s.length===0))return r}function Ge(e,t,n){const r=B(e);for(const[s,o]of Object.entries(t)){if(!o)continue;const i=n[s],f=A(r,s);me(r,s,i.apply(f,o))}return r}function We(e){return e.fields.map(n=>n.fieldRef).sort().join("|")}const Q={"model.fields":new F("fields",e=>e.name),"model.relations":new F("relations",e=>e.name),"model.uniqueConstraints":new F("unique constraints",e=>We(e)),"model.primaryKeyFieldRefs":new j("primary key fields"),"graphql.objectType.enabled":new j("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 V(e,t,n){const r=new Map(n.map(a=>[a.id,a.name])),s=new Map([...e.model.fields.map(a=>[a.id,a.name]),...n.flatMap(a=>a.model.fields.map(c=>[c.id,c.name]))]),o=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]))]),i=a=>r.get(a)??t.nameFromId(a),f=a=>s.get(a)??t.nameFromId(a),d=a=>o.get(a)??t.nameFromId(a);return{...e,model:{...e.model,relations:e.model.relations?.map(a=>({...a,modelRef:i(a.modelRef),references:a.references.map(c=>({...c,localRef:f(c.localRef),foreignRef:f(c.foreignRef)}))})),uniqueConstraints:e.model.uniqueConstraints?.map(a=>({...a,fields:a.fields.map(c=>({...c,fieldRef:f(c.fieldRef)}))})),primaryKeyFieldRefs:e.model.primaryKeyFieldRefs.map(f)},graphql:{...e.graphql,objectType:{...e.graphql?.objectType,fields:e.graphql?.objectType?.fields?.map(f)??[],localRelations:e.graphql?.objectType?.localRelations?.map(d)??[],foreignRelations:e.graphql?.objectType?.foreignRelations?.map(d)??[]}}}}function Ue(e){return{...e,model:{...e.model,fields:e.model.fields.map(t=>({...t,id:t.id??we.generateNewId()})),relations:e.model.relations?.map(t=>({...t,id:t.id??be.generateNewId(),foreignId:t.foreignId??Re.generateNewId()})),uniqueConstraints:e.model.uniqueConstraints?.map(t=>({...t,id:t.id??Ie.generateNewId()}))}}}function Qe(e,t,n,r){const s=Ue(e),o=f=>{const d=s.model.fields.find(a=>a.name===f);if(!d)throw new Error(`Field ${f} not found`);return d.id},i=f=>{const d=s.model.relations?.find(a=>a.name===f);if(!d)throw new Error(`Relation ${f} not found`);return d.id};return{...s,model:{...s.model,relations:s.model.relations?.map(f=>({...f,modelRef:r(f.modelRef),references:f.references.map(d=>({...d,localRef:o(d.localRef),foreignRef:t(f.modelRef,d.foreignRef)}))})),uniqueConstraints:s.model.uniqueConstraints?.map(f=>({...f,fields:f.fields.map(d=>({...d,fieldRef:o(d.fieldRef)}))})),primaryKeyFieldRefs:s.model.primaryKeyFieldRefs.map(f=>o(f))},graphql:{...s.graphql,objectType:{...s.graphql?.objectType,fields:s.graphql?.objectType?.fields?.map(f=>o(f))??[],localRelations:s.graphql?.objectType?.localRelations?.map(f=>i(f))??[],foreignRelations:s.graphql?.objectType?.foreignRelations?.map(f=>n(f))??[]}}}}function H(e,t,n){return{id:n,name:e,featureRef:t,model:{fields:[],primaryKeyFieldRefs:[]}}}function Ve(e,t,n,{siblingModels:r=[]}={}){const s=e??H(t.name,t.featureRef,y.generateNewId()),o=V(s,n,r),i=ke(o,t,Q);if(i)return{isNewModel:!e,id:s.id,name:s.name,featureRef:s.featureRef,changes:i}}function st(e){return Object.values(e).some(t=>t?.changes)}function He(e,t,n,{siblingModels:r=[]}={}){return K(t,(s,o)=>Ve(e[o]&&y.isId(e[o])?I.byIdOrThrow(n.definition,e[o]):I.byName(n.definition,e[o]??""),s,n,{siblingModels:r}))}function Xe(e,t,n,r=[]){const s=V(e,n,r),o=Ge(s,t,Q);return{...e,...Qe(o,(i,f)=>{const d=r.find(u=>u.id===i||u.name===i);if(d){const u=d.model.fields.find(l=>l.name===f);if(!u)throw new Error(`Field ${f} not found in sibling model ${i}`);return u.id}const a=I.byIdOrThrow(n.definition,i),c=a.model.fields.find(u=>u.name===f);if(!c)throw new Error(`Field ${f} not found in model ${a.name}`);return c.id},i=>{let f;for(const c of r){const u=c.model.relations?.find(l=>l.foreignRelationName===i);if(u){f=u.foreignId;break}}if(f)return f;const a=I.getRelationsToModel(n.definition,e.id).find(c=>c.relation.foreignRelationName===i&&c.relation.modelRef===e.id);if(!a)throw new Error(`Relation ${i} not found in model ${e.name}`);return a.relation.foreignId},i=>{const f=r.find(d=>d.id===i||d.name===i);return f?f.id:i})}}function Je(e,t,n,r,{siblingModels:s=[]}={}){const o=Xe(t,n.changes,r,s);if(n.isNewModel)e.models.push(o);else{const i=e.models.findIndex(f=>f.id===n.id);if(i===-1)throw new Error(`Model ${n.id} not found`);e.models[i]=o}return o.id}function ft(e,t,n,r,{siblingModels:s=[]}={}){const o=He(t,n,r,{siblingModels:s}),i=[],f={};for(const[d,a]of Object.entries(o))if(a){const c=a.isNewModel?H(a.name,a.featureRef,a.id):I.byIdOrThrow(r.definition,a.id);Je(e,c,a,r,{siblingModels:i});const u=e.models.find(l=>l.id===a.id);u&&i.push(u),f[d]=c.id}else f[d]=n[d].name;return f}export{He as A,Xe as B,Je as C,te as D,ft as E,rt as F,F as G,j as H,O as I,it as J,ke as K,Ge as L,I as M,m as R,p as a,ve as b,Ce as c,P as d,Re as e,be as f,A as g,we as h,y as i,tt as j,nt as k,E as l,K as m,Me as n,Ie as o,et as p,N as q,B as r,me as s,Te as t,ee as u,L as v,ge as w,Q as x,Ve as y,st as z}; //# sourceMappingURL=model-merger-Cbxub7G0.js.map