@baseplate-dev/project-builder-web
Version:
Web interface for constructing project builder JSON
1 lines • 70.1 kB
JavaScript
import{c as A,a as N,d as g,D as It,R as Ve,s as Ft,m as ct,b as dt,g as _,e as se,f as T,h as Z,i as Y,j as I,k as h,l as le,n as ut,o as q,p as Ie,q as Se,r as Mt,t as Pt,M as Nt,u as ke,v as jt}from"../model-merger-6YmB-G6C.js";import{S as Na,P as ja,Q as _a,B as $a,F as za,V as Oa,L as La,N as Ba,O as Ka,U as Ua,T as qa,G as Va,I as Ha,K as xa,y as Ga,x as Wa,z as Qa,A as Za,J as Ya,E as Ja,w as Xa,H as ei,C as ti}from"../model-merger-6YmB-G6C.js";import{p as _t,c as pt,f as $t}from"../index-D5UX5AHP.js";import{i as c}from"../_virtual___federation_fn_import-DOo8C-zl.js";import{i as He}from"../isEqual-C420KeG-.js";import{p as Fe}from"../immer-B7fdkLVi.js";import{s as zt}from"../sortBy-C9bvycg5.js";import{i as xe}from"../inflection-C1nKqrJS.js";function ae(e,t){const n={};for(let o=0;o<e.length;o++){const r=e[o],a=t(r);Object.hasOwn(n,a)||(n[a]=[]),n[a].push(r)}return n}function mt(e,t){const n={};for(let o=0;o<e.length;o++){const r=e[o],a=t(r);n[a]=r}return n}function he(e){return Array.from(new Set(e))}function ft(...e){return function(...t){let n=e.length?e[0].apply(this,t):t[0];for(let o=1;o<e.length;o++)n=e[o].call(this,n);return n}}function Me(e,t){const n={},o=Object.keys(e);for(let r=0;r<o.length;r++){const a=o[r],s=e[a];t(s,a)&&(n[a]=s)}return n}const zr=A("core/admin-crud-action-compiler",e=>({actions:e.namedArrayToMap()}));function Or(e){return e}const Lr=A("core/admin-crud-column-compiler",e=>({columns:e.namedArrayToMap()})),Br=A("core/admin-crud-input-compiler",e=>({inputs:e.namedArrayToMap()})),{safeMerge:Ge}=await c("@baseplate-dev/utils");function Kr(){const e={};let t={};return{addChildrenToFeature(n,o){e[n]=Ge(e[n]??{},o)},getChildrenForFeature(n){return e[n]??{}},addRootChildren(n){t=Ge(t,n)},getRootChildren(){return t}}}function Ur(e){return e}const qr=A("core/app-compiler",e=>({compilers:e.array()}),{use:e=>({getAppCompilers:t=>e.compilers.filter(n=>n.appType===t)})}),Vr=A("core/model-transformer-compiler",e=>({transformers:e.namedArrayToMap()})),Ot=["50","100","200","300","400","500","600","700","800","900","950"],ht={white:"oklch(1 0 0)",black:"oklch(0 0 0)"},ce={red:{50:"oklch(0.971 0.013 17.38)",100:"oklch(0.936 0.032 17.717)",200:"oklch(0.885 0.062 18.334)",300:"oklch(0.808 0.114 19.571)",400:"oklch(0.704 0.191 22.216)",500:"oklch(0.637 0.237 25.331)",600:"oklch(0.577 0.245 27.325)",700:"oklch(0.505 0.213 27.518)",800:"oklch(0.444 0.177 26.899)",900:"oklch(0.396 0.141 25.723)",950:"oklch(0.258 0.092 26.042)"},orange:{50:"oklch(0.98 0.016 73.684)",100:"oklch(0.954 0.038 75.164)",200:"oklch(0.901 0.076 70.697)",300:"oklch(0.837 0.128 66.29)",400:"oklch(0.75 0.183 55.934)",500:"oklch(0.705 0.213 47.604)",600:"oklch(0.646 0.222 41.116)",700:"oklch(0.553 0.195 38.402)",800:"oklch(0.47 0.157 37.304)",900:"oklch(0.408 0.123 38.172)",950:"oklch(0.266 0.079 36.259)"},amber:{50:"oklch(0.987 0.022 95.277)",100:"oklch(0.962 0.059 95.617)",200:"oklch(0.924 0.12 95.746)",300:"oklch(0.879 0.169 91.605)",400:"oklch(0.828 0.189 84.429)",500:"oklch(0.769 0.188 70.08)",600:"oklch(0.666 0.179 58.318)",700:"oklch(0.555 0.163 48.998)",800:"oklch(0.473 0.137 46.201)",900:"oklch(0.414 0.112 45.904)",950:"oklch(0.279 0.077 45.635)"},yellow:{50:"oklch(0.987 0.026 102.212)",100:"oklch(0.973 0.071 103.193)",200:"oklch(0.945 0.129 101.54)",300:"oklch(0.905 0.182 98.111)",400:"oklch(0.852 0.199 91.936)",500:"oklch(0.795 0.184 86.047)",600:"oklch(0.681 0.162 75.834)",700:"oklch(0.554 0.135 66.442)",800:"oklch(0.476 0.114 61.907)",900:"oklch(0.421 0.095 57.708)",950:"oklch(0.286 0.066 53.813)"},lime:{50:"oklch(0.986 0.031 120.757)",100:"oklch(0.967 0.067 122.328)",200:"oklch(0.938 0.127 124.321)",300:"oklch(0.897 0.196 126.665)",400:"oklch(0.841 0.238 128.85)",500:"oklch(0.768 0.233 130.85)",600:"oklch(0.648 0.2 131.684)",700:"oklch(0.532 0.157 131.589)",800:"oklch(0.453 0.124 130.933)",900:"oklch(0.405 0.101 131.063)",950:"oklch(0.274 0.072 132.109)"},green:{50:"oklch(0.982 0.018 155.826)",100:"oklch(0.962 0.044 156.743)",200:"oklch(0.925 0.084 155.995)",300:"oklch(0.871 0.15 154.449)",400:"oklch(0.792 0.209 151.711)",500:"oklch(0.723 0.219 149.579)",600:"oklch(0.627 0.194 149.214)",700:"oklch(0.527 0.154 150.069)",800:"oklch(0.448 0.119 151.328)",900:"oklch(0.393 0.095 152.535)",950:"oklch(0.266 0.065 152.934)"},emerald:{50:"oklch(0.979 0.021 166.113)",100:"oklch(0.95 0.052 163.051)",200:"oklch(0.905 0.093 164.15)",300:"oklch(0.845 0.143 164.978)",400:"oklch(0.765 0.177 163.223)",500:"oklch(0.696 0.17 162.48)",600:"oklch(0.596 0.145 163.225)",700:"oklch(0.508 0.118 165.612)",800:"oklch(0.432 0.095 166.913)",900:"oklch(0.378 0.077 168.94)",950:"oklch(0.262 0.051 172.552)"},teal:{50:"oklch(0.984 0.014 180.72)",100:"oklch(0.953 0.051 180.801)",200:"oklch(0.91 0.096 180.426)",300:"oklch(0.855 0.138 181.071)",400:"oklch(0.777 0.152 181.912)",500:"oklch(0.704 0.14 182.503)",600:"oklch(0.6 0.118 184.704)",700:"oklch(0.511 0.096 186.391)",800:"oklch(0.437 0.078 188.216)",900:"oklch(0.386 0.063 188.416)",950:"oklch(0.277 0.046 192.524)"},cyan:{50:"oklch(0.984 0.019 200.873)",100:"oklch(0.956 0.045 203.388)",200:"oklch(0.917 0.08 205.041)",300:"oklch(0.865 0.127 207.078)",400:"oklch(0.789 0.154 211.53)",500:"oklch(0.715 0.143 215.221)",600:"oklch(0.609 0.126 221.723)",700:"oklch(0.52 0.105 223.128)",800:"oklch(0.45 0.085 224.283)",900:"oklch(0.398 0.07 227.392)",950:"oklch(0.302 0.056 229.695)"},sky:{50:"oklch(0.977 0.013 236.62)",100:"oklch(0.951 0.026 236.824)",200:"oklch(0.901 0.058 230.902)",300:"oklch(0.828 0.111 230.318)",400:"oklch(0.746 0.16 232.661)",500:"oklch(0.685 0.169 237.323)",600:"oklch(0.588 0.158 241.966)",700:"oklch(0.5 0.134 242.749)",800:"oklch(0.443 0.11 240.79)",900:"oklch(0.391 0.09 240.876)",950:"oklch(0.293 0.066 243.157)"},blue:{50:"oklch(0.97 0.014 254.604)",100:"oklch(0.932 0.032 255.585)",200:"oklch(0.882 0.059 254.128)",300:"oklch(0.809 0.105 251.813)",400:"oklch(0.707 0.165 254.624)",500:"oklch(0.623 0.214 259.815)",600:"oklch(0.546 0.245 262.881)",700:"oklch(0.488 0.243 264.376)",800:"oklch(0.424 0.199 265.638)",900:"oklch(0.379 0.146 265.522)",950:"oklch(0.282 0.091 267.935)"},indigo:{50:"oklch(0.962 0.018 272.314)",100:"oklch(0.93 0.034 272.788)",200:"oklch(0.87 0.065 274.039)",300:"oklch(0.785 0.115 274.713)",400:"oklch(0.673 0.182 276.935)",500:"oklch(0.585 0.233 277.117)",600:"oklch(0.511 0.262 276.966)",700:"oklch(0.457 0.24 277.023)",800:"oklch(0.398 0.195 277.366)",900:"oklch(0.359 0.144 278.697)",950:"oklch(0.257 0.09 281.288)"},violet:{50:"oklch(0.969 0.016 293.756)",100:"oklch(0.943 0.029 294.588)",200:"oklch(0.894 0.057 293.283)",300:"oklch(0.811 0.111 293.571)",400:"oklch(0.702 0.183 293.541)",500:"oklch(0.606 0.25 292.717)",600:"oklch(0.541 0.281 293.009)",700:"oklch(0.491 0.27 292.581)",800:"oklch(0.432 0.232 292.759)",900:"oklch(0.38 0.189 293.745)",950:"oklch(0.283 0.141 291.089)"},purple:{50:"oklch(0.977 0.014 308.299)",100:"oklch(0.946 0.033 307.174)",200:"oklch(0.902 0.063 306.703)",300:"oklch(0.827 0.119 306.383)",400:"oklch(0.714 0.203 305.504)",500:"oklch(0.627 0.265 303.9)",600:"oklch(0.558 0.288 302.321)",700:"oklch(0.496 0.265 301.924)",800:"oklch(0.438 0.218 303.724)",900:"oklch(0.381 0.176 304.987)",950:"oklch(0.291 0.149 302.717)"},fuchsia:{50:"oklch(0.977 0.017 320.058)",100:"oklch(0.952 0.037 318.852)",200:"oklch(0.903 0.076 319.62)",300:"oklch(0.833 0.145 321.434)",400:"oklch(0.74 0.238 322.16)",500:"oklch(0.667 0.295 322.15)",600:"oklch(0.591 0.293 322.896)",700:"oklch(0.518 0.253 323.949)",800:"oklch(0.452 0.211 324.591)",900:"oklch(0.401 0.17 325.612)",950:"oklch(0.293 0.136 325.661)"},pink:{50:"oklch(0.971 0.014 343.198)",100:"oklch(0.948 0.028 342.258)",200:"oklch(0.899 0.061 343.231)",300:"oklch(0.823 0.12 346.018)",400:"oklch(0.718 0.202 349.761)",500:"oklch(0.656 0.241 354.308)",600:"oklch(0.592 0.249 0.584)",700:"oklch(0.525 0.223 3.958)",800:"oklch(0.459 0.187 3.815)",900:"oklch(0.408 0.153 2.432)",950:"oklch(0.284 0.109 3.907)"},rose:{50:"oklch(0.969 0.015 12.422)",100:"oklch(0.941 0.03 12.58)",200:"oklch(0.892 0.058 10.001)",300:"oklch(0.81 0.117 11.638)",400:"oklch(0.712 0.194 13.428)",500:"oklch(0.645 0.246 16.439)",600:"oklch(0.586 0.253 17.585)",700:"oklch(0.514 0.222 16.935)",800:"oklch(0.455 0.188 13.697)",900:"oklch(0.41 0.159 10.272)",950:"oklch(0.271 0.105 12.094)"},slate:{50:"oklch(0.984 0.003 247.858)",100:"oklch(0.968 0.007 247.896)",200:"oklch(0.929 0.013 255.508)",300:"oklch(0.869 0.022 252.894)",400:"oklch(0.704 0.04 256.788)",500:"oklch(0.554 0.046 257.417)",600:"oklch(0.446 0.043 257.281)",700:"oklch(0.372 0.044 257.287)",800:"oklch(0.279 0.041 260.031)",900:"oklch(0.208 0.042 265.755)",950:"oklch(0.129 0.042 264.695)"},gray:{50:"oklch(0.985 0.002 247.839)",100:"oklch(0.967 0.003 264.542)",200:"oklch(0.928 0.006 264.531)",300:"oklch(0.872 0.01 258.338)",400:"oklch(0.707 0.022 261.325)",500:"oklch(0.551 0.027 264.364)",600:"oklch(0.446 0.03 256.802)",700:"oklch(0.373 0.034 259.733)",800:"oklch(0.278 0.033 256.848)",900:"oklch(0.21 0.034 264.665)",950:"oklch(0.13 0.028 261.692)"},zinc:{50:"oklch(0.985 0 0)",100:"oklch(0.967 0.001 286.375)",200:"oklch(0.92 0.004 286.32)",300:"oklch(0.871 0.006 286.286)",400:"oklch(0.705 0.015 286.067)",500:"oklch(0.552 0.016 285.938)",600:"oklch(0.442 0.017 285.786)",700:"oklch(0.37 0.013 285.805)",800:"oklch(0.274 0.006 286.033)",900:"oklch(0.21 0.006 285.885)",950:"oklch(0.141 0.005 285.823)"},neutral:{50:"oklch(0.985 0 0)",100:"oklch(0.97 0 0)",200:"oklch(0.922 0 0)",300:"oklch(0.87 0 0)",400:"oklch(0.708 0 0)",500:"oklch(0.556 0 0)",600:"oklch(0.439 0 0)",700:"oklch(0.371 0 0)",800:"oklch(0.269 0 0)",900:"oklch(0.205 0 0)",950:"oklch(0.145 0 0)"},stone:{50:"oklch(0.985 0.001 106.423)",100:"oklch(0.97 0.001 106.424)",200:"oklch(0.923 0.003 48.717)",300:"oklch(0.869 0.005 56.366)",400:"oklch(0.709 0.01 56.259)",500:"oklch(0.553 0.013 58.071)",600:"oklch(0.444 0.011 73.639)",700:"oklch(0.374 0.01 67.558)",800:"oklch(0.268 0.007 34.298)",900:"oklch(0.216 0.006 56.043)",950:"oklch(0.147 0.004 49.25)"}},Pe={background:{name:"Background",description:"The background color of the page",lightDefault:{color:"white"},darkDefault:{baseShade:"950"},groupKey:"page",category:"surface"},foreground:{name:"Foreground",description:"The foreground color of the page",lightDefault:{baseShade:"950"},darkDefault:{baseShade:"50"},groupKey:"page",category:"surface"},muted:{name:"Muted Background",description:"Muted backgrounds such as <TabsList />, <Skeleton /> and <Switch />, also used as background for containers on white background or vice versa",lightDefault:{baseShade:"100"},darkDefault:{baseShade:"800"},groupKey:"muted",category:"surface"},mutedForeground:{name:"Muted Foreground",description:"Used for secondary text and subtitles",lightDefault:{baseShade:"500"},darkDefault:{baseShade:"400"},groupKey:"muted",category:"surface"},card:{name:"Card Background",description:"Background color for <Card />",lightDefault:{color:"white"},darkDefault:{baseShade:"950"},groupKey:"card",category:"surface"},cardForeground:{name:"Card Foreground",description:"Foreground color for <Card />",lightDefault:{baseShade:"950"},darkDefault:{baseShade:"50"},groupKey:"card",category:"surface"},popover:{name:"Popover Background",description:"Background color for popovers such as <DropdownMenu />, <HoverCard />, <Popover />",lightDefault:{color:"white"},darkDefault:{baseShade:"950"},groupKey:"popover",category:"surface"},popoverForeground:{name:"Popover Foreground",description:"Foreground color for popovers such as <DropdownMenu />, <HoverCard />, <Popover />",lightDefault:{baseShade:"950"},darkDefault:{baseShade:"50"},groupKey:"popover",category:"surface"},accent:{name:"Accent",description:"Used for accents such as hover effects on <DropdownMenuItem>, <SelectItem>...",lightDefault:{baseShade:"100"},darkDefault:{baseShade:"800"},groupKey:"accent",category:"surface"},accentForeground:{name:"Accent Foreground",description:"Used for accent foregrounds such as hover effects on <DropdownMenuItem>, <SelectItem>...",lightDefault:{baseShade:"900"},darkDefault:{baseShade:"50"},groupKey:"accent",category:"surface"},success:{name:"Success",description:"Used for success state on input fields, toast or alerts",lightDefault:{color:"emerald-50"},darkDefault:{color:"emerald-950"},groupKey:"success",category:"surface"},successForeground:{name:"Success Foreground",description:"Used for success foregrounds",lightDefault:{color:"emerald-950"},darkDefault:{color:"emerald-50"},groupKey:"success",category:"surface"},warning:{name:"Warning",description:"Used for warning color on toast or alert",lightDefault:{color:"amber-50"},darkDefault:{color:"amber-950"},groupKey:"warning",category:"surface"},warningForeground:{name:"Warning Foreground",description:"Used for warning foregrounds",lightDefault:{color:"amber-950"},darkDefault:{color:"amber-50"},groupKey:"warning",category:"surface"},error:{name:"Error",description:"Used for error state on input fields, toast or alerts",lightDefault:{color:"red-50"},darkDefault:{color:"red-950"},groupKey:"error",category:"surface"},errorForeground:{name:"Error Foreground",description:"Used for error foregrounds",lightDefault:{color:"red-950"},darkDefault:{color:"red-50"},groupKey:"error",category:"surface"},primary:{name:"Primary",description:"Primary colors for <Button /> and other active states for interactive elements such as checkbox",lightDefault:{primaryShade:"800"},darkDefault:{primaryShade:"950"},groupKey:"primary",category:"interactive"},primaryHover:{name:"Primary Hover",description:"Hover background for primary color",lightDefault:{primaryShade:"900"},darkDefault:{primaryShade:"800"},groupKey:"primary",category:"interactive"},primaryForeground:{name:"Primary Foreground",description:"Text color for primary button",lightDefault:{baseShade:"50"},darkDefault:{baseShade:"50"},groupKey:"primary",category:"interactive"},secondary:{name:"Secondary",description:"Secondary colors for <Button />",lightDefault:{baseShade:"100"},darkDefault:{baseShade:"800"},groupKey:"secondary",category:"interactive"},secondaryHover:{name:"Secondary Hover",description:"Hover background for secondary color",lightDefault:{baseShade:"300"},darkDefault:{baseShade:"600"},groupKey:"secondary",category:"interactive"},secondaryForeground:{name:"Secondary Foreground",description:"Text color for secondary button",lightDefault:{baseShade:"900"},darkDefault:{baseShade:"50"},groupKey:"secondary",category:"interactive"},destructive:{name:"Destructive",description:'Used for destructive actions such as <Button variant="destructive">',lightDefault:{color:"red-500"},darkDefault:{color:"red-900"},groupKey:"destructive",category:"interactive"},destructiveHover:{name:"Destructive Hover",description:"Hover color for destructive background",lightDefault:{color:"red-700"},darkDefault:{color:"red-700"},groupKey:"destructive",category:"interactive"},destructiveForeground:{name:"Destructive Foreground",description:"Hover color for destructive background",lightDefault:{baseShade:"50"},darkDefault:{baseShade:"50"},groupKey:"destructive",category:"interactive"},link:{name:"Link",description:"Used for interactive links mostly in text",lightDefault:{primaryShade:"700"},darkDefault:{primaryShade:"600"},groupKey:"link",category:"interactive"},linkVisited:{name:"Visited Link",description:"Color for link after being visited",lightDefault:{primaryShade:"800"},darkDefault:{primaryShade:"700"},groupKey:"link",category:"interactive"},border:{name:"Border",description:"Default border color",lightDefault:{baseShade:"200"},darkDefault:{baseShade:"800"},groupKey:"border",category:"utility"},input:{name:"Input Border",description:"Border color for inputs such as <Input />, <Select />, <Textarea />",lightDefault:{baseShade:"200"},darkDefault:{baseShade:"800"},groupKey:"border",category:"utility"},ring:{name:"Focus Ring",description:"Used for focus ring.",lightDefault:{primaryShade:"400"},darkDefault:{primaryShade:"500"},groupKey:"ring",category:"utility"}},Lt=Object.keys(Pe);function We(e){return e.replace(/^\./,"").split("/").filter(t=>t!=="")}function Bt(e,t){const n=We(e),o=We(t);for(;n.length>0&&o.length>0&&n[0]===o[0];)n.shift(),o.shift();const r=n.length;return[...Array.from({length:r}).fill(".."),...o].join("/")}function Kt(e,t){const n=e.apps.find(o=>o.id===t);if(!n)throw new Error(`Unable to find app with ID ${t}`);return n}function Ut(e){const t=e.apps.filter(o=>o.type==="backend");if(t.length>1||t.length===0)throw new Error("Only one backend app is supported and must exist");return t[0]}function Re(e,t){return`${t?.appsFolder??"apps"}/${e.name}`}function qt(e,t,n){return Bt(Re(e,n),Re(t,n))}const Hr={byId:Kt,getBackendApp:Ut,getBackendRelativePath:qt,getAppDirectory:Re},O=N("app");function xr(e){return e}const{CASE_VALIDATORS:Vt}=await c("@baseplate-dev/utils"),{z:we}=await c("zod"),Ne={id:we.string().default(O.generateNewId()),name:Vt.KEBAB_CASE,type:we.string()},Gr=we.object(Ne),{z:V}=await c("zod"),Ht=g({appSlot:O},()=>V.object({...Ne,type:V.literal("backend"),enableStripe:V.boolean().optional(),enableSubscriptions:V.boolean().optional(),enableAxios:V.boolean().optional()})),Wr="backend",je=N("role");function Qr(e){return e}function Ee(e,t){if(t==null)return;if(t instanceof It)return{entities:[],references:[{...t.reference,path:[...e,...t.reference.path]}],slots:[]};const n={entities:[],references:[],slots:[]};if(Array.isArray(t)){for(const[o,r]of t.entries()){const a=Ee([...e,o],r);a&&(n.entities.push(...a.entities),n.references.push(...a.references),n.slots.push(...a.slots))}return n}if(typeof t=="object"){if(Ve in t){const o=t[Ve];n.entities.push(...o.entities.map(r=>({...r,path:[...e,...r.path]}))),n.references.push(...o.references.map(r=>({...r,path:[...e,...r.path]}))),n.slots.push(...o.slots.map(r=>({...r,path:[...e,...r.path]})))}for(const[o,r]of Object.entries(t)){if(typeof o!="string")continue;const a=Ee([...e,o],r);a&&(n.entities.push(...a.entities),n.references.push(...a.references),n.slots.push(...a.slots))}return n}}function xt(e){return Ee([],e)??{entities:[],references:[],slots:[]}}const{mapGroupBy:Gt}=await c("@baseplate-dev/utils");function Wt(e,t){let n=0;const o=Math.min(e.length,t.length);for(let r=0;r<o&&e[r]===t[r];r++)n++;return n}function gt(e=[],t){let n;for(const o of e){const r=Wt(o.path,t);(o.path.length===0||r>0)&&(!n||r>n.prefixLength)&&(n={prefixLength:r,slot:o})}return n?.slot}function Qt(e){const{entities:t,references:n,slots:o}=e,r=Gt(o,i=>i.slot.id),a=new Map;function s(i,l){const u=i.id,d=r.get(u)??[],w=gt(d,l);if(!w)throw new Error(`Could not find slot "${u.description??"unknown"}" within path ${l.join(".")}. Make sure the slot is registered for this path.`);const m=a.get(u)??[];a.set(u,[...m,{resolvedPath:l,path:w.path}])}for(const i of t)i.provides&&s(i.provides,[...i.path,...i.idPath]);for(const i of n)i.provides&&s(i.provides,i.path);return a}function Zt(e){const t=xt(e),n=Qt(t),o=Ft(e);function r(l,u){const d=gt(n.get(l.id),u);if(!d)throw new Error(`Could not resolve parent path from ${u.join(".")} for slot ${l.id.description}`);return d.resolvedPath}const a=t.entities.map(l=>({id:l.id,idPath:l.idPath,nameResolver:l.nameResolver,type:l.type,path:l.path,parentPath:l.parentSlot?r(l.parentSlot,l.path):void 0})),s=t.references.map(l=>({type:l.type,path:l.path,onDelete:l.onDelete,parentPath:l.parentSlot?r(l.parentSlot,l.path):void 0})),i=new Set;for(const l of t.entities){if(i.has(l.id))throw new Error(`Duplicate ID found: ${l.id}`);i.add(l.id)}return{data:o,references:s,entitiesWithNameResolver:a}}const{toposort:Yt}=await c("@baseplate-dev/utils");function Jt(e,{skipReferenceNameResolution:t=!1,allowInvalidReferences:n=!1}={}){const{entitiesWithNameResolver:o,references:r,data:a}=e,s=mt(o,d=>d.id),i=new Map,l=Yt(o.map(d=>d.id),o.flatMap(d=>{if(typeof d.nameResolver!="object")return[];const w=d.nameResolver.idsToResolve??{};return Object.values(w).flat().filter(m=>m in s).map(m=>[m,d.id])}));function u(d){if(t)return d;const w=i.get(d);if(!w){if(n)return d;throw new Error(`Could not resolve entity name for id: ${d}`)}return w.name}for(const d of l){const{nameResolver:w,...m}=s[d];if(typeof w=="string")i.set(m.id,{...m,name:w});else{const L=ct(w.idsToResolve??{},f=>Array.isArray(f)?f.map(D=>u(D)):u(f));i.set(m.id,{...m,name:w.resolveName(L)})}}return{entities:[...i.values()],references:r,data:a}}function fe(e,t,n,o){const r=dt({...n,transformReferences:!0}),s=e(r).parse(t),i=Zt(s);return Jt(i,o)}const{toposort:Xt}=await c("@baseplate-dev/utils");function Qe(e,t){return JSON.stringify({name:e,parentId:t})}function yt(e,t,n){const o=fe(e,t,n,{skipReferenceNameResolution:!0});return en(o)}function en(e){const{references:t,entities:n,data:o}=e;if(typeof o!="object"||o===null)throw new TypeError("Data is not an object");const r=ae(n,m=>m.id),a=Object.values(r).filter(m=>m.length>1);if(a.length>0)throw new Error(`Found multiple duplicate entity IDs: ${a.map(m=>`${m[0].id} (${m.map(L=>L.path.join(".")).join(",")})`).join(", ")}`);if(he(n.map(m=>m.id)).length!==n.length)throw new Error("Found duplicate entity IDs");const i=he(n.map(m=>m.type)),l=he(i.map(m=>m.name));if(l.length!==i.length)throw new Error("Found more entity types than entity type names implying duplicate entity type name");const u=Xt(l,i.filter(m=>!!m.parentType).map(m=>[m.parentType?.name??"",m.name])),d=ae(n,m=>m.type.name),w=ae(t,m=>m.type.name);for(const m of u){const L=d[m]??[],f=w[m]??[],D=mt(L,b=>{const{parentPath:F}=b,X=F?_(o,F):void 0;if(F&&typeof X!="string")throw new Error(`Could not resolve parent path: ${F.join(".")}`);return Qe(b.name,X)});for(const b of f){const F=_(o,b.path),X=b.parentPath&&_(o,b.parentPath),Ue=Qe(F,X),qe=D[Ue];if(!qe)throw new Error(`Unable to resolve reference: ${b.path.join(".")} (${b.type.name} ${Ue})`);se(o,b.path,qe.id)}}return e}const Ze="deleted-sentinel-id";function tn(e,t,n){const o=[];let r,a=t;for(r=0;r<100;r++){let m=function(f){if(f.length===0)return!1;const D=f.slice(0,-1),b=_(a,D);return Array.isArray(b)?(w.push({path:D,idx:f.at(-1)}),!0):!1};const s=fe(e,a,n,{allowInvalidReferences:!0}),{references:i,entities:l}=s;a=s.data;const u=new Map(l.map(f=>[f.id,f])),d=i.filter(f=>{const D=_(a,f.path);return D!==Ze&&!u.has(D)});if(d.length===0)return o.length>0?{type:"failure",issues:o}:{type:"success",value:a,refPayload:s};const w=[];for(const f of d){const D=_(a,f.path);switch(f.onDelete){case"SET_UNDEFINED":{if(f.path.length>0){const b=f.path.slice(0,-1),F=_(a,b);if(Array.isArray(F))throw new TypeError(`SET_UNDEFINED cannot be used for references inside arrays at path ${f.path.join(".")}. Use DELETE instead to remove the array element.`)}se(a,f.path,void 0);break}case"RESTRICT":{o.push({ref:f,entityId:D}),se(a,f.path,Ze);break}case"DELETE":{if(!m(f.path))throw new Error("Unable to find ref to cascade delete to");break}case"DELETE_PARENT":{if(!m(f.path.slice(0,-1)))throw new Error("Unable to find ref to cascade delete to");break}default:throw new Error(`Unknown onDelete action ${f.onDelete}`)}}const L=ae(w,f=>f.path.join("."));for(const[,f]of Object.entries(L)){const D=zt(f,[b=>-b.idx]);for(const b of D){const F=_(a,b.path);if(!Array.isArray(F))throw new TypeError(`Expected parent to be an array at path ${b.path.join(".")}`);F.splice(b.idx,1)}}}throw new Error("Exceeded max iterations fixing deletions")}function nn(e){const{references:t,entities:n,data:o}=e;if(typeof o!="object"||o===null)throw new TypeError("Data is not an object");const r=new Map(n.map(a=>[a.id,a]));return Fe(a=>{for(const s of t){const i=_(a,s.path),l=r.get(i);if(!l)throw new Error(`Could not find entity with ID: ${i} at ${s.path.join(".")}`);se(a,s.path,l.name)}})(o)}function on(e,t,n){const o=fe(e,t,n);return nn(o)}const rn=["string","uuid","int","boolean","dateTime","float","decimal","json","date","enum"],{z:H}=await c("zod"),de={PASCAL_CASE_STRING:H.string().regex(/^[A-Z][a-zA-Z0-9]*$/,"Should be PascalCase, e.g. 'MyModel'"),CAMEL_CASE_STRING:H.string().regex(/^[a-z][a-zA-Z0-9]*$/,"Should be camelCase, e.g. 'myField'"),CONSTANT_CASE_STRING:H.string().regex(/^[A-Z][A-Z0-9_]*$/,"Should be CONSTANT_CASE, e.g. 'MY_CONSTANT'"),OPTIONAL_CONSTANT_CASE_STRING:H.string().regex(/^[A-Z][A-Z0-9_]*$/,"Should be CONSTANT_CASE, e.g. 'MY_CONSTANT'").or(H.literal("")).optional()},{z:S}=await c("zod"),x=T(e=>e.withDefault(S.array(e.withRef({type:je,onDelete:"DELETE"})),[])),an=g({modelSlot:h},(e,{modelSlot:t})=>S.object({objectType:e.withDefault(S.object({enabled:e.withDefault(S.boolean(),!1),fields:e.withDefault(S.array(e.withRef({type:I,onDelete:"DELETE",parentSlot:t})),[]),localRelations:e.withDefault(S.array(e.withRef({type:Y,onDelete:"DELETE",parentSlot:t})),[]),foreignRelations:e.withDefault(S.array(e.withRef({type:Z,onDelete:"DELETE",parentSlot:t})),[])}),{}),queries:e.withDefault(S.object({get:e.withDefault(S.object({enabled:e.withDefault(S.boolean(),!1),roles:x(e)}),{}),list:e.withDefault(S.object({enabled:e.withDefault(S.boolean(),!1),roles:x(e)}),{})}),{}),mutations:e.withDefault(S.object({create:e.withDefault(S.object({enabled:e.withDefault(S.boolean(),!1),roles:x(e)}),{}),update:e.withDefault(S.object({enabled:e.withDefault(S.boolean(),!1),roles:x(e)}),{}),delete:e.withDefault(S.object({enabled:e.withDefault(S.boolean(),!1),roles:x(e)}),{})}),{})})),{z:Ce}=await c("zod"),bt={id:Ce.string(),type:Ce.string().min(1)},Zr=Ce.looseObject(bt);function Yr(e){return e}const{z:ee}=await c("zod"),sn=g({modelSlot:h},(e,{modelSlot:t})=>e.refContext({embeddedModelSlot:h},({embeddedModelSlot:n})=>e.withEnt(ee.object({...bt,foreignRelationRef:e.withRef({type:Z,onDelete:"DELETE_PARENT",parentSlot:t}),type:ee.literal("embeddedRelation"),embeddedFieldNames:ee.array(e.withRef({type:I,onDelete:"RESTRICT",parentSlot:n})),embeddedTransformerNames:ee.array(e.withRef({type:le,onDelete:"RESTRICT",parentSlot:n})).optional(),modelRef:e.withRef({type:h,onDelete:"RESTRICT",provides:n})}),{type:le,parentSlot:t,getNameResolver:o=>({idsToResolve:{foreignRelation:o.foreignRelationRef},resolveName:r=>r.foreignRelation})}))),ln=[{name:"embeddedRelation",createSchema:sn,getName:(e,t)=>e.nameFromId(t.foreignRelationRef)}],St=A("core/model-transformer",e=>({transformers:e.namedArrayToMap(ln)})),cn=await c("zod"),dn=g({modelSlot:h},(e,t)=>{const{transformers:n}=e.plugins.use(St);return cn.discriminatedUnion("type",[...n.values()].map(o=>o.createSchema(e,t)))}),{z:$}=await c("zod"),un=g({enumSlot:q},(e,{enumSlot:t})=>e.withEnt($.object({id:$.string(),name:$.string().min(1),friendlyName:$.string().min(1)}),{type:ut,parentSlot:t})),pn=g({enumSlot:q},(e,{enumSlot:t})=>$.object({id:$.string(),name:$.string().min(1),featureRef:e.withRef({type:Ie,onDelete:"RESTRICT"}),values:$.array(un(e,{enumSlot:t})),isExposed:$.boolean()})),mn=T(e=>e.refContext({enumSlot:q},({enumSlot:t})=>e.withEnt(pn(e,{enumSlot:t}),{type:q,provides:t}))),{z:p}=await c("zod"),fn=g({modelSlot:h},(e,{modelSlot:t})=>e.withEnt(p.object({id:p.string(),name:de.CAMEL_CASE_STRING,type:p.enum(rn),isOptional:p.boolean().default(!1),options:e.refContext({enumSlot:q},({enumSlot:n})=>p.object({default:p.string().default(""),genUuid:p.boolean().optional(),updatedAt:p.boolean().optional(),defaultToNow:p.boolean().optional(),enumRef:e.withRef({type:q,onDelete:"RESTRICT",provides:n}).optional(),defaultEnumValueRef:e.withRef({type:ut,onDelete:"RESTRICT",parentSlot:n}).optional()}).transform(o=>({...o,...o.enumRef?{}:{defaultEnumValueRef:void 0}})).prefault({}))}),{type:I,parentSlot:t}).superRefine((n,o)=>{const r=n.options.default,{type:a}=n;r&&a==="boolean"&&!["true","false"].includes(r)&&o.addIssue({path:["options","default"],code:"custom",message:"Default value must be true or false"})}).transform(n=>n.type!=="enum"&&n.options.enumRef?{...n,options:{...n.options,enumRef:void 0}}:n)),Ye=["Cascade","Restrict","NoAction","SetNull","SetDefault"],hn=g({modelSlot:h},(e,{modelSlot:t})=>e.refContext({foreignModelSlot:h},({foreignModelSlot:n})=>e.withEnt(e.withEnt(p.object({id:p.string(),foreignId:p.string().default(()=>Z.generateNewId()),name:de.CAMEL_CASE_STRING,references:p.array(p.object({localRef:e.withRef({type:I,onDelete:"RESTRICT",parentSlot:t}),foreignRef:e.withRef({type:I,onDelete:"RESTRICT",parentSlot:n})})),modelRef:e.withRef({type:h,onDelete:"RESTRICT",provides:n}),foreignRelationName:de.CAMEL_CASE_STRING,onDelete:p.enum(Ye).default("Cascade"),onUpdate:p.enum(Ye).default("Restrict")}),{type:Y,parentSlot:t}),{type:Z,idPath:["foreignId"],getNameResolver:o=>o.foreignRelationName,parentSlot:n}))),gn=g({modelSlot:h},(e,{modelSlot:t})=>e.withEnt(p.object({id:p.string(),fields:p.array(p.object({fieldRef:e.withRef({type:I,onDelete:"RESTRICT",parentSlot:t})}))}),{type:Se,parentSlot:t,getNameResolver(n){return{idsToResolve:{fields:n.fields.map(o=>o.fieldRef)},resolveName:o=>o.fields.join("_")}}})),yn=g({modelSlot:h},(e,{modelSlot:t})=>p.object({create:p.object({enabled:p.boolean().default(!1),fields:p.array(e.withRef({type:I,onDelete:"DELETE",parentSlot:t})).optional(),transformerNames:p.array(e.withRef({type:le,onDelete:"DELETE",parentSlot:t})).optional()}).default({enabled:!1}),update:p.object({enabled:p.boolean().default(!1),fields:p.array(e.withRef({type:I,onDelete:"DELETE",parentSlot:t})).optional(),transformerNames:p.array(e.withRef({type:le,onDelete:"DELETE",parentSlot:t})).optional()}).default({enabled:!1}),delete:p.object({enabled:p.boolean().default(!1)}).default({enabled:!1}),transformers:p.array(dn(e,{modelSlot:t})).default([])})),bn=g({modelSlot:h},(e,t)=>p.object({id:p.string(),name:de.PASCAL_CASE_STRING,featureRef:e.withRef({type:Ie,onDelete:"RESTRICT"}),model:p.object({fields:p.array(fn(e,t)),relations:p.array(hn(e,t)).optional(),primaryKeyFieldRefs:p.array(e.withRef({type:I,onDelete:"RESTRICT",parentSlot:t.modelSlot})).min(1),uniqueConstraints:p.array(gn(e,t)).optional()}),service:yn(e,t).default({create:{enabled:!1},update:{enabled:!1},delete:{enabled:!1},transformers:[]}),graphql:e.withDefault(an(e,t).optional(),{})})),Sn=T(e=>e.refContext({modelSlot:h},({modelSlot:t})=>e.withEnt(bn(e,{modelSlot:t}),{type:h,provides:t}))),R=N("admin-section",{parentType:O}),Jr=N("admin-crud-section-column",{parentType:R}),{z:G}=await c("zod"),kn=T(e=>G.object({id:G.string().default(R.generateNewId()),name:G.string().min(1),featureRef:e.withRef({type:Ie,onDelete:"RESTRICT"}),icon:G.string().optional(),type:G.string().min(1)})),{z:te}=await c("zod"),_e=te.looseObject({id:te.string().min(1).default(()=>Rn.generateNewId()),type:te.string().min(1),position:te.enum(["inline","dropdown"]).default("dropdown")});function Xr(e){return e}const Rn=N("admin-crud-action",{parentType:R}),{z:kt}=await c("zod"),wn=T(()=>_e.extend({type:kt.literal("edit")})),En={name:"edit",createSchema:wn},Cn=T(()=>_e.extend({type:kt.literal("delete")})),Tn={name:"delete",createSchema:Cn},An=[En,Tn],Dn=A("core/admin-crud-action",e=>({actions:e.namedArrayToMap(An)})),vn=T(e=>{const t=e.plugins.use(Dn).actions;return _e.transform(n=>{const o=t.get(n.type);return o?o.createSchema(e).parse(n):n})}),{z:ne}=await c("zod"),$e=ne.looseObject({id:ne.string().min(1).default(()=>In.generateNewId()),type:ne.string().min(1),label:ne.string().min(1)});function ea(e){return e}const In=N("admin-crud-column",{parentType:R}),{z:ie}=await c("zod"),Fn=g({modelSlot:h},(e,{modelSlot:t})=>$e.extend({type:ie.literal("text"),modelFieldRef:e.withRef({type:I,onDelete:"RESTRICT",parentSlot:t})})),Mn={name:"text",createSchema:Fn},Pn=g({modelSlot:h},(e,{modelSlot:t})=>$e.extend({type:ie.literal("foreign"),localRelationRef:e.withRef({type:Y,onDelete:"RESTRICT",parentSlot:t}),labelExpression:ie.string().min(1),valueExpression:ie.string().min(1)})),Nn={name:"foreign",createSchema:Pn},jn=[Mn,Nn],_n=A("core/admin-crud-column",e=>({columns:e.namedArrayToMap(jn)})),Rt=g({modelSlot:h},(e,t)=>{const n=e.plugins.use(_n).columns;return $e.transform(o=>{const r=n.get(o.type);return r?r.createSchema(e,t).parse(o):o})}),{z:oe}=await c("zod"),K=oe.looseObject({id:oe.string().min(1).default(()=>$n.generateNewId()),type:oe.string().min(1),label:oe.string().min(1)});function ta(e){return e}const ze=N("admin-crud-embedded-form",{parentType:R}),$n=N("admin-crud-input",{parentType:R}),{z:C}=await c("zod"),zn=g({modelSlot:h,adminSectionSlot:R},(e,{modelSlot:t})=>K.extend({type:C.literal("text"),label:C.string().min(1),modelFieldRef:e.withRef({type:I,onDelete:"RESTRICT",parentSlot:t}),validation:C.string().optional()})),On={name:"text",createSchema:zn},Ln=g({modelSlot:h,adminSectionSlot:R},(e,{modelSlot:t})=>K.extend({type:C.literal("foreign"),label:C.string().min(1),localRelationRef:e.withRef({type:Y,onDelete:"RESTRICT",parentSlot:t}),labelExpression:C.string().min(1),valueExpression:C.string().min(1),defaultLabel:C.string().optional(),nullLabel:C.string().optional()})),Bn={name:"foreign",createSchema:Ln},Kn=g({modelSlot:h,adminSectionSlot:R},(e,{modelSlot:t})=>K.extend({type:C.literal("enum"),label:C.string().min(1),modelFieldRef:e.withRef({type:I,onDelete:"RESTRICT",parentSlot:t})})),Un={name:"enum",createSchema:Kn},qn=g({modelSlot:h,adminSectionSlot:R},(e,{modelSlot:t,adminSectionSlot:n})=>K.extend({type:C.literal("embedded"),label:C.string().min(1),modelRelationRef:e.withRef({type:Z,onDelete:"RESTRICT",parentSlot:t}),embeddedFormRef:e.withRef({type:ze,parentSlot:n,onDelete:"RESTRICT"})})),Vn={name:"embedded",createSchema:qn},Hn=g({modelSlot:h,adminSectionSlot:R},(e,{modelSlot:t,adminSectionSlot:n})=>K.extend({type:C.literal("embeddedLocal"),label:C.string().min(1),localRelationRef:e.withRef({type:Y,onDelete:"RESTRICT",parentSlot:t}),embeddedFormRef:e.withRef({type:ze,parentSlot:n,onDelete:"RESTRICT"})})),xn={name:"embeddedLocal",createSchema:Hn},Gn=T(()=>K.extend({type:C.literal("password"),label:C.string().min(1)})),Wn={name:"password",createSchema:Gn},Qn=[On,Bn,Un,Vn,xn,Wn],Zn=A("core/admin-crud-input",e=>({inputs:e.namedArrayToMap(Qn)})),Oe=g({modelSlot:h,adminSectionSlot:R},(e,t)=>{const n=e.plugins.use(Zn).inputs;return K.transform(o=>{const r=n.get(o.type);return r?r.createSchema(e,t).parse(o):o})}),{z:y}=await c("zod"),Yn=g({modelSlot:h,adminSectionSlot:R},(e,{modelSlot:t,adminSectionSlot:n})=>y.object({id:y.string().min(1),name:y.string().min(1),modelRef:e.withRef({type:h,onDelete:"RESTRICT",provides:t}),includeIdField:y.boolean().optional(),type:y.literal("object"),form:y.object({fields:y.array(Oe(e,{modelSlot:t,adminSectionSlot:n}))})})),Jn=g({modelSlot:h,adminSectionSlot:R},(e,{modelSlot:t,adminSectionSlot:n})=>y.object({id:y.string().min(1),name:y.string().min(1),modelRef:e.withRef({type:h,onDelete:"RESTRICT",provides:t}),includeIdField:y.boolean().optional(),type:y.literal("list"),table:y.object({columns:y.array(Rt(e,{modelSlot:t}))}),form:y.object({fields:y.array(Oe(e,{modelSlot:t,adminSectionSlot:n}))})})),Xn=g({adminSectionSlot:R},(e,{adminSectionSlot:t})=>e.refContext({modelSlot:h},({modelSlot:n})=>e.withEnt(y.discriminatedUnion("type",[Yn(e,{modelSlot:n,adminSectionSlot:t}),Jn(e,{modelSlot:n,adminSectionSlot:t})]),{type:ze,parentSlot:t}))),eo=g({adminSectionSlot:R},(e,{adminSectionSlot:t})=>e.refContext({modelSlot:h},({modelSlot:n})=>kn(e).and(y.object({type:y.literal("crud"),modelRef:e.withRef({type:h,onDelete:"RESTRICT",provides:n}),nameFieldRef:e.withRef({type:I,onDelete:"RESTRICT",parentSlot:n}),disableCreate:e.withDefault(y.boolean(),!1),table:y.object({columns:y.array(Rt(e,{modelSlot:n})),actions:e.withDefault(y.array(vn(e)),[{type:"edit",position:"inline"},{type:"delete",position:"dropdown"}])}),form:y.object({fields:y.array(Oe(e,{modelSlot:n,adminSectionSlot:t}))}),embeddedForms:y.array(Xn(e,{adminSectionSlot:t})).optional()})))),{z:W}=await c("zod"),to=g({appSlot:O},(e,{appSlot:t})=>e.refContext({adminSectionSlot:R},({adminSectionSlot:n})=>e.withEnt(eo(e,{adminSectionSlot:n}),{type:R,parentSlot:t,provides:n}))),no=g({appSlot:O},(e,{appSlot:t})=>e.withDefault(W.object({enabled:W.boolean(),pathPrefix:W.string().default("/admin"),allowedRoles:e.withDefault(W.array(e.withRef({type:je,onDelete:"DELETE"})),[]),sections:e.withDefault(W.array(to(e,{appSlot:t})),[])}),{enabled:!1,pathPrefix:"/admin"})),{z:B}=await c("zod"),oo=g({appSlot:O},(e,{appSlot:t})=>B.object({...Ne,type:B.literal("web"),includeAuth:e.withDefault(B.boolean(),!1),title:B.string().default(""),description:B.string().default(""),includeUploadComponents:e.withDefault(B.boolean(),!1),enableSubscriptions:e.withDefault(B.boolean(),!1),adminApp:no(e,{appSlot:t})})),na="web",ue=N("library"),{CASE_VALIDATORS:ro}=await c("@baseplate-dev/utils"),{z:Te}=await c("zod"),wt={id:Te.string().default(ue.generateNewId()),name:ro.KEBAB_CASE,type:Te.string()},oa=Te.object(wt);function ra(e){return Me(e,t=>t!==void 0&&!(Array.isArray(t)&&t.length===0))}function ao(e){return Me(e,t=>t!==void 0)}function aa(e){if(e!==null&&!(Array.isArray(e)&&e.length===0)&&!(typeof e=="object"&&Object.keys(e).every(t=>e[t]===void 0)))return e}function ia(e){if(e)return e}class io{instances;useInstances=new Map;constructor(t=new Map){this.instances=t}use(t){let n=this.instances.get(t.name);n||(n=t.initializer(),this.instances.set(t.name,n));let o=this.useInstances.get(t.name);return o||(o=n.use(),this.useInstances.set(t.name,o)),o}}const{assertNoDuplicates:so}=await c("@baseplate-dev/utils");function lo(e){const t=new Map;function n(o){if(!t.has(o.name)){const r=o.initializer();t.set(o.name,r)}return t.get(o.name)}for(const{module:o,key:r,pluginKey:a}of e){const s=o.dependencies?ao(ct(o.dependencies,i=>n(i).init)):{};Mt({moduleKey:r,pluginKey:a},()=>{o.initialize(s,{moduleKey:r,pluginKey:a})})}return t}function co(e){so(e,"plugin modules",n=>n.key);const t=lo(e);return new io(t)}function sa(e){return e}function uo(e,t){return e.availablePlugins.find(n=>n.metadata.key===t)?.metadata}function Ae(e,t){const n=uo(e,t);if(!n)throw new Error(`Could not find plugin with key ${t}`);return n}function la(e,t){const n=Ae(e,t);return e.availablePlugins.filter(o=>o.metadata.managedBy===n.fullyQualifiedName).map(o=>o.metadata)}const{z:k}=await c("zod"),po=k.string().regex(/^(\d+\.\d+\.\d+)$/),mo=k.object({spec:k.string().min(1),version:k.string().min(1)}),fo=k.object({spec:k.string(),version:k.string()}),ca=k.object({name:k.string().min(1).regex(/^[a-z0-9-]+$/),moduleDirectories:k.array(k.string()).optional(),displayName:k.string().min(1),icon:k.string().optional(),description:k.string(),managedBy:k.string().optional(),version:po,specs:k.object({exports:k.array(mo).optional(),dependencies:k.array(fo).optional()}).optional(),hidden:k.boolean().optional()}),P=N("plugin"),{mapValuesOfMap:ho}=await c("@baseplate-dev/utils");function go(e,t){const n=[...e].sort((o,r)=>o.version-r.version);if(n.some(o=>o.version<=0))throw new Error(`All migrations for plugin ${t} must have a positive version`);for(let o=0;o<n.length-1;o++)if(n[o].version===n[o+1].version)throw new Error(`All migrations for plugin ${t} must have a unique version`);return n}const Le=A("core/plugin-config",e=>({schemas:e.map(),migrations:e.map()}),{use:e=>{const t=ho(e.migrations,(n,o)=>go(n,o));return{getSchemaCreator:n=>e.schemas.get(n),getMigrations:n=>t.get(n),getLastMigrationVersion:n=>{const o=e.migrations.get(n);return o?.[o.length-1]?.version}}}});function da(e,t){const n=t.use(Le);return Fe(e,o=>{for(const r of o.plugins??[]){const a=n.getMigrations(P.keyFromId(r.id)),s=r.configSchemaVersion??-1;if(!a)continue;const i=a.at(-1);if(i){for(const l of a)if(l.version>s)try{const u=l.migrate(r.config,o);u.updatedConfig!==void 0&&(r.config=u.updatedConfig),u.updateProjectDefinition&&u.updateProjectDefinition(o)}catch(u){throw new Error(`Error migrating plugin ${r.id} to version ${l.version}: ${String(u)}`)}r.configSchemaVersion=i.version}}})}const ua=A("core/auth-config",e=>({getAuthConfig:e.scalar()}),{use:e=>({getAuthConfig:t=>e.getAuthConfig?.(t),getAuthConfigOrThrow:t=>{const n=e.getAuthConfig?.(t);if(!n)throw new Error("Auth config not found");return n}})}),pa=A("core/auth-models",e=>({getAuthModels:e.scalar()}),{use:e=>({getAuthModels:t=>e.getAuthModels?.(t),getAuthModelsOrThrow:t=>{const n=e.getAuthModels?.(t);if(!n)throw new Error("Auth models not found");return n}})}),ma=A("core/web-config",e=>({components:e.map()})),{z}=await c("zod"),Et=z.object({id:z.string(),packageName:z.string(),name:z.string(),version:z.string(),config:z.unknown(),configSchemaVersion:z.number().optional()}),yo=T(e=>e.withEnt(Et,{type:P}).transform(t=>{const n=P.keyFromId(t.id),o=e.plugins.use(Le).getSchemaCreator(n);return o?{...t,config:o(e).parse(t.config)}:t})),bo=T(e=>z.array(yo(e))),Je=await c("zod"),So=g({librarySlot:ue},()=>Je.object({...wt,type:Je.literal("node-library")})),ko={name:"node-library",definitionSchema:So};function fa(e){return e}const Ro=A("core/library-type",e=>({schemaCreators:e.namedArrayToMap([ko]),compilerCreators:e.namedArrayToMap(),webConfigs:e.namedArrayToMap()})),wo=await c("zod"),Eo=T(e=>e.refContext({librarySlot:ue},({librarySlot:t})=>{const o=[...e.plugins.use(Ro).schemaCreators.values()].map(r=>r.definitionSchema(e,{librarySlot:t}));return e.withEnt(wo.discriminatedUnion("type",o),{type:ue,provides:t})})),{CASE_VALIDATORS:Xe}=await c("@baseplate-dev/utils"),{z:re}=await c("zod"),Co=re.object({name:Xe.KEBAB_CASE,packageScope:re.union([re.literal(""),Xe.KEBAB_CASE]).default(""),portOffset:re.number().min(1e3).max(6e4).int().refine(e=>e%1e3===0,"Port offset must be a multiple of 1000, e.g. 1000, 2000, 3000, etc.")}),{z:ge}=await c("zod"),To=ge.object({redis:ge.object({enabled:ge.boolean().default(!1)}).optional()}),{CASE_VALIDATORS:et}=await c("@baseplate-dev/utils"),{z:Ao}=await c("zod"),Do=Ao.object({appsFolder:et.KEBAB_CASE.min(1).max(50).regex(/^[a-z0-9-]+$/,{message:"Apps folder must contain only lowercase letters, numbers, and dashes (no slashes)"}).default("apps"),librariesFolder:et.KEBAB_CASE.min(1).max(50).regex(/^[a-z0-9-]+$/,{message:"Libraries folder must contain only lowercase letters, numbers, and dashes (no slashes)"}).default("libs")}),{z:ye}=await c("zod"),vo=T(()=>ye.object({writeMetadata:ye.boolean().default(!1),fileIdRegexWhitelist:ye.string().default("")})),{z:M}=await c("zod"),De=M.string().regex(/^oklch\(\s*([\d.]+)\s+([\d.]+)\s+([\d.]+)(?:\s*\/\s*([\d.]+))?\s*\)$/,{message:'OKLCH color must be of the format "oklch(l c h [/ a])" where l and c are between 0 and 1 and h is between 0 and 360 and a is between 0 and 100'}),tt=M.record(M.enum(Lt),De.optional()),pe=M.object({paletteName:M.string().min(1),customBase:De.nullish(),shades:M.record(M.enum(Ot),De)}).refine(e=>e.paletteName!=="custom"||!!e.customBase,{message:"A custom base color is required if using a custom base palette",path:["customBase"]}),ha=M.object({base:pe,primary:pe}),Io=T(()=>M.object({palettes:M.object({base:pe,primary:pe}),colors:M.object({light:tt,dark:tt})})),{z:Fo}=await c("zod"),Mo=T(e=>Fo.object({general:Co,infrastructure:To.optional(),monorepo:Do.optional(),templateExtractor:vo(e).optional(),theme:Io(e).optional()})),{z:j}=await c("zod"),Po=T(e=>e.refContext({appSlot:O},({appSlot:t})=>e.withEnt(j.discriminatedUnion("type",[Ht(e,{appSlot:t}),oo(e,{appSlot:t})]),{type:O,provides:t}))),U=T(e=>j.object({cliVersion:j.string().nullish(),apps:j.array(Po(e)).default([]),libraries:j.array(Eo(e)).default([]),features:Pt(e),models:j.array(Sn(e)).default([]),enums:j.array(mn(e)).optional(),isInitialized:j.boolean().default(!1),schemaVersion:j.number(),plugins:bo(e).optional(),settings:Mo(e)}));function Ct(e,t){return e.enums?.find(n=>n.id===t)}function No(e,t){const n=Ct(e,t);if(!n)throw new Error(`Could not find enum with ID ${t}`);return n}const ga={byId:Ct,byIdOrThrow:No};function jo(e,t){const{primaryKeyFieldRefs:n}=e.model,o=e.model.uniqueConstraints??[];return n.length===1&&n.includes(t)||o.some(r=>r.fields.length===1&&r.fields[0].fieldRef===t)}function Tt(e,t){const n=[...t].sort();return(He([...e.model.primaryKeyFieldRefs].sort(),n)||e.model.uniqueConstraints?.some(o=>He(o.fields.map(r=>r.fieldRef).sort(),n)))??!1}function Be(e,t){return t.references.map(n=>{const o=e.model.fields.find(r=>r.id===n.localRef);if(!o)throw new Error(`Could not find field ${n.localRef} from relation ${t.name} in model ${e.name}`);return o})}function _o(e,t){const n=e.model.relations?.find(o=>o.id===t);if(!n)throw new Error(`Relation ${t} not found in model ${e.name}`);return n}function $o(e,t){return Be(e,t).some(o=>o.isOptional)}function zo(e,t){const o=Be(e,t).map(r=>r.id).sort();return Tt(e,o)}function Oo(e){switch(e.type){case"boolean":return"boolean()";case"date":return"string()";case"int":return"int()";case"float":return"number()";case"dateTime":case"string":case"decimal":case"uuid":return"string()";default:throw new Error(`Unsupported validator for ${e.type}`)}}function Lo(e,t,n,o){const r=Nt.byIdOrThrow(e,t),a=r.model.fields.find(l=>l.id===n);if(!a)throw new Error(`Field ${n} not found in model ${r.name}`);const s=a.isOptional?".nullish()":"",i=`z.${Oo(a)}${s}`;return i}const ya={isScalarUnique:jo,areScalarsUnique:Tt,getRelationLocalFields:Be,isRelationOptional:$o,isRelationOneToOne:zo,getModelFieldValidation:Lo,relationByIdOrThrow:_o};function Bo(e,t,n){const{transformers:o}=n.use(St),r=o.get(t.type);if(!r)throw new Error(`Unable to find transformer with name ${t.type}`);return r.getName(e,t)}const ba={getTransformerName:Bo};function Ko(e,t){const n=e.libraries.find(o=>o.id===t);if(!n)throw new Error(`Unable to find library with ID ${t}`);return n}function Uo(e,t){const n=e.libraries.filter(o=>o.type===t);if(n.length===0)throw new Error(`Unable to find library with type ${t}`);if(n.length>1)throw new Error(`Multiple libraries with type ${t} found and only one is expected (${n.map(o=>o.name).join(", ")})`);return n[0]}function qo(e,t){return`${t?.librariesFolder??"libs"}/${e.name}`}const Sa={byId:Ko,byUniqueTypeOrThrow:Uo,getLibraryDirectory:qo},{z:nt}=await c("zod");function J(e,t){const{availablePlugins:n,coreModules:o}=e,r=nt.object({plugins:nt.array(Et).optional()}).parse(t),{plugins:a=[]}=r,s=a.flatMap(i=>{const l=n.find(({metadata:u})=>u.name===i.name&&u.packageName===i.packageName);if(!l)throw new Error(`Unable to find plugin ${i.packageName}/${i.name}!`);return l.modules.map(u=>({key:`${l.metadata.key}/${u.directory}/${u.module.name}`,pluginKey:l.metadata.key,module:u.module}))});return co([...s,...o])}function Vo(e,t,n){const o={...n,plugins:[...n.plugins??[],...t.filter(r=>!n.plugins?.some(a=>a.id===P.idFromKey(r.key))).map(r=>({id:P.idFromKey(r.key),version:r.version,name:r.name,packageName:r.packageName,config:void 0}))]};return J(e,o)}function Ho(e,t){const{pluginStore:n}=t,o=J(n,e),r=dt({plugins:o});return U(r)}function ka(e,t){return Ho(e,t).parse(e)}function xo(e,t){const{pluginStore:n}=t,o=J(n,e);return{definition:fe(U,e,{plugins:o}),pluginStore:o}}function Ke(e,t){const n=P.idFromKey(t);return e.plugins?.find(r=>r.id===n)}function At(e,t){const n=Ke(e,t);if(!n)throw new Error(`Could not find plugin with ID ${t}`);return n}function Go(e,t){return Ke(e,t)?.config}function Wo(e,t){return At(e,t).config}function Qo(e,t,n,o){const r=e.plugins??[],a=P.idFromKey(t.key);if(!r.some(i=>i.id===a)){const u=Vo(o.parserContext.pluginStore,[t],o.definition).use(Le).getLastMigrationVersion(t.key);e.plugins=[...r,{id:a,name:t.name,version:t.version,packageName:t.packageName,config:n,configSchemaVersion:u}]}else e.plugins=r.map(i=>a===i.id?{...i,config:n}:i)}function Dt(e,t,n){const o=Ae(n.pluginStore,t),r=e.plugins?.filter(a=>Ae(n.pluginStore,P.keyFromId(a.id)).managedBy===o.fullyQualifiedName);if(r)for(const a of r)Dt(e,a.id,n);e.plugins=e.plugins?.filter(a=>a.id!==P.idFromKey(t))}const Ra={byKey:Ke,byKeyOrThrow:At,configByKey:Go,setPluginConfig:Qo,configByKeyOrThrow:Wo,disablePlugin:Dt},{stringifyPrettyStable:Zo}=await c("@baseplate-dev/utils");class me{refPayload;definition;references;entities;parserContext;pluginStore;constructor(t,n,o){this.refPayload=t,this.definition=t.data,this.references=t.references,this.entities=t.entities,this.parserContext=n,this.pluginStore=o}nameFromId(t){if(!t)return;const n=this.entities.find(o=>o.id===t)?.name;if(!n)throw new Error(`Could not find name for id ${t}`);return n}safeNameFromId(t){return t?this.entities.find(o=>o.id===t)?.name:void 0}fixRefDeletions(t){const n=Fe(t)(this.definition);return tn(U,n,{plugins:this.pluginStore})}toSerializedContents(){const t=on(U,this.definition,{defaultMode:"strip",plugins:this.pluginStore});return Zo(t)}static fromDefinition(t,n){const{definition:o,pluginStore:r}=xo(t,n);return new me(o,n,r)}static fromSerializedConfig(t,n){const o=J(n.pluginStore,t);return new me(yt(U,t,{plugins:o}),n,o)}}const Yo={version:5,name:"primaryUniqueRefs",description:"Store primary key in primaryKeyFieldRefs field and unique constraints in unique constraints field",migrate:e=>({...e,models:e.models.map(t=>{const n=t.model,o=n.primaryKeys?.length?n.primaryKeys:n.fields.filter(r=>r.isId).map(r=>r.name);return{...t,model:{...ke(n,["primaryKeys","uniqueConstraints"]),primaryKeyFieldRefs:o,fields:n.fields.map(r=>ke(r,["isId","isUnique"])),uniqueConstraints:[...n.uniqueConstraints?.map(r=>({id:Se.generateNewId(),fields:r.fields.map(a=>({fieldRef:a.name}))}))??[],...n.fields.filter(r=>r.isUnique).map(r=>({id:Se.generateNewId(),fields:[{fieldRef:r.name}]}))]}}})})},Jo={version:6,name:"individualServiceControllers",description:"Make service controller fields individually enabled",migrate:e=>({...e,models:e.models.map(t=>{const{build:n,create:o,update:r,delete:a,...s}=t.service??{};if(!n)return ke(t,["service"]);const i=o&&(!!o.fields?.length||!!o.transformerNames?.length),l=r&&(!!r.fields?.length||!!r.transformerNames?.length),u=!a?.disabled;return{...t,service:{...s,create:i?{...o,enabled:!0}:void 0,update:l?{...r,enabled:!0}:void 0,delete:u?{enabled:!0}:void 0}}})})};function ot(e){return Me(e,t=>t!==void 0)}function rt(e){return Object.keys(e).every(t=>e[t]===void 0)?void 0:e}const Xo={version:7,name:"modelGraphql",description:"Migrate model schema to GraphQL schema",migrate:e=>({...e,models:e.models.map(t=>{const{schema:n,...o}=t,{b